Instance eiff_eq (k: kind) : Equivalence (eiff k).
Add Parametric Morphism (k: kind) : (@eAND k) with signature eiff k ==> eiff k ==> eiff k as eAnd_morph.
Add Parametric Morphism (k: kind) : (@eOR k) with signature eiff k ==> eiff k ==> eiff k as eOR_morph.
Add Parametric Morphism (k: kind) : (@eIMPL k) with signature eiff k ==> eiff k ==> eiff k as eIMPL_morph.
Add Parametric Morphism (k: kind) : (@eIFF k) with signature eiff k ==> eiff k ==> eiff k as eIFF_morph.
Add Parametric Morphism (k: kind) : (@eNOT k) with signature eiff k ==> eiff k as eNOT_morph.

(* Specifications: *)
Lemma eval_f_morph :
forall  (ev ev' : forall (k: kind), TA -> rtyp k),
(forall k a, eiff k (ev k a) (ev' k a)) ->
forall (k: kind)(f : GFormula k),
(eiff k (eval_f ev f) (eval_f ev' f)).