Chapter 2 - Propositions and Proofs


Require Import Base.

2.2 Implication and Universal Quantification


Goal (X : Type) (x y : X), x=y y=x.
Proof. intros X x y A. rewrite A. reflexivity. Qed.

(* Exercise 2.2.1 *)

Goal x y, andb x y = true x = true.
Abort.

Goal X Y : Prop, X (X Y) Y.
Proof. intros X Y x A. exact (A x). Qed.

Goal X Y Z : Prop, (X Y) (Y Z) X Z.
Proof. intros X Y Z A B x. exact (B (A x)). Qed.

(* Exercise 2.2.2 *)
Goal (X: Prop) (x y z: X),
       x = y y = z x = z.
Abort.

2.3 Predicates


Goal p q : nat Prop, p 7 ( x, p x q x) q 7.
Proof. intros p q A B. exact (B 7 A). Qed.

2.4 The Apply Tactic


Goal X Y Z : Prop, (X Y) (Y Z) X Z.
Proof. intros X Y Z A B x. apply B. apply A. exact x. Qed.

Goal p q : nat Prop, p 7 ( x, p x q x) q 7.
Proof. intros p q A B. apply B. exact A. Qed.

(* Exercise 2.4.1 *)

Goal X Y, ( Z, (X Y Z) Z) X.
Abort.

Goal X Y, ( Z, (X Y Z) Z) Y.
Abort.

(* Exercise 2.4.2 *)

Goal (p : bool Prop) (x : bool),
p true p false p x.
Abort.

Goal (p : nat Prop) (x : nat),
p O ( n, p n p (S n)) p x.
Abort.

Goal (X : Type) (p : list X Prop) (xs : list X),
p nil ( x xs, p xs p (cons x xs)) p xs.
Abort.

Leibniz Characterization of Equality


Goal (X : Type) (x y : X),
( p : X Prop, p x p y) x=y.
Proof. intros X x y A. apply (A (fun zx=z)). reflexivity. Qed.

(* Exercise 2.5.1 *)

Goal (X : Type) (x y : X),
x=y p : X Prop, p x p y.
Abort.

Goal (X : Type) (x y : X),
( p : X Prop, p x p y)
p : X Prop, p y p x.
Abort.

2.6 Propositions are Types


(* Exercise 2.6.1 *)

Goal X : Type,
(fun x : Xx) = (fun y : Xy).
Abort.

Goal X Y : Prop,
(X Y) x : X, Y.
Abort.

Goal X Y : Prop,
( x : X, Y) X Y.
Abort.

Goal X Y : Prop,
(X Y) = ( x : X, Y).
Abort.

2.7 Falsity and Negation


Goal False 2=3.
Proof. intros A. contradiction A. Qed.

Goal X : Prop, X ~~ X.
Proof. intros X x A. exact (A x). Qed.

Goal X : Prop,
(X ¬ X) (¬ X X) False.
Proof.
  intros X A B. apply A.
  - apply B. intros x. exact (A x x).
  - apply B. intros x. exact (A x x).
Qed.

Goal X : Prop,
~~ X (X ¬ X) X.
Proof. intros X A B. exfalso. apply A. intros x. exact (B x x). Qed.

(* Exercise 2.7.1 *)

Goal X : Prop, ~~~ X ¬ X.
Abort.

Goal X Y : Prop, (X Y) ¬ Y ¬ X.
Abort.

(* Exercise 2.7.2 *)

Goal X : Prop, ~~ (~~ X X).
Abort.

Goal X Y : Prop, ~~ (((X Y) X) X).
Abort.

(* Exercise 2.7.3 *)

Goal X:Prop,
(X False) (¬ X False) False.
Abort.

2.8 Conjunction and Disjunction


Goal X Y : Prop, X Y Y X.
Proof.
  intros X Y A. destruct A as [x y]. split.
  - exact y.
  - exact x.
Qed.

Goal X Y : Prop, X Y Y X.
Proof.
  intros X Y A. destruct A as [x|y].
  - right. exact x.
  - left. exact y.
Qed.

Goal X Y : Prop, X Y Y X.
Proof.
  intros X Y [x y]. split.
  - exact y.
  - exact x.
Qed.

Goal X Y : Prop, X Y Y X.
Proof.
  intros X Y [x|y].
  - right. exact x.
  - left. exact y.
Qed.

Goal X Y Z : Prop,
X (Y Z) (X Y) (X Z).
Proof.
  intros X Y Z [x|[y z]].
  - split; left; exact x.
  - split; right.
    + exact y.
    + exact z.
Qed.

(* Exercise 2.8.1 *)

Goal X : Prop,
¬ (X ¬ X) X ¬ X.
Abort.

Goal X : Prop,
(X ¬ X ¬ (X ¬ X)) X ¬ X.
Abort.

Goal X Y Z W : Prop,
(X Y) (X Z) (Y W) (Z W) X W.
Abort.

(* Exercise 2.8.2 *)

Goal X : Prop, ~~ (X ¬ X).
Abort.

