Section AdjointTheorems.
Context {funcp: expr -> expr -> expr}
{Adj: Adjointness L Gamma prodp funcp}.

(* Specifications: *)
Lemma prodp_orp_distr_l: forall x y z: expr,
|-- prodp (x || y) z <--> (prodp x z || prodp y z).
Lemma prodp_orp_distr_r {Comm: Commutativity L Gamma prodp}: forall x y z: expr,
|-- prodp x (y || z) <--> (prodp x y || prodp x z).
Lemma orp_funcp {Comm: Commutativity L Gamma prodp}: forall x y z: expr,
|-- funcp (x || y) z <--> (funcp x z && funcp y z).
Lemma funcp_andp_distr_r: forall x y z: expr,
|-- funcp x (y && z)  <--> (funcp x y && funcp x z).
Lemma falsep_prodp: forall x: expr,
|-- prodp falsep x <--> falsep.
Lemma prodp_falsep {Comm: Commutativity L Gamma prodp}: forall x: expr,
|-- prodp x falsep <--> falsep.