From stdpp Require Import prelude. From Coq Require Import Eqdep Fin FunctionalExtensionality. From VLSM.Lib Require Import Preamble. From VLSM.Core Require Import VLSM PreloadedVLSM VLSMProjections Composition.
Core: VLSM Equivocation
X
is a VLSM which starts as a
regular machine X, and then, at any moment:
- can spawn a new machine in a (potentially) different initial state.
- can perform valid transitions on any of its internal machines
- can fork any of its internal machines by duplicating its state and then using
the given label and message to transition on the new fork.
Section sec_equivocator_vlsm. Context {message : Type} (X : VLSM message) .
The state of such a machine will be abstracted using
1. A natural
n
, stating the number of copies of the original machine
2. A state of X
for each 1..n+1
#[local] Definition bounded_state_copies := {n : nat & Fin.t (S n) -> state X}.
To preserve determinism we need to enhance the labels to indicate what copy
of the machine will be used for a transition.
To achieve this, we'll define the following label variants:
- Spawn
s
to extend the state with a new machine initialized withs
- ContinueWith
n
l
, to transition on copyn
using labell
- ForkWith
n
l
, to extend the state with a new machine initialized with the current state of machinen
and to transition on that copy using labell
.
Inductive EquivocatorLabel : Type := | Spawn : state X -> EquivocatorLabel | ContinueWith : nat -> label X -> EquivocatorLabel | ForkWith : nat -> label X -> EquivocatorLabel. Definition equivocator_type : VLSMType message := {| state := bounded_state_copies ; label := EquivocatorLabel |}. Definition equivocator_state : Type := state equivocator_type. Definition equivocator_label : Type := label equivocator_type.
The number of machine copies in the given state.
Definition equivocator_state_n (es : equivocator_state) := S (projT1 es).
The index of the last machine copies in the given state.
Definition equivocator_state_last (es : equivocator_state) := projT1 es. Definition equivocator_state_s (es : equivocator_state) := projT2 es.message: Type
X: VLSM message
es: equivocator_stateequivocator_state_n es = S (equivocator_state_last es)done. Qed. Definition mk_singleton_state (s : state X) : equivocator_state := existT 0 (fun _ => s).message: Type
X: VLSM message
es: equivocator_stateequivocator_state_n es = S (equivocator_state_last es)message: Type
X: VLSM message
s: equivocator_state
i: nat
li: i < equivocator_state_n s
j: nat
lj: j < equivocator_state_n s
Heq: i = jequivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)message: Type
X: VLSM message
s: equivocator_state
i: nat
li: i < equivocator_state_n s
j: nat
lj: j < equivocator_state_n s
Heq: i = jequivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)by replace (nat_to_fin li) with (nat_to_fin lj) by apply of_nat_ext. Qed.message: Type
X: VLSM message
s: equivocator_state
j: nat
li, lj: j < equivocator_state_n sequivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)message: Type
X: VLSM message
s: equivocator_state
i1, i2: fin (equivocator_state_n s)i1 = i2 → equivocator_state_s s i1 = equivocator_state_s s i2message: Type
X: VLSM message
s: equivocator_state
i1, i2: fin (equivocator_state_n s)i1 = i2 → equivocator_state_s s i1 = equivocator_state_s s i2message: Type
X: VLSM message
s: equivocator_state
i1, i2: fin (equivocator_state_n s)
Heq: i1 = i2equivocator_state_s s i1 = equivocator_state_s s i2by apply (inj fin_to_nat). Qed. Definition is_singleton_state (s : equivocator_state) : Prop := equivocator_state_n s = 1.message: Type
X: VLSM message
s: equivocator_state
i1, i2: fin (equivocator_state_n s)
Heq: i1 = i2i1 = i2message: Type
X: VLSM message
s: equivocator_stateDecision (is_singleton_state s)by apply Nat.eq_dec. Qed. Definition is_equivocating_state (s : equivocator_state) : Prop := not (is_singleton_state s).message: Type
X: VLSM message
s: equivocator_stateDecision (is_singleton_state s)message: Type
X: VLSM message
s: equivocator_stateDecision (is_equivocating_state s)message: Type
X: VLSM message
s: equivocator_stateDecision (is_equivocating_state s)by apply is_singleton_state_dec. Qed.message: Type
X: VLSM message
s: equivocator_stateDecision (is_singleton_state s)
Attempts to obtain the state of the internal machine with index
i
from an equivocator_state. Fails when index i
does not refer to a
machine.
Definition equivocator_state_project (bs : equivocator_state) (i : nat) : option (state X) := match (decide (i < equivocator_state_n bs)) with | left lt_in => Some (equivocator_state_s bs (of_nat_lt lt_in)) | _ => None end.message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: i < equivocator_state_n sequivocator_state_project s i = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: i < equivocator_state_n sequivocator_state_project s i = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: i < equivocator_state_n smatch decide (i < equivocator_state_n s) with | left lt_in => Some (equivocator_state_s s (nat_to_fin lt_in)) | right _ => None end = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi, H: i < equivocator_state_n sSome (equivocator_state_s s (nat_to_fin H)) = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi, H: i < equivocator_state_n sequivocator_state_s s (nat_to_fin H) = equivocator_state_s s (nat_to_fin Hi)by rewrite !fin_to_nat_to_fin. Qed.message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi, H: i < equivocator_state_n snat_to_fin H = nat_to_fin Himessage: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n sequivocator_state_project s i = Nonemessage: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n sequivocator_state_project s i = Noneby case_decide; [lia |]. Qed.message: Type
X: VLSM message
s: equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n smatch decide (i < equivocator_state_n s) with | left lt_in => Some (equivocator_state_s s (nat_to_fin lt_in)) | right _ => None end = Nonemessage: Type
X: VLSM message
s: equivocator_state
i: nat
si: state Xequivocator_state_project s i = Some si → i < equivocator_state_n sby unfold equivocator_state_project; case_decide. Qed.message: Type
X: VLSM message
s: equivocator_state
i: nat
si: state Xequivocator_state_project s i = Some si → i < equivocator_state_n smessage: Type
X: VLSM message
s: equivocator_state
i: natequivocator_state_project s i = None → ¬ i < equivocator_state_n smessage: Type
X: VLSM message
s: equivocator_state
i: natequivocator_state_project s i = None → ¬ i < equivocator_state_n sby case_decide; [congruence | intro; lia]. Qed. #[local] Ltac destruct_equivocator_state_project' es i si Hi Hpr := destruct (equivocator_state_project es i) as [si |] eqn: Hpr ; [specialize (equivocator_state_project_Some_rev _ _ _ Hpr) as Hi | specialize (equivocator_state_project_None_rev _ _ Hpr) as Hi]. #[local] Ltac destruct_equivocator_state_project es i si Hi := let Hpr := fresh "Hpr" in destruct_equivocator_state_project' es i si Hi Hpr ; clear Hpr.message: Type
X: VLSM message
s: equivocator_state
i: natmatch decide (i < equivocator_state_n s) with | left lt_in => Some (equivocator_state_s s (nat_to_fin lt_in)) | right _ => None end = None → ¬ i < equivocator_state_n s
Extensionality result, reducing the proof of the equality of two
equivocator_states to the equality of their projections.
message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 ies1 = es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 ies1 = es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 iequivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
H: equivocator_state_last es1 = equivocator_state_last es2es1 = es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 iequivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
Hlst_es1: equivocator_state_project es1 (equivocator_state_last es1) = equivocator_state_project es2 (equivocator_state_last es1)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
Hlst_es1: equivocator_state_project es1 (equivocator_state_last es1) = equivocator_state_project es2 (equivocator_state_last es1)
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = equivocator_state_project es2 (equivocator_state_last es2)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
Hlst_es1: equivocator_state_project es1 (equivocator_state_last es1) = equivocator_state_project es2 (equivocator_state_last es1)
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = equivocator_state_project es2 (equivocator_state_last es2)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
Hlst_es1: equivocator_state_project es2 (equivocator_state_last es1) = equivocator_state_project es1 (equivocator_state_last es1)
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = equivocator_state_project es2 (equivocator_state_last es2)equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
lst1: state X
Hlst_es1: equivocator_state_project es2 (equivocator_state_last es1) = Some lst1
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = equivocator_state_project es2 (equivocator_state_last es2)
Hi1: equivocator_state_last es1 < equivocator_state_n es1equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
lst1: state X
Hlst_es1: equivocator_state_project es2 (equivocator_state_last es1) = Some lst1
lst2: state X
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = Some lst2
Hi1: equivocator_state_last es1 < equivocator_state_n es1
Hi2: equivocator_state_last es2 < equivocator_state_n es2equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
lst1: state X
Hlst_es1: equivocator_state_last es1 < equivocator_state_n es2
lst2: state X
Hlst_es2: equivocator_state_project es1 (equivocator_state_last es2) = Some lst2
Hi1: equivocator_state_last es1 < equivocator_state_n es1
Hi2: equivocator_state_last es2 < equivocator_state_n es2equivocator_state_last es1 = equivocator_state_last es2lia.message: Type
X: VLSM message
es1, es2: equivocator_state
Hlst1: equivocator_state_n es1 = S (equivocator_state_last es1)
Hlst2: equivocator_state_n es2 = S (equivocator_state_last es2)
lst1: state X
Hlst_es1: equivocator_state_last es1 < equivocator_state_n es2
lst2: state X
Hlst_es2: equivocator_state_last es2 < equivocator_state_n es1
Hi1: equivocator_state_last es1 < equivocator_state_n es1
Hi2: equivocator_state_last es2 < equivocator_state_n es2equivocator_state_last es1 = equivocator_state_last es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
H: equivocator_state_last es1 = equivocator_state_last es2es1 = es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
H: equivocator_state_last es1 = equivocator_state_last es2{p : projT1 es1 = projT1 es2 & eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) p = projT2 es2}message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
H: equivocator_state_last es1 = equivocator_state_last es2eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H = projT2 es2message: Type
X: VLSM message
es1, es2: equivocator_state
Hext: ∀ i : nat, equivocator_state_project es1 i = equivocator_state_project es2 i
H: equivocator_state_last es1 = equivocator_state_last es2
x: fin (S (projT1 es2))eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H x = projT2 es2 xmessage: Type
X: VLSM message
es1, es2: equivocator_state
x: fin (S (projT1 es2))
Hext: equivocator_state_project es1 x = equivocator_state_project es2 x
H: equivocator_state_last es1 = equivocator_state_last es2eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H x = projT2 es2 xmessage: Type
X: VLSM message
es1, es2: equivocator_state
x: fin (S (projT1 es2))
Hext: equivocator_state_project es1 x = equivocator_state_project es2 x
H: equivocator_state_last es1 = equivocator_state_last es2
Hx: x < S (projT1 es2)eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H x = projT2 es2 xmessage: Type
X: VLSM message
es1, es2: equivocator_state
x: fin (S (projT1 es2))
Hx: x < S (projT1 es2)
Hext: equivocator_state_project es1 x = Some (equivocator_state_s es2 (nat_to_fin Hx))
H: equivocator_state_last es1 = equivocator_state_last es2eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H x = projT2 es2 xmessage: Type
X: VLSM message
es1, es2: equivocator_state
x: fin (S (projT1 es2))
Hx: x < S (projT1 es2)
Hext: equivocator_state_project es1 x = Some (equivocator_state_s es2 (nat_to_fin Hx))
H: equivocator_state_last es1 = equivocator_state_last es2eq_rect (projT1 es1) (λ a : nat, fin (S a) → state X) (projT2 es1) (projT1 es2) H (nat_to_fin Hx) = projT2 es2 (nat_to_fin Hx)message: Type
X: VLSM message
x2: nat
s1, s2: fin (S x2) → state X
x: fin (S x2)
Hx: x < S x2
Hext: equivocator_state_project (existT x2 s1) x = Some (s2 (nat_to_fin Hx))s1 (nat_to_fin Hx) = s2 (nat_to_fin Hx)by inversion Hext. Qed.message: Type
X: VLSM message
x2: nat
s1, s2: fin (S x2) → state X
x: fin (S x2)
Hx: x < S x2
Hext: Some (equivocator_state_s (existT x2 s1) (nat_to_fin Hx)) = Some (s2 (nat_to_fin Hx))s1 (nat_to_fin Hx) = s2 (nat_to_fin Hx)
The original state index is present in any equivocator state.
message: Type
X: VLSM message
s: equivocator_state0 < equivocator_state_n sby pose proof (equivocator_state_last_n s); lia. Qed. Definition equivocator_state_zero (es : equivocator_state) : state X := equivocator_state_s es (nat_to_fin (Hzero es)).message: Type
X: VLSM message
s: equivocator_state0 < equivocator_state_n smessage: Type
X: VLSM message
es: equivocator_stateequivocator_state_project es 0 = Some (equivocator_state_zero es)message: Type
X: VLSM message
es: equivocator_stateequivocator_state_project es 0 = Some (equivocator_state_zero es)by case_decide; [| lia]. Qed. Definition equivocator_state_update (bs : equivocator_state) (i : nat) (si : state X) : equivocator_state := @existT nat (fun n => Fin.t (S n) -> state X) (equivocator_state_last bs) (fun j => if decide (i = j) then si else equivocator_state_s bs j).message: Type
X: VLSM message
es: equivocator_statematch decide (0 < S (projT1 es)) with | left lt_in => Some (equivocator_state_s es (nat_to_fin lt_in)) | right _ => None end = Some (equivocator_state_zero es)
Some basic properties for equivocator_state_update.
message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state Xequivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bsdone. Qed.message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state Xequivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bsmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state Xequivocator_state_last (equivocator_state_update bs i si) = equivocator_state_last bsdone. Qed.message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state Xequivocator_state_last (equivocator_state_update bs i si) = equivocator_state_last bsmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = jequivocator_state_project (equivocator_state_update bs i si) j = Some simessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = jequivocator_state_project (equivocator_state_update bs i si) j = Some simessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bsequivocator_state_project (equivocator_state_update bs i si) j = Some simessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hi': j < equivocator_state_n (equivocator_state_update bs i si)Some sj = Some simessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hi': j < equivocator_state_n (equivocator_state_update bs i si)equivocator_state_project (equivocator_state_update bs i si) j = Some simessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hj: j < equivocator_state_n bs
Hij: i = j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hi': j < equivocator_state_n (equivocator_state_update bs i si)Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hi')) = Some simessage: Type
X: VLSM message
bs: equivocator_state
si: state X
j: nat
Hi': j < equivocator_state_n (equivocator_state_update bs j si)(if decide (j = nat_to_fin Hi') then si else equivocator_state_s bs (nat_to_fin Hi')) = siby rewrite fin_to_nat_to_fin. Qed.message: Type
X: VLSM message
bs: equivocator_state
si: state X
j: nat
Hi': j < equivocator_state_n (equivocator_state_update bs j si)j = nat_to_fin Hi'message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ jequivocator_state_project (equivocator_state_update bs i si) j = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ jequivocator_state_project (equivocator_state_update bs i si) j = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bsequivocator_state_project (equivocator_state_update bs i si) j = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hj: j < equivocator_state_n (equivocator_state_update bs i si)Some sj = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = None
Hj: ¬ j < equivocator_state_n (equivocator_state_update bs i si)None = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hj: j < equivocator_state_n (equivocator_state_update bs i si)Some sj = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hj, Hj': j < equivocator_state_n (equivocator_state_update bs i si)Some sj = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = Some sj
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hj': j < equivocator_state_n bsSome sj = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bsSome sj = equivocator_state_project bs jmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bsSome sj = Some (equivocator_state_s bs (nat_to_fin Hj'))message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bssj = equivocator_state_s bs (nat_to_fin Hj')message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sj(if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = equivocator_state_s bs (nat_to_fin Hj')message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sjequivocator_state_s bs (nat_to_fin Hj) = equivocator_state_s bs (nat_to_fin Hj')message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sji ≠ nat_to_fin Hjmessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sjequivocator_state_s bs (nat_to_fin Hj) = equivocator_state_s bs (nat_to_fin Hj')by rewrite !fin_to_nat_to_fin.message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sjnat_to_fin Hj = nat_to_fin Hj'message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sji ≠ nat_to_fin Hjby rewrite !fin_to_nat_to_fin in Hcontra; congruence.message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
sj: state X
Hj: j < equivocator_state_n (equivocator_state_update bs i si)
Hpr: Some (equivocator_state_s (equivocator_state_update bs i si) (nat_to_fin Hj)) = Some sj
Hj': j < equivocator_state_n bs
H0: (if decide (i = nat_to_fin Hj) then si else equivocator_state_s bs (nat_to_fin Hj)) = sj
Hcontra: i = nat_to_fin HjFalsemessage: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = None
Hj: ¬ j < equivocator_state_n (equivocator_state_update bs i si)None = equivocator_state_project bs jby rewrite (equivocator_state_project_None _ _ Hj). Qed. #[local] Ltac destruct_equivocator_state_update_project' es i s j Hj Hij Hpr := let Hsize := fresh "Hsize" in pose proof (equivocator_state_update_size es i s) as Hsize ; destruct (decide (j < equivocator_state_n es)) as [Hj | Hj] ; [destruct (decide (i = j)) as [Hij | Hij] ; [specialize (equivocator_state_update_project_eq es i s j Hj Hij) as Hpr | specialize (equivocator_state_update_project_neq es i s j Hij) as Hpr] | specialize (equivocator_state_project_None (equivocator_state_update es i s) j Hj) as Hpr] ; rewrite Hpr in * ; clear Hsize. #[local] Ltac destruct_equivocator_state_update_project es i s j Hj Hij := let Hpr := fresh "Hpr" in destruct_equivocator_state_update_project' es i s j Hj Hij Hpr ; clear Hpr.message: Type
X: VLSM message
bs: equivocator_state
i: nat
si: state X
j: nat
Hij: i ≠ j
Heq: equivocator_state_n (equivocator_state_update bs i si) = equivocator_state_n bs
Hpr: equivocator_state_project (equivocator_state_update bs i si) j = None
Hj: ¬ j < equivocator_state_n bsNone = equivocator_state_project bs j
Extends an equivocator_state with a new state of the original machine.
Program Definition equivocator_state_extend (bs : equivocator_state) (s : state X) : equivocator_state := existT (S (equivocator_state_last bs)) (fun j => if decide (S (equivocator_state_last bs) = j) then s else equivocator_state_s bs (@of_nat_lt j (S (equivocator_state_last bs)) _)).message: Type
X: VLSM message∀ bs : equivocator_state, state X → ∀ j : fin (S (S (equivocator_state_last bs))), S (equivocator_state_last bs) ≠ j → j < S (equivocator_state_last bs)by intros; specialize (fin_to_nat_lt j); lia. Qed.message: Type
X: VLSM message∀ bs : equivocator_state, state X → ∀ j : fin (S (S (equivocator_state_last bs))), S (equivocator_state_last bs) ≠ j → j < S (equivocator_state_last bs)message: Type
X: VLSM message
bs: equivocator_state
s: state Xequivocator_state_n (equivocator_state_extend bs s) = S (equivocator_state_n bs)done. Qed.message: Type
X: VLSM message
bs: equivocator_state
s: state Xequivocator_state_n (equivocator_state_extend bs s) = S (equivocator_state_n bs)message: Type
X: VLSM message
bs: equivocator_state
s: state Xequivocator_state_last (equivocator_state_extend bs s) = equivocator_state_n bsdone. Qed.message: Type
X: VLSM message
bs: equivocator_state
s: state Xequivocator_state_last (equivocator_state_extend bs s) = equivocator_state_n bsmessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n esequivocator_state_project (equivocator_state_extend es s) i = equivocator_state_project es imessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n esequivocator_state_project (equivocator_state_extend es s) i = equivocator_state_project es imessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n esequivocator_state_project (equivocator_state_extend es s) i = Some (equivocator_state_s es (nat_to_fin Hi))message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)equivocator_state_project (equivocator_state_extend es s) i = Some (equivocator_state_s es (nat_to_fin Hi))message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)equivocator_state_project (equivocator_state_extend es s) i = Some (equivocator_state_s es (nat_to_fin Hi))message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)Some (equivocator_state_s (equivocator_state_extend es s) (nat_to_fin Hi')) = Some (equivocator_state_s es (nat_to_fin Hi))message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)equivocator_state_s (equivocator_state_extend es s) (nat_to_fin Hi') = equivocator_state_s es (nat_to_fin Hi)message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)match decide (S (equivocator_state_last es) = nat_to_fin Hi') with | left _ => s | right x => equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') x)) end = equivocator_state_s es (nat_to_fin Hi)message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)match decide (S (equivocator_state_last es) = nat_to_fin Hi') with | left _ => s | right x => equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') x)) end = equivocator_state_s es (nat_to_fin Hi)message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)
e: S (equivocator_state_last es) = nat_to_fin Hi's = equivocator_state_s es (nat_to_fin Hi)message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') n)) = equivocator_state_s es (nat_to_fin Hi)by rewrite fin_to_nat_to_fin in e; lia.message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)
e: S (equivocator_state_last es) = nat_to_fin Hi's = equivocator_state_s es (nat_to_fin Hi)message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') n)) = equivocator_state_s es (nat_to_fin Hi)by rewrite !fin_to_nat_to_fin. Qed.message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
Hes_size: equivocator_state_n es = S (equivocator_state_last es)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') n) = nat_to_fin Himessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n esequivocator_state_project (equivocator_state_extend es s) i = Some smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n esequivocator_state_project (equivocator_state_extend es s) i = Some smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)equivocator_state_project (equivocator_state_extend es s) i = Some smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)equivocator_state_project (equivocator_state_extend es s) i = Some smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)Some (equivocator_state_s (equivocator_state_extend es s) (nat_to_fin Hi')) = Some smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)equivocator_state_s (equivocator_state_extend es s) (nat_to_fin Hi') = smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)match decide (S (equivocator_state_last es) = nat_to_fin Hi') with | left _ => s | right x => equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') x)) end = smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'equivocator_state_s es (nat_to_fin (equivocator_state_extend_obligation_1 es (nat_to_fin Hi') n)) = smessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'S (equivocator_state_last es) = nat_to_fin Hi'by specialize (equivocator_state_last_n es) as Hes_size; lia. Qed.message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: i = equivocator_state_n es
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)
Hi': i < equivocator_state_n (equivocator_state_extend es s)
n: S (equivocator_state_last es) ≠ nat_to_fin Hi'S (equivocator_state_last es) = imessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: equivocator_state_n es < iequivocator_state_project (equivocator_state_extend es s) i = Nonemessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: equivocator_state_n es < iequivocator_state_project (equivocator_state_extend es s) i = Nonemessage: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: equivocator_state_n es < i
ex: equivocator_state
Heqex: ex = equivocator_state_extend es sequivocator_state_project ex i = Noneby destruct_equivocator_state_project ex i si Hi''; subst; [lia |]. Qed. #[local] Ltac destruct_equivocator_state_extend_project' es s i Hi Hpr := let Hni := fresh "Hni" in let Hni' := fresh "Hni" in destruct (decide (i < equivocator_state_n es)) as [Hi | Hni] ; [| destruct (decide (i = equivocator_state_n es)) as [Hi | Hni']] ; [| | assert (Hi : equivocator_state_n es < i) by lia] ; [specialize (equivocator_state_extend_project_1 es s i Hi) as Hpr | specialize (equivocator_state_extend_project_2 es s i Hi) as Hpr | specialize (equivocator_state_extend_project_3 es s i Hi) as Hpr] ; rewrite Hpr in *. #[local] Ltac destruct_equivocator_state_extend_project es s i Hi := let Hpr := fresh "Hpr" in destruct_equivocator_state_extend_project' es s i Hi Hpr ; clear Hpr. Program Definition equivocator_state_append (es1 es2 : equivocator_state) : equivocator_state := existT (equivocator_state_n es1 + equivocator_state_last es2) (fun j => let (nj, Hnj) := to_nat j in match decide (nj < equivocator_state_n es1) with | left lt_in => equivocator_state_s es1 (of_nat_lt lt_in) | right ge_in => let (k, Hk) := not_lt_plus_dec ge_in in equivocator_state_s es2 (@of_nat_lt k (equivocator_state_n es2) _) end).message: Type
X: VLSM message
es: equivocator_state
s: state X
i: nat
Hi: equivocator_state_n es < i
ex: equivocator_state
Heqex: ex = equivocator_state_extend es s
Hsize: equivocator_state_n (equivocator_state_extend es s) = S (equivocator_state_n es)equivocator_state_project ex i = Nonemessage: Type
X: VLSM message∀ es1 es2 : equivocator_state, fin (S (equivocator_state_n es1 + equivocator_state_last es2)) → ∀ nj : nat, nj < S (equivocator_state_n es1 + equivocator_state_last es2) → ∀ (filtered_var := decide (nj < equivocator_state_n es1)) (ge_in : ¬ nj < equivocator_state_n es1), right ge_in = filtered_var → ∀ k : nat, k + equivocator_state_n es1 = nj → k < equivocator_state_n es2by intros; specialize (equivocator_state_last_n es2) as Hlst_es2; lia. Qed.message: Type
X: VLSM message∀ es1 es2 : equivocator_state, fin (S (equivocator_state_n es1 + equivocator_state_last es2)) → ∀ nj : nat, nj < S (equivocator_state_n es1 + equivocator_state_last es2) → ∀ (filtered_var := decide (nj < equivocator_state_n es1)) (ge_in : ¬ nj < equivocator_state_n es1), right ge_in = filtered_var → ∀ k : nat, k + equivocator_state_n es1 = nj → k < equivocator_state_n es2message: Type
X: VLSM message
es1, es2: equivocator_stateequivocator_state_n (equivocator_state_append es1 es2) = equivocator_state_n es1 + equivocator_state_n es2by destruct es1, es2; unfold equivocator_state_n; cbn; lia. Qed.message: Type
X: VLSM message
es1, es2: equivocator_stateequivocator_state_n (equivocator_state_append es1 es2) = equivocator_state_n es1 + equivocator_state_n es2message: Type
X: VLSM message
es1, es2: equivocator_stateequivocator_state_last (equivocator_state_append es1 es2) = equivocator_state_last es2 + equivocator_state_n es1by destruct es1, es2; unfold equivocator_state_n; cbn; lia. Qed.message: Type
X: VLSM message
es1, es2: equivocator_stateequivocator_state_last (equivocator_state_append es1 es2) = equivocator_state_last es2 + equivocator_state_n es1message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n sequivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s imessage: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n sequivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s imessage: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)equivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s imessage: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)equivocator_state_project (equivocator_state_append s s') i = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'equivocator_state_project (equivocator_state_append s s') i = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'
Hi': i < equivocator_state_n (equivocator_state_append s s')equivocator_state_project (equivocator_state_append s s') i = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'
Hi': i < equivocator_state_n (equivocator_state_append s s')Some (equivocator_state_s (equivocator_state_append s s') (nat_to_fin Hi')) = Some (equivocator_state_s s (nat_to_fin Hi))message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: i < equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s) (j : nat) (lj : j < equivocator_state_n s), i = j → equivocator_state_s s (nat_to_fin li) = equivocator_state_s s (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'
Hi': i < equivocator_state_n (equivocator_state_append s s')equivocator_state_s (equivocator_state_append s s') (nat_to_fin Hi') = equivocator_state_s s (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
s': equivocator_state
i: nat
Hi: i < equivocator_state_n (existT n1 bs1)
Hpi: ∀ (i : nat) (li : i < equivocator_state_n (existT n1 bs1)) (j : nat) (lj : j < equivocator_state_n (existT n1 bs1)), i = j → equivocator_state_s (existT n1 bs1) (nat_to_fin li) = equivocator_state_s (existT n1 bs1) (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append (existT n1 bs1) s') = equivocator_state_n (existT n1 bs1) + equivocator_state_n s'
Hi': i < equivocator_state_n (equivocator_state_append (existT n1 bs1) s')equivocator_state_s (equivocator_state_append (existT n1 bs1) s') (nat_to_fin Hi') = equivocator_state_s (existT n1 bs1) (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < equivocator_state_n (existT n1 bs1)
Hpi: ∀ (i : nat) (li : i < equivocator_state_n (existT n1 bs1)) (j : nat) (lj : j < equivocator_state_n (existT n1 bs1)), i = j → equivocator_state_s (existT n1 bs1) (nat_to_fin li) = equivocator_state_s (existT n1 bs1) (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append (existT n1 bs1) (existT n2 bs2)) = equivocator_state_n (existT n1 bs1) + equivocator_state_n (existT n2 bs2)
Hi': i < equivocator_state_n (equivocator_state_append (existT n1 bs1) (existT n2 bs2))equivocator_state_s (equivocator_state_append (existT n1 bs1) (existT n2 bs2)) (nat_to_fin Hi') = equivocator_state_s (existT n1 bs1) (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < S (projT1 (existT n1 bs1))
Hpi: ∀ (i : nat) (li : i < S (projT1 (existT n1 bs1))) (j : nat) (lj : j < S (projT1 (existT n1 bs1))), i = j → equivocator_state_s (existT n1 bs1) (nat_to_fin li) = equivocator_state_s (existT n1 bs1) (nat_to_fin lj)
Hsize: S (projT1 (equivocator_state_append (existT n1 bs1) (existT n2 bs2))) = S (projT1 (existT n1 bs1)) + S (projT1 (existT n2 bs2))
Hi': i < S (projT1 (equivocator_state_append (existT n1 bs1) (existT n2 bs2)))equivocator_state_s (equivocator_state_append (existT n1 bs1) (existT n2 bs2)) (nat_to_fin Hi') = equivocator_state_s (existT n1 bs1) (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < S n1
Hpi: ∀ (i : nat) (li : i < S n1) (j : nat) (lj : j < S n1), i = j → bs1 (nat_to_fin li) = bs1 (nat_to_fin lj)
Hsize: S (S (n1 + n2)) = S (n1 + S n2)
Hi': i < S (S (n1 + n2))(let (nj, Hnj) := to_nat (nat_to_fin Hi') in match decide (nj < equivocator_state_n (existT n1 bs1)) as anonymous' return (anonymous' = decide (nj < equivocator_state_n (existT n1 bs1)) → state X) with | left lt_in => λ _ : left lt_in = decide (nj < equivocator_state_n (existT n1 bs1)), bs1 (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (nj < equivocator_state_n (existT n1 bs1)), bs2 (nat_to_fin (equivocator_state_append_obligation_1 (existT n1 bs1) (existT n2 bs2) nj Hnj ge_in (nj - equivocator_state_n (existT n1 bs1)) (Preamble.not_lt_plus_dec_obligation_1 (equivocator_state_n (existT n1 bs1)) nj ge_in))) end eq_refl) = bs1 (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < S n1
Hpi: ∀ (i : nat) (li : i < S n1) (j : nat) (lj : j < S n1), i = j → bs1 (nat_to_fin li) = bs1 (nat_to_fin lj)
Hsize: S (S (n1 + n2)) = S (n1 + S n2)
Hi': i < S (S (n1 + n2))match decide (i < equivocator_state_n (existT n1 bs1)) as anonymous' return (anonymous' = decide (i < equivocator_state_n (existT n1 bs1)) → state X) with | left lt_in => λ _ : left lt_in = decide (i < equivocator_state_n (existT n1 bs1)), bs1 (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (i < equivocator_state_n (existT n1 bs1)), bs2 (nat_to_fin (equivocator_state_append_obligation_1 (existT n1 bs1) (existT n2 bs2) i Hi' ge_in (i - equivocator_state_n (existT n1 bs1)) (Preamble.not_lt_plus_dec_obligation_1 (equivocator_state_n (existT n1 bs1)) i ge_in))) end eq_refl = bs1 (nat_to_fin Hi)message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < S n1
Hpi: ∀ (i : nat) (li : i < S n1) (j : nat) (lj : j < S n1), i = j → bs1 (nat_to_fin li) = bs1 (nat_to_fin lj)
Hsize: S (S (n1 + n2)) = S (n1 + S n2)
Hi': i < S (S (n1 + n2))match decide (i < S (projT1 (existT n1 bs1))) as anonymous' return (anonymous' = decide (i < S (projT1 (existT n1 bs1))) → state X) with | left lt_in => λ _ : left lt_in = decide (i < S (projT1 (existT n1 bs1))), bs1 (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (i < S (projT1 (existT n1 bs1))), bs2 (nat_to_fin (equivocator_state_append_obligation_1 (existT n1 bs1) (existT n2 bs2) i Hi' ge_in (i - S (projT1 (existT n1 bs1))) (Preamble.not_lt_plus_dec_obligation_1 (S (projT1 (existT n1 bs1))) i ge_in))) end eq_refl = bs1 (nat_to_fin Hi)by case_decide; [apply Hpi | lia]. Qed.message: Type
X: VLSM message
n1: nat
bs1: fin (S n1) → state X
n2: nat
bs2: fin (S n2) → state X
i: nat
Hi: i < S n1
Hpi: ∀ (i : nat) (li : i < S n1) (j : nat) (lj : j < S n1), i = j → bs1 (nat_to_fin li) = bs1 (nat_to_fin lj)
Hsize: S (S (n1 + n2)) = S (n1 + S n2)
Hi': i < S (S (n1 + n2))match decide (i < S n1) as anonymous' return (anonymous' = decide (i < S n1) → state X) with | left lt_in => λ _ : left lt_in = decide (i < S n1), bs1 (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (i < S n1), bs2 (nat_to_fin (equivocator_state_append_obligation_1 (existT n1 bs1) (existT n2 bs2) i Hi' ge_in (i - S n1) (Preamble.not_lt_plus_dec_obligation_1 (S n1) i ge_in))) end eq_refl = bs1 (nat_to_fin Hi)message: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n sequivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s' kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n sequivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s' kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)equivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s' kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'equivocator_state_project (equivocator_state_append s s') i = equivocator_state_project s' kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'equivocator_state_project append i = equivocator_state_project s' kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hprs': equivocator_state_project s' k = Some s'k
Hk: k < equivocator_state_n s'
appendi: state X
Hprapp: equivocator_state_project append i = Some appendi
Hi': i < equivocator_state_n appendSome appendi = Some s'kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hprs': equivocator_state_project s' k = Some s'k
Hk: k < equivocator_state_n s'
appendi: state X
Hprapp: equivocator_state_project append i = Some appendi
Hi': i < equivocator_state_n appendappendi = s'kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hprs': equivocator_state_project s' k = Some s'k
Hk: k < equivocator_state_n s'
appendi: state X
Hi': i < equivocator_state_n append
Hprapp: Some (equivocator_state_s append (nat_to_fin Hi')) = Some appendiappendi = s'kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hprs': equivocator_state_project s' k = Some s'k
Hk: k < equivocator_state_n s'
appendi: state X
Hi': i < equivocator_state_n appendequivocator_state_s append (nat_to_fin Hi') = s'kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hk: k < equivocator_state_n s'
Hprs': Some (equivocator_state_s s' (nat_to_fin Hk)) = Some s'k
appendi: state X
Hi': i < equivocator_state_n appendequivocator_state_s append (nat_to_fin Hi') = s'kmessage: Type
X: VLSM message
s, s': equivocator_state
i, k: nat
Hi: i = k + equivocator_state_n s
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
append: equivocator_state
Heqappend: append = equivocator_state_append s s'
Hsize: equivocator_state_n append = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hk: k < equivocator_state_n s'
appendi: state X
Hi': i < equivocator_state_n appendequivocator_state_s append (nat_to_fin Hi') = equivocator_state_s s' (nat_to_fin Hk)message: Type
X: VLSM message
s, s': equivocator_state
k: nat
Hpi: ∀ (i : nat) (li : i < equivocator_state_n s') (j : nat) (lj : j < equivocator_state_n s'), i = j → equivocator_state_s s' (nat_to_fin li) = equivocator_state_s s' (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append s s') = equivocator_state_n s + equivocator_state_n s'
s'k: state X
Hk: k < equivocator_state_n s'
appendi: state X
Hi': k + equivocator_state_n s < equivocator_state_n (equivocator_state_append s s')equivocator_state_s (equivocator_state_append s s') (nat_to_fin Hi') = equivocator_state_s s' (nat_to_fin Hk)message: Type
X: VLSM message
x: nat
s: fin (S x) → state X
x0: nat
s0: fin (S x0) → state X
k: nat
Hpi: ∀ (i : nat) (li : i < equivocator_state_n (existT x0 s0)) (j : nat) (lj : j < equivocator_state_n (existT x0 s0)), i = j → equivocator_state_s (existT x0 s0) (nat_to_fin li) = equivocator_state_s (existT x0 s0) (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append (existT x s) (existT x0 s0)) = equivocator_state_n (existT x s) + equivocator_state_n (existT x0 s0)
s'k: state X
Hk: k < equivocator_state_n (existT x0 s0)
appendi: state X
Hi': k + equivocator_state_n (existT x s) < equivocator_state_n (equivocator_state_append (existT x s) (existT x0 s0))equivocator_state_s (equivocator_state_append (existT x s) (existT x0 s0)) (nat_to_fin Hi') = equivocator_state_s (existT x0 s0) (nat_to_fin Hk)message: Type
X: VLSM message
x: nat
s: fin (S x) → state X
x0: nat
s0: fin (S x0) → state X
k: nat
Hpi: ∀ (i : nat) (li : i < equivocator_state_n (existT x0 s0)) (j : nat) (lj : j < equivocator_state_n (existT x0 s0)), i = j → s0 (nat_to_fin li) = s0 (nat_to_fin lj)
Hsize: equivocator_state_n (equivocator_state_append (existT x s) (existT x0 s0)) = S (x + equivocator_state_n (existT x0 s0))
s'k: state X
Hk: k < equivocator_state_n (existT x0 s0)
appendi: state X
Hi': k + equivocator_state_n (existT x s) < equivocator_state_n (equivocator_state_append (existT x s) (existT x0 s0))(let (nj, Hnj) := to_nat (nat_to_fin Hi') in match decide (nj < equivocator_state_n (existT x s)) as anonymous' return (anonymous' = decide (nj < equivocator_state_n (existT x s)) → state X) with | left lt_in => λ _ : left lt_in = decide (nj < equivocator_state_n (existT x s)), s (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (nj < equivocator_state_n (existT x s)), s0 (nat_to_fin (equivocator_state_append_obligation_1 (existT x s) (existT x0 s0) nj Hnj ge_in (nj - equivocator_state_n (existT x s)) (Preamble.not_lt_plus_dec_obligation_1 (equivocator_state_n (existT x s)) nj ge_in))) end eq_refl) = s0 (nat_to_fin Hk)message: Type
X: VLSM message
x: nat
s: fin (S x) → state X
x0: nat
s0: fin (S x0) → state X
k: nat
Hpi: ∀ (i : nat) (li : i < S (projT1 (existT x0 s0))) (j : nat) (lj : j < S (projT1 (existT x0 s0))), i = j → s0 (nat_to_fin li) = s0 (nat_to_fin lj)
Hsize: S (projT1 (equivocator_state_append (existT x s) (existT x0 s0))) = S (x + S (projT1 (existT x0 s0)))
s'k: state X
Hk: k < S (projT1 (existT x0 s0))
appendi: state X
Hi': k + S (projT1 (existT x s)) < S (projT1 (equivocator_state_append (existT x s) (existT x0 s0)))(let (nj, Hnj) := to_nat (nat_to_fin Hi') in match decide (nj < S (projT1 (existT x s))) as anonymous' return (anonymous' = decide (nj < S (projT1 (existT x s))) → state X) with | left lt_in => λ _ : left lt_in = decide (nj < S (projT1 (existT x s))), s (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (nj < S (projT1 (existT x s))), s0 (nat_to_fin (equivocator_state_append_obligation_1 (existT x s) (existT x0 s0) nj Hnj ge_in (nj - S (projT1 (existT x s))) (Preamble.not_lt_plus_dec_obligation_1 (S (projT1 (existT x s))) nj ge_in))) end eq_refl) = s0 (nat_to_fin Hk)message: Type
X: VLSM message
x: nat
s: fin (S x) → state X
x0: nat
s0: fin (S x0) → state X
k: nat
Hpi: ∀ (i : nat) (li : i < S x0) (j : nat) (lj : j < S x0), i = j → s0 (nat_to_fin li) = s0 (nat_to_fin lj)
Hsize: S (S (x + x0)) = S (x + S x0)
s'k: state X
Hk: k < S x0
appendi: state X
Hi': k + S x < S (S (x + x0))(let (nj, Hnj) := to_nat (nat_to_fin Hi') in match decide (nj < S x) as anonymous' return (anonymous' = decide (nj < S x) → state X) with | left lt_in => λ _ : left lt_in = decide (nj < S x), s (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (nj < S x), s0 (nat_to_fin (equivocator_state_append_obligation_1 (existT x s) (existT x0 s0) nj Hnj ge_in (nj - S x) (Preamble.not_lt_plus_dec_obligation_1 (S x) nj ge_in))) end eq_refl) = s0 (nat_to_fin Hk)by case_decide; [| apply Hpi]; lia. Qed.message: Type
X: VLSM message
x: nat
s: fin (S x) → state X
x0: nat
s0: fin (S x0) → state X
k: nat
Hpi: ∀ (i : nat) (li : i < S x0) (j : nat) (lj : j < S x0), i = j → s0 (nat_to_fin li) = s0 (nat_to_fin lj)
Hsize: S (S (x + x0)) = S (x + S x0)
s'k: state X
Hk: k < S x0
appendi: state X
Hi': k + S x < S (S (x + x0))match decide (k + S x < S x) as anonymous' return (anonymous' = decide (k + S x < S x) → state X) with | left lt_in => λ _ : left lt_in = decide (k + S x < S x), s (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (k + S x < S x), s0 (nat_to_fin (equivocator_state_append_obligation_1 (existT x s) (existT x0 s0) (k + S x) Hi' ge_in (k + S x - S x) (Preamble.not_lt_plus_dec_obligation_1 (S x) (k + S x) ge_in))) end eq_refl = s0 (nat_to_fin Hk)message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n s + equivocator_state_n s'equivocator_state_project (equivocator_state_append s s') i = Nonemessage: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n s + equivocator_state_n s'equivocator_state_project (equivocator_state_append s s') i = Nonemessage: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: ¬ i < equivocator_state_n s + equivocator_state_n s'¬ i < equivocator_state_n (equivocator_state_append s s')by cbn in *; lia. Qed. #[local] Ltac destruct_equivocator_state_append_project' es es' i Hi k Hk Hpr := let Hi' := fresh "Hi" in destruct (decide (i < equivocator_state_n es)) as [Hi | Hi']; swap 1 2; [destruct (decide (i < equivocator_state_n es + equivocator_state_n es')) as [Hi | Hi]; swap 1 2; [specialize (equivocator_state_append_project_3 es es' i Hi) as Hpr | apply not_lt_plus_dec in Hi' as [k Hk]; specialize (equivocator_state_append_project_2 es es' i k (eq_sym Hk)) as Hpr] | specialize (equivocator_state_append_project_1 es es' i Hi) as Hpr] ; rewrite Hpr in * . #[local] Ltac destruct_equivocator_state_append_project es es' i Hi k Hk := let Hpr := fresh "Hpr" in destruct_equivocator_state_append_project' es es' i Hi k Hk Hpr ; clear Hpr.message: Type
X: VLSM message
s, s': equivocator_state
i: nat
Hi: ¬ i < S (projT1 s) + S (projT1 s')¬ i < S (projT1 (existT (equivocator_state_n s + projT1 s') (λ j : fin (S (equivocator_state_n s + projT1 s')), let (nj, Hnj) := to_nat j in match decide (nj < equivocator_state_n s) as anonymous' return (anonymous' = decide (nj < equivocator_state_n s) → state X) with | left lt_in => λ _ : left lt_in = decide (nj < equivocator_state_n s), equivocator_state_s s (nat_to_fin lt_in) | right ge_in => λ _ : right ge_in = decide (nj < equivocator_state_n s), let (k, Hk) := not_lt_plus_dec ge_in in equivocator_state_s s' (nat_to_fin (equivocator_state_append_obligation_1 s s' nj Hnj ge_in k Hk)) end eq_refl)))message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: is_singleton_state es2equivocator_state_append es1 es2 = equivocator_state_extend es1 (equivocator_state_zero es2)message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: is_singleton_state es2equivocator_state_append es1 es2 = equivocator_state_extend es1 (equivocator_state_zero es2)message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: is_singleton_state es2∀ i : nat, equivocator_state_project (equivocator_state_append es1 es2) i = equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: is_singleton_state es2
i: natequivocator_state_project (equivocator_state_append es1 es2) i = equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: is_singleton_state es2
i: natequivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project (equivocator_state_append es1 es2) imessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i: natequivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project (equivocator_state_append es1 es2) imessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = Nonemessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project es2 kmessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project es1 iby apply equivocator_state_extend_project_3; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = Nonemessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project es2 kmessage: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n es2Some (equivocator_state_zero es2) = equivocator_state_project es2 kby f_equal; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project es2 0 = equivocator_state_project es2 kby rewrite equivocator_state_extend_project_1 by lia. Qed.message: Type
X: VLSM message
es1, es2: equivocator_state
Hsingleton: equivocator_state_n es2 = 1
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_extend es1 (equivocator_state_zero es2)) i = equivocator_state_project es1 imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state Xequivocator_state_extend (equivocator_state_append es1 es2) s = equivocator_state_append es1 (equivocator_state_extend es2 s)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state Xequivocator_state_extend (equivocator_state_append es1 es2) s = equivocator_state_append es1 (equivocator_state_extend es2 s)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X∀ i : nat, equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project (equivocator_state_append es1 (equivocator_state_extend es2 s)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: natequivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project (equivocator_state_append es1 (equivocator_state_extend es2 s)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_extend es2 s)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = Nonemessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_extend es2 s)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project es1 imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_extend es2 s)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = Nonemessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + S (equivocator_state_n es2)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = Noneby rewrite equivocator_state_append_size; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + S (equivocator_state_n es2)equivocator_state_n (equivocator_state_append es1 es2) < imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_extend es2 s)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)
e: k = equivocator_state_n es2equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)
n: k ≠ equivocator_state_n es2equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)
e: k = equivocator_state_n es2equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
Hi: equivocator_state_n es2 + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (equivocator_state_n es2 + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) (equivocator_state_n es2)by rewrite equivocator_state_append_size; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
Hi: equivocator_state_n es2 + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)equivocator_state_n es2 + equivocator_state_n es1 = equivocator_state_n (equivocator_state_append es1 es2)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)
n: k ≠ equivocator_state_n es2equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_extend es2 s) kby rewrite equivocator_state_append_size; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + S (equivocator_state_n es2)
n: k ≠ equivocator_state_n es2k + equivocator_state_n es1 < equivocator_state_n (equivocator_state_append es1 es2)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_extend (equivocator_state_append es1 es2) s) i = equivocator_state_project es1 imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_append es1 es2) i = equivocator_state_project es1 imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1i < equivocator_state_n (equivocator_state_append es1 es2)by rewrite equivocator_state_append_project_1.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_append es1 es2) i = equivocator_state_project es1 iby rewrite equivocator_state_append_size; lia. Qed.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
i: nat
Hi: i < equivocator_state_n es1i < equivocator_state_n (equivocator_state_append es1 es2)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n: natequivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s = equivocator_state_append es1 (equivocator_state_update es2 n s)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n: natequivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s = equivocator_state_append es1 (equivocator_state_update es2 n s)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n: nat∀ i : nat, equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_append es1 (equivocator_state_update es2 n s)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: natequivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_append es1 (equivocator_state_update es2 n s)) imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = Nonemessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project es1 imessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = Noneby rewrite equivocator_state_update_size, equivocator_state_append_size in *; lia.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: nat
Hi0: ¬ i < equivocator_state_n es1
Hi: ¬ i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)¬ i < equivocator_state_n (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s)message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)
e: n = kequivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)
n0: n ≠ kequivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)
e: n = kequivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + equivocator_state_n es2equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (k + equivocator_state_n es1) s) (k + equivocator_state_n es1) = equivocator_state_project (equivocator_state_update es2 k s) kby rewrite equivocator_state_update_project_eq; [| lia |].message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
k: nat
Hi: k + equivocator_state_n es1 < equivocator_state_n es1 + equivocator_state_n es2Some s = equivocator_state_project (equivocator_state_update es2 k s) kmessage: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)
n0: n ≠ kequivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project (equivocator_state_update es2 n s) kby apply equivocator_state_append_project_2 with (k := k).message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i, k: nat
Hk: k + equivocator_state_n es1 = i
Hi: i < equivocator_state_n es1 + equivocator_state_n (equivocator_state_update es2 n s)
n0: n ≠ kequivocator_state_project (equivocator_state_append es1 es2) i = equivocator_state_project es2 kby rewrite equivocator_state_update_project_neq, equivocator_state_append_project_1 by lia. Qed. (* An [equivocator_state] has the [initial_state_prop]erty if it only contains one state of original machine, and that state is initial. *) Definition equivocator_initial_state_prop (bs : equivocator_state) : Prop := is_singleton_state bs /\ initial_state_prop X (equivocator_state_zero bs). Definition equivocator_initial_state : Type := {bs : equivocator_state | equivocator_initial_state_prop bs}. Program Definition equivocator_s0 : equivocator_initial_state := exist _ (mk_singleton_state (proj1_sig (vs0 X))) _.message: Type
X: VLSM message
es1, es2: equivocator_state
s: state X
n, i: nat
Hi: i < equivocator_state_n es1equivocator_state_project (equivocator_state_update (equivocator_state_append es1 es2) (n + equivocator_state_n es1) s) i = equivocator_state_project es1 imessage: Type
X: VLSM message(λ bs : equivocator_state, equivocator_initial_state_prop bs) (mk_singleton_state (`(vs0 X)))message: Type
X: VLSM message(λ bs : equivocator_state, equivocator_initial_state_prop bs) (mk_singleton_state (`(vs0 X)))by split; [| destruct (vs0 X)]. Defined. #[export] Instance equivocator_initial_state_inh : Inhabited equivocator_initial_state := populate equivocator_s0. Definition equivocator_transition (bl : equivocator_label) (bsom : equivocator_state * option message) : equivocator_state * option message := match bl with | Spawn sn => (* creating a new machine with initial state sn*) (equivocator_state_extend bsom.1 sn, None) | ContinueWith i l => match equivocator_state_project bsom.1 i with | None => bsom | Some si => let (si', om') := transition X l (si, bsom.2) in (equivocator_state_update bsom.1 i si', om') end | ForkWith i l => match equivocator_state_project bsom.1 i with | None => bsom | Some si => let (si', om') := transition X l (si, bsom.2) in (equivocator_state_extend bsom.1 si', om') end end. Definition equivocator_valid (bl : equivocator_label) (bsom : equivocator_state * option message) : Prop := match bl with | Spawn sn => (* state is initial *) initial_state_prop X sn /\ bsom.2 = None | ContinueWith i l | ForkWith i l => match equivocator_state_project bsom.1 i with | Some si => valid X l (si, bsom.2) | None => False end end. Definition equivocator_vlsm_machine : VLSMMachine equivocator_type := {| initial_state_prop := equivocator_initial_state_prop ; initial_message_prop := @initial_message_prop _ _ X ; transition := equivocator_transition ; valid := equivocator_valid |}. Definition equivocator_vlsm : VLSM message := mk_vlsm equivocator_vlsm_machine.message: Type
X: VLSM messageis_singleton_state (existT 0 (λ _ : fin 1, `(vs0 X))) ∧ initial_state_prop (`(vs0 X))message: Type
X: VLSM messagestrong_embedding_initial_message_preservation X equivocator_vlsmby intro. Qed.message: Type
X: VLSM messagestrong_embedding_initial_message_preservation X equivocator_vlsmmessage: Type
X: VLSM messagestrong_embedding_initial_message_preservation equivocator_vlsm Xby intro. Qed.message: Type
X: VLSM messagestrong_embedding_initial_message_preservation equivocator_vlsm Xmessage: Type
X: VLSM message
is: equivocator_state
i: nat
s: state X
Hs: equivocator_state_project is i = Some sinitial_state_prop is → initial_state_prop smessage: Type
X: VLSM message
is: equivocator_state
i: nat
s: state X
Hs: equivocator_state_project is i = Some sinitial_state_prop is → initial_state_prop smessage: Type
X: VLSM message
is: equivocator_state
i: nat
s: state X
Hs: equivocator_state_project is i = Some s
Hzero: is_singleton_state is
Hinit: initial_state_prop (equivocator_state_zero is)initial_state_prop smessage: Type
X: VLSM message
is: equivocator_state
i: nat
s: state X
Hs: equivocator_state_project is i = Some s
Hzero: is_singleton_state is
Hinit: initial_state_prop (equivocator_state_zero is)
Hlt_i: i < equivocator_state_n isinitial_state_prop sby rewrite equivocator_state_project_zero in Hs; inversion Hs. Qed.message: Type
X: VLSM message
is: equivocator_state
i: nat
s: state X
Hs: equivocator_state_project is 0 = Some s
Hzero: is_singleton_state is
Hinit: initial_state_prop (equivocator_state_zero is)
Hlt_i: 0 < equivocator_state_n isinitial_state_prop smessage: Type
X: VLSM message
s: state Xinitial_state_prop s → initial_state_prop (mk_singleton_state s)done. Qed. End sec_equivocator_vlsm. #[export] Hint Rewrite @equivocator_state_update_size : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_update_lst : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_update_project_eq using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_update_project_neq using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_extend_size using done : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_extend_lst using done : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_extend_project_1 using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_extend_project_2 using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_extend_project_3 using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_append_size using done : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_append_lst using done : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_append_project_1 using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_append_project_2 using first [done | lia] : equivocator_state_update. #[export] Hint Rewrite @equivocator_state_append_project_3 using first [done | lia] : equivocator_state_update. Ltac equivocator_state_update_simpl := autounfold with state_update in *; autorewrite with equivocator_state_update state_update in *. Arguments Spawn {_ _} _ : assert. Arguments ContinueWith {_ _} _ _ : assert. Arguments ForkWith {_ _} _ _ : assert. Arguments equivocator_state_n {_ _} _ : assert. Arguments equivocator_state_last {_ _} _ : assert. Arguments equivocator_state_zero {_ _} _ : assert. Arguments equivocator_state_s {_ _} _ _ : assert. Arguments equivocator_state_project {_ _} _ _ : assert. Arguments equivocator_state_update {_ _} _ _ _ : assert. Arguments equivocator_state_extend {_ _} _ _ : assert. Arguments equivocator_state_append {_ _} _ _ : assert. Ltac destruct_equivocator_state_project' es i si Hi Hpr := destruct (equivocator_state_project es i) as [si |] eqn: Hpr ; [specialize (equivocator_state_project_Some_rev _ _ _ _ Hpr) as Hi | specialize (equivocator_state_project_None_rev _ _ _ Hpr) as Hi]. Ltac destruct_equivocator_state_project es i si Hi := let Hpr := fresh "Hpr" in destruct_equivocator_state_project' es i si Hi Hpr ; clear Hpr. Ltac destruct_equivocator_state_update_project' es i s j Hj Hij Hpr := let Hsize := fresh "Hsize" in pose proof (equivocator_state_update_size _ es i s) as Hsize ; destruct (decide (j < equivocator_state_n es)) as [Hj | Hj]; swap 1 2 ; [specialize (equivocator_state_project_None _ (equivocator_state_update es i s) j Hj) as Hpr | destruct (decide (i = j)) as [Hij | Hij] ; [specialize (equivocator_state_update_project_eq _ es i s j Hj Hij) as Hpr | specialize (equivocator_state_update_project_neq _ es i s j Hij) as Hpr]] ; rewrite Hpr in * ; clear Hsize. Ltac destruct_equivocator_state_update_project es i s j Hj Hij := let Hpr := fresh "Hpr" in destruct_equivocator_state_update_project' es i s j Hj Hij Hpr ; clear Hpr. Ltac destruct_equivocator_state_extend_project' es s i Hi Hpr := let Hni := fresh "Hni" in let Hni' := fresh "Hni" in destruct (decide (i < equivocator_state_n es)) as [Hi | Hni] ; [| destruct (decide (i = equivocator_state_n es)) as [Hi | Hni']] ; [| | assert (Hi : equivocator_state_n es < i) by lia] ; [specialize (equivocator_state_extend_project_1 _ es s i Hi) as Hpr | specialize (equivocator_state_extend_project_2 _ es s i Hi) as Hpr | specialize (equivocator_state_extend_project_3 _ es s i Hi) as Hpr] ; rewrite Hpr in *. Ltac destruct_equivocator_state_extend_project es s i Hi := let Hpr := fresh "Hpr" in destruct_equivocator_state_extend_project' es s i Hi Hpr ; clear Hpr. Section sec_equivocator_vlsm_valid_state_projections. Context {message : Type} (X : VLSM message) .message: Type
X: VLSM message
s: state Xinitial_state_prop s → initial_state_prop (mk_singleton_state s)
When projecting an equivocator trace on one copy, we start from its final
state and trace back transitions, making sure to follow ForkWith transitions
back to their original copy and to stop on Spawn transitions.
To do that we need to track the current copy, or whether we already reached
the initial state.
- NewMachine
s
indicates that a Spawns
was already reached for the copy being tracked - Existing
i
indicates that we're currently tracking copyi
Inductive MachineDescriptor : Type :=
| NewMachine : state X -> MachineDescriptor
| Existing : nat -> MachineDescriptor.
The MachineDescriptor associated to an equivocator_label tells us
which copy should we continue with if the current transition is relevant
for the copy we're tracking.
Definition equivocator_label_descriptor (l : equivocator_label X) : MachineDescriptor := match l with | Spawn sn => NewMachine sn | ContinueWith i _ | ForkWith i _ => Existing i end. Definition is_newmachine_descriptor (d : MachineDescriptor) : Prop := match d with | NewMachine _ => True | _ => False end.message: Type
X: VLSM message
d: MachineDescriptorDecision (is_newmachine_descriptor d)message: Type
X: VLSM message
d: MachineDescriptorDecision (is_newmachine_descriptor d)message: Type
X: VLSM message
s: state XDecision (is_newmachine_descriptor (NewMachine s))message: Type
X: VLSM message
n: natDecision (is_newmachine_descriptor (Existing n))by left.message: Type
X: VLSM message
s: state XDecision (is_newmachine_descriptor (NewMachine s))by right; itauto. Qed.message: Type
X: VLSM message
n: natDecision (is_newmachine_descriptor (Existing n))
Projecting an equivocator_state over a MachineDescriptor.
Definition equivocator_state_descriptor_project
(s : equivocator_state X)
(descriptor : MachineDescriptor)
: state X
:=
match descriptor with
| NewMachine sn => sn
| Existing j => default (equivocator_state_zero s) (equivocator_state_project s j)
end.
Whether a MachineDescriptor can be used to project an
equivocator_state to a regular state.
The NewMachine descriptor signals that an equivocation has occurred
starting a new machine, thus we require the argument to be initial.
For an Existing descriptor, the index of the descriptor must
refer to an existing machine in the current state.
Definition proper_descriptor (d : MachineDescriptor) (s : state (equivocator_vlsm X)) := match d with | NewMachine sn => initial_state_prop X sn | Existing i => is_Some (equivocator_state_project s i) end. Definition proper_equivocator_label (l : equivocator_label X) (s : equivocator_state X) := proper_descriptor (equivocator_label_descriptor l) s.
Existing-only descriptor.
Definition existing_descriptor (d : MachineDescriptor) (s : state (equivocator_vlsm X)) := match d with | Existing i => is_Some (equivocator_state_project s i) | _ => False end.message: Type
X: VLSM messageRelDecision existing_descriptormessage: Type
X: VLSM messageRelDecision existing_descriptormessage: Type
X: VLSM message
d: MachineDescriptor
s: state (equivocator_vlsm X)Decision (existing_descriptor d s)message: Type
X: VLSM message
s0: state X
s: state (equivocator_vlsm X)Decision Falsemessage: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)Decision (is_Some (equivocator_state_project s n))by right; itauto.message: Type
X: VLSM message
s0: state X
s: state (equivocator_vlsm X)Decision Falsemessage: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)Decision (is_Some (equivocator_state_project s n))message: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)
_sn: state X
Hn: n < equivocator_state_n sDecision (is_Some (Some _sn))message: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)
Hn: ¬ n < equivocator_state_n sDecision (is_Some None)by left.message: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)
_sn: state X
Hn: n < equivocator_state_n sDecision (is_Some (Some _sn))by right; intros [si Hi]; congruence. Qed. Definition existing_equivocator_label (l : equivocator_label X) := match l with Spawn _ => False | _ => True end.message: Type
X: VLSM message
n: nat
s: state (equivocator_vlsm X)
Hn: ¬ n < equivocator_state_n sDecision (is_Some None)message: Type
X: VLSM message
l: equivocator_label X
Hs: existing_equivocator_label llabel Xby destruct l. Defined. Definition proper_existing_equivocator_label (l : equivocator_label X) (s : equivocator_state X) := existing_descriptor (equivocator_label_descriptor l) s.message: Type
X: VLSM message
l: equivocator_label X
Hs: existing_equivocator_label llabel Xmessage: Type
X: VLSM message
l: equivocator_label X
s: equivocator_state X
Hs: proper_existing_equivocator_label l sexisting_equivocator_label lby destruct l; [inversion Hs | ..]. Qed.message: Type
X: VLSM message
l: equivocator_label X
s: equivocator_state X
Hs: proper_existing_equivocator_label l sexisting_equivocator_label lmessage: Type
X: VLSM message
d: MachineDescriptor
s: state (equivocator_vlsm X)
Hned: existing_descriptor d sproper_descriptor d sby destruct d. Qed. (* TODO: derive some some simpler lemmas about the equivocator operations, or a simpler way of defining the equivocator_transition - it's not nice to need to pick apart these cases from inside equivocator_transition inside of so many proofs. *)message: Type
X: VLSM message
d: MachineDescriptor
s: state (equivocator_vlsm X)
Hned: existing_descriptor d sproper_descriptor d s
If the state obtained after one transition has no equivocation, then
the descriptor of the label of the transition must be Existing 0 false
message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Hv: valid l (s, iom)
Ht: transition l (s, iom) = (s', oom)
Hs': is_singleton_state X s'∃ li : label X, l = ContinueWith 0 limessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Hv: valid l (s, iom)
Ht: transition l (s, iom) = (s', oom)
Hs': is_singleton_state X s'∃ li : label X, l = ContinueWith 0 limessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Hv: valid l (s, iom)
Ht: transition l (s, iom) = (s', oom)
Hs': equivocator_state_n s' = 1∃ li : label X, l = ContinueWith 0 limessage: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
sei: state X
Hv: valid l (sei, iom)
si': state X
Hs': equivocator_state_n s = 1
Ht: (equivocator_state_update s ei si', oom) = (equivocator_state_update s ei si', oom)
Hei: ei < equivocator_state_n s∃ li : label X, ContinueWith ei l = ContinueWith 0 limessage: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
sei: state X
Hv: valid l (sei, iom)
si': state X
Hs': S (equivocator_state_n s) = 1
Ht: (equivocator_state_extend s si', oom) = (equivocator_state_extend s si', oom)
Hei: ei < equivocator_state_n s∃ li : label X, ForkWith ei l = ContinueWith 0 liby exists l; f_equal; lia.message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
sei: state X
Hv: valid l (sei, iom)
si': state X
Hs': equivocator_state_n s = 1
Ht: (equivocator_state_update s ei si', oom) = (equivocator_state_update s ei si', oom)
Hei: ei < equivocator_state_n s∃ li : label X, ContinueWith ei l = ContinueWith 0 liby lia. Qed.message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
sei: state X
Hv: valid l (sei, iom)
si': state X
Hs': S (equivocator_state_n s) = 1
Ht: (equivocator_state_extend s si', oom) = (equivocator_state_extend s si', oom)
Hei: ei < equivocator_state_n s∃ li : label X, ForkWith ei l = ContinueWith 0 li
If the state obtained after one transition has no equivocation, then
the state prior to the transition has no equivocation as well.
message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)is_singleton_state X s' → is_singleton_state X smessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)is_singleton_state X s' → is_singleton_state X sby destruct l as [sn | ei l | ei l]; cbn in Ht ; [inversion Ht; rewrite equivocator_state_extend_size; cbv; lia | ..] ; destruct (equivocator_state_project _ _) ; [| by inversion Ht | | by inversion Ht] ; destruct (transition _ _ _) as (si', om') ; inversion Ht; subst; clear Ht; equivocator_state_update_simpl. Qed.message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)equivocator_state_n s' = 1 → equivocator_state_n s = 1message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)equivocator_state_n s ≤ equivocator_state_n s'message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)equivocator_state_n s ≤ equivocator_state_n s'message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
Hex_size: ∀ s0 : state X, equivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)equivocator_state_n s ≤ equivocator_state_n s'message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
s0, si': state X
Hex_size: ∀ s0 : state X, equivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)equivocator_state_n s ≤ equivocator_state_n (equivocator_state_update s ei si')message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
s0, si': state X
Hex_size: ∀ s0 : state X, equivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)equivocator_state_n s ≤ equivocator_state_n (equivocator_state_extend s si')by equivocator_state_update_simpl.message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
s0, si': state X
Hex_size: ∀ s0 : state X, equivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)equivocator_state_n s ≤ equivocator_state_n (equivocator_state_update s ei si')by rewrite Hex_size; lia. Qed.message: Type
X: VLSM message
iom, oom: option message
ei: nat
l: label X
s: state (equivocator_vlsm X)
s0, si': state X
Hex_size: ∀ s0 : state X, equivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)equivocator_state_n s ≤ equivocator_state_n (equivocator_state_extend s si')message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)is_equivocating_state X s → is_equivocating_state X s'message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)is_equivocating_state X s → is_equivocating_state X s'message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
Hs: is_equivocating_state X s
Hs': is_singleton_state X s'Falsemessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
Hs: is_equivocating_state X s
Hs': is_singleton_state X s'is_singleton_state X smessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
Hs': is_singleton_state X s'is_singleton_state X sby apply equivocator_transition_reflects_singleton_state. Qed.message: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)equivocator_transition X l (s, iom) = (s', oom) → is_singleton_state X s' → is_singleton_state X smessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
li: label X
Hzero: l = ContinueWith 0 liis_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
l: label (equivocator_vlsm X)
s, s': state (equivocator_vlsm X)
Ht: equivocator_transition X l (s, iom) = (s', oom)
li: label X
Hzero: l = ContinueWith 0 liis_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s, s': state (equivocator_vlsm X)
li: label X
Ht: equivocator_transition X (ContinueWith 0 li) ( s, iom) = (s', oom)is_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s, s': state (equivocator_vlsm X)
li: label X
Ht: match equivocator_state_project s 0 with | Some si => let (si', om') := transition li (si, iom) in (equivocator_state_update s 0 si', om') | None => (s, iom) end = (s', oom)is_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s, s': state (equivocator_vlsm X)
li: label X
Ht: (let (si', om') := transition li (equivocator_state_zero s, iom) in (equivocator_state_update s 0 si', om')) = (s', oom)is_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s, s': state (equivocator_vlsm X)
li: label X
s0: state X
o: option message
Ht: (equivocator_state_update s 0 s0, o) = (s', oom)is_equivocating_state X s' → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s, s': state (equivocator_vlsm X)
li: label X
s0: state X
o: option message
Ht: (equivocator_state_update s 0 s0, o) = (s', oom)
H0: equivocator_state_update s 0 s0 = s'
H1: o = oomis_equivocating_state X (equivocator_state_update s 0 s0) → is_equivocating_state X smessage: Type
X: VLSM message
iom, oom: option message
s: state (equivocator_vlsm X)
li: label X
s0: state X
Ht: (equivocator_state_update s 0 s0, oom) = (equivocator_state_update s 0 s0, oom)is_equivocating_state X (equivocator_state_update s 0 s0) → is_equivocating_state X sby equivocator_state_update_simpl. Qed.message: Type
X: VLSM message
iom, oom: option message
s: state (equivocator_vlsm X)
li: label X
s0: state X
Ht: (equivocator_state_update s 0 s0, oom) = (equivocator_state_update s 0 s0, oom)equivocator_state_n (equivocator_state_update s 0 s0) ≠ 1 → equivocator_state_n s ≠ 1
Valid messages in the equivocator_vlsm are also valid in the
original machine. All components of a valid state in the
equivocator_vlsm are also valid in the original machine.
message: Type
X: VLSM message
seed: message → Prop
bs: state (equivocator_vlsm X)
om: option message
Hbs: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) bs omoption_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
bs: state (equivocator_vlsm X)
om: option message
Hbs: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) bs omoption_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hs: initial_state_prop s
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) omoption_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
l: label (preloaded_vlsm (equivocator_vlsm X) seed)
Hv: valid l (s, om)
s': state (preloaded_vlsm (equivocator_vlsm X) seed)
om': option message
Ht: transition l (s, om) = (s', om')
IHHbs1: option_valid_message_prop (preloaded_vlsm X seed) _om ∧ (∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)
IHHbs2: option_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project _s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)option_valid_message_prop (preloaded_vlsm X seed) om' ∧ (∀ (i : nat) (si : state X), equivocator_state_project s' i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hs: initial_state_prop s
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) omoption_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hs: initial_state_prop s
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hs: initial_state_prop s
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: equivocator_state_project s i = Some sivalid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hn0: is_singleton_state X s
Hinit: initial_state_prop (equivocator_state_zero s)
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: equivocator_state_project s i = Some sivalid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hn0: is_singleton_state X s
Hinit: initial_state_prop (equivocator_state_zero s)
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: equivocator_state_project s i = Some si
Hi: i < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hn0: equivocator_state_n s = 1
Hinit: initial_state_prop (equivocator_state_zero s)
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: equivocator_state_project s i = Some si
Hi: i < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hn0: equivocator_state_n s = 1
Hinit: initial_state_prop (equivocator_state_zero s)
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: equivocator_state_project s 0 = Some si
Hi: 0 < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) siby apply initial_state_is_valid.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hn0: equivocator_state_n s = 1
Hinit: initial_state_prop (equivocator_state_zero s)
om: option message
Hom: option_initial_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) om
i: nat
si: state X
H: Some (equivocator_state_zero s) = Some si
Hi: 0 < equivocator_state_n s
H1: equivocator_state_zero s = sivalid_state_prop (preloaded_vlsm X seed) (equivocator_state_zero s)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
l: label (preloaded_vlsm (equivocator_vlsm X) seed)
Hv: valid l (s, om)
s': state (preloaded_vlsm (equivocator_vlsm X) seed)
om': option message
Ht: transition l (s, om) = (s', om')
IHHbs1: option_valid_message_prop (preloaded_vlsm X seed) _om ∧ (∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)
IHHbs2: option_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project _s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)option_valid_message_prop (preloaded_vlsm X seed) om' ∧ (∀ (i : nat) (si : state X), equivocator_state_project s' i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
l: label (preloaded_vlsm (equivocator_vlsm X) seed)
Hv: valid l (s, om)
s': state (preloaded_vlsm (equivocator_vlsm X) seed)
om': option message
Ht: transition l (s, om) = (s', om')
IHHbs1: option_valid_message_prop (preloaded_vlsm X seed) _om ∧ (∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)
IHHbs2: option_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project _s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)
Hgen: ∀ (s : state (preloaded_vlsm X seed)) (_om : option message), valid_state_message_prop (preloaded_vlsm X seed) s _om → ∀ (_s : state (preloaded_vlsm X seed)) (om : option message), valid_state_message_prop (preloaded_vlsm X seed) _s om → ∀ l : label (preloaded_vlsm X seed), valid l (s, om) → ∀ (s' : state (preloaded_vlsm X seed)) (om' : option message), transition l (s, om) = (s', om') → valid_state_message_prop (preloaded_vlsm X seed) s' om'option_valid_message_prop (preloaded_vlsm X seed) om' ∧ (∀ (i : nat) (si : state X), equivocator_state_project s' i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
l: label (preloaded_vlsm (equivocator_vlsm X) seed)
Hv: valid l (s, om)
s': state (preloaded_vlsm (equivocator_vlsm X) seed)
om': option message
Ht: transition l (s, om) = (s', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
IHHbs2: option_valid_message_prop (preloaded_vlsm X seed) om ∧ (∀ (i : nat) (si : state X), equivocator_state_project _s i = Some si → valid_state_prop (preloaded_vlsm X seed) si)
Hgen: ∀ (s : state (preloaded_vlsm X seed)) (_om : option message), valid_state_message_prop (preloaded_vlsm X seed) s _om → ∀ (_s : state (preloaded_vlsm X seed)) (om : option message), valid_state_message_prop (preloaded_vlsm X seed) _s om → ∀ l : label (preloaded_vlsm X seed), valid l (s, om) → ∀ (s' : state (preloaded_vlsm X seed)) (om' : option message), transition l (s, om) = (s', om') → valid_state_message_prop (preloaded_vlsm X seed) s' om'option_valid_message_prop (preloaded_vlsm X seed) om' ∧ (∀ (i : nat) (si : state X), equivocator_state_project s' i = Some si → valid_state_prop (preloaded_vlsm X seed) si)(* destruction tactic for a valid equivocator transition transition (equivocator_vlsm X) l (s, om) = (s', om') *)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
l: label (preloaded_vlsm (equivocator_vlsm X) seed)
Hv: valid l (s, om)
s': state (preloaded_vlsm (equivocator_vlsm X) seed)
om': option message
Ht: transition l (s, om) = (s', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
IHHbs2: option_valid_message_prop (preloaded_vlsm X seed) om
Hgen: ∀ (s : state (preloaded_vlsm X seed)) (_om : option message), valid_state_message_prop (preloaded_vlsm X seed) s _om → ∀ (_s : state (preloaded_vlsm X seed)) (om : option message), valid_state_message_prop (preloaded_vlsm X seed) _s om → ∀ l : label (preloaded_vlsm X seed), valid l (s, om) → ∀ (s' : state (preloaded_vlsm X seed)) (om' : option message), transition l (s, om) = (s', om') → valid_state_message_prop (preloaded_vlsm X seed) s' om'option_valid_message_prop (preloaded_vlsm X seed) om' ∧ (∀ (i : nat) (si : state X), equivocator_state_project s' i = Some si → valid_state_prop (preloaded_vlsm X seed) si)message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project (equivocator_state_update s i si') i0 = Some si0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project (equivocator_state_extend s si') i0 = Some si0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project (equivocator_state_update s i si') i0 = Some si0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: None = Some si0
Hi0: ¬ i0 < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: Some si' = Some si0
Hi0: i0 < equivocator_state_n s
Hij: i = i0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project s i0 = Some si0
Hi0: i0 < equivocator_state_n s
Hij: i ≠ i0valid_state_prop (preloaded_vlsm X seed) si0done.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: None = Some si0
Hi0: ¬ i0 < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0by inversion H; subst; eexists.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: Some si' = Some si0
Hi0: i0 < equivocator_state_n s
Hij: i = i0valid_state_prop (preloaded_vlsm X seed) si0by apply IHHbs1 in H.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project s i0 = Some si0
Hi0: i0 < equivocator_state_n s
Hij: i ≠ i0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project (equivocator_state_extend s si') i0 = Some si0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project s i0 = Some si0
Hi0: i0 < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: Some si' = Some si0
Hni: ¬ i0 < equivocator_state_n s
Hi0: i0 = equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: None = Some si0
Hni: ¬ i0 < equivocator_state_n s
Hni0: i0 ≠ equivocator_state_n s
Hi0: equivocator_state_n s < i0valid_state_prop (preloaded_vlsm X seed) si0by apply IHHbs1 in H.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: equivocator_state_project s i0 = Some si0
Hi0: i0 < equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0by inversion H; subst; eexists.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: Some si' = Some si0
Hni: ¬ i0 < equivocator_state_n s
Hi0: i0 = equivocator_state_n svalid_state_prop (preloaded_vlsm X seed) si0done. Qed.message: Type
X: VLSM message
seed: message → Prop
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
_om: option message
Hbs1: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s _om
_s: state (preloaded_vlsm (equivocator_vlsm X) seed)
om: option message
Hbs2: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) _s om
i: nat
l: label X
si: state X
_omi: option message
Hsi: valid_state_message_prop (preloaded_vlsm X seed) si _omi
Hv: valid l (si, om)
om': option message
si': state X
Hti: transition l (si, om) = (si', om')
IHHbs1: ∀ (i : nat) (si : state X), equivocator_state_project s i = Some si → valid_state_prop (preloaded_vlsm X seed) si
_som: state (preloaded_vlsm X seed)
Hom: valid_state_message_prop (preloaded_vlsm X seed) _som om
Hgen: valid_state_message_prop (preloaded_vlsm X seed) si' om'
Hi: i < equivocator_state_n s
i0: nat
si0: state X
H: None = Some si0
Hni: ¬ i0 < equivocator_state_n s
Hni0: i0 ≠ equivocator_state_n s
Hi0: equivocator_state_n s < i0valid_state_prop (preloaded_vlsm X seed) si0message: Type
X: VLSM message
seed: message → Prop
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop (preloaded_vlsm (equivocator_vlsm X) seed) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop (preloaded_vlsm (equivocator_vlsm X) seed) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop (preloaded_vlsm X seed) siby apply preloaded_equivocator_state_projection_preserves_validity, proj2 in Hbs. Qed.message: Type
X: VLSM message
seed: message → Prop
bs: state (equivocator_vlsm X)
om: option message
Hbs: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) bs om∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop (preloaded_vlsm X seed) simessage: Type
X: VLSM message
seed: message → Prop
om: option message
Hom: option_valid_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) omoption_valid_message_prop (preloaded_vlsm X seed) ommessage: Type
X: VLSM message
seed: message → Prop
om: option message
Hom: option_valid_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) omoption_valid_message_prop (preloaded_vlsm X seed) omby apply preloaded_equivocator_state_projection_preserves_validity, proj1 in Hm. Qed.message: Type
X: VLSM message
seed: message → Prop
om: option message
s: state (preloaded_vlsm (equivocator_vlsm X) seed)
Hm: valid_state_message_prop (preloaded_vlsm (equivocator_vlsm X) seed) s omoption_valid_message_prop (preloaded_vlsm X seed) ommessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop (equivocator_vlsm X) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop X simessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop (equivocator_vlsm X) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → valid_state_prop X simessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop (equivocator_vlsm X) bs
i: nat
si: state X
Hpr: equivocator_state_project bs i = Some sivalid_state_prop X simessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop {| vlsm_type := equivocator_vlsm X; vlsm_machine := preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False) |} bs
i: nat
si: state X
Hpr: equivocator_state_project bs i = Some sivalid_state_prop X simessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop {| vlsm_type := equivocator_vlsm X; vlsm_machine := preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False) |} bs
i: nat
si: state X
Hpr: equivocator_state_project bs i = Some si
Hsi: valid_state_prop (preloaded_vlsm X (λ _ : message, False)) sivalid_state_prop X siby destruct X. Qed.message: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: valid_state_prop {| vlsm_type := equivocator_vlsm X; vlsm_machine := preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False) |} bs
i: nat
si: state X
Hpr: equivocator_state_project bs i = Some si
Hsi: valid_state_prop {| vlsm_type := X; vlsm_machine := X |} sivalid_state_prop X simessage: Type
X: VLSM message
om: option message
Hom: option_valid_message_prop (equivocator_vlsm X) omoption_valid_message_prop X ommessage: Type
X: VLSM message
om: option message
Hom: option_valid_message_prop (equivocator_vlsm X) omoption_valid_message_prop X ommessage: Type
X: VLSM message
m: message
Hom: option_valid_message_prop (equivocator_vlsm X) (Some m)option_valid_message_prop X (Some m)message: Type
X: VLSM message
m: message
Hom: option_valid_message_prop (equivocator_vlsm X) (Some m)
Hinit: strong_embedding_initial_message_preservation (equivocator_vlsm X) (preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False))option_valid_message_prop X (Some m)message: Type
X: VLSM message
m: message
Hom: valid_message_prop {| vlsm_type := {| vlsm_type := equivocator_vlsm X; vlsm_machine := equivocator_vlsm X |}; vlsm_machine := {| vlsm_type := equivocator_vlsm X; vlsm_machine := preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False) |} |} m
Hinit: strong_embedding_initial_message_preservation (equivocator_vlsm X) (preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False))option_valid_message_prop X (Some m)message: Type
X: VLSM message
m: message
Hom: option_valid_message_prop (preloaded_vlsm X (λ _ : message, False)) (Some m)
Hinit: strong_embedding_initial_message_preservation (equivocator_vlsm X) (preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False))option_valid_message_prop X (Some m)by apply (VLSM_incl_valid_message (proj2 (vlsm_is_preloaded_with_False X))) in Hom ; destruct X. Qed.message: Type
X: VLSM message
m: message
Hom: option_valid_message_prop (preloaded_vlsm X (λ _ : message, False)) (Some m)
Hinit: strong_embedding_initial_message_preservation (equivocator_vlsm X) (preloaded_vlsm (equivocator_vlsm X) (λ _ : message, False))
Hinit_rev: strong_embedding_initial_message_preservation (preloaded_vlsm X (λ _ : message, False)) Xoption_valid_message_prop X (Some m)
All components of valid states of the preloaded_with_all_messages_vlsm corresponding
to an equivocator_vlsm are also valid for the preloaded_with_all_messages_vlsm
corresponding to the original machine.
message: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: constrained_state_prop (equivocator_vlsm X) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → constrained_state_prop X simessage: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: constrained_state_prop (equivocator_vlsm X) bs∀ (i : nat) (si : state X), equivocator_state_project bs i = Some si → constrained_state_prop X siby apply (preloaded_with_equivocator_state_project_valid_state _ _ Hbs _ _ Hpr). Qed.message: Type
X: VLSM message
bs: state (equivocator_vlsm X)
Hbs: constrained_state_prop (equivocator_vlsm X) bs
i: nat
si: state X
Hpr: equivocator_state_project bs i = Some siconstrained_state_prop X si
Next couple of lemmas characterize the projections of a equivocator_state
after taking a transition in terms of the preceding state.
These are simpler version of the results concerning the projection of
states from the composition of equivocators over equivocation_descriptors.
These results are used for characterizing the projection of the destination
of a transition_item in an equivocator trace in
equivocator_transition_item_project_proper_characterization.
message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)equivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)equivocator_state_n s' = S (equivocator_state_n s)by apply equivocator_state_extend_size. Qed.message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option messageequivocator_state_n (equivocator_state_extend s sn) = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om') | None => (s, oin) end = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om')) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, s0: state X
o: option message
Ht: (equivocator_state_extend s s0, o) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, s0: state X
o: option message
Ht: (equivocator_state_extend s s0, o) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some si
H0: equivocator_state_extend s s0 = s'
H1: o = ooutequivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)by apply equivocator_state_extend_size. Qed.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, s0: state X
Ht: (equivocator_state_extend s s0, oout) = (equivocator_state_extend s s0, oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n (equivocator_state_extend s s0) = S (equivocator_state_n s)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = equivocator_state_n smessage: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = equivocator_state_n smessage: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om') | None => (s, oin) end = (s', oout)
si: state X
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = equivocator_state_n smessage: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om')) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = equivocator_state_n smessage: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, s0: state X
o: option message
Ht: (equivocator_state_update s ieqvi s0, o) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n s' = equivocator_state_n smessage: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, s0: state X
o: option message
Ht: (equivocator_state_update s ieqvi s0, o) = (s', oout)
Hv: equivocator_state_project s ieqvi = Some si
H0: equivocator_state_update s ieqvi s0 = s'
H1: o = ooutequivocator_state_n (equivocator_state_update s ieqvi s0) = equivocator_state_n sby equivocator_state_update_simpl. Qed.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, s0: state X
Ht: (equivocator_state_update s ieqvi s0, oout) = (equivocator_state_update s ieqvi s0, oout)
Hv: equivocator_state_project s ieqvi = Some siequivocator_state_n (equivocator_state_update s ieqvi s0) = equivocator_state_n smessage: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = equivocator_state_descriptor_project s (NewMachine sn)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = equivocator_state_descriptor_project s (NewMachine sn)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option messageequivocator_state_descriptor_project (equivocator_state_extend s sn) (Existing (equivocator_state_n s)) = equivocator_state_descriptor_project s (NewMachine sn)by destruct_equivocator_state_extend_project s sn (equivocator_state_n s) Hi; [lia | | lia]. Qed.message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option messagedefault (equivocator_state_s s 0) (equivocator_state_project (equivocator_state_extend s sn) (equivocator_state_n s)) = snmessage: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (Spawn sn) (s, oin) = (s', oout)
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project (equivocator_state_extend s sn) (Existing ni) = equivocator_state_descriptor_project s (Existing ni)by destruct_equivocator_state_extend_project s sn ni Hi; [| lia..]. Qed.message: Type
X: VLSM message
sn: state X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
ni: nat
Hni: ni < equivocator_state_n sdefault (equivocator_state_s s 0) (equivocator_state_project (equivocator_state_extend s sn) ni) = default (equivocator_state_zero s) (equivocator_state_project s ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om') | None => (s, oin) end = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, si': state X
_om': option message
Hti: transition li (si, oin) = (si', _om')
Ht: (equivocator_state_extend s si', _om') = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Ht: (equivocator_state_extend s si', oout) = (equivocator_state_extend s si', oout)
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project (equivocator_state_extend s si') (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sequivocator_state_descriptor_project (equivocator_state_extend s si') (Existing ni) = equivocator_state_descriptor_project s (Existing ni)by destruct_equivocator_state_extend_project s si' ni Hni'; [| lia..]. Qed.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n sdefault (equivocator_state_s s 0) (equivocator_state_project (equivocator_state_extend s si') ni) = default (equivocator_state_zero s) (equivocator_state_project s ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ForkWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om') | None => (s, oin) end = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_extend s si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, si': state X
_oout: option message
Ht: (equivocator_state_extend s si', _oout) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, si': state X
_oout: option message
Ht: (equivocator_state_extend s si', _oout) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', _oout)
H0: equivocator_state_extend s si' = s'
H1: _oout = ooutoout = oout ∧ equivocator_state_descriptor_project (equivocator_state_extend s si') (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Ht: (equivocator_state_extend s si', oout) = (equivocator_state_extend s si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)oout = oout ∧ equivocator_state_descriptor_project (equivocator_state_extend s si') (Existing (equivocator_state_n s)) = si'by cbn; rewrite equivocator_state_extend_project_2. Qed.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)oout = oout ∧ equivocator_state_descriptor_project (equivocator_state_extend s si') (Existing (equivocator_state_n s)) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om') | None => (s, oin) end = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, si': state X
_om': option message
Hti: transition li (si, oin) = (si', _om')
Ht: (equivocator_state_update s ieqvi si', _om') = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project s' (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Ht: (equivocator_state_update s ieqvi si', oout) = (equivocator_state_update s ieqvi si', oout)
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project (equivocator_state_update s ieqvi si') (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ niequivocator_state_descriptor_project (equivocator_state_update s ieqvi si') (Existing ni) = equivocator_state_descriptor_project s (Existing ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ nidefault (if decide (ieqvi = 0) then si' else equivocator_state_s s 0) (equivocator_state_project (equivocator_state_update s ieqvi si') ni) = default (equivocator_state_zero s) (equivocator_state_project s ni)by destruct_equivocator_state_project s ni sni Hni''; [| lia]. Qed.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hti: transition li (si, oin) = (si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
ni: nat
Hni: ni < equivocator_state_n s
Hnieqvi: ieqvi ≠ ni
Hni': ni < equivocator_state_n s
Hini: ieqvi ≠ nidefault (if decide (ieqvi = 0) then si' else equivocator_state_s s 0) (equivocator_state_project s ni) = default (equivocator_state_zero s) (equivocator_state_project s ni)message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: transition (ContinueWith ieqvi li) (s, oin) = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
Ht: match equivocator_state_project s ieqvi with | Some si => let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om') | None => (s, oin) end = (s', oout)
si: state X
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si: state X
Ht: (let (si', om') := transition li (si, oin) in (equivocator_state_update s ieqvi si', om')) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
si': state X
_oout: option message
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin: option message
s': state (equivocator_vlsm X)
oout: option message
si, si': state X
_oout: option message
Ht: (equivocator_state_update s ieqvi si', _oout) = (s', oout)
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', _oout)_oout = oout ∧ equivocator_state_descriptor_project s' (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Ht: (equivocator_state_update s ieqvi si', oout) = (equivocator_state_update s ieqvi si', oout)
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)oout = oout ∧ equivocator_state_descriptor_project (equivocator_state_update s ieqvi si') (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)oout = oout ∧ equivocator_state_descriptor_project (equivocator_state_update s ieqvi si') (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)equivocator_state_descriptor_project (equivocator_state_update s ieqvi si') (Existing ieqvi) = si'message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)default (if decide (ieqvi = 0) then si' else equivocator_state_s s 0) (equivocator_state_project (equivocator_state_update s ieqvi si') ieqvi) = si'by apply equivocator_state_project_Some_rev in Hsi. Qed. End sec_equivocator_vlsm_valid_state_projections. Arguments NewMachine {_ _} _ : assert. Arguments Existing {_ _} _ : assert. Arguments equivocator_label_descriptor {_ _} _ : assert. Arguments equivocator_state_descriptor_project {_ _} _ _ : assert.message: Type
X: VLSM message
ieqvi: nat
li: label X
s: state (equivocator_vlsm X)
oin, oout: option message
si, si': state X
Hsi: equivocator_state_project s ieqvi = Some si
Hti: transition li (si, oin) = (si', oout)ieqvi < equivocator_state_n s