PR-6d adds the partition frame: combine all parts into a total, then split that total equally into N containers. r1-06-subtotal-reused moves refused → correct — the FIRST case where the divisor applies to a DERIVED symbol (the total), not a directly given fact. That is real progress toward GSM8K setup comprehension, where intermediate quantities are the norm. Scope (kept narrow on purpose): No new relation kind. No new arithmetic operation. No rational support. No rounding/flooring. No serving path touched. The frame reuses the already-ratified pieces — SumOf(parts) + Div(Symbol(total), Literal(N)) → divide_by — so this PR is reader-only (no IR / admissibility / oracle / signature change). Frame grammar: "They combine their <unit> and split them equally into N <containers>." + "How many <unit> are in each <container>?" -> total = sum(all facts); per_<container> = total / N; ask per_<container>. wrong=0 boundaries: - Exact-divisibility still gates the ANSWER, now over a derived total: 5+6=11, 11/3 is non-exact -> the setup reads correctly but the answer REFUSES (never floors). Setup comprehension and answer exactness are cleanly separated. - Partition/query coherence: a partition is read ONLY together with its "in each <container>" query (and vice versa); container mismatch (box vs jar) refuses. Prevents over-reading a story detail into an unused derived value. Meaningful-fail verified: disabling the guard makes a dangling partition wrongly comprehend. Gates: R1 setup: 4 correct / 0 wrong / 6 refused R1 answers: 4 correct / 0 wrong / 6 refused / setup_wrong 0 / gold_error 0 15-case setup: 15 / 0 / 0 97 PR-6d tests + 99 relational/invariant tests green. Reader is off-serving (no generate.derivation / core.reliability_gate import). |
||
|---|---|---|
| .. | ||
| binding_graph | ||
| comprehension | ||
| cue_precision | ||
| derivation | ||
| determine | ||
| meaning_graph | ||
| proof_chain | ||
| realize | ||
| __init__.py | ||
| admissibility.py | ||
| articulation.py | ||
| articulation_legality.py | ||
| attention.py | ||
| bridge_trace.py | ||
| dialogue.py | ||
| discourse_planner.py | ||
| exhaustion.py | ||
| graph_constraint.py | ||
| graph_planner.py | ||
| grounding_accessors.py | ||
| intent.py | ||
| intent_bridge.py | ||
| intent_ratifier.py | ||
| logic_canonical.py | ||
| logic_equivalence.py | ||
| math_candidate_graph.py | ||
| math_candidate_parser.py | ||
| math_completeness.py | ||
| math_parser.py | ||
| math_problem_graph.py | ||
| math_realizer.py | ||
| math_roundtrip.py | ||
| math_solver.py | ||
| math_symbolic_equivalence.py | ||
| math_symbolic_normalizer.py | ||
| math_verifier.py | ||
| morphology.py | ||
| ood_surface_generator.py | ||
| operators.py | ||
| perturbation_suite.py | ||
| proposition.py | ||
| quantitative_comprehension.py | ||
| quantitative_expr.py | ||
| realizer.py | ||
| realizer_guard.py | ||
| recognizer_anchor_inject.py | ||
| recognizer_match.py | ||
| recognizer_registry.py | ||
| relational_field_reader.py | ||
| relational_symbolic_reader.py | ||
| result.py | ||
| rotor_admissibility.py | ||
| salience.py | ||
| semantic_templates.py | ||
| stream.py | ||
| surface.py | ||
| templates.py | ||