[英]About equality in Agda
我是 Agda 的新手。 我有以下代碼要證明。 現在我有 lemma1c 的問題。 因為它要我證明當 z = a 時,z 將等於 c。 我有 a = c 和 c = c,以及 trans 函數。 所以我試着寫
lemma1c = trans {z = a}, {a = c}
但我想得到 z is not in scope 錯誤。 我該如何解決這個問題?
postulate A : Set a : A b : A c : A p : a ≡ b q : b ≡ c trans : ∀ {ℓ}{A : Set ℓ}{x y z : A} → x ≡ y → y ≡ z → x ≡ z trans refl refl = refl lemma0 : c ≡ c lemma0 = refl -- Goal: c ≡ c, refl: x ≡ x lemma1a : a ≡ c lemma1a rewrite p = q lemma1c : ∀ {z : A} → z ≡ a → z ≡ c lemma1c {z} = trans {} {lemma1a}
您必須使用顯式參數(不帶括號)調用trans
函數,這會導致以下定義:
lemma1c : ∀ {z : A} → z ≡ a → z ≡ c
lemma1c z≡a = trans z≡a lemma1a
您還可以像在前面的引理中一樣使用rewrite
:
lemma1d : ∀ {z : A} → z ≡ a → z ≡ c
lemma1d z≡a rewrite lemma1a = z≡a
花括號用於標記隱式參數。 也就是說,通常 Agda 可以從上下文中計算出的參數 - 例如,通過將依賴類型的x ≡ y
傳遞給trans
您已經告訴 Agda ℓ
、 A
、 x
和y
是什么。 同樣,通過將{z}
標記為隱式參數,您不需要將其顯式傳遞給lemma1c
,並且通常不需要在lemma1c {z} = ...
行匹配它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.