From stdpp Require Import prelude finite. From Coq Require Import Streams FunctionalExtensionality Eqdep_dec. From VLSM.Lib Require Import Preamble ListExtras. From VLSM.Core Require Import VLSM Plans VLSMProjections. From VLSM.Core Require Import PreloadedVLSM ConstrainedVLSM.
Core: VLSM Composition
Section sec_VLSM_composition.
Let us fix a type for
message
s, and an index
type for the VLSM components
such that equality on index
is decidable and let IM be a family of VLSMs
indexed by index
. Note that all VLSMs share the same type of message
s.
Context
{message : Type}
`{EqDecision index}
(IM : index -> VLSM message)
.
(* A [composite_state] is an indexed family of [state]s, yielding for each index <<n>> a [state] of [type] <<IT n>>, the [VLSMType] corresponding to machine <<n>>. Note that the [composite_state] type is the dependent product type of the family of [state] types corresponding to each index. *) Definition composite_state : Type := forall n : index, state (IM n).
A composite_label is a pair between an index
Note that the composite_label type is the dependent sum of the family of
types
N
and a label of IT n
.
[label (IT n) | n <- index]
.
Definition composite_label : Type := {n : index & label (IM n)}. (* Declaring this a "canonical structure" will make type checking guess that a VLSMType should be composite_type instead of just failing, if it has to compare composite_state with state or state of an unsolved VLSMType or VLSM. *) Canonical Structure composite_type : VLSMType message := {| state := composite_state; label := composite_label; |}.
A composite_state has the initial_state_property if all of its component
states have the initial_state_property in the corresponding component signature.
Definition composite_initial_state_prop (s : composite_state) : Prop := forall n : index, initial_state_prop (IM n) (s n). Definition composite_initial_state : Type := {s : composite_state | composite_initial_state_prop s}. Program Definition composite_s0 : composite_initial_state := exist _ (fun (n : index) => `(vs0 (IM n))) _.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message(λ s : composite_state, composite_initial_state_prop s) (λ n : index, `(vs0 (IM n)))by intros i; destruct (vs0 (IM i)). Defined. #[export] Instance composite_initial_state_inh : Inhabited composite_initial_state := populate composite_s0.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message(λ s : composite_state, composite_initial_state_prop s) (λ n : index, `(vs0 (IM n)))
A message has the initial_message_property in the composite
iff it has the initial_message_property in any of the components.
Definition composite_initial_message_prop (m : message) : Prop :=
exists (n : index) (mi : initial_message (IM n)), proj1_sig mi = m.
A very useful operation on composite_states is updating the state corresponding
to a component.
Definition state_update
(s : composite_state) (i : index) (si : state (IM i)) (j : index) : state (IM j) :=
match decide (j = i) with
| left e => eq_rect_r (fun i => state (IM i)) si e
| _ => s j
end.
The transition function for the composite_vlsm takes a transition in
the component selected by the index in the given composite_label
with the contained label, and returns the produced message together with
the state updated on that component.
Definition composite_transition
(l : composite_label) (som : composite_state * option message)
: composite_state * option message :=
let (s, om) := som in
let (i, li) := l in
let (si', om') := transition (IM i) li (s i, om) in
(state_update s i si', om').
Given a composite_label
(i, li)
and a composite_state-message
pair (s, om)
, composite_validity is defined as validity in
the i
th component IM i
.
Definition composite_valid (l : composite_label) (som : composite_state * option message) : Prop := let (s, om) := som in let (i, li) := l in valid (IM i) li (s i, om). Definition free_composite_vlsm_machine : VLSMMachine composite_type := {| initial_state_prop := composite_initial_state_prop; initial_message_prop := composite_initial_message_prop; transition := composite_transition; valid := composite_valid; |}. Definition free_composite_vlsm : VLSM message := mk_vlsm free_composite_vlsm_machine.
Composite versions for transition_item, option_initial_message_prop and
things related to plans and plan items.
Definition composite_transition_item : Type := transition_item composite_type. Definition option_composite_initial_message_prop : option message -> Prop := from_option composite_initial_message_prop True. Definition composite_plan_item : Type := plan_item composite_type. Definition composite_plan : Type := list composite_plan_item. Definition composite_apply_plan := (@_apply_plan _ composite_type composite_transition). Definition composite_apply_plan_app (start : composite_state) (a a' : list plan_item) : composite_apply_plan start (a ++ a') = let (aitems, afinal) := composite_apply_plan start a in let (a'items, a'final) := composite_apply_plan afinal a' in (aitems ++ a'items, a'final) := (@_apply_plan_app _ composite_type composite_transition start a a'). Definition composite_apply_plan_last (start : composite_state) (a : list plan_item) (after_a := composite_apply_plan start a) : finite_trace_last start (fst after_a) = snd after_a := (@_apply_plan_last _ composite_type composite_transition start a). Definition composite_trace_to_plan := (@_trace_to_plan _ composite_type).
Constrained VLSM composition
Definition composite_vlsm
(constraint : composite_label -> composite_state * option message -> Prop) : VLSM message :=
constrained_vlsm free_composite_vlsm constraint.
free_constraint is the constraint that is always true.
Definition free_constraint : composite_label -> composite_state * option message -> Prop :=
fun _ _ => True.
free_composite_vlsm is equivalent to a composite_vlsm with a free
constraint.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_eq free_composite_vlsm (composite_vlsm free_constraint)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_eq free_composite_vlsm (composite_vlsm free_constraint)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |} {| vlsm_type := free_composite_vlsm; vlsm_machine := composite_vlsm free_constraint |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := free_composite_vlsm; vlsm_machine := composite_vlsm free_constraint |} {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |} {| vlsm_type := free_composite_vlsm; vlsm_machine := composite_vlsm free_constraint |}by apply basic_VLSM_strong_embedding; red; cbn.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := free_composite_vlsm_machine |} {| vlsm_type := composite_type; vlsm_machine := constrained_vlsm_machine free_composite_vlsm free_constraint |} id idmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := free_composite_vlsm; vlsm_machine := composite_vlsm free_constraint |} {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := constrained_vlsm_machine free_composite_vlsm free_constraint |} {| vlsm_type := composite_type; vlsm_machine := free_composite_vlsm_machine |} id idby itauto. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (l : composite_label) (s : composite_state) (om : option message), (let (i, li) := l in valid li (s i, om)) ∧ free_constraint l (s, om) → let (i, li) := l in valid li (s i, om)
free_composite_vlsm is equivalent to composite_vlsm with free constraint
also when preloaded with messages.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ initial : message → Prop, VLSM_eq (preloaded_vlsm free_composite_vlsm initial) (preloaded_vlsm (composite_vlsm free_constraint) initial)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ initial : message → Prop, VLSM_eq (preloaded_vlsm free_composite_vlsm initial) (preloaded_vlsm (composite_vlsm free_constraint) initial)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_incl {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm free_composite_vlsm initial |} {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm (composite_vlsm free_constraint) initial |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_incl {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm (composite_vlsm free_constraint) initial |} {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm free_composite_vlsm initial |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_incl {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm free_composite_vlsm initial |} {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm (composite_vlsm free_constraint) initial |}by apply basic_VLSM_strong_embedding; red; cbn.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine free_composite_vlsm initial |} {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine (composite_vlsm free_constraint) initial |} id idmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_incl {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm (composite_vlsm free_constraint) initial |} {| vlsm_type := preloaded_vlsm free_composite_vlsm initial; vlsm_machine := preloaded_vlsm free_composite_vlsm initial |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → PropVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine (composite_vlsm free_constraint) initial |} {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine free_composite_vlsm initial |} id idby itauto. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
initial: message → Prop∀ (l : composite_label) (s : composite_state) (om : option message), (let (i, li) := l in valid li (s i, om)) ∧ free_constraint l (s, om) → let (i, li) := l in valid li (s i, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_eq (preloaded_with_all_messages_vlsm free_composite_vlsm) (preloaded_with_all_messages_vlsm (composite_vlsm free_constraint))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_eq (preloaded_with_all_messages_vlsm free_composite_vlsm) (preloaded_with_all_messages_vlsm (composite_vlsm free_constraint))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm free_composite_vlsm |} {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm (composite_vlsm free_constraint) |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm (composite_vlsm free_constraint) |} {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm free_composite_vlsm |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm free_composite_vlsm |} {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm (composite_vlsm free_constraint) |}by apply basic_VLSM_strong_embedding; red; cbn.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine free_composite_vlsm (λ _ : message, True) |} {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine (composite_vlsm free_constraint) (λ _ : message, True) |} id idmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_incl {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm (composite_vlsm free_constraint) |} {| vlsm_type := preloaded_with_all_messages_vlsm free_composite_vlsm; vlsm_machine := preloaded_with_all_messages_vlsm free_composite_vlsm |}message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM messageVLSM_embedding {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine (composite_vlsm free_constraint) (λ _ : message, True) |} {| vlsm_type := composite_type; vlsm_machine := preloaded_vlsm_machine free_composite_vlsm (λ _ : message, True) |} id idby itauto. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (l : composite_label) (s : composite_state) (om : option message), (let (i, li) := l in valid li (s i, om)) ∧ free_constraint l (s, om) → let (i, li) := l in valid li (s i, om)
Lemmas about state_update
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)) (j : index), j ≠ i → state_update s i si j = s jby intros; unfold state_update; case_decide. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)) (j : index), j ≠ i → state_update s i si j = s jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)), state_update s i si i = simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)), state_update s i si i = simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)), match decide (i = i) with | left e => eq_rect_r (λ i0 : index, state (IM i0)) si e | right _ => s i end = simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si: state (IM i)match decide (i = i) with | left e => eq_rect_r (λ i : index, state (IM i)) si e | right _ => s i end = siby replace H with (eq_refl i) by (apply K_dec_type; done). Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si: state (IM i)
H: i = ieq_rect_r (λ i : index, state (IM i)) si H = simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)), s i = si → state_update s i si = smessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si : state (IM i)), s i = si → state_update s i si = smessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si: state (IM i)
Heq: s i = sistate_update s i si = smessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si: state (IM i)
Heq: s i = si∀ x : index, state_update s i si x = s xmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si: state (IM i)
Heq: s i = si
j: indexstate_update s i si j = s jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: indexstate_update s i (s i) i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
n: j ≠ istate_update s i (s i) j = s jby apply state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: indexstate_update s i (s i) i = s iby apply state_update_neq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
n: j ≠ istate_update s i (s i) j = s jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si si' : state (IM i)), state_update (state_update s i si) i si' = state_update s i si'message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i : index) (si si' : state (IM i)), state_update (state_update s i si) i si' = state_update s i si'message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)state_update (state_update s i si) i si' = state_update s i si'message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)∀ x : index, state_update (state_update s i si) i si' x = state_update s i si' xmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)
j: indexstate_update (state_update s i si) i si' j = state_update s i si' jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)
j: index
e: j = istate_update (state_update s i si) i si' j = state_update s i si' jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)
j: index
n: j ≠ istate_update (state_update s i si) i si' j = state_update s i si' jby subst; rewrite state_update_eq; symmetry; apply state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)
j: index
e: j = istate_update (state_update s i si) i si' j = state_update s i si' jby rewrite !state_update_neq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i: index
si, si': state (IM i)
j: index
n: j ≠ istate_update (state_update s i si) i si' j = state_update s i si' jmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i j : index) (si : state (IM i)) (sj : state (IM j)), j ≠ i → state_update (state_update s i si) j sj = state_update (state_update s j sj) i simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (s : composite_state) (i j : index) (si : state (IM i)) (sj : state (IM j)), j ≠ i → state_update (state_update s i si) j sj = state_update (state_update s j sj) i simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
si: state (IM i)
sj: state (IM j)
Hij: j ≠ istate_update (state_update s i si) j sj = state_update (state_update s j sj) i simessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
si: state (IM i)
sj: state (IM j)
Hij: j ≠ i∀ x : index, state_update (state_update s i si) j sj x = state_update (state_update s j sj) i si xmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
si: state (IM i)
sj: state (IM j)
Hij: j ≠ i
k: indexstate_update (state_update s i si) j sj k = state_update (state_update s j sj) i si kby rewrite !state_update_neq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
i, j: index
si: state (IM i)
sj: state (IM j)
Hij: j ≠ i
k: index
n: k ≠ j
n0: k ≠ istate_update (state_update s i si) j sj k = state_update (state_update s j sj) i si kmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
l: composite_label
s, s': composite_state
om, om': option message
Ht: composite_transition l (s, om) = (s', om')
i: index
Hi: i ≠ projT1 ls' i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
l: composite_label
s, s': composite_state
om, om': option message
Ht: composite_transition l (s, om) = (s', om')
i: index
Hi: i ≠ projT1 ls' i = s iby inversion Ht; apply state_update_neq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
x: index
l: label (IM x)
s, s': composite_state
om, om': option message
s0: state (IM x)
o: option message
Ht: (state_update s x s0, o) = (s', om')
i: index
Hi: i ≠ projT1 (existT x l)s' i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
li: label (IM i)
s, s': composite_state
om, om': option message
Ht: composite_transition (existT i li) (s, om) = (s', om')s' i = (transition li (s i, om)).1by cbn in Ht; destruct (transition _ _ _); inversion Ht; apply state_update_eq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
li: label (IM i)
s, s': composite_state
om, om': option message
Ht: composite_transition (existT i li) (s, om) = (s', om')s' i = (transition li (s i, om)).1
Updating a composite initial state with a component initial state
yields a composite initial state.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop sicomposite_initial_state_prop (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop sicomposite_initial_state_prop (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop si
j: indexinitial_state_prop (state_update s i si j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop siinitial_state_prop (state_update s i si i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop si
j: index
n: j ≠ iinitial_state_prop (state_update s i si j)by rewrite state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop siinitial_state_prop (state_update s i si i)by rewrite state_update_neq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state
Hs: composite_initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop si
j: index
n: j ≠ iinitial_state_prop (state_update s i si j)
Lifting functions
We can always "lift" state
sj
from component j
to a composite state by
updating an given composite state to sj
on component j
.
Definition lift_to_composite_state (s : composite_state) (j : index) (sj : state (IM j)) : composite_state := state_update s j sj. Definition lift_to_composite_label (j : index) (lj : label (IM j)) : composite_label := existT j lj. Definition lift_to_composite_transition_item (s : composite_state) (j : index) : transition_item (IM j) -> composite_transition_item := pre_VLSM_embedding_transition_item_project (IM j) composite_type (lift_to_composite_label j) (lift_to_composite_state s j).
A specialized version of lift_to_composite_state using the initial composite
state as the base for lifting.
Definition lift_to_composite_state' : forall j : index, state (IM j) -> composite_state := lift_to_composite_state (proj1_sig composite_s0). Definition lift_to_composite_transition_item' : forall j : index, transition_item -> composite_transition_item := lift_to_composite_transition_item (proj1_sig composite_s0).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
a: plan_itemcomposite_plan_itemmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
a: plan_itemcomposite_plan_itemmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
label_a: label (IM i)
input_a: option messagecomposite_plan_itemmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
label_a: label (IM i)
input_a: option messagelabel composite_typemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
label_a: label (IM i)
input_a: option messageoption messageexact (existT i label_a).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
label_a: label (IM i)
input_a: option messagelabel composite_typeexact input_a. Defined.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
label_a: label (IM i)
input_a: option messageoption messagemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (j : index) (sj : state (IM j)), initial_state_prop sj → composite_initial_state_prop (lift_to_composite_state' j sj)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (j : index) (sj : state (IM j)), initial_state_prop sj → composite_initial_state_prop (lift_to_composite_state' j sj)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sj
i: indexinitial_state_prop (lift_to_composite_state' j sj i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sj
i: indexinitial_state_prop (lift_to_composite_state (`composite_s0) j sj i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sjinitial_state_prop (lift_to_composite_state (`composite_s0) j sj j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sj
i: index
n: i ≠ jinitial_state_prop (lift_to_composite_state (`composite_s0) j sj i)by rewrite state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sjinitial_state_prop (lift_to_composite_state (`composite_s0) j sj j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sj
i: index
n: i ≠ jinitial_state_prop (lift_to_composite_state (`composite_s0) j sj i)by destruct (vs0 _) as [s Hs]. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hinitj: initial_state_prop sj
i: index
n: i ≠ jinitial_state_prop (`(vs0 (IM i)))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexVLSM_embedding (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexVLSM_embedding (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid (lift_to_composite_label j l) (lift_to_composite_state' j s, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')transition (lift_to_composite_label j l) (lift_to_composite_state' j s, om) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
s: state (IM j)
H: initial_state_prop sinitial_state_prop (lift_to_composite_state' j s)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
m: message
H: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid (lift_to_composite_label j l) (lift_to_composite_state' j s, om)by rewrite state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid l (lift_to_composite_state (`composite_s0) j s j, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')transition (lift_to_composite_label j l) (lift_to_composite_state' j s, om) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (lift_to_composite_state (`composite_s0) j s j, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (s, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state' j s) j s', om') = (lift_to_composite_state' j s', om')by rewrite state_update_twice.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state (`composite_s0) j s) j s', om') = (lift_to_composite_state (`composite_s0) j s', om')by cbn; apply composite_initial_state_prop_lift.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
s: state (IM j)
H: initial_state_prop sinitial_state_prop (lift_to_composite_state' j s)by exists j, (exist _ _ H). Qed. Definition lift_to_composite_finite_trace (j : index) : list (transition_item (IM j)) -> list composite_transition_item := VLSM_embedding_finite_trace_project (lift_to_composite_VLSM_embedding j). Definition lift_to_composite_finite_trace_last (j : index) := VLSM_embedding_finite_trace_last (lift_to_composite_VLSM_embedding j).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
m: message
H: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: indexVLSM_embedding (preloaded_vlsm (IM j) P) (preloaded_vlsm free_composite_vlsm Q) (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: indexVLSM_embedding (preloaded_vlsm (IM j) P) (preloaded_vlsm free_composite_vlsm Q) (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
H: P mQ mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid (lift_to_composite_label j l) (lift_to_composite_state' j s, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')transition (lift_to_composite_label j l) (lift_to_composite_state' j s, om) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
s: state (IM j)
H: initial_state_prop sinitial_state_prop (lift_to_composite_state' j s)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
H: initial_message_prop minitial_message_prop mby apply PimpliesQ.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
H: P mQ mby cbn; unfold lift_to_composite_state'; rewrite state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid (lift_to_composite_label j l) (lift_to_composite_state' j s, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')transition (lift_to_composite_label j l) (lift_to_composite_state' j s, om) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (lift_to_composite_state (`composite_s0) j s j, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (s, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state' j s) j s', om') = (lift_to_composite_state' j s', om')by rewrite state_update_twice.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state (`composite_s0) j s) j s', om') = (lift_to_composite_state (`composite_s0) j s', om')by cbn; apply composite_initial_state_prop_lift.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
s: state (IM j)
H: initial_state_prop sinitial_state_prop (lift_to_composite_state' j s)by exists j, (exist _ _ H). Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
H: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexVLSM_embedding (preloaded_with_all_messages_vlsm (IM j)) (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexVLSM_embedding (preloaded_with_all_messages_vlsm (IM j)) (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_embedding_valid_preservation (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_embedding_transition_preservation (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_projection_initial_state_preservation (IM j) free_composite_vlsm (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_embedding_valid_preservation (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid (lift_to_composite_label j l) (lift_to_composite_state' j s, om)by rewrite state_update_eq.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
H: valid l (s, om)valid l (lift_to_composite_state (λ n : index, `(vs0 (IM n))) j s j, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_embedding_transition_preservation (IM j) free_composite_vlsm (lift_to_composite_label j) (lift_to_composite_state' j)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (lift_to_composite_state' j s j, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (lift_to_composite_state (`composite_s0) j s j, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (s, om) in (state_update (lift_to_composite_state' j s) j si', om')) = (lift_to_composite_state' j s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state' j s) j s', om') = (lift_to_composite_state' j s', om')by rewrite state_update_twice.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
l: label (IM j)
s: state (IM j)
om: option message
s': state (IM j)
om': option message
H: transition l (s, om) = (s', om')(state_update (lift_to_composite_state (`composite_s0) j s) j s', om') = (lift_to_composite_state (`composite_s0) j s', om')by intros s H; cbn; apply composite_initial_state_prop_lift. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: indexstrong_projection_initial_state_preservation (IM j) free_composite_vlsm (lift_to_composite_state' j)
If all messages described by a predicate
P
are valid for the free
composition preloaded with messages described by a predicate Q
, then
any message which can be emitted by a component preloaded with P
can
also be emitted by the free composition preloaded with Q
.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm∀ (j : index) (m : message), can_emit (preloaded_vlsm (IM j) P) m → can_emit (preloaded_vlsm free_composite_vlsm Q) mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm∀ (j : index) (m : message), can_emit (preloaded_vlsm (IM j) P) m → can_emit (preloaded_vlsm free_composite_vlsm Q) mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mcan_emit (preloaded_vlsm free_composite_vlsm Q) mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mVLSM_incl_part ?MX (preloaded_vlsm_machine free_composite_vlsm Q)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mcan_emit {| vlsm_type := free_composite_vlsm; vlsm_machine := ?MX |} mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mVLSM_incl_part ?MX (preloaded_vlsm_machine free_composite_vlsm Q)by itauto.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) m∀ m : message, Q m ∨ P m → Q m ∨ valid_message_prop (preloaded_vlsm free_composite_vlsm Q) mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mcan_emit {| vlsm_type := free_composite_vlsm; vlsm_machine := preloaded_vlsm free_composite_vlsm (λ m : message, Q m ∨ P m) |} mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) mVLSM_embedding (preloaded_vlsm (IM j) P) {| vlsm_type := free_composite_vlsm; vlsm_machine := preloaded_vlsm free_composite_vlsm (λ m : message, Q m ∨ P m) |} ?label_project ?state_projectby itauto. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
HPvalid: ∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm Q) dm
j: index
m: message
Hm: can_emit (preloaded_vlsm (IM j) P) m∀ m : message, P m → Q m ∨ P m
As a specialization of valid_preloaded_lifts_can_be_emitted, if all
messages described by a predicate
P
are valid for the free composition,
then any message which can be emitted by a component preloaded with P
can also be emitted by the free composition.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm∀ (i : index) (m : message), can_emit (preloaded_vlsm (IM i) P) m → can_emit free_composite_vlsm mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm∀ (i : index) (m : message), can_emit (preloaded_vlsm (IM i) P) m → can_emit free_composite_vlsm mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) mcan_emit free_composite_vlsm mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) mVLSM_incl_part ?MX free_composite_vlsm_machinemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) mcan_emit {| vlsm_type := composite_type; vlsm_machine := ?MX |} mby eapply (vlsm_is_preloaded_with_False free_composite_vlsm).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) mVLSM_incl_part ?MX free_composite_vlsm_machinemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) mcan_emit {| vlsm_type := composite_type; vlsm_machine := {| vlsm_type := free_composite_vlsm; vlsm_machine := preloaded_vlsm free_composite_vlsm (λ _ : message, False) |} |} mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m∀ dm : message, P dm → valid_message_prop (preloaded_vlsm free_composite_vlsm (λ _ : message, False)) dmmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmvalid_message_prop (preloaded_vlsm free_composite_vlsm (λ _ : message, False)) dmmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmVLSM_incl_part ?MX (preloaded_vlsm_machine free_composite_vlsm (λ _ : message, False))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmstrong_incl_initial_message_preservation ?MX (preloaded_vlsm_machine free_composite_vlsm (λ _ : message, False))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmvalid_message_prop {| vlsm_type := free_composite_vlsm; vlsm_machine := ?MX |} dmby apply (vlsm_is_preloaded_with_False free_composite_vlsm).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmVLSM_incl_part ?MX (preloaded_vlsm_machine free_composite_vlsm (λ _ : message, False))by cbv; itauto.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmstrong_incl_initial_message_preservation {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |} (preloaded_vlsm_machine free_composite_vlsm (λ _ : message, False))by apply Hdeps. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
Hdeps: ∀ dm : message, P dm → valid_message_prop free_composite_vlsm dm
i: index
m: message
H: can_emit (preloaded_vlsm (IM i) P) m
dm: message
Hdm: P dmvalid_message_prop {| vlsm_type := free_composite_vlsm; vlsm_machine := {| vlsm_type := free_composite_vlsm; vlsm_machine := free_composite_vlsm |} |} dmmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hp: constrained_state_prop (IM j) sjconstrained_state_prop free_composite_vlsm (lift_to_composite_state' j sj)by apply (VLSM_embedding_valid_state (lift_to_composite_preloaded_VLSM_embedding j)). Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
j: index
sj: state (IM j)
Hp: constrained_state_prop (IM j) sjconstrained_state_prop free_composite_vlsm (lift_to_composite_state' j sj)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
Htrj: can_emit (preloaded_vlsm (IM j) P) mcan_emit (preloaded_vlsm free_composite_vlsm Q) mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
Htrj: can_emit (preloaded_vlsm (IM j) P) mcan_emit (preloaded_vlsm free_composite_vlsm Q) mby apply lift_to_composite_generalized_preloaded_VLSM_embedding. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P, Q: message → Prop
PimpliesQ: ∀ m : message, P m → Q m
j: index
m: message
Htrj: can_emit (preloaded_vlsm (IM j) P) mVLSM_embedding (preloaded_vlsm (IM j) P) (preloaded_vlsm free_composite_vlsm Q) ?label_project ?state_project
Updating a composite valid_state for the free composition with
a component initial state yields a composite valid_state.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s: composite_state
Hs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
i: index
si: state (IM i)
Hsi: initial_state_prop sivalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s: composite_state
Hs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
i: index
si: state (IM i)
Hsi: initial_state_prop sivalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s: state (preloaded_vlsm free_composite_vlsm P)
Hs: initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop sivalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
l: label (preloaded_vlsm free_composite_vlsm P)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Ht: input_valid_transition (preloaded_vlsm free_composite_vlsm P) l (s, om) (s', om')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s' i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s: state (preloaded_vlsm free_composite_vlsm P)
Hs: initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop sivalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)by apply composite_update_initial_state_with_initial.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s: state (preloaded_vlsm free_composite_vlsm P)
Hs: initial_state_prop s
i: index
si: state (IM i)
Hsi: initial_state_prop sicomposite_initial_state_prop (state_update s i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
l: label (preloaded_vlsm free_composite_vlsm P)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Ht: input_valid_transition (preloaded_vlsm free_composite_vlsm P) l (s, om) (s', om')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s' i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
l: label (preloaded_vlsm free_composite_vlsm P)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: let (i, li) := l in valid li (s i, om)
Ht: (let (i, li) := l in let (si', om') := transition li (s i, om) in (state_update s i si', om')) = ( s', om')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s' i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
Ht: (let (si', om') := transition lj (s j, om) in (state_update s j si', om')) = ( s', om')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s' i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
Ht: (state_update s j sj', omj') = (s', om')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s' i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s j sj') i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
e: i = jvalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s j sj') i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
n: i ≠ jvalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s j sj') i si)by subst; rewrite state_update_twice.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
e: i = jvalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s j sj') i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
n: i ≠ jvalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s j sj') i si)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
n: i ≠ jvalid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update (state_update s i si) j sj')by repeat split; [done | done | ..]; cbn; rewrite state_update_neq; [.. | rewrite Htj |]. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
P: message → Prop
s': state (preloaded_vlsm free_composite_vlsm P)
j: index
lj: label (IM j)
om, om': option message
s: state (preloaded_vlsm free_composite_vlsm P)
Hps: valid_state_prop (preloaded_vlsm free_composite_vlsm P) s
Hom: option_valid_message_prop (preloaded_vlsm free_composite_vlsm P) om
Hv: valid lj (s j, om)
sj': state (IM j)
omj': option message
Htj: transition lj (s j, om) = (sj', omj')
i: index
si: state (IM i)
Hsi: initial_state_prop si
IHHs: valid_state_prop (preloaded_vlsm free_composite_vlsm P) (state_update s i si)
n: i ≠ jinput_valid_transition (preloaded_vlsm free_composite_vlsm P) (existT j lj) (state_update s i si, om) (state_update (state_update s i si) j sj', omj')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (l : label (IM i)) (s : state (IM i)) (om : option message), valid l (s, om) → composite_valid (lift_to_composite_label i l) (lift_to_composite_state cs i s, om)by intros; cbn; rewrite state_update_eq. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (l : label (IM i)) (s : state (IM i)) (om : option message), valid l (s, om) → composite_valid (lift_to_composite_label i l) (lift_to_composite_state cs i s, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (l : label (IM i)) (s : state (IM i)) (om : option message) (s' : state (IM i)) (om' : option message), transition l (s, om) = (s', om') → composite_transition (lift_to_composite_label i l) (lift_to_composite_state cs i s, om) = (lift_to_composite_state cs i s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (l : label (IM i)) (s : state (IM i)) (om : option message) (s' : state (IM i)) (om' : option message), transition l (s, om) = (s', om') → composite_transition (lift_to_composite_label i l) (lift_to_composite_state cs i s, om) = (lift_to_composite_state cs i s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
l: label (IM i)
s: state (IM i)
om: option message
s': state (IM i)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (lift_to_composite_state cs i s i, om) in (state_update (lift_to_composite_state cs i s) i si', om')) = (lift_to_composite_state cs i s', om')by replace (transition _ _ _) with (s', om'); rewrite state_update_twice. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
l: label (IM i)
s: state (IM i)
om: option message
s': state (IM i)
om': option message
H: transition l (s, om) = (s', om')(let (si', om') := transition l (s, om) in (state_update (state_update cs i s) i si', om')) = (state_update cs i s', om')message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (m : message), initial_message_prop m → composite_initial_message_prop mby intros i m Hm; exists i, (exist _ _ Hm). Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (m : message), initial_message_prop m → composite_initial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (P : message → Prop), valid_state_prop (preloaded_vlsm free_composite_vlsm P) cs → VLSM_weak_embedding (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state) (P : message → Prop), valid_state_prop (preloaded_vlsm free_composite_vlsm P) cs → VLSM_weak_embedding (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csVLSM_weak_embedding (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_valid_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_transition_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_projection_initial_state_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_initial_message_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_valid_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)by cbn; apply lift_to_composite_valid_preservation.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) cs
l: label (preloaded_vlsm (IM i) P)
s: state (preloaded_vlsm (IM i) P)
om: option message
Hv: valid l (s, om)valid (lift_to_composite_label i l) (lift_to_composite_state cs i s, om)by inversion 1; cbn; apply lift_to_composite_transition_preservation.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_transition_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_label i) (lift_to_composite_state cs i)by intros s Hs; apply pre_composite_free_update_state_with_initial.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_projection_initial_state_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) csweak_embedding_initial_message_preservation (preloaded_vlsm (IM i) P) (preloaded_vlsm free_composite_vlsm P) (lift_to_composite_state cs i)by cbn; eapply lift_to_composite_initial_message_preservation. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
P: message → Prop
Hvsp: valid_state_prop (preloaded_vlsm free_composite_vlsm P) cs
m: message
Hm: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state), valid_state_prop free_composite_vlsm cs → VLSM_weak_embedding (IM i) free_composite_vlsm (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state), valid_state_prop free_composite_vlsm cs → VLSM_weak_embedding (IM i) free_composite_vlsm (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXfinite_valid_trace_from free_composite_vlsm (lift_to_composite_state cs i sX) (pre_VLSM_embedding_finite_trace_project (IM i) free_composite_vlsm (lift_to_composite_label i) (lift_to_composite_state cs i) trX)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXvalid_state_prop (preloaded_vlsm free_composite_vlsm (λ _ : message, False)) csmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXfinite_valid_trace_from (preloaded_vlsm (IM i) (λ _ : message, False)) sX trXby apply (VLSM_eq_valid_state (vlsm_is_preloaded_with_False free_composite_vlsm)).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXvalid_state_prop (preloaded_vlsm free_composite_vlsm (λ _ : message, False)) csmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXfinite_valid_trace_from (preloaded_vlsm (IM i) (λ _ : message, False)) sX trXby destruct (IM i). Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: valid_state_prop free_composite_vlsm cs
sX: state (IM i)
trX: list transition_item
H0: finite_valid_trace_from (IM i) sX trXfinite_valid_trace_from {| vlsm_type := IM i; vlsm_machine := IM i |} sX trXmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state), constrained_state_prop free_composite_vlsm cs → VLSM_weak_embedding (preloaded_with_all_messages_vlsm (IM i)) (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (i : index) (cs : composite_state), constrained_state_prop free_composite_vlsm cs → VLSM_weak_embedding (preloaded_with_all_messages_vlsm (IM i)) (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_label i) (lift_to_composite_state cs i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: constrained_state_prop free_composite_vlsm cs
sX: state (preloaded_with_all_messages_vlsm (IM i))
trX: list transition_item
H0: finite_valid_trace_from (preloaded_with_all_messages_vlsm (IM i)) sX trXfinite_valid_trace_from (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_state cs i sX) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (IM i)) (preloaded_with_all_messages_vlsm free_composite_vlsm) (lift_to_composite_label i) (lift_to_composite_state cs i) trX)by destruct (IM i). Qed. End sec_VLSM_composition.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
cs: composite_state
H: constrained_state_prop free_composite_vlsm cs
sX: state (preloaded_with_all_messages_vlsm (IM i))
trX: list transition_item
H0: finite_valid_trace_from (preloaded_with_all_messages_vlsm (IM i)) sX trXfinite_valid_trace_from (preloaded_vlsm (IM i) (λ _ : message, True)) sX trX
A tactic for working with the state_update function
Create HintDb state_update. #[export] Hint Rewrite @state_update_neq using done : state_update. #[export] Hint Rewrite @state_update_id using done : state_update. #[export] Hint Rewrite @state_update_eq : state_update. #[export] Hint Unfold lift_to_composite_state : state_update. #[export] Hint Unfold lift_to_composite_state' : state_update. Ltac state_update_simpl := autounfold with state_update in *; autorewrite with state_update in *.
Basic projection lemmas
We call a composite_state constrained if it is constrained for the
free_composite_vlsm.
Definition composite_constrained_state_prop
{message : Type} `{EqDecision index}
(IM : index -> VLSM message) (s : composite_state IM) : Prop :=
constrained_state_prop (free_composite_vlsm IM) s.
If a composite state is constrained, so are all of its component states.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state IM
i: indexcomposite_constrained_state_prop IM s → constrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state IM
i: indexcomposite_constrained_state_prop IM s → constrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
s: composite_state IM
i: index
om: option message
Hproto: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s omconstrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
l: label (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
Hv: valid l (s, om)
s': state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om': option message
Ht: transition l (s, om) = (s', om')
IHHproto1: constrained_state_prop (IM i) (s i)
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) (s' i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
j: index
lj: label (IM j)
Hv: valid lj (s j, om)
s': state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om': option message
Ht: (let (si', om') := transition lj (s j, om) in (state_update IM s j si', om')) = ( s', om')
IHHproto1: constrained_state_prop (IM i) (s i)
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) (s' i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
j: index
lj: label (IM j)
Hv: valid lj (s j, om)
s': state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om': option message
s0: state (IM j)
o: option message
Heq: transition lj (s j, om) = (s0, o)
Ht: (state_update IM s j s0, o) = (s', om')
IHHproto1: constrained_state_prop (IM i) (s i)
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) (s' i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
j: index
lj: label (IM j)
Hv: valid lj (s j, om)
om': option message
s0: state (IM j)
Heq: transition lj (s j, om) = (s0, om')
IHHproto1: constrained_state_prop (IM i) (s i)
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) (state_update IM s j s0 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
lj: label (IM i)
Hv: valid lj (s i, om)
om': option message
s0: state (IM i)
Heq: transition lj (s i, om) = (s0, om')
IHHproto1: constrained_state_prop (IM i) (s i)
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) s0message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
lj: label (IM i)
Hv: valid lj (s i, om)
om': option message
s0: state (IM i)
Heq: transition lj (s i, om) = (s0, om')
om'': option message
Hovmp: valid_state_message_prop (preloaded_with_all_messages_vlsm (IM i)) (s i) om''
IHHproto2: constrained_state_prop (IM i) (_s i)constrained_state_prop (IM i) s0message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
lj: label (IM i)
Hv: valid lj (s i, om)
om': option message
s0: state (IM i)
Heq: transition lj (s i, om) = (s0, om')
om'': option message
Hovmp: valid_state_message_prop (preloaded_with_all_messages_vlsm (IM i)) (s i) om''
IHHproto2: constrained_state_prop (IM i) (_s i)valid_state_message_prop (preloaded_with_all_messages_vlsm (IM i)) s0 om'message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
lj: label (IM i)
Hv: valid lj (s i, om)
om': option message
s0: state (IM i)
Heq: transition lj (s i, om) = (s0, om')
om'': option message
Hovmp: valid_state_message_prop (preloaded_with_all_messages_vlsm (IM i)) (s i) om''
IHHproto2: constrained_state_prop (IM i) (_s i)input_valid_transition (preloaded_with_all_messages_vlsm (IM i)) ?l (?s, ?om) (s0, om')by apply any_message_is_valid_in_preloaded. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
i: index
s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
_om: option message
Hproto1: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) s _om
_s: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM))
om: option message
Hproto2: valid_state_message_prop (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) _s om
lj: label (IM i)
Hv: valid lj (s i, om)
om': option message
s0: state (IM i)
Heq: transition lj (s i, om) = (s0, om')
om'': option message
Hovmp: valid_state_message_prop (preloaded_with_all_messages_vlsm (IM i)) (s i) om''
IHHproto2: constrained_state_prop (IM i) (_s i)option_valid_message_prop (preloaded_with_all_messages_vlsm (IM i)) ommessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state (preloaded_with_all_messages_vlsm X)
i: indexconstrained_state_prop X s → constrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state (preloaded_with_all_messages_vlsm X)
i: indexconstrained_state_prop X s → constrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state (preloaded_with_all_messages_vlsm X)
i: index
H: constrained_state_prop X sconstrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state (preloaded_with_all_messages_vlsm X)
i: index
H: constrained_state_prop X scomposite_constrained_state_prop IM sby apply constrained_preloaded_vlsm_incl_preloaded_with_all_messages. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state (preloaded_with_all_messages_vlsm X)
i: index
H: constrained_state_prop X sVLSM_incl_part (preloaded_vlsm_machine X (λ _ : message, True)) (preloaded_vlsm_machine (free_composite_vlsm IM) (λ _ : message, True))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state X
i: indexvalid_state_prop X s → constrained_state_prop (IM i) (s i)by intros; apply valid_state_project_preloaded_to_preloaded, preloaded_with_all_messages_valid_state_prop. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
s: state X
i: indexvalid_state_prop X s → constrained_state_prop (IM i) (s i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (l : composite_label IM) (s : composite_state IM) (im : option message) (s' : composite_state IM) (om : option message), composite_transition IM l (s, im) = (s', om) → transition (projT2 l) (s (projT1 l), im) = (s' (projT1 l), om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message∀ (l : composite_label IM) (s : composite_state IM) (im : option message) (s' : composite_state IM) (om : option message), composite_transition IM l (s, im) = (s', om) → transition (projT2 l) (s (projT1 l), im) = (s' (projT1 l), om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
x: index
l: label (IM x)
s: composite_state IM
im: option message
s': composite_state IM
om: option message
H: (let (si', om') := transition l (s x, im) in (state_update IM s x si', om')) = ( s', om)transition l (s x, im) = (s' x, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
x: index
l: label (IM x)
s: composite_state IM
im: option message
s': composite_state IM
om: option message
s0: state (IM x)
o: option message
H: (state_update IM s x s0, o) = (s', om)(s0, o) = (s' x, om)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
x: index
l: label (IM x)
s: composite_state IM
im: option message
s': composite_state IM
om: option message
s0: state (IM x)
o: option message
H: (state_update IM s x s0, o) = (s', om)
H1: state_update IM s x s0 = s'
H2: o = om(s0, om) = (state_update IM s x s0 x, om)by state_update_simpl. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
x: index
l: label (IM x)
s: composite_state IM
im: option message
s': composite_state IM
om: option message
s0: state (IM x)
o: option message
H: (state_update IM s x s0, o) = (s', om)
H1: state_update IM s x s0 = s'
H2: o = oms0 = state_update IM s x s0 xmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X l ( s, im) (s', om)input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)input_valid (preloaded_with_all_messages_vlsm (IM (projT1 l))) (projT2 l) (s (projT1 l), im)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)valid_state_prop (preloaded_with_all_messages_vlsm (IM (projT1 l))) (s (projT1 l))message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)option_valid_message_prop (preloaded_with_all_messages_vlsm (IM (projT1 l))) immessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)valid (projT2 l) (s (projT1 l), im)by eapply composite_constrained_state_project.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)valid_state_prop (preloaded_with_all_messages_vlsm (IM (projT1 l))) (s (projT1 l))by apply any_message_is_valid_in_preloaded.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)option_valid_message_prop (preloaded_with_all_messages_vlsm (IM (projT1 l))) imby destruct l; apply Hcvalid. Qed.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hproto_s: valid_state_prop (preloaded_with_all_messages_vlsm X) s
Hcvalid: valid l (s, im)
Htrans: transition l (s, im) = (s', om)valid (projT2 l) (s (projT1 l), im)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)input_constrained_transition (free_composite_vlsm IM) l (s, im) (s', om)by apply constrained_preloaded_vlsm_incl_preloaded_with_all_messages. Qed.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label (preloaded_with_all_messages_vlsm X)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)VLSM_incl_part (preloaded_with_all_messages_vlsm X) (preloaded_vlsm_machine (free_composite_vlsm IM) (λ _ : message, True))message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option messageinput_valid_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option messageinput_valid_transition X l (s, im) (s', om) → input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option message
Hptrans: input_valid_transition X l (s, im) (s', om)input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)by revert Hptrans; apply input_valid_transition_preloaded_project_active. Qed.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option message
Hptrans: input_constrained_transition X l ( s, im) (s', om)input_constrained_transition (IM (projT1 l)) (projT2 l) (s (projT1 l), im) (s' (projT1 l), om)V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X l ( s, im) (s', om)s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)s i = s' i ∨ (∃ li : label (IM i), existT j lj = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V, message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)s j = s' j ∨ (∃ li : label (IM j), existT j lj = existT j li ∧ input_constrained_transition (IM j) li (s j, im) (s' j, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)
n: i ≠ js i = s' i ∨ (∃ li : label (IM i), existT j lj = existT i li ∧ input_constrained_transition (IM i) li (s i, im) ( s' i, om))V, message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)s j = s' j ∨ (∃ li : label (IM j), existT j lj = existT j li ∧ input_constrained_transition (IM j) li (s j, im) (s' j, om))V, message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)∃ li : label (IM j), existT j lj = existT j li ∧ input_constrained_transition (IM j) li (s j, im) (s' j, om)V, message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)existT j lj = existT j lj ∧ input_constrained_transition (IM j) lj (s j, im) (s' j, om)by revert Hptrans; apply input_valid_transition_preloaded_project_active_free.V, message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)input_constrained_transition (IM j) lj (s j, im) (s' j, om)V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)
n: i ≠ js i = s' i ∨ (∃ li : label (IM i), existT j lj = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hptrans: input_constrained_transition X (existT j lj) (s, im) ( s', om)
n: i ≠ js i = s' iV: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hpvalid: input_valid (preloaded_with_all_messages_vlsm X) (existT j lj) (s, im)
Htrans: (let (si', om') := transition lj (s j, im) in (state_update IM s j si', om')) = ( s', om)
n: i ≠ js i = s' iby state_update_simpl. Qed.V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
j: V
lj: label (IM j)
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
Hpvalid: input_valid (preloaded_with_all_messages_vlsm X) (existT j lj) (s, im)
s0: state (IM j)
o: option message
n: i ≠ js i = state_update IM s j s0 iV: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option messageinput_constrained_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)input_constrained_transition (free_composite_vlsm IM) l (s, im) (s', om)by apply constrained_preloaded_vlsm_incl_preloaded_with_all_messages. Qed.V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state (preloaded_with_all_messages_vlsm X)
im: option message
s': state (preloaded_with_all_messages_vlsm X)
om: option message
H: input_constrained_transition X l (s, im) (s', om)VLSM_incl_part (preloaded_with_all_messages_vlsm X) (preloaded_vlsm_machine (free_composite_vlsm IM) (λ _ : message, True))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option messageinput_valid_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option messageinput_valid_transition X l (s, im) (s', om) → s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option message
Hproto: input_valid_transition X l (s, im) (s', om)s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))by revert Hproto; apply input_valid_transition_preloaded_project_any. Qed.V: Type
i: V
message: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
l: label X
s: state X
im: option message
s': state X
om: option message
Hproto: input_constrained_transition X l ( s, im) (s', om)s i = s' i ∨ (∃ li : label (IM i), l = existT i li ∧ input_constrained_transition (IM i) li (s i, im) (s' i, om))
If a message can be emitted by a composition, then it can be emitted by one of the
components.
message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) m∃ j : V, can_emit (preloaded_with_all_messages_vlsm (IM j)) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) m∃ j : V, can_emit (preloaded_with_all_messages_vlsm (IM j)) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
s2, s1: state (preloaded_with_all_messages_vlsm X)
oim: option message
l: label (preloaded_with_all_messages_vlsm X)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm X) l (s1, oim) (s2, Some m)∃ j : V, can_emit (preloaded_with_all_messages_vlsm (IM j)) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
s2, s1: state (preloaded_with_all_messages_vlsm X)
oim: option message
l: label (preloaded_with_all_messages_vlsm X)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm X) l (s1, oim) (s2, Some m)can_emit (preloaded_with_all_messages_vlsm (IM (projT1 l))) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
s2, s1: state (preloaded_with_all_messages_vlsm X)
oim: option message
l: label (preloaded_with_all_messages_vlsm X)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm X) l (s1, oim) (s2, Some m)∃ s : state (preloaded_with_all_messages_vlsm (IM (projT1 l))), can_produce (preloaded_with_all_messages_vlsm (IM (projT1 l))) s mby eapply input_valid_transition_preloaded_project_active_free. Qed.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
X:= free_composite_vlsm IM: VLSM message
m: message
s2, s1: state (preloaded_with_all_messages_vlsm X)
oim: option message
l: label (preloaded_with_all_messages_vlsm X)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm X) l (s1, oim) (s2, Some m)input_valid_transition (preloaded_with_all_messages_vlsm (IM (projT1 l))) (projT2 l) (s1 (projT1 l), oim) (s2 (projT1 l), Some m)message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) m∃ j : V, can_emit (preloaded_with_all_messages_vlsm (IM j)) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) m∃ j : V, can_emit (preloaded_with_all_messages_vlsm (IM j)) mmessage, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) mcan_emit (preloaded_with_all_messages_vlsm (free_composite_vlsm IM)) mby apply constrained_preloaded_vlsm_incl_preloaded_with_all_messages. Qed.message, V: Type
EqDecision0: EqDecision V
IM: V → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
m: message
Hemit: can_emit (preloaded_with_all_messages_vlsm X) mVLSM_incl_part (preloaded_vlsm_machine X (λ _ : message, True)) (preloaded_vlsm_machine (free_composite_vlsm IM) (λ _ : message, True))
Binary free composition
index
.
Section sec_binary_free_composition. Context {message : Type} (M1 M2 : VLSM message) . Definition binary_index : Set := bool. Definition first : binary_index := true. Definition second : binary_index := false. #[export] Instance binary_index_dec : EqDecision binary_index := _. #[export] Instance binary_index_inhabited : Inhabited binary_index := populate first. Definition binary_IM (i : binary_index) : VLSM message := match i with | true => M1 | false => M2 end. Definition binary_free_composition : VLSM message := composite_vlsm binary_IM (free_constraint binary_IM). End sec_binary_free_composition.
Composite decidable initial message
Section sec_composite_decidable_initial_message. Context {message : Type} `{finite.Finite index} (IM : index -> VLSM message) (constraint : composite_label IM -> composite_state IM * option message -> Prop) .message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)decidable_initial_messages_prop (composite_vlsm IM constraint)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)decidable_initial_messages_prop (composite_vlsm IM constraint)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageDecision (initial_message_prop m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageDecision (composite_initial_message_prop IM m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageDecision (∃ (n : index) (mi : initial_message (IM n)), `mi = m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageList.Exists (λ i : index, initial_message_prop m) (enum index) ↔ (∃ (n : index) (mi : initial_message (IM n)), `mi = m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageDecision (List.Exists (λ i : index, initial_message_prop m) (enum index))message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageList.Exists (λ i : index, initial_message_prop m) (enum index) ↔ (∃ (n : index) (mi : initial_message (IM n)), `mi = m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: message(∃ x : index, initial_message_prop m) ↔ (∃ (n : index) (mi : initial_message (IM n)), `mi = m)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: message
i: index
Hm: initial_message_prop m∃ mi : initial_message (IM i), `mi = mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: message
i: index
Hm: ∃ mi : initial_message (IM i), `mi = minitial_message_prop mby exists (exist _ _ Hm).message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: message
i: index
Hm: initial_message_prop m∃ mi : initial_message (IM i), `mi = mby destruct Hm as [[im Hinit] [= ->]].message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: message
i: index
Hm: ∃ mi : initial_message (IM i), `mi = minitial_message_prop mby apply @Exists_dec; intro i; apply Hdec_init. Qed. End sec_composite_decidable_initial_message.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
Hdec_init: ∀ i : index, decidable_initial_messages_prop (IM i)
m: messageDecision (List.Exists (λ i : index, initial_message_prop m) (enum index))
Composite plan properties
P
to a state Free s'
, knowing its effects on a different state Free s
which shares some relevant features with s'
.
Section sec_composite_plan_properties. Context {message : Type} {index : Type} `{EqDecision index} (IM : index -> VLSM message) (Free := free_composite_vlsm IM) . (* A transition on component <<i>> is [input_valid] from <<s'>> if it is [input_valid] from <<s>> and their <<i>>'th components are equal. *)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: input_valid Free l (s, input)input_valid Free l (s', input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: input_valid Free l (s, input)input_valid Free l (s', input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: input_valid Free l (s, input)valid l (s', input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: valid_state_prop Free s ∧ option_valid_message_prop Free input ∧ (let (i, li) := l in valid li (s i, input))let (i, li) := l in valid li (s' i, input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= projT1 (existT x l): index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: valid_state_prop Free s ∧ option_valid_message_prop Free input ∧ valid l (s x, input)valid l (s' x, input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'
Hiv: valid_state_prop Free s ∧ option_valid_message_prop Free input ∧ valid l (s x, input)valid l (s' x, input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s x = s' x
Hprs: valid_state_prop Free s'
Hiv: valid_state_prop Free s ∧ option_valid_message_prop Free input ∧ valid l (s x, input)valid l (s' x, input)by itauto. Qed. (* The effect of the transition is also the same. *)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s x = s' x
Hprs: valid_state_prop Free s'
Hiv: valid_state_prop Free s ∧ option_valid_message_prop Free input ∧ valid l (s x, input)valid l (s x, input)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'let (dest, output) := transition l (s, input) in let (dest', output') := transition l (s', input) in output = output' ∧ dest i = dest' imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
l: label Free
input: option message
i:= projT1 l: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'let (dest, output) := transition l (s, input) in let (dest', output') := transition l (s', input) in output = output' ∧ dest i = dest' imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s i = s' i
Hprs: valid_state_prop Free s'let (dest, output) := let (si', om') := transition l (s x, input) in (state_update IM s x si', om') in let (dest', output') := let (si', om') := transition l (s' x, input) in (state_update IM s' x si', om') in output = output' ∧ dest i = dest' imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s x = s' x
Hprs: valid_state_prop Free s'let (dest, output) := let (si', om') := transition l (s' x, input) in (state_update IM s x si', om') in let (dest', output') := let (si', om') := transition l (s' x, input) in (state_update IM s' x si', om') in output = output' ∧ dest i = dest' iby state_update_simpl. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
x: index
l: label (IM x)
input: option message
i:= x: index
Heq: s x = s' x
Hprs: valid_state_prop Free s'
s0: state (IM x)
o: option messageo = o ∧ state_update IM s x s0 i = state_update IM s' x s0 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
ai: plan_item
i:= projT1 (label_a ai): index
Heq: s i = s' i
Hpr: finite_valid_plan_from Free s [ai]let res' := (apply_plan Free s' [ai]).2 in let res := (apply_plan Free s [ai]).2 in finite_valid_plan_from Free s' [ai] ∧ res' i = res imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
ai: plan_item
i:= projT1 (label_a ai): index
Heq: s i = s' i
Hpr: finite_valid_plan_from Free s [ai]let res' := (apply_plan Free s' [ai]).2 in let res := (apply_plan Free s [ai]).2 in finite_valid_plan_from Free s' [ai] ∧ res' i = res imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
ai: plan_item
i:= projT1 (label_a ai): index
Heq: s i = s' i
Hpr: finite_valid_plan_from Free s [ai]finite_valid_plan_from Free s' [ai] ∧ (apply_plan Free s' [ai]).2 i = (apply_plan Free s [ai]).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
ai: plan_item
i:= projT1 (label_a ai): index
Heq: s i = s' i
Hpr: finite_valid_trace_from Free s (let (final, items) := foldr _apply_plan_folder (s, []) (rev [ai]) in (rev items, final)).1finite_valid_trace_from Free s' (let (final, items) := foldr _apply_plan_folder (s', []) (rev [ai]) in (rev items, final)).1 ∧ (let (final, items) := foldr _apply_plan_folder (s', []) (rev [ai]) in (rev items, final)).2 i = (let (final, items) := foldr _apply_plan_folder (s, []) (rev [ai]) in (rev items, final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
Hpr: finite_valid_trace_from Free s (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).1finite_valid_trace_from Free s' (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).1 ∧ (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).2 i = (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
Hpr: finite_valid_trace_from Free s (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1 ∧ (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (let (final, items) := let (dest, out) := let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om') in (dest, [{| l := label_a; input := input_a; destination := dest; output := out |}]) in (rev items, final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1 ∧ (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1 ∧ (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)(rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)input_valid_transition Free label_a (s', input_a) (c, o)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Ht': input_valid_transition Free label_a (s', input_a) (c, o)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)input_valid_transition Free label_a (s', input_a) (c, o)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid Free label_a (s, input_a) ∧ transition label_a (s, input_a) = (c0, o0)input_valid Free label_a (s', input_a) ∧ transition label_a (s', input_a) = (c, o)by apply relevant_component_transition_free with (s' := s') in Hpr_valid; itauto.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Hpr_valid: input_valid Free label_a (s, input_a)
Htrans: transition label_a (s, input_a) = (c0, o0)input_valid Free label_a (s', input_a) ∧ transition label_a (s', input_a) = (c, o)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Ht': input_valid_transition Free label_a (s', input_a) (c, o)finite_valid_trace_from Free s' (rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).1message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Ht': input_valid_transition Free label_a (s', input_a) (c, o)finite_valid_trace_from Free c []by apply input_valid_transition_destination in Ht'.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Ht': input_valid_transition Free label_a (s', input_a) (c, o)valid_state_prop Free cmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)(rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).1
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Hrel: let (dest, output) := transition label_a (s, input_a) in let (dest', output') := transition label_a (s', input_a) in output = output' ∧ dest (projT1 label_a) = dest' (projT1 label_a)(rev [{| l := label_a; input := input_a; destination := c; output := o |}], c).2 i = (rev [{| l := label_a; input := input_a; destination := c0; output := o0 |}], c0).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
i:= projT1 label_a: index
Heq: s i = s' i
c0: composite_state IM
o0: option message
eq_trans: (let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om')) = ( c0, o0)
Hpr: finite_valid_trace_from Free s [{| l := label_a; input := input_a; destination := c0; output := o0 |}]
c: composite_state IM
o: option message
eq_trans': (let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om')) = ( c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free label_a ( s, input_a) (c0, o0)
Hrel: let (dest, output) := let (i, li) := label_a in let (si', om') := transition li (s i, input_a) in (state_update IM s i si', om') in let (dest', output') := let (i, li) := label_a in let (si', om') := transition li (s' i, input_a) in (state_update IM s' i si', om') in output = output' ∧ dest (projT1 label_a) = dest' (projT1 label_a)c i = c0 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
x: index
l: label (IM x)
H1: label_a = existT x l
i:= projT1 (existT x l): index
Heq: s i = s' i
c0: composite_state IM
o0: option message
c1: composite_state IM
o1: option message
s1: state (IM x)
o4: option message
H3: transition l (s x, input_a) = (s1, o4)
H: (state_update IM s x s1, o4) = (c1, o1)
eq_trans: (c1, o1) = (c0, o0)
Hpr: finite_valid_trace_from Free s [{| l := existT x l; input := input_a; destination := c0; output := o0 |}]
c: composite_state IM
o: option message
c2: composite_state IM
o2: option message
s0: state (IM x)
o3: option message
H2: transition l (s' x, input_a) = (s0, o3)
H0: (state_update IM s' x s0, o3) = (c2, o2)
eq_trans': (c2, o2) = (c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free (existT x l) (s, input_a) ( c0, o0)
Hrel: o1 = o2 ∧ c1 (projT1 (existT x l)) = c2 (projT1 (existT x l))c i = c0 iby itauto congruence. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
label_a: composite_label IM
input_a: option message
x: index
l: label (IM x)
H1: label_a = existT x l
i:= x: index
Heq: s x = s' x
c0: composite_state IM
o0: option message
c1: composite_state IM
o1: option message
s1: state (IM x)
o4: option message
H3: transition l (s x, input_a) = (s1, o4)
H: (state_update IM s x s1, o4) = (c1, o1)
eq_trans: (c1, o1) = (c0, o0)
Hpr: finite_valid_trace_from Free s [{| l := existT x l; input := input_a; destination := c0; output := o0 |}]
c: composite_state IM
o: option message
c2: composite_state IM
o2: option message
s0: state (IM x)
o3: option message
H2: transition l (s' x, input_a) = (s0, o3)
H0: (state_update IM s' x s0, o3) = (c2, o2)
eq_trans': (c2, o2) = (c, o)
Htl: finite_valid_trace_from Free c0 []
Ht: input_valid_transition Free (existT x l) (s, input_a) ( c0, o0)
Hrel: o1 = o2 ∧ c1 x = c2 xc x = c0 x
Transitioning on some index different from
i
does not affect
component i
.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
ai: composite_plan_item IM
i: index
Hdif: i ≠ projT1 (label_a ai)let res := (composite_apply_plan IM s [ai]).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
ai: composite_plan_item IM
i: index
Hdif: i ≠ projT1 (label_a ai)let res := (composite_apply_plan IM s [ai]).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
ai: composite_plan_item IM
i: index
Hdif: i ≠ projT1 (label_a ai)(let (final, items) := match ai with | {| label_a := l'; input_a := input' |} => let (dest, out) := let (i, li) := l' in let (si', om') := transition li (s i, input') in (state_update IM s i si', om') in (dest, [{| l := l'; input := input'; destination := dest; output := out |}]) end in (rev items, final)).2 i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
ai: composite_plan_item IM
i: index
label_a: label (composite_type IM)
input_a: option message
x: index
l0: label (IM x)
H2: label_a = existT x l0
H0: ai = {| label_a := existT x l0; input_a := input_a |}
Hdif: i ≠ projT1 (Plans.label_a {| label_a := existT x l0; input_a := input_a |})
c: composite_state IM
l: list transition_item
c0: composite_state IM
o: option message
s0: state (IM x)
o0: option message
H3: transition l0 (s x, input_a) = (s0, o0)
H1: (state_update IM s x s0, o0) = (c0, o)
H: (c0, [{| l := existT x l0; input := input_a; destination := c0; output := o |}]) = (c, l)c i = s iby state_update_simpl. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
i: index
input_a: option message
x: index
l0: label (IM x)
Hdif: i ≠ projT1 (label_a {| label_a := existT x l0; input_a := input_a |})
o: option message
s0: state (IM x)
H1: (state_update IM s x s0, o) = (state_update IM s x s0, o)
H3: transition l0 (s x, input_a) = (s0, o)
H: (state_update IM s x s0, [{| l := existT x l0; input := input_a; destination := state_update IM s x s0; output := o |}]) = (state_update IM s x s0, [{| l := existT x l0; input := input_a; destination := state_update IM s x s0; output := o |}])state_update IM s x s0 i = s i
Same as irrelevant_components_one, but for
multiple transitions.
message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
a: composite_plan IM
a_indices:= List.map projT1 (List.map label_a a): list index
i: index
Hdif: i ∉ a_indiceslet res := (composite_apply_plan IM s a).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
a: composite_plan IM
a_indices:= List.map projT1 (List.map label_a a): list index
i: index
Hdif: i ∉ a_indiceslet res := (composite_apply_plan IM s a).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
a_indices:= List.map projT1 (List.map label_a []): list index
i: index
Hdif: i ∉ a_indiceslet res := (composite_apply_plan IM s []).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
IHa: let a_indices := List.map projT1 (List.map label_a a) in i ∉ a_indices → let res := (composite_apply_plan IM s a).2 in res i = s ilet res := (composite_apply_plan IM s (a ++ [x])).2 in res i = s iby simpl; itauto.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
a_indices:= List.map projT1 (List.map label_a []): list index
i: index
Hdif: i ∉ a_indiceslet res := (composite_apply_plan IM s []).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: state (composite_type IM)
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
IHa: let a_indices := List.map projT1 (List.map label_a a) in i ∉ a_indices → let res := (composite_apply_plan IM s a).2 in res i = s ilet res := (composite_apply_plan IM s (a ++ [x])).2 in res i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
IHa: i ∉ List.map projT1 (List.map label_a a) → (composite_apply_plan IM s a).2 i = s i(composite_apply_plan IM s (a ++ [x])).2 i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
IHa: i ∉ List.map projT1 (List.map label_a a) → (composite_apply_plan IM s a).2 i = s i(let (aitems, afinal) := composite_apply_plan IM s a in let (a'items, a'final) := composite_apply_plan IM afinal [x] in (aitems ++ a'items, a'final)).2 i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i(let (a'items, a'final) := composite_apply_plan IM sa [x] in (tra ++ a'items, a'final)).2 i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ a_indices
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)sx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a (a ++ [x]))
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)sx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a ++ List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)sx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)sx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)i ∉ List.map projT1 (List.map label_a a)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s isx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)i ∉ List.map projT1 (List.map label_a a)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
Hin: i ∈ List.map projT1 (List.map label_a a)Falsemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
Hin: i ∈ List.map projT1 (List.map label_a a)i ∈ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])by left.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
IHa: i ∉ List.map projT1 (List.map label_a a) → sa i = s i
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
Hin: i ∈ List.map projT1 (List.map label_a a)i ∈ List.map projT1 (List.map label_a a) ∨ i ∈ List.map projT1 (List.map label_a [x])message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s isx i = s imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s isx i = sa imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s i(composite_apply_plan IM sa [x]).2 i = sa imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s ii ≠ projT1 (label_a x)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: i ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s i
contra: i = projT1 (label_a x)Falsemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: projT1 (label_a x) ∉ List.map projT1 (List.map label_a a) ++ List.map projT1 (List.map label_a [x])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s i
contra: i = projT1 (label_a x)Falsemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
Hdif: ¬ (projT1 (label_a x) ∈ List.map projT1 (List.map label_a a) ∨ projT1 (label_a x) ∈ [projT1 (label_a x)])
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s i
contra: i = projT1 (label_a x)Falsemessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
i: index
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa i = s i
contra: i = projT1 (label_a x)projT1 (label_a x) ∈ List.map projT1 (List.map label_a a) ∨ projT1 (label_a x) ∈ [projT1 (label_a x)]by right; left. Qed. (* Same as relevant_components_one but for multiple transitions. *)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s: composite_state IM
x: composite_plan_item IM
a: list (composite_plan_item IM)
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
tra: list transition_item
sa: composite_state IM
eq_a: composite_apply_plan IM s a = (tra, sa)
trx: list transition_item
sx: composite_state IM
eq_x: composite_apply_plan IM sa [x] = (trx, sx)
IHa: sa (projT1 (label_a x)) = s (projT1 (label_a x))projT1 (label_a x) ∈ List.map projT1 (List.map label_a a) ∨ projT1 (label_a x) ∈ [projT1 (label_a x)]message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
a: plan Free
a_indices:= List.map projT1 (List.map label_a a): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hpr: finite_valid_plan_from Free s alet res' := (apply_plan Free s' a).2 in let res := (apply_plan Free s a).2 in finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → res' i = res i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': state Free
Hprs': valid_state_prop Free s'
a: plan Free
a_indices:= List.map projT1 (List.map label_a a): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hpr: finite_valid_plan_from Free s alet res' := (apply_plan Free s' a).2 in let res := (apply_plan Free s a).2 in finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → res' i = res i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hpr: finite_valid_plan_from Free s (a ++ [x])
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)List.map projT1 (List.map label_a a) ⊆ limessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)List.map projT1 (List.map label_a a) ⊆ limessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)
small: list index
Heqsmall: small = List.map projT1 (List.map label_a a)List.map projT1 (List.map label_a a) ⊆ limessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)
small: list index
Heqsmall: small = List.map projT1 (List.map label_a a)List.map projT1 (List.map label_a a) ⊆ a_indicesmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)
small: list index
Heqsmall: small = List.map projT1 (List.map label_a a)List.map projT1 (List.map label_a a) ⊆ List.map projT1 (List.map label_a (a ++ [x]))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)
small: list index
Heqsmall: small = List.map projT1 (List.map label_a a)
e: index
H: e ∈ List.map projT1 (List.map label_a a)e ∈ List.map projT1 (List.map label_a (a ++ [x]))by itauto.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: List.map projT1 (List.map label_a a) ⊆ li → finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)
small: list index
Heqsmall: small = List.map projT1 (List.map label_a a)
e: index
H: e ∈ List.map projT1 (List.map label_a a)e ∈ List.map projT1 (List.map label_a a) ∨ e ∈ List.map projT1 (List.map label_a [x])message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: finite_valid_plan_from Free s a → finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHa: finite_valid_plan_from Free s' a ∧ (∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i)finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 ifinite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: valid_state_prop Free (apply_plan Free s' a).2 → ∀ ai : plan_item, let i := projT1 (label_a ai) in (apply_plan Free s a).2 i = (apply_plan Free s' a).2 i → finite_valid_plan_from Free (apply_plan Free s a).2 [ai] → let res' := (apply_plan Free (apply_plan Free s' a).2 [ai]).2 in let res := (apply_plan Free (apply_plan Free s a).2 [ai]).2 in finite_valid_plan_from Free (apply_plan Free s' a).2 [ai] ∧ res' i = res ifinite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: ∀ ai : plan_item, let i := projT1 (label_a ai) in (apply_plan Free s a).2 i = (apply_plan Free s' a).2 i → finite_valid_plan_from Free (apply_plan Free s a).2 [ai] → let res' := (apply_plan Free (apply_plan Free s' a).2 [ai]).2 in let res := (apply_plan Free (apply_plan Free s a).2 [ai]).2 in finite_valid_plan_from Free (apply_plan Free s' a).2 [ai] ∧ res' i = res ifinite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))(apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))(apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))(apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))(apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))projT1 (label_a x) ∈ limessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: projT1 (label_a x) ∈ a_indices → projT1 (label_a x) ∈ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))projT1 (label_a x) ∈ limessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: projT1 (label_a x) ∈ a_indices → projT1 (label_a x) ∈ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))projT1 (label_a x) ∈ a_indicesby rewrite 2 map_app, elem_of_app; right; left.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: projT1 (label_a x) ∈ a_indices → projT1 (label_a x) ∈ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: projT1 (label_a x) ∈ li → (apply_plan Free s' a).2 (projT1 (label_a x)) = (apply_plan Free s a).2 (projT1 (label_a x))
Hrel: (apply_plan Free s a).2 (projT1 (label_a x)) = (apply_plan Free s' a).2 (projT1 (label_a x)) → finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))projT1 (label_a x) ∈ List.map projT1 (List.map label_a (a ++ [x]))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: finite_valid_plan_from Free (apply_plan Free s a).2 [x] → finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrel: finite_valid_plan_from Free (apply_plan Free s' a).2 [x] ∧ (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrelpr: finite_valid_plan_from Free (apply_plan Free s' a).2 [x]
Hrelind: (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))finite_valid_plan_from Free s' (a ++ [x]) ∧ (∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 i)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrelpr: finite_valid_plan_from Free (apply_plan Free s' a).2 [x]
Hrelind: (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))∀ i : index, i ∈ li → (apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrelpr: finite_valid_plan_from Free (apply_plan Free s' a).2 [x]
Hrelind: (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(apply_plan Free s' (a ++ [x])).2 i = (apply_plan Free s (a ++ [x])).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
IHaind: ∀ i : index, i ∈ li → (apply_plan Free s' a).2 i = (apply_plan Free s a).2 i
Hrelpr: finite_valid_plan_from Free (apply_plan Free s' a).2 [x]
Hrelind: (apply_plan Free (apply_plan Free s' a).2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(let (aitems, afinal) := apply_plan Free s' a in let (a'items, a'final) := apply_plan Free afinal [x] in (aitems ++ a'items, a'final)).2 i = (let (aitems, afinal) := apply_plan Free s a in let (a'items, a'final) := apply_plan Free afinal [x] in (aitems ++ a'items, a'final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
Hsingle: finite_valid_plan_from Free (apply_plan Free s a).2 [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': state Free
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → (tra', sa').2 i = (apply_plan Free s a).2 i
Hrelpr: finite_valid_plan_from Free (tra', sa').2 [x]
Hrelind: (apply_plan Free (tra', sa').2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (apply_plan Free s a).2 [x]).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(let (a'items, a'final) := apply_plan Free sa' [x] in (tra' ++ a'items, a'final)).2 i = (let (aitems, afinal) := apply_plan Free s a in let (a'items, a'final) := apply_plan Free afinal [x] in (aitems ++ a'items, a'final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: state Free
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free (tra, sa).2 [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': state Free
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → (tra', sa').2 i = (tra, sa).2 i
Hrelpr: finite_valid_plan_from Free (tra', sa').2 [x]
Hrelind: (apply_plan Free (tra', sa').2 [x]).2 (projT1 (label_a x)) = (apply_plan Free (tra, sa).2 [x]).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(let (a'items, a'final) := apply_plan Free sa' [x] in (tra' ++ a'items, a'final)).2 i = (let (a'items, a'final) := apply_plan Free sa [x] in (tra ++ a'items, a'final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
Hrelind: (apply_plan Free sa' [x]).2 (projT1 (label_a x)) = (apply_plan Free sa [x]).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(let (a'items, a'final) := apply_plan Free sa' [x] in (tra' ++ a'items, a'final)).2 i = (let (a'items, a'final) := apply_plan Free sa [x] in (tra ++ a'items, a'final)).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: state Free
eq_xsa: apply_plan Free sa [x] = (trx, sx)
Hrelind: (apply_plan Free sa' [x]).2 (projT1 (label_a x)) = (trx, sx).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(let (a'items, a'final) := apply_plan Free sa' [x] in (tra' ++ a'items, a'final)).2 i = (tra ++ trx, sx).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: state Free
eq_xsa: apply_plan Free sa [x] = (trx, sx)
trx': list transition_item
sx': state Free
eq_xsa': apply_plan Free sa' [x] = (trx', sx')
Hrelind: (trx', sx').2 (projT1 (label_a x)) = (trx, sx).2 (projT1 (label_a x))
i: index
Hi: i ∈ li(tra' ++ trx', sx').2 i = (tra ++ trx, sx).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: apply_plan Free sa [x] = (trx, sx)
trx': list transition_item
sx': composite_state IM
eq_xsa': apply_plan Free sa' [x] = (trx', sx')
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ lisx' i = sx imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: apply_plan Free sa [x] = (trx, sx)
trx': list transition_item
sx': composite_state IM
eq_xsa': apply_plan Free sa' [x] = (trx', sx')
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)sx' i = sx imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)sx' i = sx imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)(composite_apply_plan IM sa' [x]).2 i = sx imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)(composite_apply_plan IM sa' [x]).2 i = (composite_apply_plan IM sa [x]).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)
Hdiff: let res := (composite_apply_plan IM sa [x]).2 in res i = sa i(composite_apply_plan IM sa' [x]).2 i = (composite_apply_plan IM sa [x]).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)
Hdiff: let res := (composite_apply_plan IM sa [x]).2 in res i = sa i
Hdiff0: let res := (composite_apply_plan IM sa' [x]).2 in res i = sa' i(composite_apply_plan IM sa' [x]).2 i = (composite_apply_plan IM sa [x]).2 imessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)
Hdiff: let res := (composite_apply_plan IM sa [x]).2 in res i = sa i
Hdiff0: let res := (composite_apply_plan IM sa' [x]).2 in res i = sa' i(composite_apply_plan IM sa' [x]).2 i = sa iby apply IHaind. Qed. End sec_composite_plan_properties.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s, s': composite_state IM
Hprs': valid_state_prop Free s'
x: plan_item
a: list plan_item
a_indices:= List.map projT1 (List.map label_a (a ++ [x])): list index
li: list index
Heq: ∀ i : index, i ∈ li → s' i = s i
Hincl: a_indices ⊆ li
Hrem: finite_valid_plan_from Free s a
tra: list transition_item
sa: composite_state IM
eq_as: apply_plan Free s a = (tra, sa)
Hsingle: finite_valid_plan_from Free sa [x]
IHapr: finite_valid_plan_from Free s' a
tra': list transition_item
sa': composite_state IM
eq_as': apply_plan Free s' a = (tra', sa')
IHaind: ∀ i : index, i ∈ li → sa' i = sa i
Hrelpr: finite_valid_plan_from Free sa' [x]
trx: list transition_item
sx: composite_state IM
eq_xsa: (apply_plan Free sa [x]).2 = (trx, sx).2
trx': list transition_item
sx': composite_state IM
eq_xsa': (apply_plan Free sa' [x]).2 = (trx', sx').2
Hrelind: sx' (projT1 (label_a x)) = sx (projT1 (label_a x))
i: index
Hi: i ∈ li
n: i ≠ projT1 (label_a x)
Hdiff: let res := (composite_apply_plan IM sa [x]).2 in res i = sa i
Hdiff0: let res := (composite_apply_plan IM sa' [x]).2 in res i = sa' isa' i = sa i
Section sec_empty_composition_properties. Context {message : Type} `{finite.Finite index} (IM : index -> VLSM message) (constraint : composite_label IM -> composite_state IM * option message -> Prop) (X := composite_vlsm IM constraint) (Hempty_index : enum index = []) .message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
i: indexFalseby specialize (elem_of_enum i); rewrite Hempty_index; apply not_elem_of_nil. Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
i: indexFalsemessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
s: composite_state IMs = `(composite_s0 IM)by extensionality i; elim (empty_composition_no_index i). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
s: composite_state IMs = `(composite_s0 IM)message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
l: composite_label IMFalseby destruct l as [i _]; elim (empty_composition_no_index i). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
l: composite_label IMFalsemessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ composite_initial_message_prop IM mby intros m [i _]; elim (empty_composition_no_index i). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ composite_initial_message_prop IM mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ can_emit X mby intros m [s' [l _]]; elim (empty_composition_no_label l). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ can_emit X mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ valid_message_prop X mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ valid_message_prop X mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
m: message
Hm: valid_message_prop X mFalsemessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
m: message
Hinit: initial_message_prop mFalsemessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
m: message
Hemit: can_emit X mFalseby elim (empty_composition_no_initial_message _ Hinit).message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
m: message
Hinit: initial_message_prop mFalseby elim (empty_composition_no_emit _ Hemit). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
m: message
Hemit: can_emit X mFalsemessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
seed: message → Prop
PreX:= preloaded_vlsm X seed: VLSM message∀ m : message, ¬ can_emit PreX mby intros m [s' [l _]]; elim (empty_composition_no_label l). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
seed: message → Prop
PreX:= preloaded_vlsm X seed: VLSM message∀ m : message, ¬ can_emit PreX mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
seed: message → Prop
PreX:= preloaded_vlsm (free_composite_vlsm IM) seed: VLSM message∀ m : message, ¬ can_emit PreX mby intros m [s' [l _]]; elim (empty_composition_no_label l). Qed.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []
seed: message → Prop
PreX:= preloaded_vlsm (free_composite_vlsm IM) seed: VLSM message∀ m : message, ¬ can_emit PreX mmessage, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ can_emit (preloaded_with_all_messages_vlsm X) mby intros m [s' [l _]]; elim (empty_composition_no_label l). Qed. End sec_empty_composition_properties.message, index: Type
EqDecision0: EqDecision index
H: finite.Finite index
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
Hempty_index: enum index = []∀ m : message, ¬ can_emit (preloaded_with_all_messages_vlsm X) m
Properties of extensionally-equal indexed compositions
Section sec_same_IM_embedding. Context {message : Type} `{EqDecision index} (IM1 IM2 : index -> VLSM message) (Heq : forall i, IM1 i = IM2 i) . Definition same_IM_label_rew (l1 : composite_label IM1) : composite_label IM2 := existT (projT1 l1) (same_VLSM_label_rew (Heq (projT1 l1)) (projT2 l1)). Definition same_IM_state_rew (s1 : composite_state IM1) : composite_state IM2 := fun i => same_VLSM_state_rew (Heq i) (s1 i). Section sec_preloaded_constrained. Context (constraint1 : composite_label IM1 -> composite_state IM1 * option message -> Prop) (constraint2 : composite_label IM2 -> composite_state IM2 * option message -> Prop) (constraint_projection : forall s1, constrained_state_prop (free_composite_vlsm IM1) s1 -> forall l1 om, constraint1 l1 (s1, om) -> constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)) (seed : message -> Prop) .message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → PropVLSM_embedding (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) same_IM_label_rew same_IM_state_rewmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → PropVLSM_embedding (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) same_IM_label_rew same_IM_state_rewmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
H: input_valid_transition (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, om) (s', om')transition (same_IM_label_rew l) (same_IM_state_rew s, om) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
H: initial_state_prop linitial_state_prop (same_IM_state_rew l)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HmX: initial_message_prop mvalid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint1 l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint1 l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omconstrained_state_prop (free_composite_vlsm IM1) smessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint2 (same_IM_label_rew l) (same_IM_state_rew s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint1 l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omconstrained_state_prop (free_composite_vlsm IM1) sby apply constrained_preloaded_vlsm_incl_preloaded_with_all_messages.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint1 l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omVLSM_incl_part (preloaded_vlsm_machine (composite_vlsm IM1 constraint1) seed) (preloaded_vlsm_machine (free_composite_vlsm IM1) (λ _ : message, True))message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint2 (same_IM_label_rew l) (same_IM_state_rew s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
Hc: constraint2 (same_IM_label_rew l) (same_IM_state_rew s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
Hv: valid l (s, om)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid l (s, om) → valid (same_IM_label_rew l) (same_IM_state_rew s, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid (existT i li) (s, om) → valid (same_IM_label_rew (existT i li)) (same_IM_state_rew s, om)by apply same_VLSM_valid_preservation.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
Hs: valid_state_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) s
Hom: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) om
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HomY: option_valid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) omvalid li (s i, om) → valid (same_VLSM_label_rew (Heq i) li) (same_IM_state_rew s i, om)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
H: input_valid_transition (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, om) (s', om')transition (same_IM_label_rew l) (same_IM_state_rew s, om) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
H: transition l (s, om) = (s', om')transition (same_IM_label_rew l) (same_IM_state_rew s, om) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option messagetransition l (s, om) = (s', om') → transition (same_IM_label_rew l) (same_IM_state_rew s, om) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option messagetransition (existT i li) (s, om) = (s', om') → transition (same_IM_label_rew (existT i li)) (same_IM_state_rew s, om) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message(let (si', om') := transition li (s i, om) in (state_update IM1 s i si', om')) = (s', om') → (let (si', om') := transition (same_VLSM_label_rew (Heq i) li) (same_IM_state_rew s i, om) in (state_update IM2 (same_IM_state_rew s) i si', om')) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
si'1: state (IM1 i)
_om': option message
Ht1: transition li (s i, om) = (si'1, _om')(state_update IM1 s i si'1, _om') = (s', om') → (let (si', om') := transition (same_VLSM_label_rew (Heq i) li) (same_IM_state_rew s i, om) in (state_update IM2 (same_IM_state_rew s) i si', om')) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
si'1: state (IM1 i)
_om': option message
Ht1: transition li (s i, om) = (si'1, _om')(state_update IM1 s i si'1, _om') = (s', om') → (let (si', om') := transition (same_VLSM_label_rew (Heq i) li) (same_VLSM_state_rew (Heq i) (s i), om) in (state_update IM2 (same_IM_state_rew s) i si', om')) = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om: option message
s': state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om': option message
si'1: state (IM1 i)
_om': option message
Ht1: transition li (s i, om) = (si'1, _om')(state_update IM1 s i si'1, _om') = (s', om') → (state_update IM2 (same_IM_state_rew s) i (same_VLSM_state_rew (Heq i) si'1), _om') = (same_IM_state_rew s', om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om, om': option message
si'1: state (IM1 i)
Ht1: transition li (s i, om) = (si'1, om')(state_update IM2 (same_IM_state_rew s) i (same_VLSM_state_rew (Heq i) si'1), om') = (same_IM_state_rew (state_update IM1 s i si'1), om')message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om, om': option message
si'1: state (IM1 i)
Ht1: transition li (s i, om) = (si'1, om')state_update IM2 (same_IM_state_rew s) i (same_VLSM_state_rew (Heq i) si'1) = same_IM_state_rew (state_update IM1 s i si'1)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om, om': option message
si'1: state (IM1 i)
Ht1: transition li (s i, om) = (si'1, om')
j: indexstate_update IM2 (same_IM_state_rew s) i (same_VLSM_state_rew (Heq i) si'1) j = same_IM_state_rew (state_update IM1 s i si'1) jby destruct (decide (i = j)); subst; state_update_simpl.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
i: index
li: label (IM1 i)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
om, om': option message
si'1: state (IM1 i)
Ht1: transition li (s i, om) = (si'1, om')
j: indexstate_update IM2 (same_IM_state_rew s) i (same_VLSM_state_rew (Heq i) si'1) j = same_VLSM_state_rew (Heq j) (state_update IM1 s i si'1 j)by intros i; apply same_VLSM_initial_state_preservation, H.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
H: initial_state_prop linitial_state_prop (same_IM_state_rew l)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HmX: initial_message_prop mvalid_message_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
HmX: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
im: message
Him: initial_message_prop im
Hi: `(im ↾ Him) = minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
im: message
Him: initial_message_prop im
Hi: im = minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop minitial_message_prop mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop mcomposite_initial_message_prop IM2 m ∨ seed mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop m(∃ (n : index) (mi : initial_message (IM2 n)), `mi = m) ∨ seed mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop m∃ mi : initial_message (IM2 i), `mi = mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop minitial_message (IM2 i)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop m`?mi = mby exists m; eapply same_VLSM_initial_message_preservation; eauto.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop minitial_message (IM2 i)done. Qed. End sec_preloaded_constrained.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
constraint1: composite_label IM1 → composite_state IM1 * option message → Prop
constraint2: composite_label IM2 → composite_state IM2 * option message → Prop
constraint_projection: ∀ s1 : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)), constrained_state_prop (free_composite_vlsm IM1) s1 → ∀ (l1 : composite_label IM1) (om : option message), constraint1 l1 (s1, om) → constraint2 (same_IM_label_rew l1) (same_IM_state_rew s1, om)
seed: message → Prop
l: label (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
s: state (preloaded_vlsm (composite_vlsm IM1 constraint1) seed)
m: message
Hv: input_valid (preloaded_vlsm (composite_vlsm IM1 constraint1) seed) l (s, Some m)
HsY: valid_state_prop (preloaded_vlsm (composite_vlsm IM2 constraint2) seed) (same_IM_state_rew s)
i: index
Him: initial_message_prop m`(m ↾ same_VLSM_initial_message_preservation (IM1 i) (IM2 i) (Heq i) m Him) = mmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 iVLSM_embedding (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rewmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 iVLSM_embedding (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rewmessage, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i∀ (sX : state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))) (trX : list transition_item), finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) sX trX → finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_state_rew sX) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rew trX)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
tr1: list transition_item
Htr1: finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) s1 tr1finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_state_rew s1) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rew tr1)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
tr1: list transition_item
Htr1: finite_valid_trace {| vlsm_type := free_composite_vlsm IM1; vlsm_machine := {| vlsm_type := preloaded_vlsm (free_composite_vlsm IM1) (λ _ : message, True); vlsm_machine := preloaded_vlsm (composite_vlsm IM1 (free_constraint IM1)) (λ _ : message, True) |} |} s1 tr1finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_state_rew s1) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rew tr1)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
tr1: list transition_item
Htr1: finite_valid_trace {| vlsm_type := free_composite_vlsm IM1; vlsm_machine := {| vlsm_type := preloaded_vlsm (free_composite_vlsm IM1) (λ _ : message, True); vlsm_machine := preloaded_vlsm (composite_vlsm IM1 (free_constraint IM1)) (λ _ : message, True) |} |} s1 tr1
Hproj: VLSM_embedding (preloaded_vlsm (composite_vlsm IM1 (free_constraint IM1)) (λ _ : message, True)) (preloaded_vlsm (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) same_IM_label_rew same_IM_state_rewfinite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_state_rew s1) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rew tr1)message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
tr1: list transition_item
Hproj: VLSM_embedding (preloaded_vlsm (composite_vlsm IM1 (free_constraint IM1)) (λ _ : message, True)) (preloaded_vlsm (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) same_IM_label_rew same_IM_state_rew
Htr1: finite_valid_trace (preloaded_vlsm (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) (same_IM_state_rew s1) (VLSM_embedding_finite_trace_project Hproj tr1)finite_valid_trace (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) (same_IM_state_rew s1) (pre_VLSM_embedding_finite_trace_project (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1)) (preloaded_with_all_messages_vlsm (free_composite_vlsm IM2)) same_IM_label_rew same_IM_state_rew tr1)by apply preloaded_free_composite_vlsm_spec. Qed. End sec_same_IM_embedding. Arguments same_IM_label_rew {_ _ _ _} _ _ : assert. Arguments same_IM_state_rew {_ _ _ _} _ _ _ : assert.message, index: Type
EqDecision0: EqDecision index
IM1, IM2: index → VLSM message
Heq: ∀ i : index, IM1 i = IM2 i
s1: state (preloaded_with_all_messages_vlsm (free_composite_vlsm IM1))
tr1: list transition_item
Hproj: VLSM_embedding (preloaded_vlsm (composite_vlsm IM1 (free_constraint IM1)) (λ _ : message, True)) (preloaded_vlsm (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) same_IM_label_rew same_IM_state_rew
Htr1: finite_valid_trace (preloaded_vlsm (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) (same_IM_state_rew s1) (VLSM_embedding_finite_trace_project Hproj tr1)VLSM_incl_part (preloaded_vlsm_machine (composite_vlsm IM2 (free_constraint IM2)) (λ _ : message, True)) (preloaded_vlsm_machine (free_composite_vlsm IM2) (λ _ : message, True))
Section sec_composite_valid_transition. Context {message : Type} `{EqDecision index} (IM : index -> VLSM message) (Free := free_composite_vlsm IM) . Definition composite_valid_transition l s1 iom s2 oom : Prop := valid_transition Free l s1 iom s2 oom. Definition composite_valid_transition_item (s : composite_state IM) (item : composite_transition_item IM) : Prop := composite_valid_transition (l item) s (input item) (destination item) (output item).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
l: label Free
s1: state Free
iom: option message
s2: state Free
oom: option messagecomposite_valid_transition l s1 iom s2 oom ↔ valid_transition (preloaded_with_all_messages_vlsm Free) l s1 iom s2 oomby split; intros []; constructor. Qed. Definition composite_valid_transition_next s1 s2 : Prop := valid_transition_next Free s1 s2. Definition composite_valid_transition_future : relation (composite_state IM) := tc composite_valid_transition_next.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
l: label Free
s1: state Free
iom: option message
s2: state Free
oom: option messagecomposite_valid_transition l s1 iom s2 oom ↔ valid_transition (preloaded_with_all_messages_vlsm Free) l s1 iom s2 oommessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s1, s2: state Freecomposite_valid_transition_next s1 s2 ↔ valid_transition_next (preloaded_with_all_messages_vlsm Free) s1 s2by split; intros []; econstructor; apply composite_valid_transition_reachable_iff. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
s1, s2: state Freecomposite_valid_transition_next s1 s2 ↔ valid_transition_next (preloaded_with_all_messages_vlsm Free) s1 s2message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (l : label Free) (s1 : state Free) (iom : option message) (s2 : state Free) (oom : option message), composite_valid_transition l s1 iom s2 oom → valid_transition (IM (projT1 l)) (projT2 l) (s1 (projT1 l)) iom (s2 (projT1 l)) oom ∧ s2 = state_update IM s1 (projT1 l) (s2 (projT1 l))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (l : label Free) (s1 : state Free) (iom : option message) (s2 : state Free) (oom : option message), composite_valid_transition l s1 iom s2 oom → valid_transition (IM (projT1 l)) (projT2 l) (s1 (projT1 l)) iom (s2 (projT1 l)) oom ∧ s2 = state_update IM s1 (projT1 l) (s2 (projT1 l))by inversion Ht; subst; cbn; state_update_simpl. Qed.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
i: index
li: label (IM i)
s1: state Free
iom: option message
s2: state Free
oom: option message
Hv: valid (existT i li) (s1, iom)
s: state (IM i)
o: option message
Hti: transition li (s1 i, iom) = (s, o)
Ht: (state_update IM s1 i s, o) = (s2, oom)valid_transition (IM (projT1 (existT i li))) (projT2 (existT i li)) (s1 (projT1 (existT i li))) iom (s2 (projT1 (existT i li))) oom ∧ s2 = state_update IM s1 (projT1 (existT i li)) (s2 (projT1 (existT i li)))message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (i : index) (li : label (IM i)) (si1 : state (IM i)) (iom : option message) (si2 : state (IM i)) (oom : option message), valid_transition (IM i) li si1 iom si2 oom → ∀ s1 : ∀ x : index, state (IM x), s1 i = si1 → ∀ s2 : ∀ j : index, state (IM j), s2 = state_update IM s1 i si2 → composite_valid_transition (existT i li) s1 iom s2 oommessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (i : index) (li : label (IM i)) (si1 : state (IM i)) (iom : option message) (si2 : state (IM i)) (oom : option message), valid_transition (IM i) li si1 iom si2 oom → ∀ s1 : ∀ x : index, state (IM x), s1 i = si1 → ∀ s2 : ∀ j : index, state (IM j), s2 = state_update IM s1 i si2 → composite_valid_transition (existT i li) s1 iom s2 oomby cbn; replace (transition _ _ _) with (si2, oom). Qed. Inductive composite_valid_transitions_from_to : composite_state IM -> composite_state IM -> list (composite_transition_item IM) -> Prop := | cvtft_empty : forall s, composite_valid_transitions_from_to s s [] | cvtft_cons : forall s s' tr item, composite_valid_transitions_from_to s s' tr -> composite_valid_transition_item s' item -> composite_valid_transitions_from_to s (destination item) (tr ++ [item]).message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
i: index
li: label (IM i)
iom: option message
si2: state (IM i)
oom: option message
s1: ∀ x : index, state (IM x)
Ht: transition li (s1 i, iom) = (si2, oom)
Hv: valid li (s1 i, iom)transition (existT i li) (s1, iom) = (state_update IM s1 i si2, oom)message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (s s' : state (preloaded_with_all_messages_vlsm Free)) (tr : list transition_item), finite_constrained_trace_from_to Free s s' tr → composite_valid_transitions_from_to s s' trmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message∀ (s s' : state (preloaded_with_all_messages_vlsm Free)) (tr : list transition_item), finite_constrained_trace_from_to Free s s' tr → composite_valid_transitions_from_to s s' trmessage, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
si, s: state (preloaded_with_all_messages_vlsm Free)
tr: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Free) si s tr
sf: state (preloaded_with_all_messages_vlsm Free)
iom, oom: option message
l: label (preloaded_with_all_messages_vlsm Free)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Free) l (s, iom) (sf, oom)
IHfinite_valid_trace_from_to: composite_valid_transitions_from_to si s trcomposite_valid_transitions_from_to si sf (tr ++ [{| l := l; input := iom; destination := sf; output := oom |}])message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
si, s: state (preloaded_with_all_messages_vlsm Free)
tr: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Free) si s tr
sf: state (preloaded_with_all_messages_vlsm Free)
iom, oom: option message
l: label (preloaded_with_all_messages_vlsm Free)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Free) l (s, iom) (sf, oom)
IHfinite_valid_trace_from_to: composite_valid_transitions_from_to si s tr
item: transition_item
Heqitem: item = {| l := l; input := iom; destination := sf; output := oom |}composite_valid_transitions_from_to si sf (tr ++ [item])message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
si, s: state (preloaded_with_all_messages_vlsm Free)
tr: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Free) si s tr
sf: state (preloaded_with_all_messages_vlsm Free)
iom, oom: option message
l: label (preloaded_with_all_messages_vlsm Free)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Free) l (s, iom) (sf, oom)
IHfinite_valid_trace_from_to: composite_valid_transitions_from_to si s tr
item: transition_item
Heqitem: item = {| l := l; input := iom; destination := sf; output := oom |}composite_valid_transitions_from_to si (destination item) (tr ++ [item])by apply composite_valid_transition_reachable_iff, input_valid_transition_forget_input. Qed. End sec_composite_valid_transition.message, index: Type
EqDecision0: EqDecision index
IM: index → VLSM message
Free:= free_composite_vlsm IM: VLSM message
si, s: state (preloaded_with_all_messages_vlsm Free)
tr: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Free) si s tr
sf: state (preloaded_with_all_messages_vlsm Free)
iom, oom: option message
l: label (preloaded_with_all_messages_vlsm Free)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Free) l (s, iom) (sf, oom)
IHfinite_valid_trace_from_to: composite_valid_transitions_from_to si s trcomposite_valid_transition_item s {| l := l; input := iom; destination := sf; output := oom |}
Section sec_composite_state. Context `{EqDecision index} `[IM : index -> VLSM message] [constraint : composite_label IM -> composite_state IM * option message -> Prop] (X := composite_vlsm IM constraint) .
Given a valid state for the free composition and a constrained trace in one
of the components receiving only valid messages of the free composition,
the trace can be replayed on top of the given state to yield a valid trace
segment for the free composition.
index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (cs : composite_state IM), valid_state_prop (free_composite_vlsm IM) cs → VLSM_weak_embedding (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (cs : composite_state IM), valid_state_prop (free_composite_vlsm IM) cs → VLSM_weak_embedding (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
cs: composite_state IM
Hvsp: valid_state_prop (free_composite_vlsm IM) cs
s: state (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM)))
tr: list transition_item
Htr: finite_valid_trace_from (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) s trfinite_valid_trace_from (free_composite_vlsm IM) (lift_to_composite_state IM cs i s) (pre_VLSM_embedding_finite_trace_project (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i) tr)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
cs: composite_state IM
Hvsp: valid_state_prop (free_composite_vlsm IM) cs
s: state (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM)))
tr: list transition_item
Htr: finite_valid_trace_from (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) s tr
Heq: VLSM_eq (free_composite_vlsm IM) (preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)))finite_valid_trace_from (free_composite_vlsm IM) (lift_to_composite_state IM cs i s) (pre_VLSM_embedding_finite_trace_project (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i) tr)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
cs: composite_state IM
Hvsp: valid_state_prop {| vlsm_type := free_composite_vlsm IM; vlsm_machine := preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)) |} cs
s: state (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM)))
tr: list transition_item
Htr: finite_valid_trace_from (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) s tr
Heq: VLSM_eq (free_composite_vlsm IM) (preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)))finite_valid_trace_from (free_composite_vlsm IM) (lift_to_composite_state IM cs i s) (pre_VLSM_embedding_finite_trace_project (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i) tr)by unshelve eapply VLSM_weak_embedding_finite_valid_trace_from in Htr; cycle 3; [apply pre_lift_to_free_weak_embedding | ..]. Qed. Definition lift_to_composite_plan [i : index] : plan (IM i) -> composite_plan IM := List.map (lift_to_composite_plan_item IM i).index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
cs: composite_state IM
Hvsp: valid_state_prop {| vlsm_type := free_composite_vlsm IM; vlsm_machine := preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)) |} cs
s: state (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM)))
tr: list transition_item
Htr: finite_valid_trace_from (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) s tr
Heq: VLSM_eq (free_composite_vlsm IM) (preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)))finite_valid_trace_from {| vlsm_type := free_composite_vlsm IM; vlsm_machine := preloaded_vlsm (free_composite_vlsm IM) (valid_message_prop (free_composite_vlsm IM)) |} (lift_to_composite_state IM cs i s) (pre_VLSM_embedding_finite_trace_project (preloaded_vlsm (IM i) (valid_message_prop (free_composite_vlsm IM))) (free_composite_vlsm IM) (lift_to_composite_label IM i) (lift_to_composite_state IM cs i) tr)
A component state for the final state of a valid trace of the composition
is either initial, or there is a witness in the trace when a transition in
that component led to the current component state.
index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (is f : composite_state IM) (tr : list (composite_transition_item IM)), finite_valid_trace_init_to X is f tr → initial_state_prop (f i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = f i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (is f : composite_state IM) (tr : list (composite_transition_item IM)), finite_valid_trace_init_to X is f tr → initial_state_prop (f i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = f i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
l: label X
Ht: input_valid_transition X l (s, iom) (sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (VLSM.l item) = i)initial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (VLSM.l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
lj: label (IM i)
Ht: input_valid_transition X (existT i lj) (s, iom) ( sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)initial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT i lj; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
j: index
lj: label (IM j)
Ht: input_valid_transition X (existT j lj) (s, iom) ( sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)
n: i ≠ jinitial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (l item) = i)by right; eexists; split; [rewrite elem_of_app, elem_of_list_singleton; right |].index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
lj: label (IM i)
Ht: input_valid_transition X (existT i lj) (s, iom) ( sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)initial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT i lj; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
j: index
lj: label (IM j)
Ht: input_valid_transition X (existT j lj) (s, iom) ( sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)
n: i ≠ jinitial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
sf: state X
iom, oom: option message
j: index
lj: label (IM j)
Ht: (let (si', om') := transition lj (s j, iom) in (state_update IM s j si', om')) = ( sf, oom)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)
n: i ≠ jinitial_state_prop (sf i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := sf; output := oom |}] ∧ destination item i = sf i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
iom, oom: option message
j: index
lj: label (IM j)
si': state (IM j)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)
n: i ≠ jinitial_state_prop (state_update IM s j si' i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := state_update IM s j si'; output := oom |}] ∧ destination item i = state_update IM s j si' i ∧ projT1 (l item) = i)index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
iom, oom: option message
j: index
lj: label (IM j)
si': state (IM j)
IHHtr: initial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = s i ∧ projT1 (l item) = i)
n: i ≠ jinitial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := state_update IM s j si'; output := oom |}] ∧ destination item i = s i ∧ projT1 (l item) = i)by right; eexists; split; [rewrite elem_of_app; left |]. Qed.index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
si, s: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X si s tr
iom, oom: option message
j: index
lj: label (IM j)
si': state (IM j)
x: composite_transition_item IM
H: x ∈ tr
H0: destination x i = s i ∧ projT1 (l x) = i
n: i ≠ jinitial_state_prop (s i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ++ [{| l := existT j lj; input := iom; destination := state_update IM s j si'; output := oom |}] ∧ destination item i = s i ∧ projT1 (l item) = i)
A reformulation of final_state_component_initial_or_transition in terms of
valid_state_prop and in_futures.
A component state from a valid state for a composition is either initial or
there exists a valid transition in the composition from whose destination
the given state is validly reachable and which corresponds to a transition
in the component leading to the current component state.
index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (f : composite_state IM), valid_state_prop X f → initial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message∀ (i : index) (f : composite_state IM), valid_state_prop X f → initial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
Hf: valid_state_prop X finitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is f trinitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is f tr
Hitem: initial_state_prop (f i) ∨ (∃ item : composite_transition_item IM, item ∈ tr ∧ destination item i = f i ∧ projT1 (l item) = i)initial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
tr: list transition_item
Htr: finite_valid_trace_init_to X is f tr
item: composite_transition_item IM
Hitem: item ∈ tr
Hdest: destination item i = f i
Hl: projT1 (l item) = iinitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
item: composite_transition_item IM
pre, suf: list (composite_transition_item IM)
Htr: finite_valid_trace_init_to X is f (pre ++ item :: suf)
Hdest: destination item i = f i
Hl: projT1 (l item) = iinitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
item: composite_transition_item IM
pre, suf: list (composite_transition_item IM)
Htr: finite_valid_trace_from_to X is f (pre ++ item :: suf)
Hinit: initial_state_prop is
Hdest: destination item i = f i
Hl: projT1 (l item) = iinitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
i: index
f: composite_state IM
is: state X
item: composite_transition_item IM
pre, suf: list (composite_transition_item IM)
Htr: finite_valid_trace_from_to X (finite_trace_last is pre) f (item :: suf)
Hinit: initial_state_prop is
Hdest: destination item i = f i
Hl: projT1 (l item) = iinitial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
f, is: composite_state IM
pre, suf: list (composite_transition_item IM)
s: composite_state IM
iom, oom: option message
i: index
li: label (IM i)
Htr: finite_valid_trace_from_to X (finite_trace_last is pre) f ({| l := existT i li; input := iom; destination := s; output := oom |} :: suf)
Hinit: composite_initial_state_prop IM is
Hdest: s i = f i
Htl: finite_valid_trace_from_to X s f suf
Ht: input_valid_transition X (existT i li) (finite_trace_last is pre, iom) (s, oom)initial_state_prop (f i) ∨ (∃ (s1 s2 : composite_state IM) (li : label (IM i)) (om om' : option message), in_futures X s2 f ∧ s2 i = f i ∧ input_valid_transition X (existT i li) (s1, om) (s2, om'))by split; [eexists |]. Qed. End sec_composite_state.index: Type
EqDecision0: EqDecision index
message: Type
IM: index → VLSM message
constraint: composite_label IM → composite_state IM * option message → Prop
X:= composite_vlsm IM constraint: VLSM message
f, is: composite_state IM
pre, suf: list (composite_transition_item IM)
s: composite_state IM
iom, oom: option message
i: index
li: label (IM i)
Htr: finite_valid_trace_from_to X (finite_trace_last is pre) f ({| l := existT i li; input := iom; destination := s; output := oom |} :: suf)
Hinit: composite_initial_state_prop IM is
Hdest: s i = f i
Htl: finite_valid_trace_from_to X s f suf
Ht: input_valid_transition X (existT i li) (finite_trace_last is pre, iom) (s, oom)in_futures X s f ∧ s i = f i ∧ input_valid_transition X (existT i li) (finite_trace_last is pre, iom) (s, oom)