Opaque bs2nat.
Opaque Cond.
Definition False_e n :=
Comp n (Succ false) [Zero_e n].
Opaque Zero_e One_e False_e Rev_e RemoveLSZ_e.
Definition Normalize_e : Cobham :=
Comp 1 Rev_e [Comp 1 RemoveLSZ_e [Rev_e]].
Opaque Normalize_e.
(** Def 1 of (Rose) *)
Definition Succ_e : Cobham :=
Rec
(Comp 0 (Succ true) [Zero])
(Comp 2 (Succ true) [Proj 2 0])
(Comp 2 (Succ false) [Proj 2 1])
(Comp 1 (Succ true) [Proj 1 0]).
Opaque Succ_e.
(** Def 2 of (Rose) *)
Definition Pred'_e : Cobham :=
Rec
Zero
(Comp 2 (Succ true) [Proj 2 1])
(Comp 2 (Succ false) [Proj 2 0])
(Proj 1 0).
Opaque Pred'_e.
Definition Pred_e : Cobham :=
Comp 1 Pred'_e [Normalize_e].

Lemma Pred_correct : forall l,
bs2nat (Sem Pred_e l) =  bs2nat (hd nil l) - 1.