ブール値投票のプロトコル
事前に次の事項を決めておく。
- 投票開始と終了の時間
- 有権者とその階層分け
- 棄権の時の扱い →無効、賛成(true)、反対(false)
- 有効投票数の最低値;それに満たないときは、投票そのものが無効となる、ただし、棄権を賛成/反対とみなす規約があれば、棄権は有効票になる。
投票が終わると集計と判定をする。そのとき、判定基準/手続きが必要。有権者が二階層に分けられているとして以下記述する(n階層でも同じ)。階層1と階層2とする。
各有権者の投票結果は、数値1と0でエンコードされ、総投票数はN1、N2とする。有効な投票結果を並べたベクトル(ビット列に見える)をv1, v2とする。
判定関数fは、投票結果ベクトルを受け取って、0か1、または[0, 1]内の実数値を返す。次があれば十分だろう。
- min(v) -- 全員一致でないと賛成とならない。
- floor(ave(v)) -- 多数決。同数なら否決(0 = false)
- ceiling(ave(v)) -- 多数決。同数なら可決(1 = true)
- ave(v) -- 実数の比率(階層2で決める)
階層1の判定関数をf1として、r1 = f1(v1) とする。整数値とみた値r1を階層2に反映させる関数をgとする。次のようなgが考えられる。
- 恒等関数
- 定数mを使った m*r1
- 定数w(実数の重さ)とN1を使って、w*N1*r1
最終的な結果は、f2(v2, g(r1))で決まる。
全体の結果を可決、否決、未決と分けると、それぞれの後に来るアクションを決めておく必要がある。
- 終了 成功裏に終わった
- 破棄 なかったことにする
- 保留 後日に持ち越す、再投票かもしれない
他に、有権者であることの確認(認証)、重複投票の予防、投票の告知、誘導、催促などが必要