Commit Graph
106 Commits
Author SHA1 Message Date
patrick 2245e139b2 Reimplement integer variable detection
This is a reimplementation of the integer variable detection procedure.
The idea is to iteratively assume variables to be noninteger, and to
prove that this would lead to a false or erroneous result. If the proof
is successful, the variable is integer as a consequence.
2018-04-20 16:37:48 +02:00
patrick 7ba48044ee Propagate predicate parameter domains
With this change, domains detected for predicate parameters are properly
propagated to all occurences of the respective variables, enabling more
integer simplifications.
2018-04-20 16:37:48 +02:00
patrick 862d03881a Fix typo 2018-04-20 16:37:48 +02:00
patrick 7bde7c498f Represent predicate parameters explicitly
This adds a vector of Parameter structs to PredicateDeclaration. In this
way, the domain of each parameter can be tracked individually.
2018-04-20 16:37:48 +02:00
patrick 159717f51c Support declaring functions as integer
This adds a new syntax for declaring functions integer:

    #external integer(<function name>(<arity)).

If a function is declared integer, it may enable some variables to be
detected as integer as well.
2018-04-20 16:37:48 +02:00
patrick ae918a0846 Moved Domain enum to separate header
For clarity, this moves the Domain enum class to a separate header,
because it’s not just variable-specific but also applicable to
functions, for example.
2018-04-20 16:37:48 +02:00
patrick f48802842e Split functions from their declaration
This splits occurrences of functions from their declaration. This is
necessary to flag integer functions consistently and not just single
occurrences.
2018-04-20 16:37:48 +02:00
patrick b5b05b766c Remove Constant class
Constants are not a construct present in Clingo’s AST and were
unintentionally made part of anthem’s AST. This removes the unused
classes for clarity.
2018-04-20 16:37:48 +02:00
patrick 165f6ac059 Implement basic integer variable detection
This adds initial support for detecting integer variables in formulas.
The scope is somewhat limited in that variables matching predicate
parameters with known integer type aren’t propagated to be integer as
well yet. Also, the use of constants and functions prevents variables
from being detected as integer, because they have to be assumed to be
externally defined in such a way that they evaluate to general values
and not necessarily integers.
2018-04-20 16:37:48 +02:00
patrick d2b48f9679 Move Tristate class to separate header
The Tristate class (representing truth values that are either true,
false, or unknown) is used at multiple ends. This moves it to a separate
header for reusing it properly.
2018-04-20 16:37:48 +02:00
patrick 2372eb24c4 Refactor predicate representation
This refactoring separates predicates from their declarations. The
purpose of this is to avoid duplicating properties specific to the
predicate declaration and not its occurrences in the program.
2018-04-20 16:37:47 +02:00
patrick 8c250f5c59 Support modulus operation (absolute value)
This adds support for computing the absolute value of a term along with
an according unit test.
2018-04-12 00:38:48 +02:00
patrick 797660d6de Add new simplification rule
This adds the rule “(not F [comparison] G) === (F [negated comparison]
G)” to the simplification rule tableau.
2018-04-11 21:39:27 +02:00
patrick 40ddee8444 Add new simplification rule
This adds the rule “(not F or G) === (F -> G)” to the simplification
rule tableau.
2018-04-10 22:34:47 +02:00
patrick 6f7b021712 Add new simplification rule
This adds the rule “(not (F and G)) === (not F or not G)” to the
simplification rule tableau.
2018-04-10 22:34:47 +02:00
patrick 23624007ec Add new simplification rule
This adds the rule “not not F === F” to the simplification rule tableau.
2018-04-10 22:34:47 +02:00
patrick 6d7b91c391 Add new simplification rule
This adds the rule “(F <-> (F and G)) === (F -> G)” to the
simplification rule tableau.
2018-04-10 22:34:47 +02:00
patrick b88393655a Iteratively apply simplification tableau rules
With this change, the tableau rules for simplifying formula are applied
iteratively until a fixpoint is reached.
2018-04-10 22:34:47 +02:00
patrick c4c3156e77 Move simplification rule to tableau
This moves the rule “[primitive A] in [primitive B] === A = B” to the
simplification rule tableau.
2018-04-10 22:34:47 +02:00
patrick 107dae7287 Move simplification rule to tableau
This moves the rule “exists () (F) === F” to the simplification rule
tableau.
2018-04-10 22:34:47 +02:00
patrick 827d6e40fe Move simplification rule to tableau
This moves the rule “[conjunction of only F] === F” to the
simplification rule tableau.
2018-04-10 22:34:47 +02:00
patrick 4a85fc4b23 Move simplification rule to tableau
This moves the rule “exists ... ([#true/#false]) === [#true/#false]” to
the simplification rule tableau along with “[empty conjunction] ===
2018-04-10 22:34:46 +02:00
patrick 7e3fc007c8 Move simplification rule to tableau
This moves the rule “exists X (X = t and F(X)) === exists () (F(t))” to
the simplification rule tableau.
2018-04-10 22:34:46 +02:00
patrick 5c5411c0ff Implement simplification rule tableau
This implements a tableau containing simplification rules that can be
iteratively applied to input formulas until they remain unchanged.

First, this moves the rule “exists X (X = Y) === #true” to the tableau
as a reference implementation.
2018-04-10 22:34:46 +02:00
patrick e64b2e70de Remove unused captured lambda reference 2018-04-08 20:44:43 +02:00
patrick c294a29cb2 Support placeholders with #external declarations
This adds support for declaring predicates as placeholders through the
“#external” directive in the input language of clingo.

Placeholders are not subject to completion. This prevents predicates
that represent instance-specific facts from being assumed as universally
false by default negation when translating an encoding.

This stretches clingo’s usual syntax a bit to make the implementation
lightweight. In order to declare a predicate with a specific arity as a
placeholder, the following statement needs to be added to the program:

    #external <predicate name>(<arity>).

Multiple unit tests cover cases where placeholders are used or not as
well as a more complex graph coloring example.
2018-04-08 20:28:57 +02:00
patrickandpatrick 22238bb398 Switch to C++17
With C++17, optionals, an experimental language feature, were moved to
the “std” namespace. This makes C++17 mandatory and drops the now
obsolete “experimental” namespace.
2018-03-24 16:09:52 +01:00
patrick 5f8c144628 Fixed regression in simplifying predicates with more than one argument. 2017-06-12 18:27:39 +02:00
patrick 1f1006ea96 Corrected hiding predicates that are simple propositions. 2017-06-12 15:40:02 +02:00
patrick a4cd133ba7 Correctly implemented hiding predicates with nested arguments. 2017-06-12 02:25:04 +02:00
patrick bbbd0b65a4 Added new option --parentheses=full to make parsing the output easier. 2017-06-06 02:02:26 +02:00
patrick 0285c1cbbb Renamed internal variables for clarity. 2017-06-06 01:44:44 +02:00
patrick 95984f0447 Added warning when attempting to use #show statements without completion. 2017-06-05 04:24:00 +02:00
patrick 7ae0a1f289 Removed unnecessary parentheses after simplification. 2017-06-05 03:58:39 +02:00
patrick 3b26580815 Minor formatting. 2017-06-05 03:54:17 +02:00
patrick 14abc37116 Implemented #show statements for completed output. 2017-06-05 03:02:22 +02:00
patrick 4fd143ef64 Added simplification rule “exists X (X = Y)” → “#true.” 2017-06-05 02:41:17 +02:00
patrick 7bf5d3867d Minor clarification on side effects of a function. 2017-06-05 00:19:43 +02:00
patrick ab71e8eb0a Minor refactoring. 2017-06-04 20:55:25 +02:00
patrick dcc504ebc0 Added another simplification step after completion. 2017-06-04 20:55:24 +02:00
patrick 381d55b6ed Minor formatting fix. 2017-06-01 16:16:06 +02:00
patrick 2bc60d3eea Started implementing support for #show statements. 2017-06-01 04:05:11 +02:00
patrick cdcee897ec Added missing error message when input file does not exist. 2017-06-01 03:29:09 +02:00
patrick 4baed6fbc6 Added back completion support. 2017-06-01 02:37:45 +02:00
patrick 0d8b1e94da Refactored error handling. 2017-05-31 18:03:19 +02:00
patrick 1de0486989 Removed unnecessary namespace identifiers. 2017-05-30 18:13:31 +02:00
patrick 664a57ec68 Fixed issue with multi-layer variable stacks. 2017-05-30 18:09:33 +02:00
patrick 7aad8380d1 Refactored logging interface. 2017-05-30 17:19:26 +02:00
patrick 8214d7837a Fixed incorrect variable declaration look-up in variable stack. 2017-05-30 16:40:14 +02:00
patrick 2964dd1309 Restricting variable stack look-up to user-defined variables. 2017-05-30 16:39:44 +02:00