(* Specifications: *)
Lemma choice_on_dependent_type: forall {A:Type} {B:A->Type} (R:forall a:A, B a -> Prop), (forall a:A, exists b:B a, R a b) -> exists f:(forall a:A, B a), forall a:A, R a (f a).
Lemma inverse_image_increasing: forall {X Y:Type} (f:X->Y) (T1 T2:Ensemble Y), Included T1 T2 -> Included (inverse_image f T1) (inverse_image f T2).
Lemma inverse_image_empty: forall {X Y:Type} (f:X->Y), inverse_image f Empty_set = Empty_set.
Lemma inverse_image_full: forall {X Y:Type} (f:X->Y), inverse_image f Full_set = Full_set.
Lemma inverse_image_intersection: forall {X Y:Type} (f:X->Y) (T1 T2:Ensemble Y), inverse_image f (Intersection T1 T2) = Intersection (inverse_image f T1) (inverse_image f T2).
Lemma inverse_image_union: forall {X Y:Type} (f:X->Y) (T1 T2:Ensemble Y), inverse_image f (Union T1 T2) = Union (inverse_image f T1) (inverse_image f T2).
Lemma inverse_image_complement: forall {X Y:Type} (f:X->Y) (T:Ensemble Y), inverse_image f (Complement T) = Complement (inverse_image f T).
Lemma inverse_image_composition: forall {X Y Z:Type} (f:Y->Z) (g:X->Y) (U:Ensemble Z), inverse_image (fun x:X => f (g x)) U = inverse_image g (inverse_image f U).
Lemma exclusive_dec: forall P Q:Prop, ~(P /\ Q) -> (P \/ Q) -> {P} + {Q}.
Lemma decidable_dec: forall P:Prop, P \/ ~P -> {P} + {~P}.
Lemma classic_dec: forall P:Prop, {P} + {~P}.
Lemma subset_eq_compatT: forall (U:Type) (P:U->Prop) (x y:U) (p:P x) (q:P y), x = y -> exist P x p = exist P y q.
Lemma proj1_sig_injective: forall {A:Type} (P:A->Prop) (a1 a2:{x:A | P x}), proj1_sig a1 = proj1_sig a2 -> a1 = a2.
Lemma R_impl_equality_of_equiv_class: forall x y:A, R x y -> equiv_class x = equiv_class y.
Lemma equality_of_equiv_class_impl_R: forall x y:A, equiv_class x = equiv_class y -> R x y.
Lemma finite_nat_initial_segment: forall n:nat, FiniteT { m:nat | m < n }.
Lemma infinite_nat_inj: forall X:Type, ~ FiniteT X -> exists f:nat->X, injective f.
Lemma nat_infinite: ~ FiniteT nat.