Dafny中的类型约束:实现"显示"对于二元关系类型

时间:2018-03-05 15:24:43

标签: dafny

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

class binRel<S,T>

实际声明是:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

我不知道Dafny的面向对象/命令式片段的好方法。在纯片段中,您可以使用第一类函数来解决这个问题。

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) + ")"
}