Re: Can't Simplify logical expression

*To*: mathgroup at smc.vnet.net*Subject*: [mg90822] Re: Can't Simplify logical expression*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Fri, 25 Jul 2008 06:16:26 -0400 (EDT)*Organization*: The Open University, Milton Keynes, UK*References*: <g69ftk$ig9$1@smc.vnet.net>

realyigo at gmail.com wrote: > Simplify[(a && (! b)) || (b && (! a))] > > I get this: > a && ! b || b && ! a > > But I want this: > Xor[a,b] > > > Any suggestions? First, a couple of general remarks. Functions such as FullSimplify[] and LogicalExpand[] are more appropriate than Simplify[] when dealing with logical expressions. Also, it is better to use Implies[] rather than Equal[]. For instance, FullSimplify[(a && (! b)) || (b && (! a)) == Xor[a, b]] (a && ! b) || (b && ! a) == (a \[Xor] b) Implies[(a && (! b)) || (b && (! a)), Xor[a, b]] // FullSimplify True LogicalExpand[(a && (! b)) || (b && (! a))] == LogicalExpand[ Xor[a, b]] True Back to your original query, though Mathematica can easily go from Xor[] to its expanded form LogicalExpand[ Xor[a, b]] (a && ! b) || (b && ! a) the reverse operation might be much more challenging for a variety of reasons. The thread titled, "((a&&b)||c)==((a||c)&&(b||c))", (started on Wednesday, 9 Nov 2005), is a must read on this subject. If you do not want to read all the posts, at least be sure to read Daniel Lichtblau's reply about And, Or, and Not vs Xor at http://groups.google.com/group/comp.soft-sys.math.mathematica/msg/714ea41389818a3f Regards, -- Jean-Marc