Inductive tstate: Type :=
  ST: forall (s: state) (T: traceinf), forever step s T -> tstate.Inductive tstate: Type :=
  ST: forall (s: state) (T: traceinf), forever step s T -> tstate.Definition state_of_tstate (S: tstate): state :=
  match S with ST s T F => s end.Definition traceinf_of_tstate (S: tstate) : traceinf :=
  match S with ST s T F => T end.Inductive tsteps: tstate -> tstate -> Prop :=
  | tsteps_refl: forall S, tsteps S S
  | tsteps_left: forall t S1 S2 S3, tstep t S1 S2 -> tsteps S2 S3 -> tsteps S1 S3.Inductive tsteps: tstate -> tstate -> Prop :=
  | tsteps_refl: forall S, tsteps S S
  | tsteps_left: forall t S1 S2 S3, tstep t S1 S2 -> tsteps S2 S3 -> tsteps S1 S3.Inductive tsteps: tstate -> tstate -> Prop :=
  | tsteps_refl: forall S, tsteps S S
  | tsteps_left: forall t S1 S2 S3, tstep t S1 S2 -> tsteps S2 S3 -> tsteps S1 S3.Remark tsteps_trans:
  forall S1 S2, tsteps S1 S2 -> forall S3, tsteps S2 S3 -> tsteps S1 S3.

Lemma behavior_bigstep_diverges: forall T, bigstep_diverges B T -> program_behaves L (Reacts T) \/ exists t, program_behaves L (Diverges t) /\ traceinf_prefix t T.