Section TRANSITIONS.
Definition decrement_trans (c : Config) := mkconfig (co c - 1)%Z.
Definition divide_trans (c : Config) := mkconfig (Z.div2 (co c)).
Inductive transition (c : Config) : Set :=
| decrement : (co c > 0)%Z -> Zeven.Zodd (co c) -> transition c
| divide : (co c > 0)%Z -> Zeven.Zeven (co c) -> transition c.
Definition next_config (c : Config) (t : transition c) :=
match t with
| decrement h1 h2 => decrement_trans c
| divide h1 h2 => divide_trans c
end.
Variable x : Z.
Inductive legal : Config -> Prop :=
| begin : legal (mk_init_config x)
| after :
forall (c : Config) (t : transition c),
legal c -> legal (next_config c t).
End TRANSITIONS.
(* positive *)

Lemma rec2_princ :
forall P : Z -> Prop,
P 0%Z ->
(forall x : Z, Zeven.Zeven x -> (x > 0)%Z -> P (Z.div2 x) -> P x) ->
(forall x : Z, Zeven.Zodd x -> (x > 0)%Z -> P (x - 1)%Z -> P x) ->
forall x : Z, (x >= 0)%Z -> P x.