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 fisrtn_list_step: forall n, fisrtn_list_from_fun (fun n0 : nat => F (step n0)) n = proj1_sig (step n).