Re: Logic and Truth Tables with Mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg129953] Re: Logic and Truth Tables with Mathematica?
- From: Dana DeLouis <dana01 at icloud.com>
- Date: Wed, 27 Feb 2013 23:44:34 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
> Can Mathematica, given a relation such as P->Q generate the truth table?
Hi. You are looking for the function 'BooleanTable
If interested, here is a custom function that I use.
The 2 heading rows are written in both normal form, and traditional form.
You can add any additional intermediate steps.
I've added line numbers to the output.
If it finds a possible shorter version, it is added to the end of the table.
TruthTable[Implies[P,Q]]
For another example, I want to add 'And[p,s] to the table.
The last column has a suggestion for a shorter version.
equ=(((p||q)&&(p\[Implies]r)&&(q\[Implies]s))&&p)||q;
TruthTable[equ, {And[p,s]} ]
= = = = = = = = = =
HTH :>)
Dana DeLouis
Mac & Mathematica 9
= = = = = = = = = =
TruthTable[equ_,steps_List:{}]:=Module[{v,data,min,hdg},
(*
Note: For steps, add any intermediate steps
would like to see inside { }
Note: Requiers Aux Function 'BoolMin[ ]
*)
v = BooleanVariables[equ];
v=Join[v,BooleanVariables[steps]] //Union;
AppendTo[v,{steps,equ}];
(* If shorter version found, add that to the end
as a possible suggestion *)
min=BoolMin[equ];
If[UnsameQ[min,equ],AppendTo[v,min]];
v=Flatten[v];
(* Calculate table *)
data=BooleanTable[v];
(* Adjust Table Data *)
data = data/.{True->Style["T",Blue,Bold],False->Style["F",LightGray]};
(* Add Ref numbers *)
data=Join[Map[List,Range[Length[data]]],data,2];
(* Add 2 Heading Rows *)
(* Normal Form, and Traditional Form *)
hdg = Join[{"#"},v];
PrependTo[data,Style[TraditionalForm[#],Bold]&/@hdg];
PrependTo[data,hdg];
(* Clear the upper left corner *)
data =ReplacePart[data,{1,1}->""];
Grid[data,
Frame->All,
Alignment->Center,
ItemSize->Automatic,
Background -> =
{None,{LightBlue,LightBlue},{{{3,-1},{-1,-1}}->LightYellow}}
]
]
= = = = = Aux Function = = = = =
// Attempts to find a shorter version by trying all options.
BoolMin[equ_]:=Module[{opts,v,len},
opts = {"DNF","SOP","CNF","POS","ANF","NOR","NAND","AND","OR"} ;
v=BooleanMinimize[equ,#]&/@opts;
(* Place Original equation at beginning of list *)
PrependTo[v,equ];
len=LeafCount/@v;
(* With multiple Minimum leaf counts, if original equation is in list, then keep that *)
First[Pick[v,len,Min[len]]]
]
= = = = = = = = = =
On Thursday, July 12, 2001 3:01:44 AM UTC-4, hea... at in-tch.com wrote:
> Hi,
> Can Mathematica, given a relation such as P->Q generate the truth table?
> Is there a book available that talks about Mathematica and logic?
> Thanks,
> Heath