Skip to content

checkers: pin kiota to main @ 870c625 (check theorems; Init+std) - #150

Merged
nomeata merged 3 commits into
leanprover:masterfrom
sankalpsthakur:bump-kiota-51f7fec
Aug 21, 2026
Merged

checkers: pin kiota to main @ 870c625 (check theorems; Init+std)#150
nomeata merged 3 commits into
leanprover:masterfrom
sankalpsthakur:bump-kiota-51f7fec

Conversation

@sankalpsthakur

@sankalpsthakur sankalpsthakur commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

#149 kept five corpus declines (init std mathlib cslib cedar) and timeout 60s until Init actually accepted.

This retargets kiota to 870c625 on main:

  • Theorem/definition values are Checked (infer_only = false), matching Lean add_theorem / checker.check(val). A ≥10k-node exfalso junk : True rejects (large_theorem_still_checks_app_args).
  • InferOnly is for proof irrelevance and for App arguments whose binder is Prop (including Pi-into-Prop), except recursor applications; type mismatch falls back to Check. It is not applied to the theorem value as a whole (58e8636 removed that).
  • Eager Regular delta is size/hint plus inductive/circuit shape, not Sat.AIG / BVDecide / LawfulOperator / denote_*.
  • Unset KIOTA_THEOREM_DELTA_TARGET is global (not fixF_eq).
  • Drops the five yaml declines. Timeout 3600s.

Local verification (870c625, this machine)

Suite Result Wall
cargo test --lib --test exports --release 37 + 9 pass (includes large_theorem_still_checks_app_args)
extra-rec REJECT (rogue not I.rec)
grind-ring-5 ×2 accept 0.73s / 0.50s
init.ndjson accept 325s, last #52500 Bool.instLawfulEqOrd
std.ndjson accept 1043s, last #89800 UInt8.ofFin_bitVecToFin, 0 REJECT

mathlib / cslib / cedar are skip-on-ci. Nightly is the remaining proof those three accept inside 3600s.

AI/LLM disclosure

  • AI coding tools (including Grok and/or Codex agent-assisted editing) were used to help draft or modify code and this PR description.
  • I reviewed the complete change, understand the reasoning, and ran the reported local tests before submitting.
  • This submission is original work of authorship under the project CLA / contributor terms; AI output was not pasted unreviewed.

@nomeata

nomeata commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Skip AIG/BVDecide .go unfold on huge proofs,

Does this mean that the checker recognizes specific proof terms by name or shape and treats them differently? Isn't that a form of cheating?

@sankalpsthakur

Copy link
Copy Markdown
Contributor Author

Skip AIG/BVDecide .go unfold on huge proofs,

Does this mean that the checker recognizes specific proof terms by name or shape and treats them differently? Isn't that a form of cheating?

yes there were instances of this shortcut. i'm locating all such cases and fixing them

@sankalpsthakur sankalpsthakur changed the title checkers: pin kiota to main @ 51f7fec (Init+std, no five declines) checkers: pin kiota to main @ da64ada (Init+std, no AIG name skips) Aug 21, 2026
@sankalpsthakur

Copy link
Copy Markdown
Contributor Author

name/shape .go skips are gone (Sat.AIG / BVDecide / LawfulOperator / denote_*).

kiota da64ada on main. Eager delta is size/hint + inductive shape of the current theorem (class vs large proof vs eq-related defs). Large theorems use Lean infer_only for the value type.

cargo test --lib --test exports --release: 38+9 pass.
extra-rec: REJECT (rogue not I.rec).
grind-ring-5: accept 0.52s.
init.ndjson: accept (last #52500 Bool.instLawfulEqOrd).
std.ndjson: accept (last #89800 UInt8.ofFin_bitVecToFin; no REJECT).

@nomeata

nomeata commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Large theorems use Lean infer_only for the value type.

Is that still sound?

@sankalpsthakur sankalpsthakur changed the title checkers: pin kiota to main @ da64ada (Init+std, no AIG name skips) checkers: pin kiota to main @ 58e8636 (check large theorems) Aug 21, 2026
@sankalpsthakur

Copy link
Copy Markdown
Contributor Author

No. Lean add_theorem calls checker.check(val), which is infer_type_core(e, /*infer_only=*/false) and checks every application argument. infer (infer_only=true) is only for proof irrelevance on terms that are already being checked.

kiota was using infer_only on theorem values with ≥10k nodes. That skips those argument checks. False.elim junk then infers the motive and can match the declared type.

Removed in 58e8636. PI still uses infer.

cargo test --lib --test exports --release: 39+9 pass (includes large_theorem_still_checks_app_args). extra-rec REJECT rogue. grind-ring-5 accept 1.63s. init.ndjson REJECT at LawfulToForwardSearcherModel.defaultImplementation (app-arg mismatch; kiota completeness). std.ndjson hung at blastVar.go_denote_eq._proof_1_3 after 11 min.

@nomeata

nomeata commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Hmm, that's not a very reassuring approach at implementing a checker if blatant unsoundnesses sneak is so easily.

@nomeata
nomeata merged commit b4e319a into leanprover:master Aug 21, 2026
5 checks passed
@sankalpsthakur

sankalpsthakur commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author
Screenshot 2026-08-22 at 12 28 14 PM

i found 8 more such soundness issues, getting it fixed

@sankalpsthakur sankalpsthakur changed the title checkers: pin kiota to main @ 58e8636 (check large theorems) checkers: pin kiota to main @ 870c625 (check theorems; Init+std) Aug 21, 2026
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.

2 participants