Global Instance type_Prop : type Prop :=
{ equal := iff
; proper := fun _ => True
}.Global Instance typeOk_Prop : typeOk type_Prop.

(* Specifications: *)
Lemma and_True_iff : forall P, (P /\ True) <-> P.
Lemma and_and_iff : forall P, (P /\ P) <-> P.
Lemma and_assoc : forall P Q R, (P /\ Q /\ R) <-> ((P /\ Q) /\ R).
Lemma and_comm : forall P Q, (P /\ Q) <-> (Q /\ P).
Lemma and_False_iff : forall P, (P /\ False) <-> False.
Lemma and_cancel : forall P Q R : Prop, (P -> (Q <-> R)) -> ((P /\ Q) <-> (P /\ R)).
Lemma and_iff : forall P Q R S : Prop, (P <-> R) -> (P -> (Q <-> S)) -> ((P /\ Q) <-> (R /\ S)).
Lemma or_False_iff : forall P, (P \/ False) <-> P.
Lemma or_or_iff : forall P, (P \/ P) <-> P.
Lemma or_assoc : forall P Q R, (P \/ Q \/ R) <-> ((P \/ Q) \/ R).
Lemma or_comm : forall P Q, (P \/ Q) <-> (Q \/ P).
Lemma or_True_iff : forall P, (P \/ True) <-> True.
Lemma impl_True_iff : forall (P : Prop), (True -> P) <-> P.
Lemma impl_iff : forall P Q R S : Prop, (P <-> R) -> (P -> (Q <-> S)) -> ((P -> Q) <-> (R -> S)).
Lemma impl_eq : forall (P Q : Prop), P = Q -> (P -> Q).
Lemma uncurry : forall (P Q R : Prop), (P /\ Q -> R) <-> (P -> Q -> R).
Lemma forall_iff : forall T P Q, (forall x, P x <-> Q x) -> ((forall x : T, P x) <-> (forall x : T, Q x)).
Lemma forall_impl : forall {T} (P Q : T -> Prop), (forall x, P x -> Q x) -> (forall x, P x) -> (forall x, Q x).
Lemma exists_iff : forall T P Q, (forall x, P x <-> Q x) -> ((exists x : T, P x) <-> (exists x : T, Q x)).
Lemma exists_impl : forall {T} (P Q : T -> Prop), (forall x, P x -> Q x) -> (exists x, P x) -> (exists x, Q x).
Lemma iff_eq : forall (P Q : Prop), P = Q -> (P <-> Q).