Inductive csafe : nat -> config -> Prop :=
| csafe_0 sch thd pool : csafe 0 (sch, thd, pool)
| csafe_halted n thd pool : csafe n (nil, thd, pool)
| csafe_core n sch thd pool thd' pool' :
    machine (sch, thd, pool) (sch, thd', pool') ->
    csafe n (sch, thd', pool') ->
    csafe (S n) (sch, thd, pool)
| csafe_sch n i sch thd pool thd' pool' :
    machine (i :: sch, thd, pool) (sch, thd', pool') ->
    (forall sch', csafe n (sch', thd', pool')) ->
    csafe (S n) (i :: sch, thd, pool).Inductive csafe : nat -> config -> Prop :=
| csafe_0 sch thd pool : csafe 0 (sch, thd, pool)
| csafe_halted n thd pool : csafe n (nil, thd, pool)
| csafe_core n sch thd pool thd' pool' :
    machine (sch, thd, pool) (sch, thd', pool') ->
    csafe n (sch, thd', pool') ->
    csafe (S n) (sch, thd, pool)
| csafe_sch n i sch thd pool thd' pool' :
    machine (i :: sch, thd, pool) (sch, thd', pool') ->
    (forall sch', csafe n (sch', thd', pool')) ->
    csafe (S n) (i :: sch, thd, pool).Inductive csafe : nat -> config -> Prop :=
| csafe_0 sch thd pool : csafe 0 (sch, thd, pool)
| csafe_halted n thd pool : csafe n (nil, thd, pool)
| csafe_core n sch thd pool thd' pool' :
    machine (sch, thd, pool) (sch, thd', pool') ->
    csafe n (sch, thd', pool') ->
    csafe (S n) (sch, thd, pool)
| csafe_sch n i sch thd pool thd' pool' :
    machine (i :: sch, thd, pool) (sch, thd', pool') ->
    (forall sch', csafe n (sch', thd', pool')) ->
    csafe (S n) (i :: sch, thd, pool).Inductive csafe : nat -> config -> Prop :=
| csafe_0 sch thd pool : csafe 0 (sch, thd, pool)
| csafe_halted n thd pool : csafe n (nil, thd, pool)
| csafe_core n sch thd pool thd' pool' :
    machine (sch, thd, pool) (sch, thd', pool') ->
    csafe n (sch, thd', pool') ->
    csafe (S n) (sch, thd, pool)
| csafe_sch n i sch thd pool thd' pool' :
    machine (i :: sch, thd, pool) (sch, thd', pool') ->
    (forall sch', csafe n (sch', thd', pool')) ->
    csafe (S n) (i :: sch, thd, pool).Inductive csafe : nat -> config -> Prop :=
| csafe_0 sch thd pool : csafe 0 (sch, thd, pool)
| csafe_halted n thd pool : csafe n (nil, thd, pool)
| csafe_core n sch thd pool thd' pool' :
    machine (sch, thd, pool) (sch, thd', pool') ->
    csafe n (sch, thd', pool') ->
    csafe (S n) (sch, thd, pool)
| csafe_sch n i sch thd pool thd' pool' :
    machine (i :: sch, thd, pool) (sch, thd', pool') ->
    (forall sch', csafe n (sch', thd', pool')) ->
    csafe (S n) (i :: sch, thd, pool).

(* Specifications: *)
Lemma safety_invariant n state : invariant n state -> csafe n state.