Step
*
1
2
1
1
1
1
1
1
1
1
3
1
1
1
1
1
1
1
1
1
1
1
1
1
of Lemma
new_23_sig_progress-step10
1. Cmd : {T:Type| valueall-type(T)} 
2. eq : EqDecider(Cmd)
3. reps : bag(Id)
4. clients : bag(Id)
5. coeff : {2...}
6. flrs : ℕ
7. propose : Atom List
8. notify : Atom List
9. slots : set-sig{i:l}(ℤ)
10. f : new_23_sig_headers_type{i:l}(Cmd;notify;propose)
11. (f propose) = (ℤ × Cmd) ∈ Type
12. (f notify) = (ℤ × Cmd) ∈ Type
13. (f ``new_23_sig decided``) = (ℤ × Cmd) ∈ Type
14. (f ``new_23_sig retry``) = (ℤ × ℤ × Cmd) ∈ Type
15. (f ``new_23_sig vote``) = (ℤ × ℤ × Cmd × Id) ∈ Type
16. f ∈ Name ─→ Type
17. es : EO+(Message(f))
18. e : E
19. n : ℤ
20. c : Cmd
21. faulty : bag(Id)
22. msgs-interface-delivered-with-omissions(f;es;new_23_sig_main();faulty;flrs;reps)@i
23. bag-no-repeats(Id;reps)@i
24. #(reps) = ((coeff * flrs) + flrs + 1) ∈ ℤ@i
25. loc(e) ↓∈ reps@i
26. ¬loc(e) ↓∈ faulty@i
27. <n, c> ∈ new_23_sig_Proposal(Cmd;notify;propose;f)(e)@i
28. ¬↑(set-sig-member(slots) n new_23_sig_ReplicaStateFun(Cmd;notify;propose;slots;f;es;e))@i
29. e' : E
30. ((coeff * flrs) + 1)
= ||mapfilter(λe.<snd(msgval(e)), e, snd(fst(msgval(e)))>
              λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);
              [e, e'])||
∈ ℤ
31. e ≤loc e' 
32. ↑new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0)
33. ¬↑(∃x∈[e, e'].new_23_sig_decided_with_id(Cmd;notify;propose;f;es;x;n))_b
34. 0 ≤ (coeff * flrs)
35. e ≤loc e' 
36. ¬↑null(filter(λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);[e, e']))
37. ↑new_23_sig_vote_with_ballot(Cmd;notify;propose;f;es;e';n;0)
38. has-es-info-type(es;e';f;ℤ × ℤ × Cmd × Id)
39. poss-maj(eq;rev(mapfilter(λe.(snd(fst(msgval(e))));
                              λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);
                              [e, e']));snd(fst(msgval(e')))) ∈ ℤ × Cmd
40. e ≤loc e' 
41. (fst(poss-maj(eq;rev(mapfilter(λe.(snd(fst(msgval(e))));
                                   λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);
                                   [e, e']));snd(fst(msgval(e'))))))
= ((coeff * flrs) + 1)
∈ ℤ
42. loc(e') ↓∈ reps
43. e'@0 : E@i
44. (e'@0 <loc e')@i
45. e ≤loc e'@0 @i
46. w : Interface@i
47. f1 : (Cmd List × (Id List)) ─→ bag(Interface)
48. b1 : Cmd List
49. b2 : Id List
50. b7 : ℤ
51. b8 : ℤ
52. b6 : Cmd
53. b4 : Id
54. <<<b7, b8>, b6>, b4> ∈ new_23_sig_vote'base(Cmd;notify;propose;f)(e'@0)
55. f1 = (new_23_sig_when_quorum(Cmd;eq;coeff;flrs;notify;propose;reps;f) <n, 0> loc(e'@0) <<<b7, b8>, b6>, b4>) ∈ ((Cmd\000C List × (Id List)) ─→ bag(Interface))
56. b1
= rev(mapfilter(λe.(snd(fst(msgval(e))));
                λe1.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0);
                [e;e'@0)))
∈ (Cmd List)
57. b2
= rev(mapfilter(λe.(snd(msgval(e)));λe1.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0);[e;e'@0)))
∈ (Id List)
58. ↑(new_23_sig_newvote(Cmd) <n, 0> <<<b7, b8>, b6>, b4> <b1, b2>)
59. ||filter(λe1.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0);[e;e'@0))|| = (coeff * flrs) ∈ ℤ
60. w ↓∈ let k,x = poss-maj(eq;[b6 / b1];b6) 
         in if (k =z (coeff * flrs) + 1)
            then new_23_sig_decided'broadcast(Cmd;notify;propose;f) reps <b7, x>
            else {new_23_sig_retry'send(Cmd;notify;propose;f) loc(e'@0) <<b7, b8 + 1>, x>}
            fi 
61. ((coeff * flrs) + 1)
= (||filter(λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);[e;e'))|| + 1)
∈ ℤ
62. e ≤loc e' 
63. ↑new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0)
64. ||filter(λe1.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0);[e;e'@0))||
= (||filter(λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);[e;e'@0))||
  + ||filter(λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);[e'@0;e'))||)
∈ ℤ
65. (e'@0 ∈ [e, e'])
66. [e;e') = ([e;e'@0) @ [e'@0;e')) ∈ (E List)
67. ↑null(filter(λe'.new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e';n;0);[e'@0;e')))
68. (e'@0 ∈ [e'@0;e'))
69. ↑new_23_sig_vote_with_ballot_and_id(Cmd;notify;propose;f;es;e'@0;b7;b8;b4)
70. n = b7 ∈ ℤ
71. 0 = b8 ∈ ℤ
72. ↑new_23_sig_vote_with_ballot(Cmd;notify;propose;f;es;e'@0;b7;b8)
73. ↑new_23_sig_vote_with_ballot(Cmd;notify;propose;f;es;e'@0;n;0)
74. has-es-info-type(es;e'@0;f;ℤ × ℤ × Cmd × Id)
75. e1 : E@i
76. (e1 ∈ [e;e'@0))@i
77. msgval(e'@0) ∈ ℤ × ℤ × Cmd × Id
78. ↑new_23_sig_vote_with_ballot_and_id(Cmd;notify;propose;f;es;e1;n;0;snd(msgval(e'@0)))@i
79. e ≤loc e1 
80. (e1 <loc e'@0)
81. ↑new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0)
82. e ≤loc e1 
83. (e1 <loc e'@0)
84. ↑new_23_sig_vote_with_ballot_first(Cmd;notify;propose;f;es.e;e1;n;0)
85. (snd(msgval(e1))) = (snd(msgval(e'@0))) ∈ Id
⊢ b4 = (snd(msgval(e1))) ∈ Id
BY
{ (FLemma `new_23_sig_vote_with_ballot_and_id-snd` [69] THEN Auto) }
Latex:
Latex:
1.  Cmd  :  \{T:Type|  valueall-type(T)\} 
2.  eq  :  EqDecider(Cmd)
3.  reps  :  bag(Id)
4.  clients  :  bag(Id)
5.  coeff  :  \{2...\}
6.  flrs  :  \mBbbN{}
7.  propose  :  Atom  List
8.  notify  :  Atom  List
9.  slots  :  set-sig\{i:l\}(\mBbbZ{})
10.  f  :  new\_23\_sig\_headers\_type\{i:l\}(Cmd;notify;propose)
11.  (f  propose)  =  (\mBbbZ{}  \mtimes{}  Cmd)
12.  (f  notify)  =  (\mBbbZ{}  \mtimes{}  Cmd)
13.  (f  ``new\_23\_sig  decided``)  =  (\mBbbZ{}  \mtimes{}  Cmd)
14.  (f  ``new\_23\_sig  retry``)  =  (\mBbbZ{}  \mtimes{}  \mBbbZ{}  \mtimes{}  Cmd)
15.  (f  ``new\_23\_sig  vote``)  =  (\mBbbZ{}  \mtimes{}  \mBbbZ{}  \mtimes{}  Cmd  \mtimes{}  Id)
16.  f  \mmember{}  Name  {}\mrightarrow{}  Type
17.  es  :  EO+(Message(f))
18.  e  :  E
19.  n  :  \mBbbZ{}
20.  c  :  Cmd
21.  faulty  :  bag(Id)
22.  msgs-interface-delivered-with-omissions(f;es;new\_23\_sig\_main();faulty;flrs;reps)@i
23.  bag-no-repeats(Id;reps)@i
24.  \#(reps)  =  ((coeff  *  flrs)  +  flrs  +  1)@i
25.  loc(e)  \mdownarrow{}\mmember{}  reps@i
26.  \mneg{}loc(e)  \mdownarrow{}\mmember{}  faulty@i
27.  <n,  c>  \mmember{}  new\_23\_sig\_Proposal(Cmd;notify;propose;f)(e)@i
28.  \mneg{}\muparrow{}(set-sig-member(slots)  n  new\_23\_sig\_ReplicaStateFun(Cmd;notify;propose;slots;f;es;e))@i
29.  e'  :  E
30.  ((coeff  *  flrs)  +  1)
=  ||mapfilter(\mlambda{}e.<snd(msgval(e)),  e,  snd(fst(msgval(e)))>
                            \mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);
                            [e,  e'])||
31.  e  \mleq{}loc  e' 
32.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0)
33.  \mneg{}\muparrow{}(\mexists{}x\mmember{}[e,  e'].new\_23\_sig\_decided\_with\_id(Cmd;notify;propose;f;es;x;n))\_b
34.  0  \mleq{}  (coeff  *  flrs)
35.  e  \mleq{}loc  e' 
36.  \mneg{}\muparrow{}null(filter(\mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);[e,  e']))
37.  \muparrow{}new\_23\_sig\_vote\_with\_ballot(Cmd;notify;propose;f;es;e';n;0)
38.  has-es-info-type(es;e';f;\mBbbZ{}  \mtimes{}  \mBbbZ{}  \mtimes{}  Cmd  \mtimes{}  Id)
39.  poss-maj(eq;rev(mapfilter(\mlambda{}e.(snd(fst(msgval(e))));
                                                            ...;
                                                            [e,  e']));snd(fst(msgval(e'))))  \mmember{}  \mBbbZ{}  \mtimes{}  Cmd
40.  e  \mleq{}loc  e' 
41.  (fst(poss-maj(eq;rev(mapfilter(\mlambda{}e.(snd(fst(msgval(e))));
                                                                      \mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;...;...;f;es.e;e';n;0);
                                                                      [e,  e']));snd(fst(msgval(e'))))))
=  ((coeff  *  flrs)  +  1)
42.  loc(e')  \mdownarrow{}\mmember{}  reps
43.  e'@0  :  E@i
44.  (e'@0  <loc  e')@i
45.  e  \mleq{}loc  e'@0  @i
46.  w  :  Interface@i
47.  f1  :  (Cmd  List  \mtimes{}  (Id  List))  {}\mrightarrow{}  bag(Interface)
48.  b1  :  Cmd  List
49.  b2  :  Id  List
50.  b7  :  \mBbbZ{}
51.  b8  :  \mBbbZ{}
52.  b6  :  Cmd
53.  b4  :  Id
54.  <<<b7,  b8>,  b6>,  b4>  \mmember{}  new\_23\_sig\_vote'base(Cmd;notify;propose;f)(e'@0)
55.  f1  =  (new\_23\_sig\_when\_quorum(Cmd;eq;coeff;flrs;notify;propose;reps;f)  <n,  0>  loc(e'@0)  <<<b7,  b8\000C>,  b6>,  b4>)
56.  b1
=  rev(mapfilter(\mlambda{}e.(snd(fst(msgval(e))));
                                \mlambda{}e1.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0);
                                [e;e'@0)))
57.  b2
=  rev(mapfilter(\mlambda{}e.(snd(msgval(e)));
                                \mlambda{}e1.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0);
                                [e;e'@0)))
58.  \muparrow{}(new\_23\_sig\_newvote(Cmd)  <n,  0>  <<<b7,  b8>,  b6>,  b4>  <b1,  b2>)
59.  ||filter(\mlambda{}e1.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0);[e;e'@0))||
=  (coeff  *  flrs)
60.  w  \mdownarrow{}\mmember{}  let  k,x  =  poss-maj(eq;[b6  /  b1];b6) 
                  in  if  (k  =\msubz{}  (coeff  *  flrs)  +  1)
                        then  new\_23\_sig\_decided'broadcast(Cmd;notify;propose;f)  reps  <b7,  x>
                        else  \{new\_23\_sig\_retry'send(Cmd;notify;propose;f)  loc(e'@0)  <<b7,  b8  +  1>,  x>\}
                        fi 
61.  ((coeff  *  flrs)  +  1)
=  (||filter(\mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);[e;e'))||  +  1)
62.  e  \mleq{}loc  e' 
63.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0)
64.  ||filter(\mlambda{}e1.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0);[e;e'@0))||
=  (||filter(\mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);[e;e'@0))||
    +  ||filter(\mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);[e'@0;e'))||)
65.  (e'@0  \mmember{}  [e,  e'])
66.  [e;e')  =  ([e;e'@0)  @  [e'@0;e'))
67.  \muparrow{}null(filter(\mlambda{}e'.new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e';n;0);[e'@0;e')))
68.  (e'@0  \mmember{}  [e'@0;e'))
69.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_and\_id(Cmd;notify;propose;f;es;e'@0;b7;b8;b4)
70.  n  =  b7
71.  0  =  b8
72.  \muparrow{}new\_23\_sig\_vote\_with\_ballot(Cmd;notify;propose;f;es;e'@0;b7;b8)
73.  \muparrow{}new\_23\_sig\_vote\_with\_ballot(Cmd;notify;propose;f;es;e'@0;n;0)
74.  has-es-info-type(es;e'@0;f;\mBbbZ{}  \mtimes{}  \mBbbZ{}  \mtimes{}  Cmd  \mtimes{}  Id)
75.  e1  :  E@i
76.  (e1  \mmember{}  [e;e'@0))@i
77.  msgval(e'@0)  \mmember{}  \mBbbZ{}  \mtimes{}  \mBbbZ{}  \mtimes{}  Cmd  \mtimes{}  Id
78.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_and\_id(Cmd;notify;propose;f;es;e1;n;0;snd(msgval(e'@0)))@i
79.  e  \mleq{}loc  e1 
80.  (e1  <loc  e'@0)
81.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0)
82.  e  \mleq{}loc  e1 
83.  (e1  <loc  e'@0)
84.  \muparrow{}new\_23\_sig\_vote\_with\_ballot\_first(Cmd;notify;propose;f;es.e;e1;n;0)
85.  (snd(msgval(e1)))  =  (snd(msgval(e'@0)))
\mvdash{}  b4  =  (snd(msgval(e1)))
By
Latex:
(FLemma  `new\_23\_sig\_vote\_with\_ballot\_and\_id-snd`  [69]  THEN  Auto)
Home
Index