(* Specifications: *)
Lemma lem_and_fact : forall P0 P1 P2 : Prop, (P0 \/ P1) /\ P2 -> P0 /\ P2 \/ P1 /\ P2.
Lemma lem_and_dist : forall P0 P1 P2 : Prop, P0 /\ P2 \/ P1 /\ P2 -> (P0 \/ P1) /\ P2.
Lemma lem_or_fact : forall P0 P1 P2 : Prop, P0 /\ P1 \/ P2 -> (P0 \/ P2) /\ (P1 \/ P2).
Lemma lem_or_dist : forall P0 P1 P2 : Prop, (P0 \/ P2) /\ (P1 \/ P2) -> P0 /\ P1 \/ P2.
Lemma lem_or_and_conv_l : forall a b c d : Prop, a /\ b \/ c /\ d -> (a \/ c) /\ (b \/ c) /\ (a \/ d) /\ (b \/ d).
Lemma lem_or_and_conv_r : forall a b c d : Prop, (a \/ c) /\ (b \/ c) /\ (a \/ d) /\ (b \/ d) -> a /\ b \/ c /\ d.
Lemma lem_and_rew_r : forall P Q1 Q2 : Prop, (Q1 <-> Q2) -> (P /\ Q1 <-> P /\ Q2).
Lemma lem_and_rew_l : forall P Q1 Q2 : Prop, (Q1 <-> Q2) -> (Q1 /\ P <-> Q2 /\ P).
Lemma lem_and_assoc_l : forall a b c : Prop, (a /\ b) /\ c <-> a /\ b /\ c.
Lemma lem_or_rew_l : forall P Q1 Q2 : Prop, (Q1 <-> Q2) -> (Q1 \/ P <-> Q2 \/ P).
Lemma lem_or_rew_r : forall P Q1 Q2 : Prop, (Q1 <-> Q2) -> (P \/ Q1 <-> P \/ Q2).
Lemma lem_or_assoc_l : forall a b c : Prop, (a \/ b) \/ c <-> a \/ b \/ c.
Lemma lem_and_rew_lr : forall al bl ar br : Prop, (al <-> ar) -> (bl <-> br) -> (al /\ bl <-> ar /\ br).
Lemma lem_or_rew_lr : forall al bl ar br : Prop, (al <-> ar) -> (bl <-> br) -> (al \/ bl <-> ar \/ br).
Lemma lem_iff_sym : forall a b : Prop, (a <-> b) -> (b <-> a).
Lemma lem_or_sym : forall a b : Prop, a \/ b -> b \/ a.
Lemma lem_and_sym : forall a b : Prop, a /\ b -> b /\ a.
Lemma lem_or_expand : forall a : Prop, a -> a \/ a.
Lemma lem_and_expand : forall a : Prop, a -> a /\ a.
Lemma lem_or_contract : forall a : Prop, a \/ a -> a.
Lemma lem_and_contract : forall a : Prop, a /\ a -> a.