(* Turning a boolean "if" form into an application.                           *)
Definition if_expr := if b then vT else vF.

(* Specifications: *)
Lemma ifE : (if b then vT else vF) = if_expr.
Lemma introNTF : (if c then ~ P else P) -> ~~ b = c.
Lemma introTF : (if c then P else ~ P) -> b = c.
Lemma elimNTF : ~~ b = c -> if c then ~ P else P.
Lemma elimTF : b = c -> if c then P else ~ P.
Lemma equivPif : (Q -> P) -> (P -> Q) -> if b then Q else ~ Q.
Lemma xorPif : Q \/ P -> ~ (Q /\ P) -> if b then ~ Q else Q.
Lemma introTFn : (if c then ~ P else P) -> b = c.
Lemma elimTFn : b = c -> if c then ~ P else P.
Lemma equivPifn : (Q -> P) -> (P -> Q) -> if b then ~ Q else Q.
Lemma xorPifn : Q \/ P -> ~ (Q /\ P) -> if b then Q else ~ Q.
Lemma introT : P -> b.
Lemma introF : ~ P -> b = false.
Lemma introN : ~ P -> ~~ b.
Lemma introNf : P -> ~~ b = false.
Lemma introTn : ~ P -> b'.
Lemma introFn : P -> b' = false.
Lemma elimT : b -> P.
Lemma elimF : b = false -> ~ P.
Lemma elimN : ~~ b -> ~P.
Lemma elimNf : ~~ b = false -> P.
Lemma elimTn : b' -> ~ P.
Lemma elimFn : b' = false -> P.
Lemma introP : (b -> Q) -> (~~ b -> ~ Q) -> reflect Q b.
Lemma iffP : (P -> Q) -> (Q -> P) -> reflect Q b.
Lemma equivP : (P <-> Q) -> reflect Q b.
Lemma sumboolP (decQ : decidable Q) : reflect Q decQ.
Lemma appP : reflect Q b -> P -> Q.
Lemma sameP : reflect P c -> b = c.
Lemma decPcases : if b then P else ~ P.