Section EmbedProp.
Context {A : Type} `{HIL: ILogic A} {HPropOp: EmbedOp Prop A} {HProp: Embed Prop A}.

(* Specifications: *)
Lemma embedPropExists (p : Prop) : embed p |-- Exists x : p, ltrue.
Lemma embedPropExistsL (p : Prop) (P : A) : Exists x : p, P |-- embed p.
(* TODO rename embedPropExists to embedPropExistsR *)
Lemma embedPropExists' (p : Prop) : Exists x : p, ltrue -|- embed p.
Lemma embedPropL (p : Prop) C (H: p -> |-- C) :
embed p |-- C.
Lemma embedPropR (p : Prop) (P : A) (H : p) : P |-- embed p.
Lemma lpropandL (p: Prop) Q C (H: p -> Q |-- C) :
p /\\ Q |-- C.
Lemma lpropandR C (p: Prop) Q (Hp: p) (HQ: C |-- Q) :
C |-- p /\\ Q.
Lemma lpropimplL (p: Prop) (Q C: A) (Hp: p) (HQ: Q |-- C) :
p ->> Q |-- C.
Lemma lpropimplR C (p: Prop) Q (H: p -> C |-- Q) :
C |-- p ->> Q.
(* Derivable but useful *)
Lemma lpropandTrue P : True /\\ P -|- P.
Lemma lpropandFalse P : False /\\ P -|- lfalse.
End EmbedProp.