Re: ((a&&b)||c)==((a||c)&&(b||c))

*To*: mathgroup at smc.vnet.net*Subject*: [mg62107] Re: ((a&&b)||c)==((a||c)&&(b||c))*From*: John Doty <jpd at whispertel.LoseTheH.net>*Date*: Fri, 11 Nov 2005 02:52:36 -0500 (EST)*References*: <200511090845.DAA17387@smc.vnet.net> <43721D94.9050307@wolfram.com> <dkv013$7ts$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Steven T. Hatton wrote: > On Wednesday 09 November 2005 11:02 am, Daniel Lichtblau wrote: >>Equal does not do logical manipulations on its operands. > > > That's part of what I'm trying to understand. Mathamatica AFAIK takes > expressions and transforms them into the simplest form possible, and then > does pattern patching. No, that's not what it does. There are a few transformations it does automatically, but they don't add up to anything like a transformation to "simplest form possible". There are expensive heuristic procedures, Simplify[] and FullSimplify[] that attempt this, but they are not invoked automatically and also cannot be guaranteed to find the "simplest form possible". Ordinary algebra in Mathematica defies most of your expectations also: In[1]:= (a + 1)^2 == a^2 + 2*a + 1 Out[1]= (1 + a)^2 == 1 + 2*a + a^2 In[2]:= Expand[%] Out[2]= (1 + a)^2 == 1 + 2*a + a^2 In[3]:= Simplify[%] Out[3]= True The main difference is that Simplify[] won't apply LogicalExpand[] automatically. I suppose this would be hazardous if some symbols didn't represent booleans. However: In[10]:= Simplify[((a && b) || c) == ((a || c) && (b || c)), TransformationFunctions -> {Automatic, LogicalExpand}] Out[10]= True -jpd

**References**:**((a&&b)||c)==((a||c)&&(b||c))***From:*"Steven T. Hatton" <hattons@globalsymmetry.com>