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