東ロボくんのこと(7)今年の問題

 http://d.hatena.ne.jp/ehito/20131129/1385725290 に続き
 人間が問題を訳した場合,計算機は本年の東大文科数学の問題をどの程度処理できるか?
の第2問です.http://www.yozemi.ac.jp/nyushi/sokuho/recent/tokyo/zenki/

 出題テーマは「2次曲線の性質を平方根の簡約によって解く」といった所ですが,残念ながらMathematicaは二重根号を外してくれません.また座標平面,2次式の平方なのでQE処理にも厳しいものがあります.

 まずは設定.

P={0,-Sqrt[2]};Q={0,Sqrt[2]};A={a,Sqrt[a^2+1]};

線分の長さは(ビルトインのNormでもよいのですが)内積の非負平方根のまま

Resolve[ForAll[a, 0 <= a <= 1, 
  Sqrt[(A - P).(A - P)] - Sqrt[(Q - A).(Q - A)] == c], Reals]

とします.これは c == 2 と即答です.

 (2)も

defB = Resolve[
  0 <= a <= 1 &&
  Exists[s, 0 <= s, {b1, b2} == (1 - s)*Q + s*A && b2 == Sqrt[2]/8*b1^2], Reals];
B = {b1, b2}; C2 = {b1, 2};

と設定を追加して

Resolve[ForAll[{a, b1, b2}, defB, 
  Sqrt[(A - P).(A - P)] + Sqrt[(B - A).(B - A)] + Sqrt[(C2 - B).(C2 - B)] == c], Reals]

ですが,これは帰って来ません.

 以上では,典型的な設問である「定数であることを示し」という部分を

 定義域Dの関数fは定数関数である ≡ ∃c(∀x(x∈D→f(x)=c))

に基いて訳し,値も判るようにcを自由変数として残したわけですが,例えば

Resolve[
 Exists[c, 
  ForAll[a, 0 <= a <= 1, 
   Sqrt[(A - P).(A - P)] - Sqrt[(Q - A).(Q - A)] == c]], Reals]
Sqrt[(A - P).(A - P)] - Sqrt[(Q - A).(Q - A)] /. {a -> 0}

と分けたほうが問題文には忠実です.

 なお,(2)への対応として

・二重根号を外させる
・根号を用いずに表す
・「定数である」の言い換えを工夫する

などが考えられますので,次回以降模索していきます.