Re: Simplifying a Boolean Expression
- To: mathgroup at smc.vnet.net
- Subject: [mg68886] Re: [mg68790] Simplifying a Boolean Expression
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Tue, 22 Aug 2006 05:20:22 -0400 (EDT)
- References: <200608180712.DAA02183@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hebhardt, Jon wrote:
> Can Mathametica be used to simplify the following type of logic typically
> found in programming applications, and if so, how do I go about setting it
> up?
>
>
>
> EXAMPLE
>
> Variables A and T can have the values "none", "dense", "sparse"
>
> The variable X will be assigned a value of either "onepass" or "twopass"
> based on the following logic:
>
>
>
> IF
>
> [(A="none") AND (T="none")] OR [(A="dense") OR (A="sparse") AND (T="none")]
> OR [(A="dense") AND (T="dense")] THEN X = "onepass"
>
> ELSE IF
>
> [{A="sparse") AND (T="sparse")] OR [(A="sparse") AND (T="dense")] THEN X =
> "twopass"
>
>
>
> I want to be able to express this type of problem in Mathematica and have it
> return the simplest logic for assigning a value to X.
>
>
>
> Regards,
>
> Jon
>
>
>
> Work: 401-752-3821
>
> Cell: 508-873-9780
>
Here is an approach that might help. Use integers 1-3 for "none",
"dense", and "sparse", and likewise for the number of passes (where
"threepass" is a dummy for the case where neither condition holds). Then
use Reduce to solve a system of equations and bounded inequalities,
removing from consideration the threepass case. It can be done as below.
{none,dense,sparse} = {1,2,3};
{onepass,twopass,threepass} = {1,2,3};
cond1 = (aa==none && tt==none) ||
((aa==dense || aa==sparse) && tt==none);
cond2 = (aa==sparse && tt==sparse) ||
(aa==sparse && tt==dense);
In[51]:= Reduce[{Implies[cond1,xx==onepass] &&
Implies[!cond1 && cond2, xx==twopass] &&
Implies[!cond1 && !cond2, xx==threepass],
Element[{aa,tt,xx},Integers],
1<=aa<=3, 1<=tt<=3, 1<=xx<=2}, xx]
Out[51]= (aa == 1 && tt == 1 && xx == 1) ||
(aa == 2 && tt == 1 && xx == 1) ||
(aa == 3 && tt == 1 && xx == 1) ||
(aa == 3 && tt == 2 && xx == 2) ||
(aa == 3 && tt == 3 && xx == 2)
I'm not sure if this is quite what you seek but it might be a start.
Daniel Lichtblau
Wolfram Research
- References:
- Simplifying a Boolean Expression
- From: "Hebhardt, Jon" <jhebhardt@textronfinancial.com>
- Simplifying a Boolean Expression