Section step.
Variable (state cont : Type).
Variable (step : state -> cont -> state -> cont -> Prop).
Inductive star : state -> cont -> state -> cont -> Prop :=
| star_refl s k : star s k s k
| star_step s k s2 k2 s' k' :
step s k s2 k2 -> star s2 k2 s' k' -> star s k s' k'.
Inductive stepN : nat -> state -> cont -> state -> cont -> Prop :=
| stepO s k : stepN O s k s k
| stepS s k s2 k2 s' k' n :
step s k s2 k2 -> stepN n s2 k2 s' k' ->
stepN (S n) s k s' k'.
Inductive plus : state -> cont -> state -> cont -> Prop :=
| plus_left : forall s k s2 k2 s' k',
step s k s2 k2 -> star s2 k2 s' k' -> plus s k s' k'.

Lemma plus_step1 s k s' k' :
plus s k s' k' <-> exists n, stepN (S n) s k s' k'.