$x=$1と $y=$1 のAND演算は$xy=$1から 1
と求まります。ところが、OR演算は1$+$1$=$1
です。これは直感に反する。
そこで、OR$=x+y-xy$とすると、うまくいきます。
ちなみに、XOR$=x+y-$2$xy$という数式になります。
$z=x+y-$2$xy$は$xyz$空間における曲面を表します。
$x,y$に1か0を代入するとAND、NAND、OR、NOR、XOR、XNOR演算の結果を返すPythonプログラムを作ってみました。
import tkinter
root = tkinter.Tk()
root.title("NANDGAME")
root.minsize(800, 450)
top = tkinter.Label(root, text="\nNANDGAME\n", font=("メイリオ", 16, "bold"))
top.pack()
top = tkinter.Label(root, text="1か0を入力してください", font=("メイリオ", 12, "bold"))
top.pack()
e1 = tkinter.Entry(root)
e1.pack()
e2 = tkinter.Entry(root)
e2.pack()
button = tkinter.Button(root, text="1か0を入力")
button.pack()
def nandgame():
x = int(e1.get())
y = int(e2.get())
display = "AND=" + str(x*y) + "です\n""NAND=" + str(1-x*y) + "です\n""OR=" + str(x+y-x*y) + "です\n""NOR=" + str(1-x-y+x*y) + "です\n""XOR=" + str(x+y-2*x*y) + "です\n""XNOR=" + str(1-x-y+2*x*y) + "です\n"
top["text"] = display
button["command"] = nandgame
root.mainloop()
C++版
https://github.com/biohack5079/nandgame/blob/main/nandgame.exe
CGI版(Python)
http://kabuka.s1007.xrea.com/nand/
純代数なフリをして、AND関数にもOR関数にも$xy$という非線形な項が実は隠されています。
このあたりの深い論理は数学的にかなり難しい論理になって来ます。
それについて考察している記事があったので紹介しておきます。
参考