Для введения в coq? - PullRequest
       33

Для введения в coq?

11 голосов
/ 11 декабря 2010

Я пытаюсь (классически) доказать

~ (forall t : U, phi) -> exists t: U, ~phi

в Coq.То, что я пытаюсь сделать, это доказать это контрацептивно:

1. Assume there is no such t (so ~(exists t: U, ~phi))

2. Choose arbitrary t0:U

3. If ~phi[t/t0], then contradiction with (1)

4. Therefore, phi[t/t0]

5. Conclude (forall t:U, phi)

Моя проблема с линиями (2) и (5).Я не могу понять, как выбрать произвольный элемент U, доказать что-то об этом и сделать заключение.

Есть предложения (я не собираюсь использовать противозачаточное средство)?

1 Ответ

13 голосов
/ 11 декабря 2010

Чтобы имитировать ваше неофициальное доказательство, я использую классическую аксиому ¬¬P → P (называемую NNPP) [1].После применения вам нужно доказать False как A: ¬ (∀ x: U, φ x), так и B: ¬ (∃ x: U, φ x).А и Б - ваше единственное оружие для вывода False.Давайте попробуем A [2].Поэтому вам нужно доказать, что ∀ x: U, φ x.Чтобы сделать это, мы берем произвольное t₀ и пытаемся доказать, что φ t₀ выполнено [3].Теперь, поскольку вы находитесь в классическом сеттинге [4], вы знаете, что либо φ t₀ выполняется (и оно закончено [5]), либо ¬ (φ t₀) выполняется.Но последнее невозможно, так как это противоречило бы B [6].

Require Import Classical. 

Section Answer.
Variable U : Type.
Variable φ : U -> Prop.

Lemma forall_exists: 
    ~ (forall x : U, φ x) -> exists x: U, ~(φ x).
intros A.
apply NNPP.               (* [1] *)
intro B.
apply A.                  (* [2] *)
intro t₀.                 (* [3] *)
elim classic with (φ t₀). (* [4] *)
trivial.                  (* [5] *)
intro H.
elim B.                   (* [6] *)
exists t₀.
assumption.
Qed.
...