34
Help us understand the problem. What are the problem?

posted at

updated at

大学の数学の入試問題を量化子消去でサッと解く

はじめに

大学の入試問題の数学の問題の中には、コンピュータプログラムを実行することで簡単に解くことができるものもあります。この記事では、実際にそれらの問題を解いてみます。

前提知識

  • 高校数学
  • 量化子、量化

量化子消去

量化子消去 (quantifier elimination, QE) というのは、量化子を含んだ論理式を、それと同値な量化子を含まない論理式に変形することを指します。例えば、高校数学で典型的な問題として、 2 次関数が常に x 軸の上にある (つまり $x^2 + ax + b > 0$ が常に成り立つ) のはいつか? という問題を考え、対応する論理式を見てみましょう。これは以下のようになります。
$$ \forall x. x^2 + ax + b > 0$$
これと同値な、量化子を含まない論理式は以下です。
$$ a^2 - 4b < 0$$

この変形により変数が少なくなり、簡単な式になりました。一般に量化子を消去することは問題を「解く」ことに相当し、この記事で見ていくのは量化子消去によって解ける問題です。

詳しくは Quantifier Elimination - Wikipedia を見てください。1

QEPCAD について

実数に関する冠頭標準形の論理式の量化子消去を行うことのできるソフトウェアです。冠頭標準形というのは、$\forall x. \exists y. x > y$ のように、論理式の先頭だけに量化子があるような論理式のことです。

インストール方法

https://ashiato45.hatenablog.jp/entry/2018/04/25/070040 に詳しいです。

問題

2020 年度東京大学 数学 (理科2) 第 1 問

問題へのリンク
ここでは (3) のみを扱います。((1) と (2) も同様の手順で扱えます。)
以下の命題の量化子消去を行い、これが常に成り立つことを示したいです。
$$(\forall x. ax^2+bx+c>0 \wedge bx^2+cx+a>0 \wedge cx^2+ax+b>0 \Leftrightarrow x > p) \Rightarrow p = 0$$
しかしこれは冠頭標準形ではないので、以下の変形を用いて冠頭標準形に変換する必要があります。

  • (∀x. φ(x)) -> ψ は ∃x. (φ(x) -> ψ) と同値。

この変形を行うと以下のような論理式になります。
$$\exists x. ((ax^2+bx+c>0 \wedge bx^2+cx+a>0 \wedge cx^2+ax+b>0 \Leftrightarrow x > p) \Rightarrow p = 0)$$

これを bin/qepcadd に与えると、以下のような結果が得られます。出力のところに TRUE とありますので、この論理式は常に成立する、つまり問題の条件から $p=0$ が言えることがわかりました。
https://gist.github.com/koba-e964/2eedd09699c1f531f300abcff80dffe9

todai-2020-1.txt
[todai-2020-1]
(a,b,c,p,x)
4
(E x)[
    [[a x^2 + b x + c > 0 /\ b x^2 + c x + a > 0 /\ c x^2 + a x + b > 0] <==>
    [x > p]] ==> [p = 0]
].
finish
出力抜粋
An equivalent quantifier-free formula:

TRUE


=====================  The End  =======================

(なお、証明問題ではなく、「$p$ についての条件を求めよ」という形式だと、$\exists a. \exists b. \exists c. \forall x. ax^2+bx+c>0 \wedge bx^2+cx+a>0 \wedge cx^2+ax+b>0 \Leftrightarrow x > p$ を量化子消去すればよいことになりますが、これを bin/qepcadd に与えるとメモリ不足のエラーになりました。一応 +N<セル数> というオプションはありますが、+N10000000 を与えても解決しません。)

2021 年度東京大学 数学 (理科) 第 1 問

問題へのリンク
(1) を扱います。
問題の条件を論理式で表すと以下の通りになります。

  • 「方程式 $x^2+ax+b=-x^2$ は $-1<x<0$ の範囲にただ一つの解を持つ」→ $\exists!x_1. x_1^2+ax_1+b=-x_1^2 \wedge -1<x_1<0$
  • 「方程式 $x^2+ax+b=-x^2$ は $0<x<1$ の範囲にただ一つの解を持つ」→ $\exists!x_1. x_2^2+ax_2+b=-x_2^2 \wedge 0<x_2<1$

ここで $\exists! a$ というのは、「条件を満たす $a$ がただ一つ存在する」という意味です。
これを表現するための記法が QEPCAD にはあり、(X1 a) という文字列で表現できます。

入出力は以下の通りです。出力によると答えは $|a|-2 < b < 0$ だそうです。

