对于这次口头协议的简介:
此次口头协议分为三轮迭代。
对于七名将军,分别将他们命名为C,L1,L2,L3,L4,L5,L6。
第一轮:C依次发消息给L1~L6。
第二轮:以L1为例,他会怀疑C发来消息的真实性,于是他会询问L2~L6:C给你们发来的什么消息。剩余的5位重复L1的询问过程,向除自己和C之外的5位发起询问。
第三轮,以L1为例,他会依次确认在第二轮中收到的每份消息的真实性:为了确认L2发来消息的真实性,他会向L3~L6发起询问:L2告诉你们他收到的将军的命令是什么,再结合之前L2告诉自己的L2收到的将军的命令,用majority函数决策L2收到的将军的命令是什么。同样的,他也会确认L3~L6在第二轮发给自己值的真实性从而向另外的4个人分别发起询问。询问结束后,结合第二轮得到的值,依次进行L3~L6在第二轮发给自己值的真实性确认。这样L1就完成了对第二轮收到值的确认。结合第一轮C发给自己的值和第二轮确认后的五个值,用majority函数投出自己最终的决定。这就是对L1而言的第三轮询问以及回到前两轮的迭代,即以上是L1完整的思考过程,对于L2~L6而言,他们经历和L1相同的思考过程,最终投出自己的决定。
另外,由于n=7,m=2,满足n>3*m,所以这个口头协议满足交互式一致性目标:IC1:所有忠诚的下属都遵守相同的命令;IC2:如果指挥官忠诚,那么每个忠诚的下属都遵守他发送的命令。验证如下:由于m=2,即有两名叛徒,所以分为指挥官是否是叛徒这两种情况。
- 具体过程分析:
情况一:C是忠诚的,L5、L6是叛徒。
第一轮,C分布命令,告诉L1~L6要Attack(以下简称A,另外撤退命令是Retreat,以下简称R)。
第二轮,L1~L6彼此之间交换从C收来的命令。
第三轮,L1为验证L2告诉自己消息的真实性,问L3~L6,L2告诉你们他收到的将军的命令是什么。从表格第二行可以看出(行列从序号1开始计数),(2,2)是A表示第二轮L2告诉L1自己接收到的命令是A,(2,3)是A即L3对L1说:L2告诉我他收到的将军的命令是A,因为L3是忠诚的,所以他如实的转述了L2对自己说的话。(2,5)是a,即不确定是A还是R,因为L5是叛徒,所以他不一定会如实转述L2的值。同理,(2,6)是b,也是不确定值。由表可知,第二行是关于L2的表述,即有3个人说L2收到的命令是A,两个人给出不确定值(这个不确定值范围是是A或R),根据majority函数,L1决策L2收到的C的命令是A,填到表格的(2,1)中,即(2,1)代表L2=A。由于L3,L4和L2一样都是忠诚的,所以他们对L1的转述过程以及L1对于他们说的话的决策过程和上述L2类似,如表格所示。对于L5来说,他是一个叛徒,他说出去的话都不具备参考价值,即使转述他的话的人是忠诚的,这条消息也没有用,因为可能L5一开始告诉他们的就是假的值,所以在第五行,第2到6列的值都是上述随机值,从而决策出来的也是随机值,用X表示,填于(5,1)。对于叛徒L6,同L5。以上就是L1的思考过程,在他看来,自己接受到的命令是A,L2~L4接收到的命令也是A,用majority函数进行决策,投出自己的决定,即A。(由表可知,第一列就是L1的决策依据)。因为L2~L4和L1一样都是忠诚的并且他们也收到了A这个命令,所以他们最终的决策也会是A,这就满足了IC1和IC2的目标:忠诚的下属L1~L4都遵守了C的Attack的命令以及C是忠诚的,他每个忠诚的下属L1~L4都遵守了他发送的Attack命令。
L1=A | L2 | L3 | L4 | L5 | L6 |
L2=A | A | A | A | a | b |
L3=A | A | A | A | c | d |
L4=A | A | A | A | e | f |
L5=X | g | h | i | j | k |
L6=X' | l | m | n | o | p |
情况二:C和L6是叛徒。假设C对L1~L4发出的命令是A,对L5,L6发出的命令是R。他们每个人的思考过程和情况一类似,不再赘述。下面给出L1的思考过程见表格如下。由决策可知,L1会执行A这个命令。由于L2~L3和L1都是忠诚的,而且他们收到的都是A,所以他们也会执行A这个命令。
L1=A | L2 | L3 | L4 | L5 | L6 |
L2=A | A | A | A | A | a |
L3=A | A | A | A | A | b |
L4=A | A | A | A | A | c |
L5=R | R | R | R | R | d |
L6=Y | e | f | g | h | i |
对于L5,他的思考过程如下表所示。根绝majority函数,他最终的决策是A。虽然他收到的来自C的命令是A,但是通过上述的询问决策过程,他发现了C是叛徒,并且做出了和其他冲忠诚的下属一致的决定。综上所述,这个情况也是满足交互一致性目标的。验证:因为C不是忠诚的,所以只需满足IC1即可。因为忠诚的L1~L5都执行了A这个相同的命令,验证通过。
L5=R | L1 | L2 | L3 | L4 | L6 |
L1=A | A | A | A | A | a |
L2=A | A | A | A | A | b |
L3=A | A | A | A | A | c |
L4=A | A | A | A | A | d |
L6=Z | e | f | g | h | i |