patrick
/
plasp
Archived
1
0
Fork 0

Only enumerating existentially bound parameters for “and” expressions.

This commit is contained in:
Patrick Lühne 2017-06-27 16:52:50 +02:00
parent 1516561a58
commit 0eff8e5dcf
Signed by: patrick
GPG Key ID: 05F3611E97A70ABF
1 changed files with 7 additions and 2 deletions

View File

@ -217,6 +217,11 @@ void TranslatorASP::translateDerivedPredicates() const
for (const auto &derivedPredicate : derivedPredicates) for (const auto &derivedPredicate : derivedPredicates)
{ {
// With “and” expressions, the existentially bound parameters are important
// Were they not the same in all arguments, the precondition would be treated like a disjunction
const auto enumerateExistentialParameters
= derivedPredicate->precondition.value().is<::pddl::normalizedAST::AndPointer<::pddl::normalizedAST::Literal>>();
const auto printDerivedPredicateName = const auto printDerivedPredicateName =
[&]() [&]()
{ {
@ -232,7 +237,7 @@ void TranslatorASP::translateDerivedPredicates() const
// TODO: add existentially quantified parameters // TODO: add existentially quantified parameters
translateVariablesForRuleHead(m_outputStream, derivedPredicate->parameters); translateVariablesForRuleHead(m_outputStream, derivedPredicate->parameters);
if (!derivedPredicate->existentialParameters.empty()) if (enumerateExistentialParameters && !derivedPredicate->existentialParameters.empty())
translateVariablesForRuleHead(m_outputStream, derivedPredicate->existentialParameters); translateVariablesForRuleHead(m_outputStream, derivedPredicate->existentialParameters);
m_outputStream << "))"; m_outputStream << "))";
@ -258,7 +263,7 @@ void TranslatorASP::translateDerivedPredicates() const
if (!derivedPredicate->parameters.empty()) if (!derivedPredicate->parameters.empty())
translateVariablesForRuleBody(m_outputStream, derivedPredicate->parameters); translateVariablesForRuleBody(m_outputStream, derivedPredicate->parameters);
if (!derivedPredicate->existentialParameters.empty()) if (enumerateExistentialParameters && !derivedPredicate->existentialParameters.empty())
{ {
if (!derivedPredicate->parameters.empty()) if (!derivedPredicate->parameters.empty())
m_outputStream << ", "; m_outputStream << ", ";