Quantifier Elimination (QE,限量子消去) を解いてくれるREDUCEのパッケージRedlogを使って大学の入試問題を解いてみます.
実数 が次の次の4条件を満たしている: このとき の符号を調べよ.
正方形とその内部の点がある.線分の長さがそれぞれ であるとき,この正方形の面積を求めよ.
Quantifier Elimination (QE,限量子消去) とは
実数の理論において\begin{align}(a\neq0) \wedge\bigl( \forall x (ax^2+bx+c>0)\bigr)\end{align} は次の論理式と同値です.\begin{align} (a>0) \wedge (b^2-4ac<0)\end{align} 上の論理式は ∀(任意記号) とそれに縛られた束縛変数 がありますが,下の論理式は自由変数 だけの式になっています.∃ (存在記号) と ∀(任意記号) をあわせて限量子 (quantifier) と呼びます.このように論理式を,限量子が含まない同値な論理式に変形することをQuantifier Elimination (QE,限量子消去) と呼びます.実数の理論では,代数的な一階述語論理式を限量子が含まない同値な論理式に変形するアルゴリズムが存在することが知られています(タルスキの定理).特に閉論理式(自由変数を含まない論理式)は,真か偽かをアルゴリズムで判定できます.
Redlog の使い方
REDUCE を Obtaining REDUCE から入手してインストールしましょう.
REDUCE を起動して,Redlog(reduce logic system)パッケージが読み込まれていないならロードしておきます.
load_package "redlog";
次にQEのためのおまじないをします(実数体 の理論ですという宣言).
rlset r$
Redlog には QE 用の関数 rlqe (Virtual Substitution),rlcad (Cylindrical Algebraic Decomposition) などが用意されています.論理式は次の表くらいが分かっていればとりあえずは十分でしょう.
記号論理 | Redlog |
---|---|
<>,<=, >= | |
[式1] [式2] | [式1] and [式2] |
[式1] [式2] | [式1] or [式2] |
[式1] [式2] | [式1] impl [式2] |
[式] | not [式] |
[述語] | all({}, [述語]) |
[述語] | ex({}, [述語]) |
問題をQEに翻訳
実数 が次の次の4条件を満たしている: このとき の符号を調べよ.
次の論理式を考えてみましょう.\begin{align}\exists a\exists b\exists c\exists x\exists y\exists z\exists p\bigl(&(a^2-b^2-c^2>0)\wedge (ax+by+cz=p)\\&\wedge (ap<0)\wedge (x>0) \wedge (r=x^2-y^2-z^2)\bigr) \end{align}これと同値な自由変数 だけに関する論理式が,条件 \begin{align} a^2-b^2-c^2>0, ax+by+cz=p, ap<0, x>0\end{align}のもとでの の取りうる値の条件となります.
正方形とその内部の点がある.線分の長さがそれぞれ であるとき,この正方形の面積を求めよ.
-平面上で とおくと条件は \begin{align} b^2+(a-c)^2=7^2, b^2+c^2=5^2, (a-b)^2+c^2=1^2, a > b > 0, a > c > 0 \end{align} と書けます.この条件のもとでの の値を求めたいので \begin{align}\exists a\exists b\exists c\bigl(&(b^2+(a-c)^2=7^2)\wedge (b^2+c^2=5^2)\wedge ((a-b)^2+c^2=1^2) \\ &\wedge (a > b)\wedge(b > 0) \wedge (a > c) \wedge(c > 0)\wedge (s=a^2)\bigr) \end{align} から限量子を消去して, の取りうる値を求めればよいことになります.