ncond 動かない式を動かす

以前にも述べましたが,変数の個数を低減させた必要条件を付加する ncond は強力で,nnss,nnsolvexx の求解能力はこの関数によるヒントの賜物とも言えます.

(%i98) f:(a^2+b^2+c^2<=3)%and(a*b*c>=1)$
Evaluation took 0.0100 seconds (0.0200 elapsed) using 538.359 KB.
(%i99) qe([],f);
Evaluation took 0.3500 seconds (0.5500 elapsed) using 17.918 MB.
(%o99) (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (a*b*c-1 = 0)
(%i100) nnss(f);
Evaluation took 17.1500 seconds (23.0500 elapsed) using 952.370 MB.
(%o100) ((a-1 = 0) %and (b-1 = 0) %and (c-1 = 0))
  %or ((a-1 = 0) %and (b+1 = 0) %and (c+1 = 0))
  %or ((a+1 = 0) %and (b-1 = 0) %and (c+1 = 0))
  %or ((a+1 = 0) %and (b+1 = 0) %and (c-1 = 0))

verbose モード.

(%i101) prt(x):=print(x)$
Evaluation took 0.0000 seconds (0.0000 elapsed) using 200 bytes.
(%i102) nnss(f);

pre-simplified formula 
2 
(a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (a*b*c-1 = 0) 
necessary condition 
a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0 
a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0 
b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0 
((a-1 = 0) %and (a-1 <= 0) %and (a+1 >= 0))
  %or ((a-1 <= 0) %and (a+1 = 0) %and (a+1 >= 0))
  
((b-1 = 0) %and (b-1 <= 0) %and (b+1 >= 0))
  %or ((b-1 <= 0) %and (b+1 = 0) %and (b+1 >= 0))
  
((c-1 = 0) %and (c-1 <= 0) %and (c+1 >= 0))
  %or ((c-1 <= 0) %and (c+1 = 0) %and (c+1 >= 0))
  
true 
8 
((a-1 = 0) %and (a-1 <= 0) %and (a+1 >= 0) %and (b-1 = 0) %and (b-1 <= 0)
           %and (b+1 >= 0) %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0)
           %and (c-1 = 0) %and (c-1 <= 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
           %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
           %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 = 0) %and (a-1 <= 0) %and (a+1 >= 0) %and (b-1 = 0)
                 %and (b-1 <= 0) %and (b+1 >= 0)
                 %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 <= 0)
                 %and (c+1 = 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                 %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                 %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 = 0) %and (a-1 <= 0) %and (a+1 >= 0) %and (b-1 <= 0)
                 %and (b+1 = 0) %and (b+1 >= 0)
                 %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 = 0)
                 %and (c-1 <= 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                 %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                 %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 = 0) %and (a-1 <= 0) %and (a+1 >= 0) %and (b-1 <= 0)
                 %and (b+1 = 0) %and (b+1 >= 0)
                 %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 <= 0)
                 %and (c+1 = 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                 %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                 %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 <= 0) %and (a+1 = 0) %and (a+1 >= 0) %and (b-1 = 0)
                  %and (b-1 <= 0) %and (b+1 >= 0)
                  %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 = 0)
                  %and (c-1 <= 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                  %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                  %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 <= 0) %and (a+1 = 0) %and (a+1 >= 0) %and (b-1 = 0)
                  %and (b-1 <= 0) %and (b+1 >= 0)
                  %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 <= 0)
                  %and (c+1 = 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                  %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                  %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 <= 0) %and (a+1 = 0) %and (a+1 >= 0) %and (b-1 <= 0)
                  %and (b+1 = 0) %and (b+1 >= 0)
                  %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 = 0)
                  %and (c-1 <= 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                  %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                  %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  %or ((a-1 <= 0) %and (a+1 = 0) %and (a+1 >= 0) %and (b-1 <= 0)
                  %and (b+1 = 0) %and (b+1 >= 0)
                  %and (a^2*b^4+a^4*b^2-3*a^2*b^2+1 = 0) %and (c-1 <= 0)
                  %and (c+1 = 0) %and (c+1 >= 0) %and (a*b*c-1 = 0)
                  %and (a^2*c^4+a^4*c^2-3*a^2*c^2+1 = 0)
                  %and (b^2*c^4+b^4*c^2-3*b^2*c^2+1 = 0))
  
simplifing... 
{(a-1 = 0) %and (b-1 = 0) %and (c-1 = 0),
 (a-1 = 0) %and (b+1 = 0) %and (c+1 = 0),
 (a+1 = 0) %and (b-1 = 0) %and (c+1 = 0)}
  
{(a-1 = 0) %and (b-1 = 0) %and (c-1 = 0),
 (a-1 = 0) %and (b+1 = 0) %and (c+1 = 0),
 (a+1 = 0) %and (b+1 = 0) %and (c-1 = 0)}
  
{(a-1 = 0) %and (b-1 = 0) %and (c-1 = 0),
 (a+1 = 0) %and (b-1 = 0) %and (c+1 = 0),
 (a+1 = 0) %and (b+1 = 0) %and (c-1 = 0)}
  
{(a-1 = 0) %and (b+1 = 0) %and (c+1 = 0),
 (a+1 = 0) %and (b-1 = 0) %and (c+1 = 0),
 (a+1 = 0) %and (b+1 = 0) %and (c-1 = 0)}
  
{a-1 = 0,b-1 = 0} 
{a-1 = 0,c-1 = 0} 
{b-1 = 0,c-1 = 0} 
{a-1 = 0,b+1 = 0} 
{a-1 = 0,c+1 = 0} 
{b+1 = 0,c+1 = 0} 
{a+1 = 0,b-1 = 0} 
{a+1 = 0,c+1 = 0} 
{b-1 = 0,c+1 = 0} 
{a+1 = 0,b+1 = 0} 
{a+1 = 0,c-1 = 0} 
{b+1 = 0,c-1 = 0} 
Evaluation took 18.5100 seconds (24.4700 elapsed) using 954.651 MB.
(%o102) ((a-1 = 0) %and (b-1 = 0) %and (c-1 = 0))
  %or ((a-1 = 0) %and (b+1 = 0) %and (c+1 = 0))
  %or ((a+1 = 0) %and (b-1 = 0) %and (c+1 = 0))
  %or ((a+1 = 0) %and (b+1 = 0) %and (c-1 = 0))