簡體   English   中英

關於 Agda 中的平等

[英]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 Axy是什么。 同樣,通過將{z}標記為隱式參數,您不需要將其顯式傳遞給lemma1c ,並且通常不需要在lemma1c {z} = ...行匹配它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM