(** Determinism for program executions *)
Definition same_behaviors (beh1 beh2: program_behavior) : Prop :=
match beh1, beh2 with
| Terminates t1 r1, Terminates t2 r2 => t1 = t2 /\ r1 = r2
| Diverges t1, Diverges t2 => t1 = t2
| Reacts t1, Reacts t2 => traceinf_sim t1 t2
| Goes_wrong t1, Goes_wrong t2 => t1 = t2
| _, _ => False
end.

Theorem program_behaves_deterministic:
forall beh1 beh2,
program_behaves L beh1 -> program_behaves L beh2 ->
same_behaviors beh1 beh2.