3
假设我的数据类型与存在量化组件存在一个小问题。这次我想定义何时两个值类型ext
相等。模式匹配的类型为了实现Coq中存在类型的构造函数的相等性
Inductive ext (A: Set) :=
| ext_ : forall (X: Set), option X -> ext A.
Fail Definition ext_eq (A: Set) (x y: ext A) : Prop :=
match x with
| ext_ _ ox => match y with
| ext_ _ oy => (* only when they have the same types *)
ox = oy
end
end.
我想要做的是以某种方式区分存在类型实际上相同和不存在的情况。这是JMeq的情况还是有其他方式来完成这种情况区分?
我google了很多,但不幸的是我大多偶然发现关于依赖模式匹配的帖子。
我也试着用Scheme Equality for ext
生成一个(布尔型)方案,但是由于类型参数,这是不成功的。
不错的解决方法!让我添加一些注释:(1)'Code_eq_dec'可以* literally *使用'决定平等'的策略来定义,当我们开始在'Code'中添加更多的数据构造函数时,这真的会发光。 (2)可以使用'let'表达式来破坏'ext_'(因为它只有一个构造函数),这使得代码更加简洁:'let(c,ox):= x in ...' –
, 谢谢!我不记得那个“决定平等”战术的名字,尝试过我想到的各种关键词组合,并最终放弃了。很高兴知道'let'也可以打破任何单构造函数的数据类型。 – gallais
我只想补充一点,不幸的是,这种解决方法对于我的设置来说太过于限制,但您的回答和评论毕竟是有帮助的。 – ichistmeinname