2009-04-20 10 views
6

Je cherche un outil pour refactoriser l'expression booléenne. J'ai des expressions commeOutil pour refactoriser les expressions booléennes

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

L'outil devrait être capable de simplifier les expressions, par ex. extraire la sous-expression "c ou d" dans l'exemple ci-dessus. Existe-t-il un système d'algèbre informatique gratuit qui peut le faire?

Actuellement, je pense à la refactorisation manuelle des expressions et à prouver l'équivalence avec un petit script quickkeck haskell.

+0

Regardez [cette question et réponses] (http://stackoverflow.com/q/14902141/57477) - Fondamentalement, utilisez [Wolfram Alpha] (http://www.wolframalpha.com/) – CraigTP

Répondre

1

Je ne suis pas sûr d'un outil, mais jeter un oeil à Boolean Algebra

vous pouvez dessiner une grille de toutes les entrées et sorties pour essayer de trouver une expression booléenne minimale

+0

Le premier problème est le nombre de variables d'environ 50. Le deuxième problème est que je ne cherche pas une expression minimale. Je veux refactoriser l'expression existante pour la rendre maintenable. – ordnungswidrig

+0

dans loo de trouver un outil, écrire quelques tests autour de lui et créer une méthode a1> = foo (b1) –

+0

vous pourriez faire une boucle à travers les tableaux de a et b pour le couper aussi –

1

Le DMS Software Reengineering Tookit pourrait faire .

Il s'agit d'une technologie de compilateur généralisée pour l'analyse de langages (y compris Java) en AST et tables de symboles. DMS fournit également des transformations de source à source et une réécriture de loi associative et commutative. Vos expressions booléennes apparaîtraient comme des arbres d'expression Java AST. En fournissant un ensemble de règles sur l'algèbre booléenne, vous pouvez manipuler ces arbres d'expression. Nous l'avons fait par le passé pour simplifier et transformer l'expression booléenne pour C, RLL et un système d'équations de diagnostic, à la fois sur des expressions à grande échelle, et sur beaucoup d'expressions à échelle moyenne (échelle comme votre exemple) .

EDIT 5/19/2010: Voir un example of conventional algebra transformations utilisant DMS. C'est trivial de construire une variante qui fait de l'algèbre booléenne à la place.

Questions connexes