TPIL 4.4:示例:¬(∃x,¬p x)→(∀x,p x)

时间:2019-11-02 06:59:01

标签: lean

精益定理证明的4.4节显示如下:

example : (∀ x, p x) ↔ ¬ (∃ x, ¬ p x) := sorry

在这里,我将重点介绍从右到左的情况:

¬ (∃ x, ¬ p x) → (∀ x, p x)

方法1

我们知道我们将有一个¬ (∃ x, ¬ p x)类型的参数,所以让我们开始:

example : ¬ (∃ x, ¬ p x) → (∀ x, p x) := 

    (assume hnExnpx : ¬ (∃ x, ¬ p x),

        _)

我们知道我们将必须返回类型为(∀ x, p x)的表达式,所以让我们开始构造它:

example : ¬ (∃ x, ¬ p x) → (∀ x, p x) := 

    (assume hnExnpx : ¬ (∃ x, ¬ p x),

        (λ x, _))

在这一点上,我们需要返回一个p x类型的值,目前尚不清楚我们是否可以构建一个值。也许我们需要尝试提出一个false值。

给定hnExnpx的情况下,函数false返回(∃ x, ¬ p x)。因此,让我们尝试构建其中之一,对其应用hnExnpx,然后使用false.elim

example : ¬ (∃ x, ¬ p x) → (∀ x, p x) := 

    (assume hnExnpx : ¬ (∃ x, ¬ p x),

        (λ x,

            false.elim (hnExnpx (exists.intro x (λ hpx, _)))

        ))

现在,我们回到了另一个false值。

方法2

第3章提到有时需要经典逻辑。

使用(em (∀ x, p x))的幼稚方法将我们引到这里:

example : ¬ (∃ x, ¬ p x) → (∀ x, p x) := 

    (assume hnExnpx : ¬ (∃ x, ¬ p x),

        or.elim (em (∀ x, p x))

            (λ hAxpx, hAxpx)

            (λ hnAxpx : ¬ (∀ x, p x), (λ x, _))

    )

同样,我们需要一个p x值或一个false。我们唯一的新事物是hnAxpx : ¬∀ (x : α), p x。尚不清楚如何获得p xhnAxpx确实返回false,但是我们需要一个(∀ x, p x),这是我们想要的原始内容。 :-)

也许这涉及对经典逻辑的更精细的使用?

欢迎提出任何建议!


更新

以下是基于simon1505475的评论的一种方法,该方法似乎有效:

示例:¬(∃x,¬p x)→(∀x,p x):=

(assume hnExnpx : ¬ (∃ x, ¬ p x),

    (λ x, 

        or.elim (em (p x))

            (λ hpx : p x, hpx)

            (λ hnpx : ¬ p x, 

                false.elim (hnExnpx (exists.intro x (λ hpx : p x, hnpx hpx))))))

0 个答案:

没有答案