Section step.
Variable F: State -> A.
Hypothesis HF: forall l: State, P (proj1_sig l ++ F l :: nil).
Fixpoint step (n: nat): State :=
match n with
| 0 => state_nil
| S m => exist _ _ (HF (step m))
end.
End step.

Lemma nat_stepwise_choice:
(forall l, P l -> exists a, P (l ++ a :: nil)) ->
exists f, forall n, P (fisrtn_list_from_fun f n).