QE で解く

 今回は「問題を解く」とはどういうことなのかを QE の立場から見てみます.

 xy 平面上の楕円 x^2+3y^2=4 と直線 x+3y=k が異なる 2 点 A,B で交わるとき,3 角形 ABC の面積を S とおく.ただし,C(1,1) とする.
 このとき,S を k を用いて表し,S が最大となる k の値,および,そのときの S の値を求めよ.

 普通に「解く」なら,楕円と直線の式を連立して A,B の座標を求め,C の座標と合わせて面積の公式(?)に代入,得られた式が定める k の関数の極値微分法などを用いて求める,といった流れとなり,標準的な CAS なら,それを実行することはさして困難ではないでしょう.しかし,それでは人間が行う作業を CAS にやらせているだけで,何の面白みもありません.
 我々が理解すべきことは

問題で与えられた定義を論理式で表し,それを QE したものが「答え」である

という事実であり

〜を求めたいなら,ある変数(達)がその〜になるための必要十分条件を論理式で表し,QE すればよい

という認識を持って以下のように処理すれば,我々は「解法」から解放されます.

 すなわち,S が 3 角形 ABC の面積になるための条件は,楕円と直線の式をみたす実数の対が丁度 2 個存在して,それらを (a,b),(c,d) とおくと S=|(a-1)(d-1)-(b-1)(c-1)|/2 が成り立つことなので

Reduce[
 Exists[
  {a, b, c, d},
  a^2 + 3 b^2 == 4 && a + 3 b == k &&
  c^2 + 3 d^2 == 4 && c + 3 d == k && a != c &&
  S == Abs[(a - 1) (d - 1) - (b - 1) (c - 1)]/2
 ],
 Reals
]

のように MathematicaQE すると

-4 < k < 4 && S == Sqrt[(-(k - 4)^3)*(k + 4)]/(4*Sqrt[3])

と出力され,これを k の関数 S を定義する論理式と見て,値域の定義に従い

Reduce[ Exists[k,%] , Reals ]

のように QE すれば

0 < S <= 3

と出力されます.この結果のみを得たいなら,最初から

Reduce[
 Exists[
  {a, b, c, d, k},
  a^2 + 3 b^2 == 4 && a + 3 b == k &&
  c^2 + 3 d^2 == 4 && c + 3 d == k && a != c &&
  S == Abs[(a - 1) (d - 1) - (b - 1) (c - 1)]/2
 ],
 Reals
]

とすればよく,RedLog でも

rlslfq rlqe        
 ex({a,b,c,d,k},
 and(a^2+3*b^2=4,a+3*b=k,
   c^2+3*d^2=4,c+3*d=k,a<>c,
   4*s^2=( (a-1)*(d-1)-(b-1)*(c-1) )^2,s>=0
 )
 );

とすれば

4924There were 4925 QEPCADB calls!
s - 3 <= 0 and s > 0

と出力されます.