Skip to content

Add support for checking inductive types and constructors (rebased)#18

Merged
GasStationManager merged 3 commits intomainfrom
pr7-rebase
Mar 6, 2026
Merged

Add support for checking inductive types and constructors (rebased)#18
GasStationManager merged 3 commits intomainfrom
pr7-rebase

Conversation

@GasStationManager
Copy link
Owner

Rebased version of #7 onto current main (post file-split refactor).

Changes

  • Add equivCtor to check constructor equivalence (name, type, levelParams, induct, cidx, numParams, numFields, isUnsafe)
  • Add equivInduct to check inductive type equivalence, including checking each constructor via equivCtor using hashmap lookup functions
  • Add CheckFailure.inductCheck and CheckFailure.ctorCheck cases
  • Update processFileDeclarations to include "inductive" and "constructor"
  • Update checkTargets to handle inductives (with full hashmap lookup for constructor verification)
  • Constructor check added to Info.toFailureMode for simple cases

Verified

  • lake build
  • lake build safe_verify

Supersedes #7.

user added 3 commits March 6, 2026 10:59
…om PR #7)

- Add equivCtor to check constructor equivalence
- Add equivInduct to check inductive type equivalence with constructor lookup
- Add CheckFailure.inductCheck and CheckFailure.ctorCheck cases
- Update processFileDeclarations to include inductive and constructor
- Update checkTargets to handle inductives (with full hashmap lookup for constructors)
- Constructor check added to Info.toFailureMode for simple cases

Rebased onto current main (post file-split refactor).
Add import check in replayFile for submission files:
- Reject files with empty imports (prelude files)
- Warn if Init is not imported directly

This prevents attacks where submissions use 'prelude' to redefine
kernel types (e.g., False) and shadow allowed axiom names (e.g., propext)
to prove anything.
Replaces the simple prelude check with a stronger import superset check.
Submissions must import at least everything the target imports, preventing
attacks that redefine types by omitting imports (e.g., redefining
FermatLastTheorem := True by not importing Mathlib).

- Add readImports helper to extract imports without full replay
- Add checkImportSuperset that verifies every target import is present
- Still catches prelude attack (empty imports) as a special case
- Clear error messages listing missing imports
@GasStationManager GasStationManager merged commit aabde3c into main Mar 6, 2026
2 checks passed
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