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).
(* The following two lemmas have an explicit forall to help unification *)

Lemma lexistsL2 (P : T -> A) (Q : A) (H : lexists P |-- Q) :
forall x, P x |-- Q.