Functional programming 关于Agda中的平等

Functional programming 关于Agda中的平等,functional-programming,agda,Functional Programming,Agda,我是阿格达的新手。我有下面的代码,我想证明。现在我的智力有问题。 因为它要我证明当z=a时,z等于c。我有a=c和c=c,还有反函数。所以我试着写 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

我是阿格达的新手。我有下面的代码,我想证明。现在我的智力有问题。 因为它要我证明当z=a时,z等于c。我有a=c和c=c,还有反函数。所以我试着写

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} 假设 A:一套 a:a b:A c:A p:a≡ B q:b≡ C 反式:∀ {ℓ}{A:集ℓ}{x y z:A}→ x≡ Y→ Y≡ Z→ x≡ Z trans refl refl=refl 引理0:c≡ C 引理0=refl --目标:c≡ c、 refl:x≡ x 引理1a:a≡ C 引理1重写p=q 引理1c:∀ {z:A}→ Z≡ A.→ Z≡ C 引理1c{z}=trans{}{lemma1a}
您必须使用显式参数(不带括号)调用
trans
函数,这将导致以下定义:

lemma1c : ∀ {z : A} → z ≡ a → z ≡ c
lemma1c z≡a = trans z≡a lemma1a
您也可以像在前面的引理中那样使用
重写

lemma1d : ∀ {z : A} → z ≡ a → z ≡ c
lemma1d z≡a rewrite lemma1a = z≡a

您必须使用显式参数(不带括号)调用
trans
函数,这将导致以下定义:

lemma1c : ∀ {z : A} → z ≡ a → z ≡ c
lemma1c z≡a = trans z≡a lemma1a
您也可以像在前面的引理中那样使用
重写

lemma1d : ∀ {z : A} → z ≡ a → z ≡ c
lemma1d z≡a rewrite lemma1a = z≡a

花括号用于标记隐式参数。也就是说,Agda通常可以通过传递依赖类型的
x,从上下文中计算出参数≡ y
to
trans
您已经告诉Agda什么
A
x
y
都是。类似地,通过将
{z}
标记为隐式参数,您不需要显式地将其传递给
lemma1c
,并且通常不需要在
lemma1c{z}行上匹配它=…

大括号用于标记隐式参数。也就是说,Agda通常可以通过传递依赖类型的
x从上下文中计算出参数≡ y
to
trans
您已经告诉Agda什么
A
x
y
都是。类似地,通过将
{z}
标记为隐式参数,您不需要显式地将其传递给
lemma1c
,并且通常不需要在
lemma1c{z}=…
行上匹配它