Commit Graph

14 Commits

Author SHA1 Message Date
Patrick Lühne 903993dbec
Minor clean-up 2020-04-09 16:49:45 +02:00
Patrick Lühne 7b2b292727
Remove unneeded parentheses enum 2020-04-09 16:07:33 +02:00
Patrick Lühne 600a6a1b4b
Refactor precedence rules 2020-04-09 16:07:31 +02:00
Patrick Lühne a3da369346
Split formatting functionality into two files 2020-04-09 16:07:30 +02:00
Patrick Lühne caf957deed
Fix implication parser and output 2020-04-09 16:07:30 +02:00
Patrick Lühne 1c00e5be16
Continue parsing formulas 2020-04-09 16:07:29 +02:00
Patrick Lühne 153f77621e
Fix precedence of absolute value operation
As the absolute value operation has its own type of parentheses, it
never needs to take precedence over other terms in order to be displayed
correctly. To avoid extraneous parentheses around absolute value
operations, set its precedence level to 0.
2020-03-30 06:42:54 +02:00
Patrick Lühne 551c35ed75
Fix formatting of binary operations
The precedence rules of binary operations are a bit trickier than
expected. The fact that a parent and a child term have the same
precedence level doesn’t automatically mean that parentheses can be
omitted. This is the case, for example, with

    a - (b + c)

While addition and subtraction have the same precedence level, the
parenthesis cannot be omitted. In general, this happens on the right-
hand side of the subtraction, division, and modulo operators if the
right-hand side has the same precedence level.

This patch fixes the output of binary operations accordingly.
2020-03-30 06:37:21 +02:00
Patrick Lühne a304ec9a75
Fix output of Booleans in formulas
Booleans are supposed to be formatted without a leading hash sign in
both terms and formulas. By mistake, the formula formatter added leading
hash signs though.
2020-03-30 06:37:21 +02:00
Patrick Lühne a82b4080c8
Fix function formatting
By mistake, a function’s name was printed two consecutive times if the
function had more than one argument.
2020-03-30 06:37:21 +02:00
Patrick Lühne 90f7be2f33
Minor refactoring for clarity 2020-03-30 06:37:21 +02:00
Patrick Lühne a127a053b2
Support formatting special integers separately
This adds Debug and Display trait implementations for the SpecialInteger
enum to make it possible to format its values without having to wrap it
in a Term variant.
2020-03-30 06:37:21 +02:00
Patrick Lühne 14abd73110
Remove unneeded lifetime specifiers 2020-03-30 05:19:01 +02:00
Patrick Lühne a446aed011
Initial commit
This provides an abstract syntax tree for first-order logic with integer
arithmetics. Initially, the following types of formulas are supported:

- Booleans values (true and false)
- predicates
- negated formulas
- comparisons of terms (<, ≤, >, ≥, =, ≠)
- implications and biconditionals
- conjunctions and disjunctions of formulas
- existentially and universally quantified formulas

In addition, these types of terms are provided:

- Boolean values (true and false)
- integers
- strings
- special integers (infimum and supremum)
- symbolic functions
- variables
- binary operations (addition, subtraction, multiplication, division,
  modulo, exponentiation)
- unary operations (absolute value, numeric negation)
2020-02-05 03:23:11 +01:00