Maple の動向(その2)

 Maple 13 において,RegularChains のサブパッケージ ParametricSystemTools に加わった RealRootClassification 関数 (RegularChains[ParametricSystemTools] - Maple Programming Help)は,その名の通り,多項式で表された不等式制約を許す連立方程式の実数解の個数をその係数の条件により分類するものです.
 実行には

with(RegularChains):
with(ParametricSystemTools):

のようにパッケージを読み込み,さらに結果を pretty print するなら

with(SemiAlgebraicSetTools):

とした後,例えば
∃x ( x^2-a=0 )
となる条件を出力させるには

R:=PolynomialRing([x,a]):

のように変数の集合を用意した上で

DisplayQuantifierFreeFormula(
RepresentingQuantifierFreeFormula(
RepresentingBox(
RealRootClassification( [x^2-a] , , , [] , 1 , 1..n , R )
[1][1] , R ) ) ):

と入力すると

0

が得られますが,いきなり結果が間違っていますね.
 どうしたことかと

infolevel[RegularChains]:=1:

のようにインフォレベルを上げて,再度実行すると

RealRootClassification: FINAL RESULT:
RealRootClassification: The system has given number of real solution(s) IF AND ONLY IF
RealRootClassification: [0 < R[1]]
RealRootClassification: where
RealRootClassification: R[1] = a
RealRootClassification: PROVIDED THAT
RealRootClassification: a <> 0
RealRootClassification: 0.
0 < a

ということで,勝手に a≠0 を前提に答えてしまっています.
 また

R:=PolynomialRing([x,y,a]):
RealRootClassification([x^2+y^2-1],[x+y-a],[ ],[ ],1,1..n,R):

RealRootClassification: "system may have solutions of positive dimension"
RealRootClassification: FINAL RESULT:
RealRootClassification: The system has given number of real solution(s) IF AND ONLY IF
RealRootClassification: [R[1] < 0, 0 < R[2], R[3] <= 0]
RealRootClassification: OR
RealRootClassification: [R[1] < 0, 0 < R[2], 0 <= R[3], R[4] < 0]
RealRootClassification: where
RealRootClassification: R[1] = y-1
RealRootClassification: R[2] = y+1
RealRootClassification: R[3] = a-y
RealRootClassification: R[4] = a^2-2*a*y+2*y^2-1
RealRootClassification: PROVIDED THAT
RealRootClassification: y-1 <> 0
RealRootClassification: y+1 <> 0
RealRootClassification: a^2-2*a*y+2*y^2-1 <> 0
RealRootClassification: .16e-1*seconds
RealRootClassification: Possibly, the dimension of the real solutions is 1
RealRootClassification: You may need to do QE to obtain the conditions on the parameters.
RealRootClassification: Please note that we view the variable(s) [y] as parameter(s)!
RealRootClassification: "parametric input system is generically positive-dimensional"
RealRootClassification: "we have viewed some variables as parameters ..."

のように,positive-dimensional な解をもつシステムでは,未知変数(束縛変数)をパラメータ(自由変数)として使ってしまい,条件ではなく,やはり方程式 solver の系統であることが判ります.ちなみに Mathematica

R[1] = y - 1
R[2] = y + 1
R[3] = -y + a
R[4] = 2 y^2 - 1 - 2 y a + a^2
ans = And[R[1] < 0 , 0 < R[2] , R[3] <= 0] ||
And[R[1] < 0, 0 < R[2], 0 <= R[3], R[4] < 0]
Reduce[ Exists[{y}, ans] ]

と後始末を頼めば

a < Sqrt[2]

と答えてくれますが,RealRootClassification が勝手に付けた前提のため境界が抜けています.
 と,何だか悪口ばかりですが,上記は,この関数を乱暴に扱った例であり,その実力のほどは,次回,じっくりお話します.