anthem/include/anthem/Context.h
Patrick Lühne 5f771770b3
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 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:
2018-04-05 23:28:22 +02:00

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