todai-2021-1.txt
[todai-2021-1]
(a,b,x1,x2)
2
(X1 x1)(X1 x2)[
    [x1^2 + a x1 + b = -x1^2 /\ -1 < x1 /\ x1 < 0] /\
    [x2^2 + a x2 + b = -x2^2 /\ 0 < x2 /\ x2 < 1]
].
finish
出力抜粋
An equivalent quantifier-free formula:

b < 0 /\ b + a + 2 > 0 /\ b - a + 2 > 0


=====================  The End  =======================

2021 年度東京大学 数学 (理科) 第 3 問

問題へのリンク

(1) を扱います。
途中まで手計算をします。
$f(1) = 1/4 で f'(1) = 1/8$ なので、接線の方程式は $y = (x+1)/8$ です。これと $y = f(x)$ の共有点を求めるためには方程式 $x/(x^2+3) = (x+1)/8$ が解ければ良いですが、QEPCAD は除算を扱うことができません。そこで分母を払い、$8x = (x+1)(x^2+3)$ の解を求めることにします。$x \neq 1$ という条件があるので、これは $x = -3$ というのが出力からわかります。

todai-2021-3.txt
[todai-2021-3]
(x)
1
[
    8 x = (x + 1) (x^2 + 3) /\
    x /= 1
].
finish
出力抜粋
An equivalent quantifier-free formula:

x + 3 = 0


=====================  The End  =======================

2021 年度東京大学 数学 (理科) 第 6 問

問題へのリンク

またもメモリ不足。

todai-2021-6.txt
[todai-2021-6]
(b,c,p,q,r,x)
5
(A x)[
    x^4 + b x + c = (x^2 + p x + q) (x^2 - p x + r) /\ [p > 0 \/ p < 0]
].
finish

2021 年度京都大学 数学 (理系) 第 2 問

問題へのリンク

途中まで手計算をします。
$y = (x^2+1)/2$ の $(t, (t^2+1)/2)$ における接線は $y = tx + (-t^2+1)/2$ です。この接線と x 軸との交点 Q は $(t/2 - 1/2t, 0)$ です。よって $\mathrm{PQ}^2 = (t/2+1/2t)^2 + ((t^2+1)/2)^2$ です。
この $\mathrm{PQ}^2$ の取りうる範囲を量化子消去で求めれば、最小値がわかるわけです。

この式を論理式に直すため、以下のステップを踏みます。

  • $s = 1/t$ と置く。これは QEPCAD は除算を認識できないため。この式自体は $\exists s. ts = 1 \wedge ....$ という式で表現できる。
  • $dx = t/2+1/2t, dy = (t^2+1)/2, l = \mathrm{PQ}$ と置く。

最終的な論理式は以下のようになります。
$$\exists t.\exists s. \exists dx. \exists dy.
t s = 1 \wedge
2 dx = t + s \wedge
2 dy = t^2 + 1 \wedge
l^2 = dx^2 + dy^2$$

これに対し量化子消去を実行すると、$16 l^2 - 27 \ge 0$ が得られます。($l$ は非負なので、) つまり $l \ge 3\sqrt{3}/4$ ということです。めでたしめでたし。

kyodai-2021-2.txt
[kyodai-2021-2]
(l,t,s,dx,dy)
1
(E t)(E s)(E dx)(E dy)[
    [t s = 1] /\
    [2 dx = t + s] /\
    [2 dy = t^2 + 1] /\
    [l^2 = dx^2 + dy^2]
].
finish
出力抜粋
An equivalent quantifier-free formula:

16 l^2 - 27 >= 0


=====================  The End  =======================

まとめ

いかがでしたか?
量化子除去は強力なツールで、実数についての加減乗除についての式であれば理論的には完全に解けることが証明されています。とはいえ、実用上は変数の個数が多いと計算時間・メモリ両方の観点で難しいのが現実です。
それでは皆様、楽しい量化子除去ライフを。


  1. 私が量化子消去を最初に知ったのは http://www.kmonos.net/wlog/129.html#_2300130307 です。そこでも紹介されていますが、https://www.youtube.com/watch?v=IHkbXpjiX5g&ab_channel=OginoNobuyaOginoNobu という面白い動画があるので観ましょう。 

  2. 数学なのに理科ってどういうことだよ、と思われるかもしれませんが、東大入試においては文系・理系という区分ではなく文科・理科という区分が用いられています。多分実態は同じで名前が違うだけだと思いますが。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
34
Help us understand the problem. What are the problem?