11
$\begingroup$

I have a huge rational function of three variables (which is of order ~100Mbytes if dumped to a text file) which I believe to be identically zero. Unfortunately, neither Mathematica nor Maple succeeded in simplifying the expression to zero.

I substituted a random set of three integers to the rational function and indeed it evaluated to zero; but just for curiosity, I would like to use a computer algebra system to simplify it. Which computer algebra system should I use? I've heard of Magma, Macaulay2, singular, GAP, sage to list a few. Which is best suited to simplify a huge rational expression?


In case you want to try simplifying the expressions yourself, I dumped available in two notations, Mathematica notation and Maple notation. Unzip the file and do

<<"big.mathematica" 

or

read("big.maple") 

from the interactive shell. This loads expressions called gauge and cft, both rational functions of a1, a2 and b. Each of which is non-zero, but I believe gauge=cft. So you should be able to simplify gauge-cft to zero. The relation comes from a string duality, see e.g. this paper by M. Taki.

  • 1
    Well, but the expression is identically zero (as you can check by yourself by putting numerical values). The problem, I believe, is the amount of memory Mathematica or Maple needs.2011-09-04

2 Answers 2

14

Mathematica can actually prove that gauge-cft is exactly zero.

To carry out the proof observe that expression for gauge is much smaller than the cft. Hence we first canonicalize gauge using Together, and then multiply cft by it denominator:

enter image description here

  • 3
    Wow, you're a super expert on Mathematica! ... and I learned you're in fact the kernel developer. I'm honored to meet you. Please implement this trick to `FullSimplify` :)2011-09-04
9

For highly recursive rational expressions it is better to factor. Here is a Maple program that does it in 3 minutes on a Core i7 2600, suggested by Mike Monagan:

rec := proc(a) option remember;   if type(a,{`*`,`+`}) then     factor(map(rec, a));   elif type(a,`^`) then     rec(op(1,a))^op(2,a);   else a;   end if; end proc:  read "big.maple": CodeTools:-Usage(rec(gauge - cft));  # returns zero memory used=24.06GiB, alloc change=276.79MiB, cpu time=3.53m, real time=3.00m 
  • 0
    Tha$n$k you for the $n$ew info!2013-07-19