proposition: Lemma and_def : and = (fun p : Prop => fun q : Prop => (fun f : Prop -> Prop -> Prop => f p q) = (fun f : Prop -> Prop -> Prop => f True True)).
proof: Proof. apply fun_ext; intro p. apply fun_ext; intro q. apply prop_ext. intros [hp hq]. apply fun_ext; intro f. case (prop_degen p); intro e; subst p. case (prop_degen q); intro e; subst q. reflexivity. exfalso. exact hq. exfalso. exact hp. intro e. generalize (ext_fun e); clear e; intro e. split. rewrite (e (fun p _ => p)). exact I. rewrite (e (fun _ q => q)). exact I. Qed.
imports: Coq.Logic.ClassicalEpsilon ClassicalFacts PropExtensionalityFacts