Ostensibly, the goal of this lecture note is to illustrate that False implies anything. In passing, we also show how to construct a universal statement (i.e., forall ..., ...) as well as an existential statement (i.e., exists ..., ...).
The following property very much does not hold:
Property foo :
forall P : nat -> Prop,
(exists i : nat,
P i) ->
forall j : nat,
P j.
Indeed if one assumes that it holds, one can conclude an absurdity:
Theorem ex_falso_quodlibet_eg_False :
(forall P : nat -> Prop,
(exists i : nat,
P i) ->
forall j : nat,
P j) ->
0 = 1.
To prove this theorem, we need to construct an existential statement, which is done using ex_intro as illustrated below, picking the proposition that all natural numbers are equal to 0 as a token proposition that does not hold:
Proof.
intro H_absurd.
Check (H_absurd
(fun n : nat => 0 = n)).
(* : (exists i : nat, 0 = i) -> forall j : nat, 0 = j *)
So we need to construct an expression of type exists i : nat, 0 = i:
Check (ex_intro
(fun i : nat => 0 = i)).
(* : forall x : nat, 0 = x -> exists i : nat, 0 = i *)
We can further instantiate ex_intro with 0 and the fact that 0 is equal to itself:
Check (ex_intro
(fun i : nat => 0 = i)
0
(eq_refl 0)).
(* : exists i : nat, 0 = i *)
We now have an expression of type exists i : nat, 0 = i, so let’s further instantiate H_absurd:
Check (H_absurd
(fun n : nat => 0 = n)
(ex_intro
(fun i : nat => 0 = i)
0
(eq_refl 0))).
(* : forall j : nat, 0 = j *)
Let us pick 1, for example:
Check (H_absurd
(fun n : nat => 0 = n)
(ex_intro
(fun i : nat => 0 = i)
0
(eq_refl 0))
1).
(* : 0 = 1 *)
Which is what we wanted to prove:
exact (H_absurd
(fun n : nat => 0 = n)
(ex_intro
(fun i : nat => 0 = i)
0
(eq_refl 0))
1).
Qed.
Prove the following alternative theorem:
Theorem ex_falso_quodlibet_indeed :
(forall (P : nat -> Prop),
(exists i : nat,
P i) ->
forall j : nat,
P j) -> False.
Since False implies anything, including True, prove the following theorem as a corollary of Property foo, assuming that it was admitted:
Theorem ex_falso_quodlibet_eg_True :
forall m : nat,
exists n : nat,
m < n.
As it happens, an existential quantification, when it is in the premise of an implication, can be restated as a universal quantification based on the following equivalence:
Proposition an_equivalence :
(forall P : nat -> Prop,
(exists i : nat,
P i) ->
forall j : nat,
P j)
<->
(forall (P : nat -> Prop)
(i : nat),
P i ->
forall j : nat,
P j).
Prove the equivalence above.
Thanks to the equivalence proved in Exercise 10, the property that very much does not hold can be restated as follows:
Property bar :
forall (P : nat -> Prop)
(i : nat),
P i ->
forall j : nat,
P j.
Prove that if Property bar is assumed to hold, an absurdity can be concluded:
Theorem ex_falso_quodlibet_eg_False_revisited :
(forall (P : nat -> Prop)
(i : nat),
P i ->
forall j : nat,
P j) ->
0 = 1.
Since False implies anything, including True, prove the following theorem as a corollary of Property bar, assuming that it was admitted:
Theorem ex_falso_quodlibet_eg_True_revisited :
forall m : nat,
exists n : nat,
m < n.
Created [22 Feb 2024]