2009-04-20 10 views
6

Sto cercando uno strumento per il refactage dell'espressione booleana. Ho espressioni comeStrumento per il refactage di espressioni booleane

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

Lo strumento deve essere in grado di semplificare le espressioni, ad es. estrai l'espressione secondaria "c o d" nell'esempio sopra. Esiste un sistema di algebra per computer gratuito che può farlo?

Attualmente penso di refactoring delle espressioni manualmente e dimostrare l'equivalenza con un piccolo script quickkeck haskell.

+0

Guarda [questa domanda e le risposte] (http://stackoverflow.com/q/14902141/57477) - In pratica, usa [Wolfram Alpha] (http://www.wolframalpha.com/) – CraigTP

risposta

1

io non sono sicuro di uno strumento, ma dare un'occhiata a Boolean Algebra

è possibile disegnare una griglia di tutti gli ingressi e uscita per cercare di trovare un'espressione booleana minimo

+0

Il primo problema è che il numero di variabili di circa 50. Il secondo problema è che non sto cercando un'espressione minimale. Voglio refactoring espressione esistente per renderli mantenibili. – ordnungswidrig

+0

per trovare uno strumento, scrivere alcuni test intorno a esso e creare un metodo a1> = foo (b1) –

+0

, è possibile eseguire il ciclo attraverso gli array di a e b per ridurlo troppo –

1

Il DMS Software Reengineering Tookit potrebbe farlo .

È una tecnologia di compilazione generalizzata per l'analisi dei linguaggi (incluso Java) per AST e tabelle di simboli. Il DMS fornisce anche trasformazioni da sorgente a fonte e riscrittura del diritto associativo e commutativo.

Le espressioni booleane vengono visualizzate come alberi di espressione Java AST. Fornendo una serie di regole sull'algebra booleana, è possibile manipolare gli alberi di espressione .

Abbiamo fatto questo in passato per eseguire la semplificazione e la trasformazione dell'espressione booleana per C, RLL e un sistema di equazioni diagnostiche, sia su espressioni su larga scala, sia su molte espressioni di media scala (scala molto simile al vostro esempio) .

MODIFICA 19/05/2010: Vedere un example of conventional algebra transformations utilizzando DMS. È banale costruire una variante che invece fa l'algebra booleana.