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 in order 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 input program:
44 lines
989 B
C++
44 lines
989 B
C++
#ifndef __ANTHEM__CONTEXT_H
|
|
#define __ANTHEM__CONTEXT_H
|
|
|
|
#include <optional>
|
|
|
|
#include <anthem/AST.h>
|
|
#include <anthem/output/Logger.h>
|
|
#include <anthem/output/ParenthesisStyle.h>
|
|
|
|
namespace anthem
|
|
{
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Context
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct Context
|
|
{
|
|
Context() = default;
|
|
|
|
explicit Context(output::Logger &&logger)
|
|
: logger{std::move(logger)}
|
|
{
|
|
}
|
|
|
|
output::Logger logger;
|
|
|
|
bool performSimplification = false;
|
|
bool performCompletion = false;
|
|
|
|
std::optional<std::vector<ast::PredicateSignature>> visiblePredicateSignatures;
|
|
std::optional<std::vector<ast::PredicateSignature>> externalPredicateSignatures;
|
|
|
|
ast::ParenthesisStyle parenthesisStyle = ast::ParenthesisStyle::Normal;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}
|
|
|
|
#endif
|