Re: Boolean algebra

*To*: mathgroup at smc.vnet.net*Subject*: [mg69385] Re: [mg69373] Boolean algebra*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Sun, 10 Sep 2006 07:19:51 -0400 (EDT)

On 10 Sep 2006, at 14:14, Andrzej Kozlowski wrote: > > On 9 Sep 2006, at 16:26, Menace wrote: > >> I'd like to solve the following problem in Mathematica, >> >> Given are the following preliminaries: >> (a1 || a2)=True >> (a1 && a2) = False >> >> Then, given the following conjunctive normal form: >> >> (b1 || a1) && (b1 || a2) >> >> This can be simpliefied to: b1 || (a1 && a2) >> >> Given the prelininaries I'd like Mathematica to simplify this to: b1. >> However, I cant figure out how to do this. I tried the following: >> >> prelims := {(a1 && a2) -> False, (a1 || a2) -> True}; >> f1 := (b1 || a2) && (b1 || a1); >> Simplify[f1] /. prelims >> >> and this seems to work. However >> >> f2 := (b1 || a1 || c1) && (b2 || a2 || a1); >> Simplify[f2] /. prelims >> >> evaluates to: (b1 || a1 || c1) && (b2 || a2 || a1) instead of b1 >> || a1 >> || c1. >> The reason of this seems to be the order in which a2 and a1 occur in >> f2. How can I make sure it works regardless of the order of a1 and >> a2? >> > > > I seems to me that in general it will be pretty hard to use > Mathematica for this sort of Boolean algebra without some AddOn > package. However, your particular cases are very easy. Note that > your assumptions amount simply to one assumption: > > In[1]:= > a2 = Not[a1]; > > Now we have: > > In[2]:= > Simplify[ (b1 || a2) && (b1 || a1)] > > Out[2]= > b1 > > > In[3]:= > Simplify[(b1||a1||c1)&&(b2||a2||a1)] > > Out[3]= > a1||b1||c1 > > > > Andrzej Kozlowski > Tokyo, Japan If you do not wish to use a global identity, you can use instead Simplify with assumptions: Simplify[(b1 || a2) && (b1 || a1), a2 = !a1 ] b1 Simplify[(b1 || a1 || c1) && (b2 || a2 || a1), a2 = !a1] a1 || b1 || c1 Andrzej Kozlowski Tokyo, Japan