Problem with IS and EQUAL in evaluating equality of expressions



--Alt-Boundary-13535.27004125
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

Am 13 May 2006 um 13:23 hat Henry Lenzi geschrieben:

> Dear All --
> 
>  I tried using this "is" operator today, and I failed miserably:
> 
> (%i27) is(equal ((x + 1)^2, x^2 + 2*x + 1));
> (%o27)                               true
> 
>  But...
> 
> (%i28) is(equal(sin(a+b),sin(a)*cos(b)+cos(a)*sin(b)));
> Maxima was unable to evaluate the predicate:
> equal(sin(b + a), cos(a) sin(b) + sin(a) cos(b))
>  -- an error.  Quitting.  To debug this try debugmode(true);
> (%i29)
> 
>  I don't grok the debugger, so I've got no usefull output.
> 
> (%i18) is((cos(t))**2=(1+cos(2*t))/2);
> (%o18)                               false
> (%i19) is(sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b));
> (%o19)                               false
> 
>  Is it me or is Maxima?

...

> 
>   Completely bewildered, gratefull in advance for any help,
>   regs,
> 
>    Henry Lenzi

Hallo Henry,

(%i1) is( 1=1.0 );
(%o1) 				     false
(%i2) is( 1+1=2 );
(%o2) 				     true

is with "=" compares literally after simplification

(%i3) is( equal( (x+y)^2, x^2+2*x*y+y**2 ) );
(%o3) 				     true
(%i4) map('ratsimp, [(x + 1)^2, x^2 + 2*x + 1] );
			   2		 2
(%o4) 			 [x  + 2 x + 1, x  + 2 x + 1]

is with equal uses ratsimp for simplification

this doesn't work for trigonometric functions

in your examples you can use trigreduce for simplification

(%i5) map('trigreduce,[ sin(a+b), sin(a)*cos(b)+cos(a)*sin(b) ] );
(%o5) 			   [sin(b + a), sin(b + a)]
(%i6) map('trigreduce,[ cos(t)**2,(1+cos(2*t))/2 ] );
			  cos(2 t) + 1  cos(2 t) + 1
(%o6) 			 [------------, ------------]
			       2	     2
then you can compare

(%i7) is( apply('equal,%) );
(%o7) 				     true

HTH
Volker




--Alt-Boundary-13535.27004125
Content-type: text/html; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html  xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en"><head>
<title></title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta http-equiv="Content-Style-Type" content="text/css"/>
</head>
<body>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">Am 13 May 2006 um 13:23 hat Henry Lenzi geschrieben:</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; Dear All --</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160; I tried using this &quot;is&quot; operator today, and I failed miserably:</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%i27) is(equal ((x + 1)^2, x^2 + 2*x + 1));</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%o27)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; true</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160; But...</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%i28) is(equal(sin(a+b),sin(a)*cos(b)+cos(a)*sin(b)));</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; Maxima was unable to evaluate the predicate:</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; equal(sin(b + a), cos(a) sin(b) + sin(a) cos(b))</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160; -- an error.&#160; Quitting.&#160; To debug this try debugmode(true);</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%i29)</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160; I don't grok the debugger, so I've got no usefull output.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%i18) is((cos(t))**2=(1+cos(2*t))/2);</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%o18)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; false</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%i19) is(sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b));</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; (%o19)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; false</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160; Is it me or is Maxima?</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">...</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160;&#160; Completely bewildered, gratefull in advance for any help,</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160;&#160; regs,</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt">&gt;&#160;&#160;&#160; Henry Lenzi</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">Hallo Henry,</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i1) is( 1=1.0 );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o1) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
false</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i2) is( 1+1=2 );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o2) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
true</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">is with &quot;=&quot; compares literally after simplification</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i3) is( equal( (x+y)^2, x^2+2*x*y+y**2 ) );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o3) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
true</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i4) map('ratsimp, [(x + 1)^2, x^2 + 2*x + 1] );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
2</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o4) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [x&#160; + 2 x + 1, x&#160; + 2 x + 1]</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">is with equal uses ratsimp for simplification</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">this doesn't work for trigonometric functions</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">in your examples you can use trigreduce for simplification</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i5) map('trigreduce,[ sin(a+b), sin(a)*cos(b)+cos(a)*sin(b) ] );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o5) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [sin(b + a), sin(b + a)]</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i6) map('trigreduce,[ cos(t)**2,(1+cos(2*t))/2 ] );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; cos(2 t) + 1&#160; cos(2 t) + 1</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o6) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [------------, ------------]</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
2</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">then you can compare</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%i7) is( apply('equal,%) );</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">(%o7) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
true</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">HTH</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt">Volker</span></font></div>
<div align="left"><font face="Arial" color="#7f0000" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"><font face="Arial" size="2"><span style="font-size:10pt"><br />
</span></font></div>
<div align="left"></div>
</body>
</html>

--Alt-Boundary-13535.27004125--