Functional programming 关于Agda中的平等
我是阿格达的新手。我有下面的代码,我想证明。现在我的智力有问题。 因为它要我证明当z=a时,z等于c。我有a=c和c=c,还有反函数。所以我试着写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
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
totrans
您已经告诉Agda什么ℓ
、A
、x
和y
都是。类似地,通过将{z}
标记为隐式参数,您不需要显式地将其传递给lemma1c
,并且通常不需要在lemma1c{z}行上匹配它=…
大括号用于标记隐式参数。也就是说,Agda通常可以通过传递依赖类型的x从上下文中计算出参数≡ y
totrans
您已经告诉Agda什么ℓ
、A
、x
和y
都是。类似地,通过将{z}
标记为隐式参数,您不需要显式地将其传递给lemma1c
,并且通常不需要在lemma1c{z}=…
行上匹配它