Goal X Y : Prop, ~~ ((X Y) ¬ X Y).
Abort.

2.9 Equivalence and Rewriting


Lemma and_com : X Y : Prop, X Y Y X.
Proof.
  intros X Y. split.
  - intros [x y]. split.
    + exact y.
    + exact x.
  - intros [y x]. split.
    + exact x.
    + exact y.
Qed.

Lemma deMorgan : X Y : Prop, ¬ (X Y) ¬ X ¬ Y.
Proof.
  intros X Y. split.
  - intros A. split.
    + intros x. apply A. left. exact x.
    + intros y. apply A. right. exact y.
  - intros [A B] [x|y].
    + exact (A x).
    + exact (B y).
Qed.

Goal X Y Z W : Prop, (X Y) (Z W) (X Z Y W).
Abort.

(* Allows us to use setoid-rewriting *)
Require Import Setoid.

Goal X Y Z : Prop, ¬ (X Y) Z Z ¬ X ¬ Y.
Proof.
 intros X Y Z.
 setoid_rewrite deMorgan.
 apply and_com.
Qed.

Goal X : Type, p q : X Prop, ( x, ¬ (p x q x)) x, ¬ p x ¬ q x.
Proof.
 intros X p q A.
 setoid_rewrite <- deMorgan.
 exact A.
Qed.

Goal X : Prop, X X.
Proof. reflexivity. Qed.

Goal X Y : Prop, (X Y) (Y X).
Proof. intros X Y A. symmetry. exact A. Qed.

Goal X Y Z : Prop, (X Y) (Y Z) (X Z).
Proof.
 intros X Y Z A B. transitivity Y.
 - exact A.
 - exact B.
Qed.

(* Exercise 2.9.1 *)

Goal X : Prop, X X.
Abort.

Goal X Y : Prop, (X Y) (Y X).
Abort.

Goal X Y Z : Prop, (X Y) (Y Z) (X Z).
Abort.

(* Exercise 2.9.2 *)

Goal (X Y Z W : Prop), (X Y) (Z W) (X Z Y W).
Abort.

Goal (X:Type) (p q:X Prop), ( x:X, p x q x) (( x:X, p x) x:X, q x).
Abort.

(* Exercise 2.9.3 *)

Goal X Y Z : Prop, X ¬ (Y Z) (¬ Y ¬ Z) X.
Abort.

Goal X : Type, p q : X Prop, ( x, ¬ (p x q x)) x, ¬ p x ¬ q x.
Abort.

(* Exercise 2.9.4 *)

Goal X Y : Prop, X (X Y) X.
Abort.

Goal X Y : Prop, X (X Y) X.
Abort.

Goal X:Prop, (X ¬ X) X ~~ X.
Abort.

(* Exercise 2.9.5 *)

Goal False Z : Prop, Z.
Abort.

Goal X : Prop,
¬ X Z : Prop, X Z.
Abort.

Goal X Y : Prop, X Y Z : Prop, (X Y Z) Z.
Abort.

Goal X Y : Prop, X Y Z : Prop, (X Z) (Y Z) Z.
Abort.

Goal (X : Type) (x y : X), x=y p : X Prop, p x p y.
Abort.

2.10 Automation Tactics


Goal X Y : Prop, X Y Y X.
Proof. intros X Y [x y]. split ; assumption. Qed.

Goal (X : Type) (p : list X Prop) (xs : list X),
p nil ( x xs, p xs p (cons x xs)) p xs.
Proof. induction xs ; auto. Qed.

Goal X : Prop, ¬ (X ¬ X).
Proof. tauto. Qed.

2.11 Existential Quantification


Goal (X : Type) (p q : X Prop),
( x, p x q x) x, p x.
Proof.
  intros X p q A. destruct A as [x B]. destruct B as [C _].
   x. exact C.
Qed.

Definition diagonal : Prop := (X : Type) (p : X X Prop),
¬ x, y, p x y ¬ p y y.

Lemma circuit (X : Prop) : ¬ (X ¬ X).
Proof. tauto. Qed.

Goal diagonal.
Proof. intros X p [x A]. apply (@circuit (p x x)). exact (A x). Qed.

Goal diagonal.
Proof. intros X p [x A]. specialize (A x). tauto. Qed.

Goal (X : Type) (x y : X),
x y p : X Prop, p x ¬ p y.
Proof.
  split.
  - intros A. (fun zx = z). auto.
  - intros [p [A B]] C. apply B. rewrite <- C. apply A.
Qed.

(* Exercise 2.11.1 *)

Goal (X : Type) (p : X Prop),
¬ ( x, p x) x, ¬ p x.
Abort.

(* Exercise 2.11.2 *)

Goal (X Y : Type) (p : X Y Prop),
( x, y, p x y) y, x, p x y.
Abort.

(* Exercise 2.11.3 *)

Goal (X : Type) (p : X Prop),
( x, p x) Z : Prop, ( x, p x Z) Z.
Abort.

(* Exercise 2.11.4 *)

