This is a model of first order logic expressions, allowing you to manipulate them as objects instead of just strings.
Prerequisites: Refactoring Browser SmaCC Runtime Package SmaCC Development Package
For example, inspect the following lines to get the expression corresponding to "(p = q) = (not p or q)":
| p q | p := LVariable named: 'p'. q := LVariable named: 'q'. p = q equiv: (p not | q).
Now, the same formula could be created using: LExpression fromString: '{p=q = not p or q}'
More complex formulas can also be created and evaluated, for example try: | exp | exp := LExpression fromString: '{V(x)[x even]}'. exp valueDomains: {'x' - #(2 4 6 8 10 12 )}.
See more examples in the Homepage and on the Logic-Tests category.
I hope you enjoy it! Dany