From stdpp Require Import prelude. From VLSM.Lib Require Import Preamble StreamExtras StreamFilters StdppExtras. From VLSM.Core Require Import VLSM VLSMProjections.VLSMPartialProjection.
Core: VLSM Stuttering Embeddings
X
to VLSM Y
(sharing the same messages) if there exists maps state_project
taking X
-states to Y
-states, and transition_item_project
, taking
a transition from X
to a list of transitions in Y
, such that:
- transition_item_project_consistency: the state-translation of the destination of a transition is the final state of the translation of the transition.
- stuttering_embedding_preserves_valid_traces: traces obtained by concatenating the translations of transition of a valid trace are valid.
Section sec_pre_definitions. Context {message : Type} {TX TY : VLSMType message} (state_project : state TX -> state TY) (transition_item_project : transition_item TX -> list (transition_item TY)) . Definition pre_VLSM_stuttering_embedding_finite_trace_project : list (transition_item TX) -> list (transition_item TY) := mbind transition_item_project. Definition pre_VLSM_stuttering_embedding_infinite_trace_project (s : Streams.Stream (transition_item TX)) (Hs : InfinitelyOften (fun item => transition_item_project item <> []) s) : Streams.Stream (transition_item TY) := stream_concat_map transition_item_project s Hs. Definition pre_VLSM_stuttering_embedding_infinite_finite_trace_project (s : Streams.Stream (transition_item TX)) (Hs : FinitelyManyBound (fun item => transition_item_project item <> []) s) : list (transition_item TY) := bounded_stream_concat_map transition_item_project s Hs.message: Type
TX, TY: VLSMType message
state_project: state TX → state TY
transition_item_project: transition_item → list transition_item∀ l1 l2 : list transition_item, pre_VLSM_stuttering_embedding_finite_trace_project (l1 ++ l2) = pre_VLSM_stuttering_embedding_finite_trace_project l1 ++ pre_VLSM_stuttering_embedding_finite_trace_project l2exact (mbind_app _). Qed.message: Type
TX, TY: VLSMType message
state_project: state TX → state TY
transition_item_project: transition_item → list transition_item∀ l1 l2 : list transition_item, pre_VLSM_stuttering_embedding_finite_trace_project (l1 ++ l2) = pre_VLSM_stuttering_embedding_finite_trace_project l1 ++ pre_VLSM_stuttering_embedding_finite_trace_project l2message: Type
TX, TY: VLSMType message
state_project: state TX → state TY
transition_item_project: transition_item → list transition_item∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)by intros; apply elem_of_list_bind. Qed. End sec_pre_definitions. Record VLSM_stuttering_embedding_type {message : Type} (X : VLSM message) (TY : VLSMType message) (state_project : state X -> state TY) (transition_item_project : transition_item X -> list (transition_item TY)) : Prop := { transition_item_project_consistency : forall sX itemX, input_valid_transition_item X sX itemX -> finite_trace_last (state_project sX) (transition_item_project itemX) = state_project (destination itemX); }.message: Type
TX, TY: VLSMType message
state_project: state TX → state TY
transition_item_project: transition_item → list transition_item∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)
Section sec_stuttering_embedding_type_properties. Definition strong_transition_item_project_consistency {message : Type} [X : VLSM message] [TY : VLSMType message] (state_project : state X -> state TY) (transition_item_project : transition_item X -> list (transition_item TY)) : Prop := forall sX lX inputX destinationX outputX, transition X lX (sX, inputX) = (destinationX, outputX) -> finite_trace_last (state_project sX) (transition_item_project {| l := lX; input := inputX; destination := destinationX; output := outputX |}) = state_project destinationX. Section sec_pre_properties. Context {message : Type} (X : VLSM message) (TY : VLSMType message) (state_project : state X -> state TY) (transition_item_project : transition_item X -> list (transition_item TY)) (Hsimul : VLSM_stuttering_embedding_type X TY state_project transition_item_project) .message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X TY state_project transition_item_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_trace_last (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr) = state_project (finite_trace_last s tr)message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X TY state_project transition_item_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_trace_last (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr) = state_project (finite_trace_last s tr)message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X TY state_project transition_item_project
s: state X
tr: list transition_item
H: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHfinite_valid_trace_from: finite_trace_last (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr) = state_project (finite_trace_last s tr)finite_trace_last (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project (tr ++ [x])) = state_project (finite_trace_last s (tr ++ [x]))by cbn; rewrite app_nil_r. Qed. End sec_pre_properties. Definition VLSM_partial_trace_project_from_stuttering_embedding {message : Type} {X : VLSM message} {TY : VLSMType message} (state_project : state X -> state TY) (transition_item_project : transition_item X -> list (transition_item TY)) (trace_project := pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project) (str : state X * list (transition_item X)) : option (state TY * list (transition_item TY)) := let (s, tr) := str in Some (state_project s, trace_project tr). Context {message : Type} {X Y : VLSM message} (state_project : state X -> state Y) (transition_item_project : transition_item X -> list (transition_item Y)) (Hsimul : VLSM_stuttering_embedding_type X Y state_project transition_item_project) .message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X TY state_project transition_item_project
s: state X
tr: list transition_item
H: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHfinite_valid_trace_from: finite_trace_last (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr) = state_project (finite_trace_last s tr)finite_trace_last (state_project (finite_trace_last s tr)) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project [x]) = finite_trace_last (state_project (finite_trace_last s tr)) (transition_item_project x)
Any VLSM_stuttering_embedding_type determines a VLSM_partial_projection_type,
allowing us to lift to VLSM stuttering embeddings the generic results proved
about VLSM partial projections.
message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
sY: state Y
trY: list transition_item
Hpr: VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project (sX, trX) = Some (sY, trY)
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
Htr: finite_valid_trace_from X s'X (preX ++ trX)∃ (s'Y : state Y) (preY : list transition_item), VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project (s'X, preX ++ trX) = Some (s'Y, preY ++ trY) ∧ finite_trace_last s'Y preY = sYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
Htr: finite_valid_trace_from X s'X (preX ++ trX)∃ (s'Y : state Y) (preY : list transition_item), Some (state_project s'X, pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project (preX ++ trX)) = Some (s'Y, preY ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX) ∧ finite_trace_last s'Y preY = state_project sXmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
Htr: finite_valid_trace_from X s'X (preX ++ trX)∃ (s'Y : state Y) (preY : list transition_item), Some (state_project s'X, pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project preX ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX) = Some (s'Y, preY ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX) ∧ finite_trace_last s'Y preY = state_project sXmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
Htr: finite_valid_trace_from X s'X (preX ++ trX)Some (state_project s'X, pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project preX ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX) = Some (state_project s'X, ?Goal ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX) ∧ finite_trace_last (state_project s'X) ?Goal = state_project sXmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
Htr: finite_valid_trace_from X s'X (preX ++ trX)finite_trace_last (state_project s'X) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project preX) = state_project sXby erewrite pre_VLSM_stuttering_embedding_finite_trace_last, Hlst. Qed. End sec_stuttering_embedding_type_properties. Section sec_VLSM_stuttering_embedding_definitions. Context {message : Type} (X Y : VLSM message) (state_project : state X -> state Y) (transition_item_project : transition_item X -> list (transition_item Y)) (trace_project := pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project) . Definition stuttering_embedding_input_valid_transition_item_validity : Prop := forall s item, input_valid_transition_item X s item -> finite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item).message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding_type X Y state_project transition_item_project
sX: state X
trX: list transition_item
s'X: state X
preX: list transition_item
Hlst: finite_trace_last s'X preX = sX
H: finite_valid_trace_from X s'X preX
H0: finite_valid_trace_from X (finite_trace_last s'X preX) trXfinite_trace_last (state_project s'X) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project preX) = state_project sX
Similarly to the VLSM_partial_projection case we distinguish two types of
stuttering embeddings: VLSM_weak_stuttering_embedding and
VLSM_stuttering_embedding, distinguished by the fact that the weak
embeddings are not required to preserve initial states.
Record VLSM_weak_stuttering_embedding : Prop := { weak_stuttering_embedding_type :> VLSM_stuttering_embedding_type X Y state_project transition_item_project; weak_stuttering_embedding_preserves_valid_trace : forall sX trX, finite_valid_trace_from X sX trX -> finite_valid_trace_from Y (state_project sX) (trace_project trX); }. Record VLSM_stuttering_embedding : Prop := { stuttering_embedding_type :> VLSM_stuttering_embedding_type X Y state_project transition_item_project; stuttering_embedding_preserves_valid_trace : forall sX trX, finite_valid_trace X sX trX -> finite_valid_trace Y (state_project sX) (trace_project trX); }. Definition weak_stuttering_embedding_initial_state_preservation : Prop := forall s : state X, initial_state_prop X s -> valid_state_prop Y (state_project s). Definition strong_stuttering_embedding_initial_state_preservation : Prop := forall s : state X, initial_state_prop X s -> initial_state_prop Y (state_project s).message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
trace_project:= pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project: list transition_item → list transition_itemstrong_stuttering_embedding_initial_state_preservation → weak_stuttering_embedding_initial_state_preservationmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
trace_project:= pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project: list transition_item → list transition_itemstrong_stuttering_embedding_initial_state_preservation → weak_stuttering_embedding_initial_state_preservationmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
trace_project:= pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project: list transition_item → list transition_item
Hstrong: strong_stuttering_embedding_initial_state_preservation
s: state X
Hs: initial_state_prop svalid_state_prop Y (state_project s)by apply Hstrong. Qed. End sec_VLSM_stuttering_embedding_definitions. Section sec_weak_stuttering_embedding_properties. Context {message : Type} {X Y : VLSM message} {state_project : state X -> state Y} {transition_item_project : transition_item X -> list (transition_item Y)} . Section sec_weak_stuttering_embedding_trace_projection_redefinitions.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
trace_project:= pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project: list transition_item → list transition_item
Hstrong: strong_stuttering_embedding_initial_state_preservation
s: state X
Hs: initial_state_prop sinitial_state_prop (state_project s)
Here we restate the
pre_
definitions above to depend on VLSM_weak_stuttering_embedding
and have their state and transition item projection functions implicit.
Definition VLSM_weak_stuttering_embedding_finite_trace_project (Hsimul : VLSM_weak_stuttering_embedding X Y state_project transition_item_project) : list (transition_item X) -> list (transition_item Y) := pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_itemVLSM_weak_stuttering_embedding X Y state_project transition_item_project → ∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)exact (fun _ => elem_of_pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project). Qed. Definition VLSM_weak_stuttering_embedding_infinite_trace_project (Hsimul : VLSM_weak_stuttering_embedding X Y state_project transition_item_project) (s : Streams.Stream (transition_item X)) (Hinf : InfinitelyOften (fun item => transition_item_project item <> []) s) : Streams.Stream (transition_item Y) := pre_VLSM_stuttering_embedding_infinite_trace_project transition_item_project s Hinf. Definition VLSM_weak_stuttering_embedding_infinite_finite_trace_project (Hsimul : VLSM_weak_stuttering_embedding X Y state_project transition_item_project) (s : Streams.Stream (transition_item X)) (Hfin : FinitelyManyBound (fun item => transition_item_project item <> []) s) : list (transition_item Y) := pre_VLSM_stuttering_embedding_infinite_finite_trace_project transition_item_project s Hfin. End sec_weak_stuttering_embedding_trace_projection_redefinitions.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_itemVLSM_weak_stuttering_embedding X Y state_project transition_item_project → ∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)
While for the above section, the VLSM_weak_stuttering_embedding was necessary
to be mentioned explicitly, in the following we make it part of the context.
Context (Hsimul : VLSM_weak_stuttering_embedding X Y state_project transition_item_project).message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ l1 l2 : list transition_item, VLSM_weak_stuttering_embedding_finite_trace_project Hsimul (l1 ++ l2) = VLSM_weak_stuttering_embedding_finite_trace_project Hsimul l1 ++ VLSM_weak_stuttering_embedding_finite_trace_project Hsimul l2exact (pre_VLSM_stuttering_embedding_finite_trace_project_app transition_item_project). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ l1 l2 : list transition_item, VLSM_weak_stuttering_embedding_finite_trace_project Hsimul (l1 ++ l2) = VLSM_weak_stuttering_embedding_finite_trace_project Hsimul l1 ++ VLSM_weak_stuttering_embedding_finite_trace_project Hsimul l2message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_trace_last (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX) = state_project (finite_trace_last sX trX)exact (pre_VLSM_stuttering_embedding_finite_trace_last _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_trace_last (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX) = state_project (finite_trace_last sX trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)exact (weak_stuttering_embedding_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trXinfinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX∀ n : nat, finite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
n: natfinite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
suf: list transition_item
Hrew: stream_prefix trX m ≫= transition_item_project = stream_prefix (stream_concat_map transition_item_project trX Hinf) n ++ suffinite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
suf: list transition_item
Hrew: stream_prefix trX m ≫= transition_item_project = stream_prefix (stream_concat_map transition_item_project trX Hinf) n ++ suffinite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_stuttering_embedding_infinite_trace_project Hsimul trX Hinf) n ++ suf)by apply VLSM_weak_stuttering_embedding_finite_valid_trace_from, infinite_valid_trace_from_prefix. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
suf: list transition_item
Hrew: stream_prefix trX m ≫= transition_item_project = stream_prefix (stream_concat_map transition_item_project trX Hinf) n ++ suffinite_valid_trace_from Y (state_project sX) (stream_prefix trX m ≫= transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trXfinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)by apply infinite_valid_trace_from_prefix with (n := `Hfin) in HtrX. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trXfinite_valid_trace_from X sX (stream_prefix trX (`Hfin))
Any VLSM_weak_stuttering_embedding determines a VLSM_weak_partial_projection,
allowing us to lift to weak stuttering embeddings the generic results proved
about weak partial projections.
message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_projectVLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_projectVLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trYby apply VLSM_partial_projection_type_from_stuttering_embedding, Hsimul.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project (sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trYby apply VLSM_weak_stuttering_embedding_finite_valid_trace_from. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: list transition_itemfinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)by intro sX; eapply VLSM_weak_partial_projection_valid_state; [apply VLSM_weak_partial_projection_from_stuttering_embedding |]. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_trace_last (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX) = state_project s'Xmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from Y (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXVLSM_weak_partial_projection ?X Y ?trace_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trX?trace_project (?sX, ?trX) = Some (state_project sX, VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from ?X ?sX ?trXby apply VLSM_weak_partial_projection_from_stuttering_embedding.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXVLSM_weak_partial_projection ?X Y ?trace_projectdone.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXVLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project (?sX, ?trX) = Some (state_project sX, VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX)by eapply valid_trace_forget_last.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from X sX trXmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_trace_last (state_project sX) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul trX) = state_project s'Xby erewrite finite_valid_trace_from_to_last. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXstate_project (finite_trace_last sX trX) = state_project s'Xmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
s1, s2: state X
tr: list transition_item
Htr: finite_valid_trace_from_to X s1 s2 trin_futures Y (state_project s1) (state_project s2)by revert Htr; apply VLSM_weak_stuttering_embedding_finite_valid_trace_from_to. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
s1, s2: state X
tr: list transition_item
Htr: finite_valid_trace_from_to X s1 s2 trfinite_valid_trace_from_to Y (state_project s1) (state_project s2) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (s : state X) (item : transition_item), input_valid_transition_item X s item → finite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project∀ (s : state X) (item : transition_item), input_valid_transition_item X s item → finite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
s: state X
item: transition_item
H: input_valid_transition_item X s itemfinite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
s: state X
item: transition_item
H: input_valid_transition_item X s itemfinite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (VLSM_weak_stuttering_embedding_finite_trace_project Hsimul [item])by destruct item; apply finite_valid_trace_from_to_singleton. Qed. End sec_weak_stuttering_embedding_properties. Section sec_stuttering_embedding_properties. Context {message : Type} {X Y : VLSM message} {state_project : state X -> state Y} {transition_item_project : transition_item X -> list (transition_item Y)} . Section sec_stuttering_embedding_trace_projection_redefinitions.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
s: state X
item: transition_item
H: input_valid_transition_item X s itemfinite_valid_trace_from_to X s (destination item) [item]
Here we restate the
pre_
definitions above to depend on VLSM_stuttering_embedding
and have their state and transition item projection functions implicit.
Definition VLSM_stuttering_embedding_finite_trace_project (Hsimul : VLSM_stuttering_embedding X Y state_project transition_item_project) : list (transition_item X) -> list (transition_item Y) := pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_itemVLSM_stuttering_embedding X Y state_project transition_item_project → ∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)exact (fun _ => elem_of_pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project). Qed. Definition VLSM_stuttering_embedding_infinite_trace_project (Hsimul : VLSM_stuttering_embedding X Y state_project transition_item_project) (s : Streams.Stream (transition_item X)) (Hinf : InfinitelyOften (fun item => transition_item_project item <> []) s) : Streams.Stream (transition_item Y) := pre_VLSM_stuttering_embedding_infinite_trace_project transition_item_project s Hinf. Definition VLSM_stuttering_embedding_infinite_finite_trace_project (Hsimul : VLSM_stuttering_embedding X Y state_project transition_item_project) (s : Streams.Stream (transition_item X)) (Hfin : FinitelyManyBound (fun item => transition_item_project item <> []) s) : list (transition_item Y) := pre_VLSM_stuttering_embedding_infinite_finite_trace_project transition_item_project s Hfin. End sec_stuttering_embedding_trace_projection_redefinitions.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_itemVLSM_stuttering_embedding X Y state_project transition_item_project → ∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX ↔ (∃ itemX : transition_item, itemY ∈ transition_item_project itemX ∧ itemX ∈ trX)
While for the above section, the VLSM_stuttering_embedding was necessary
to be mentioned explicitly, in the following we make it part of the context.
Context (Hsimul : VLSM_stuttering_embedding X Y state_project transition_item_project).message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ l1 l2 : list transition_item, VLSM_stuttering_embedding_finite_trace_project Hsimul (l1 ++ l2) = VLSM_stuttering_embedding_finite_trace_project Hsimul l1 ++ VLSM_stuttering_embedding_finite_trace_project Hsimul l2exact (pre_VLSM_stuttering_embedding_finite_trace_project_app transition_item_project). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ l1 l2 : list transition_item, VLSM_stuttering_embedding_finite_trace_project Hsimul (l1 ++ l2) = VLSM_stuttering_embedding_finite_trace_project Hsimul l1 ++ VLSM_stuttering_embedding_finite_trace_project Hsimul l2message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_trace_last (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX) = state_project (finite_trace_last sX trX)exact (pre_VLSM_stuttering_embedding_finite_trace_last _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_trace_last (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX) = state_project (finite_trace_last sX trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)exact (stuttering_embedding_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)
Any VLSM_stuttering_embedding determines a VLSM_partial_projection, allowing us
to lift to stuttering embeddings the generic results proved about partial projections.
message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project ( sX, trX) = Some (sY, trY) → finite_valid_trace X sX trX → finite_valid_trace Y sY trYby apply VLSM_partial_projection_type_from_stuttering_embedding, Hsimul.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_stuttering_embedding state_project transition_item_project (sX, trX) = Some (sY, trY) → finite_valid_trace X sX trX → finite_valid_trace Y sY trYby apply VLSM_stuttering_embedding_finite_valid_trace. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: list transition_itemfinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)by intros; eapply VLSM_partial_projection_finite_valid_trace_from; [apply VLSM_partial_projection_from_stuttering_embedding | ..]. Qed. Definition VLSM_stuttering_embedding_weaken : VLSM_weak_stuttering_embedding X Y state_project transition_item_project := {| weak_stuttering_embedding_type := stuttering_embedding_type _ _ _ _ Hsimul; weak_stuttering_embedding_preserves_valid_trace := VLSM_stuttering_embedding_finite_valid_trace_from; |}.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)exact (VLSM_weak_stuttering_embedding_valid_state VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (s : state X) (item : transition_item), input_valid_transition_item X s item → finite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item)exact (VLSM_weak_stuttering_embedding_input_valid_transition_item VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (s : state X) (item : transition_item), input_valid_transition_item X s item → finite_valid_trace_from_to Y (state_project s) (state_project (destination item)) (transition_item_project item)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)exact (VLSM_weak_stuttering_embedding_finite_valid_trace_from_to VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)exact (VLSM_weak_stuttering_embedding_in_futures VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)exact (VLSM_weak_stuttering_embedding_infinite_valid_trace_from VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)exact (VLSM_weak_stuttering_embedding_infinite_finite_valid_trace_from VLSM_stuttering_embedding_weaken). Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)by intros; eapply VLSM_partial_projection_initial_state; [apply VLSM_partial_projection_from_stuttering_embedding | ..]. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_init_to X sX s'X trX → finite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_init_to X sX s'X trX → finite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
H0: initial_state_prop sXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
H0: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_stuttering_embedding_finite_valid_trace_from_to.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
H0: initial_state_prop sXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)by apply VLSM_stuttering_embedding_initial_state. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
H0: initial_state_prop sXinitial_state_prop (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace X sX trX → infinite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace X sX trX → infinite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_stuttering_embedding_infinite_valid_trace_from.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_trace_project Hsimul trX Hinf)by apply VLSM_stuttering_embedding_initial_state. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX), infinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_stuttering_embedding_infinite_finite_valid_trace_from.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_infinite_finite_trace_project Hsimul trX Hfin)by apply VLSM_stuttering_embedding_initial_state. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (λ item : transition_item, transition_item_project item ≠ []) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)
Stuttering embedding friendliness
Section sec_stuttering_embedding_friendliness.
We axiomatize stuttering embedding friendliness as the converse of
VLSM_stuttering_embedding_finite_valid_trace. However, since a transition
in the source corresponds to possibly multiple transitions in the destination,
we'll ask that any valid trace in the destination is the prefix of a
translation of a valid trace from the source.
Definition stuttering_embedding_friendly_prop : Prop := forall (sY : state Y) (trY : list (transition_item Y)) (HtrY : finite_valid_trace Y sY trY), exists (sX : state X) (trX : list (transition_item X)), finite_valid_trace X sX trX /\ state_project sX = sY /\ trY `prefix_of` VLSM_stuttering_embedding_finite_trace_project Hsimul trX.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
HtrY: finite_valid_trace_from_to Y sY1 sY2 trY∃ (sX1 sX2 : state X) (trX preY sufY : list transition_item), finite_valid_trace_from_to X sX1 sX2 trX ∧ VLSM_stuttering_embedding_finite_trace_project Hsimul trX = preY ++ trY ++ sufYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
HtrY: finite_valid_trace_from_to Y sY1 sY2 trY∃ (sX1 sX2 : state X) (trX preY sufY : list transition_item), finite_valid_trace_from_to X sX1 sX2 trX ∧ VLSM_stuttering_embedding_finite_trace_project Hsimul trX = preY ++ trY ++ sufYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
Htr: finite_valid_trace_init_to Y is sY2 (tr_s1 ++ trY)∃ (sX1 sX2 : state X) (trX preY sufY : list transition_item), finite_valid_trace_from_to X sX1 sX2 trX ∧ VLSM_stuttering_embedding_finite_trace_project Hsimul trX = preY ++ trY ++ sufYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ suf∃ (sX1 sX2 : state X) (trX preY sufY : list transition_item), finite_valid_trace_from_to X sX1 sX2 trX ∧ VLSM_stuttering_embedding_finite_trace_project Hsimul trX = preY ++ trY ++ sufYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ suffinite_valid_trace_from_to X isX (finite_trace_last isX trX) trX ∧ VLSM_stuttering_embedding_finite_trace_project Hsimul trX = tr_s1 ++ trY ++ sufmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ suffinite_valid_trace_from_to X isX (finite_trace_last isX trX) trXmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ sufVLSM_stuttering_embedding_finite_trace_project Hsimul trX = tr_s1 ++ trY ++ sufby apply valid_trace_add_default_last.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ suffinite_valid_trace_from_to X isX (finite_trace_last isX trX) trXby rewrite app_assoc. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfr: stuttering_embedding_friendly_prop
sY1, sY2: state Y
trY: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace_from X isX trX
His: state_project isX = is
suf: list transition_item
Htr_pr: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = (tr_s1 ++ trY) ++ sufVLSM_stuttering_embedding_finite_trace_project Hsimul trX = tr_s1 ++ trY ++ suf
A consequence of the stuttering_embedding_friendly_property is that the valid
traces of the target VLSM are precisely prefixes of translations of all
the valid traces of the source VLSM.
message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop∀ (sY : state Y) (trY : list transition_item), finite_valid_trace Y sY trY ↔ (∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ trY `prefix_of` VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop∀ (sY : state Y) (trY : list transition_item), finite_valid_trace Y sY trY ↔ (∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ trY `prefix_of` VLSM_stuttering_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop
sY: state Y
trY: list transition_item(∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ trY `prefix_of` VLSM_stuttering_embedding_finite_trace_project Hsimul trX) → finite_valid_trace Y sY trYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop
trY: list transition_item
sX: state X
trX: list transition_item
HtrX: finite_valid_trace X sX trX
sufY: list transition_item
HtrY: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = trY ++ sufYfinite_valid_trace Y (state_project sX) trYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop
trY: list transition_item
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)
H: initial_state_prop (state_project sX)
sufY: list transition_item
HtrY: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = trY ++ sufYfinite_valid_trace Y (state_project sX) trYmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop
trY: list transition_item
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)
H: initial_state_prop (state_project sX)
sufY: list transition_item
HtrY: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = trY ++ sufYfinite_valid_trace_from Y (state_project sX) trYby rewrite <- HtrY. Qed. End sec_stuttering_embedding_friendliness. End sec_stuttering_embedding_properties.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Hsimul: VLSM_stuttering_embedding X Y state_project transition_item_project
Hfriendly: stuttering_embedding_friendly_prop
trY: list transition_item
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from Y (state_project sX) (VLSM_stuttering_embedding_finite_trace_project Hsimul trX)
H: initial_state_prop (state_project sX)
sufY: list transition_item
HtrY: VLSM_stuttering_embedding_finite_trace_project Hsimul trX = trY ++ sufYfinite_valid_trace_from Y (state_project sX) (trY ++ ?ls')
To establish a stuttering embedding from VLSM
X
to VLSM Y
,
the following set of conditions is sufficient:
-
X
's initial_states project toY
's initial states - Every input-valid transition translates to a valid trace from the translation of the source of the transition to the translation of the destination of the transition
Section sec_basic_VLSM_stuttering_embedding. Section sec_strong_VLSM_stuttering_embedding_type. Context {message : Type} (X : VLSM message) (TY : VLSMType message) (state_project : state X -> state TY) (transition_item_project : transition_item X -> list (transition_item TY)) .message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Htransition: strong_transition_item_project_consistency state_project transition_item_projectVLSM_stuttering_embedding_type X TY state_project transition_item_projectby constructor; intros ? [] []; apply Htransition. Qed. End sec_strong_VLSM_stuttering_embedding_type. Context {message : Type} (X Y : VLSM message) (state_project : state X -> state Y) (transition_item_project : transition_item X -> list (transition_item Y)) (Htransition : stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project) .message: Type
X: VLSM message
TY: VLSMType message
state_project: state X → state TY
transition_item_project: transition_item → list transition_item
Htransition: strong_transition_item_project_consistency state_project transition_item_projectVLSM_stuttering_embedding_type X TY state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_projectVLSM_stuttering_embedding_type X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_projectVLSM_stuttering_embedding_type X Y state_project transition_item_projectby eapply finite_valid_trace_from_to_last, Htransition. Qed. Section sec_weak_stuttering_embedding. Context (Hstate : weak_stuttering_embedding_initial_state_preservation X Y state_project) .message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
sX: state X
itemX: transition_item
H: input_valid_transition_item X sX itemXfinite_trace_last (state_project sX) (transition_item_project itemX) = state_project (destination itemX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
is, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is s trfinite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
is, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is s trfinite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: finite_valid_trace_from_to Y (state_project si) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)finite_valid_trace_from_to Y (state_project si) (state_project sf) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project (tr ++ [{| l := l; input := iom; destination := sf; output := oom |}]))message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: finite_valid_trace_from_to Y (state_project si) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)finite_valid_trace_from_to Y (state_project si) (state_project sf) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project [{| l := l; input := iom; destination := sf; output := oom |}])message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: finite_valid_trace_from_to Y (state_project si) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project [{| l := l; input := iom; destination := sf; output := oom |}])message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: finite_valid_trace_from_to Y (state_project si) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) (transition_item_project {| l := l; input := iom; destination := sf; output := oom |})by apply Htransition; subst. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: finite_valid_trace_from_to Y (state_project si) (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr)
itemX: transition_item
HeqitemX: itemX = {| l := l; input := iom; destination := sf; output := oom |}finite_valid_trace_from_to Y (state_project s) (state_project (destination itemX)) (transition_item_project itemX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from X s lsfinite_valid_trace_from Y (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from X s lsfinite_valid_trace_from Y (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (state_project s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (finite_trace_last (state_project is_s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr_s)) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_trace_last (state_project is_s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr_s) = state_project smessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (finite_trace_last (state_project is_s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr_s)) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from_to Y (state_project is_s) ?f (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr_s ++ pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project ls)by apply basic_VLSM_stuttering_embedding_finite_valid_trace_init_to.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from_to Y (state_project is_s) ?f (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project (tr_s ++ ls))message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
s: state X
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Heqs: finite_trace_last is_s tr_s = sfinite_trace_last (state_project is_s) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project tr_s) = state_project smessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last (finite_trace_last is_s tr_s) ls) (tr_s ++ ls)VLSM_stuttering_embedding_type X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last (finite_trace_last is_s tr_s) ls) (tr_s ++ ls)finite_valid_trace_from X is_s tr_sby apply basic_VLSM_stuttering_embedding_type.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last (finite_trace_last is_s tr_s) ls) (tr_s ++ ls)VLSM_stuttering_embedding_type X Y state_project transition_item_projectby eapply valid_trace_forget_last, finite_valid_trace_from_to_app_split, Htr. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project
ls: list transition_item
is_s: state X
tr_s: list transition_item
Htr: finite_valid_trace_init_to X is_s (finite_trace_last (finite_trace_last is_s tr_s) ls) (tr_s ++ ls)finite_valid_trace_from X is_s tr_smessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_weak_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_weak_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding_type X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)by apply basic_VLSM_stuttering_embedding_type.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding_type X Y state_project transition_item_projectby apply basic_VLSM_stuttering_embedding_finite_valid_trace_from. Qed. End sec_weak_stuttering_embedding.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: weak_stuttering_embedding_initial_state_preservation X Y state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)by apply (VLSM_weak_stuttering_embedding_finite_valid_trace_from Hweak).message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (pre_VLSM_stuttering_embedding_finite_trace_project transition_item_project trX)by apply Hstate. Qed.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hweak: VLSM_weak_stuttering_embedding X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_project
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_stuttering_embedding X Y state_project transition_item_projectmessage: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectVLSM_weak_stuttering_embedding X Y state_project transition_item_projectby apply strong_stuttering_embedding_initial_state_preservation_weaken. Qed. End sec_basic_VLSM_stuttering_embedding.message: Type
X, Y: VLSM message
state_project: state X → state Y
transition_item_project: transition_item → list transition_item
Htransition: stuttering_embedding_input_valid_transition_item_validity X Y state_project transition_item_project
Hstate: strong_stuttering_embedding_initial_state_preservation X Y state_projectweak_stuttering_embedding_initial_state_preservation X Y state_project