(** * Receptiveness and determinacy *)
Definition single_events (L: semantics) : Prop :=
forall s t s', Step L s t s' -> (length t <= 1)%nat.
Record receptive (L: semantics) : Prop :=
Receptive {
sr_receptive: forall s t1 s1 t2,
Step L s t1 s1 -> match_traces (symbolenv L) t1 t2 -> exists s2, Step L s t2 s2;
sr_traces:
single_events L
}.
Record determinate (L: semantics) : Prop :=
Determinate {
sd_determ: forall s t1 s1 t2 s2,
Step L s t1 s1 -> Step L s t2 s2 ->
match_traces (symbolenv L) t1 t2 /\ (t1 = t2 -> s1 = s2);
sd_traces:
single_events L;
sd_initial_determ: forall s1 s2,
initial_state L s1 -> initial_state L s2 -> s1 = s2;
sd_final_nostep: forall s r,
final_state L s r -> Nostep L s;
sd_final_determ: forall s r1 r2,
final_state L s r1 -> final_state L s r2 -> r1 = r2
}.
Section DETERMINACY.
Variable L: semantics.
Hypothesis DET: determinate L.

(* Specifications: *)
Lemma sd_determ_1:
forall s t1 s1 t2 s2,
Step L s t1 s1 -> Step L s t2 s2 -> match_traces (symbolenv L) t1 t2.
Lemma sd_determ_2:
forall s t s1 s2,
Step L s t s1 -> Step L s t s2 -> s1 = s2.
Lemma star_determinacy:
forall s t s', Star L s t s' ->
forall s'', Star L s t s'' -> Star L s' E0 s'' \/ Star L s'' E0 s'.