From stdpp Require Import prelude. From VLSM.Core Require Import VLSM. From VLSM.Core.VLSMProjections Require Import VLSMInclusion VLSMEmbedding.
Core: VLSM Trace Equality
X
and VLSM Y
are equal if their valid_traces are exactly the same.
Section sec_VLSM_equality. Context {message : Type} {T : VLSMType message} . Definition VLSM_eq_part (MX MY : VLSMMachine T) (X := mk_vlsm MX) (Y := mk_vlsm MY) : Prop := VLSM_incl X Y /\ VLSM_incl Y X. End sec_VLSM_equality. Notation VLSM_eq X Y := (VLSM_eq_part (vlsm_machine X) (vlsm_machine Y)).message: Type
T: VLSMType message
MX: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM messageVLSM_eq X Xby firstorder. Qed.message: Type
T: VLSMType message
MX: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM messageVLSM_eq X Xmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM messageVLSM_eq X Y → VLSM_eq Y Xby firstorder. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM messageVLSM_eq X Y → VLSM_eq Y Xmessage: Type
T: VLSMType message
MX, MY, MZ: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Z:= {| vlsm_type := T; vlsm_machine := MZ |}: VLSM messageVLSM_eq X Y → VLSM_eq Y Z → VLSM_eq X Zby firstorder. Qed. Section sec_VLSM_eq_properties.message: Type
T: VLSMType message
MX, MY, MZ: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Z:= {| vlsm_type := T; vlsm_machine := MZ |}: VLSM messageVLSM_eq X Y → VLSM_eq Y Z → VLSM_eq X Z
Context
{message : Type} [T : VLSMType message]
[MX MY : VLSMMachine T]
(Hincl : VLSM_eq_part MX MY)
(X := mk_vlsm MX)
(Y := mk_vlsm MY)
.
VLSM equality specialized to finite trace.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
tr: list transition_itemfinite_valid_trace X s tr ↔ finite_valid_trace Y s trby split; apply VLSM_incl_finite_valid_trace, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
tr: list transition_itemfinite_valid_trace X s tr ↔ finite_valid_trace Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s, f: state X
tr: list transition_itemfinite_valid_trace_init_to X s f tr ↔ finite_valid_trace_init_to Y s f trby split; apply VLSM_incl_finite_valid_trace_init_to, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s, f: state X
tr: list transition_itemfinite_valid_trace_init_to X s f tr ↔ finite_valid_trace_init_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state Xvalid_state_prop X s ↔ valid_state_prop Y sby split; apply VLSM_incl_valid_state, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state Xvalid_state_prop X s ↔ valid_state_prop Y smessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
is: state Xinitial_state_prop is ↔ initial_state_prop isby split; apply VLSM_incl_initial_state, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
is: state Xinitial_state_prop is ↔ initial_state_prop ismessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
tr: list transition_itemfinite_valid_trace_from X s tr ↔ finite_valid_trace_from Y s trby split; apply VLSM_incl_finite_valid_trace_from, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
tr: list transition_itemfinite_valid_trace_from X s tr ↔ finite_valid_trace_from Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s, f: state X
tr: list transition_itemfinite_valid_trace_from_to X s f tr ↔ finite_valid_trace_from_to Y s f trby split; apply VLSM_incl_finite_valid_trace_from_to, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s, f: state X
tr: list transition_itemfinite_valid_trace_from_to X s f tr ↔ finite_valid_trace_from_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s1, s2: state Xin_futures X s1 s2 ↔ in_futures Y s1 s2by split; apply VLSM_incl_in_futures, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s1, s2: state Xin_futures X s1 s2 ↔ in_futures Y s1 s2message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) ↔ input_valid_transition Y l (s, im) (s', om)by split; apply @VLSM_incl_input_valid_transition, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) ↔ input_valid_transition Y l (s, im) (s', om)message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ (l : label X) (s : state X) (im : option message), input_valid X l (s, im) ↔ input_valid Y l (s, im)by split; apply @VLSM_incl_input_valid, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ (l : label X) (s : state X) (im : option message), input_valid X l (s, im) ↔ input_valid Y l (s, im)message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state T
om: option messageoption_can_produce X s om ↔ option_can_produce Y s omby split; apply VLSM_incl_can_produce, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state T
om: option messageoption_can_produce X s om ↔ option_can_produce Y s ommessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
m: messagecan_emit X m ↔ can_emit Y mby split; apply VLSM_incl_can_emit, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
m: messagecan_emit X m ↔ can_emit Y mmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace_from X s ls ↔ infinite_valid_trace_from Y s lsby split; apply VLSM_incl_infinite_valid_trace_from, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace_from X s ls ↔ infinite_valid_trace_from Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace X s ls ↔ infinite_valid_trace Y s lsby split; apply VLSM_incl_infinite_valid_trace, Hincl. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace X s ls ↔ infinite_valid_trace Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ t : Trace, valid_trace_prop X t ↔ valid_trace_prop Y tby split; apply VLSM_incl_valid_trace, Hincl. Qed. End sec_VLSM_eq_properties.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_eq_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message∀ t : Trace, valid_trace_prop X t ↔ valid_trace_prop Y t