2009-04-20 10 views
6

Ich bin auf der Suche nach einem Werkzeug, um boolean Ausdruck zu reformieren. Ich habe Ausdrücke wieTool zum Refactor boolescher Ausdrücke

a1 => (b1 <=> c or d) AND 
a2 => (b2 <=> c or d) AND 
a2 => (b2 <=> c or d) 

Das Tool sollte in der Lage sein Ausdrücke zu vereinfachen, z. extrahiere den Unterausdruck "c oder d" im obigen Beispiel. Gibt es ein kostenloses Computeralgebrasystem, das das kann?

Momentan denke ich über Refactoring die Ausdrücke manuell und beweisen die Äquivalenz mit einem kleinen Haskell Quickcheck-Skript.

+0

Schauen Sie sich [diese Frage und Antworten] (http://stackoverflow.com/q/14902141/57477) - Grundsätzlich verwenden [Wolfram Alpha] (http://www.wolframalpha.com) – CraigTP

Antwort

1

Ich bin über ein Werkzeug nicht sicher, aber einen Blick auf Boolean Algebra

Sie ein Raster von allen Ein- und Ausgang

+0

Das erste Problem ist, dass die Anzahl der Variablen von etwa 50 ist. Das zweite Problem ist, dass ich nicht nach einem minimalen Ausdruck suche. Ich möchte vorhandenen Ausdruck umstrukturieren, um sie wartbar zu machen. – ordnungswidrig

+0

in Loo des Findens eines Werkzeugs, schreiben Sie einige Tests um es und erstellen Sie eine Methode a1> = foo (b1) –

+0

Sie könnten durch Arrays von a und b zu trimmen es auch zu schneiden –

1

Die DMS Software Reengineering Tookit dies einem minimalen boolean Ausdruck, um zu versuchen und finden Sie zeichnen können tun könnte .

Es ist eine generalisierte Compiler-Technologie zum Parsen von Sprachen (einschließlich Java) zu ASTs und Symboltabellen. DMS bietet auch Quell-zu-Quell-Transformationen und assoziatives und kommutatives Gesetz-Neuschreiben.

Ihre booleschen Ausdrücke würden als Java AST-Ausdrucksbäume angezeigt. Indem Sie eine Reihe von Regeln zur Booleschen Algebra bereitstellen, können Sie diese Ausdrucksbäume mit manipulieren.

Wir haben dies in der Vergangenheit getan, um Boolesche Ausdruckvereinfachung und -transformation für C, RLL und ein System von Diagnosegleichungen durchzuführen, sowohl bei großen Ausdrücken als auch bei vielen mittelgroßen Ausdrücken (Maßstab ähnlich wie Ihr Beispiel) .

EDIT 5/19/2010: Siehe example of conventional algebra transformations mit DMS. Es ist trivial, eine Variante zu konstruieren, die statt dessen Boolesche Algebra verwendet.