Implicit Types s t u v : term.Implicit Types p q : term -> Prop.Definition decidable p := 
  exists u, proc u /\ decides u p.(** ** Definition of recognisable classes *)

Definition pi s t := eva (s (tenc t)).Definition recognisable p := 
  exists u, proc u /\ forall s, p s <-> eva (u (tenc s)).(* * Complement, intersection and union of predicates *)

Definition complement p := fun t => ~ p t.Definition intersection p q := fun t => p t /\ q t.Definition union p q := fun t => p t \/ q t.

(* Specifications: *)
Lemma decidable_intersection p q : decidable p -> decidable q -> decidable (intersection p q).
Lemma decidable_union p q : decidable p -> decidable q -> decidable (union p q).
Lemma decidable_complement p : decidable p -> decidable (complement p).
Lemma recinter_correct u v s : closed u -> closed v -> eva (recinter u v (tenc s)) <-> eva ( u (tenc s)) /\ eva (v (tenc s)).
Lemma recognisable_intersection p q : recognisable p -> recognisable q -> recognisable (intersection p q).
Lemma dec_recognisable p : decidable p -> recognisable p.
Lemma dec_rec p : decidable p -> recognisable p /\ recognisable (complement p).
Lemma eva_dec : ~ decidable eva.