Skip to content

Reduction bundles don't expose lift metadata — external solvers can't recover source solution #1059

@isPANN

Description

@isPANN

Problem

pred reduce exports a bundle {path, source, target} that is enough to let another pred invocation solve + lift (pred solve <bundle>), but it does not contain anything that an external tool (without problemreductions as a Rust dep) can use to map a target-space solution back to the source.

Typical use case that hits this:

pred reduce mis.json --to MaximumIndependentSet/KingsSubgraph/One -o bundle.json
# external solver (e.g. miso, a neutral-atom platform, a QAOA runtime)
# solves the KSG graph and returns a target-space config
# → no standard way to lift back to the source MIS without re-running pred

Why this matters

The whole point of pred reduce as a CLI is to let downstream solvers live outside Rust. Without an external lift path, every non-Rust consumer has to either (a) shell out back to pred solve (which re-solves from scratch with its own solver, defeating the purpose), or (b) reimplement the gadget-specific inverse map.

Possible directions

  1. Reserve a lift field in the bundle JSON carrying gadget-level metadata sufficient to invert the map per reduction step (e.g. for MIS → KSG: per-atom "role + source-vertex id" so consumers can compute source config directly). Pros: self-contained, language-agnostic. Cons: schema is reduction-specific.
  2. Add a pred lift <bundle> --config <target-config> subcommand that re-runs reduce_along_path internally and emits the source config. Pros: minimal schema change, works for all reductions for free. Cons: consumers still need pred installed.
  3. Both: pred lift as the primary UX, plus optional lift field in JSON for pure-external consumers who don't want to shell out.

Ask

Agree this is a gap? If yes, which of the three directions is preferred? I lean toward (2) as the immediate fix (minimal surface, no schema churn) with (1) as a longer-term enhancement for fully offline consumers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions