Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.1. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
From VLSM.Lib Require Import Preamble.
[Loading ML file coq-itauto.plugin ... done]
From VLSM.Core Require Import Composition VLSMProjections Validator ProjectionTraces.

Core: VLSM Projections and Messages Properties

In this section, we show that messages properties (oracles like has_been_sent, has_been_received, and has_been_directly_observed) are reflected and, in some cases, preserved by VLSM projections.
Section sec_projection_oracle.

VLSM projections reflect message properties

Context
  {message : Type}
  {X Y : VLSM message}
  {label_project : label X -> option (label Y)}
  {state_project : state X -> state Y}
  (Hsimul : VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
    label_project state_project)
  .

Section sec_selectors.

Context
  (selectorX : message -> transition_item X -> Prop)
  (selectorY : message -> transition_item Y -> Prop)
  (Hselector : forall itemX itemY,
    input itemX = input itemY -> output itemX = output itemY ->
    forall m, selectorX m itemX <-> selectorY m itemY)
  .
Given the fact that all traces leading to a state in X project to traces leading to its projection in Y, and since all messages in a trace projection come from the original trace, it follows that any oracle for Y with the same selector is reflected to X.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, oracleY (state_project s) m → oracleX s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, oracleY (state_project s) m → oracleX s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleY (state_project s) m

oracleX s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleY (state_project s) m

selected_message_exists_in_all_preloaded_traces X selectorX s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleY (state_project s) m
isX: state (preloaded_with_all_messages_vlsm X)
trX: list transition_item
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm X) isX s trX

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleY (state_project s) m
isX: state (preloaded_with_all_messages_vlsm X)
trX: list transition_item
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleY (state_project s) m
isX: state (preloaded_with_all_messages_vlsm X)
trX: list transition_item
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_all_preloaded_traces Y selectorY (state_project s) m
isX: state (preloaded_with_all_messages_vlsm X)
trX: list transition_item
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
Hm: trace_has_message selectorY m (VLSM_projection_finite_trace_project Hsimul trX)
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY: transition_item
HitemY: itemY ∈ VLSM_projection_finite_trace_project Hsimul trX
Hm: selectorY m itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: pre_VLSM_projection_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project itemX = Some itemY
Hm: selectorY m itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

trace_has_message selectorX m trX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: pre_VLSM_projection_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project itemX = Some itemY
Hm: selectorY m itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

x : transition_item, x ∈ trX ∧ selectorX m x
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: pre_VLSM_projection_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project itemX = Some itemY
Hm: selectorY m itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

itemX ∈ trX ∧ selectorX m itemX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: pre_VLSM_projection_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project itemX = Some itemY
Hm: selectorY m itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selectorX m itemX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: pre_VLSM_projection_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project itemX = Some itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selectorY m itemY → selectorX m itemX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
Hpr: match label_project (l itemX) with | Some lY => Some {| l := lY; input := input itemX; destination := state_project (destination itemX); output := output itemX |} | None => None end = Some itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selectorY m itemY → selectorX m itemX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
l: label Y
Hpr: Some {| l := l; input := input itemX; destination := state_project (destination itemX); output := output itemX |} = Some itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selectorY m itemY → selectorX m itemX
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state X → message → Prop
oracleY: state Y → message → Prop
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
trX: list transition_item
itemY, itemX: transition_item
HitemX: itemX ∈ trX
l: label Y
Hpr: Some {| l := l; input := input itemX; destination := state_project (destination itemX); output := output itemX |} = Some itemY
isX: state (preloaded_with_all_messages_vlsm X)
HtrX: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) (state_project isX) (state_project s) (VLSM_projection_finite_trace_project Hsimul trX)
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)
H0: {| l := l; input := input itemX; destination := state_project (destination itemX); output := output itemX |} = itemY

selectorY m {| l := l; input := input itemX; destination := state_project (destination itemX); output := output itemX |} → selectorX m itemX
by apply Hselector. Qed. End sec_selectors.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y (state_project s) m → has_been_sent X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y (state_project s) m → has_been_sent X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector output m itemX ↔ field_selector output m itemY
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
oracle_stepwise_props (field_selector output) (has_been_sent X)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
oracle_stepwise_props (field_selector output) (has_been_sent Y)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector output m itemX ↔ field_selector output m itemY
by intros [] [] **; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

oracle_stepwise_props (field_selector output) (has_been_sent X)
by apply (has_been_sent_stepwise_props X).
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

oracle_stepwise_props (field_selector output) (has_been_sent Y)
by apply (has_been_sent_stepwise_props Y). Qed.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y (state_project s) m → has_been_received X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y (state_project s) m → has_been_received X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector input m itemX ↔ field_selector input m itemY
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
oracle_stepwise_props (field_selector input) (has_been_received X)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
oracle_stepwise_props (field_selector input) (has_been_received Y)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector input m itemX ↔ field_selector input m itemY
by intros [] [] **; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

oracle_stepwise_props (field_selector input) (has_been_received X)
by apply (has_been_received_stepwise_props X).
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

oracle_stepwise_props (field_selector input) (has_been_received Y)
by apply (has_been_received_stepwise_props Y). Qed.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y (state_project s) m → has_been_directly_observed X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y (state_project s) m → has_been_directly_observed X s m
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, item_sends_or_receives m itemX ↔ item_sends_or_receives m itemY
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
oracle_stepwise_props item_sends_or_receives (has_been_directly_observed X)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
oracle_stepwise_props item_sends_or_receives (has_been_directly_observed Y)
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, item_sends_or_receives m itemX ↔ item_sends_or_receives m itemY
by intros [] [] **; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

oracle_stepwise_props item_sends_or_receives (has_been_directly_observed X)
by apply has_been_directly_observed_stepwise_props.
message: Type
X, Y: VLSM message
label_project: label X → option (label Y)
state_project: state X → state Y
Hsimul: VLSM_projection (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

oracle_stepwise_props item_sends_or_receives (has_been_directly_observed Y)
by apply has_been_directly_observed_stepwise_props. Qed. End sec_projection_oracle. Section sec_weak_embedding_oracle.

VLSM_weak_embeddings preserve message properties

Context
  {message : Type}
  {X Y : VLSM message}
  {label_project : label X -> label Y}
  {state_project : state X -> state Y}
  (Hsimul : VLSM_weak_embedding (preloaded_with_all_messages_vlsm X)
    (preloaded_with_all_messages_vlsm Y) label_project state_project)
  .

Section sec_selectors.

Context
  (selectorX : message -> transition_item X -> Prop)
  (selectorY : message -> transition_item Y -> Prop)
  (Hselector : forall itemX itemY,
    input itemX = input itemY -> output itemX = output itemY ->
    forall m, selectorX m itemX <-> selectorY m itemY)
  .

message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message

selected_message_exists_in_some_preloaded_traces X selectorX s m → selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message

selected_message_exists_in_some_preloaded_traces X selectorX s m → selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm X) is s tr
Hm: trace_has_message selectorX m tr

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm X) is s tr
His: initial_state_prop is
Hm: trace_has_message selectorX m tr

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
Hpr_is: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project is)

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is

_ : finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) is' (state_project s) (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr), trace_has_message selectorY m (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

_ : finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Y) is' (state_project s) (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr), trace_has_message selectorY m (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project s) (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'
trace_has_message selectorY m (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project s) (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
by eapply (finite_valid_trace_from_to_app (preloaded_with_all_messages_vlsm Y)).
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

trace_has_message selectorY m (tr_is ++ VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) tr_is ∨ Exists (selectorY m) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
Hm: trace_has_message selectorX m tr
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
item: transition_item
Hitem: item ∈ tr
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
tr: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
His: initial_state_prop is
item: transition_item
pre, suf: list transition_item
Heqtr: tr = pre ++ item :: suf
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (VLSM_weak_embedding_finite_trace_project Hsimul tr)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (map (pre_VLSM_embedding_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project) pre ++ map (pre_VLSM_embedding_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project) (item :: suf))
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (map (pre_VLSM_embedding_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project) pre) ∨ Exists (selectorY m) (map (pre_VLSM_embedding_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project) (item :: suf))
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (map (pre_VLSM_embedding_transition_item_project (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project) (item :: suf))
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

Exists (selectorY m) (pre_VLSM_embedding_transition_item_project X Y label_project state_project item :: map (pre_VLSM_embedding_transition_item_project X Y label_project state_project) suf)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'

selectorY m (pre_VLSM_embedding_transition_item_project X Y label_project state_project item)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
s: state (preloaded_with_all_messages_vlsm X)
m: message
is: state (preloaded_with_all_messages_vlsm X)
item: transition_item
pre, suf: list transition_item
Htr: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) (state_project is) (state_project s) (VLSM_weak_embedding_finite_trace_project Hsimul (pre ++ item :: suf))
His: initial_state_prop is
Hm: selectorX m item
is': state (preloaded_with_all_messages_vlsm Y)
tr_is: list transition_item
Hpr_is: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Y) is' (state_project is) tr_is
His': initial_state_prop is'
itemY: transition_item
HeqitemY: itemY = pre_VLSM_embedding_transition_item_project X Y label_project state_project item

selectorY m itemY
by apply (Hselector item itemY); subst. Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, oracleX s m → oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, oracleX s m → oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: oracleX s m

oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_all_preloaded_traces X selectorX s m

oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_some_preloaded_traces X selectorX s m

oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_some_preloaded_traces X selectorX s m
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

oracleY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_some_preloaded_traces X selectorX s m
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selected_message_exists_in_all_preloaded_traces Y selectorY (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
selectorX, selectorY: message → transition_item → Prop
Hselector: itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, selectorX m itemX ↔ selectorY m itemY
oracleX: state_message_oracle X
oracleY: state_message_oracle Y
HstepwiseX: oracle_stepwise_props selectorX oracleX
HstepwiseY: oracle_stepwise_props selectorY oracleY
HoracleX_dec: RelDecision oracleX
HoracleY_dec: RelDecision oracleY
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: selected_message_exists_in_some_preloaded_traces X selectorX s m
HsY: valid_state_prop (preloaded_with_all_messages_vlsm Y) (state_project s)

selected_message_exists_in_some_preloaded_traces Y selectorY (state_project s) m
by apply VLSM_weak_embedding_selected_message_exists_in_some_preloaded_traces. Qed. End sec_selectors.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector output m itemX ↔ field_selector output m itemY
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
oracle_stepwise_props (field_selector output) (has_been_sent X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
oracle_stepwise_props (field_selector output) (has_been_sent Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
RelDecision (has_been_sent X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
RelDecision (has_been_sent Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector output m itemX ↔ field_selector output m itemY
by intros [] [] Hin Hout; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

oracle_stepwise_props (field_selector output) (has_been_sent X)
by apply (has_been_sent_stepwise_props X).
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

oracle_stepwise_props (field_selector output) (has_been_sent Y)
by apply (has_been_sent_stepwise_props Y).
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

RelDecision (has_been_sent X)
by apply has_been_sent_dec.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

RelDecision (has_been_sent Y)
by apply has_been_sent_dec. Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector input m itemX ↔ field_selector input m itemY
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
oracle_stepwise_props (field_selector input) (has_been_received X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
oracle_stepwise_props (field_selector input) (has_been_received Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
RelDecision (has_been_received X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
RelDecision (has_been_received Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, field_selector input m itemX ↔ field_selector input m itemY
by intros [] [] Hin Hout; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

oracle_stepwise_props (field_selector input) (has_been_received X)
by apply (has_been_received_stepwise_props X).
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

oracle_stepwise_props (field_selector input) (has_been_received Y)
by apply (has_been_received_stepwise_props Y).
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

RelDecision (has_been_received X)
by apply has_been_received_dec.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

RelDecision (has_been_received Y)
by apply has_been_received_dec. Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, item_sends_or_receives m itemX ↔ item_sends_or_receives m itemY
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
oracle_stepwise_props item_sends_or_receives (has_been_directly_observed X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
oracle_stepwise_props item_sends_or_receives (has_been_directly_observed Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
RelDecision (has_been_directly_observed X)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
RelDecision (has_been_directly_observed Y)
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

itemX itemY : transition_item, input itemX = input itemY → output itemX = output itemY → m : message, item_sends_or_receives m itemX ↔ item_sends_or_receives m itemY
by intros [] [] **; cbn in *; subst.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

oracle_stepwise_props item_sends_or_receives (has_been_directly_observed X)
by apply has_been_directly_observed_stepwise_props.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

oracle_stepwise_props item_sends_or_receives (has_been_directly_observed Y)
by apply has_been_directly_observed_stepwise_props.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

RelDecision (has_been_directly_observed X)
by apply has_been_directly_observed_dec.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_weak_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

RelDecision (has_been_directly_observed Y)
by apply has_been_directly_observed_dec. Qed. End sec_weak_embedding_oracle. Section sec_embedding_oracle.

VLSM_embeddings both preserve and reflect message properties

Context
  {message : Type}
  {X Y : VLSM message}
  {label_project : label X -> label Y}
  {state_project : state X -> state Y}
  (Hsimul :
    VLSM_embedding (preloaded_with_all_messages_vlsm X)
      (preloaded_with_all_messages_vlsm Y) label_project state_project)
  .

message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y (state_project s) m
exact (VLSM_weak_embedding_has_been_sent (VLSM_embedding_weaken Hsimul)). Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y (state_project s) m
exact (VLSM_weak_embedding_has_been_received (VLSM_embedding_weaken Hsimul)). Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y (state_project s) m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y (state_project s) m
exact (VLSM_weak_embedding_has_been_directly_observed (VLSM_embedding_weaken Hsimul)). Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y (state_project s) m → has_been_sent X s m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y (state_project s) m → has_been_sent X s m
exact (VLSM_projection_has_been_sent_reflect (VLSM_embedding_is_projection Hsimul)). Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y (state_project s) m → has_been_received X s m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y (state_project s) m → has_been_received X s m
exact (VLSM_projection_has_been_received_reflect (VLSM_embedding_is_projection Hsimul)). Qed.
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y (state_project s) m → has_been_directly_observed X s m
message: Type
X, Y: VLSM message
label_project: label X → label Y
state_project: state X → state Y
Hsimul: VLSM_embedding (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y) label_project state_project
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y (state_project s) m → has_been_directly_observed X s m
exact (VLSM_projection_has_been_directly_observed_reflect (VLSM_embedding_is_projection Hsimul)). Qed. End sec_embedding_oracle. Section sec_incl_oracle.

VLSM_inclusions both preserve and reflect message properties

Context
  {message : Type}
  {T : VLSMType message}
  {MX MY : VLSMMachine T}
  (X := mk_vlsm MX)
  (Y := mk_vlsm MY)
  (Hincl : VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y))
  .

message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent X s m → has_been_sent Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_sent X s m

has_been_sent Y s m
by eapply (@VLSM_embedding_has_been_sent _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received X s m → has_been_received Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_received X s m

has_been_received Y s m
by eapply (@VLSM_embedding_has_been_received _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed X s m → has_been_directly_observed Y s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_directly_observed X s m

has_been_directly_observed Y s m
by eapply (@VLSM_embedding_has_been_directly_observed _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y s m → has_been_sent X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_sent Y s m → has_been_sent X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenSentCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_sent Y s m

has_been_sent X s m
by eapply (@VLSM_embedding_has_been_sent_reflect _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y s m → has_been_received X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_received Y s m → has_been_received X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenReceivedCapability X
H0: HasBeenReceivedCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_received Y s m

has_been_received X s m
by eapply (@VLSM_embedding_has_been_received_reflect _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed.
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y s m → has_been_directly_observed X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y

s : state (preloaded_with_all_messages_vlsm X), constrained_state_prop X s → m : message, has_been_directly_observed Y s m → has_been_directly_observed X s m
message: Type
T: VLSMType message
MX, MY: VLSMMachine T
X:= {| vlsm_type := T; vlsm_machine := MX |}: VLSM message
Y:= {| vlsm_type := T; vlsm_machine := MY |}: VLSM message
Hincl: VLSM_incl (preloaded_with_all_messages_vlsm X) (preloaded_with_all_messages_vlsm Y)
H: HasBeenSentCapability X
H0: HasBeenReceivedCapability X
H1: HasBeenSentCapability Y
H2: HasBeenReceivedCapability Y
s: state (preloaded_with_all_messages_vlsm X)
Hs: constrained_state_prop X s
m: message
Hm: has_been_directly_observed Y s m

has_been_directly_observed X s m
by eapply (@VLSM_embedding_has_been_directly_observed_reflect _ X Y _ _ (VLSM_incl_is_embedding Hincl)). Qed. End sec_incl_oracle. Section sec_same_IM_oracle_properties. Context {message : Type} `{finite.Finite index} (IM1 IM2 : index -> VLSM message) `{forall i, HasBeenSentCapability (IM1 i)} `{forall i, HasBeenSentCapability (IM2 i)} (Heq : forall i, IM1 i = IM2 i) .
If two indexed sets of VLSMs are extensionally-equal, then the has_been_sent predicate is preserved through the same_IM_state_rew map.
message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM1, IM2: index → VLSM message
H0: i : index, HasBeenSentCapability (IM1 i)
H1: i : index, HasBeenSentCapability (IM2 i)
Heq: i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
m: message
Hs1: constrained_state_prop (free_composite_vlsm IM1) s1

composite_has_been_sent IM1 s1 m → composite_has_been_sent IM2 (same_IM_state_rew Heq s1) m
message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM1, IM2: index → VLSM message
H0: i : index, HasBeenSentCapability (IM1 i)
H1: i : index, HasBeenSentCapability (IM2 i)
Heq: i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
m: message
Hs1: constrained_state_prop (free_composite_vlsm IM1) s1

composite_has_been_sent IM1 s1 m → composite_has_been_sent IM2 (same_IM_state_rew Heq s1) m
message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM1, IM2: index → VLSM message
H0: i : index, HasBeenSentCapability (IM1 i)
H1: i : index, HasBeenSentCapability (IM2 i)
Heq: i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
m: message
Hs1: constrained_state_prop (free_composite_vlsm IM1) s1
Hproj: VLSM_embedding (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_label_rew Heq) (same_IM_state_rew Heq)

composite_has_been_sent IM1 s1 m → composite_has_been_sent IM2 (same_IM_state_rew Heq s1) m
message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM1, IM2: index → VLSM message
H0: i : index, HasBeenSentCapability (IM1 i)
H1: i : index, HasBeenSentCapability (IM2 i)
Heq: i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
m: message
Hs1: constrained_state_prop (free_composite_vlsm IM1) s1
Hproj: VLSM_embedding (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_label_rew Heq) (same_IM_state_rew Heq)
Hbs1_m: composite_has_been_sent IM1 s1 m

composite_has_been_sent IM2 (same_IM_state_rew Heq s1) m
by specialize (VLSM_embedding_has_been_sent Hproj _ Hs1 m Hbs1_m). Qed. End sec_same_IM_oracle_properties. Section sec_sender_safety_can_emit_projection. Context {message : Type} `{EqDecision index} (IM : index -> VLSM message) {validator : Type} (A : validator -> index) (sender : message -> option validator) (Hsender_safety : sender_safety_alt_prop IM A sender) (j : index) (m : message) (Hj : option_map A (sender m) = Some j) .
Under sender_safety_alt_property assumptions, if a message can be emitted by the free composition (preloaded with all messages), then it can also be emitted by the component corresponding to its sender (preloaded with all messages).
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
Hsender_safety: sender_safety_alt_prop IM A sender
j: index
m: message
Hj: option_map A (sender m) = Some j

can_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) m → can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
Hsender_safety: sender_safety_alt_prop IM A sender
j: index
m: message
Hj: option_map A (sender m) = Some j

can_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) m → can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
Hsender_safety: sender_safety_alt_prop IM A sender
j: index
m: message
v: validator
Hsender: sender m = Some v
Hj: Some (A v) = Some j

can_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) m → can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
Hsender_safety: sender_safety_alt_prop IM A sender
j: index
m: message
v: validator
Hsender: sender m = Some v
Hj: A v = j

can_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) m → can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j

can_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) m → can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s0, om0) ( s1, Some m)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s0, om0) ( s1, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s0, om0) ( s1, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)
Htransition: composite_project_label IM i (existT i li) = Some li → (s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (im : option message) (s' : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (om : option message), input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s, im) ( s', om) → input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li ((λ s0 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s0 i) s, im) ((λ s0 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s0 i) s', om)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s0, om0) ( s1, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)
Htransition: (s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (im : option message) (s' : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (om : option message), input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s, im) ( s', om) → input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s i, im) ( s' i, om)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0 i, om0) (s1 i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)
Htransition: (s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (im : option message) (s' : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))) (om : option message), input_valid_transition (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (existT i li) (s, im) ( s', om) → input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s i, im) ( s' i, om)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0 i, om0) (s1 i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
s0: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
s0i: state (IM i)
Heqs0i: s0i = s0 i
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1 i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
s0i: state (IM i)
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1 i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
om0: option message
i: index
li: label (IM i)
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
s0i, s1i: state (IM i)
Heqs1i: s1i = s1 i
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender_safety: i : index, can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
om0: option message
i: index
li: label (IM i)
s0i, s1i: state (IM i)
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
i: index
Hsender_safety: can_emit (preloaded_with_all_messages_vlsm (IM i)) m → A v = i
j: index
Hsender: sender m = Some v
Hj: A v = j
om0: option message
li: label (IM i)
s0i, s1i: state (IM i)
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
i, j: index
Hsender: sender m = Some v
Hj: A v = j
om0: option message
li: label (IM i)
s0i, s1i: state (IM i)
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) li (s0i, om0) (s1i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM i)) (composite_project_label IM i) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s i)
Hsender_safety: A v = i

can_emit (preloaded_with_all_messages_vlsm (IM j)) m
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
validator: Type
A: validator → index
sender: message → option validator
m: message
v: validator
Hsender: sender m = Some v
om0: option message
li: label (IM (A v))
s0i, s1i: state (IM (A v))
Hemitted: input_valid_transition (preloaded_with_all_messages_vlsm (IM (A v))) li (s0i, om0) (s1i, Some m)
Hproj: VLSM_projection (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) (preloaded_with_all_messages_vlsm (IM (A v))) (composite_project_label IM (A v)) (λ s : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)), s (A v))

can_emit (preloaded_with_all_messages_vlsm (IM (A v))) m
by eexists _, _, _. Qed. End sec_sender_safety_can_emit_projection.