关于阿格达的平等

我是Agda的新手。我有以下代码要证明。现在我有问题lemma1c。 因为它要我证明z = a时z等于c。我有一个= c和c = c,以及trans函数。所以我想写

lemma1c = trans {z = a},{a = c}

但是我想让z不在范围内。我该怎么解决?


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}

kuailedechongzi 回答:关于阿格达的平等

您必须使用显式参数(不带括号)调用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,{ {1}}和x是。同样,通过将y标记为隐式参数,您无需将其显式传递给{z},并且通常不需要在行lemma1c上将其匹配。

本文链接:https://www.f2er.com/2937097.html

大家都在问