自動解答系の作り方(1)

 突然(でもない?)ですが,日本語混じりの LaTeX の問題文を入力とする自動解答システムを試作しました.扱い易い問題ならそれなりに処理できるようになりましたので,これについて書いていこうと思います.

 自動解答といっても QE を含めた数式処理は Mathematica に丸投げしており,行うのは

問題文からの Mathematica コマンドの生成

です.具体的には,キーワードから問題のタイプ(分野)を識別し,形やキーワードとの関係から問題文中の項,論理式を整形の上,適当なコマンドへ埋め込むといった処理で,極言すれば形式的な変換に過ぎません.今の所,2次試験では

 ・値域(最大値,最小値,それらに対応する定義域内の要素)を求める問題

 ・不等式系で表された座標平面・空間内の図形の面積・体積を求める問題

センター試験では

 ・式の値を求める問題

 ・方程式・不等式の解集合を求める問題

に対応しています.入力と出力の例を挙げます.

東京大学2011文科第1問

 $x$の3次関数$f(x)=ax^3+bx^2+cx+d$が,3つの条件
\[ f(1)=1,\ f(-1)=-1,\ \int_{-1}^{1}(bx^2+cx+d)d{x}=1 \]
を全て満たしているとする.このような$f(x)$の中で定積分
\[ I=\int_{-1}^{\frac{1}{2}} \{f''(x)\}^2 d{x} \]
を最小にするものを求め,そのときの$I$の値を求めよ.
ただし,$f''(x)$は$f'(x)$の導関数を表す.

を入力すると

min == 81/32
d == 3/4 && c == 5/4 && b == -3/4 && a == -1/4

と出力されます.独立変数(束縛変数)がa,b,c,dであることの明示がない問題です.また一応,ax とあれば aとxとの積として扱うようにしましたが,インテグラルと対の積分変数には { } が必須です.

センター試験2011数学1第1問〔2〕

 $n$を自然数とし
$$A=n^4-2n^3+3n^2-2n+2$$
とおく.
$$n^4+3n^2+2=(n^2+ans[1]) (n^2+ans[2])$$
であるから
$$A=(n^2+ans[3]) (n^2-ans[4] n+ans[5])$$
となる.さらに
$$n^2-ans[4] n+ans[5]=(n-ans[6])^2+ans[7]$$
である.したがって,$A<1000$を満たす最大の$n$は$ans[8]$であり,このときの$A$の素因数分解は
$$A=ans[9] \times (ans[10] ans[11]) \times (ans[12] ans[13])$$
となる.

を入力すると

{ans[1] -> 2, ans[2] -> 1, ans[3] -> 1, ans[4] -> 2, ans[5] -> 2, ans[6] -> 1, ans[7] -> 1, ans[8] -> 6, ans[9] -> 1, ans[10] -> 7, ans[11] -> 4, ans[12] -> 1, ans[13] -> 3}

と出力されます.この問題のポイントは

 ・ans[6],ans[7] を得るには ans[4],ans[5] が必要である点

 ・$n$は$ans[8]$のように論理式ではなく項と日本語で書かれている点

 ・ans[10] ans[11],ans[12] ans[13] のような連続した空欄がある点

です.なお,素因数という条件が反映されていないので ans[9],ans[10],ans[11] は間違っています.