Proof fun P X A a p E f => f X A a p.
(** ** Leibniz equality **)
Definition eq (X : Typ1) (x y : X) : Prop := forall P : X -> Prop, P x -> P y.

(* Specifications: *)
Lemma eq_refl : forall (X : Typ1) (x : X), eq X x x.
Proof fun X x P p => p.
Lemma eq_sym : forall (X : Typ1) (x y : X), eq X x y -> eq X y x.
Proof fun X x y e => e (fun z => eq X z x) (eq_refl X x).
Lemma eq_trans :
forall (X : Typ1) (x y z : X), eq X x y -> eq X y z -> eq X x z.