From stdpp Require Import prelude. From VLSM.Lib Require Import Preamble ListExtras StreamExtras StreamFilters. From VLSM.Core Require Import VLSM VLSMProjections.VLSMTotalProjection.
Core: VLSM Embedding
X
fully projects (embeds) into VLSM Y
(sharing the same messages)
if there exist maps label_project
taking X
-labels to Y
-labels
and state_project
taking X
-states to Y
-states, such that the
finite_valid_trace_property is preserved by the trace
transformation induced by the label and state projection functions,
in which each X
-transition_item is projected to an Y
-transition_item
preserving the messages and transforming labels and states accordingly.
Section sec_VLSM_embedding. Section sec_pre_definitions. Context {message : Type} (TX TY : VLSMType message) (label_project : label TX -> label TY) (state_project : state TX -> state TY) . Definition pre_VLSM_embedding_transition_item_project : transition_item TX -> transition_item TY := fun item => {| l := label_project (l item) ; input := input item ; destination := state_project (destination item) ; output := output item |}. Definition pre_VLSM_embedding_finite_trace_project : list (transition_item TX) -> list (transition_item TY) := map pre_VLSM_embedding_transition_item_project. Definition pre_VLSM_embedding_infinite_trace_project : Streams.Stream (transition_item TX) -> Streams.Stream (transition_item TY) := Streams.map pre_VLSM_embedding_transition_item_project.message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) smessage: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) smessage: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
H: ∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) s∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) smessage: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
H: ∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) s
a: transition_item
s: Streams.Stream transition_itemInfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) (Streams.Cons a s)by apply Streams.Here; eexists. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
H: ∀ s : Streams.Stream transition_item, InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) s
a: transition_item
s: Streams.Stream transition_itemExists1 (is_Some ∘ (Some ∘ label_project ∘ l)) (Streams.Cons a s)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ s : Streams.Stream transition_item, let Hinf : InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) s := pre_VLSM_embedding_infinite_trace_project_infinitely_often s in Streams.EqSt (pre_VLSM_embedding_infinite_trace_project s) (pre_VLSM_projection_infinite_trace_project TX TY (Some ∘ label_project) state_project s Hinf)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ s : Streams.Stream transition_item, let Hinf : InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) s := pre_VLSM_embedding_infinite_trace_project_infinitely_often s in Streams.EqSt (pre_VLSM_embedding_infinite_trace_project s) (pre_VLSM_projection_infinite_trace_project TX TY (Some ∘ label_project) state_project s Hinf)by apply stream_map_option_EqSt. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
s: Streams.Stream transition_item
Hinf:= pre_VLSM_embedding_infinite_trace_project_infinitely_often s: InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) sStreams.EqSt (pre_VLSM_embedding_infinite_trace_project s) (pre_VLSM_projection_infinite_trace_project TX TY (Some ∘ label_project) state_project s Hinf)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ (sX : state TX) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (pre_VLSM_embedding_finite_trace_project trX)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ (sX : state TX) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (pre_VLSM_embedding_finite_trace_project trX)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
sX: state TX
trX: list transition_itemstate_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (pre_VLSM_embedding_finite_trace_project trX)by setoid_rewrite map_app; cbn; rewrite !finite_trace_last_is_last. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
sX: state TX
trX, trX': list transition_item
lst: transition_item
HtrX: trX = trX' ++ [lst]state_project (finite_trace_last sX (trX' ++ [lst])) = finite_trace_last (state_project sX) (pre_VLSM_embedding_finite_trace_project (trX' ++ [lst]))message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ trX : list transition_item, finite_trace_last_output trX = finite_trace_last_output (pre_VLSM_embedding_finite_trace_project trX)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY∀ trX : list transition_item, finite_trace_last_output trX = finite_trace_last_output (pre_VLSM_embedding_finite_trace_project trX)message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
trX: list transition_itemfinite_trace_last_output trX = finite_trace_last_output (pre_VLSM_embedding_finite_trace_project trX)by setoid_rewrite map_app; simpl; rewrite !finite_trace_last_output_is_last. Qed. End sec_pre_definitions. Section sec_basic_definitions. Context {message : Type} (X Y : VLSM message) (label_project : label X -> label Y) (state_project : state X -> state Y) .message: Type
TX, TY: VLSMType message
label_project: label TX → label TY
state_project: state TX → state TY
trX, trX': list transition_item
lst: transition_item
HtrX: trX = trX' ++ [lst]finite_trace_last_output (trX' ++ [lst]) = finite_trace_last_output (pre_VLSM_embedding_finite_trace_project (trX' ++ [lst]))
Similarly to VLSM_partial_projections and VLSM_projections, we
distinguish two types of projections: VLSM_weak_embedding and
VLSM_embedding, distinguished by the fact that the weak projections
are not required to preserve initial states.
Proper examples of VLSM_weak_embedding are presented in Lemmas
PreSubFree_PreFree_weak_embedding and
EquivPreloadedBase_Fixed_weak_embedding, which show that a trace over
a subset of components can be replayed on top of a valid state for the full
composition. Note that in this case, the initial state of the trace not
translated to an initial state but rather to a regular valid state.
Record VLSM_weak_embedding : Prop := { weak_full_trace_project_preserves_valid_trace : forall sX trX, finite_valid_trace_from X sX trX -> finite_valid_trace_from Y (state_project sX) (pre_VLSM_embedding_finite_trace_project _ _ label_project state_project trX); }. Record VLSM_embedding : Prop := { full_trace_project_preserves_valid_trace : forall sX trX, finite_valid_trace X sX trX -> finite_valid_trace Y (state_project sX) (pre_VLSM_embedding_finite_trace_project _ _ label_project state_project trX); }. Definition weak_embedding_valid_preservation : Prop := forall (l : label X) (s : state X) (om : option message) (Hv : input_valid X l (s, om)) (HsY : valid_state_prop Y (state_project s)) (HomY : option_valid_message_prop Y om), valid Y (label_project l) ((state_project s), om).message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_embedding_valid_preservation → weak_projection_valid_preservation X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_embedding_valid_preservation → weak_projection_valid_preservation X Y (Some ∘ label_project) state_projectby apply Hvalid. Qed. Definition strong_embedding_valid_preservation : Prop := forall (l : label X) (s : state X) (om : option message), valid X l (s, om) -> valid Y (label_project l) ((state_project s), om).message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation
lX: label X
lY: label Y∀ (s : state X) (om : option message), input_valid X lX (s, om) → valid_state_prop Y (state_project s) → option_valid_message_prop Y om → valid (label_project lX) (state_project s, om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_valid_preservation → strong_projection_valid_preservation X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_valid_preservation → strong_projection_valid_preservation X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY∀ (s : state X) (om : option message), valid lX (s, om) → valid lY (state_project s, om)by apply Hvalid. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation
lX: label X
lY: label Y∀ (s : state X) (om : option message), valid lX (s, om) → valid (label_project lX) (state_project s, om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_valid_preservation → weak_embedding_valid_preservationmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_valid_preservation → weak_embedding_valid_preservationby apply Hstrong, Hpv. Qed. Definition weak_embedding_transition_preservation : Prop := forall l s om s' om', input_valid_transition X l (s, om) (s', om') -> transition Y (label_project l) (state_project s, om) = (state_project s', om').message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hstrong: strong_embedding_valid_preservation
l: label X
s: state X
om: option message
Hpv: input_valid X l (s, om)
Hs: valid_state_prop Y (state_project s)
Hom: option_valid_message_prop Y omvalid (label_project l) (state_project s, om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_embedding_transition_preservation → weak_projection_transition_preservation_Some X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_embedding_transition_preservation → weak_projection_transition_preservation_Some X Y (Some ∘ label_project) state_projectby apply Htransition. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Htransition: weak_embedding_transition_preservation
lX: label X
lY: label Y∀ (s : state X) (om : option message) (s' : state X) (om' : option message), input_valid_transition X lX (s, om) (s', om') → transition (label_project lX) (state_project s, om) = (state_project s', om')message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_projection_transition_consistency_None X Y (Some ∘ label_project) state_projectby inversion 1. Qed. Definition strong_embedding_transition_preservation : Prop := forall l s om s' om', transition X l (s, om) = (s', om') -> transition Y (label_project l) (state_project s, om) = (state_project s', om').message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Yweak_projection_transition_consistency_None X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_transition_preservation → strong_projection_transition_preservation_Some X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_transition_preservation → strong_projection_transition_preservation_Some X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Htransition: strong_embedding_transition_preservation
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY∀ (s : state X) (om : option message) (s' : state X) (om' : option message), transition lX (s, om) = (s', om') → transition lY (state_project s, om) = (state_project s', om')by apply Htransition. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Htransition: strong_embedding_transition_preservation
lX: label X
lY: label Y∀ (s : state X) (om : option message) (s' : state X) (om' : option message), transition lX (s, om) = (s', om') → transition (label_project lX) (state_project s, om) = (state_project s', om')message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_projection_transition_consistency_None X Y (Some ∘ label_project) state_projectinversion 1. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_projection_transition_consistency_None X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_transition_preservation → weak_embedding_transition_preservationmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_transition_preservation → weak_embedding_transition_preservationby apply Hstrong, Ht. Qed. Definition weak_embedding_initial_message_preservation : Prop := forall (l : label X) (s : state X) (m : message) (Hv : input_valid X l (s, Some m)) (HsY : valid_state_prop Y (state_project s)) (HmX : initial_message_prop X m), valid_message_prop Y m. Definition strong_embedding_initial_message_preservation : Prop := forall m : message, initial_message_prop X m -> initial_message_prop Y m.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hstrong: strong_embedding_transition_preservation
l: label X
s: state X
om: option message
s': state X
om': option message
Ht: input_valid_transition X l (s, om) (s', om')transition (label_project l) (state_project s, om) = (state_project s', om')message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_initial_message_preservation → weak_embedding_initial_message_preservationmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Ystrong_embedding_initial_message_preservation → weak_embedding_initial_message_preservationmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hstrong: strong_embedding_initial_message_preservation
l: label X
s: state X
m: message
Hv: input_valid X l (s, Some m)
HsY: valid_state_prop Y (state_project s)
Him: initial_message_prop mvalid_message_prop Y mby apply initial_message_is_valid. Qed. End sec_basic_definitions. Definition VLSM_embedding_transition_item_project {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_embedding X Y label_project state_project) := pre_VLSM_embedding_transition_item_project _ _ label_project state_project . Definition VLSM_embedding_finite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_embedding X Y label_project state_project) := pre_VLSM_embedding_finite_trace_project _ _ label_project state_project. Definition VLSM_embedding_infinite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_embedding X Y label_project state_project) := pre_VLSM_embedding_infinite_trace_project _ _ label_project state_project. Definition VLSM_weak_embedding_finite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_weak_embedding X Y label_project state_project) := pre_VLSM_embedding_finite_trace_project _ _ label_project state_project. Definition VLSM_weak_embedding_infinite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_weak_embedding X Y label_project state_project) := pre_VLSM_embedding_infinite_trace_project _ _ label_project state_project.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hstrong: strong_embedding_initial_message_preservation
l: label X
s: state X
m: message
Hv: input_valid X l (s, Some m)
HsY: valid_state_prop Y (state_project s)
Him: initial_message_prop mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state YVLSM_projection_type X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state YVLSM_projection_type X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
sX: state X
trX: list transition_item
H: finite_valid_trace_from X sX trXstate_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (pre_VLSM_projection_finite_trace_project X Y (Some ∘ label_project) state_project trX)by apply pre_VLSM_embedding_finite_trace_last. Qed. Section sec_weak_projection_properties.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
sX: state X
trX, trX': list transition_item
lstX: transition_item
H: finite_valid_trace_from X sX (trX' ++ [lstX])
Heq: trX = trX' ++ [lstX]state_project (finite_trace_last sX (trX' ++ [lstX])) = finite_trace_last (state_project sX) (pre_VLSM_projection_finite_trace_project X Y (Some ∘ label_project) state_project (trX' ++ [lstX]))
Context {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_weak_embedding X Y label_project state_project) .message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_weak_embedding_finite_trace_project Hsimul trX)exact (pre_VLSM_embedding_finite_trace_last _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_weak_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_valid_trace_from Y (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)exact (weak_full_trace_project_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_valid_trace_from Y (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
Any VLSM_embedding determines a VLSM_projection, allowing us
to lift to VLSM embeddings the generic results proved about VLSM projections.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_projectVLSM_weak_projection X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_projectVLSM_weak_projection X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_projectVLSM_projection_type X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project 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_projection_finite_trace_project X Y (Some ∘ label_project) state_project trX)by apply VLSM_embedding_projection_type.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_projectVLSM_projection_type X Y (Some ∘ label_project) state_projectby apply VLSM_weak_embedding_finite_valid_trace_from. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project 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_projection_finite_trace_project X Y (Some ∘ label_project) state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ s : state X, valid_state_prop X s → valid_state_prop Y (state_project s)exact (VLSM_weak_projection_valid_state VLSM_weak_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ s : state X, valid_state_prop X s → valid_state_prop Y (state_project s)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_from_to X s f tr → finite_valid_trace_from_to Y (state_project s) (state_project f) (VLSM_weak_embedding_finite_trace_project Hsimul tr)exact (VLSM_weak_projection_finite_valid_trace_from_to VLSM_weak_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_from_to X s f tr → finite_valid_trace_from_to Y (state_project s) (state_project f) (VLSM_weak_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)exact (VLSM_weak_projection_in_futures VLSM_weak_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_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
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) → input_valid_transition Y (label_project l) (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) → input_valid_transition Y (label_project l) (state_project s, im) (state_project s', om)by apply (VLSM_weak_projection_input_valid_transition VLSM_weak_embedding_is_projection) with (lY := label_project l) in H. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
l: label X
s: state X
im: option message
s': state X
om: option message
H: input_valid_transition X l (s, im) (s', om)input_valid_transition Y (label_project l) (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
l: label X
s: state X
im: option messageinput_valid X l (s, im) → input_valid Y (label_project l) (state_project s, im)by intros; eapply (VLSM_weak_projection_input_valid VLSM_weak_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
l: label X
s: state X
im: option messageinput_valid X l (s, im) → input_valid Y (label_project l) (state_project s, im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_embedding_infinite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_embedding_infinite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
H: infinite_valid_trace_from X sX trXinfinite_valid_trace_from Y (state_project sX) (VLSM_weak_embedding_infinite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
H: infinite_valid_trace_from X sX trX
Heq: let Hinf : InfinitelyOften (is_Some ∘ (Some ∘ label_project ∘ l)) trX := pre_VLSM_embedding_infinite_trace_project_infinitely_often X Y label_project trX in Streams.EqSt (pre_VLSM_embedding_infinite_trace_project X Y label_project state_project trX) (pre_VLSM_projection_infinite_trace_project X Y (Some ∘ label_project) state_project trX Hinf)infinite_valid_trace_from Y (state_project sX) (VLSM_weak_embedding_infinite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
H: infinite_valid_trace_from X sX trX
Heq: Streams.EqSt (pre_VLSM_projection_infinite_trace_project X Y (Some ∘ label_project) state_project trX (pre_VLSM_embedding_infinite_trace_project_infinitely_often X Y label_project trX)) (pre_VLSM_embedding_infinite_trace_project X Y label_project state_project trX)infinite_valid_trace_from Y (state_project sX) (VLSM_weak_embedding_infinite_trace_project Hsimul trX)by apply (VLSM_weak_projection_infinite_valid_trace_from VLSM_weak_embedding_is_projection sX trX). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
H: infinite_valid_trace_from X sX trX
Heq: Streams.EqSt (pre_VLSM_projection_infinite_trace_project X Y (Some ∘ label_project) state_project trX (pre_VLSM_embedding_infinite_trace_project_infinitely_often X Y label_project trX)) (pre_VLSM_embedding_infinite_trace_project X Y label_project state_project trX)infinite_valid_trace_from Y (state_project sX) (pre_VLSM_projection_infinite_trace_project X Y (Some ∘ label_project) state_project trX (pre_VLSM_embedding_infinite_trace_project_infinitely_often X Y label_project trX))message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
s: state X
om: option messageoption_can_produce X s om → option_can_produce Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
s: state X
om: option messageoption_can_produce X s om → option_can_produce Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
s: state X
om: option message
s0: state X
im: option message
l: label X
Ht: input_valid_transition X l (s0, im) (s, om)option_can_produce Y (state_project s) omby do 2 eexists. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
s: state X
om: option message
s0: state X
im: option message
l: label X
Ht: input_valid_transition Y (label_project l) (state_project s0, im) (state_project s, om)option_can_produce Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: messagecan_emit X m → can_emit Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: messagecan_emit X m → can_emit Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: message(∃ s : state X, can_produce X s m) → ∃ s : state Y, can_produce Y s mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: message
s: state X
Hsm: can_produce X s m∃ s : state Y, can_produce Y s mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: message
s: state X
Hsm: can_produce X s mcan_produce Y (state_project s) mby apply VLSM_weak_embedding_can_produce. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
m: message
s: state Xcan_produce X s m → can_produce Y (state_project s) mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: messagevalid_message_prop X m → valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: messagevalid_message_prop X m → valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hm: valid_message_prop X mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hinit: initial_message_prop mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hemit: can_emit X mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hinit: initial_message_prop mvalid_message_prop Y mby apply initial_message_is_valid.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hinit: initial_message_prop mvalid_message_prop Y mby apply emitted_messages_are_valid, VLSM_weak_embedding_can_emit. Qed. End sec_weak_projection_properties. Section sec_embedding_properties.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding X Y label_project state_project
Hinitial_valid_message: strong_embedding_initial_message_preservation X Y
m: message
Hemit: can_emit X mvalid_message_prop Y m
Context {message : Type} {X Y : VLSM message} {label_project : label X -> label Y} {state_project : state X -> state Y} (Hsimul : VLSM_embedding X Y label_project state_project) .message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_embedding_finite_trace_project Hsimul trX)exact (pre_VLSM_embedding_finite_trace_last _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_embedding_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)exact (full_trace_project_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace X s tr → finite_valid_trace Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)
Any VLSM_embedding determines a VLSM_projection, allowing us
to lift to VLSM embeddings the generic results proved about VLSM projections.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_projection X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_projection X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_projection_type X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (pre_VLSM_projection_finite_trace_project X Y (Some ∘ label_project) state_project trX)by apply VLSM_embedding_projection_type.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_projection_type X Y (Some ∘ label_project) state_projectby apply VLSM_embedding_finite_valid_trace. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (pre_VLSM_projection_finite_trace_project X Y (Some ∘ label_project) state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_valid_trace_from Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)exact (VLSM_projection_finite_valid_trace_from VLSM_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (tr : list transition_item), finite_valid_trace_from X s tr → finite_valid_trace_from Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_init_to X s f tr → finite_valid_trace_init_to Y (state_project s) (state_project f) (VLSM_embedding_finite_trace_project Hsimul tr)exact (VLSM_projection_finite_valid_trace_init_to VLSM_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_init_to X s f tr → finite_valid_trace_init_to Y (state_project s) (state_project f) (VLSM_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ is : state X, initial_state_prop is → initial_state_prop (state_project is)exact (VLSM_projection_initial_state VLSM_embedding_is_projection). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ is : state X, initial_state_prop is → initial_state_prop (state_project is)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_weak_embedding X Y label_project state_projectby constructor; apply VLSM_embedding_finite_valid_trace_from. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ s : state X, valid_state_prop X s → valid_state_prop Y (state_project s)exact (VLSM_weak_embedding_valid_state VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ s : state X, valid_state_prop X s → valid_state_prop Y (state_project s)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_from_to X s f tr → finite_valid_trace_from_to Y (state_project s) (state_project f) (VLSM_embedding_finite_trace_project Hsimul tr)exact (VLSM_weak_embedding_finite_valid_trace_from_to VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s f : state X) (tr : list transition_item), finite_valid_trace_from_to X s f tr → finite_valid_trace_from_to Y (state_project s) (state_project f) (VLSM_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ s1 s2 : state X, in_futures X s1 s2 → in_futures Y (state_project s1) (state_project s2)exact (VLSM_weak_embedding_in_futures VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_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
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) → input_valid_transition Y (label_project l) (state_project s, im) (state_project s', om)exact (VLSM_weak_embedding_input_valid_transition VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X l (s, im) (s', om) → input_valid_transition Y (label_project l) (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message), input_valid X l (s, im) → input_valid Y (label_project l) (state_project s, im)exact (VLSM_weak_embedding_input_valid VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (l : label X) (s : state X) (im : option message), input_valid X l (s, im) → input_valid Y (label_project l) (state_project s, im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (om : option message), option_can_produce X s om → option_can_produce Y (state_project s) omexact (VLSM_weak_embedding_can_produce VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (om : option message), option_can_produce X s om → option_can_produce Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ m : message, can_emit X m → can_emit Y mexact (VLSM_weak_embedding_can_emit VLSM_embedding_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ m : message, can_emit X m → can_emit Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectstrong_embedding_initial_message_preservation X Y → ∀ m : message, valid_message_prop X m → valid_message_prop Y mexact (fun Hinitial_valid_message => VLSM_weak_embedding_valid_message VLSM_embedding_weaken Hinitial_valid_message). Qed. Definition VLSM_embedding_trace_project (t : Trace X) : Trace Y := match t with | Finite s tr => Finite (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr) | Infinite s tr => Infinite (state_project s) (VLSM_embedding_infinite_trace_project Hsimul tr) end.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_projectstrong_embedding_initial_message_preservation X Y → ∀ m : message, valid_message_prop X m → valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (ls : Streams.Stream transition_item), infinite_valid_trace_from X s ls → infinite_valid_trace_from Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)exact (fun s ls => VLSM_weak_embedding_infinite_valid_trace_from VLSM_embedding_weaken s ls). Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ (s : state X) (ls : Streams.Stream transition_item), infinite_valid_trace_from X s ls → infinite_valid_trace_from Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace X s ls → infinite_valid_trace Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_iteminfinite_valid_trace X s ls → infinite_valid_trace Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace_from Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinitial_state_prop (state_project s)by apply VLSM_embedding_infinite_valid_trace_from.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinfinite_valid_trace_from Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul ls)by apply VLSM_embedding_initial_state. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
ls: Streams.Stream transition_item
Htr: infinite_valid_trace_from X s ls
His: initial_state_prop sinitial_state_prop (state_project s)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ t : Trace, valid_trace_prop X t → valid_trace_prop Y (VLSM_embedding_trace_project t)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project∀ t : Trace, valid_trace_prop X t → valid_trace_prop Y (VLSM_embedding_trace_project t)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
tr: list transition_itemfinite_valid_trace X s tr → finite_valid_trace Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
tr: Streams.Stream transition_iteminfinite_valid_trace X s tr → infinite_valid_trace Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul tr)by apply VLSM_embedding_finite_valid_trace.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
tr: list transition_itemfinite_valid_trace X s tr → finite_valid_trace Y (state_project s) (VLSM_embedding_finite_trace_project Hsimul tr)by apply VLSM_embedding_infinite_valid_trace. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
s: state X
tr: Streams.Stream transition_iteminfinite_valid_trace X s tr → infinite_valid_trace Y (state_project s) (VLSM_embedding_infinite_trace_project Hsimul tr)
VLSM_embedding almost implies inclusion of the valid_state_message_prop sets.
Some additional hypotheses are required because VLSM_embedding only
refers to traces, and valid_initial_state_message means that
valid_state_message_prop includes some pairs that do not appear in any
transition.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y∀ (s : state X) (om : option message), valid_state_message_prop X s om → valid_state_message_prop Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y∀ (s : state X) (om : option message), valid_state_message_prop X s om → valid_state_message_prop Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
Hsom: valid_state_message_prop X s omvalid_state_message_prop Y (state_project s) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
Hsom: valid_state_message_prop X s omoption_can_produce Y (state_project s) om ∨ initial_state_prop (state_project s) ∧ option_initial_message_prop Y ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
Hgen: option_can_produce X s omoption_can_produce Y (state_project s) om ∨ initial_state_prop (state_project s) ∧ option_initial_message_prop Y ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X omoption_can_produce Y (state_project s) om ∨ initial_state_prop (state_project s) ∧ option_initial_message_prop Y omby left; apply VLSM_embedding_can_produce.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
Hgen: option_can_produce X s omoption_can_produce Y (state_project s) om ∨ initial_state_prop (state_project s) ∧ option_initial_message_prop Y ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X omoption_can_produce Y (state_project s) om ∨ initial_state_prop (state_project s) ∧ option_initial_message_prop Y ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X ominitial_state_prop (state_project s)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X omoption_initial_message_prop Y omby apply VLSM_embedding_initial_state.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X ominitial_state_prop (state_project s)by destruct om as [m |]; [apply Hmessage |]. Qed. End sec_embedding_properties. End sec_VLSM_embedding.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding X Y label_project state_project
Hmessage: strong_embedding_initial_message_preservation X Y
s: state X
om: option message
His: initial_state_prop s
Him: option_initial_message_prop X omoption_initial_message_prop Y om
It is natural to look for sufficient conditions for VLSM projections
which are easy to verify in a practical setting. One such result is the following.
For VLSM
X
to fully-project to a VLSM Y
, the following set of conditions is sufficient:
-
X
's initial_states project toY
's initial_states - Every message
m
(including the empty one) which can be input to an input_valid transition inX
, is a valid_message inY
-
X
's input_valid is included inY
's valid. - For all input_valid inputs (in
X
),Y
's transition acts
X
's transition.
Section sec_basic_VLSM_embedding.
Context {message : Type} (X Y : VLSM message) (label_project : label X -> label Y) (state_project : state X -> state Y) (Hvalid : weak_embedding_valid_preservation X Y label_project state_project) (Htransition : weak_embedding_transition_preservation X Y label_project state_project) . Section sec_weak_embedding.
Context (Hstate : weak_projection_initial_state_preservation X Y state_project) (Hmessage : weak_embedding_initial_message_preservation X Y state_project) .message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectweak_projection_valid_message_preservation X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectweak_projection_valid_message_preservation X Y (Some ∘ label_project) state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
Hom: option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
Hom: option_valid_message_prop X (Some m)valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
Hom: initial_message_prop m ∨ can_emit X mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
Hemit: can_emit X mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
item: transition_item
Htr: finite_valid_trace X is (tr ++ [item])
Hm: output item = Some mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: (Some ∘ label_project) lX = Some lY
s: state X
m: message
Hv: input_valid X lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
output: option message
Htr: finite_valid_trace X is (tr ++ [{| l := l; input := input; destination := destination; output := output |}])
Hm: VLSM.output {| l := l; input := input; destination := destination; output := output |} = Some mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
output: option message
Htr: finite_valid_trace X is (tr ++ [{| l := l; input := input; destination := destination; output := output |}])
Hm: output = Some mvalid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
Htr: finite_valid_trace X is (tr ++ [{| l := l; input := input; destination := destination; output := Some m |}])valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
Htr: finite_valid_trace_init_to X is (finite_trace_last is (tr ++ [{| l := l; input := input; destination := destination; output := Some m |}])) (tr ++ [{| l := l; input := input; destination := destination; output := Some m |}])valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
Htr: finite_valid_trace_init_to X is (VLSM.destination {| l := l; input := input; destination := destination; output := Some m |}) (tr ++ [{| l := l; input := input; destination := destination; output := Some m |}])valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
Htr: finite_valid_trace_init_to X is destination (tr ++ [{| l := l; input := input; destination := destination; output := Some m |}])valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
tr': list transition_item
Heqtr': tr' = tr ++ [{| l := l; input := input; destination := destination; output := Some m |}]
Htr: finite_valid_trace_init_to X is destination tr'valid_message_prop Y mmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
tr': list transition_item
Heqtr': tr' = tr ++ [{| l := l; input := input; destination := destination; output := Some m |}]
Htr: finite_valid_trace_init_to X is destination tr'option_valid_message_prop Y (Some m)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
lX: label X
lY: label Y
Hl: Some (label_project lX) = Some lY
s: state X
m: message
Hv: valid_state_prop X s ∧ option_valid_message_prop X (Some m) ∧ valid lX (s, Some m)
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
tr': list transition_item
Heqtr': tr' = tr ++ [{| l := l; input := input; destination := destination; output := Some m |}]
Htr: finite_valid_trace_init_to X is destination tr'valid_state_message_prop Y (state_project destination) (Some m)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is: state X
tr: list transition_item
l: label X
input: option message
destination: state X
tr': list transition_item
Heqtr': tr' = tr ++ [{| l := l; input := input; destination := destination; output := Some m |}]
Htr: finite_valid_trace_init_to X is destination tr'valid_state_message_prop Y (state_project destination) (Some m)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, destination: state X
tr': list transition_item
Htr: finite_valid_trace_init_to X is destination tr'∀ (tr : list transition_item) (l : label X) (input : option message), tr' = tr ++ [{| l := l; input := input; destination := destination; output := Some m |}] → valid_state_message_prop Y (state_project destination) (Some m)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, destination: state X
tr': list transition_item
Htr: finite_valid_trace_init_to X is destination tr'∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), tr' = tr ++ [{| l := l; input := input; destination := destination; output := om |}] → valid_state_message_prop Y (state_project destination) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
oom: option message
l: label X
Ht: input_valid_transition X l (s0, iom) (sf, oom)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
om: option message
tr0: list transition_item
l0: label X
input: option message
Heqtr': tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = tr0 ++ [{| l := l0; input := input; destination := sf; output := om |}]valid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
oom: option message
l: label X
Ht: input_valid_transition X l (s0, iom) (sf, oom)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
om: option message
tr0: list transition_item
l0: label X
input: option message
Heqtr: tr = tr0
Heqitem: {| l := l; input := iom; destination := sf; output := oom |} = {| l := l0; input := input; destination := sf; output := om |}valid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
oom: option message
l: label X
Ht: input_valid_transition X l (s0, iom) (sf, oom)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
om: option message
l0: label X
input: option message
Heqitem: {| l := l; input := iom; destination := sf; output := oom |} = {| l := l0; input := input; destination := sf; output := om |}valid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
oom: option message
l: label X
Ht: input_valid_transition X l (s0, iom) (sf, oom)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
om: option message
l0: label X
input: option message
Heqitem: {| l := l; input := iom; destination := sf; output := oom |} = {| l := l0; input := input; destination := sf; output := om |}
H0: l = l0
H1: iom = input
H2: oom = omvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Heqitem: {| l := l; input := iom; destination := sf; output := om |} = {| l := l; input := iom; destination := sf; output := om |}
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs: valid_state_prop Y (state_project s0)valid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 []
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Heqtr: tr = []valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr, s_tr': list transition_item
s_item: transition_item
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [s_item])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), s_tr' ++ [s_item] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Heqtr: tr = s_tr' ++ [s_item]valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 []
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Heqtr: tr = []valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
Htr1: finite_valid_trace_init_to X is s0 []
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
Hs: finite_valid_trace_from_to X is s0 []
His: initial_state_prop is
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
Hs: finite_valid_trace_from_to X is s0 []
His: initial_state_prop is
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
s1: state X
Hs0: valid_state_prop X s0
H: s1 = is
H0: is = s0valid_state_prop Y (state_project s0)by apply Hstate.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
s0: state X
His: initial_state_prop s0
Hs: finite_valid_trace_from_to X s0 s0 []
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs0: valid_state_prop X s0valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr, s_tr': list transition_item
s_item: transition_item
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [s_item])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), s_tr' ++ [s_item] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Heqtr: tr = s_tr' ++ [s_item]valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
s_item: transition_item
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [s_item])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), s_tr' ++ [s_item] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
s_item: transition_item
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [s_item])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), s_tr' ++ [s_item] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs0: finite_trace_last is (s_tr' ++ [s_item]) = s0valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
s_item: transition_item
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [s_item])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), s_tr' ++ [s_item] = tr ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs0: destination s_item = s0valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
l0: label X
input: option message
destination: state X
output: option message
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), s_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}] = tr ++ [{| l := l; input := input0; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs0: VLSM.destination {| l := l0; input := input; destination := destination; output := output |} = s0valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
l0: label X
input: option message
destination: state X
output: option message
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), s_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}] = tr ++ [{| l := l; input := input0; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs0: destination = s0valid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
l0: label X
input, output: option message
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [{| l := l0; input := input; destination := s0; output := output |}])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), s_tr' ++ [{| l := l0; input := input; destination := s0; output := output |}] = tr ++ [{| l := l; input := input0; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)by eexists.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
s_tr': list transition_item
l0: label X
input, output: option message
Htr1: finite_valid_trace_init_to X is s0 (s_tr' ++ [{| l := l0; input := input; destination := s0; output := output |}])
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: valid_state_message_prop Y (state_project s0) output
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) omvalid_state_prop Y (state_project s0)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
Hs: valid_state_prop Y (state_project s0)valid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y iommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hom: option_valid_message_prop Y iomvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y iommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr (Some im)
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: match has_last_or_null iom_tr with | inleft (existT x (x0 ↾ _)) => output x0 = Some im | inright _ => option_initial_message_prop X (Some im) end
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom_tr: iom_tr = []
Heqiom: option_initial_message_prop X (Some im)
Htr2: finite_valid_trace_init_to X iom_si iom_s []
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr, iom_tr': list transition_item
iom_item: transition_item
Heqiom_tr: iom_tr = iom_tr' ++ [iom_item]
Heqiom: output iom_item = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [iom_item])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr' ++ [iom_item] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)by apply (Hmessage _ _ _ (proj1 Ht)); [eexists |].message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom_tr: iom_tr = []
Heqiom: option_initial_message_prop X (Some im)
Htr2: finite_valid_trace_init_to X iom_si iom_s []
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), [] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr, iom_tr': list transition_item
iom_item: transition_item
Heqiom_tr: iom_tr = iom_tr' ++ [iom_item]
Heqiom: output iom_item = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [iom_item])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr' ++ [iom_item] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
iom_item: transition_item
Heqiom: output iom_item = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [iom_item])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr' ++ [iom_item] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
iom_item: transition_item
Heqiom: output iom_item = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [iom_item])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr' ++ [iom_item] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hs0: finite_trace_last iom_si (iom_tr' ++ [iom_item]) = iom_soption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
iom_item: transition_item
Heqiom: output iom_item = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [iom_item])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr' ++ [iom_item] = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hs0: destination iom_item = iom_soption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
l0: label X
input: option message
destination: state X
output: option message
Heqiom: VLSM.output {| l := l0; input := input; destination := destination; output := output |} = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), iom_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}] = tr ++ [{| l := l; input := input0; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hs0: VLSM.destination {| l := l0; input := input; destination := destination; output := output |} = iom_soption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
l0: label X
input: option message
destination: state X
output: option message
Heqiom: output = Some im
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), iom_tr' ++ [{| l := l0; input := input; destination := destination; output := output |}] = tr ++ [{| l := l; input := input0; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hs0: destination = iom_soption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
l0: label X
input: option message
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [{| l := l0; input := input; destination := iom_s; output := Some im |}])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input0 : option message), iom_tr' ++ [{| l := l0; input := input; destination := iom_s; output := Some im |}] = tr ++ [{| l := l; input := input0; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)by eexists.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
im: message
iom_si, iom_s: state X
iom_tr': list transition_item
l0: label X
input: option message
Htr2: finite_valid_trace_init_to X iom_si iom_s (iom_tr' ++ [{| l := l0; input := input; destination := iom_s; output := Some im |}])
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, Some im) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: valid_state_message_prop Y (state_project iom_s) (Some im)
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _omoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
Hom: option_valid_message_prop Y iomvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
_s: state Y
Hom: valid_state_message_prop Y _s iomvalid_state_message_prop Y (state_project sf) ommessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
_s: state Y
Hom: valid_state_message_prop Y _s iomvalid (label_project l) (state_project s0, iom)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
_s: state Y
Hom: valid_state_message_prop Y _s iomtransition (label_project l) (state_project s0, iom) = (state_project sf, om)by apply Hvalid; [apply Ht | exists _om | exists _s].message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
_s: state Y
Hom: valid_state_message_prop Y _s iomvalid (label_project l) (state_project s0, iom)by apply Htransition. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
s: state X
m: message
HsY: valid_state_prop Y (state_project s)
is, s0: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s0 tr
iom: option message
iom_si, iom_s: state X
iom_tr: list transition_item
Heqiom: empty_initial_message_or_final_output X iom_tr iom
Htr2: finite_valid_trace_init_to X iom_si iom_s iom_tr
sf: state X
l: label X
om: option message
Ht: input_valid_transition X l (s0, iom) (sf, om)
IHHtr1: ∀ (om : option message) (tr0 : list transition_item) (l : label X) (input : option message), tr = tr0 ++ [{| l := l; input := input; destination := s0; output := om |}] → valid_state_message_prop Y (state_project s0) om
IHHtr2: ∀ (om : option message) (tr : list transition_item) (l : label X) (input : option message), iom_tr = tr ++ [{| l := l; input := input; destination := iom_s; output := om |}] → valid_state_message_prop Y (state_project iom_s) om
_om: option message
Hs: valid_state_message_prop Y (state_project s0) _om
_s: state Y
Hom: valid_state_message_prop Y _s iomtransition (label_project l) (state_project s0, iom) = (state_project sf, om)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: weak_projection_valid_preservation X Y (Some ∘ label_project) state_project → weak_projection_transition_preservation_Some X Y (Some ∘ label_project) state_project → weak_projection_transition_consistency_None X Y (Some ∘ label_project) state_project → weak_projection_initial_state_preservation X Y state_project → weak_projection_valid_message_preservation X Y (Some ∘ label_project) state_project → VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: weak_projection_transition_preservation_Some X Y (Some ∘ label_project) state_project → weak_projection_transition_consistency_None X Y (Some ∘ label_project) state_project → weak_projection_initial_state_preservation X Y state_project → weak_projection_valid_message_preservation X Y (Some ∘ label_project) state_project → VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: weak_projection_transition_consistency_None X Y (Some ∘ label_project) state_project → weak_projection_initial_state_preservation X Y state_project → weak_projection_valid_message_preservation X Y (Some ∘ label_project) state_project → VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: weak_projection_initial_state_preservation X Y state_project → weak_projection_valid_message_preservation X Y (Some ∘ label_project) state_project → VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: weak_projection_valid_message_preservation X Y (Some ∘ label_project) state_project → VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: VLSM_weak_projection X Y (Some ∘ label_project) state_projectVLSM_weak_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: VLSM_weak_projection X Y (Some ∘ label_project) 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_embedding_finite_trace_project X Y label_project state_project trX)by apply (VLSM_weak_projection_finite_valid_trace_from Hproj) in H. Qed. End sec_weak_embedding.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_project
Hproj: VLSM_weak_projection X Y (Some ∘ label_project) state_project
sX: state X
trX: list transition_item
H: finite_valid_trace_from X sX trXfinite_valid_trace_from Y (state_project sX) (pre_VLSM_embedding_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_projectVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_projectVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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_embedding_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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_embedding_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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_embedding_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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_embedding_finite_valid_trace_from Hweak).message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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_embedding_finite_trace_project X Y label_project state_project trX)by apply Hstate. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hweak: VLSM_weak_embedding X Y label_project state_project
Hstate: strong_projection_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
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectVLSM_weak_embedding X Y label_project state_projectby apply strong_projection_initial_state_preservation_weaken. Qed. End sec_basic_VLSM_embedding.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: weak_embedding_valid_preservation X Y label_project state_project
Htransition: weak_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_embedding_initial_message_preservation X Y state_projectweak_projection_initial_state_preservation X Y state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X YVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X YVLSM_embedding X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_valid_preservation X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_transition_preservation X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Ystrong_projection_initial_state_preservation X Y state_projectmessage: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_initial_message_preservation X Y state_projectby apply strong_embedding_valid_preservation_weaken.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_valid_preservation X Y label_project state_projectby apply strong_embedding_transition_preservation_weaken.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_transition_preservation X Y label_project state_projectdone.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Ystrong_projection_initial_state_preservation X Y state_projectby apply strong_embedding_initial_message_preservation_weaken. Qed.message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hvalid: strong_embedding_valid_preservation X Y label_project state_project
Htransition: strong_embedding_transition_preservation X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_embedding_initial_message_preservation X Yweak_embedding_initial_message_preservation X Y state_project