Skip to content

Prevent capture of temporary nested-inductive names by later declarations - #122

Draft
heathsanchez wants to merge 3 commits into
flashfrom
research/flash-nested-name-freshness-20261104
Draft

heathsanchez wants to merge 3 commits into
flashfrom
research/flash-nested-name-freshness-20261104

Conversation

@heathsanchez

Copy link
Copy Markdown
Collaborator

Source-pinned name-capture soundness regression (draft)

The published Flash checker chooses temporary names for specialized nested inductives by looking only at declarations preceding the block. A later declaration can reuse _nested.<type>_<n>.rec and capture a supposedly temporary recursor reference in a previously accepted reduction rule. The NanoDa issue #74 reports an axiom-free forged proof of False from this mechanism.

This patch chooses the generated type name only if the entire imported export contains no declaration with that type name, its generated .rec name, or any corresponding generated constructor name. This preserves type-specific freshening while preventing later source declarations from capturing those temporary bindings; it does not special-case the exploit or cache accepted results.

The Actions pair builds the exact published Flash 78c7502bac8a5ba000057b3f083bc0595ac65750 and candidate identically and requires the official Arena bugs/nested-name-capture invalid export to change ACCEPT → REJECT with all other downloaded non-performance verdicts preserved, recording SHA-pinned artifacts even on failure.

Independent from draft #120 (nested field count) and #121 (universe scope). Qualification pending. Keep DRAFT until source-level tests, full Mathlib, and performance have been reviewed; no leaderboard claim.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant