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