1
看來,要證明記錄類型的兩個項目是等價的,我需要編寫一個幫助程序,它需要組件明智的證明並應用它們。 一個例子:Agda中記錄的平等
postulate P : ℕ → Set
record Silly : Set (ℓsuc ℓ₀) where
constructor _#_#_
field
n : ℕ
pn : P n
f : Set → ℕ
open Silly
SillyEq : ∀ s t → n s ≡ n t → pn s ≅ pn t → f s ≡ f t → s ≡ t
SillyEq (n # pn # f) (.n # .pn # .f) ≡-refl ≅-refl ≡-refl = ≡-refl
我覺得SillyEq
應該以某種方式提供給我的,我不需要寫自己--or是我錯了。
此外,我不能證明SillyEq
沒有聲明一個構造函數,然後模式匹配就可以了。
感謝您的協助!
也許這兩種形式的平等混合並不是最好的,但是僅僅使用異質平等的主要缺點是什麼? 也就是說,就你所知,證明記錄類型的平等性的唯一方法是使用cong的變體? –
@Musa Al-hassy,只需使用異構平等即可。當'x≅y'中的'x'和'y'具有相同的類型時,'_≅_'的作用與'_≡_'相同並且沒有問題,您只需要稍微更明確的類型。但是當'x:A i'和'y:j''你失去了在'x≅y'上使用標準'cong','subst'和類似的東西的能力。我更喜歡定義一個包裝器(類似於[this](http://dlicata.web.wesleyan.edu/pubs/lb15cubicalsynth/lb15cubicalsynth.pdf)中的'PathOver'文件,其中包含'indeq:i≡j'和'valeq :x≅y'並定義新的'cong'和'subst'填充它。 – user3237465
@Musa Al-hassy,某些記錄在定義上與'all-eq:{xy:⊤} - > x≡y'相等或'記錄R:設置字段.n:ℕ; all-eq₂:{rs:R} - > r≡s',但其他需要證明。你怎麼知道兩個元組相等而不知道它們的投影是相等的?或者你想保留什麼? – user3237465