数学研究ログ 第009回「SATで挑む平面彩色問題:研究環境構築記録~本シリーズで登場した用語の整理~」

はじめに

ここまでのシリーズでは、研究環境を構築していく過程を順番に記録してきました。

第1回はこちら

その中で、Linux、仮想化、SAT、グラフ彩色など、さまざまな専門用語が登場しました。

正直なところ、僕自身もそれらを最初から十分に理解していたわけではありませんでした。実際には、調べながら使い、使いながら少しずつ意味を掴んでいったというのが実態です。

そこでこの記事では、ここまでのシリーズで登場した用語を、自分なりに整理しておきます。厳密な専門用語辞典というよりは、「今回の環境構築と研究の入口において、どういう意味で使っていたのか」を意識したまとめです。

Linux

LinuxはOSの一種です。Windowsと同じように、コンピュータ全体を動かすための基本的な仕組みです。

今回の環境構築では、SATソルバーや関連ツールがLinuxを前提としていることが多かったため、Linux環境を用意する必要がありました。僕の場合は、Windows上に仮想的なUbuntu環境を作る形で使いました。

Ubuntu

UbuntuはLinuxディストリビューションの一つです。簡単に言えば、Linuxを使いやすく整理した配布形態の一つです。

Linuxにはさまざまな種類がありますが、Ubuntuは利用者が多く、情報も豊富で、初心者でも比較的扱いやすいため選びました。

WSL

WSLは Windows Subsystem for Linux の略で、Windows上でLinux環境を動かす仕組みです。仮想マシンとは違い、Windowsの機能としてLinuxを扱う形になります。

今回、最初に選ぼうとしたのがこのWSLでした。一般的には便利で手軽な選択肢ですが、Windowsの機能と密接に関わるため、構成や状況によっては影響範囲が広くなることがあります。

ここに、WSLとVirtualBoxの違いを簡単に整理した図を入れます。

 WSL と VirtualBox の違い
WSL Windows本体 WSL / 仮想化機能 Linux環境 Windowsの機能と密接に関わる VirtualBox Windows本体 VirtualBox 仮想マシン上のLinux 仮想環境として分離しやすい
WSLはWindowsの機能と密接に関わる一方、VirtualBoxは仮想マシンとして分離して扱いやすい構成です。今回の環境構築では、この違いが方針転換の決め手になりました。

VirtualBox

VirtualBoxは仮想マシンを作成するソフトウェアです。仮想マシンとは、PCの中に仮想的な別のPCを作るような仕組みです。

今回の環境構築では、Windows上でVirtualBoxを使い、その中にUbuntuをインストールしました。これにより、Windows本体とある程度分離されたLinux環境を作ることができました。

仮想化

仮想化とは、実際のハードウェアとは別に、ソフトウェア上で仮想的な環境を作る技術です。

今回の場合は、VirtualBoxを使って仮想的なPCを作り、その中でLinuxを動かしました。仮想化によって、Windows本体を直接変更せずに実験環境を持つことができました。

Guest Additions

Guest Additionsは、VirtualBoxの仮想環境に追加で導入する機能です。これを入れることで、コピー&ペーストの共有、マウス操作の改善、画面表示の最適化などが可能になります。

第7回でかなり苦戦した部分でもありましたが、実際に使える仮想環境にするには重要な要素でした。

Python

Pythonはプログラミング言語の一つです。文法が比較的分かりやすく、今回のように条件を書いて実験する用途にも向いています。

僕はこの環境で、SAT問題を組み立てたり、グラフ彩色の小さな実験を行ったりしました。

仮想環境(venv)

Pythonの仮想環境は、プロジェクトごとに必要なライブラリを分離して管理する仕組みです。これにより、他のPython環境と干渉せずに作業ができます。

今回も .venv を作成し、その中に必要なパッケージをインストールしました。環境を汚さずに管理するという方針にも合っていました。

SAT

SATは、与えられた論理条件をすべて同時に満たす真偽の割り当てが存在するかどうかを判定する問題です。日本語では充足可能性問題と呼ばれます。

例えば、

  • x は真
  • x は偽

という条件を同時に満たすことはできないため、この場合は解がありません。逆に、矛盾しない条件であれば、真偽の割り当てが存在します。

ここに、SATとUNSATの違いを示す図を入れます。

 SAT / UNSAT のイメージ
SAT 条件をすべて満たす 真偽の割り当てが存在する 例:x は真、y は偽 で成立 UNSAT どんな割り当てでも 条件を同時には満たせない 例:x と ¬x を同時に要求 SATは「解がある」、UNSATは「解がない」を意味します
SATでは条件を満たす割り当てが存在し、UNSATでは存在しません。グラフ彩色問題をSATとして書いた場合、SATなら彩色可能、UNSATならその色数では彩色不可能という意味になります。

SAT と UNSAT

SATは「条件を満たす割り当てがある」ことを意味します。UNSATは「どんな割り当てでも条件を同時には満たせない」ことを意味します。

