Definition inductive_invariant (step : step_relation) (init : A) (P : A -> Prop) :=
    P init /\ inductive step P.Definition reachable step init a :=
    exists out, refl_trans_1n_trace step init a out.Definition true_in_reachable step init (P : A -> Prop) :=
    forall a,
      reachable step init a ->
      P a.

(* Specifications: *)
Theorem true_in_reachable_reqs : forall (step : step_relation) init (P : A -> Prop), (P init) -> (forall a a' out, step a a' out -> reachable step init a -> P a -> P a') -> true_in_reachable step init P.
Theorem inductive_invariant_true_in_reachable : forall step init P, inductive_invariant step init P -> true_in_reachable step init P.