Implicit Types P Q : term -> Prop.
(** * Reducability *)
Definition computable_gen X Y (xenc : X -> term) (yenc : Y -> term) f :=
exists u, proc u /\ forall s, u (xenc s) ▷ (yenc (f s)).
Definition computable_fun f := computable_gen tenc tenc f.
Record mreducible P Q : Prop :=
{ f : term -> term ;
f_red : forall s, P s <-> Q (f s) ;
f_comp : computable_fun f ;
}.
Notation "P ⪯ Q" := (mreducible P Q) (at level 40, no associativity).

(* Specifications: *)
Lemma mreducible_sane P Q :
mreducible P Q <-> exists u, proc u /\ forall s, exists t, u (tenc s) ▷ tenc t /\ (P s <-> Q t).