From Coq Require Import FunctionalExtensionality. From stdpp Require Import prelude finite. From VLSM.Lib Require Import Preamble StdppExtras StdppListSet. From VLSM.Core Require Import VLSM VLSMProjections Composition Equivocation ProjectionTraces.
ELMO: Protocol Definitions and Properties for UMO
Section sec_UMO. Context {Address : Type} `{EqDecision Address} (State := @State Address) (Observation := @Observation Address) (Message := @Message Address).
The initial state has no observations and the same address as the component.
Definition UMO_component_initial_state_prop (i : Address) (st : State) : Prop := obs st = [] /\ adr st = i. Definition UMO_component_initial_state_type (i : Address) : Type := {st : State | UMO_component_initial_state_prop i st}. Program Definition UMO_component_initial_state (i : Address) : UMO_component_initial_state_type i := MkState [] i.Address: Type
State:= BaseELMO.State: Type
EqDecision0: EqDecision Address
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressUMO_component_initial_state_prop i (MkState [] i)by compute. Defined. #[export] Instance Inhabited_UMO_component_initial_state_type (i : Address) : Inhabited (UMO_component_initial_state_type i) := populate (UMO_component_initial_state i). Definition UMO_component_transition (l : Label) (s : State) (om : option Message) : State * option Message := match l, om with | Send, Some m => (s, om) | Send, None => let ob := MkObservation Send (MkMessage s) in let st := s <+> ob in let msg := Some (MkMessage s) in (st, msg) | Receive, None => (s, None) | Receive, Some m => let ob := MkObservation Receive m in let st := s <+> ob in let msg := None in (st, msg) end. Inductive UMO_component_valid : Label -> State -> option Message -> Prop := | OCV_Send : forall st : State, UMO_component_valid Send st None | OCV_Receive : forall (st : State) (msg : Message), UMO_component_valid Receive st (Some msg). Ltac invert_UMO_component_valid := repeat match goal with | H : UMO_component_valid Receive _ None |- _ => inversion H; subst; clear H | H : UMO_component_valid Send _ (Some _) |- _ => inversion H; subst; clear H end. Definition UMO_component_machine (i : Address) : VLSMMachine ELMO_component_type := {| initial_state_prop := UMO_component_initial_state_prop i; initial_message_prop := const False; s0 := Inhabited_UMO_component_initial_state_type i; transition := fun l '(st, om) => UMO_component_transition l st om; valid := fun l '(st, om) => UMO_component_valid l st om; |}. Definition UMO_component (i : Address) : VLSM Message := {| vlsm_type := ELMO_component_type; vlsm_machine := UMO_component_machine i; |}.Address: Type
State:= BaseELMO.State: Type
EqDecision0: EqDecision Address
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressUMO_component_initial_state_prop i (MkState [] i)
UMO components have a unique initial state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s1 s2 : State), UMO_component_initial_state_prop i s1 → UMO_component_initial_state_prop i s2 → s1 = s2by do 2 inversion 1; destruct s1, s2; cbn in *; subst. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s1 s2 : State), UMO_component_initial_state_prop i s1 → UMO_component_initial_state_prop i s2 → s1 = s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s : State), UMO_component_initial_state_prop i s → s = MkState [] iby inversion 1; destruct s; cbn in *; subst. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s : State), UMO_component_initial_state_prop i s → s = MkState [] iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressHasBeenSentCapability (UMO_component i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressHasBeenSentCapability (UMO_component i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Addresshas_been_sent_stepwise_prop (λ (s : BaseELMO.State) (m : Message), m ∈ sentMessages s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ s : VLSM.state (UMO_component i), initial_state_prop s → ∀ m : Message, m ∉ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ (l : VLSM.label (preloaded_with_all_messages_vlsm (UMO_component i))) (s : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (im : option Message) (s' : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (om : option Message), input_constrained_transition (UMO_component i) l ( s, im) (s', om) → ∀ msg : Message, msg ∈ sentMessages s' ↔ field_selector output msg {| l := l; input := im; destination := s'; output := om |} ∨ msg ∈ sentMessages sby intros [] []; cbn in *; subst; cbn; apply not_elem_of_nil.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ s : VLSM.state (UMO_component i), initial_state_prop s → ∀ m : Message, m ∉ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ (l : VLSM.label (preloaded_with_all_messages_vlsm (UMO_component i))) (s : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (im : option Message) (s' : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (om : option Message), input_constrained_transition (UMO_component i) l (s, im) (s', om) → ∀ msg : Message, msg ∈ sentMessages s' ↔ field_selector output msg {| l := l; input := im; destination := s'; output := om |} ∨ msg ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
l: Label
s: BaseELMO.State
im: option Message
s': BaseELMO.State
om: option Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) im
Hv: UMO_component_valid l s im
Ht: UMO_component_transition l s im = (s', om)
m: Messagem ∈ sentMessages s' ↔ om = Some m ∨ m ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem ∈ map message (if decide False then MkObservation Receive m0 :: filter isSend (obs s) else filter isSend (obs s)) ↔ None = Some m ∨ m ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem ∈ map message (if decide True then MkObservation Send (MkMessage s) :: filter isSend (obs s) else filter isSend (obs s)) ↔ Some (MkMessage s) = Some m ∨ m ∈ sentMessages sby rewrite decide_False; cbn; firstorder congruence.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem ∈ map message (if decide False then MkObservation Receive m0 :: filter isSend (obs s) else filter isSend (obs s)) ↔ None = Some m ∨ m ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem ∈ map message (if decide True then MkObservation Send (MkMessage s) :: filter isSend (obs s) else filter isSend (obs s)) ↔ Some (MkMessage s) = Some m ∨ m ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem ∈ MkMessage s :: map message (filter isSend (obs s)) ↔ Some (MkMessage s) = Some m ∨ m ∈ sentMessages sby firstorder congruence. Defined.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem = MkMessage s ∨ m ∈ map message (filter isSend (obs s)) ↔ Some (MkMessage s) = Some m ∨ m ∈ sentMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressHasBeenReceivedCapability (UMO_component i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: AddressHasBeenReceivedCapability (UMO_component i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ s : VLSM.state (UMO_component i), initial_state_prop s → ∀ m : Message, m ∉ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ (l : VLSM.label (preloaded_with_all_messages_vlsm (UMO_component i))) (s : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (im : option Message) (s' : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (om : option Message), input_constrained_transition (UMO_component i) l ( s, im) (s', om) → ∀ msg : Message, msg ∈ receivedMessages s' ↔ field_selector input msg {| l := l; input := im; destination := s'; output := om |} ∨ msg ∈ receivedMessages sby intros [] []; cbn in *; subst; cbn; apply not_elem_of_nil.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ s : VLSM.state (UMO_component i), initial_state_prop s → ∀ m : Message, m ∉ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address∀ (l : VLSM.label (preloaded_with_all_messages_vlsm (UMO_component i))) (s : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (im : option Message) (s' : VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))) (om : option Message), input_constrained_transition (UMO_component i) l (s, im) (s', om) → ∀ msg : Message, msg ∈ receivedMessages s' ↔ field_selector input msg {| l := l; input := im; destination := s'; output := om |} ∨ msg ∈ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
l: Label
s: BaseELMO.State
im: option Message
s': BaseELMO.State
om: option Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) im
Hv: UMO_component_valid l s im
Ht: UMO_component_transition l s im = (s', om)
m: Messagem ∈ receivedMessages s' ↔ im = Some m ∨ m ∈ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem ∈ map message (if decide True then MkObservation Receive m0 :: filter isReceive (obs s) else filter isReceive (obs s)) ↔ Some m0 = Some m ∨ m ∈ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem ∈ map message (if decide False then MkObservation Send (MkMessage s) :: filter isReceive (obs s) else filter isReceive (obs s)) ↔ None = Some m ∨ m ∈ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem ∈ map message (if decide True then MkObservation Receive m0 :: filter isReceive (obs s) else filter isReceive (obs s)) ↔ Some m0 = Some m ∨ m ∈ receivedMessages sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem ∈ m0 :: map message (filter isReceive (obs s)) ↔ Some m0 = Some m ∨ m ∈ receivedMessages sby firstorder congruence.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
m0: Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m0)
Hv: UMO_component_valid Receive s (Some m0)
m: Messagem = m0 ∨ m ∈ map message (filter isReceive (obs s)) ↔ Some m0 = Some m ∨ m ∈ receivedMessages sby rewrite decide_False; cbn; firstorder congruence. Defined. #[export] Instance HasBeenDirectlyObservedCapability_UMO_component (i : Address) : HasBeenDirectlyObservedCapability (UMO_component i) := HasBeenDirectlyObservedCapability_from_sent_received (UMO_component i).Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: BaseELMO.State
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) s
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) None
Hv: UMO_component_valid Send s None
m: Messagem ∈ map message (if decide False then MkObservation Send (MkMessage s) :: filter isReceive (obs s) else filter isReceive (obs s)) ↔ None = Some m ∨ m ∈ receivedMessages s
A reachability predicate specialized for VLSMs refining UMO.
UMO_reachable C s is equivalent to constrained_state_prop V s if
the valid transitions of VLSM
V
follow UMO_component_transition
and the validity predicate is a refinement of UMO_component_valid
which does not further restrict the Send case.
Inductive UMO_reachable (C : State -> Message -> Prop) : State -> Prop :=
| reach_init :
forall a, UMO_reachable C (MkState [] a)
| reach_send :
forall s, UMO_reachable C s -> UMO_reachable C (s <+> MkObservation Send (MkMessage s))
| reach_recv :
forall s msg, C s msg -> UMO_reachable C s ->
UMO_reachable C (s <+> MkObservation Receive msg).
An alternative induction principle for UMO_reachable
which has a single case for addObservation that covers
both Send and Receive. The hypotheses available in that
case use a match on the label to cover the differences between
the cases. This is useful for proofs where the Send and Receive
cases share some reasoning.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)∀ s : State, UMO_reachable C s → P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)∀ s : State, UMO_reachable C s → P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
a: AddressP (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
s: State
Hs: UMO_reachable C s
IHHs: P sP (s <+> MkObservation Send (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
s: State
msg: Message
H: C s msg
Hs: UMO_reachable C s
IHHs: P sP (s <+> MkObservation Receive msg)by apply Hinit.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
a: AddressP (MkState [] a)by apply Hextend.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
s: State
Hs: UMO_reachable C s
IHHs: P sP (s <+> MkObservation Send (MkMessage s))by apply Hextend. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C: State → Message → Prop
P: State → Prop
Hinit: ∀ a : Address, P (MkState [] a)
Hextend: ∀ (s : State) (l : Label) (msg : Message), UMO_reachable C s → match l with | Receive => C s msg | Send => msg = MkMessage s end → P s → P (s <+> MkObservation l msg)
s: State
msg: Message
H: C s msg
Hs: UMO_reachable C s
IHHs: P sP (s <+> MkObservation Receive msg)
A specialized induction principle for UMO_reachable
when the conclusion begins with ∀ m, m ∈ messages s → ....
This handles splitting m ∈ messages (s <+> ob) into
cases for m ∈ messages s and for the new observation,
and uses a new case HPrev to handle the m ∈ messages s
parts for both Send and Receive.
Unfortunately the
induction _ using _
variant of the
induction tactic cannot recognize this lemma as an induction
principle, so it must be used with refine or apply.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr∀ s : State, UMO_reachable C s → ∀ m' : Message, m' ∈ messages s → P s m'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr∀ s : State, UMO_reachable C s → ∀ m' : Message, m' ∈ messages s → P s m'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
a: Address∀ m' : Message, m' ∈ messages (MkState [] a) → P (MkState [] a) m'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
s: State
Hs: UMO_reachable C s
IHHs: ∀ m' : Message, m' ∈ messages s → P s m'∀ m' : Message, m' ∈ messages (s <+> MkObservation Send (MkMessage s)) → P (s <+> MkObservation Send (MkMessage s)) m'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
s: State
msg: Message
H: C s msg
Hs: UMO_reachable C s
IHHs: ∀ m' : Message, m' ∈ messages s → P s m'∀ m' : Message, m' ∈ messages (s <+> MkObservation Receive msg) → P (s <+> MkObservation Receive msg) m'by inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
a: Address∀ m' : Message, m' ∈ messages (MkState [] a) → P (MkState [] a) m'by intros m' [-> | Hm']%elem_of_messages_addObservation; eauto.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
s: State
Hs: UMO_reachable C s
IHHs: ∀ m' : Message, m' ∈ messages s → P s m'∀ m' : Message, m' ∈ messages (s <+> MkObservation Send (MkMessage s)) → P (s <+> MkObservation Send (MkMessage s)) m'by intros m' [-> | Hm']%elem_of_messages_addObservation; eauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
C, P: State → Message → Prop
HPrev: ∀ s : State, UMO_reachable C s → ∀ (m : Message) (ob : BaseELMO.Observation), m ∈ messages s → P s m → P (s <+> ob) m
HSend: ∀ s : State, UMO_reachable C s → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Send (MkMessage s)) (MkMessage s)
HRecv: ∀ s : State, UMO_reachable C s → ∀ mr : Message, C s mr → (∀ m' : Message, m' ∈ messages s → P s m') → P (s <+> MkObservation Receive mr) mr
s: State
msg: Message
H: C s msg
Hs: UMO_reachable C s
IHHs: ∀ m' : Message, m' ∈ messages s → P s m'∀ m' : Message, m' ∈ messages (s <+> MkObservation Receive msg) → P (s <+> MkObservation Receive msg) m'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
P, Q: State → Message → Prop
HPQ: ∀ (s : State) (m : Message), P s m → Q s m∀ s : State, UMO_reachable P s → UMO_reachable Q sby induction 1; constructor; auto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
P, Q: State → Message → Prop
HPQ: ∀ (s : State) (m : Message), P s m → Q s m∀ s : State, UMO_reachable P s → UMO_reachable Q s
Send transitions in a constrained state are ok.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (m : Message), constrained_state_prop (UMO_component i) (state m) → input_constrained_transition (UMO_component i) Send (state m, None) (state m <+> MkObservation Send m, Some m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (m : Message), constrained_state_prop (UMO_component i) (state m) → input_constrained_transition (UMO_component i) Send (state m, None) (state m <+> MkObservation Send m, Some m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)UMO_component_valid Send (state m) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)(state m <+> MkObservation Send (MkMessage (state m)), Some (MkMessage (state m))) = (state m <+> MkObservation Send m, Some m)done.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)valid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (state m)by apply option_valid_message_None.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)option_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) Noneby constructor.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)UMO_component_valid Send (state m) Noneby do 3 f_equal; apply eq_Message. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
m: Message
H: constrained_state_prop (UMO_component i) (state m)(state m <+> MkObservation Send (MkMessage (state m)), Some (MkMessage (state m))) = (state m <+> MkObservation Send m, Some m)
Receive transitions in a constrained state are ok.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s : State) (m : Message), constrained_state_prop (UMO_component i) s → input_constrained_transition (UMO_component i) Receive (s, Some m) (s <+> MkObservation Receive m, None)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type∀ (i : Address) (s : State) (m : Message), constrained_state_prop (UMO_component i) s → input_constrained_transition (UMO_component i) Receive (s, Some m) (s <+> MkObservation Receive m, None)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: State
m: Message
H: constrained_state_prop (UMO_component i) soption_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: State
m: Message
H: constrained_state_prop (UMO_component i) sUMO_component_valid Receive s (Some m)by apply any_message_is_valid_in_preloaded.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: State
m: Message
H: constrained_state_prop (UMO_component i) soption_valid_message_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (Some m)by constructor. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
s: State
m: Message
H: constrained_state_prop (UMO_component i) sUMO_component_valid Receive s (Some m)
This lemma shows that for a VLSM based on UMO
reachability in the VLSM according to constrained_state_prop
is equivalent to UMO_reachable with a predicate
based on the VLSM's valid predicate, plus
a condition on the address.
In particular the VLSM must work over the same
VLSMType as UMO, of Message, State, and Label,
the transition function must be UMO_component_transition,
and the valid and initial_state_prop must be
restrictions of UMO's predicates.
This lemma usually should not be used directly, but
instead used to prove a "view" lemma for a
specific VLSM, such as ELMO_reachable_view
in the VLSM.ELMO.ELMO module.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om∀ s : State, constrained_state_prop V s ↔ UMO_reachable (λ (s0 : State) (m : Message), valid Receive (s0, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om∀ s : State, constrained_state_prop V s ↔ UMO_reachable (λ (s0 : State) (m : Message), valid Receive (s0, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: Stateconstrained_state_prop V s → UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: StateUMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: Stateconstrained_state_prop V s → UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Hs: initial_state_prop sUMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s': VLSM.state (preloaded_with_all_messages_vlsm V)
l: VLSM.label (preloaded_with_all_messages_vlsm V)
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm V) l ( s, om) (s', om')
IHHs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s' ∧ initial_state_prop (MkState [] (adr s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Hs: initial_state_prop sUMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
ol: list BaseELMO.Observation
a: Address
Hs: initial_state_prop (MkState ol a)UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) (MkState ol a) ∧ initial_state_prop (MkState [] (adr (MkState ol a)))by split; [apply reach_init |].Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : State, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : State) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : Label) (s : State) (om : option Message), transition l (s, om) = UMO_component_transition l s om
ol: list BaseELMO.Observation
a: Address
Hs: initial_state_prop (MkState [] a)UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) (MkState [] a) ∧ initial_state_prop (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s': VLSM.state (preloaded_with_all_messages_vlsm V)
l: VLSM.label (preloaded_with_all_messages_vlsm V)
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm V) l ( s, om) (s', om')
IHHs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s' ∧ initial_state_prop (MkState [] (adr s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s': VLSM.state (preloaded_with_all_messages_vlsm V)
l: VLSM.label (preloaded_with_all_messages_vlsm V)
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Hvalid: valid l (s, om)
Ht: transition l (s, om) = (s', om')
IHHs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s' ∧ initial_state_prop (MkState [] (adr s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s': VLSM.state (preloaded_with_all_messages_vlsm V)
l: VLSM.label (preloaded_with_all_messages_vlsm V)
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Hvalid: valid l (s, om)
Ht: UMO_component_transition l s om = (s', om')
IHHs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s))UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s' ∧ initial_state_prop (MkState [] (adr s'))by destruct l, om; inversion Ht; subst; auto using @UMO_reachable.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s': VLSM.state (preloaded_with_all_messages_vlsm V)
l: VLSM.label (preloaded_with_all_messages_vlsm V)
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm V)
Hvalid: valid l (s, om)
Ht: UMO_component_transition l s om = (s', om')
IH: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr s))UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s' ∧ initial_state_prop (MkState [] (adr s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: StateUMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s ∧ initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr s))constrained_state_prop V sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
a: Address
Hadr: initial_state_prop (MkState [] (adr (MkState [] a)))constrained_state_prop V (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sconstrained_state_prop V (s <+> MkObservation Send (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sconstrained_state_prop V (s <+> MkObservation Receive msg)by apply initial_state_is_valid.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
a: Address
Hadr: initial_state_prop (MkState [] (adr (MkState [] a)))constrained_state_prop V (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sconstrained_state_prop V (s <+> MkObservation Send (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sinput_valid_transition (preloaded_with_all_messages_vlsm V) Send (s, None) (s <+> MkObservation Send (MkMessage s), Some (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid_state_prop (preloaded_with_all_messages_vlsm V) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V soption_valid_message_prop (preloaded_with_all_messages_vlsm V) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid Send (s, None)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V stransition Send (s, None) = (s <+> MkObservation Send (MkMessage s), Some (MkMessage s))by apply IHHs.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid_state_prop (preloaded_with_all_messages_vlsm V) sby apply option_valid_message_None.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V soption_valid_message_prop (preloaded_with_all_messages_vlsm V) Noneby apply Hsend_spec; [apply IHHs |].Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid Send (s, None)by cbn; rewrite Htransition.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Send (MkMessage s))))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V stransition Send (s, None) = (s <+> MkObservation Send (MkMessage s), Some (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sconstrained_state_prop V (s <+> MkObservation Receive msg)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V sinput_valid_transition (preloaded_with_all_messages_vlsm V) Receive (s, Some msg) (s <+> MkObservation Receive msg, None)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid_state_prop (preloaded_with_all_messages_vlsm V) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V soption_valid_message_prop (preloaded_with_all_messages_vlsm V) (Some msg)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V stransition Receive (s, Some msg) = (s <+> MkObservation Receive msg, None)by apply IHHs.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V svalid_state_prop (preloaded_with_all_messages_vlsm V) sby apply any_message_is_valid_in_preloaded.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V soption_valid_message_prop (preloaded_with_all_messages_vlsm V) (Some msg)by cbn; rewrite Htransition. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
VM: VLSMMachine {| VLSM.state := State; VLSM.label := Label |}
V:= {| vlsm_type := {| VLSM.state := State; VLSM.label := Label |}; vlsm_machine := VM |}: VLSM Message
Hinit_empty: ∀ si : VLSM.state V, initial_state_prop si → obs si = []
Hsend_spec: ∀ (s : VLSM.state (preloaded_with_all_messages_vlsm V)) (om : option Message), constrained_state_prop V s → valid Send (s, om) ↔ om = None
Htransition: ∀ (l : VLSM.label V) (s : VLSM.state V) (om : option Message), transition l (s, om) = UMO_component_transition l s om
s: State
msg: Message
H: valid Receive (s, Some msg)
Hs: UMO_reachable (λ (s : State) (m : Message), valid Receive (s, Some m)) s
Hadr: initial_state_prop (MkState [] (adr (s <+> MkObservation Receive msg)))
IHHs: initial_state_prop (MkState [] (adr s)) → constrained_state_prop V stransition Receive (s, Some msg) = (s <+> MkObservation Receive msg, None)
Every valid state contains a unique valid trace leading to it
Section sec_UMO_component_lemmas.
Ui is a notation for an UMO_component of address i.
Context {i : Address} (Ui : VLSM Message := UMO_component i) .Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : VLSM.state Ui, valid_state_prop Ui s → UMO_reachable (const (const True)) s ∧ adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : VLSM.state Ui, valid_state_prop Ui s → UMO_reachable (const (const True)) s ∧ adr s = iby destruct Ht as [(_ & _ & Hv) Ht]; inversion Hv; subst; inversion Ht; subst; destruct_and!; (split; [constructor |]). Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s': VLSM.state Ui
l: VLSM.label Ui
om, om': option Message
s: VLSM.state Ui
Ht: input_valid_transition Ui l (s, om) (s', om')
IHvalid_state_prop: UMO_reachable (const (const True)) s ∧ adr s = iUMO_reachable (const (const True)) s' ∧ adr s' = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop (UMO_component i) s ↔ UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop (UMO_component i) s ↔ UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: Stateconstrained_state_prop (UMO_component i) s → UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: StateUMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = i → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: Stateconstrained_state_prop (UMO_component i) s → UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iby destruct Ht as [(_ & _ & Hv) Ht]; inversion Hv; subst; inversion Ht; subst; destruct_and!; (split; [constructor |]).Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s': VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))
l: VLSM.label (preloaded_with_all_messages_vlsm (UMO_component i))
om, om': option Message
s: VLSM.state (preloaded_with_all_messages_vlsm (UMO_component i))
Ht: input_valid_transition (preloaded_with_all_messages_vlsm (UMO_component i)) l ( s, om) (s', om')
IHvalid_state_prop: UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iUMO_reachable (λ (_ : State) (_ : Message), True) s' ∧ adr s' = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: StateUMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = i → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = iconstrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
a: Address
Hadr: a = ivalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = i
IHHur: adr s = i → constrained_state_prop (UMO_component i) svalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (s <+> MkObservation Send (MkMessage s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
msg: Message
H: True
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = i
IHHur: adr s = i → constrained_state_prop (UMO_component i) svalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (s <+> MkObservation Receive msg)by apply initial_state_is_valid; cbv.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
a: Address
Hadr: a = ivalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (MkState [] a)by eapply input_valid_transition_destination, input_constrained_transition_Send, IHHur.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = i
IHHur: adr s = i → constrained_state_prop (UMO_component i) svalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (s <+> MkObservation Send (MkMessage s))by eapply input_valid_transition_destination, input_constrained_transition_Receive, IHHur. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
msg: Message
H: True
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = i
IHHur: adr s = i → constrained_state_prop (UMO_component i) svalid_state_prop (preloaded_with_all_messages_vlsm (UMO_component i)) (s <+> MkObservation Receive msg)
The initial state of Ui is unique.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ is : State, UMO_component_initial_state_prop i is → is = `(vs0 Ui)by intros []; inversion 1; cbv in *; by subst. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ is : State, UMO_component_initial_state_prop i is → is = `(vs0 Ui)
Transitions of an UMO component preserve the address of the component.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), UMO_component_transition lbl s1 iom = (s2, oom) → adr s2 = adr s1by intros s1 s2 [im |] oom []; inversion_clear 1. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), UMO_component_transition lbl s1 iom = (s2, oom) → adr s2 = adr s1
For every trace segment, the initial and final state have the same address.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_from_to Ui is s tr → adr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_from_to Ui is s tr → adr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sadr f = adr s'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sadr s = adr s'by destruct Ht as [_ Ht]; cbn in Ht. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sUMO_component_transition ?lbl s' ?iom = (s, ?oom)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_from_to Ui is s tr → adr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_from_to Ui is s tr → adr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state Ui
tl: list transition_item
H: finite_valid_trace_from_to Ui s f tl
s': VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sadr f = adr s'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state Ui
tl: list transition_item
H: finite_valid_trace_from_to Ui s f tl
s': VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sadr s = adr s'by destruct Ht as [_ Ht]; cbn in Ht. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state Ui
tl: list transition_item
H: finite_valid_trace_from_to Ui s f tl
s': VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: adr f = adr sUMO_component_transition ?lbl s' ?iom = (s, ?oom)
If a state is reachable, its address is the same as the address of the component.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s tr
Hinit: initial_state_prop isadr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s tr
Hinit: initial_state_prop isadr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s tr
Hinit: initial_state_prop isadr is = iby eapply adr_of_states_within_constrained_trace.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s tr
Hinit: initial_state_prop isadr s = adr isby destruct Hinit, is; cbn in *. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s tr
Hinit: initial_state_prop isadr is = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui is s tr
Hinit: initial_state_prop isadr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui is s tr
Hinit: initial_state_prop isadr s = adr isAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui is s tr
Hinit: initial_state_prop isadr is = iby eapply adr_of_states_within_valid_trace.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui is s tr
Hinit: initial_state_prop isadr s = adr isby destruct Hinit, is; cbn in *. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui is s tr
Hinit: initial_state_prop isadr is = i
The address of a valid state is the same as the address of the component.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui sadr s = iby eapply adr_of_constrained_trace. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfvti: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Ui) is s tradr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → adr s = iAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui sadr s = iby eapply adr_of_valid_trace. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state Ui
tr: list transition_item
Hfvti: finite_valid_trace_init_to Ui is s tradr s = i
Valid transitions lead to bigger states.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), UMO_component_valid lbl s1 iom → UMO_component_transition lbl s1 iom = (s2, oom) → sizeState s1 < sizeState s2by intros [] s2 [im |] oom []; do 2 inversion_clear 1; cbn; lia. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), UMO_component_valid lbl s1 iom → UMO_component_transition lbl s1 iom = (s2, oom) → sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), input_constrained_transition Ui lbl (s1, iom) (s2, oom) → sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), input_constrained_transition Ui lbl (s1, iom) (s2, oom) → sizeState s1 < sizeState s2by eapply UMO_component_valid_transition_size. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
iom, oom: option Message
lbl: Label
Hvalid: UMO_component_valid lbl s1 iom
Ht: UMO_component_transition lbl s1 iom = (s2, oom)sizeState s1 < sizeState s2
A finite_valid_trace is either empty or its final state is bigger than
its initial state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s1 s2 tr → s1 = s2 ∧ tr = [] ∨ sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s1 s2 tr → s1 = s2 ∧ tr = [] ∨ sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: s = f ∧ tl = [] ∨ sizeState s < sizeState fs' = f ∧ {| l := l; input := iom; destination := s; output := oom |} :: tl = [] ∨ sizeState s' < sizeState fby destruct IHfinite_valid_trace_from_to; [itauto congruence | itauto lia]. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: s = f ∧ tl = [] ∨ sizeState s < sizeState f
H0: sizeState s' < sizeState ss' = f ∧ {| l := l; input := iom; destination := s; output := oom |} :: tl = [] ∨ sizeState s' < sizeState f
If a trace leads from a state to itself, then it is empty.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s s tr → tr = []by intros s tr Hfvt; apply finite_constrained_trace_from_to_size in Hfvt; itauto lia. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s s tr → tr = []
The same lemmas as above, but for the component Ui. They follow from the
above lemmas because there is a VLSM inclusion from Ui to Ui preloaded
with all messages.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), input_valid_transition Ui lbl (s1, iom) (s2, oom) → sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (iom oom : option Message) (lbl : Label), input_valid_transition Ui lbl (s1, iom) (s2, oom) → sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
iom, oom: option Message
lbl: Label
Hivt: input_valid_transition Ui lbl ( s1, iom) (s2, oom)sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
iom, oom: option Message
lbl: Label
Hivt: input_valid_transition Ui lbl ( s1, iom) (s2, oom)input_constrained_transition Ui ?lbl (s1, ?iom) (s2, ?oom)by apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
iom, oom: option Message
lbl: Label
Hivt: input_valid_transition Ui lbl ( s1, iom) (s2, oom)VLSM_incl_part Ui (preloaded_vlsm_machine Ui (λ _ : Message, True))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_valid_trace_from_to Ui s1 s2 tr → s1 = s2 ∧ tr = [] ∨ sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_valid_trace_from_to Ui s1 s2 tr → s1 = s2 ∧ tr = [] ∨ sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s1 s2 trs1 = s2 ∧ tr = [] ∨ sizeState s1 < sizeState s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s1 s2 trfinite_constrained_trace_from_to Ui s1 s2 trby apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s1 s2 trVLSM_incl_part Ui (preloaded_vlsm_machine Ui (λ _ : Message, True))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (tr : list transition_item), finite_valid_trace_from_to Ui s s tr → tr = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (tr : list transition_item), finite_valid_trace_from_to Ui s s tr → tr = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s s trtr = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s s trfinite_constrained_trace_from_to Ui ?s ?s trby apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to Ui s s trVLSM_incl_part Ui (preloaded_vlsm_machine Ui (λ _ : Message, True))
transitions in any VLSM are deterministic, i.e., the final state and output
message are determined by the label, initial state and input message.
For UMO components, an extremely strong converse property also holds: the
label, initial state, input message and output message are all determined
by the final state of a valid transition. Basically, this is true because
every state contains the whole trace/history.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 f : State) (iom1 iom2 oom1 oom2 : option Message) (lbl1 lbl2 : Label), input_constrained_transition Ui lbl1 (s1, iom1) (f, oom1) → input_constrained_transition Ui lbl2 (s2, iom2) (f, oom2) → lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 f : State) (iom1 iom2 oom1 oom2 : option Message) (lbl1 lbl2 : Label), input_constrained_transition Ui lbl1 (s1, iom1) (f, oom1) → input_constrained_transition Ui lbl2 (s2, iom2) (f, oom2) → lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2, f: State
iom1, iom2, oom1, oom2: option Message
lbl1, lbl2: Label
Hivt1: input_constrained_transition Ui lbl1 (s1, iom1) (f, oom1)
Hivt2: input_constrained_transition Ui lbl2 (s2, iom2) (f, oom2)
Hvalid1: valid lbl1 (s1, iom1)
Ht1: transition lbl1 (s1, iom1) = (f, oom1)
Hvalid2: valid lbl2 (s2, iom2)
Ht2: transition lbl2 (s2, iom2) = (f, oom2)lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2by destruct s1, s2; cbn in *; subst; itauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
m: Message
Hivt2: input_constrained_transition Ui Receive (s2, Some m) (s1 <+> MkObservation Receive m, None)
Hivt1: input_constrained_transition Ui Receive (s1, Some m) (s1 <+> MkObservation Receive m, None)
Hvalid1: UMO_component_valid Receive s1 (Some m)
Hvalid2: UMO_component_valid Receive s2 (Some m)
H1: obs s2 = obs s1
H2: adr s2 = adr s1Receive = Receive ∧ s1 = s2 ∧ Some m = Some m ∧ None = NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 f : State) (iom1 iom2 oom1 oom2 : option Message) (lbl1 lbl2 : Label), input_valid_transition Ui lbl1 (s1, iom1) (f, oom1) → input_valid_transition Ui lbl2 (s2, iom2) (f, oom2) → lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 f : State) (iom1 iom2 oom1 oom2 : option Message) (lbl1 lbl2 : Label), input_valid_transition Ui lbl1 (s1, iom1) (f, oom1) → input_valid_transition Ui lbl2 (s2, iom2) (f, oom2) → lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2by eapply input_constrained_transition_deterministic_conv; apply (@VLSM_incl_input_valid_transition _ Ui Ui); [| done | | done]; apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2, f: State
iom1, iom2, oom1, oom2: option Message
lbl1, lbl2: Label
Hivt1: input_valid_transition Ui lbl1 ( s1, iom1) (f, oom1)
Hivt2: input_valid_transition Ui lbl2 ( s2, iom2) (f, oom2)lbl1 = lbl2 ∧ s1 = s2 ∧ iom1 = iom2 ∧ oom1 = oom2
Every trace segment is fully determined by its initial and final state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (l1 l2 : list transition_item), finite_constrained_trace_from_to Ui s1 s2 l1 → finite_constrained_trace_from_to Ui s1 s2 l2 → l1 = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (l1 l2 : list transition_item), finite_constrained_trace_from_to Ui s1 s2 l1 → finite_constrained_trace_from_to Ui s1 s2 l2 → l1 = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
l1: list transition_item
Hfvt1: finite_constrained_trace_from_to Ui s1 s2 l1∀ l2 : list transition_item, finite_constrained_trace_from_to Ui s1 s2 l2 → l1 = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) si
l2: list transition_item
Hfvt2: finite_constrained_trace_from_to Ui si si l2[] = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
l2: list transition_item
Hfvt2: finite_constrained_trace_from_to Ui si sf l2tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = l2by apply finite_constrained_trace_from_to_size in Hfvt2; itauto (congruence + lia).Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) si
l2: list transition_item
Hfvt2: finite_constrained_trace_from_to Ui si si l2[] = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
l2: list transition_item
Hfvt2: finite_constrained_trace_from_to Ui si sf l2tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (si, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) sitr ++ [{| l := l; input := iom; destination := si; output := oom |}] = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
s0: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr0: list transition_item
Hfvt2: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s0 tr0
iom0, oom0: option Message
l0: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht0: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l0 (s0, iom0) (sf, oom0)tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = tr0 ++ [{| l := l0; input := iom0; destination := sf; output := oom0 |}]Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (si, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) sitr ++ [{| l := l; input := iom; destination := si; output := oom |}] = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: si = s ∧ tr = [] ∨ sizeState si < sizeState s
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (si, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) sitr ++ [{| l := l; input := iom; destination := si; output := oom |}] = []by decompose [and or] Hfvt1; subst; clear Hfvt1; lia.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: si = s ∧ tr = [] ∨ sizeState si < sizeState s
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: sizeState s < sizeState si
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) sitr ++ [{| l := l; input := iom; destination := si; output := oom |}] = []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
s0: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr0: list transition_item
Hfvt2: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s0 tr0
iom0, oom0: option Message
l0: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht0: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l0 (s0, iom0) (sf, oom0)tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = tr0 ++ [{| l := l0; input := iom0; destination := sf; output := oom0 |}]Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s l2 → tr = l2
s0: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr0: list transition_item
Hfvt2: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s0 tr0
iom0, oom0: option Message
l0: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht0: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l0 (s0, iom0) (sf, oom0)
H: l = l0 ∧ s = s0 ∧ iom = iom0 ∧ oom = oom0tr ++ [{| l := l; input := iom; destination := sf; output := oom |}] = tr0 ++ [{| l := l0; input := iom0; destination := sf; output := oom0 |}]by f_equal; apply IHHfvt1. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
tr: list transition_item
si, s0: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hfvt1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s0 tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
l0: VLSM.label (preloaded_with_all_messages_vlsm Ui)
IHHfvt1: ∀ l2 : list transition_item, finite_constrained_trace_from_to Ui si s0 l2 → tr = l2
iom0, oom0: option Message
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l0 (s0, iom0) (sf, oom0)
tr0: list transition_item
Hfvt2: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s0 tr0
Ht0: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l0 (s0, iom0) (sf, oom0)tr ++ [{| l := l0; input := iom0; destination := sf; output := oom0 |}] = tr0 ++ [{| l := l0; input := iom0; destination := sf; output := oom0 |}]Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (l1 l2 : list transition_item), finite_valid_trace_from_to Ui s1 s2 l1 → finite_valid_trace_from_to Ui s1 s2 l2 → l1 = l2by intros s1 s2 l1 l2 Hfvt1 Hfvt2; eapply finite_constrained_trace_from_to_unique; apply VLSM_incl_finite_valid_trace_from_to; [| done | | done]; apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (l1 l2 : list transition_item), finite_valid_trace_from_to Ui s1 s2 l1 → finite_valid_trace_from_to Ui s1 s2 l2 → l1 = l2
Every trace is determined by its final state.
Uniqueness
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s f : State) (l1 l2 : list transition_item), finite_constrained_trace_init_to Ui s f l1 → finite_constrained_trace_init_to Ui s f l2 → l1 = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s f : State) (l1 l2 : list transition_item), finite_constrained_trace_init_to Ui s f l1 → finite_constrained_trace_init_to Ui s f l2 → l1 = l2by eapply finite_constrained_trace_from_to_unique. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: State
l1, l2: list transition_item
Ht1: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f l1
Ht2: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f l2l1 = l2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s f : State) (l1 l2 : list transition_item), finite_valid_trace_init_to Ui s f l1 → finite_valid_trace_init_to Ui s f l2 → l1 = l2by intros s f l1 l2 Hfvit1 Hfvit2; eapply finite_constrained_trace_init_to_unique; apply VLSM_incl_finite_valid_trace_init_to; [| done | | done]; apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s f : State) (l1 l2 : list transition_item), finite_valid_trace_init_to Ui s f l1 → finite_valid_trace_init_to Ui s f l2 → l1 = l2
If a valid trace leads to state s, the trace extracted from s also leads to s.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → finite_constrained_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → finite_constrained_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) is s trUMO_component_initial_state_prop i is → finite_constrained_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) si
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfv: UMO_component_initial_state_prop i si → finite_constrained_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) si
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) si
H: obs si = []
H0: adr si = ifinite_constrained_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState [] i)finite_constrained_trace_init_to Ui (MkState [] i) (MkState [] i) []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState [] i)valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState [] i)by repeat constructor.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState [] i)valid_state_message_prop (preloaded_with_all_messages_vlsm Ui) (MkState [] i) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfv: UMO_component_initial_state_prop i si → finite_constrained_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s, iom) (sf, oom)
IHHfv: finite_constrained_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si s tr
sf: VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Hvalid: input_valid (preloaded_with_all_messages_vlsm Ui) l (s, iom)
Ht: UMO_component_transition l s iom = (sf, oom)
IHHfv: finite_constrained_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])by eapply extend_right_finite_trace_from_to; [apply IHHfv |]; auto.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_constrained_trace_init_to Ui si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])by eapply extend_right_finite_trace_from_to; [apply IHHfv |]; auto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop (preloaded_with_all_messages_vlsm Ui) (MkState obs adr) ∧ option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_constrained_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → finite_valid_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → finite_valid_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui is s trUMO_component_initial_state_prop i is → finite_valid_trace_init_to Ui is s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state Ui
Hsi: valid_state_prop Ui si
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state Ui
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si s tr
sf: VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s, iom) (sf, oom)
IHHfv: UMO_component_initial_state_prop i si → finite_valid_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state Ui
Hsi: valid_state_prop Ui si
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: VLSM.state Ui
Hsi: valid_state_prop Ui si
H: obs si = []
H0: adr si = ifinite_valid_trace_init_to Ui si si (state2trace si)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop Ui (MkState [] i)finite_valid_trace_init_to Ui (MkState [] i) (MkState [] i) []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop Ui (MkState [] i)valid_state_prop Ui (MkState [] i)by repeat constructor.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
Hsi: valid_state_prop Ui (MkState [] i)valid_state_message_prop Ui (MkState [] i) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state Ui
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si s tr
sf: VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s, iom) (sf, oom)
IHHfv: UMO_component_initial_state_prop i si → finite_valid_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state Ui
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si s tr
sf: VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Ht: input_valid_transition Ui l (s, iom) (sf, oom)
IHHfv: finite_valid_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si, s: VLSM.state Ui
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si s tr
sf: VLSM.state Ui
iom, oom: option Message
l: VLSM.label Ui
Hvalid: input_valid Ui l (s, iom)
Ht: UMO_component_transition l s iom = (sf, oom)
IHHfv: finite_valid_trace_init_to Ui si s (state2trace s)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si sf (state2trace sf)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])by eapply extend_right_finite_trace_from_to; [apply IHHfv |]; auto.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui None ∧ UMO_component_valid Send (MkState obs adr) None
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_from_to Ui si (MkState obs adr <+> MkObservation Send (MkMessage (MkState obs adr))) (observations2trace obs adr ++ [{| l := Send; input := None; destination := MkState (addObservation' (MkObservation Send (MkMessage (MkState obs adr))) obs) adr; output := Some (MkMessage (MkState obs adr)) |}])Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_init_to Ui si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])by eapply extend_right_finite_trace_from_to; [apply IHHfv |]; auto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
si: BaseELMO.State
obs: list BaseELMO.Observation
adr: Address
tr: list transition_item
Hfv: finite_valid_trace_from_to Ui si (MkState obs adr) tr
im: Message
Hvalid: valid_state_prop Ui (MkState obs adr) ∧ option_valid_message_prop Ui (Some im) ∧ UMO_component_valid Receive (MkState obs adr) (Some im)
IHHfv: finite_valid_trace_init_to Ui si (MkState obs adr) (observations2trace obs adr)
Hinit: UMO_component_initial_state_prop i sifinite_valid_trace_from_to Ui si (MkState obs adr <+> MkObservation Receive im) (observations2trace obs adr ++ [{| l := Receive; input := Some im; destination := MkState (MkObservation Receive im :: obs) adr; output := None |}])
The trace extracted from the final state of another trace is equal to that trace.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → state2trace s = trAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_constrained_trace_init_to Ui is s tr → state2trace s = trAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvti: finite_constrained_trace_init_to Ui is s trstate2trace s = trby eapply finite_constrained_trace_init_to_unique. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
is, s: State
tr: list transition_item
Hfvti: finite_constrained_trace_init_to Ui is s tr
Hfvti': finite_constrained_trace_init_to Ui is s (state2trace s)state2trace s = trAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → state2trace s = trby intros is s tr Hfvti; eapply finite_constrained_trace_init_to_state2trace_inv; apply VLSM_incl_finite_valid_trace_init_to; [| done]; apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (is s : State) (tr : list transition_item), finite_valid_trace_init_to Ui is s tr → state2trace s = tr
The trace extracted from a reachable state s leads to s.
Existence
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → finite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → finite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hs: constrained_state_prop Ui sfinite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tr: list transition_item
Htr: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Ui) is s trfinite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Htr: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Ui) is s (state2trace s)finite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)by apply vs0_uniqueness, Htr. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state (preloaded_with_all_messages_vlsm Ui)
Htr: finite_valid_trace_init_to (preloaded_with_all_messages_vlsm Ui) is s (state2trace s)is = `(vs0 Ui)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → ∃ tr : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, constrained_state_prop Ui s → ∃ tr : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui s∃ tr : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui sfinite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui s∀ tr' : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = state2trace sby eapply finite_constrained_trace_init_to_state2trace'.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui sfinite_constrained_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui s∀ tr' : list transition_item, finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = state2trace sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui s
tr': list transition_item
Hfvt: finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr'tr' = state2trace sby eapply finite_constrained_trace_init_to_state2trace_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: constrained_state_prop Ui s
tr': list transition_item
Hfvt: finite_constrained_trace_init_to Ui (`(vs0 Ui)) s tr'state2trace s = tr'
Existence
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → finite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → finite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hs: valid_state_prop Ui sfinite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state Ui
tr: list transition_item
Htr: finite_valid_trace_init_to Ui is s trfinite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state Ui
Htr: finite_valid_trace_init_to Ui is s (state2trace s)finite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)by apply vs0_uniqueness, Htr. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
is: VLSM.state Ui
Htr: finite_valid_trace_init_to Ui is s (state2trace s)is = `(vs0 Ui)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → ∃ tr : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, valid_state_prop Ui s → ∃ tr : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui s∃ tr : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr ∧ (∀ tr' : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui sfinite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui s∀ tr' : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = state2trace sby eapply finite_valid_trace_init_to_state2trace'.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui sfinite_valid_trace_init_to Ui (`(vs0 Ui)) s (state2trace s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui s∀ tr' : list transition_item, finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr' → tr' = state2trace sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui s
tr': list transition_item
Hfvt: finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr'tr' = state2trace sby eapply finite_valid_trace_init_to_state2trace_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
Hvsp: valid_state_prop Ui s
tr': list transition_item
Hfvt: finite_valid_trace_init_to Ui (`(vs0 Ui)) s tr'state2trace s = tr'
The suffix ordering on states is a strict total order
s1
is a state-suffix of s2
if they have the same address and
s1
's observations are a strict suffix of s2
's observations.
Record state_suffix (s1 s2 : State) : Prop := { adrs_eq : adr s1 = adr s2; obs_prefix : strict suffix (obs s1) (obs s2); }. #[export] Instance state_suffix_dec : RelDecision state_suffix := fun s1 s2 => match decide (adr s1 = adr s2) with | left addr_eq => match decide (strict suffix (obs s1) (obs s2)) with | left is_suffix => left (Build_state_suffix _ _ addr_eq is_suffix) | right Hnot_suffix => right (fun H => Hnot_suffix (obs_prefix _ _ H)) end | right Hnot_addr => right (fun H => Hnot_addr (adrs_eq _ _ H)) end.
We also define a variant of the suffix relation for messages.
Definition message_suffix (m1 m2 : Message) : Prop :=
state_suffix (state m1) (state m2).
The state-prefix relation is a strict partial order.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageIrreflexive state_suffixby intros s (Hadr & Hobs1 & Hobs2). Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageIrreflexive state_suffixAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageTransitive state_suffixAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageTransitive state_suffixAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2, s3: State
Hadr12: adr s1 = adr s2
Hobs12: obs s1 `suffix_of` obs s2
Hobs12': ¬ obs s2 `suffix_of` obs s1
Hadr23: adr s2 = adr s3
Hobs23: obs s2 `suffix_of` obs s3
Hobs23': ¬ obs s3 `suffix_of` obs s2state_suffix s1 s3by transitivity (obs s2). Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2, s3: State
Hadr12: adr s1 = adr s2
Hobs12: obs s1 `suffix_of` obs s2
Hobs12': ¬ obs s2 `suffix_of` obs s1
Hadr23: adr s2 = adr s3
Hobs23: obs s2 `suffix_of` obs s3
Hobs23': ¬ obs s3 `suffix_of` obs s2strict suffix (obs s1) (obs s3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageStrictOrder state_suffixby split; typeclasses eauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM MessageStrictOrder state_suffixAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (a : Address), ¬ state_suffix s (MkState [] a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (a : Address), ¬ state_suffix s (MkState [] a)by symmetry in Hsuf; apply app_nil in Hsuf as [-> ->]; exists []. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
a: Address
os: list BaseELMO.Observation
Hsuf: obs (MkState [] a) = os ++ obs sobs (MkState [] a) `suffix_of` obs sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, s = MkState [] (adr s) ∨ state_suffix (MkState [] (adr s)) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ s : State, s = MkState [] (adr s) ∨ state_suffix (MkState [] (adr s)) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
ob: BaseELMO.Observation
obs: list BaseELMO.Observation
a: Addressstate_suffix (MkState [] a) (MkState (ob :: obs) a)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
ob: BaseELMO.Observation
obs: list BaseELMO.Observation
a: Addressstrict suffix [] (ob :: obs)by intros H; apply suffix_nil_inv in H; subst. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
ob: BaseELMO.Observation
obs: list BaseELMO.Observation
a: Address¬ ob :: obs `suffix_of` []
If we add an observation to a state
s
, s
is a suffix
of the resulting state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), state_suffix s (s <+> ob)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), state_suffix s (s <+> ob)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observationstate_suffix s (s <+> ob)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observationstrict suffix (obs s) (addObservation' ob (obs s))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observationobs s `suffix_of` addObservation' ob (obs s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observation¬ addObservation' ob (obs s) `suffix_of` obs sby apply suffix_cons_r.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observationobs s `suffix_of` addObservation' ob (obs s)by apply suffix_cons_not. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observation¬ addObservation' ob (obs s) `suffix_of` obs sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (obs' : list Observation), obs' ≠ [] → state_suffix s (s <++> obs')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (obs' : list Observation), obs' ≠ [] → state_suffix s (s <++> obs')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observationobs' ≠ [] → state_suffix s (s <++> obs')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observation
H: obs' ≠ []strict suffix (obs s) (obs' ++ obs s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observation
H: obs' ≠ []obs s `suffix_of` obs' ++ obs sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observation
H: obs' ≠ []¬ obs' ++ obs s `suffix_of` obs sby apply suffix_app_r.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observation
H: obs' ≠ []obs s `suffix_of` obs' ++ obs sby intros Hsuf; apply (suffix_app_inv obs' []), suffix_nil_inv in Hsuf. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
obs': list Observation
H: obs' ≠ []¬ obs' ++ obs s `suffix_of` obs s
The initial state of a valid transition is a state_suffix of the final state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (lbl : Label) (s1 s2 : State) (iom oom : option Message), UMO_component_valid lbl s1 iom → UMO_component_transition lbl s1 iom = (s2, oom) → state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (lbl : Label) (s1 s2 : State) (iom oom : option Message), UMO_component_valid lbl s1 iom → UMO_component_transition lbl s1 iom = (s2, oom) → state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1: State
im: Message
HValid: UMO_component_valid Receive s1 (Some im)state_suffix s1 (s1 <+> MkObservation Receive im)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s2: State
HValid: UMO_component_valid Receive s2 Nonestate_suffix s2 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s2: State
im: Message
HValid: UMO_component_valid Send s2 (Some im)state_suffix s2 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1: State
HValid: UMO_component_valid Send s1 Nonestate_suffix s1 (s1 <+> MkObservation Send (MkMessage s1))by apply state_suffix_addObservation.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1: State
im: Message
HValid: UMO_component_valid Receive s1 (Some im)state_suffix s1 (s1 <+> MkObservation Receive im)by invert_UMO_component_valid.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s2: State
HValid: UMO_component_valid Receive s2 Nonestate_suffix s2 s2by invert_UMO_component_valid.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s2: State
im: Message
HValid: UMO_component_valid Send s2 (Some im)state_suffix s2 s2by apply state_suffix_addObservation. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1: State
HValid: UMO_component_valid Send s1 Nonestate_suffix s1 (s1 <+> MkObservation Send (MkMessage s1))
The previous property carries over from transitions to valid transitions.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (lbl : Label) (s1 s2 : State) (iom oom : option Message), input_constrained_transition Ui lbl (s1, iom) (s2, oom) → state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (lbl : Label) (s1 s2 : State) (iom oom : option Message), input_constrained_transition Ui lbl (s1, iom) (s2, oom) → state_suffix s1 s2by eapply state_suffix_of_UMO_component_valid_transition; cycle 1. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
lbl: Label
s1, s2: State
iom, oom: option Message
Hvsp: valid_state_prop (preloaded_with_all_messages_vlsm Ui) s1
Hovmp: option_valid_message_prop (preloaded_with_all_messages_vlsm Ui) iom
Hvalid: valid lbl (s1, iom)
Ht: UMO_component_transition lbl s1 iom = (s2, oom)state_suffix s1 s2
If there is a trace segment from
s1
to s2
, then either the states are
equal (because the trace is empty), or s1
is a state-suffix of s2
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s1 s2 tr → s1 = s2 ∨ state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_from_to Ui s1 s2 tr → s1 = s2 ∨ state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IHfinite_valid_trace_from_to: s = f ∨ state_suffix s fs' = f ∨ state_suffix s' fAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) f f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (f, oom)state_suffix s' fAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IH: state_suffix s fstate_suffix s' fby eapply state_suffix_of_input_constrained_transition; eauto.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) f f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (f, oom)state_suffix s' fAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IH: state_suffix s fstate_suffix s' fby eapply state_suffix_of_input_constrained_transition; eauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s, f: VLSM.state (preloaded_with_all_messages_vlsm Ui)
tl: list transition_item
H: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s f tl
s': VLSM.state (preloaded_with_all_messages_vlsm Ui)
iom, oom: option Message
l: VLSM.label (preloaded_with_all_messages_vlsm Ui)
Ht: input_valid_transition (preloaded_with_all_messages_vlsm Ui) l (s', iom) (s, oom)
IH: state_suffix s fstate_suffix s' s
state_suffix_of_finite_constrained_trace_from_to carries over from
trace segments to traces.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_init_to Ui s1 s2 tr → s1 = s2 ∨ state_suffix s1 s2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s1 s2 : State) (tr : list transition_item), finite_constrained_trace_init_to Ui s1 s2 tr → s1 = s2 ∨ state_suffix s1 s2by eapply state_suffix_of_finite_constrained_trace_from_to. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2: State
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm Ui) s1 s2 tr
Hinit: initial_state_prop s1s1 = s2 ∨ state_suffix s1 s2
Every reachable state is either initial or the target of some transition.
This transition comes from a source state which is also reachable.
Additionally, if the label of the transition is Send, we know that the
observation contains the source state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ s : State, UMO_reachable P s → obs s = [] ∨ (∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s, oom) ∧ s = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ s : State, UMO_reachable P s → obs s = [] ∨ (∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s, oom) ∧ s = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hs: UMO_reachable P sobs s = [] ∨ (∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s, oom) ∧ s = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hs: UMO_reachable P s
s0: State
H: UMO_reachable P s0
H0: s0 <+> MkObservation Send (MkMessage s0) = s∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s0 <+> MkObservation Send (MkMessage s0), oom) ∧ s0 <+> MkObservation Send (MkMessage s0) = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hs: UMO_reachable P s
s0: State
msg: Message
H: P s0 msg
H0: UMO_reachable P s0
H1: s0 <+> MkObservation Receive msg = s∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s0 <+> MkObservation Receive msg, oom) ∧ s0 <+> MkObservation Receive msg = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s')by eexists Send, None, (Some (MkMessage s0)), s0, _.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hs: UMO_reachable P s
s0: State
H: UMO_reachable P s0
H0: s0 <+> MkObservation Send (MkMessage s0) = s∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s0 <+> MkObservation Send (MkMessage s0), oom) ∧ s0 <+> MkObservation Send (MkMessage s0) = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s')by eexists Receive, (Some msg), None, s0, _. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hs: UMO_reachable P s
s0: State
msg: Message
H: P s0 msg
H0: UMO_reachable P s0
H1: s0 <+> MkObservation Receive msg = s∃ (lbl : Label) (iom oom : option Message) (s' : State) (ob : Observation), UMO_component_transition lbl s' iom = (s0 <+> MkObservation Receive msg, oom) ∧ s0 <+> MkObservation Receive msg = s' <+> ob ∧ UMO_reachable P s' ∧ (lbl = Send → message ob = MkMessage s')
If a reachable state
s2
is a result of adding an observation to a state
s1
, then s1
is also reachable. Additionally, if the observation's
label is Send, then we can characterize the state s1
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (ob : Observation), UMO_reachable P (s <+> ob) → UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (ob : Observation), UMO_reachable P (s <+> ob) → UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
ob: Observation
Hvsp: UMO_reachable P (s <+> ob)UMO_reachable P sby apply addObservation_inj in Hadd as [_ ->]. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
ob: Observation
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> ob, oom)
Hadd: s <+> ob = s' <+> ob'
Hvsp: UMO_reachable P s'
Hss': lbl = Send → message ob' = MkMessage s'UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P (s <+> MkObservation Send m) → s = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P (s <+> MkObservation Send m) → s = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P (s <+> MkObservation Send m)s = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> MkObservation Send m, oom)
Hadd: s <+> MkObservation Send m = s' <+> ob'
Hvsp: UMO_reachable P s'
Hlbl: lbl = Send → message ob' = MkMessage s's = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> MkObservation Send m, oom)
Hadd: s <+> MkObservation Send m = s' <+> ob'
Hvsp: UMO_reachable P s'
Hlbl: lbl = Send → message ob' = MkMessage s'
H0: MkObservation Send m = ob'
H1: obs s = obs s'
H2: adr s = adr s's = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> MkObservation Send m, oom)
Hadd: s <+> MkObservation Send m = s' <+> ob'
Hvsp: UMO_reachable P s'
Hlbl: lbl = Send → message ob' = MkMessage s'
H0: MkObservation Send m = ob'
H1: obs s = obs s'
H2: adr s = adr s's = state (message ob')by destruct lbl, iom; cbn in *; inversion Ht; subst; [| | done] ; apply (f_equal (fun x => length (obs x))) in Hadd; cbn in Hadd; lia. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> MkObservation Send m, oom)
Hadd: s <+> MkObservation Send m = s' <+> ob'
Hvsp: UMO_reachable P s'
Hlbl: lbl = Send → message ob' = MkMessage s'
H0: MkObservation Send m = ob'
H1: obs s = obs s'
H2: adr s = adr s'lbl = SendAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P (s <+> MkObservation Send m) → UMO_reachable P (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P (s <+> MkObservation Send m) → UMO_reachable P (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P (s <+> MkObservation Send m)UMO_reachable P (state m)by eapply UMO_reachable_addObservation_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P (s <+> MkObservation Send m)UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (ob : Observation), UMO_reachable P (s <+> ob) → label ob = Send → message ob = MkMessage sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (ob : Observation), UMO_reachable P (s <+> ob) → label ob = Send → message ob = MkMessage sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
ob: Observation
Hvsp: UMO_reachable P (s <+> ob)
Heq: label ob = Sendmessage ob = MkMessage sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
ob: Observation
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s <+> ob, oom)
Hadd: s <+> ob = s' <+> ob'
Hvsp: UMO_reachable P s'
Hss': lbl = Send → message ob' = MkMessage s'
Heq: label ob = Sendmessage ob = MkMessage sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s' <+> ob', oom)
Hvsp: UMO_reachable P s'
Hss': lbl = Send → message ob' = MkMessage s'
Heq: label ob' = Sendmessage ob' = MkMessage s'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
lbl: Label
iom, oom: option Message
s': State
ob': Observation
Ht: UMO_component_transition lbl s' iom = (s' <+> ob', oom)
Hvsp: UMO_reachable P s'
Hss': lbl = Send → message ob' = MkMessage s'
Heq: label ob' = Sendlbl = Sendby symmetry in H0; apply addObservation_acyclic in H0. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s': State
ob': Observation
Hvsp: UMO_reachable P s'
Hss': Receive = Send → message ob' = MkMessage s'
Heq: label ob' = Send
H0: s' = s' <+> ob'Receive = Send
If a reachable state
s2
results from adding observations to a state s1
,
then s1
is also reachable.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (obs' : list Observation), UMO_reachable P (s <++> obs') → UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (obs' : list Observation), UMO_reachable P (s <++> obs') → UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
obs': list Observation∀ s : State, UMO_reachable P (s <++> obs') → UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hvsp: UMO_reachable P (s <++> [])UMO_reachable P sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
ob': Observation
obs': list Observation
IHobs': ∀ s : State, UMO_reachable P (s <++> obs') → UMO_reachable P s
s: State
Hvsp: UMO_reachable P (s <++> (ob' :: obs'))UMO_reachable P sby rewrite <- addObservations_nil.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
Hvsp: UMO_reachable P (s <++> [])UMO_reachable P sby apply IHobs', UMO_reachable_addObservation_inv with ob'. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
ob': Observation
obs': list Observation
IHobs': ∀ s : State, UMO_reachable P (s <++> obs') → UMO_reachable P s
s: State
Hvsp: UMO_reachable P (s <++> (ob' :: obs'))UMO_reachable P s
If a state is constrained, after sending a message it's still constrained.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m : Message, constrained_state_prop (UMO_component i) (state m) → constrained_state_prop (UMO_component i) (state m <+> MkObservation Send m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m : Message, constrained_state_prop (UMO_component i) (state m) → constrained_state_prop (UMO_component i) (state m <+> MkObservation Send m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m : Message, UMO_reachable (λ (_ : State) (_ : Message), True) (state m) ∧ adr (state m) = i → UMO_reachable (λ (_ : State) (_ : Message), True) (state m <+> MkObservation Send m) ∧ adr (state m) = iby destruct m; constructor. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m: Message
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) (state m)
Hadr: adr (state m) = iUMO_reachable (λ (_ : State) (_ : Message), True) (state m <+> MkObservation Send m)
If a state is constrained, after receiving a message it's still constrained.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m : Message), constrained_state_prop (UMO_component i) s → constrained_state_prop (UMO_component i) (s <+> MkObservation Receive m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m : Message), constrained_state_prop (UMO_component i) s → constrained_state_prop (UMO_component i) (s <+> MkObservation Receive m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m : Message), UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = i → UMO_reachable (λ (_ : State) (_ : Message), True) (s <+> MkObservation Receive m) ∧ adr s = iby destruct m; constructor. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m: Message
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) s
Hadr: adr s = iUMO_reachable (λ (_ : State) (_ : Message), True) (s <+> MkObservation Receive m)
If a state is constrained after adding an observation, it must have been
constrained before adding it.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), constrained_state_prop (UMO_component i) (s <+> ob) → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), constrained_state_prop (UMO_component i) (s <+> ob) → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), UMO_reachable (λ (_ : State) (_ : Message), True) (s <+> ob) ∧ adr s = i → UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iby eapply UMO_reachable_addObservation_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: Observation
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) (s <+> ob)
Hadr: adr s = iUMO_reachable (λ (_ : State) (_ : Message), True) s
If a state is constrained after adding some observations, it must have been
constrained before adding them.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (obs : list Observation), constrained_state_prop (UMO_component i) (s <++> obs) → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (obs : list Observation), constrained_state_prop (UMO_component i) (s <++> obs) → constrained_state_prop (UMO_component i) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (obs : list Observation), UMO_reachable (λ (_ : State) (_ : Message), True) (s <++> obs) ∧ adr s = i → UMO_reachable (λ (_ : State) (_ : Message), True) s ∧ adr s = iby eapply UMO_reachable_addObservations_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob: list Observation
Hur: UMO_reachable (λ (_ : State) (_ : Message), True) (s <++> ob)
Hadr: adr s = iUMO_reachable (λ (_ : State) (_ : Message), True) s
The lemma just below essentially states that for every reachable state
More technically: if the observations of a reachable state
s
,
messages sent earlier are suffixes of messages sent later and that the
messages are suffixes of the state s
.
s
contain two
sent messages m1
and m2
(with potentially some more observations
in-between), then the state of m1
is a state-suffix of the state of m2
and also the state of m2
is a state-suffix of s
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → UMO_reachable P s → state_suffix (state m1) (state m2) ∧ state_suffix (state m2) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → UMO_reachable P s → state_suffix (state m1) (state m2) ∧ state_suffix (state m2) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2)
Hm2: label (MkObservation Send m2) = Send → message (MkObservation Send m2) = MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hm2: label (MkObservation Send m2) = Send → message (MkObservation Send m2) = MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1)
Hm2: label (MkObservation Send m2) = Send → message (MkObservation Send m2) = MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1)
Hm2: label (MkObservation Send m2) = Send → message (MkObservation Send m2) = MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hm1: label (MkObservation Send m1) = Send → message (MkObservation Send m1) = MkMessage (MkState [] (adr s) <++> obs1)state_suffix (state m1) (state m2) ∧ state_suffix (state m2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)by apply state_suffix_addObservations, ListExtras.last_not_null.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1) (MkState [] (adr s) <++> obs1 <++> (obs2 ++ [MkObservation Send m1]))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)by apply state_suffix_addObservations, ListExtras.last_not_null. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observationstate_suffix (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2) (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <++> (obs3 ++ [MkObservation Send m2]))
state_suffix_totally_orders_sent_messages_UMO_reachable_aux easily carries
over to valid states.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → valid_state_prop Ui s → state_suffix (state m1) (state m2) ∧ state_suffix (state m2) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → valid_state_prop Ui s → state_suffix (state m1) (state m2) ∧ state_suffix (state m2) sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: valid_state_prop Ui sstate_suffix (state m1) (state m2) ∧ state_suffix (state m2) sby apply UMO_reachable_valid_state_prop. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: valid_state_prop Ui sUMO_reachable ?P s
The message_suffix relation is trichotomous on the sentMessages of any
reachable state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), UMO_reachable P s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → message_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), UMO_reachable P s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → message_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: m1 ∈ sentMessages s
H2: m2 ∈ sentMessages smessage_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs smessage_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
Heq: MkObservation Send m1 = MkObservation Send m2m1 = m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m1 :: obs2 ++ MkObservation Send m2 :: obs3message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m2 :: obs2 ++ MkObservation Send m1 :: obs3message_suffix m1 m2by congruence.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
Heq: MkObservation Send m1 = MkObservation Send m2m1 = m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m1 :: obs2 ++ MkObservation Send m2 :: obs3message_suffix m2 m1by apply eq_State; cbn; [rewrite app_nil_r |].Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m1 :: obs2 ++ MkObservation Send m2 :: obs3s = MkState [] (adr s) <++> ?obs1 <+> MkObservation Send m2 <++> ?obs2 <+> MkObservation Send m1 <++> ?obs3Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m2 :: obs2 ++ MkObservation Send m1 :: obs3message_suffix m1 m2by apply eq_State; cbn; [rewrite app_nil_r |]. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvalid: UMO_reachable P s
H1: MkObservation Send m1 ∈ obs s
H2: MkObservation Send m2 ∈ obs s
obs1, obs2, obs3: list BaseELMO.Observation
H: obs s = obs1 ++ MkObservation Send m2 :: obs2 ++ MkObservation Send m1 :: obs3s = MkState [] (adr s) <++> ?obs1 <+> MkObservation Send m1 <++> ?obs2 <+> MkObservation Send m2 <++> ?obs3
state_suffix_totally_orders_sent_messages_UMO_reachable transfers to
sentMessages of valid states.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message), valid_state_prop Ui s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → message_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message), valid_state_prop Ui s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → message_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1by eapply state_suffix_totally_orders_sent_messages_UMO_reachable; [apply UMO_reachable_valid_state_prop | ..]. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m1, m2: Message
Hvsp: valid_state_prop Ui s
Hin1: m1 ∈ sentMessages s
Hin2: m2 ∈ sentMessages smessage_suffix m1 m2 ∨ m1 = m2 ∨ message_suffix m2 m1
Observability
Definition directly_observable (m1 m2 : Message) : Prop :=
m1 ∈ map message (obs (state m2)).
Our definition is equivalent to the alternative definition.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m1 m2 : Message, m1 ∈ map message (obs (state m2)) ↔ m1 ∈ sentMessages (state m2) ∨ m1 ∈ receivedMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m1 m2 : Message, m1 ∈ map message (obs (state m2)) ↔ m1 ∈ sentMessages (state m2) ∨ m1 ∈ receivedMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Messagem1 ∈ map message (obs (state m2)) ↔ m1 ∈ sentMessages (state m2) ∨ m1 ∈ receivedMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Messagem1 ∈ map message (obs (state m2)) ↔ m1 ∈ map message (filter isSend (obs (state m2))) ∨ m1 ∈ map message (filter isReceive (obs (state m2)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)) ↔ (∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ filter isSend (obs (state m2))) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ filter isReceive (obs (state m2)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)) ↔ (∃ y : BaseELMO.Observation, m1 = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)) → (∃ y : BaseELMO.Observation, m1 = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ isReceive y ∧ y ∈ obs (state m2)) → ∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)) → (∃ y : BaseELMO.Observation, m1 = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hin: ob ∈ obs (state m2)(∃ y : BaseELMO.Observation, message ob = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, message ob = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hin: ob ∈ obs (state m2)
Hlob: label ob = Receive(∃ y : BaseELMO.Observation, message ob = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, message ob = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hin: ob ∈ obs (state m2)
Hlob: label ob = Send(∃ y : BaseELMO.Observation, message ob = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, message ob = message y ∧ isReceive y ∧ y ∈ obs (state m2))by right; exists ob; unfold isReceive; rewrite Hlob.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hin: ob ∈ obs (state m2)
Hlob: label ob = Receive(∃ y : BaseELMO.Observation, message ob = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, message ob = message y ∧ isReceive y ∧ y ∈ obs (state m2))by left; exists ob; unfold isSend; rewrite Hlob.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hin: ob ∈ obs (state m2)
Hlob: label ob = Send(∃ y : BaseELMO.Observation, message ob = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, message ob = message y ∧ isReceive y ∧ y ∈ obs (state m2))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m1, m2: Message(∃ y : BaseELMO.Observation, m1 = message y ∧ isSend y ∧ y ∈ obs (state m2)) ∨ (∃ y : BaseELMO.Observation, m1 = message y ∧ isReceive y ∧ y ∈ obs (state m2)) → ∃ y : BaseELMO.Observation, m1 = message y ∧ y ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hs: isSend ob
Hin: ob ∈ obs (state m2)∃ y : BaseELMO.Observation, message ob = message y ∧ y ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hs: isReceive ob
Hin: ob ∈ obs (state m2)∃ y : BaseELMO.Observation, message ob = message y ∧ y ∈ obs (state m2)by exists ob.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hs: isSend ob
Hin: ob ∈ obs (state m2)∃ y : BaseELMO.Observation, message ob = message y ∧ y ∈ obs (state m2)by exists ob. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
m2: Message
ob: BaseELMO.Observation
Hs: isReceive ob
Hin: ob ∈ obs (state m2)∃ y : BaseELMO.Observation, message ob = message y ∧ y ∈ obs (state m2)
observable is the transitive closure of directly_observable.
Definition observable : relation Message :=
tc directly_observable.
If m1 is directly observable in a suffix of m3, then it is also
directly observable in m3.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m1 m2 m3 : Message, message_suffix m2 m3 → directly_observable m1 m2 → directly_observable m1 m3Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m1 m2 m3 : Message, message_suffix m2 m3 → directly_observable m1 m2 → directly_observable m1 m3Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ m1 m2 m3 : Message, message_suffix m2 m3 → m1 ∈ map message (obs (state m2)) → m1 ∈ map message (obs (state m3))by unfold Message; rewrite Hsuf, map_app, elem_of_app; right. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s1, s2, s3: BaseELMO.State
obs': list BaseELMO.Observation
Hsuf: obs s3 = obs' ++ obs s2
Hdo: MkMessage s1 ∈ map message (obs s2)MkMessage s1 ∈ map message (obs s3)
m is directly observable in state s extended with new observation ob
iff m is the message of ob or m is directly observable in s.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : Message) (s : State) (ob : Observation), directly_observable m (MkMessage (s <+> ob)) ↔ directly_observable m (MkMessage s) ∨ m = message obAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : Message) (s : State) (ob : Observation), directly_observable m (MkMessage (s <+> ob)) ↔ directly_observable m (MkMessage s) ∨ m = message obby intros m s ob; cbn; rewrite elem_of_cons; itauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : BaseELMO.Message) (s : State) (ob : Observation), m ∈ map message (obs (state (MkMessage (s <+> ob)))) ↔ m ∈ map message (obs (state (MkMessage s))) ∨ m = message ob
directly_observable_addObservation easily transfers to a situation in
which we add multiple observations at once.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : Message) (s : State) (obs' : list Observation), directly_observable m (MkMessage (s <++> obs')) ↔ directly_observable m (MkMessage s) ∨ m ∈ map message obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : Message) (s : State) (obs' : list Observation), directly_observable m (MkMessage (s <++> obs')) ↔ directly_observable m (MkMessage s) ∨ m ∈ map message obs'by intros m s obs'; cbn; rewrite map_app, elem_of_app; itauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (m : BaseELMO.Message) (s : State) (obs' : list Observation), m ∈ map message (obs (state (MkMessage (s <++> obs')))) ↔ m ∈ map message (obs (state (MkMessage s))) ∨ m ∈ map message obs'
In a reachable state, messages sent earlier are directly observable in
messages sent later.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → UMO_reachable P s → directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → UMO_reachable P s → directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: UMO_reachable P sdirectly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3)directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2)directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: UMO_reachable P (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2)
Heq': message (MkObservation Send m2) = MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2)directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1: Message
obs1, obs2, obs3: list Observationdirectly_observable m1 (MkMessage (MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2))by itauto. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1: Message
obs1, obs2, obs3: list Observation((directly_observable m1 (MkMessage (MkState [] (adr s))) ∨ m1 ∈ map message obs1) ∨ m1 = m1) ∨ m1 ∈ map message obs2
directly_observable_totally_orders_sent_messages_UMO_reachable can be
transferred to valid states.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → valid_state_prop Ui s → directly_observable m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (m1 m2 : Message) (obs1 obs2 obs3 : list Observation), s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3 → valid_state_prop Ui s → directly_observable m1 m2by eapply directly_observable_totally_orders_sent_messages_UMO_reachable, UMO_reachable_valid_state_prop. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m1, m2: Message
obs1, obs2, obs3: list Observation
Heq: s = MkState [] (adr s) <++> obs1 <+> MkObservation Send m1 <++> obs2 <+> MkObservation Send m2 <++> obs3
Hvsp: valid_state_prop Ui sdirectly_observable m1 m2
If
Moreover, if the observation was a sent message
ob
belongs to the observations of a state s
, we can decompose
s
into some state s'
followed by ob
and then possibly some
more observations obs'
.
m
, then we know that
s'
is state m
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), ob ∈ obs s → ∃ (s' : State) (obs' : list Observation), s = s' <+> ob <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob : Observation), ob ∈ obs s → ∃ (s' : State) (obs' : list Observation), s = s' <+> ob <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m: Observation
Hin: m ∈ obs s∃ (s' : State) (obs' : list Observation), s = s' <+> m <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m: Observation
obs1, obs2: list Observation
Hobs: obs s = obs1 ++ m :: obs2∃ (s' : State) (obs' : list Observation), s = s' <+> m <++> obs'by apply eq_State; cbn. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
m: Observation
obs1, obs2: list Observation
Hobs: obs s = obs1 ++ m :: obs2s = MkState obs2 (adr s) <+> m <++> obs1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), MkObservation Send m ∈ obs s → UMO_reachable P s → ∃ obs' : list Observation, s = state m <+> MkObservation Send m <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), MkObservation Send m ∈ obs s → UMO_reachable P s → ∃ obs' : list Observation, s = state m <+> MkObservation Send m <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hin: MkObservation Send m ∈ obs s
Hvsp: UMO_reachable P s∃ obs' : list Observation, s = state m <+> MkObservation Send m <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
s': State
obs': list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m <++> obs')∃ obs'0 : list Observation, s' <+> MkObservation Send m <++> obs' = state m <+> MkObservation Send m <++> obs'0Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
s': State
obs': list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m <++> obs')s' <+> MkObservation Send m <++> obs' = state m <+> MkObservation Send m <++> obs'by apply UMO_reachable_addObservations_inv, UMO_reachable_addObservation_inv_Send_state in Hvsp. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
s': State
obs': list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m <++> obs')s' = state mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), MkObservation Send m ∈ obs s → UMO_reachable P s → UMO_reachable P (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), MkObservation Send m ∈ obs s → UMO_reachable P s → UMO_reachable P (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hin: MkObservation Send m ∈ obs s
Hvsp: UMO_reachable P sUMO_reachable P (state m)by apply UMO_reachable_addObservations_inv, UMO_reachable_addObservation_inv_Send in Hvsp. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
obs: list Observation
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> obs)
Hin: MkObservation Send m ∈ BaseELMO.obs (state m <+> MkObservation Send m <++> obs)UMO_reachable P (state m)
elem_of_obs_split and elem_of_UMO_reachable_obs_Send_split can be generalized to
two observations
ob1
and ob2
and from there to any numbers of observations.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob1 ob2 : Observation), ob1 ∈ obs s → ob2 ∈ obs s → ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message∀ (s : State) (ob1 ob2 : Observation), ob1 ∈ obs s → ob2 ∈ obs s → ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs sob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
Heq: ob1 = ob2ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob1 :: obs2 ++ ob2 :: obs3ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob2 :: obs2 ++ ob1 :: obs3ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)by left.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
Heq: ob1 = ob2ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob1 :: obs2 ++ ob2 :: obs3ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)by right; apply eq_State; cbn.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob1 :: obs2 ++ ob2 :: obs3s = MkState obs3 (adr s) <+> ob1 <++> obs2 <+> ob2 <++> obs1 ∨ s = MkState obs3 (adr s) <+> ob2 <++> obs2 <+> ob1 <++> obs1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob2 :: obs2 ++ ob1 :: obs3ob1 = ob2 ∨ (∃ (s' : State) (obs1 obs2 : list Observation), s = s' <+> ob1 <++> obs1 <+> ob2 <++> obs2 ∨ s = s' <+> ob2 <++> obs1 <+> ob1 <++> obs2)by left; apply eq_State; cbn. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
s: State
ob1, ob2: Observation
Hin1: ob1 ∈ obs s
Hin2: ob2 ∈ obs s
obs1, obs2, obs3: list Observation
Heq: obs s = obs1 ++ ob2 :: obs2 ++ ob1 :: obs3s = MkState obs3 (adr s) <+> ob1 <++> obs2 <+> ob2 <++> obs1 ∨ s = MkState obs3 (adr s) <+> ob2 <++> obs2 <+> ob1 <++> obs1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), MkObservation Send m1 ∈ obs s → MkObservation Send m2 ∈ obs s → UMO_reachable P s → m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), MkObservation Send m1 ∈ obs s → MkObservation Send m2 ∈ obs s → UMO_reachable P s → m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P sm1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
Heq: MkObservation Send m1 = MkObservation Send m2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
s': State
obs1, obs2: list Observation
Heq: s = s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
s': State
obs1, obs2: list Observation
Heq: s = s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)by left; congruence.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
Heq: MkObservation Send m1 = MkObservation Send m2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
s': State
obs1, obs2: list Observation
Heq: s = s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
s': State
obs1, obs2: list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hin2: MkObservation Send m2 ∈ obs (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hin1: MkObservation Send m1 ∈ obs (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2by eapply UMO_reachable_addObservation_inv_Send_state, UMO_reachable_addObservations_inv, UMO_reachable_addObservation_inv, UMO_reachable_addObservations_inv.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
s': State
obs1, obs2: list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hin2: MkObservation Send m2 ∈ obs (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hin1: MkObservation Send m1 ∈ obs (s' <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)s' = state m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp: UMO_reachable P s
s': State
obs1, obs2: list Observation
Heq: s = s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2m1 = m2 ∨ (∃ obs1 obs2 : list Observation, s = state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2 ∨ s = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
s': State
obs1, obs2: list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hin2: MkObservation Send m2 ∈ obs (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hin1: MkObservation Send m1 ∈ obs (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2 = state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2by eapply UMO_reachable_addObservation_inv_Send_state, UMO_reachable_addObservations_inv, UMO_reachable_addObservation_inv, UMO_reachable_addObservations_inv. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
s': State
obs1, obs2: list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hin2: MkObservation Send m2 ∈ obs (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hin1: MkObservation Send m1 ∈ obs (s' <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)s' = state m2
If
m
belongs to sentMessages of s
, then its state has the same address as s
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P s → m ∈ sentMessages s → adr (state m) = adr sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P s → m ∈ sentMessages s → adr (state m) = adr sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P s
Hin: m ∈ sentMessages sadr (state m) = adr sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
s': State
obs': list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m <++> obs')adr (state m) = adr s'by destruct s'; inversion Hvsp. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
s': State
obs': list Observation
Hvsp: UMO_reachable P (s' <+> MkObservation Send m)adr (state m) = adr s'
A message
m
belongs to the sentMessages of state s
if and only if
the state state m <+> MkObservation Send m is a (possibly improper)
state suffix of s
.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P s → m ∈ sentMessages s ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m : Message), UMO_reachable P s → m ∈ sentMessages s ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P sMkObservation Send m ∈ obs s → let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P s(let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = s) → MkObservation Send m ∈ obs sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P sMkObservation Send m ∈ obs s → let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
obs': list Observation
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> obs')let s' := state m <+> MkObservation Send m in state_suffix s' (state m <+> MkObservation Send m <++> obs') ∨ s' = state m <+> MkObservation Send m <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> [])let s' := state m <+> MkObservation Send m in state_suffix s' (state m <+> MkObservation Send m <++> []) ∨ s' = state m <+> MkObservation Send m <++> []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
ob: Observation
obs': list Observation
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> (ob :: obs'))let s' := state m <+> MkObservation Send m in state_suffix s' (state m <+> MkObservation Send m <++> (ob :: obs')) ∨ s' = state m <+> MkObservation Send m <++> (ob :: obs')by right.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> [])let s' := state m <+> MkObservation Send m in state_suffix s' (state m <+> MkObservation Send m <++> []) ∨ s' = state m <+> MkObservation Send m <++> []by left; apply state_suffix_addObservations; inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
ob: Observation
obs': list Observation
Hvsp: UMO_reachable P (state m <+> MkObservation Send m <++> (ob :: obs'))let s' := state m <+> MkObservation Send m in state_suffix s' (state m <+> MkObservation Send m <++> (ob :: obs')) ∨ s' = state m <+> MkObservation Send m <++> (ob :: obs')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P s(let s' := state m <+> MkObservation Send m in state_suffix s' s ∨ s' = s) → MkObservation Send m ∈ obs sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P s
Hadr: adr (state m <+> MkObservation Send m) = adr s
ob: list BaseELMO.Observation
Hobs2: ¬ ob ++ obs (state m <+> MkObservation Send m) `suffix_of` obs (state m <+> MkObservation Send m)MkObservation Send m ∈ ob ++ obs (state m <+> MkObservation Send m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
Hvsp: UMO_reachable P (state m <+> MkObservation Send m)MkObservation Send m ∈ obs (state m <+> MkObservation Send m)by apply elem_of_app; right; constructor.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m: Message
Hvsp: UMO_reachable P s
Hadr: adr (state m <+> MkObservation Send m) = adr s
ob: list BaseELMO.Observation
Hobs2: ¬ ob ++ obs (state m <+> MkObservation Send m) `suffix_of` obs (state m <+> MkObservation Send m)MkObservation Send m ∈ ob ++ obs (state m <+> MkObservation Send m)by constructor. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m: Message
Hvsp: UMO_reachable P (state m <+> MkObservation Send m)MkObservation Send m ∈ obs (state m <+> MkObservation Send m)
A message
m1
was sent before another message m2
if they have the same
address and m1
appears in sentMessages of the state of m2
.
Definition was_sent_before (m1 m2 : Message) : Prop :=
adr (state m1) = adr (state m2) /\ m1 ∈ sentMessages (state m2).
We can characterize was_sent_before in terms of state_suffix in two
different ways, provided that the state of
m2
is reachable.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ m1 m2 : Message, UMO_reachable P (state m2) → was_sent_before m1 m2 ↔ (let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ m1 m2 : Message, UMO_reachable P (state m2) → was_sent_before m1 m2 ↔ (let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)was_sent_before m1 m2 → let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)(let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2) → was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)was_sent_before m1 m2 → let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsent: m1 ∈ sentMessages (state m2)let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsent: MkObservation Send m1 ∈ obs (state m2)let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
obs': list Observationlet s := state m1 <+> MkObservation Send m1 in state_suffix s (state m1 <+> MkObservation Send m1 <++> obs') ∨ s = state m1 <+> MkObservation Send m1 <++> obs'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> []) ∨ state m1 <+> MkObservation Send m1 = state m1 <+> MkObservation Send m1 <++> []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
ob': Observation
obs': list Observationstate_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> (ob' :: obs')) ∨ state m1 <+> MkObservation Send m1 = state m1 <+> MkObservation Send m1 <++> (ob' :: obs')by right.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> []) ∨ state m1 <+> MkObservation Send m1 = state m1 <+> MkObservation Send m1 <++> []by left; apply state_suffix_addObservations; inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
ob': Observation
obs': list Observationstate_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> (ob' :: obs')) ∨ state m1 <+> MkObservation Send m1 = state m1 <+> MkObservation Send m1 <++> (ob' :: obs')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)(let s := state m1 <+> MkObservation Send m1 in state_suffix s (state m2) ∨ s = state m2) → was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsuf: addObservation' (MkObservation Send m1) (obs (state m1)) `suffix_of` obs (state m2)
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsuf: addObservation' (MkObservation Send m1) (obs (state m1)) `suffix_of` obs (state m2)
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsuf: addObservation' (MkObservation Send m1) (obs (state m1)) `suffix_of` obs (state m2)
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))m1 ∈ sentMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsuf: addObservation' (MkObservation Send m1) (obs (state m1)) `suffix_of` obs (state m2)
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))MkObservation Send m1 ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
obs': list BaseELMO.Observation
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))MkObservation Send m1 ∈ obs' ++ addObservation' (MkObservation Send m1) (obs (state m1))by rewrite elem_of_app, elem_of_cons; right; left.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
obs': list BaseELMO.Observation
Hnsuf: ¬ obs (state m2) `suffix_of` addObservation' (MkObservation Send m1) (obs (state m1))MkObservation Send m1 ∈ obs' ++ MkObservation Send m1 :: obs (state m1)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2adr (state m1) = adr (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2m1 ∈ sentMessages (state m2)by apply (f_equal adr) in Heq; cbn in Heq.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2adr (state m1) = adr (state m2)by rewrite <- Heq; setoid_rewrite elem_of_sentMessages; left. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Heq: state m1 <+> MkObservation Send m1 = state m2m1 ∈ sentMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ m1 m2 : Message, UMO_reachable P (state m2) → was_sent_before m1 m2 ↔ state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ m1 m2 : Message, UMO_reachable P (state m2) → was_sent_before m1 m2 ↔ state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)was_sent_before m1 m2 → state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2) → was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)was_sent_before m1 m2 → state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
Hsent: m1 ∈ sentMessages (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
obs': list Observationstate_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> obs' <+> MkObservation Send m2)by apply state_suffix_addObservations; inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1) = adr (state m2)
obs': list Observationstate_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> (MkObservation Send m2 :: obs'))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2) → was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
Hsuf: obs (state m1 <+> MkObservation Send m1) `suffix_of` obs (state m2 <+> MkObservation Send m2)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
Hsuf: obs (state m1 <+> MkObservation Send m1) `suffix_of` obs (state m2 <+> MkObservation Send m2)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)m1 ∈ sentMessages (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
Hsuf: obs (state m1 <+> MkObservation Send m1) `suffix_of` obs (state m2 <+> MkObservation Send m2)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)MkObservation Send m1 ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
obs': list BaseELMO.Observation
Heq: obs (state m2 <+> MkObservation Send m2) = obs' ++ obs (state m1 <+> MkObservation Send m1)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)MkObservation Send m1 ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
obs': list BaseELMO.Observation
Heq: MkObservation Send m2 :: obs (state m2) = obs' ++ MkObservation Send m1 :: obs (state m1)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)MkObservation Send m1 ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
obs': list BaseELMO.Observation
Heq: MkObservation Send m2 :: obs (state m2) = obs' ++ MkObservation Send m1 :: obs (state m1)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)MkObservation Send m1 ∈ obs (state m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1: Message
Hnsuf: ¬ obs (state m1 <+> MkObservation Send m1) `suffix_of` obs (state m1 <+> MkObservation Send m1)
Heq: MkObservation Send m1 :: obs (state m1) = [] ++ MkObservation Send m1 :: obs (state m1)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m1 <+> MkObservation Send m1)
Hvsp: UMO_reachable P (state m1)
H1: obs (state m1) = obs (state m1)MkObservation Send m1 ∈ obs (state m1)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
obs': list BaseELMO.Observation
Heq: MkObservation Send m2 :: obs (state m2) = (MkObservation Send m2 :: obs') ++ MkObservation Send m1 :: obs (state m1)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)
H1: obs (state m2) = obs' ++ MkObservation Send m1 :: obs (state m1)MkObservation Send m1 ∈ obs (state m2)by contradiction Hnsuf.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1: Message
Hnsuf: ¬ obs (state m1 <+> MkObservation Send m1) `suffix_of` obs (state m1 <+> MkObservation Send m1)
Heq: MkObservation Send m1 :: obs (state m1) = [] ++ MkObservation Send m1 :: obs (state m1)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m1 <+> MkObservation Send m1)
Hvsp: UMO_reachable P (state m1)
H1: obs (state m1) = obs (state m1)MkObservation Send m1 ∈ obs (state m1)by rewrite H1, elem_of_app, elem_of_cons; right; left. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
Hvsp: UMO_reachable P (state m2)
Hadr: adr (state m1 <+> MkObservation Send m1) = adr (state m2 <+> MkObservation Send m2)
obs': list BaseELMO.Observation
Heq: MkObservation Send m2 :: obs (state m2) = (MkObservation Send m2 :: obs') ++ MkObservation Send m1 :: obs (state m1)
Hnsuf: ¬ obs (state m2 <+> MkObservation Send m2) `suffix_of` obs (state m1 <+> MkObservation Send m1)
H1: obs (state m2) = obs' ++ MkObservation Send m1 :: obs (state m1)MkObservation Send m1 ∈ obs (state m2)
The relation was_sent_before is trichotomous on the sentMessages of any
reachable state.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), UMO_reachable P s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop∀ (s : State) (m1 m2 : Message), UMO_reachable P s → m1 ∈ sentMessages s → m2 ∈ sentMessages s → was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hin1: m1 ∈ sentMessages s
Hin2: m2 ∈ sentMessages swas_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs swas_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp1: UMO_reachable P (state m1)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hin1: MkObservation Send m1 ∈ obs s
Hin2: MkObservation Send m2 ∈ obs s
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)
Heq: m1 = m2was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1by right; left.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
s: State
m1, m2: Message
Hvsp: UMO_reachable P s
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)
Heq: m1 = m2was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m1 <+> MkObservation Send m1 <++> obs1 <+> MkObservation Send m2 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: state m1 <+> MkObservation Send m1 <++> obs1 = state m2
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m2 <+> MkObservation Send m2)by apply state_suffix_addObservations; inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: state m1 <+> MkObservation Send m1 <++> obs1 = state m2
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m1 <+> MkObservation Send m1) (state m1 <+> MkObservation Send m1 <++> (MkObservation Send m2 :: obs1))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m1 m2 ∨ m1 = m2 ∨ was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)was_sent_before m2 m1Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: UMO_reachable P (state m2 <+> MkObservation Send m2 <++> obs1 <+> MkObservation Send m1 <++> obs2)
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m2 <+> MkObservation Send m2) (state m1 <+> MkObservation Send m1)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: state m2 <+> MkObservation Send m2 <++> obs1 = state m1
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m2 <+> MkObservation Send m2) (state m1 <+> MkObservation Send m1)by apply state_suffix_addObservations; inversion 1. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
i: Address
Ui:= UMO_component i: VLSM Message
P: State → Message → Prop
m1, m2: Message
obs1, obs2: list Observation
Hvsp: state m2 <+> MkObservation Send m2 <++> obs1 = state m1
Hvsp1: UMO_reachable P (state m1)
Hvsp2: UMO_reachable P (state m2)state_suffix (state m2 <+> MkObservation Send m2) (state m2 <+> MkObservation Send m2 <++> (MkObservation Send m1 :: obs1))
Messages
m1
and m2
are sent_comparable when m1 = m2
or
was_sent_before m1 m2 or was_sent_before m2 m1.
Inductive sent_comparable : Message -> Message -> Prop :=
| sc_refl : forall m : Message, sent_comparable m m
| sc_wsb_l : forall m1 m2 : Message, was_sent_before m1 m2 -> sent_comparable m1 m2
| sc_wsb_r : forall m1 m2 : Message, was_sent_before m2 m1 -> sent_comparable m1 m2.
Messages
Note that incomparable is not simply a negation of sent_comparable, so
that there can be messages which are neither sent_comparable nor
incomparable.
m1
and m2
are incomparable if they have the same sender
and are not sent_comparable.
Definition incomparable (m1 m2 : Message) : Prop := adr (state m1) = adr (state m2) /\ ~ sent_comparable m1 m2. End sec_UMO_component_lemmas.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeSymmetric sent_comparableby intros x y []; constructor. Defined.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeSymmetric sent_comparableAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeRelDecision sent_comparableAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeRelDecision sent_comparableAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
m1, m2: MessageDecision (sent_comparable m1 m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
m1, m2: Message
e: adr (state m1) = adr (state m2)Decision (sent_comparable m1 m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
m1, m2: Message
e: adr (state m1) = adr (state m2)
n: obs (state m1) ≠ obs (state m2)Decision (sent_comparable m1 m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
m1, m2: Message
e: adr (state m1) = adr (state m2)
n: obs (state m1) ≠ obs (state m2)
n0: m1 ∉ sentMessages (state m2)Decision (sent_comparable m1 m2)by right; destruct 1; firstorder. Defined.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
m1, m2: Message
e: adr (state m1) = adr (state m2)
n: obs (state m1) ≠ obs (state m2)
n0: m1 ∉ sentMessages (state m2)
n1: m2 ∉ sentMessages (state m1)Decision (sent_comparable m1 m2)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeSymmetric incomparableby intros x y []; constructor. Defined. Section sec_UMOProtocol. Context (index : Type) `{finite.Finite index} (idx : index -> Address) `{!Inj (=) (=) idx} (U : index -> VLSM Message := fun i => UMO_component (idx i)) .Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: TypeSymmetric incomparable
Definition UMO : VLSM Message := free_composite_vlsm U.
We set up aliases for some functions operating on free VLSM composition.
Definition UMO_state : Type := composite_state U. Definition UMO_label : Type := composite_label U. Definition UMO_transition_item : Type := composite_transition_item U.
We can lift labels, states and traces from an UMO component to the UMO protocol.
Definition lift_to_UMO_label (i : index) (li : VLSM.label (U i)) : UMO_label := lift_to_composite_label U i li. Definition lift_to_UMO_state (us : UMO_state) (i : index) (si : VLSM.state (U i)) : UMO_state := lift_to_composite_state U us i si. Definition lift_to_UMO_trace (us : UMO_state) (i : index) (tr : list (transition_item (U i))) : list UMO_transition_item := pre_VLSM_embedding_finite_trace_project _ _ (lift_to_UMO_label i) (lift_to_UMO_state us i) tr.
We can also lift properties from UMO components to the UMO protocol, among
them valid_state_prop, valid_message_prop, input_valid_transition
and the various kinds of traces.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, valid_state_prop UMO us → ∀ i : index, VLSM_weak_embedding (U i) UMO (lift_to_UMO_label i) (lift_to_UMO_state us i)by intros; apply lift_to_free_weak_embedding. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, valid_state_prop UMO us → ∀ i : index, VLSM_weak_embedding (U i) UMO (lift_to_UMO_label i) (lift_to_UMO_state us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s : State) (us : UMO_state), valid_state_prop UMO us → valid_state_prop (U i) s → valid_state_prop UMO (lift_to_UMO_state us i s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s : State) (us : UMO_state), valid_state_prop UMO us → valid_state_prop (U i) s → valid_state_prop UMO (lift_to_UMO_state us i s)by eapply VLSM_weak_embedding_valid_state, lift_to_UMO. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
is: index
s: State
us: UMO_state
Hvsp: valid_state_prop UMO usvalid_state_prop (U is) s → valid_state_prop UMO (lift_to_UMO_state us is s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (om : option Message), option_valid_message_prop (U i) om → option_valid_message_prop UMO omAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (om : option Message), option_valid_message_prop (U i) om → option_valid_message_prop UMO omAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
Hovmp: option_valid_message_prop (U i) Noneoption_valid_message_prop UMO NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)option_valid_message_prop UMO (Some m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
Hovmp: option_valid_message_prop (U i) Noneoption_valid_message_prop UMO Noneby constructor; compute.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
Hovmp: option_valid_message_prop (U i) Nonevalid_state_message_prop UMO (λ i : index, MkState [] (idx i)) NoneAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)option_valid_message_prop UMO (Some m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)VLSM_weak_embedding ?X UMO ?label_project ?state_projectAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)strong_embedding_initial_message_preservation ?X UMOAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)valid_message_prop ?X mby apply (lift_to_UMO (fun i => MkState [] (idx i))); exists None; constructor.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)VLSM_weak_embedding ?X UMO ?label_project ?state_projectby inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)strong_embedding_initial_message_preservation (U ?i) UMOby apply Hovmp. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
m: Message
Hovmp: option_valid_message_prop (U i) (Some m)valid_message_prop (U ?i) mAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (lbl : Label) (s1 s2 : State) (iom oom : option Message) (us : UMO_state), valid_state_prop UMO us → input_valid_transition (U i) lbl (s1, iom) (s2, oom) → input_valid_transition UMO (lift_to_UMO_label i lbl) (lift_to_UMO_state us i s1, iom) (lift_to_UMO_state us i s2, oom)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (lbl : Label) (s1 s2 : State) (iom oom : option Message) (us : UMO_state), valid_state_prop UMO us → input_valid_transition (U i) lbl (s1, iom) (s2, oom) → input_valid_transition UMO (lift_to_UMO_label i lbl) (lift_to_UMO_state us i s1, iom) (lift_to_UMO_state us i s2, oom)by apply @VLSM_weak_embedding_input_valid_transition, lift_to_UMO. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
lbl: Label
s1, s2: State
iom, oom: option Message
us: UMO_state
Hivt: valid_state_prop UMO usinput_valid_transition (U i) lbl (s1, iom) (s2, oom) → input_valid_transition UMO (lift_to_UMO_label i lbl) (lift_to_UMO_state us i s1, iom) (lift_to_UMO_state us i s2, oom)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s1 s2 : State) (tr : list transition_item) (us : UMO_state), valid_state_prop UMO us → finite_valid_trace_from_to (U i) s1 s2 tr → finite_valid_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s1 s2 : State) (tr : list transition_item) (us : UMO_state), valid_state_prop UMO us → finite_valid_trace_from_to (U i) s1 s2 tr → finite_valid_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)by eapply (VLSM_weak_embedding_finite_valid_trace_from_to (lift_to_UMO _ Hvsp i)). Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
s1, s2: State
tr: list transition_item
us: UMO_state
Hvsp: valid_state_prop UMO us
Hfvt: finite_valid_trace_from_to (U i) s1 s2 trfinite_valid_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s1 s2 : State) (tr : list transition_item) (us : UMO_state), constrained_state_prop UMO us → finite_constrained_trace_from_to (U i) s1 s2 tr → finite_constrained_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s1 s2 : State) (tr : list transition_item) (us : UMO_state), constrained_state_prop UMO us → finite_constrained_trace_from_to (U i) s1 s2 tr → finite_constrained_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
s1, s2: State
tr: list transition_item
us: UMO_state
Hvsp: constrained_state_prop UMO us
Hfvt: finite_constrained_trace_from_to (U i) s1 s2 trfinite_constrained_trace_from_to UMO (lift_to_UMO_state us i s1) (lift_to_UMO_state us i s2) (lift_to_UMO_trace us i tr)by eapply lift_to_preloaded_free_weak_embedding. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
s1, s2: State
tr: list transition_item
us: UMO_state
Hvsp: constrained_state_prop UMO us
Hfvt: finite_constrained_trace_from_to (U i) s1 s2 trVLSM_weak_embedding (preloaded_with_all_messages_vlsm (U i)) (preloaded_with_all_messages_vlsm UMO) (lift_to_UMO_label i) (lift_to_UMO_state us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s : State) (us : UMO_state), constrained_state_prop UMO us → constrained_state_prop (U i) s → constrained_state_prop UMO (lift_to_UMO_state us i s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s : State) (us : UMO_state), constrained_state_prop UMO us → constrained_state_prop (U i) s → constrained_state_prop UMO (lift_to_UMO_state us i s)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (i : index) (s : State) (us : UMO_state), valid_state_prop (preloaded_with_all_messages_vlsm UMO) us → valid_state_prop (preloaded_with_all_messages_vlsm (U i)) s → valid_state_prop (preloaded_with_all_messages_vlsm UMO) (lift_to_UMO_state us i s)by eapply VLSM_weak_embedding_valid_state, lift_to_preloaded_free_weak_embedding. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
is: index
s: State
us: UMO_state
Hcsp: valid_state_prop (preloaded_with_all_messages_vlsm UMO) usvalid_state_prop (preloaded_with_all_messages_vlsm (U is)) s → valid_state_prop (preloaded_with_all_messages_vlsm UMO) (lift_to_UMO_state us is s)
Every state in a UMO component gives rise to a unique trace leading to this
state, which we can then lift to the UMO protocol.
Definition UMO_component_state2trace
(s : UMO_state) (i : index) : list UMO_transition_item :=
lift_to_UMO_trace s i (state2trace (s i)).
Iterating UMO_component_state2trace shows that every reachable UMO state
contains a trace that leads to this state. However, this trace is not unique,
because we can concatenate the lifted traces in any order.
Fixpoint UMO_state2trace_aux (us : UMO_state) (is : list index) : list UMO_transition_item := match is with | [] => [] | i :: is' => UMO_state2trace_aux (state_update _ us i (MkState [] (idx i))) is' ++ UMO_component_state2trace us i end. Definition UMO_state2trace (us : UMO_state) : list UMO_transition_item := UMO_state2trace_aux us (enum index).Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, constrained_state_prop UMO us → finite_constrained_trace_init_to UMO (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, constrained_state_prop UMO us → finite_constrained_trace_init_to UMO (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us (enum index))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: constrained_state_prop UMO us
Hall: ∀ i : index, i ∉ enum index → us i = MkState [] (idx i)finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us (enum index))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, (∀ i : index, i ∉ enum index → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us (enum index))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (is : list index) (us : UMO_state), (∀ i : index, i ∉ is → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) us []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) us (UMO_state2trace_aux (state_update U us i (MkState [] (idx i))) is' ++ UMO_component_state2trace us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) us []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) (λ n : index, MkState [] (idx n)) []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO us(λ n : index, MkState [] (idx n)) = usby constructor; apply initial_state_is_valid; compute.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) (λ n : index, MkState [] (idx n)) []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO us(λ n : index, MkState [] (idx n)) = usby apply not_elem_of_nil.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hall: ∀ i : index, i ∉ [] → us i = MkState [] (idx i)
Hvsp: constrained_state_prop UMO us
i: indexi ∉ []Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) us (UMO_state2trace_aux (state_update U us i (MkState [] (idx i))) is' ++ UMO_component_state2trace us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) ?m (UMO_state2trace_aux (state_update U us i (MkState [] (idx i))) is')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) ?m us (UMO_component_state2trace us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (λ n : index, MkState [] (idx n)) ?m (UMO_state2trace_aux (state_update U us i (MkState [] (idx i))) is')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us∀ i0 : index, i0 ∉ is' → state_update U us i (MkState [] (idx i)) i0 = MkState [] (idx i0)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usconstrained_state_prop UMO (state_update U us i (MkState [] (idx i)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us∀ i0 : index, i0 ∉ is' → state_update U us i (MkState [] (idx i)) i0 = MkState [] (idx i0)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
j: index
Hj: j ∉ is'state_update U us i (MkState [] (idx i)) j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
j: index
Hj: j ∉ is'
n: i ≠ jus j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
j: index
Hj: j ∉ is'
n: i ≠ jj ∉ i :: is'by intros [].Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
j: index
Hj: j ∉ is'
n: i ≠ j¬ (j = i ∨ j ∈ is')by apply pre_composite_free_update_state_with_initial.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usconstrained_state_prop UMO (state_update U us i (MkState [] (idx i)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (state_update U us i (MkState [] (idx i))) us (UMO_component_state2trace us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (state_update U us i (MkState [] (idx i))) (state_update U us i (us i)) (UMO_component_state2trace us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO usfinite_constrained_trace_from_to (U i) (MkState [] (idx i)) (us i) (state2trace (us i))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
Hvsp': constrained_state_prop (U i) (us i)finite_constrained_trace_from_to (U i) (MkState [] (idx i)) (us i) (state2trace (us i))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
s: VLSM.state (preloaded_with_all_messages_vlsm (U i))
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm (U i)) s (us i) tr
Hinit: initial_state_prop sfinite_constrained_trace_from_to (U i) (MkState [] (idx i)) (us i) (state2trace (us i))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
s: VLSM.state (preloaded_with_all_messages_vlsm (U i))
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm (U i)) s (us i) tr
Hinit: initial_state_prop sMkState [] (idx i) = sAddress: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
s: VLSM.state (preloaded_with_all_messages_vlsm (U i))
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm (U i)) (MkState [] (idx i)) (us i) tr
Hinit: initial_state_prop (MkState [] (idx i))finite_constrained_trace_from_to (U i) (MkState [] (idx i)) (us i) (state2trace (us i))by inversion Hinit; destruct s; cbn in *; subst.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
s: VLSM.state (preloaded_with_all_messages_vlsm (U i))
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm (U i)) s (us i) tr
Hinit: initial_state_prop sMkState [] (idx i) = sby eapply finite_constrained_trace_init_to_state2trace. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i: index
is': list index
IHis': ∀ us : UMO_state, (∀ i : index, i ∉ is' → us i = MkState [] (idx i)) → constrained_state_prop UMO us → finite_valid_trace_from_to (preloaded_with_all_messages_vlsm UMO) (`(vs0 UMO)) us (UMO_state2trace_aux us is')
us: UMO_state
Hall: ∀ i0 : index, i0 ∉ i :: is' → us i0 = MkState [] (idx i0)
Hvsp: constrained_state_prop UMO us
s: VLSM.state (preloaded_with_all_messages_vlsm (U i))
tr: list transition_item
Hfvt: finite_valid_trace_from_to (preloaded_with_all_messages_vlsm (U i)) (MkState [] (idx i)) (us i) tr
Hinit: initial_state_prop (MkState [] (idx i))finite_constrained_trace_from_to (U i) (MkState [] (idx i)) (us i) (state2trace (us i))
It turns out that finite_constrained_trace_init_to_UMO_state2trace
also holds for valid states.
Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, valid_state_prop UMO us → finite_valid_trace_init_to UMO (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ us : UMO_state, valid_state_prop UMO us → finite_valid_trace_init_to UMO (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: valid_state_prop UMO usfinite_valid_trace_init_to UMO (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: valid_state_prop UMO usfinite_constrained_trace_init_to (free_composite_vlsm U) (`(vs0 UMO)) us (UMO_state2trace us)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: valid_state_prop UMO usconstrained_state_prop UMO usby apply vlsm_incl_preloaded_with_all_messages_vlsm. Qed. Fixpoint UMO_obs_aux (us : UMO_state) (is : list index) : list Observation := match is with | [] => [] | i :: is' => UMO_obs_aux (state_update _ us i (MkState [] (idx i))) is' ++ obs (us i) end. Definition UMO_obs (us : UMO_state) : list Observation := UMO_obs_aux us (enum index). Fixpoint UMO_sentMessages_aux (us : UMO_state) (is : list index) : set Message := match is with | [] => [] | i :: is' => UMO_sentMessages_aux (state_update _ us i (MkState [] (idx i))) is' ++ sentMessages (us i) end. Definition UMO_sentMessages (us : UMO_state) : set Message := UMO_sentMessages_aux us (enum index). Fixpoint UMO_receivedMessages_aux (us : UMO_state) (is : list index) : set Message := match is with | [] => [] | i :: is' => UMO_receivedMessages_aux (state_update _ us i (MkState [] (idx i))) is' ++ receivedMessages (us i) end. Definition UMO_receivedMessages (us : UMO_state) : set Message := UMO_receivedMessages_aux us (enum index). Fixpoint UMO_messages_aux (us : UMO_state) (is : list index) : set Message := match is with | [] => [] | i :: is' => UMO_messages_aux (state_update _ us i (MkState [] (idx i))) is' ++ messages (us i) end. Definition UMO_messages (us : UMO_state) : set Message := UMO_messages_aux us (enum index).Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
Hvsp: valid_state_prop UMO usVLSM_incl_part UMO (preloaded_vlsm_machine UMO (λ _ : Message, True))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (i : index), constrained_state_prop UMO us → constrained_state_prop UMO (state_update U us i (MkState [] (idx i)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (i : index), constrained_state_prop UMO us → constrained_state_prop UMO (state_update U us i (MkState [] (idx i)))by apply pre_composite_free_update_state_with_initial. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
i: index
Hvsp: constrained_state_prop UMO usconstrained_state_prop UMO (state_update U us i (MkState [] (idx i)))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → m ∈ UMO_sentMessages us ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → m ∈ UMO_sentMessages us ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)m ∈ UMO_sentMessages us ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ enum index → us i = MkState [] (idx i)m ∈ UMO_sentMessages us ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ enum index → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages us ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (is : list index) (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)m ∈ UMO_sentMessages_aux us (i' :: is') ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i') ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i') ↔ m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)m ∈ sentMessages (us i) → m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i') → m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)m ∈ sentMessages (us i) → m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'm ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i')Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'm ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'm ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'm ∈ sentMessages (state_update U us i' (MkState [] (idx i')) i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'constrained_state_prop UMO (state_update U us i' (MkState [] (idx i')))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'idx i = adr (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'∀ i : index, i ∉ is' → state_update U us i' (MkState [] (idx i')) i = MkState [] (idx i)by state_update_simpl.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'm ∈ sentMessages (state_update U us i' (MkState [] (idx i')) i)by apply constrained_state_prop_state_update_init.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'constrained_state_prop UMO (state_update U us i' (MkState [] (idx i')))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'idx i = adr (state m)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'constrained_state_prop (UMO_component (adr (state m))) (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'UMO_reachable ?P (us i)by rewrite <- Hidx; apply Hvsp'.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'constrained_state_prop (UMO_component (adr (state m))) (us i)by eapply UMO_reachable_constrained_state_prop, Hvsp'.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'UMO_reachable ?P (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'∀ i : index, i ∉ is' → state_update U us i' (MkState [] (idx i')) i = MkState [] (idx i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'
j: index
Hnin: j ∉ is'state_update U us i' (MkState [] (idx i')) j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
j: index
Hall: ∀ i : index, i ∉ j :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ j
Hnin: j ∉ is'state_update U us j (MkState [] (idx j)) j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'
j: index
Hnin: j ∉ is'
n0: i' ≠ jstate_update U us i' (MkState [] (idx i')) j = MkState [] (idx j)by state_update_simpl.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
j: index
Hall: ∀ i : index, i ∉ j :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ j
Hnin: j ∉ is'state_update U us j (MkState [] (idx j)) j = MkState [] (idx j)by state_update_simpl; apply Hall; inversion 1.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i)
n: i ≠ i'
j: index
Hnin: j ∉ is'
n0: i' ≠ jstate_update U us i' (MkState [] (idx i')) j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is' ∨ m ∈ sentMessages (us i') → m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i')m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'm ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i')m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i')
Hin': adr (state m) = adr (us i')m ∈ sentMessages (us i)by apply Inj0 in Hidx; subst.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (us i')
Hin': adr (state m) = adr (us i')
Hidx: idx i = idx i'm ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'm ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (state_update U us i' (MkState [] (idx i')) i)m ∈ sentMessages (us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'constrained_state_prop UMO (state_update U us i' (MkState [] (idx i')))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'∀ i : index, i ∉ is' → state_update U us i' (MkState [] (idx i')) i = MkState [] (idx i)by destruct (decide (i = i')); subst; state_update_simpl; [inversion Hin |].Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ sentMessages (state_update U us i' (MkState [] (idx i')) i)m ∈ sentMessages (us i)by apply constrained_state_prop_state_update_init.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'constrained_state_prop UMO (state_update U us i' (MkState [] (idx i')))Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'∀ i : index, i ∉ is' → state_update U us i' (MkState [] (idx i')) i = MkState [] (idx i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'
j: index
Hnin: j ∉ is'state_update U us i' (MkState [] (idx i')) j = MkState [] (idx j)by apply Hall; inversion 1. Qed.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM BaseELMO.Message
i': index
is': list index
IHis': ∀ (us : UMO_state) (m : BaseELMO.Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → (∀ i0 : index, i0 ∉ is' → us i0 = MkState [] (idx i0)) → m ∈ UMO_sentMessages_aux us is' ↔ m ∈ sentMessages (us i)
us: UMO_state
m: BaseELMO.Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)
Hall: ∀ i : index, i ∉ i' :: is' → us i = MkState [] (idx i)
Hvsp': ∀ j : index, constrained_state_prop (UMO_component (idx j)) (us j)
Hin: m ∈ UMO_sentMessages_aux (state_update U us i' (MkState [] (idx i'))) is'
j: index
Hnin: j ∉ is'
n: i' ≠ jus j = MkState [] (idx j)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → m ∈ UMO_sentMessages us ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' (us i) ∨ s' = us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message∀ (us : UMO_state) (m : Message) (i : index), constrained_state_prop UMO us → idx i = adr (state m) → m ∈ UMO_sentMessages us ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' (us i) ∨ s' = us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)m ∈ UMO_sentMessages us ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' (us i) ∨ s' = us i)Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)m ∈ sentMessages (us i) ↔ (let s' := state m <+> MkObservation Send m in state_suffix s' (us i) ∨ s' = us i)by apply @UMO_reachable_constrained_state_prop with (idx i), (preloaded_valid_state_projection _ _ _ Hvsp). Qed. End sec_UMOProtocol. End sec_UMO. Arguments UMO_reachable_ind' [Address]%type_scope (C P Hinit Hextend)%function_scope s Hs.Address: Type
EqDecision0: EqDecision Address
State:= BaseELMO.State: Type
Observation:= BaseELMO.Observation: Type
Message:= BaseELMO.Message: Type
index: Type
EqDecision1: EqDecision index
H: finite.Finite index
idx: index → Address
Inj0: Inj eq eq idx
U:= λ i : index, UMO_component (idx i): index → VLSM Message
us: UMO_state
m: Message
i: index
Hvsp: constrained_state_prop UMO us
Hidx: idx i = adr (state m)UMO_reachable ?Goal (us i)