今回の研究では、グラフ彩色問題をSATとして書いた場合、SATならその色数で彩色可能、UNSATならその色数では彩色不可能という意味になります。

PySAT

PySATは、PythonからSATソルバーを扱うためのライブラリです。これを使うことで、論理条件をPythonコードとして記述し、その場でSAT/UNSATの判定を行えます。

今回の環境では、まずPySATを使って簡単な論理条件の確認や、グラフ彩色の最小例を試しました。

SATソルバー

SATソルバーは、SAT問題を実際に解くプログラムです。PySATはそれをPythonから呼び出しやすくするための仕組みであり、実際の判定はソルバーが行います。

CaDiCaL

CaDiCaLはSATソルバーの一つです。SAT問題を実際に解くエンジンであり、研究用途でも扱いやすいソルバーとして今回導入しました。

DRAT-trim

DRAT-trimは、SATソルバーが出力した証明ログを検証するためのツールです。特にUNSATの場合、「本当に解がないのか」を第三者的に確認するために使われます。

今回の段階では、まずツールが動くところまで確認しました。今後、UNSAT証明をきちんと扱う際に重要になるはずです。

グラフ彩色問題

グラフ彩色問題は、グラフの頂点に色を割り当てて、辺でつながった頂点が同じ色にならないようにする問題です。

今回の研究では、平面上の点の距離条件をグラフとして表現し、それを彩色問題として扱う方向で考えています。

Hadwiger–Nelson problem

Hadwiger–Nelson problem は、平面上の各点に色を割り当てるとき、「距離がちょうど1の2点は同じ色にできない」という条件のもとで、平面全体を塗るのに最低何色必要かを問う問題です。

この問題は長いあいだ、少なくとも4色必要で、7色あれば十分であることまでは分かっていました。つまり答えは長く 4・5・6・7 のいずれかとされていました。

その状況が大きく動いたのが2018年でした。Aubrey de Grey によって、4色では彩色できない有限の単位距離グラフが構成されました。これにより、「平面全体も4色では足りない」ことが示され、下限が4から5に引き上げられました。

現在、Hadwiger–Nelson problem の答えは 5・6・7 のいずれかであるとされています。つまり今の焦点は、5色で十分なのか、それとも6色以上必要なのか、という点にあります。

ここで、問題の基本構造を整理した図を入れます。

 Hadwiger–Nelson problem の基本構造
平面全体 各点に色を割り当てる 距離1の2点は同色禁止 単位距離グラフ 点 → 頂点 距離1の関係 → 辺 彩色問題 隣接頂点が同色にならない 最小色数を調べる 平面全体の問題を、単位距離グラフの彩色問題として捉える
平面上の点どうしの「距離1」の関係を辺として見ることで、問題をグラフ彩色として扱えます。

続いて、2018年の進展を含む位置づけの図を入れます。

 2018年の進展と現在の位置づけ
4 以前の下限 5 2018年に下限到達 6 未決定 7 既知の上限 4色不可の有限単位距離グラフが構成された 現在、平面彩色数は 5・6・7 のいずれかとされています
2018年に4色では足りないことが示され、下限が5に引き上げられました。現在の焦点は、5色で十分か、それとも6色以上必要かという点にあります。

僕がこの問題に惹かれた理由の一つは、こうした進展が純粋な理論だけでなく、有限グラフの構成や計算機による検証とも深く結びついている点でした。今回構築した環境も、まさにそうした方向に少しでも近づくためのものです。

グラフ彩色とSAT化

今回のシリーズの後半で実際に試したように、グラフ彩色問題はSAT問題として書き直すことができます。

具体的には、

  • 各頂点がどの色を持つかを変数にする
  • 各頂点は少なくとも1色を持つ
  • 同時に複数色は持たない
  • 辺でつながった頂点は同じ色を持たない

という条件を論理式として表現します。

この対応関係を図で見ると分かりやすいので、ここに図を入れます。

 グラフ彩色とSAT化の対応
グラフ彩色 隣接頂点は同色禁止 SAT化 各頂点 v と色 c に対して 変数 x(v,c) を用意 各頂点は少なくとも1色 同時に2色以上は持たない 辺でつながる頂点は同色禁止 判定 SAT → 彩色可能 UNSAT → 彩色不可能 彩色条件を論理条件に翻訳し、SATソルバーで判定します
グラフ彩色問題は、各頂点と色の組に変数を割り当てることでSAT問題に変換できます。これにより、彩色可能性を機械的に判定できるようになります。

このようにして、彩色問題をSAT問題に翻訳することで、機械的な検証が可能になります。

おわりに

今回の環境構築では、多くの用語が登場しましたが、それらは単に知識として覚えるためのものではなく、実際に触って覚えていけたらと思います。

今後も新しい用語や概念は出てくると思いますが、その都度こうして整理しながら進めていこうと思います。必要であれば、この用語整理も今後行っていくと良いかもしれませんね。