Dafny 中的类型约束:为二元关系类型实现 "Show"

Type constraints in Dafny: Implementing "Show" for a binary relation type

我在 Dafny 中定义了一个多态二元关系类型(class):

class binRel<S,T>

实际申报为:

class binRel<S(!new,==),T(!new,==)>. 

我想添加一个新的类型约束:类型 S 和 T 应该实现一个 "show" 操作(返回一个字符串)。

我对 Dafny 参考手册的阅读表明 Dafny 仅支持一些内置类型约束:==,显然是 !new,并且没有办法要求该类型支持,例如某些特定特征。

也许我错了,比参考手册更新的更新提供了这样的功能。我运气好吗?如果没有,是否有解决方法?

正确,Dafny 中只有少数内置类型约束。没有机制要求类型扩展特征。

我不知道 Dafny 的 object-oriented/imperative 片段有什么好的解决方法。在纯片段中,您可以使用 first-class 函数解决此问题。

datatype MyPair<A,B> = MakePair(a: A, b: B)

type Show<!A> = A -> string

function ShowMyPair<A,B>(sa: Show<A>, sb: Show<B>): Show<MyPair<A,B>>
{
  (p: MyPair<A,B>) => "(" + sa(p.a) + "," + sb(p.b) + ")"
}