From stdpp Require Import prelude. From VLSM.Lib Require Import Preamble ListExtras StreamExtras StreamFilters StdppExtras. From VLSM.Core Require Import VLSM VLSMProjections.VLSMPartialProjection.
Core: VLSM Total Projections
X
projects to VLSM Y
(sharing the same messages) if
there exists maps state_project
taking X
-states to Y
-states,
and trace_project
, taking list of transitions from X
to Y
, such that:
- state and trace_project_preserves_valid_traces
- trace_project_app: trace projection commutes with concatenation of traces
- final_state_project: state projection commutes with finite_trace_last
Section sec_VLSM_projection. Section sec_pre_definitions. Context {message : Type} (TX TY : VLSMType message) (label_project : label TX -> option (label TY)) (state_project : state TX -> state TY) . Definition pre_VLSM_projection_in_projection (item : transition_item TX) : Prop := is_Some (label_project (l item)). Definition pre_VLSM_projection_transition_item_project (item : transition_item TX) : option (transition_item TY) := match label_project (l item) with | None => None | Some lY => Some {| l := lY; input := input item; destination := state_project (destination item); output := output item |} end.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_itempre_VLSM_projection_in_projection item → is_Some (pre_VLSM_projection_transition_item_project item)message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_itempre_VLSM_projection_in_projection item → is_Some (pre_VLSM_projection_transition_item_project item)message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_item
lY: label TY
HlY: label_project (l item) = Some lYis_Some (pre_VLSM_projection_transition_item_project item)message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_item
lY: label TY
HlY: label_project (l item) = Some lYis_Some match label_project (l item) with | Some lY => Some {| l := lY; input := input item; destination := state_project (destination item); output := output item |} | None => None endby eexists. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_item
lY: label TY
HlY: label_project (l item) = Some lYis_Some (Some {| l := lY; input := input item; destination := state_project (destination item); output := output item |})message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_itemis_Some (pre_VLSM_projection_transition_item_project item) → pre_VLSM_projection_in_projection itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item: transition_itemis_Some (pre_VLSM_projection_transition_item_project item) → pre_VLSM_projection_in_projection itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item, itemY: transition_item
HitemY: pre_VLSM_projection_transition_item_project item = Some itemYpre_VLSM_projection_in_projection itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item, itemY: transition_item
HitemY: match label_project (l item) with | Some lY => Some {| l := lY; input := input item; destination := state_project (destination item); output := output item |} | None => None end = Some itemYpre_VLSM_projection_in_projection itemby exists lY. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
item, itemY: transition_item
lY: label TY
HlY: label_project (l item) = Some lY
HitemY: Some {| l := lY; input := input item; destination := state_project (destination item); output := output item |} = Some itemYpre_VLSM_projection_in_projection itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_itemInfinitelyOften pre_VLSM_projection_in_projection s → InfinitelyOften (is_Some ∘ pre_VLSM_projection_transition_item_project) smessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_itemInfinitelyOften pre_VLSM_projection_in_projection s → InfinitelyOften (is_Some ∘ pre_VLSM_projection_transition_item_project) smessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_item∀ a : transition_item, pre_VLSM_projection_in_projection a → (is_Some ∘ pre_VLSM_projection_transition_item_project) aby apply pre_VLSM_projection_transition_item_project_is_Some. Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_item
item: transition_itempre_VLSM_projection_in_projection item → (is_Some ∘ pre_VLSM_projection_transition_item_project) itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_itemFinitelyManyBound pre_VLSM_projection_in_projection s → FinitelyManyBound (is_Some ∘ pre_VLSM_projection_transition_item_project) smessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_itemFinitelyManyBound pre_VLSM_projection_in_projection s → FinitelyManyBound (is_Some ∘ pre_VLSM_projection_transition_item_project) smessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_item∀ a : transition_item, (is_Some ∘ pre_VLSM_projection_transition_item_project) a → pre_VLSM_projection_in_projection aby apply pre_VLSM_projection_transition_item_project_is_Some_rev. Qed. Definition pre_VLSM_projection_finite_trace_project : list (transition_item TX) -> list (transition_item TY) := omap pre_VLSM_projection_transition_item_project. Definition pre_VLSM_projection_infinite_trace_project (s : Streams.Stream (transition_item TX)) (Hs : InfinitelyOften pre_VLSM_projection_in_projection s) : Streams.Stream (transition_item TY) := stream_map_option pre_VLSM_projection_transition_item_project s (pre_VLSM_projection_transition_item_project_infinitely_often _ Hs). Definition pre_VLSM_projection_infinite_finite_trace_project (s : Streams.Stream (transition_item TX)) (Hs : FinitelyManyBound pre_VLSM_projection_in_projection s) : list (transition_item TY) := pre_VLSM_projection_finite_trace_project (stream_prefix s (proj1_sig Hs)).message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY
s: Streams.Stream transition_item
item: transition_item(is_Some ∘ pre_VLSM_projection_transition_item_project) item → pre_VLSM_projection_in_projection itemmessage: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ l1 l2 : list transition_item, pre_VLSM_projection_finite_trace_project (l1 ++ l2) = pre_VLSM_projection_finite_trace_project l1 ++ pre_VLSM_projection_finite_trace_project l2exact (omap_app _). Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ l1 l2 : list transition_item, pre_VLSM_projection_finite_trace_project (l1 ++ l2) = pre_VLSM_projection_finite_trace_project l1 ++ pre_VLSM_projection_finite_trace_project l2message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ l l1' l2' : list transition_item, pre_VLSM_projection_finite_trace_project l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ pre_VLSM_projection_finite_trace_project l1 = l1' ∧ pre_VLSM_projection_finite_trace_project l2 = l2'exact (omap_app_rev _). Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ l l1' l2' : list transition_item, pre_VLSM_projection_finite_trace_project l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ pre_VLSM_projection_finite_trace_project l1 = l1' ∧ pre_VLSM_projection_finite_trace_project l2 = l2'message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_projection_finite_trace_project trX ↔ (∃ itemX : transition_item, itemX ∈ trX ∧ pre_VLSM_projection_transition_item_project itemX = Some itemY)exact (elem_of_list_omap _). Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_projection_finite_trace_project trX ↔ (∃ itemX : transition_item, itemX ∈ trX ∧ pre_VLSM_projection_transition_item_project itemX = Some itemY)message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_projection_finite_trace_project trX ↔ (∃ itemX : transition_item, itemX ∈ trX ∧ pre_VLSM_projection_transition_item_project itemX = Some itemY)exact (elem_of_list_omap _). Qed.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ (trX : list transition_item) (itemY : transition_item), itemY ∈ pre_VLSM_projection_finite_trace_project trX ↔ (∃ itemX : transition_item, itemX ∈ trX ∧ pre_VLSM_projection_transition_item_project itemX = Some itemY)message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ itemX itemY : transition_item, pre_VLSM_projection_transition_item_project itemX = Some itemY → ∀ trX : list transition_item, itemX ∈ trX → itemY ∈ pre_VLSM_projection_finite_trace_project trXby intros; apply elem_of_list_omap; exists itemX. Qed. End sec_pre_definitions. Record VLSM_projection_type {message : Type} (X : VLSM message) (TY : VLSMType message) (label_project : label X -> option (label TY)) (state_project : state X -> state TY) (trace_project := pre_VLSM_projection_finite_trace_project X TY label_project state_project) : Prop := { final_state_project : forall sX trX, finite_valid_trace_from X sX trX -> state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (trace_project trX); }.message: Type
TX, TY: VLSMType message
label_project: label TX → option (label TY)
state_project: state TX → state TY∀ itemX itemY : transition_item, pre_VLSM_projection_transition_item_project itemX = Some itemY → ∀ trX : list transition_item, itemX ∈ trX → itemY ∈ pre_VLSM_projection_finite_trace_project trX
Section sec_projection_type_properties. Definition VLSM_partial_trace_project_from_projection {message : Type} {X : VLSM message} {TY : VLSMType message} (label_project : label X -> option (label TY)) (state_project : state X -> state TY) (trace_project := pre_VLSM_projection_finite_trace_project _ _ label_project state_project) := fun str : state X * list (transition_item X) => let (s, tr) := str in Some (state_project s, trace_project tr). Context {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (trace_project := pre_VLSM_projection_finite_trace_project _ _ label_project state_project) (Hsimul : VLSM_projection_type X Y label_project state_project) .
Any VLSM_projection_type determines a VLSM_partial_projection_type, allowing us
to lift to VLSM projection the generic results proved about VLSM partial projections.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)∃ (s'Y : state Y) (preY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project (s'X, preX ++ trX) = Some (s'Y, preY ++ pre_VLSM_projection_finite_trace_project X Y label_project state_project trX) ∧ finite_trace_last s'Y preY = state_project (finite_trace_last s'X preX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)VLSM_partial_trace_project_from_projection label_project state_project (s'X, preX ++ trX) = Some (state_project s'X, trace_project preX ++ pre_VLSM_projection_finite_trace_project X Y label_project state_project trX) ∧ finite_trace_last (state_project s'X) (trace_project preX) = state_project (finite_trace_last s'X preX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)VLSM_partial_trace_project_from_projection label_project state_project (s'X, preX ++ trX) = Some (state_project s'X, trace_project preX ++ pre_VLSM_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)finite_trace_last (state_project s'X) (trace_project preX) = state_project (finite_trace_last s'X preX)by cbn; rewrite pre_VLSM_projection_finite_trace_project_app.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)VLSM_partial_trace_project_from_projection label_project state_project (s'X, preX ++ trX) = Some (state_project s'X, trace_project preX ++ pre_VLSM_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)finite_trace_last (state_project s'X) (trace_project preX) = state_project (finite_trace_last s'X preX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)state_project (finite_trace_last s'X preX) = finite_trace_last (state_project s'X) (trace_project preX)by apply (finite_valid_trace_from_app_iff X) in H1; apply H1. Qed. End sec_projection_type_properties. Section sec_projection_transition_consistency_None. Context {message : Type} (X : VLSM message) (TY : VLSMType message) (label_project : label X -> option (label TY)) (state_project : state X -> state TY) .message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hsimul: VLSM_projection_type X Y label_project state_project
trX: list transition_item
s'X: state X
preX: list transition_item
H1: finite_valid_trace_from X s'X (preX ++ trX)finite_valid_trace_from X s'X preX
When a label cannot be projected, and thus the transition will not be
preserved by the projection, the state projections of the states between and
after the transition must coincide.
Definition weak_projection_transition_consistency_None : Prop := forall lX, label_project lX = None -> forall s om s' om', input_valid_transition X lX (s, om) (s', om') -> state_project s' = state_project s. Definition strong_projection_transition_consistency_None : Prop := forall lX, label_project lX = None -> forall s om s' om', transition X lX (s, om) = (s', om') -> state_project s' = state_project s.message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TYstrong_projection_transition_consistency_None → weak_projection_transition_consistency_Nonemessage: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TYstrong_projection_transition_consistency_None → weak_projection_transition_consistency_Noneby apply (Hstrong lX Hl _ _ _ _ (proj2 Ht)). Qed. End sec_projection_transition_consistency_None. Section sec_VLSM_projection_definitions. Context {message : Type} (X Y : VLSM message) (label_project : label X -> option (label Y)) (state_project : state X -> state Y) (trace_project := pre_VLSM_projection_finite_trace_project _ _ label_project state_project) .message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Hstrong: strong_projection_transition_consistency_None
lX: label X
Hl: label_project lX = None
s: state X
om: option message
s': state X
om': option message
Ht: input_valid_transition X lX (s, om) (s', om')state_project s' = state_project s
Similarly to the VLSM_partial_projection case we distinguish two types of
projections: VLSM_weak_projection and VLSM_projection, distinguished by the
fact that the weak projections are not required to preserve initial states.
Although we don't have proper examples of VLSM_weak_projections, they are a
support base for VLSM_weak_embeddings for which we have proper examples.
Record VLSM_weak_projection : Prop := { weak_projection_type :> VLSM_projection_type X Y label_project state_project; weak_trace_project_preserves_valid_trace : forall sX trX, finite_valid_trace_from X sX trX -> finite_valid_trace_from Y (state_project sX) (trace_project trX); }. Record VLSM_projection : Prop := { projection_type :> VLSM_projection_type X Y label_project state_project; trace_project_preserves_valid_trace : forall sX trX, finite_valid_trace X sX trX -> finite_valid_trace Y (state_project sX) (trace_project trX); }. Definition weak_projection_initial_state_preservation : Prop := forall s : state X, initial_state_prop X s -> valid_state_prop Y (state_project s). Definition strong_projection_initial_state_preservation : Prop := forall s : state X, initial_state_prop X s -> initial_state_prop Y (state_project s).message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_initial_state_preservation → weak_projection_initial_state_preservationmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_initial_state_preservation → weak_projection_initial_state_preservationmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hstrong: strong_projection_initial_state_preservation
s: state X
Hs: initial_state_prop svalid_state_prop Y (state_project s)by apply initial_state_is_valid. Qed. Definition weak_projection_valid_preservation : Prop := forall lX lY (HlX : label_project lX = Some lY), forall s om (Hv : input_valid X lX (s, om)) (HsY : valid_state_prop Y (state_project s)) (HomY : option_valid_message_prop Y om), valid Y lY ((state_project s), om). Definition strong_projection_valid_preservation : Prop := forall lX lY, label_project lX = Some lY -> forall s om, valid X lX (s, om) -> valid Y lY ((state_project s), om).message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hstrong: strong_projection_initial_state_preservation
s: state X
Hs: initial_state_prop (state_project s)valid_state_prop Y (state_project s)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_valid_preservation → weak_projection_valid_preservationmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_valid_preservation → weak_projection_valid_preservationby apply (Hstrong lX lY Hl), Hpv. Qed. Definition weak_projection_transition_preservation_Some : Prop := forall lX lY, label_project lX = Some lY -> forall s om s' om', input_valid_transition X lX (s, om) (s', om') -> transition Y lY (state_project s, om) = (state_project s', om'). Definition strong_projection_transition_preservation_Some : Prop := forall lX lY, label_project lX = Some lY -> forall s om s' om', transition X lX (s, om) = (s', om') -> transition Y lY (state_project s, om) = (state_project s', om').message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hstrong: strong_projection_valid_preservation
lX: label X
lY: label Y
Hl: label_project lX = Some lY
s: state X
om: option message
Hpv: input_valid X lX (s, om)
Hs: valid_state_prop Y (state_project s)
Hom: option_valid_message_prop Y omvalid lY (state_project s, om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_transition_preservation_Some → weak_projection_transition_preservation_Somemessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_transition_preservation_Some → weak_projection_transition_preservation_Someby apply (Hstrong lX lY Hl), Ht. Qed. Definition weak_projection_valid_message_preservation : Prop := forall lX lY (HlX : label_project lX = Some lY), forall s m (Hv : input_valid X lX (s, Some m)) (HsY : valid_state_prop Y (state_project s)), valid_message_prop Y m. Definition strong_projection_valid_message_preservation : Prop := forall m : message, valid_message_prop X m -> valid_message_prop Y m.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_item
Hstrong: strong_projection_transition_preservation_Some
lX: label X
lY: label Y
Hl: label_project lX = Some lY
s: state X
om: option message
s': state X
om': option message
Ht: input_valid_transition X lX (s, om) (s', om')transition lY (state_project s, om) = (state_project s', om')message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_valid_message_preservation → weak_projection_valid_message_preservationby intros Hstrong lX lY Hl s m [_ [Hm%Hstrong _]] HsY. Qed. End sec_VLSM_projection_definitions. Section sec_weak_projection_properties. Definition VLSM_weak_projection_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_weak_projection X Y label_project state_project) : list (transition_item X) -> list (transition_item Y) := pre_VLSM_projection_finite_trace_project _ _ label_project state_project. Definition VLSM_weak_projection_in {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_weak_projection X Y label_project state_project) := pre_VLSM_projection_in_projection _ _ label_project. Definition VLSM_weak_projection_infinite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_weak_projection X Y label_project state_project) (s : Streams.Stream (transition_item X)) (Hinf : InfinitelyOften (VLSM_weak_projection_in Hsimul) s) : Streams.Stream (transition_item Y) := pre_VLSM_projection_infinite_trace_project _ _ label_project state_project s Hinf. Definition VLSM_weak_projection_infinite_finite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_weak_projection X Y label_project state_project) (s : Streams.Stream (transition_item X)) (Hfin : FinitelyManyBound (VLSM_weak_projection_in Hsimul) s) : list (transition_item Y) := pre_VLSM_projection_infinite_finite_trace_project _ _ label_project state_project s Hfin. Context {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_weak_projection X Y label_project state_project) .message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
trace_project:= pre_VLSM_projection_finite_trace_project X Y label_project state_project: list transition_item → list transition_itemstrong_projection_valid_message_preservation → weak_projection_valid_message_preservationmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ l1 l2 : list transition_item, VLSM_weak_projection_trace_project Hsimul (l1 ++ l2) = VLSM_weak_projection_trace_project Hsimul l1 ++ VLSM_weak_projection_trace_project Hsimul l2exact (pre_VLSM_projection_finite_trace_project_app _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ l1 l2 : list transition_item, VLSM_weak_projection_trace_project Hsimul (l1 ++ l2) = VLSM_weak_projection_trace_project Hsimul l1 ++ VLSM_weak_projection_trace_project Hsimul l2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ l l1' l2' : list transition_item, VLSM_weak_projection_trace_project Hsimul l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ VLSM_weak_projection_trace_project Hsimul l1 = l1' ∧ VLSM_weak_projection_trace_project Hsimul l2 = l2'exact (pre_VLSM_projection_finite_trace_project_app_rev _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ l l1' l2' : list transition_item, VLSM_weak_projection_trace_project Hsimul l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ VLSM_weak_projection_trace_project Hsimul l1 = l1' ∧ VLSM_weak_projection_trace_project Hsimul l2 = l2'message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_weak_projection_trace_project Hsimul trX)exact (final_state_project _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection 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) (VLSM_weak_projection_trace_project Hsimul trX)exact (weak_trace_project_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection 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) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_weak_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_weak_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trXinfinite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX∀ n : nat, finite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
n: natfinite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
Hrew: stream_prefix (stream_map_option (pre_VLSM_projection_transition_item_project X Y label_project state_project) trX (pre_VLSM_projection_transition_item_project_infinitely_often X Y label_project state_project trX Hinf)) n = omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) (stream_prefix trX m)finite_valid_trace_from Y (state_project sX) (stream_prefix (VLSM_weak_projection_infinite_trace_project Hsimul trX Hinf) n)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
Hrew: stream_prefix (stream_map_option (pre_VLSM_projection_transition_item_project X Y label_project state_project) trX (pre_VLSM_projection_transition_item_project_infinitely_often X Y label_project state_project trX Hinf)) n = omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) (stream_prefix trX m)finite_valid_trace_from Y (state_project sX) (stream_prefix (stream_map_option (pre_VLSM_projection_transition_item_project X Y label_project state_project) trX (pre_VLSM_projection_transition_item_project_infinitely_often X Y label_project state_project trX Hinf)) n)by apply VLSM_weak_projection_finite_valid_trace_from, infinite_valid_trace_from_prefix. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
n, m: nat
Hrew: stream_prefix (stream_map_option (pre_VLSM_projection_transition_item_project X Y label_project state_project) trX (pre_VLSM_projection_transition_item_project_infinitely_often X Y label_project state_project trX Hinf)) n = omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) (stream_prefix trX m)finite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_trace_project Hsimul (stream_prefix trX m))message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_weak_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_weak_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trXfinite_valid_trace_from Y (state_project sX) (VLSM_weak_projection_infinite_finite_trace_project Hsimul trX Hfin)by apply infinite_valid_trace_from_prefix with (n := `Hfin) in HtrX. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_weak_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trXfinite_valid_trace_from X sX (stream_prefix trX (`Hfin))
Any VLSM_projection determines a VLSM_partial_projection, allowing us
to lift to VLSM projection the generic results proved about VLSM partial projections.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_projectVLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_projectVLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trYby apply VLSM_partial_projection_type_from_projection, Hsimul.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project (sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trYby apply VLSM_weak_projection_finite_valid_trace_from. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
sX: state X
trX: list transition_itemfinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (pre_VLSM_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)by intro sX; eapply Hps. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Hps: ∀ (sX : state X) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, []) = Some (sY, trY) → valid_state_prop X sX → valid_state_prop Y sY∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Hivt: ∀ (sX : state X) (itemX : transition_item) (sY : state Y) (itemY : transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, [itemX]) = Some (sY, [itemY]) → input_valid_transition X (l itemX) (sX, input itemX) (destination itemX, output itemX) → input_valid_transition Y (l itemY) (sY, input itemY) (destination itemY, output itemY)∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Hivt: ∀ (sX : state X) (itemX : transition_item) (sY : state Y) (itemY : transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, [itemX]) = Some (sY, [itemY]) → input_valid_transition X (l itemX) (sX, input itemX) (destination itemX, output itemX) → input_valid_transition Y (l itemY) (sY, input itemY) (destination itemY, output itemY)
lX: label X
lY: label Y
H: label_project lX = Some lY
s: state X
im: option message
s': state X
om: option message
H0: input_valid_transition X lX (s, im) (s', om)input_valid_transition Y lY (state_project s, im) (state_project s', om)by cbn; unfold pre_VLSM_projection_transition_item_project; cbn; rewrite H. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Hivt: ∀ (sX : state X) (itemX : transition_item) (sY : state Y) (itemY : transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, [itemX]) = Some (sY, [itemY]) → input_valid_transition X (l itemX) (sX, input itemX) (destination itemX, output itemX) → input_valid_transition Y (l itemY) (sY, input itemY) (destination itemY, output itemY)
lX: label X
lY: label Y
H: label_project lX = Some lY
s: state X
im: option message
s': state X
om: option message
H0: input_valid_transition X lX (s, im) (s', om)VLSM_partial_trace_project_from_projection label_project state_project (s, [{| l := lX; input := im; destination := s'; output := om |}]) = Some (state_project s, [{| l := lY; input := im; destination := state_project s'; output := om |}])message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message), input_valid X lX (s, im) → input_valid Y lY (state_project s, im)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message), input_valid X lX (s, im) → input_valid Y lY (state_project s, im)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
lX: label X
lY: label Y
Hpr: label_project lX = Some lY
sX: state X
im: option message
HvX: input_valid X lX (sX, im)input_valid Y lY (state_project sX, im)by eapply VLSM_weak_projection_input_valid_transition, input_valid_can_transition. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
lX: label X
lY: label Y
Hpr: label_project lX = Some lY
sX: state X
im: option message
HvX: input_valid X lX (sX, im)
s: state X
o: option message
HtX: transition lX (sX, im) = (s, o)input_valid Y lY (state_project sX, im)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from_to X sX s'X trX
Hs'X: finite_trace_last sX trX = s'Xfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY
sX, s'X: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trX
Hs'X: finite_trace_last sX trX = s'Xfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trXfinite_valid_trace_from_to Y (state_project sX) (state_project (finite_trace_last sX trX)) (VLSM_weak_projection_trace_project Hsimul trX)by apply valid_trace_add_default_last; eauto. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
Hpart_simul: VLSM_weak_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Htr: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY
sX: state X
trX: list transition_item
HtrX: finite_valid_trace_from X sX trXfinite_valid_trace_from_to Y (state_project sX) (finite_trace_last (state_project sX) (pre_VLSM_projection_finite_trace_project X Y label_project state_project trX)) (VLSM_weak_projection_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection 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 → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection 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 → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
s1, s2: state X
tr: list transition_item
Htr: finite_valid_trace_from_to X s1 s2 trin_futures Y (state_project s1) (state_project s2)by apply VLSM_weak_projection_finite_valid_trace_from_to. Qed. End sec_weak_projection_properties. Section sec_projection_properties. Definition VLSM_projection_finite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_projection X Y label_project state_project) : list (transition_item X) -> list (transition_item Y) := pre_VLSM_projection_finite_trace_project _ _ label_project state_project. Definition VLSM_projection_in {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_projection X Y label_project state_project) := pre_VLSM_projection_in_projection _ _ label_project. Definition VLSM_projection_infinite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_projection X Y label_project state_project) (s : Streams.Stream (transition_item X)) (Hinf : InfinitelyOften (VLSM_projection_in Hsimul) s) : Streams.Stream (transition_item Y) := pre_VLSM_projection_infinite_trace_project _ _ label_project state_project s Hinf. Definition VLSM_projection_infinite_finite_trace_project {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_projection X Y label_project state_project) (s : Streams.Stream (transition_item X)) (Hfin : FinitelyManyBound (VLSM_projection_in Hsimul) s) : list (transition_item Y) := pre_VLSM_projection_infinite_finite_trace_project _ _ label_project state_project s Hfin. Context {message : Type} {X Y : VLSM message} {label_project : label X -> option (label Y)} {state_project : state X -> state Y} (Hsimul : VLSM_projection X Y label_project state_project) .message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_weak_projection X Y label_project state_project
s1, s2: state X
tr: list transition_item
Htr: finite_valid_trace_from_to X s1 s2 trfinite_valid_trace_from_to Y (state_project s1) (state_project s2) (VLSM_weak_projection_trace_project Hsimul tr)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ l1 l2 : list transition_item, VLSM_projection_finite_trace_project Hsimul (l1 ++ l2) = VLSM_projection_finite_trace_project Hsimul l1 ++ VLSM_projection_finite_trace_project Hsimul l2exact (pre_VLSM_projection_finite_trace_project_app _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ l1 l2 : list transition_item, VLSM_projection_finite_trace_project Hsimul (l1 ++ l2) = VLSM_projection_finite_trace_project Hsimul l1 ++ VLSM_projection_finite_trace_project Hsimul l2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ l l1' l2' : list transition_item, VLSM_projection_finite_trace_project Hsimul l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ VLSM_projection_finite_trace_project Hsimul l1 = l1' ∧ VLSM_projection_finite_trace_project Hsimul l2 = l2'exact (pre_VLSM_projection_finite_trace_project_app_rev _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ l l1' l2' : list transition_item, VLSM_projection_finite_trace_project Hsimul l = l1' ++ l2' → ∃ l1 l2 : list transition_item, l = l1 ++ l2 ∧ VLSM_projection_finite_trace_project Hsimul l1 = l1' ∧ VLSM_projection_finite_trace_project Hsimul l2 = l2'message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ itemX itemY : transition_item, pre_VLSM_projection_transition_item_project X Y label_project state_project itemX = Some itemY → ∀ trX : list transition_item, itemX ∈ trX → itemY ∈ VLSM_projection_finite_trace_project Hsimul trXexact (pre_VLSM_projection_finite_trace_project_elem_of _ _ label_project state_project). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ itemX itemY : transition_item, pre_VLSM_projection_transition_item_project X Y label_project state_project itemX = Some itemY → ∀ trX : list transition_item, itemX ∈ trX → itemY ∈ VLSM_projection_finite_trace_project Hsimul trXmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_projection_finite_trace_project Hsimul trX)exact (final_state_project _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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) (VLSM_projection_finite_trace_project Hsimul trX)exact (trace_project_preserves_valid_trace _ _ _ _ Hsimul). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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) (VLSM_projection_finite_trace_project Hsimul trX)
Any VLSM_projection determines a VLSM_partial_projection, allowing us
to lift to VLSM projection the generic results proved about VLSM partial projections.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_projectVLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_projectVLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace X sX trX → finite_valid_trace Y sY trYby apply VLSM_partial_projection_type_from_projection, Hsimul.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_projectVLSM_partial_projection_type X Y (VLSM_partial_trace_project_from_projection label_project state_project)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project (sX, trX) = Some (sY, trY) → finite_valid_trace X sX trX → finite_valid_trace Y sY trYby apply VLSM_projection_finite_valid_trace. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: list transition_itemfinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (pre_VLSM_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hpart_simul: VLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection 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) (VLSM_projection_finite_trace_project Hsimul trX)by intros sX trX; apply Hivt. Qed. Definition VLSM_projection_weaken : VLSM_weak_projection X Y label_project state_project := {| weak_projection_type := projection_type _ _ _ _ Hsimul ; weak_trace_project_preserves_valid_trace := VLSM_projection_finite_valid_trace_from |}.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hpart_simul: VLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
Hivt: ∀ (sX : state X) (trX : list transition_item) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, trX) = Some (sY, trY) → finite_valid_trace_from X sX trX → finite_valid_trace_from Y sY trY∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)exact (VLSM_weak_projection_valid_state VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ sX : state X, valid_state_prop X sX → valid_state_prop Y (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)exact (VLSM_weak_projection_input_valid_transition VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message) (s' : state X) (om : option message), input_valid_transition X lX (s, im) (s', om) → input_valid_transition Y lY (state_project s, im) (state_project s', om)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message), input_valid X lX (s, im) → input_valid Y lY (state_project s, im)exact (VLSM_weak_projection_input_valid VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (lX : label X) (lY : label Y), label_project lX = Some lY → ∀ (s : state X) (im : option message), input_valid X lX (s, im) → input_valid Y lY (state_project s, im)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)exact (VLSM_weak_projection_finite_valid_trace_from_to VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_from_to X sX s'X trX → finite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection 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 → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)exact (VLSM_weak_projection_infinite_valid_trace_from VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → infinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)exact (VLSM_weak_projection_infinite_finite_valid_trace_from VLSM_projection_weaken). Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_projection_in Hsimul) trX), infinite_valid_trace_from X sX trX → finite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hpart_simul: VLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)by intro sX; eapply His. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hpart_simul: VLSM_partial_projection X Y (VLSM_partial_trace_project_from_projection label_project state_project)
His: ∀ (sX : state X) (sY : state Y) (trY : list transition_item), VLSM_partial_trace_project_from_projection label_project state_project ( sX, []) = Some (sY, trY) → initial_state_prop sX → initial_state_prop sY∀ sX : state X, initial_state_prop sX → initial_state_prop (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_init_to X sX s'X trX → finite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX s'X : state X) (trX : list transition_item), finite_valid_trace_init_to X sX s'X trX → finite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_init_to X sX s'X trXfinite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
Hinit: initial_state_prop sXfinite_valid_trace_init_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
Hinit: initial_state_prop sXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
Hinit: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_projection_finite_valid_trace_from_to.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
Hinit: initial_state_prop sXfinite_valid_trace_from_to Y (state_project sX) (state_project s'X) (VLSM_projection_finite_trace_project Hsimul trX)by apply VLSM_projection_initial_state. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX, s'X: state X
trX: list transition_item
H: finite_valid_trace_from_to X sX s'X trX
Hinit: initial_state_prop sXinitial_state_prop (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_projection_in Hsimul) trX), infinite_valid_trace X sX trX → infinite_valid_trace Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hinf : InfinitelyOften (VLSM_projection_in Hsimul) trX), infinite_valid_trace X sX trX → infinite_valid_trace Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_projection_infinite_valid_trace_from.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinfinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_trace_project Hsimul trX Hinf)by apply VLSM_projection_initial_state. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hinf: InfinitelyOften (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_projection_in Hsimul) trX), infinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project∀ (sX : state X) (trX : Streams.Stream transition_item) (Hfin : FinitelyManyBound (VLSM_projection_in Hsimul) trX), infinite_valid_trace X sX trX → finite_valid_trace Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)by apply VLSM_projection_infinite_finite_valid_trace_from.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXfinite_valid_trace_from Y (state_project sX) (VLSM_projection_infinite_finite_trace_project Hsimul trX Hfin)by apply VLSM_projection_initial_state. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
sX: state X
trX: Streams.Stream transition_item
Hfin: FinitelyManyBound (VLSM_projection_in Hsimul) trX
HtrX: infinite_valid_trace_from X sX trX
HsX: initial_state_prop sXinitial_state_prop (state_project sX)
Projection friendliness
Section sec_projection_friendliness.
We axiomatize projection friendliness as the converse of
VLSM_projection_finite_valid_trace
Definition projection_friendly_prop := forall (sY : state Y) (trY : list (transition_item Y)) (HtrY : finite_valid_trace Y sY trY), exists (sX : state X) (trX : list (transition_item X)), finite_valid_trace X sX trX /\ state_project sX = sY /\ VLSM_projection_finite_trace_project Hsimul trX = trY.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
Hfuture: in_futures Y s1 s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
Hfuture: in_futures Y s1 s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
Hfuture: finite_valid_trace_from_to Y s1 s2 tr_s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
is: state Y
tr_s1: list transition_item
Htr: finite_valid_trace_init_to Y is s2 (tr_s1 ++ tr_s2)
Heq_s1: finite_trace_last is tr_s1 = s1∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
is: state Y
tr_s1: list transition_item
Htr: finite_valid_trace_init_to Y is s2 (tr_s1 ++ tr_s2)
Heq_s1: finite_trace_last is tr_s1 = s1
Heq_s2: finite_trace_last is (tr_s1 ++ tr_s2) = s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
is: state Y
tr_s1: list transition_item
Htr: finite_valid_trace Y is (tr_s1 ++ tr_s2)
Heq_s1: finite_trace_last is tr_s1 = s1
Heq_s2: finite_trace_last is (tr_s1 ++ tr_s2) = s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace X isX trX
His: state_project isX = is
Htr_pr: VLSM_projection_finite_trace_project Hsimul trX = tr_s1 ++ tr_s2
Heq_s1: finite_trace_last is tr_s1 = s1
Heq_s2: finite_trace_last is (tr_s1 ++ tr_s2) = s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
s1, s2: state Y
tr_s2: list transition_item
is: state Y
tr_s1: list transition_item
isX: state X
trX: list transition_item
Htr: finite_valid_trace X isX trX
His: state_project isX = is
trX_s1, trX_s2: list transition_item
HeqtrX: trX = trX_s1 ++ trX_s2
Htr_s1_pr: VLSM_projection_finite_trace_project Hsimul trX_s1 = tr_s1
Htr_s2_pr: VLSM_projection_finite_trace_project Hsimul trX_s2 = tr_s2
Heq_s1: finite_trace_last is tr_s1 = s1
Heq_s2: finite_trace_last is (tr_s1 ++ tr_s2) = s2∃ sX1 sX2 : state X, state_project sX1 = s1 ∧ state_project sX2 = s2 ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
Htr: finite_valid_trace X isX (trX_s1 ++ trX_s2)∃ sX1 sX2 : state X, state_project sX1 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX∃ sX1 sX2 : state X, state_project sX1 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX12: finite_valid_trace_from X isX trX_s1 ∧ finite_valid_trace_from X (finite_trace_last isX trX_s1) trX_s2∃ sX1 sX2 : state X, state_project sX1 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from X (finite_trace_last isX trX_s1) trX_s2∃ sX1 sX2 : state X, state_project sX1 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from_to X (finite_trace_last isX trX_s1) (finite_trace_last (finite_trace_last isX trX_s1) trX_s2) trX_s2∃ sX1 sX2 : state X, state_project sX1 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X sX1 sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from_to X (finite_trace_last isX trX_s1) (finite_trace_last (finite_trace_last isX trX_s1) trX_s2) trX_s2∃ sX2 : state X, state_project (finite_trace_last isX trX_s1) = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project sX2 = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X (finite_trace_last isX trX_s1) sX2message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from_to X (finite_trace_last isX trX_s1) (finite_trace_last (finite_trace_last isX trX_s1) trX_s2) trX_s2state_project (finite_trace_last isX trX_s1) = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ state_project (finite_trace_last isX (trX_s1 ++ trX_s2)) = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X (finite_trace_last isX trX_s1) (finite_trace_last isX (trX_s1 ++ trX_s2))message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from_to X (finite_trace_last isX trX_s1) (finite_trace_last (finite_trace_last isX trX_s1) trX_s2) trX_s2finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1) ∧ finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) = finite_trace_last (state_project isX) (VLSM_projection_finite_trace_project Hsimul trX_s1 ++ VLSM_projection_finite_trace_project Hsimul trX_s2) ∧ in_futures X (finite_trace_last isX trX_s1) (finite_trace_last isX (trX_s1 ++ trX_s2))by rewrite finite_trace_last_app; eexists. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfr: projection_friendly_prop
isX: state X
trX_s1, trX_s2: list transition_item
HtrX: finite_valid_trace_from X isX (trX_s1 ++ trX_s2)
HisX: initial_state_prop isX
HtrX1: finite_valid_trace_from X isX trX_s1
HtrX2: finite_valid_trace_from_to X (finite_trace_last isX trX_s1) (finite_trace_last (finite_trace_last isX trX_s1) trX_s2) trX_s2in_futures X (finite_trace_last isX trX_s1) (finite_trace_last isX (trX_s1 ++ trX_s2))
A consequence of the projection_friendly_property is that the valid
traces of the projection are precisely the projections of all the valid traces
of the source VLSM.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfriendly: projection_friendly_prop∀ (sY : state Y) (trY : list transition_item), finite_valid_trace Y sY trY ↔ (∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ VLSM_projection_finite_trace_project Hsimul trX = trY)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfriendly: projection_friendly_prop∀ (sY : state Y) (trY : list transition_item), finite_valid_trace Y sY trY ↔ (∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ VLSM_projection_finite_trace_project Hsimul trX = trY)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfriendly: projection_friendly_prop
sY: state Y
trY: list transition_item(∃ (sX : state X) (trX : list transition_item), finite_valid_trace X sX trX ∧ state_project sX = sY ∧ VLSM_projection_finite_trace_project Hsimul trX = trY) → finite_valid_trace Y sY trYby apply VLSM_projection_finite_valid_trace. Qed. End sec_projection_friendliness. End sec_projection_properties. End sec_VLSM_projection.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection X Y label_project state_project
Hfriendly: projection_friendly_prop
sX: state X
trX: list transition_item
HtrX: finite_valid_trace X sX trXfinite_valid_trace Y (state_project sX) (VLSM_projection_finite_trace_project Hsimul trX)
For VLSM
X
to 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 a projectable input_valid transition inX
, is a valid_message inY
-
X
's input_valid is included inY
's valid. - For all projectable input_valid inputs (in
X
),Y
's transition acts likeX
's transition. - All non-projectable transitions preserve the projected state
Section sec_basic_VLSM_projection. Section sec_basic_VLSM_projection_type. Context {message : Type} (X : VLSM message) (TY : VLSMType message) (label_project : label X -> option (label TY)) (state_project : state X -> state TY) (Htransition_None : weak_projection_transition_consistency_None X TY label_project state_project) .message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_projectVLSM_projection_type X TY label_project state_projectmessage: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_projectVLSM_projection_type X TY label_project state_projectmessage: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project∀ (sX : state X) (trX : list transition_item), finite_valid_trace_from X sX trX → state_project (finite_trace_last sX trX) = finite_trace_last (state_project sX) (pre_VLSM_projection_finite_trace_project X TY label_project state_project trX)message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
is: state X
tr: list transition_item
Htr: finite_valid_trace_from X is trstate_project (finite_trace_last is tr) = finite_trace_last (state_project is) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr)message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHHtr: state_project (finite_trace_last s tr) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr)state_project (finite_trace_last s (tr ++ [x])) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project (tr ++ [x]))message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHHtr: state_project (finite_trace_last s tr) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr)state_project (finite_trace_last s (tr ++ [x])) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr ++ pre_VLSM_projection_finite_trace_project X TY label_project state_project [x])message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHHtr: state_project (finite_trace_last s tr) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr)state_project (destination x) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr ++ pre_VLSM_projection_finite_trace_project X TY label_project state_project [x])message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
IHHtr: state_project (finite_trace_last s tr) = finite_trace_last (state_project s) (pre_VLSM_projection_finite_trace_project X TY label_project state_project tr)state_project (destination x) = finite_trace_last (state_project (finite_trace_last s tr)) (pre_VLSM_projection_finite_trace_project X TY label_project state_project [x])message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_itemstate_project (destination x) = finite_trace_last (state_project (finite_trace_last s tr)) (pre_VLSM_projection_finite_trace_project X TY label_project state_project [x])message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_itemstate_project sf = finite_trace_last (state_project (finite_trace_last s tr)) match pre_VLSM_projection_transition_item_project X TY label_project state_project x with | Some y => [y] | None => [] endmessage: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_itemstate_project sf = finite_trace_last (state_project (finite_trace_last s tr)) match match label_project (VLSM.l x) with | Some lY => Some {| l := lY; input := input x; destination := state_project (destination x); output := output x |} | None => None end with | Some y => [y] | None => [] endmessage: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: input_valid_transition X l (finite_trace_last s tr, iom) ( sf, oom)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
Hl: label_project (VLSM.l x) = Nonestate_project sf = finite_trace_last (state_project (finite_trace_last s tr)) []by rewrite Hx. Qed. End sec_basic_VLSM_projection_type. Context {message : Type} (X Y : VLSM message) (label_project : label X -> option (label Y)) (state_project : state X -> state Y) (Hvalid : weak_projection_valid_preservation X Y label_project state_project) (Htransition_Some : weak_projection_transition_preservation_Some X Y label_project state_project) (Htransition_None : weak_projection_transition_consistency_None _ _ label_project state_project) (Htype : VLSM_projection_type X Y label_project state_project := basic_VLSM_projection_type X Y label_project state_project Htransition_None) . Section sec_weak_projection. Context (Hstate : weak_projection_initial_state_preservation X Y state_project) (Hmessage : weak_projection_valid_message_preservation X Y label_project state_project) .message: Type
X: VLSM message
TY: VLSMType message
label_project: label X → option (label TY)
state_project: state X → state TY
Htransition_None: weak_projection_transition_consistency_None X TY label_project state_project
s: state X
tr: list transition_item
Htr: finite_valid_trace_from X s tr
sf: state X
iom, oom: option message
l: label X
Hx: state_project sf = state_project (finite_trace_last s tr)
x:= {| l := l; input := iom; destination := sf; output := oom |}: transition_item
Hl: label_project (VLSM.l x) = Nonestate_project sf = finite_trace_last (state_project (finite_trace_last s tr)) []message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is s trfinite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is s trfinite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project is) (state_project sf) (pre_VLSM_projection_finite_trace_project X Y label_project state_project (tr ++ [{| l := l; input := iom; destination := sf; output := oom |}]))message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project is) (state_project sf) (omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) (tr ++ [{| l := l; input := iom; destination := sf; output := oom |}]))message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project is) (state_project sf) (omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) tr ++ omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) [{| l := l; input := iom; destination := sf; output := oom |}])message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) (omap (pre_VLSM_projection_transition_item_project X Y label_project state_project) [{| l := l; input := iom; destination := sf; output := oom |}])message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) match pre_VLSM_projection_transition_item_project X Y label_project state_project {| l := l; input := iom; destination := sf; output := oom |} with | Some y => [y] | None => [] endmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) match match label_project (VLSM.l {| l := l; input := iom; destination := sf; output := oom |}) with | Some lY => Some {| l := lY; input := input {| l := l; input := iom; destination := sf; output := oom |}; destination := state_project (destination {| l := l; input := iom; destination := sf; output := oom |}); output := output {| l := l; input := iom; destination := sf; output := oom |} |} | None => None end with | Some y => [y] | None => [] endmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: finite_valid_trace_from_to Y (state_project is) (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) match match label_project l with | Some lY => Some {| l := lY; input := iom; destination := state_project sf; output := oom |} | None => None end with | Some y => [y] | None => [] endmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)finite_valid_trace_from_to Y (state_project s) (state_project sf) match match label_project l with | Some lY => Some {| l := lY; input := iom; destination := state_project sf; output := oom |} | None => None end with | Some y => [y] | None => [] endmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
Hl: label_project l = Nonefinite_valid_trace_from_to Y (state_project s) (state_project sf) []message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYfinite_valid_trace_from_to Y (state_project s) (state_project sf) [{| l := lY; input := iom; destination := state_project sf; output := oom |}]by apply (Htransition_None _ Hl) in Ht; rewrite Ht; constructor.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
Hl: label_project l = Nonefinite_valid_trace_from_to Y (state_project s) (state_project sf) []message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYfinite_valid_trace_from_to Y (state_project s) (state_project sf) [{| l := lY; input := iom; destination := state_project sf; output := oom |}]message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYinput_valid_transition Y lY (state_project s, iom) (state_project sf, oom)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYoption_valid_message_prop Y iommessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lY
Hiom: option_valid_message_prop Y iominput_valid_transition Y lY ( state_project s, iom) ( state_project sf, oom)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYoption_valid_message_prop Y iomby apply (Hmessage _ _ Hl _ _ (proj1 Ht)).message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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
oom: option message
l: label X
Ht: input_valid_transition X l (s, Some im) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lYoption_valid_message_prop Y (Some im)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is, s: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s 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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
lY: label Y
Hl: label_project l = Some lY
Hiom: option_valid_message_prop Y iominput_valid_transition Y lY (state_project s, iom) (state_project sf, oom)by apply (Htransition_Some _ _ Hl) in Ht. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
s: state X
iom: option message
lY: label Y
Hvalid: valid lY (state_project s, iom)
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
is: state X
tr: list transition_item
Htr1: finite_valid_trace_init_to X is s tr
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 (s, iom) (sf, oom)
IHHtr1: valid_state_prop Y (state_project s)
IHHtr2: finite_valid_trace_from_to Y (state_project iom_si) (state_project iom_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project iom_tr)
Hl: label_project l = Some lY
Hiom: option_valid_message_prop Y iominput_valid_transition Y lY (state_project s, iom) (state_project sf, oom)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from X s lsfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from X s lsfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) lsfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
Hs: valid_state_prop X sfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_sfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)finite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (state_project is_s) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project (tr_s ++ ls))finite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (state_project is_s) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr_s ++ pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)finite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (finite_trace_last (state_project is_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr_s)) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)finite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_init_to X is_s s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (finite_trace_last (state_project is_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr_s)) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_from X is_s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (finite_trace_last (state_project is_s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project tr_s)) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)by apply valid_trace_forget_last in Happ_pr; subst. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_project
s: state X
ls: list transition_item
Hpxt: finite_valid_trace_from_to X s (finite_trace_last s ls) ls
is_s: state X
tr_s: list transition_item
Hs: finite_valid_trace_from X is_s tr_s
Happ: finite_valid_trace_from_to X is_s (finite_trace_last s ls) (tr_s ++ ls)
Happ_pr: finite_valid_trace_from_to Y (state_project (finite_trace_last is_s tr_s)) (state_project (finite_trace_last s ls)) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)
Heqs: finite_trace_last is_s tr_s = sfinite_valid_trace_from Y (state_project s) (pre_VLSM_projection_finite_trace_project X Y label_project state_project ls)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectVLSM_weak_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectVLSM_weak_projection X Y label_project state_projectapply basic_VLSM_projection_finite_valid_trace_from. Qed. End sec_weak_projection.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: weak_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation 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 label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_projectVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_projectVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection 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_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection 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_projection_finite_trace_project X Y label_project state_project trX)message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection 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_projection_finite_valid_trace_from Hweak).message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection 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_projection_finite_trace_project X Y label_project state_project trX)by apply Hstate. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hweak: VLSM_weak_projection 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 → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectVLSM_weak_projection X Y label_project state_projectby apply strong_projection_initial_state_preservation_weaken. Qed. End sec_basic_VLSM_projection.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: weak_projection_valid_preservation X Y label_project state_project
Htransition_Some: weak_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: weak_projection_transition_consistency_None X Y label_project state_project
Htype:= basic_VLSM_projection_type X Y label_project state_project Htransition_None: VLSM_projection_type X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: weak_projection_valid_message_preservation X Y label_project state_projectweak_projection_initial_state_preservation X Y state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X YVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X YVLSM_projection X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_valid_preservation X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_transition_preservation_Some X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_transition_consistency_None X Y label_project state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Ystrong_projection_initial_state_preservation X Y state_projectmessage: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_valid_message_preservation X Y label_project state_projectby apply strong_projection_valid_preservation_weaken.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_valid_preservation X Y label_project state_projectby apply strong_projection_transition_preservation_Some_weaken.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_transition_preservation_Some X Y label_project state_projectby apply strong_projection_transition_consistency_None_weaken.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_transition_consistency_None X Y label_project state_projectdone.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Ystrong_projection_initial_state_preservation X Y state_projectby apply strong_projection_valid_message_preservation_weaken. Qed.message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hvalid: strong_projection_valid_preservation X Y label_project state_project
Htransition_Some: strong_projection_transition_preservation_Some X Y label_project state_project
Htransition_None: strong_projection_transition_consistency_None X Y label_project state_project
Hstate: strong_projection_initial_state_preservation X Y state_project
Hmessage: strong_projection_valid_message_preservation X Yweak_projection_valid_message_preservation X Y label_project state_project