From 0eff8e5dcfe7ea52564a752e896871474ef4c81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Tue, 27 Jun 2017 16:52:50 +0200 Subject: [PATCH] =?UTF-8?q?Only=20enumerating=20existentially=20bound=20pa?= =?UTF-8?q?rameters=20for=20=E2=80=9Cand=E2=80=9D=20expressions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plasp/pddl/TranslatorASP.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plasp/pddl/TranslatorASP.cpp b/src/plasp/pddl/TranslatorASP.cpp index 34e2fa1..270f415 100644 --- a/src/plasp/pddl/TranslatorASP.cpp +++ b/src/plasp/pddl/TranslatorASP.cpp @@ -217,6 +217,11 @@ void TranslatorASP::translateDerivedPredicates() const 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 = [&]() { @@ -232,7 +237,7 @@ void TranslatorASP::translateDerivedPredicates() const // TODO: add existentially quantified parameters translateVariablesForRuleHead(m_outputStream, derivedPredicate->parameters); - if (!derivedPredicate->existentialParameters.empty()) + if (enumerateExistentialParameters && !derivedPredicate->existentialParameters.empty()) translateVariablesForRuleHead(m_outputStream, derivedPredicate->existentialParameters); m_outputStream << "))"; @@ -258,7 +263,7 @@ void TranslatorASP::translateDerivedPredicates() const if (!derivedPredicate->parameters.empty()) translateVariablesForRuleBody(m_outputStream, derivedPredicate->parameters); - if (!derivedPredicate->existentialParameters.empty()) + if (enumerateExistentialParameters && !derivedPredicate->existentialParameters.empty()) { if (!derivedPredicate->parameters.empty()) m_outputStream << ", ";