如何在agda中证明¬2 <1?

时间:2019-09-24 01:17:23

标签: agda plfa

我认为我必须丢失一些东西来证明¬ 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。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

要证明这一特殊引理,您只需对参数进行模式匹配:

¬2<1 : ¬ 2 < 1
¬2<1 (s≤s ())

如果¬n<mn -s,则m的所有m命题都可以通过匹配s≤sn -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