わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

同値は結合的?

 いきなりですが問題です.

 二項演算⇔を,以下の真理値表のとおり定義します.
f:id:takehikom:20190515200422j:plain
 この演算について,次の4つのうちどれが正しいでしょうか.

  • 可換性・結合性をともに満たす.
  • 可換性を満たし結合性を満たさない.
  • 可換性を満たさず結合性を満たす.
  • 可換性・結合性をともに満たさない.

 先週金曜のネットワークセキュリティの,授業前テストです.排他的論理和は,使い捨てパッド,DES,AES,ブロック暗号のモードのいずれにも必要不可欠なものですが,排他的論理和の真理値表や数学的な性質は資料を配付し,この否定の論理演算について,考えてもらいました.
 解答の前に確認です.演算の対象(a⇔bのaとb)も,結果(a⇔b)も,{0, 1}の範囲で考えます(ブール代数あるいはブール論理と呼ばれるものです).可換性(可換律,交換法則とも)は,x⇔y=y⇔xが,任意のx,y∈{0, 1}に対して成り立つことをいいます.結合性(結合律,結合法則とも)は,(x⇔y)⇔z=x⇔(y⇔z)が,任意のx,y,z∈{0, 1}に対して成り立つことをいいます.
 他の二項の論理演算でいうと,論理積のAND,論理和のOR,排他的論理和のXORは,いずれも,可換性・結合性をともに満たします.それに対し,否定論理積のNANDと否定論理和のNORは,可換性を満たす一方で結合性を満たしません*1.今回の演算⇔は,XORの否定なので,同様に考えれば,結合性を満たさないように見えますが…
 それでは解答です.この演算⇔については,「可換性・結合性をともに満たす」が正解です.
 可換性(x⇔y=y⇔x)は明らか,と言ってもいいのですが,真理値表をつくると,次のようになります.
f:id:takehikom:20190515200432j:plain
 結合性((x⇔y)⇔z=x⇔(y⇔z))は,自明ではないので,こちらも真理値表を用意しました.変数は3つなので,入力は2の3乗で8通りとなります.
f:id:takehikom:20190515200441j:plain
 例えば,x=0, y=0, z=1の場合,x⇔y=1⇔1=1であり,(x⇔y)⇔z=1⇔1=1です.同じ値の組み合わせで,y⇔z=0⇔1=0であり,x⇔(y⇔z)=0⇔0=1です.
 xとyとzの任意の値の組み合わせに対して,(x⇔y)⇔zとx⇔(y⇔z)の値が等しいので,結合性を満たすというわけです.
 さて,解答の少し前に「今回の演算⇔は,XORの否定」と書いたのですが,wikipedia:同値で確認できるとおり,この二項演算には否定排他的論理和(XNOR)という名称が付けられています.
 英語版のwikipedia:XNOR_gateには,More than two inputsという小見出しを付けられた中に,3入力の真理値表が書かれていますが,上の(x⇔y)⇔zおよびx⇔(y⇔z)の結果と,0と1が反転しています.
 英文の"Note that this is effectively Y = NOT ((A XOR B) XOR C)."より,3つ以上の入力のXNORは,XNORで演算してからNOT(否定)をとるという意味なのが分かります.
 n個の入力に,拡張してみます.OUT=(((IN1⇔IN2)⇔IN3)⇔…)⇔INnの結果は,nが偶数の場合には,n入力のXNORと一致し,3以上の奇数の場合は,n入力のXNORを否定すれば求められることを意味します.またnの偶奇にかかわらず,(((1⇔1)⇔1)⇔…)⇔1=1です.
 本日の演算⇔には,もう一つ,運用上の注意点があります.可換性と結合性をともに満たすのなら,カッコを除いてx⇔y⇔zと書いていいじゃないか,と言いたくなります.ですがx⇔y⇔zというのは,xとyとzをそれぞれ命題とし,3つすべての真偽が同じというときを表すのに使われます.
 真と偽を1と0に置き換えて,真理値表を書くなら,以下のとおりです.(x⇔y)⇔zともx⇔(y⇔z)とも,3入力のXNORとも,異なる結果となります.
f:id:takehikom:20190515200452j:plain