Section mk_init_one.
Variable Σ : finType.
Variable s b : Σ^+.
Variable (H_disj : s <> b).
Variable (retr_pro : Retract sigPro Σ).
Variable (retr_list : Retract (sigList bool) Σ).
(* Tapes: 0: bs (input, encBoolsTM) 1: ter (input) 2: intern, bs als listBool 3: intern 4: intern 5: intern *)
Definition M_init_one : pTM (Σ) ^+ unit 6:=
encBoolsTM2boollist.M s retr_list @[|Fin0;Fin3|];;
Rev _ ⇑ retr_list @ [|Fin3;Fin2;Fin4|];;
BoollistToEnc.M retr_list retr_pro @[|Fin2;Fin3;Fin4;Fin5|];;
APP_right ⇑ retr_pro  @[|Fin1;Fin3|].

Lemma M_init_one_Spec :
{ f & forall (bs:list bool) (ter : L.term),
TripleT ≃≃([],[|Custom (eq (encBoolsTM s b bs));Contains _ (compile ter);Void;Void;Void;Void|])
(f bs ter) M_init_one (fun _ => ≃≃([],[|Custom (eq (encBoolsTM s b bs));Contains _ (compile (L.app ter (encBoolsL bs)));Void;Void;Void;Void|])) }.