sorry for bothering the list again but I would appreciate some help.<br>
I'm trying to do operation(addition,multiplications) with multivariate
polynomials. The variables cat take values 0 and 1 and I'm working with
about 30 variables k0,k1...<br>
So since 0^2=0 and 1^1=1<br>
I make the following substistution(written for ginsh) subs(e,$0^$1==$0).<br>
Since 2*x=0 mod 2 I need to do parse all the coeffiients mod 2.<br>
The problem is that even if I expand the expressions ginac(or at least
my code to be honest) does not appear to expand my expressions halting
immediately all my calculations<br>
e.g. this list of expressions is an output that was supposed to have been expanded and have been reduced mod 2<br>
temp={1+k4+k5,(1+k5)*(1+k4)+k6,(1+k5)*(1+k6)*(1+k4)+k7,(1+k7)*(1+k5)*(1+k6)*(1+k4)+k8,1+k9+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4),1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4)),k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10,1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4)))+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10,k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4)))+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10,k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10)*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))),k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10)*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))),k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10)*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))),k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10)*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))),1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10*(1+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))*k10)*(1+k10+k9*(1+(1+k7)*(1+k8)*(1+k5)*(1+k6)*(1+k4))),0,0,1,0,1,0,1,0,0,1,1,1,0,k0,k1,k2,k3,1+k4}
<br>
Using ginsh is obvious that this has not happened.<br>
Cutting and pasting code from manual has done some work but not much:(<br>
<br>
This is what I've got so far:<br>
<br>
const symbol &amp; g_smbl(const string &amp; s){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static map&lt;string, symbol&gt; directory;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map&lt;string, symbol&gt;::iterator i = directory.find(s);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i != directory.end())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return i-&gt;second;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return directory.insert(make_pair(s, symbol(s))).first-&gt;second;<br>
}<br>
<br>
struct map_rem_quad_evens : public map_function {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex var;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex tmp,tmp1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numeric coeff;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map_rem_quad_evens(const ex &amp; var_) : var(var_) {}&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex operator()(const ex &amp; e){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_a&lt;add&gt;(e))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return e.map(*this);&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_a&lt;mul&gt;(e))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return e.map(*this);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else if (is_a&lt;power&gt;(e) &amp;&amp; e.op(0).is_equal(var))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return e.op(0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (is_a&lt;numeric&gt;(e)){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
coeff=ex_to&lt;numeric&gt;(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (coeff&gt;0) return mod(coeff,2);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else return e.map(*this);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return e;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
};<br>
<br>
<br>
ex simpl(const ex &amp; e){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex tmp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp=subs(expand(e),pow(wild(),wild(1))==wild());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tmp;<br>
}<br>
<br>
ex expr_simpl(const ex &amp; e){<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; ex a;<br>
&nbsp;&nbsp;&nbsp; a=expand(e);<br>
&nbsp;&nbsp;&nbsp; map_rem_quad_evens rem_quad_evens(g_smbl(&quot;k0&quot;));&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; a=rem_quad_evens(e);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=simpl(a);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=rem_quad_evens(e);<br>
&nbsp;&nbsp;&nbsp; return a;&nbsp;&nbsp;&nbsp; <br>
}<br>
<br>
lst expr_simpl(const lst &amp; a){<br>
&nbsp;&nbsp;&nbsp; int i;<br>
&nbsp;&nbsp;&nbsp; lst tmp;<br>
&nbsp;&nbsp;&nbsp; tmp= 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;<br>
&nbsp;&nbsp;&nbsp; for (i=0;i&lt;word_len;i++)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tmp[i]=expr_simpl(a[i]);<br>
&nbsp;&nbsp;&nbsp; return tmp;<br>
}<br>
<br>