Skip to content

Nine ADL benchmark domains fail past the parser #49

Description

@MBus123

Running the Fast Downward benchmark suite through the translator: 25 of 34 ADL domains translate, 9 fail. Two parser holes were fixed in 4a6a4db (a conjunction nested inside when/forall, and not around a compound condition). These nine fail later, in three groups.

Group 1: condition atom with no SAS variable

caldera-opt18-adl, caldera-sat18-adl, caldera-split-opt18-adl, caldera-split-sat18-adl, folding-opt23-adl, folding-sat23-adl

panicked at planforge-translate/src/translate.rs:354:
condition atom Atom { predicate: "prop_host", args: ["id_birat", "id_zhost"] }
has no SAS variable; it is neither reachable nor statically decided

The assertion is correct to fire: silently dropping the condition would make the operator hold in states where it must not. The question is why a condition atom survives instantiation without being reachable or statically decided, since Condition::instantiate_action is supposed to resolve exactly that. Six domains hitting the same assertion suggests one cause.

Group 2: action cost with no numeric variable

cavediving-14-adl

panicked at planforge-translate/src/translate.rs:740:
cost expression PNE hiring-cost(?d1) of action (hire-diver d0) has no numeric variable

Note the argument: the ground action is (hire-diver d0) but its cost still mentions ?d1. A variable that is not the action's own parameter is unsubstituted in the cost expression, which points at the cost being carried from a scope whose parameters were not applied.

Group 3: settlers

settlers-opt18-adl, settlers-sat18-adl

panicked at planforge-translate/src/translate.rs:283

Not yet examined.

Reproducing

planforge-translator translate \
  /path/to/downward-benchmarks/caldera-opt18-adl/domain.pddl \
  /path/to/downward-benchmarks/caldera-opt18-adl/p01.pddl

The benchmarks are the standard aibasel/downward-benchmarks checkout.

Why this matters more than the count suggests

ADL support is validated by hand-written fixtures under tests/assets/adl, and those fixtures were written from the constructs rather than from real domains. They missed both parser holes that the benchmark run found immediately. A corpus of minimal fixtures proves the constructs work in isolation; it says nothing about the combinations real domains use.

Worth considering: a test that translates a sample of real benchmark domains, skipped when the benchmark checkout is absent, so this class of gap is caught by CI rather than by hand.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions