Section CaseFin.
Variable sig : finType.
Hypothesis defSig : inhabitedC sig.
Definition CaseFin : pTM sig^+ sig 1 :=
Move Rmove;;
Switch (ReadChar)
(fun s => match s with
| Some (inr x) => Return (Move Rmove) x
| _ => Return (Nop) default
end).
(* Note that [Encode_Finite] is not globally declared as an instance, because that would cause ambiguity. For example, [bool+bool] is finite, but we might want to encode it with [Encode_sum Encode_bool Encode_bool]. *)
Local Existing Instance Encode_Finite.
Definition CaseFin_Rel : pRel sig^+ sig 1 :=
fun tin '(yout, tout) => forall (x : sig) (s : nat), tin[@Fin0] ≃(;s) x -> isVoid_size tout[@Fin0] (S(S(s))) /\ yout = x.
Definition CaseFin_steps := 5.

Lemma CaseFin_Sem : CaseFin ⊨c(CaseFin_steps) CaseFin_Rel.