Skip to content

folded_product cannot be registered — it carries no exactness claim and its support is a quotient no geometry matches #370

Description

@deOliveira-R

Found while re-planning Q6 against the tree (.claude/plans/frolicking-painting-origami.md, finding R-12). The plan had assumed registering Quadrature.folded_product was a matter of adding an entry; it is blocked on two structural gaps, and neither is reachable by anything the registry currently offers.

[M] at HEAD, folded_product(4, 8):

n_points           16
support            'S^2/sigma_y'
exactness          None
degree_of_exactness None
invariance_group   None

Compare the four registered families, all of which carry a claim (legendre / uniform(S^2)) on a non-quotient support. folded_product is the only shipped angular family with no exactness claim at all.

The two gaps

1. Stage 2 (V) has no degree to invert or verify. Since 626dc855 the selector checks the claim the built rule carries against the query's; a rule with exactness=None is refused, with the reason "the rule carries no exactness claim, so nothing certifies it integrates anything exactly against ...". That refusal is correct and is gated (test_a_rule_with_no_exactness_claim_at_all_is_refused) — it is what would stop the folded rule being selected on a degree it never claimed.

What the rule needs is a theorem, not a tag: what is the fold's exactness claim on the quotient? The unfolded product(4,8) carries ExactnessClaim(spherical_harmonic, degree=7) via spherical_product_claim, and the quotient by σ_y halves the node set. Whether the claim survives, and against what reference on S²/σ_y, is a derivation.

2. Stage 0 (domain) cannot match a quotient support. AngularSymmetry.support is derived from the spent group and [M] only ever yields [-1,1] (SO2) or S^2 (Trivial). No geometry can equal 'S^2/sigma_y', so the folded rule is refused on domain before anything else runs.

This is the deeper one: it asks whether a geometry can spend a discrete reflection the way it spends a continuous rotation. Today the spent half is continuous (G⁰) and the owed half discrete (Γ); the fold spends a discrete element, which the current split has no slot for.

Why it is not urgent

folded_product is reachable directly (Quadrature.folded_product(...)) and is used that way by the cylindrical fold. Only automatic selection is blocked, and [M] select_quadrature has zero production consumers. Filing so the two gaps are recorded as structural rather than rediscovered as "why does registering this not work".

⚠ Do not attempt to close this by giving the rule a hand-written ExactnessClaim or by widening AngularSymmetry.support to accept a quotient string. The first fabricates a claim; the second makes stage 0 a string match against a vocabulary nothing derives.

Metadata

Metadata

Assignees

No one assigned

    Labels

    level:L0Term verificationmodule:sn02.Discrete.Ordinatestype:improvementEnhancement to existing functionality

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions