predicate_logic

Predicate logic with equality

Formal language

(comp: "polymorphic" function, logic: for all)

(comp: "polymorphic" pair, logic: exists)

= (logic: equality)


Section PredicateLogic.

Theorem eq_symmetric :
   (A : Set) (a b : A),
    a = bb = a.
Proof.
  intros A a b eq.
  destruct eq.
  reflexivity.
Qed.

Theorem eq_transitive :
   (A : Set) (a b c : A),
    a = bb = ca = c.
Proof.
  intros A a b c eq1 eq2.
  destruct eq1.
  destruct eq2.
  reflexivity.
Qed.

Theorem transport :
   (A : Set) (a b : A) (P : AProp),
    a = bP aP b.
Proof.
  intros A a b P eq pa.
  rewrite <- eq.
  exact pa.
Qed.

Theorem ex_then_and :
   (A : Set) (P Q : AProp),
  ( x : A, P xQ x) → ( x : A, P x) ∧ ( x : A, Q x).
Proof.
  intros A P Q [a [pa qa]].
  split.
  - a. (* exists a *)
    exact pa.
  - a.
    exact qa.
Qed.

Theorem ex_then_or :
   (A : Set) (P Q : AProp),
    ( x : A, P xQ x) → ( x : A, P x) ∨ ( x : A, Q x).
Proof.
  intros A P Q [a [pa | qa]].
  - left.
     a.
    exact pa.
  - right.
     a.
    exact qa.
Qed.

Theorem or_then_ex :
   (A : Set) (P Q : AProp),
    ( x : A, P x) ∨ ( x : A, Q x) → x : A, P xQ x.
Proof.
  intros A P Q [[x pa] | [x qa]].
  - x.
    left.
    exact pa.
  - x.
    right.
    exact qa.
Qed.

Theorem fa_iff_and :
   (A : Set) (P Q : AProp),
    ( x : A, P xQ x) ↔ ( x : A, P x) ∧ ( x : A, Q x).
Proof.
Qed.

Theorem fa_then_or :
   (A : Set) (P Q : AProp),
    ( x : A, P x) ∨ ( x : A, Q x) → ( x : A, P xQ x).
Proof.
Qed.

Theorem fa_then_imp :
   (A : Set) (P Q : AProp),
    ( x : A, P xQ x) → ( x : A, P x) → ( x : A, Q x).
Proof.
  intros A P Q f g x.
  apply f.
  apply g.
Qed.

Theorem ex_then_not_fa_not :
   (A : Set) (P : AProp),
    ( x : A, P x) → ¬ x : A, ¬ P x.
Proof.
Qed.

Theorem and_not_then_ex :
   (A : Set) (P Q : AProp),
    ¬ (( x : A, P x) ∧ ( x : A, Q x) → x : A, P xQ x).
Proof.
   bool.
   (fun bb = true).
   (fun bb = false).
  intros f.
  assert (ext : x : bool, x = true). {
     true.
    reflexivity.
  }
  assert (exf : x : bool, x = false). {
     false.
    reflexivity.
  }
  destruct (f (conj ext exf)) as [b [eq1 eq2]].
  symmetry in eq1.
  destruct eq1.
  discriminate.
Qed.

Theorem forall_not_then_exists :
   (A : Set), (P : AProp),
    ¬ (( x : A, P x) → x : A, P x).
Proof.
   Empty_set.
  intros P f.
  assert (fa : x : Empty_set, P x). {
    intros x.
    destruct x.
  }
  destruct (f fa) as [x _].
  destruct x.
Qed.

End PredicateLogic.