我无法清楚地理解它。我试着学习"用"关键字,但我也怀疑。请帮忙 !!!
我想了解"与"并使用此代码。
something-even : ∀ n → Even n ⊎ Even (suc n)
something-even zero = inj₁ zero
something-even (suc n) with something-even n
... | inj₁ x = inj₂ (suc-suc x)
... | inj₂ y = inj₁ y
(this states that either n is even or its successor is even). In fact, thm0 can be implemented without using recursion!
thm0 : ∀ x → ∃ λ y → Even y × x less-than y
thm0 n with something-even n
... | inj₁ x = suc (suc n) , suc-suc x , suc ref
... | inj₂ y = suc n , y , ref
答案 0 :(得分:3)
如果您熟悉Haskell,您会注意到在Agda中没有if
- 语句而没有case
。
with
对表达式结果进行模式匹配。例如,with something-even n
评估something-even n
,然后使用... | inj₁ x
和... | inj₂ y
对以下行进行模式匹配。这些匹配表达式,以查看它的值是使用inj₁
还是inj₂
构造函数构造的,以便它们包含的值可以在右侧表达式中使用:suc (suc n) , suc-suc x , suc ref
使用由x
确定的inj₁ x
,suc n , y , ref
使用y
确定的inj₂ y
实际的构造函数名称来自⊎
的定义 - 请参阅something-even
联接类型Even n
和Even (suc n)
的类型。因此,x
中的inj₁ x
对应于给定Even n
的{{1}}类型的值,而n
中的y
对应于类型{的值inj₂ y
{1}} Even (suc n)
。