Re: Boolean algebra
- To: mathgroup at smc.vnet.net
- Subject: [mg69426] Re: [mg69373] Boolean algebra
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Tue, 12 Sep 2006 06:52:42 -0400 (EDT)
- References: <200609090726.DAA21734@smc.vnet.net>
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? Here is one possibility that might be helpful: cond = Not[a1&&a2]&&(a1||a2); f1=(b1 || a2) && (b1 || a1); f2=(b1 || a1 || c1) && (b2 || a2 || a1); In[5]:= Simplify[f1 && cond || ! cond, cond] Out[5]= b1 In[6]:= Simplify[f2 && cond || ! cond, cond] Out[6]= a1 || b1 || c1 || ! a2 The first example could also be done with Simplify[f1,cond]. Unfortunately, in the second example the result isn't quite what you wanted (as Andrzej said, variable elimination in Boolean algebras would be needed to eliminate the !a2 term), and I suspect that this technique will not be adequate for more complex examples. Carl Woll Wolfram Research
- References:
- Boolean algebra
- From: "Menace" <menace232323@yahoo.com>
- Boolean algebra