『東大の先生! 文系の私に超わかりやすく算数を教えてください!』のp.109には,交換法則の説明と,等式が書かれています.
等式は,2つの文字の間では「A×B=B×A」,3つの文字の間では「(A×B)×C=C×(B×A)〔ここで改行〕=C×(A×B)」です.
3つの異なる文字(または数)のかけ算は,(A×B)×CとA×(B×C)を異なる式と考えると,全部で12個あります.「異なる式」と書きましたが,それらは乗法の交換法則と結合法則により,等号で結ばれます.
12個の式のあいだで,交換法則・結合法則が適用できる式を結んで有向グラフを描くことは,2016年に実施していました.
それから,少し修正して,Graphvizの入力となるDOTファイルを生成してみました.変換プログラムとDOTファイルは非公開とします.因数の数が3で,(ab)cの式を起点としたとき,交換法則・結合法則を適用して得られる式の関係は以下のようになります.
しかし12個の式が,きれいに配置されていません.これについて,dotコマンドで試行錯誤してみると,-Kcircoというオプションによる"circular layout"*1が分かりやすい表示に見えました.
2016年のときは「(ab)c」を起点としていましたが,冒頭の本の「(A×B)×C」に対応しますし,これを他の(3つの文字の)かけ算の式と区別する必要はありません.dotファイル(ABC.dot)は次のようになりました.
graph abc { node [fontsize="25pt"]; AB_C [label="(A×B)×C"]; BA_C [label="(B×A)×C"]; C_BA [label="C×(B×A)"]; C_AB [label="C×(A×B)"]; BC_A [label="(B×C)×A"]; CB_A [label="(C×B)×A"]; A_CB [label="A×(C×B)"]; A_BC [label="A×(B×C)"]; CA_B [label="(C×A)×B"]; AC_B [label="(A×C)×B"]; B_AC [label="B×(A×C)"]; B_CA [label="B×(C×A)"]; AB_C -- BA_C [color = blue]; C_BA -- C_AB [color = blue]; AB_C -- C_AB [color = blue]; BA_C -- C_BA [color = blue]; BC_A -- CB_A [color = blue]; A_CB -- A_BC [color = blue]; BC_A -- A_BC [color = blue]; CB_A -- A_CB [color = blue]; CA_B -- AC_B [color = blue]; B_AC -- B_CA [color = blue]; CA_B -- B_CA [color = blue]; AC_B -- B_AC [color = blue]; AB_C -- A_BC [color = red]; BC_A -- B_CA [color = red]; CA_B -- C_AB [color = red]; CB_A -- C_BA [color = red]; BA_C -- B_AC [color = red]; AC_B -- A_CB [color = red]; }
dotコマンドが利用可能な環境で,dot -Kcirco -Tsvg ABC.dot > ABC.svgを実行し,ABC.svgをブラウザで見ると…
美しい表示ではありません.上記のABC.dotの各ノードやエッジの行を入れ替えても,表示は変わりません.今日はここまで.