diff --git a/src/plasp/pddl/expressions/Not.cpp b/src/plasp/pddl/expressions/Not.cpp index 0190d0b..40ed93b 100644 --- a/src/plasp/pddl/expressions/Not.cpp +++ b/src/plasp/pddl/expressions/Not.cpp @@ -47,13 +47,16 @@ ExpressionPointer Not::normalize() { BOOST_ASSERT(m_argumentStorage); - // Remove double negations + // Remove double negations immediately if (m_argumentStorage->expressionType() == Expression::Type::Not) { auto &argument = dynamic_cast(*m_argumentStorage); auto normalized = std::move(argument.m_argumentStorage); - normalized->normalize(); + auto normalizedInner = normalized->normalize(); + + if (normalizedInner) + return normalizedInner; return normalized; }