(** Functional extensionality *)
(** Equality of projections from diagonal *)
Local Notation EqDeltaProjs := (forall A, pi1 = pi2 :> (Delta A -> A)).
(** Unicity of bijection inverse *)
Local Notation UniqueInverse := (forall A B (f:A->B) g1 g2, is_inverse f g1 -> is_inverse f g2 -> g1 = g2).
(** Bijectivity of bijective composition *)
Definition action A B C (f:A->B) := (fun h:B->C => fun x => h (f x)).
Local Notation BijectivityBijectiveComp := (forall A B C (f:A->B) g,
is_inverse f g -> is_inverse (A:=B->C) (action f) (action g)).
(**********************************************************************)
(** * Functional extensionality <-> Equality of projections from diagonal *)

(* Specifications: *)
Theorem FunctExt_iff_EqDeltaProjs : FunctionalExtensionality <-> EqDeltaProjs.
(**********************************************************************)
(** * Functional extensionality <-> Unicity of bijection inverse *)
Lemma FunctExt_UniqInverse : FunctionalExtensionality -> UniqueInverse.
Lemma UniqInverse_EqDeltaProjs : UniqueInverse -> EqDeltaProjs.
Theorem FunctExt_iff_UniqInverse : FunctionalExtensionality <-> UniqueInverse.
(**********************************************************************)
(** * Functional extensionality <-> Bijectivity of bijective composition *)
Lemma FunctExt_BijComp : FunctionalExtensionality -> BijectivityBijectiveComp.
Lemma BijComp_FunctExt : BijectivityBijectiveComp -> FunctionalExtensionality.