Section ILogicEquivOps.
Context {A : Type} `{IL: ILogic A}.
Global Instance lforall_lequiv_m:
Proper (pointwise_relation T lequiv ++> lequiv) lforall.
Global Instance lexists_lentails_m:
Proper (pointwise_relation T lentails ++> lentails) lexists.
Global Instance lexists_lequiv_m:
Proper (pointwise_relation T lequiv ++> lequiv) lexists.
Global Instance : Proper (lequiv ==> lequiv ==> iff) lequiv.
Global Instance lequiv_lentails_m : Proper (lequiv ==> lequiv ==> iff) lentails.
Global Instance lentails_lentails_m: Proper (lentails --> lentails ++> impl) lentails.
Global Instance land_lentails_m:
Proper (lentails ++> lentails ++> lentails) land.
Global Instance land_lequiv_m:
Proper (lequiv ==> lequiv ==> lequiv) land.
Global Instance lor_lentails_m:
Proper (lentails ++> lentails ++> lentails) lor.
Global Instance lor_lequiv_m:
Proper (lequiv ==> lequiv ==> lequiv) lor.
Global Instance limpl_lentails_m:
Proper (lentails --> lentails ++> lentails) limpl.
Global Instance limpl_lequiv_m:
Proper (lequiv ==> lequiv ==> lequiv) limpl.
End ILogicMorphisms.
Hint Extern 0 (?x -|- ?x) => reflexivity.
Hint Extern 0 (?P -|- ?Q) => (is_evar P; reflexivity) || (is_evar Q; reflexivity).

(* Special case of limplAdj/landAdj when there is just ltrue on the lhs *)
Lemma limplValid P Q:
|-- P -->> Q <->
P |-- Q.