From stdpp Require Import prelude. From VLSM.Core Require Import VLSM. From VLSM.Core.VLSMProjections Require Import VLSMEmbedding VLSMTotalProjection.
Core: VLSM Inclusion
X
is included in VLSM Y
if every valid_trace available to X
is also available to Y
.
Section sec_VLSM_inclusion. Context {message : Type} {T : VLSMType message} . Definition VLSM_incl_part (MX MY : VLSMMachine T) (X := mk_vlsm MX) (Y := mk_vlsm MY) := forall t : Trace, valid_trace_prop X t -> valid_trace_prop Y t. #[local] Notation VLSM_incl X Y := (VLSM_incl_part (vlsm_machine X) (vlsm_machine Y)).message: Type
T: VLSMType message
MX: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM messageVLSM_incl X Xby firstorder. Qed.message: Type
T: VLSMType message
MX: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM messageVLSM_incl X 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_incl X Y → VLSM_incl Y Z → VLSM_incl X Zby firstorder. Qed.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_incl X Y → VLSM_incl Y Z → VLSM_incl X Zmessage: 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_incl X Y ↔ (∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr)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_incl X Y ↔ (∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr)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 message
Hincl: VLSM_incl X Y∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s trmessage: 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 message
Hincl: ∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s trVLSM_incl X Yby intros; apply (Hincl (Finite s tr)).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 message
Hincl: VLSM_incl X Y∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s trmessage: 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 message
Hincl: ∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s trVLSM_incl X Ymessage: 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 message
Hincl: ∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
tr: Trace
Htr: valid_trace_prop {| vlsm_type := T; vlsm_machine := X |} trvalid_trace_prop {| vlsm_type := T; vlsm_machine := Y |} trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: list transition_item
Htr: finite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} is trfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
Htr: infinite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} is trinfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trby apply Hincl.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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: list transition_item
Htr: finite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} is trfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
Htr: infinite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} is trinfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop isinfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop isfinite_valid_trace X is []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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop is
His_tr: finite_valid_trace X is []infinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop isfinite_valid_trace X is []by constructor; apply initial_state_is_valid.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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop isfinite_valid_trace_from X is []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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop is
His_tr: finite_valid_trace X is []infinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX: initial_state_prop is
His_tr: finite_valid_trace Y is []infinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX, HisY: initial_state_prop isinfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX, HisY: initial_state_prop isinfinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} is trmessage: 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX, HisY: initial_state_prop is∀ n : nat, finite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} is (StreamExtras.stream_prefix tr n)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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX, HisY: initial_state_prop is
n: natfinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} is (StreamExtras.stream_prefix tr n)by apply Hincl. 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 message
Hincl: ∀ (s : state T) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y s tr
is: state T
tr: Streams.Stream transition_item
HtrX: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is tr
HisX, HisY: initial_state_prop is
n: nat
HfinX: finite_valid_trace_from {| vlsm_type := T; vlsm_machine := MX |} is (StreamExtras.stream_prefix tr n)finite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} is (StreamExtras.stream_prefix tr n)
A VLSM_inclusion is equivalent to a VLSM_embedding in which both the
label and state projection functions are identities.
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_incl X Y ↔ VLSM_embedding X Y id idmessage: 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_incl X Y ↔ VLSM_embedding X Y id idmessage: 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 message∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_incl X Y ↔ VLSM_embedding X Y id idmessage: 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 message∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trby destruct a; cbn; f_equal.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 message
a: transition_item
tr: list transition_item
IHtr: tr = pre_VLSM_embedding_finite_trace_project T T id id tra :: tr = pre_VLSM_embedding_finite_trace_project T T id id (a :: tr)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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_incl X Y ↔ VLSM_embedding X Y id idmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_incl X Y → VLSM_embedding X Y id idmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_embedding X Y id id → VLSM_incl X Ymessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_incl X Y → VLSM_embedding X Y id idmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
H: VLSM_incl X Y
sX: state X
trX: list transition_item
H0: finite_valid_trace X sX trXfinite_valid_trace Y (id sX) (pre_VLSM_embedding_finite_trace_project X Y id id trX)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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
H: VLSM_incl X Y
sX: state X
trX: list transition_item
H0: finite_valid_trace {| vlsm_type := T; vlsm_machine := Y |} sX trXfinite_valid_trace Y (id sX) (pre_VLSM_embedding_finite_trace_project X Y id id trX)by apply Hid.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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
H: VLSM_incl X Y
sX: state X
trX: list transition_item
H0: finite_valid_trace {| vlsm_type := T; vlsm_machine := Y |} sX trXtrX = pre_VLSM_embedding_finite_trace_project X X id id trXmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id trVLSM_embedding X Y id id → VLSM_incl X Ymessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
Hproject: VLSM_embedding X Y id idVLSM_incl X Ymessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
Hproject: VLSM_embedding X Y id id∀ (s : state {| vlsm_type := T; vlsm_machine := MX |}) (tr : list transition_item), finite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} s tr → finite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} s trmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
Hproject: VLSM_embedding X Y id id
s: state {| vlsm_type := T; vlsm_machine := MX |}
tr: list transition_item
H: finite_valid_trace {| vlsm_type := T; vlsm_machine := MX |} s trfinite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} s trmessage: 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
Hproject: VLSM_embedding X Y id id
s: state {| vlsm_type := T; vlsm_machine := MX |}
tr: list transition_item
H: finite_valid_trace Y (id s) (VLSM_embedding_finite_trace_project Hproject tr)finite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} s trby apply Hid. 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 message
Hid: ∀ tr : list transition_item, tr = pre_VLSM_embedding_finite_trace_project T T id id tr
Hproject: VLSM_embedding X Y id id
s: state {| vlsm_type := T; vlsm_machine := MX |}
tr: list transition_item
H: finite_valid_trace Y (id s) (VLSM_embedding_finite_trace_project Hproject tr)tr = VLSM_embedding_finite_trace_project Hproject trmessage: 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_incl X Y → VLSM_embedding X Y id idexact (proj1 (VLSM_incl_embedding_iff MX MY)). 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_incl X Y → VLSM_embedding X Y id idmessage: 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 message
Hincl: VLSM_incl X Y∀ tr : list transition_item, VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = trmessage: 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 message
Hincl: VLSM_incl X Y∀ tr : list transition_item, VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = trmessage: 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 message
Hincl: VLSM_incl X Y
a: transition_item
tr: list transition_item
IHtr: VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = trVLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) (a :: tr) = a :: trmessage: 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 message
Hincl: VLSM_incl X Y
a: transition_item
tr: list transition_item
IHtr: VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = trpre_VLSM_embedding_transition_item_project T T id id a :: VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = a :: trby destruct a. Qed. End sec_VLSM_inclusion. Notation VLSM_incl X Y := (VLSM_incl_part (vlsm_machine X) (vlsm_machine Y)). Section sec_VLSM_incl_preservation.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 message
Hincl: VLSM_incl X Y
a: transition_item
tr: list transition_item
IHtr: VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr = trpre_VLSM_embedding_transition_item_project T T id id a = a
Context {message : Type} {T : VLSMType message} (MX MY : VLSMMachine T) (X := mk_vlsm MX) (Y := mk_vlsm MY) . Definition weak_incl_valid_preservation : Prop := weak_embedding_valid_preservation X Y id id. Definition strong_incl_valid_preservation : Prop := strong_embedding_valid_preservation X Y id id. Definition weak_incl_transition_preservation : Prop := weak_embedding_transition_preservation X Y id id. Definition strong_incl_transition_preservation : Prop := strong_embedding_transition_preservation X Y id id. Definition strong_incl_initial_state_preservation : Prop := strong_projection_initial_state_preservation X Y id. Definition weak_incl_initial_message_preservation : Prop := weak_embedding_initial_message_preservation X Y id. Definition strong_incl_initial_message_preservation : Prop := strong_embedding_initial_message_preservation X Y. End sec_VLSM_incl_preservation. Section sec_VLSM_incl_properties.
Context
{message : Type} [T : VLSMType message]
[MX MY : VLSMMachine T]
(Hincl : VLSM_incl_part MX MY)
(X := mk_vlsm MX)
(Y := mk_vlsm MY)
.
VLSM inclusion specialized to finite trace.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace X s trfinite_valid_trace Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace X s trfinite_valid_trace Y s trby rewrite (VLSM_incl_is_embedding_finite_trace_project Hincl) in Htr. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace {| vlsm_type := T; vlsm_machine := MY |} (id s) (VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr)finite_valid_trace Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_init_to X s f trfinite_valid_trace_init_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_init_to X s f trfinite_valid_trace_init_to Y s f trby rewrite (VLSM_incl_is_embedding_finite_trace_project Hincl) in Htr. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_init_to {| vlsm_type := T; vlsm_machine := MY |} (id s) (id f) (VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr)finite_valid_trace_init_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
Hs: valid_state_prop X svalid_state_prop Y sby apply (VLSM_embedding_valid_state (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
s: state X
Hs: valid_state_prop X svalid_state_prop Y smessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 apply (VLSM_embedding_initial_state (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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_item
Htr: finite_valid_trace_from X s trfinite_valid_trace_from Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_from X s trfinite_valid_trace_from Y s trby rewrite (VLSM_incl_is_embedding_finite_trace_project Hincl) in Htr. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} (id s) (VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr)finite_valid_trace_from Y s trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_from_to X s f trfinite_valid_trace_from_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_from_to X s f trfinite_valid_trace_from_to Y s f trby rewrite (VLSM_incl_is_embedding_finite_trace_project Hincl) in Htr. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: finite_valid_trace_from_to {| vlsm_type := T; vlsm_machine := MY |} (id s) (id f) (VLSM_embedding_finite_trace_project (VLSM_incl_is_embedding Hincl) tr)finite_valid_trace_from_to Y s f trmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 apply (VLSM_embedding_in_futures (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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 apply (VLSM_embedding_input_valid_transition (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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 apply (VLSM_embedding_input_valid (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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)
VLSM_incl almost implies inclusion of the valid_state_message_prop sets.
Some additional hypotheses are required because VLSM_incl only
refers to traces, and valid_initial_state_message means that
valid_state_message_prop includes some pairs that do not appear in any
transition.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hmessage: strong_incl_initial_message_preservation MX MY∀ (s : state X) (om : option message), valid_state_message_prop X s om → valid_state_message_prop Y s ommessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hmessage: strong_incl_initial_message_preservation MX MY∀ (s : state X) (om : option message), valid_state_message_prop X s om → valid_state_message_prop Y s omby apply (VLSM_embedding_valid_state_message (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hmessage: strong_incl_initial_message_preservation MX MY
s: state X
om: option messagevalid_state_message_prop X s om → valid_state_message_prop Y s ommessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 apply (VLSM_embedding_can_produce (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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 apply (VLSM_embedding_can_emit (VLSM_incl_is_embedding Hincl)). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM messagestrong_incl_initial_message_preservation MX MY → ∀ m : message, valid_message_prop X m → valid_message_prop Y mmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM messagestrong_incl_initial_message_preservation MX MY → ∀ m : message, valid_message_prop X m → valid_message_prop Y mby exists s; revert Hm; apply VLSM_incl_valid_state_message. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_part MX MY
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hinitial_valid_message: strong_incl_initial_message_preservation MX MY
m: message
s: state X
Hm: valid_state_message_prop X s (Some m)valid_message_prop Y mmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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_incl_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_item
Hls: infinite_valid_trace_from X s lsinfinite_valid_trace_from Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Hls: infinite_valid_trace_from {| vlsm_type := T; vlsm_machine := MY |} (id s) (VLSM_embedding_infinite_trace_project (VLSM_incl_is_embedding Hincl) ls)infinite_valid_trace_from Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 {| vlsm_type := T; vlsm_machine := MY |} (id s) (VLSM_embedding_infinite_trace_project (VLSM_incl_is_embedding Hincl) ls) → infinite_valid_trace_from Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_itemStreams.EqSt (VLSM_embedding_infinite_trace_project (VLSM_incl_is_embedding Hincl) ls) lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item∀ n : nat, Streams.Str_nth n (VLSM_embedding_infinite_trace_project (VLSM_incl_is_embedding Hincl) ls) = Streams.Str_nth n lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item∀ n : nat, Streams.Str_nth n (Streams.map (pre_VLSM_embedding_transition_item_project {| vlsm_type := T; vlsm_machine := MX |} {| vlsm_type := T; vlsm_machine := MY |} id id) ls) = Streams.Str_nth n lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
n: natStreams.Str_nth n (Streams.map (pre_VLSM_embedding_transition_item_project {| vlsm_type := T; vlsm_machine := MX |} {| vlsm_type := T; vlsm_machine := MY |} id id) ls) = Streams.Str_nth n lsby destruct (Streams.Str_nth _ _). Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
n: natpre_VLSM_embedding_transition_item_project {| vlsm_type := T; vlsm_machine := MX |} {| vlsm_type := T; vlsm_machine := MY |} id id (Streams.Str_nth n ls) = Streams.Str_nth n lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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_incl_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_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace_from Y s lsmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinitial_state_prop sby apply VLSM_incl_infinite_valid_trace_from.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace_from Y s lsby apply VLSM_incl_initial_state. Qed.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinitial_state_prop smessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 tmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 tmessage: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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_incl_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: Streams.Stream transition_iteminfinite_valid_trace X s tr → infinite_valid_trace Y s trby apply VLSM_incl_finite_valid_trace.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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 apply VLSM_incl_infinite_valid_trace. Qed. End sec_VLSM_incl_properties.message: Type
T: VLSMType message
MX, MY: VLSMMachine T
Hincl: VLSM_incl_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: Streams.Stream transition_iteminfinite_valid_trace X s tr → infinite_valid_trace Y s tr
We instantiate the above for VLSM inclusions
Section sec_basic_VLSM_incl. Context {message : Type} {T : VLSMType message} (MX MY : VLSMMachine T) (X := mk_vlsm MX) (Y := mk_vlsm MY) .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 message
Hinitial_state: strong_incl_initial_state_preservation MX MY
Hinitial_valid_message: weak_incl_initial_message_preservation MX MY
Hvalid: weak_incl_valid_preservation MX MY
Htransition: weak_incl_transition_preservation MX MYVLSM_incl X Yby apply VLSM_incl_embedding_iff, basic_VLSM_embedding. 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 message
Hinitial_state: strong_incl_initial_state_preservation MX MY
Hinitial_valid_message: weak_incl_initial_message_preservation MX MY
Hvalid: weak_incl_valid_preservation MX MY
Htransition: weak_incl_transition_preservation MX MYVLSM_incl X Ymessage: 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 message
Hinitial_state: strong_incl_initial_state_preservation MX MY
Hinitial_valid_message: strong_incl_initial_message_preservation MX MY
Hvalid: strong_incl_valid_preservation MX MY
Htransition: strong_incl_transition_preservation MX MYVLSM_incl X Yby apply VLSM_incl_embedding_iff, basic_VLSM_strong_embedding. Qed. End sec_basic_VLSM_incl.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 message
Hinitial_state: strong_incl_initial_state_preservation MX MY
Hinitial_valid_message: strong_incl_initial_message_preservation MX MY
Hvalid: strong_incl_valid_preservation MX MY
Htransition: strong_incl_transition_preservation MX MYVLSM_incl X Y