我认为我必须丢失一些东西来证明¬ 2 < 1
。
我有
¬1<0 : ¬ (1 < 0)
¬1<0 = λ()
¬0<0 : ¬ (0 < 0)
¬0<0 = λ()
¬2<0 : ¬ (2 < 0)
¬2<0 = λ()
contraposition : ∀ {A B : Set}
→ (A → B)
-----------
→ (¬ B → ¬ A)
contraposition f ¬y x = ¬y (f x)
如果我想证明¬ 2 < 1
,可以这样使用contraposition
:
¬2<1 : ¬ (2 < 1)
¬2<1 = contraposition 2<1->1<0 ¬1<0
但是2<1->1<0 : 2 < 1 → 1 < 0
似乎不容易证明
我们可以在s<s
上简化1 < 0
。
1<0->2<1 : 1 < 0 → 2 < 1
1<0->2<1 x = s<s x
但是我们很难在2 < 1
上做同样的事情,因为我们有<
data _<_ : ℕ → ℕ → Set where
z<s : ∀ {n : ℕ}
------------
→ zero < suc n
s<s : ∀ {m n : ℕ}
→ m < n
-------------
→ suc m < suc n
我知道
_∸_ : ℕ → ℕ → ℕ -
m ∸ zero = m
zero ∸ suc n = zero
suc m ∸ suc n = m ∸ n
可能有助于证明2<1->1<0
。我的直觉告诉我,介绍_∸_
来证明这个问题会更加复杂。在Agda中肯定有我不知道的东西,这很明显。
PS:
我必须说,“解决方案”不会影响对自己负责的人。一个学生是好,因为他是好。
我在这里寻求帮助不是因为我想得到一些答案来做考试。我不再是学生了。我刚刚遇到困难,需要一些提示才能继续。
它需要1500
信誉才能创建标签likse plfa
。有人可以帮忙吗?
答案 0 :(得分:3)
要证明这一特殊引理,您只需对参数进行模式匹配:
¬2<1 : ¬ 2 < 1
¬2<1 (s≤s ())
如果¬n<m
为n
-s,则m
的所有m
命题都可以通过匹配s≤s
个n
-s来证明实际上更大。例如:
¬5<3 : ¬ 5 < 3
¬5<3 (s≤s (s≤s (s≤s ())))
重点是要深入研究右侧为zero
而左侧为suc
的情况,因为很少有这种形状的_<_
构造函数。
答案 1 :(得分:2)
可以设计许多替代方法。对于您的工作方法,您可以证明2<1->1<0
,这很简单。
sm<sn->m<n : {m n : ℕ} -> suc m < suc n -> m < n
sm<sn->m<n (s<s m<n) = m<n
¬2<1 : ¬ (2 < 1)
¬2<1 = contraposition sm<sn->m<n ¬1<0
答案 2 :(得分:0)
PLFA的第12章“决定性”向您展示了Agda如何为任意给定的m和n计算m