Goal (X : Type) (x y : X),
x = y r : X X Prop, ( z : X, r z z) r x y.
Abort.

Goal (X : Type) (x y : X),
x y r : X X Prop, ( z : X, r z z) ¬ r x y.
Abort.

(* Exercise 2.11.5 *)

Goal (X: Type) (x : X) (p : X Prop), q : X Prop,
q x ( y, p y q y) y, q y p y x = y.
Abort.

(* Exercise 2.11.6 *)

Goal (X : Type) (Y : Prop) ,
X Y ( x : X, True) Y.
Abort.

2.13 Proof Rules as Lemmas


Lemma AndI (X Y : Prop) :
X Y X Y.
Proof. tauto. Qed.

Lemma AndE (X Y U : Prop) :
X Y (X Y U) U.
Proof. tauto. Qed.

Goal X Y : Prop, X Y Y X.
Proof.
  intros X Y A. apply (AndE A).
  intros x y. apply AndI.
  - exact y.
  - exact x.
Qed.

Lemma ExI (X : Type) (p : X Prop) :
x : X, p x x, p x.
Proof. intros x A. x. exact A. Qed.

Lemma ExE (X : Type) (p : X Prop) (U : Prop) :
( x, p x) ( x, p x U) U.
Proof. intros [x A] B. exact (B x A). Qed.

Goal (X : Type) (p q : X Prop),
( x, p x q x) x, p x.
Proof.
  intros X p q A. apply (ExE A).
  intros x B. apply (AndE B). intros C _.
  exact (ExI C).
Qed.

(* Exercise 2.13.1 *)

(* Lemma OrI_L (* ... *)

Lemma OrI_R (* ... *)

Lemma OrE (* ... *) *)


Goal X Y: Prop, X Y Y X.
Abort.

2.14 Inductive Propositions


Inductive True : Prop :=
| I : True.

Inductive False : Prop := .

Goal x y : True, x=y.
Proof. intros x y. destruct x. destruct y. reflexivity. Qed.

Goal X : Prop, False X.
Proof. intros X A. destruct A. Qed.

Inductive and (X Y : Prop) : Prop :=
| conj : X Y and X Y.

Inductive or (X Y : Prop) : Prop :=
| or_introl : X or X Y
| or_intror : Y or X Y.

Inductive ex (X : Type) (p : X Prop) : Prop :=
| ex_intro : x : X, p x ex p.

Definition not (X : Prop) : Prop := X False.

Definition iff (X Y : Prop) : Prop := (X Y) (Y X).

(* Exercise 2.14.1 *)
Goal X Y: Prop, X Y Y X.
Abort.

2.15 An Observation


Definition AND (X Y : Prop) : Prop :=
Z : Prop, (X Y Z) Z.

Lemma ANDI (X Y : Prop) :
X Y AND X Y.
Proof. intros x y Z. auto. Qed.

Lemma ANDE (X Y Z: Prop) :
AND X Y (X Y Z) Z.
Proof. intros A. exact (A Z). Qed.

Lemma AND_agree (X Y : Prop) :
AND X Y X Y.
Proof.
  split.
  - intros A. apply A. auto.
  - intros [x y] Z A. apply A ; assumption.
Qed.

2.16 Excluded Middle


Definition XM : Prop := X : Prop, X ¬ X.

(* Exercise 2.16.1 *)

Goal X Y : Prop,
       XM ¬ (X Y) ¬ X ¬ Y.
Abort.

Goal (X : Type) (p : X Prop),
XM ¬ ( x, p x) x, ¬ p x.
Abort.

(* Exercise 2.16.2 *)

Definition DN : Prop := X : Prop, ~~ X X. (* double negation *)
Definition CP : Prop := X Y : Prop, (¬ Y ¬ X) X Y. (* contraposition *)
Definition Peirce : Prop := X Y : Prop, ((X Y) X) X. (* Peirce's Law *)

Goal XM DN.
Abort.

Goal DN CP.
Abort.

Goal CP Peirce.
Abort.

(* Exercise 2.16.3 *)

Lemma drinker (X : Type) (d : X Prop) :
XM ( x : X, True) x, d x x, d x.
Abort.

(* Exercise 2.16.4 *)

Goal X : Prop,
~~ (X ¬ X).
Abort.

Goal X Y : Prop,
~~ (((X Y) X) X).
Abort.

Goal X Y : Prop,
~~ (~ (X Y) ¬ X ¬ Y).
Abort.

Goal X Y : Prop,
~~ ((X Y) (¬ Y ¬ X)).
Abort.

(* Exercise 2.16.5 *)

Definition pdec (s: Prop) := s ¬ s.

Goal pdec ( X: Prop, ¬ (X ¬ X)).
Abort.

Goal pdec ( X: Prop, ¬ (X ¬X)).
Abort.

Goal pdec ( P: Prop, f: Prop Prop, X Y: Prop,
                                 (X P Y) (X f Y)).
Abort.

Goal pdec ( P:Prop, f: Prop Prop, X Y: Prop,
                                (X Y P) (f X Y)).
Abort.