Fixpoint fisrtn_list_from_fun {A: Type} (f: nat -> A) (n: nat) : list A :=
  match n with
  | 0 => nil
  | S m => fisrtn_list_from_fun f m ++ f m :: nil
  end.Definition State: Type := {l: list A | P l}.Definition state_nil: State := exist _ nil H_init.Fixpoint step (n: nat): State :=
  match n with
  | 0 => state_nil
  | S m => exist _ _ (HF (step m))
  end.

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).