Skip to content

ci: check statement files for the headline results and reject opaque constants - #20

Open
Nelson Spence (Fieldnote-Echo) wants to merge 10 commits into
mainfrom
ci/statement-files
Open

Nelson Spence (Fieldnote-Echo) wants to merge 10 commits into
mainfrom
ci/statement-files

Conversation

@Fieldnote-Echo

@Fieldnote-Echo Fieldnote-Echo commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

#print axioms reports the axioms of a proof, not whether its hypotheses can be met, and a text search cannot tell a comment from a declaration. This adds checks that read the compiled environment and Lean's own messages instead.

  • Statement files. spec/Spec.lean restates each headline result with sorry as its proof. spec/Check.lean compares every statement with the library declaration of the same name: equal types up to binder names, a theorem with a proof term, axioms within the allowlist, and a proof that is sorry itself, not a proof that merely uses it. CI requires a statement for every headline result. The statement file may produce no message except its own sorry warnings, read as Lean's JSON messages with the package's linters on, and spec/ may hold only these two files.
  • Opaque constants. The environment check now rejects opaque declarations as well as axioms. Its self-test fixture declares both and must see both reported.
  • One headline list. It moves to a workflow-level variable read by the axiom check and the statement check; an empty list fails both.
  • Named gap. The obligation behind the two continuum theorems is called gap:pde-infra in their docstrings and the docs, so it can be cited beside them.

native_decide needs no new rule. Under v4.34.1 it declares an auxiliary axiom per use (foo._native.native_decide.ax_1_1), so the environment check, the axiom walk and Mathlib's linter all reject it.

Controls, each required to fail with its specific report rather than any failure, files restored after each:

Change Result
hypothesis weakened, or hypotheses reordered statement differs
statement proved, proved around a sorry, an applied sorry (also to the library proof), or a sorry under a let statement is proved
by sorry passes; it is sorry itself
statement with no library declaration no library declaration
library proof by native_decide auxiliary axiom reported
a headline statement removed headline without a statement
long line, #eval output, or stderr output in the statement file message other than its sorry warnings
an example with sorry in the statement file sorry count differs from the statements checked
an extra or look-alike file under spec/ unexpected file
empty, blank or whitespace-only headline list list is empty
the checker's summary printed twice, or a Lean panic step fails
binders made implicit passes; binder annotations are ignored by design

Library warnings stay with the build step, which already runs with warnings as errors. The Lake package cache key changes with lakefile.toml, so the first run refetches packages.

…constants

spec/Spec.lean restates each headline result with sorry as its proof.
spec/Check.lean compares every statement there with the library
declaration of the same name: equal types up to binder names, a theorem
with a proof term, axioms within propext, Classical.choice and
Quot.sound, and a statement that is sorry rather than proved. CI runs it
and requires a statement for every headline result.

The headline list moves to one workflow-level variable read by both
checks. The environment check now also rejects opaque constants, which
neither #print axioms nor a text search reports, and its self-test
fixture declares both an axiom and an opaque constant.

The obligation behind the two continuum theorems gets a citable name,
gap:pde-infra, in their docstrings and the docs. AGENTS.md describes the
checks as they now run and adds a sandbox for elaborating prover output.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

CI: verify headline statements and reject opaque constants

🧪 Tests ⚙️ Configuration changes 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Add independently readable statement files and compare all headline claims against compiled
 library theorems.
• Require statement coverage in CI and reject library axioms and opaque constants with a self-test.
• Name the continuum theorems’ unresolved PDE obligation gap:pde-infra across the documentation.
Diagram

graph TD
  CI["CI workflow"] --> HEAD["Headline list"] --> AX["Axiom dashboard"] --> LIB["CdFormal library"]
  HEAD --> SPEC["Statement files"] --> CHECK["Lean comparator"] --> LIB
  CI --> GUARD["Declaration guard"] --> LIB
Loading
High-Level Assessment

Keep the statements independently written and outside the default library build: generating them from the library would remove their value as an auditable, independently checked specification. Sharing the headline list in the workflow makes omissions detectable by both coverage gates.

Files changed (10) +355 / -44

Tests (2) +223 / -0
Check.leanCompare compiled statements with library theorems +74/-0

Compare compiled statements with library theorems

• Introduces a Lean command that examines every public Spec declaration, requires a theorem proved with 'sorry', and matches its type to a library theorem after universe-parameter substitution. It checks the library proof’s transitive axioms against the allowlist, reports mismatches, and emits 'SPEC OK' records for CI coverage.

spec/Check.lean

Spec.leanRestate all eight headline theorem statements +149/-0

Restate all eight headline theorem statements

• Adds independently readable, deliberately 'sorry'-proved statements for the continuum, graph, algebraic, and order-theoretic headline results. Its documentation calls out the unresolved hypotheses of the conditional continuum theorems.

spec/Spec.lean

Documentation (6) +61 / -20
AGENTS.mdDocument verification invariants and prover-output sandboxing +39/-10

Document verification invariants and prover-output sandboxing

• Explains the deliberate 'sorry' exception for statement files, the new comparator and opaque-constant gate, and how to add headline results. Adds guidance for elaborating untrusted prover output in a restricted bubblewrap sandbox.

AGENTS.md

Theorems.leanIdentify the continuum theorems’ unresolved obligation +8/-2

Identify the continuum theorems’ unresolved obligation

• Adds 'gap:pde-infra' to the docstrings of both conditional continuum existence theorems. The theorem statements and proofs are unchanged.

CdFormal/Theorems.lean

README.mdExplain statement verification and the named PDE gap +3/-2

Explain statement verification and the named PDE gap

• Adds the Spec build and comparator commands to the verification instructions. Clarifies that the continuum results retain the named 'gap:pde-infra' obligation and that readers can audit their headline statements separately from proofs.

README.md

axiom-boundary.mdDefine the scope of 'gap:pde-infra' +4/-0

Define the scope of 'gap:pde-infra'

• Names the work needed to instantiate the continuum theorems’ PDE infrastructure, solution operator, and applicable eigendata. Explains why axiom reports do not establish that these hypotheses can be met.

docs/explanation/axiom-boundary.md

theorems.mdCross-reference the PDE gap beside both continuum results +2/-2

Cross-reference the PDE gap beside both continuum results

• Marks both continuum existence results as conditional on 'gap:pde-infra' and links to the assumption-boundary explanation.

docs/reference/theorems.md

verification-audit.mdRecord the new verification gates and named limitation +5/-4

Record the new verification gates and named limitation

• Documents statement matching and headline coverage, rejection of opaque constants, and the environment-check fixture. Identifies 'gap:pde-infra' in the audit table and explains that proof-axiom checks do not discharge hypotheses.

docs/reference/verification-audit.md

Other (2) +71 / -24
lean_action_ci.ymlRequire headline statements and detect opaque declarations +65/-24

Require headline statements and detect opaque declarations

• Moves the eight headline names into a workflow-level variable used by the axiom and statement checks. Builds the separate Spec target, rejects warnings other than its deliberate 'sorry' warnings, requires a successful comparison for each headline, and extends the compiled-environment check and negative fixture to opaque constants. Includes spec files in the header check.

.github/workflows/lean_action_ci.yml

lakefile.tomlRegister a non-default Spec Lean library +6/-0

Register a non-default Spec Lean library

• Adds a separate 'Spec' library rooted at 'spec/', allowing CI to build deliberate 'sorry' statements without importing them into the default CdFormal target.

lakefile.toml

@qodo-code-review

qodo-code-review Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 🔗 Cross-repo conflicts (1) 📜 Skill insights (0)

Grey Divider


Action required

1. Extra statement failures can pass CI ✓ Resolved
Description
The workflow pipes lake env lean spec/Check.lean to tee without testing the pipeline's exit
status, then checks only the headline success markers. If an additional statement fails comparison
after the headlines have logged success, Lean exits with an error but the step reaches its
successful final command.
Code

.github/workflows/lean_action_ci.yml[168]

+          lake env lean spec/Check.lean 2>&1 | tee "$RUNNER_TEMP/spec.txt"
Evidence
The comparator records errors across all statements and throws after emitting success messages for
matches. The workflow has pipefail but neither set -e nor an explicit test of that pipeline; its
final test covers only headline names.

spec/Check.lean[41-71]
.github/workflows/lean_action_ci.yml[159-175]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
CI ignores the comparator's nonzero exit status when all headline markers are present.
## Fix Focus Areas
- .github/workflows/lean_action_ci.yml[168-176]
## Recommended Fix
Fail the step when the `lake env lean spec/Check.lean | tee` pipeline returns nonzero, independently of the headline-presence check.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Statement checks fail despite matching results 🐞 Bug ≡ Correctness
Description
spec/Check.lean emits each success marker with logInfo, but the workflow requires a line
containing only SPEC OK and the name. When Lean includes the source location and information
prefix in that diagnostic, every headline is marked missing even though the comparator accepted it.
Code

.github/workflows/lean_action_ci.yml[171]

+            grep -qx "SPEC OK $name" "$RUNNER_TEMP/spec.txt" || missing="$missing $name"
Evidence
The marker is produced by logInfo, whereas grep -qx accepts no diagnostic prefix or suffix.

spec/Check.lean[69-72]
.github/workflows/lean_action_ci.yml[168-175]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workflow expects bare success lines, while the comparator emits Lean information diagnostics through `logInfo`.
## Fix Focus Areas
- .github/workflows/lean_action_ci.yml[168-175]
- spec/Check.lean[69-72]
## Recommended Fix
Emit unambiguous plain-text success markers, or parse Lean's diagnostic format when checking headline results. Test the check against the actual output of `lake env lean spec/Check.lean`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗



Remediation recommended

3. Graph theorem cites wrong paper result 🔗 Cross-repo conflict ≡ Correctness
Description
The new Spec.SemioticGraph.exists_pos_graph docstring calls the result paper Theorem 3.23, while
navi-creative-determinant identifies that same Lean theorem as Theorem 3.26. Readers using the
statement file to audit the parent repository’s paper are directed to the wrong result.
Code

spec/Spec.lean[130]

+/-- Statement of `SemioticGraph.exists_pos_graph` (paper Theorem 3.23): connected interior,
Evidence
The new statement file assigns Theorem 3.23 to the named Lean theorem; the parent repository assigns
Theorem 3.26 to that same theorem.

cd-formalization -> navi-creative-determinant
spec/Spec.lean[130-137]
External repo: Project-Navi/navi-creative-determinant, README.md [28-30]
External repo: Project-Navi/navi-creative-determinant, docs/explanation/cd-stack.md [14]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new graph statement cites paper Theorem 3.23, but the parent repository maps this Lean theorem to Theorem 3.26.
## Fix Focus Areas
- spec/Spec.lean[130-130]
## Recommended Fix
Change the docstring to cite paper Theorem 3.26; no parent-repository change is needed.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


4. Statement-file warnings can escape CI ✓ Resolved
Description
The build-output filter accepts only lines beginning with warning or error, rather than matching
Lean diagnostics that carry a source location before the severity. A statement-file linter warning
on a source line can therefore leave other empty while the build succeeds, bypassing the step's
intended warning check.
Code

.github/workflows/lean_action_ci.yml[R162-163]

+          other=$(grep -E '^(warning|error)' "$RUNNER_TEMP/spec-build.txt" |
+            grep -v 'declaration uses `sorry`' || true)
Evidence
The new build permits warnings and relies on an anchored grep to reject unexpected ones; the project
enables statement-relevant style linters, including the long-line linter.

.github/workflows/lean_action_ci.yml[159-167]
lakefile.toml[9-17]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The warning filter misses diagnostics whose lines start with a source location rather than a severity.
## Fix Focus Areas
- .github/workflows/lean_action_ci.yml[160-167]
## Recommended Fix
Match Lean's source-located diagnostic format and exclude only the intended sorry warnings. Verify the filter with a real statement-file linter warning.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

5. Sandbox recipe breaks on Debian and Ubuntu 🐞 Bug ☼ Reliability
Description
The bubblewrap command in AGENTS.md links /lib64 to usr/lib. On Debian and Ubuntu the x86-64
dynamic loader /lib64/ld-linux-x86-64.so.2 is under /usr/lib64, not /usr/lib, so dynamically
linked programs inside the sandbox (including lake and lean) fail to start, and anyone pasting
the recipe as written cannot elaborate prover output in the sandbox.
Code

AGENTS.md[R431-432]

+  bwrap --ro-bind /usr /usr --symlink usr/lib /lib --symlink usr/lib /lib64 \
+    --symlink usr/bin /bin --ro-bind /etc /etc --tmpfs "$HOME" \
Evidence
The recipe uses --symlink usr/lib /lib64. Only distributions where /usr/lib64 is itself a
symlink to lib (for example Arch) resolve the loader through this mapping. The usual bubblewrap
mapping is --symlink usr/lib64 /lib64.

AGENTS.md[426-438]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The bwrap recipe maps `/lib64` to `usr/lib`. On Debian and Ubuntu the ELF interpreter `/lib64/ld-linux-x86-64.so.2` is then missing, so lake and lean cannot run in the sandbox.

## Fix Focus Areas
- AGENTS.md[431-432]

## Recommended Fix
Replace `--symlink usr/lib /lib64` with `--symlink usr/lib64 /lib64`. Optionally, note that on merged-/usr distributions where `/usr/lib64` is missing, the mapping should match the host layout.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


6. Audit page still claims no sorry anywhere 🐞 Bug ⚙ Maintainability
Description
The PR adds spec/Spec.lean, whose proofs are sorry on purpose, and drops spec/ from the
placeholder audit. The unchanged bullet in docs/reference/verification-audit.md still says CI
fails if sorry appears anywhere in the Lean sources, so the page now contradicts both the new
statement-file bullet above it and the README, and readers will believe the repository is free of
sorry.
Code

docs/reference/verification-audit.md[35]

+- checks the statement files: `spec/Spec.lean` restates every headline result with `sorry` as its proof, and `spec/Check.lean` requires each statement there to match the library declaration of the same name (the same type up to binder names and annotations, a theorem with a proof term, axioms within the allowlist), each statement's proof to be `sorry`, and every headline result to have a statement;
Evidence
The audit step greps only CdFormal.lean and CdFormal/*.lean, and its new comment says spec/ is
outside the audit by design. The docs bullet that follows the added line was not updated to match.

.github/workflows/lean_action_ci.yml[286-301]
spec/Spec.lean[53-60]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The verification audit page still says CI fails if `sorry` appears anywhere in the Lean sources. The new `spec/Spec.lean` uses `sorry` on purpose and is excluded from the audit.

## Fix Focus Areas
- docs/reference/verification-audit.md[35-38]

## Recommended Fix
Change the bullet to read: fails if `sorry` or `sorryAx` appears anywhere in the library sources (`CdFormal/`), comments included. Then add that the statement files under `spec/` are excluded because their proofs are `sorry` by design.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


Grey Divider

Context sources
✅ Cross-repo context — repo relationships
  Explored: repo: Project-Navi/navi-creative-determinant (sha: 3b249966) — View relationship
Review mode: Auto: 🧠 Deep: Substantial CI, Lean comparator, environment checks, and specification logic create multiple independent failure modes.

Grey Divider

Tip of the day
💡 Did you know, you can show, collapse, or hide each part of a finding: code, evidence, and all

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/lean_action_ci.yml Outdated
lake env lean spec/Check.lean 2>&1 | tee "$RUNNER_TEMP/spec.txt"
missing=""
for name in $HEADLINE_RESULTS; do
grep -qx "SPEC OK $name" "$RUNNER_TEMP/spec.txt" || missing="$missing $name"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Statement checks fail despite matching results 🐞 Bug ≡ Correctness

spec/Check.lean emits each success marker with logInfo, but the workflow requires a line
containing only SPEC OK and the name. When Lean includes the source location and information
prefix in that diagnostic, every headline is marked missing even though the comparator accepted it.
Agent Prompt
## Issue description
The workflow expects bare success lines, while the comparator emits Lean information diagnostics through `logInfo`.
## Fix Focus Areas
- .github/workflows/lean_action_ci.yml[168-175]
- spec/Check.lean[69-72]
## Recommended Fix
Emit unambiguous plain-text success markers, or parse Lean's diagnostic format when checking headline results. Test the check against the actual output of `lake env lean spec/Check.lean`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗

Comment thread .github/workflows/lean_action_ci.yml Outdated
Comment thread .github/workflows/lean_action_ci.yml Outdated
- runs the Mathlib environment linters (`lake lint`);
- runs `CdFormal/Verify.lean` with warnings as errors and requires exactly one `#print axioms` record for each listed declaration, each using only `propext`, `Classical.choice` and `Quot.sound`;
- fails if a headline result is missing from that list: the two continuum existence theorems, `SemioticGraph.exists_pos_graph` and its unweighted corollary, and the supporting lemmas the README names;
- checks the statement files: `spec/Spec.lean` restates every headline result with `sorry` as its proof, and `spec/Check.lean` requires each statement there to match the library declaration of the same name (the same type up to binder names and annotations, a theorem with a proof term, axioms within the allowlist), each statement's proof to be `sorry`, and every headline result to have a statement;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

5. Audit page still claims no sorry anywhere 🐞 Bug ⚙ Maintainability

The PR adds spec/Spec.lean, whose proofs are sorry on purpose, and drops spec/ from the
placeholder audit. The unchanged bullet in docs/reference/verification-audit.md still says CI
fails if sorry appears anywhere in the Lean sources, so the page now contradicts both the new
statement-file bullet above it and the README, and readers will believe the repository is free of
sorry.
Agent Prompt
## Issue description
The verification audit page still says CI fails if `sorry` appears anywhere in the Lean sources. The new `spec/Spec.lean` uses `sorry` on purpose and is excluded from the audit.

## Fix Focus Areas
- docs/reference/verification-audit.md[35-38]

## Recommended Fix
Change the bullet to read: fails if `sorry` or `sorryAx` appears anywhere in the library sources (`CdFormal/`), comments included. Then add that the statement files under `spec/` are excluded because their proofs are `sorry` by design.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗

Comment thread AGENTS.md
Comment on lines +431 to +432
bwrap --ro-bind /usr /usr --symlink usr/lib /lib --symlink usr/lib /lib64 \
--symlink usr/bin /bin --ro-bind /etc /etc --tmpfs "$HOME" \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

6. Sandbox recipe breaks on debian and ubuntu 🐞 Bug ☼ Reliability

The bubblewrap command in AGENTS.md links /lib64 to usr/lib. On Debian and Ubuntu the x86-64
dynamic loader /lib64/ld-linux-x86-64.so.2 is under /usr/lib64, not /usr/lib, so dynamically
linked programs inside the sandbox (including lake and lean) fail to start, and anyone pasting
the recipe as written cannot elaborate prover output in the sandbox.
Agent Prompt
## Issue description
The bwrap recipe maps `/lib64` to `usr/lib`. On Debian and Ubuntu the ELF interpreter `/lib64/ld-linux-x86-64.so.2` is then missing, so lake and lean cannot run in the sandbox.

## Fix Focus Areas
- AGENTS.md[431-432]

## Recommended Fix
Replace `--symlink usr/lib /lib64` with `--symlink usr/lib64 /lib64`. Optionally, note that on merged-/usr distributions where `/usr/lib64` is missing, the mapping should match the host layout.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗

Comment thread spec/Spec.lean

variable {V : Type*} [Fintype V] (G : SemioticGraph V)

/-- Statement of `SemioticGraph.exists_pos_graph` (paper Theorem 3.23): connected interior,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

4. Graph theorem cites wrong paper result 🔗 Cross-repo conflict ≡ Correctness

The new Spec.SemioticGraph.exists_pos_graph docstring calls the result paper Theorem 3.23, while
navi-creative-determinant identifies that same Lean theorem as Theorem 3.26. Readers using the
statement file to audit the parent repository’s paper are directed to the wrong result.
Agent Prompt
## Issue description
The new graph statement cites paper Theorem 3.23, but the parent repository maps this Lean theorem to Theorem 3.26.
## Fix Focus Areas
- spec/Spec.lean[130-130]
## Recommended Fix
Change the docstring to cite paper Theorem 3.26; no parent-repository change is needed.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗

The loop over HEADLINE_RESULTS passed vacuously on an empty list. The axiom check already rejects one; this step now does too, without relying on it.
…p errors as failures

The warning filter excused a sorry warning from any file and swallowed a grep error with || true. It now allows only spec/Spec.lean's sorry warnings and fails on a grep exit above 1. Headline names are matched as fixed strings, so a dot in a name cannot match any character.
…ake's text

The text filter examined only lines starting with warning or error, so a warning in another format would pass. The step now elaborates spec/Spec.lean with lake lean --json, which applies the package's linters (lake env lean does not), and accepts only its hasSorry warnings, matched by resolved path; any other message or any non-JSON output fails. spec/ may hold Spec.lean and Check.lean only, and Check.lean runs with warnings as errors. Warnings in library modules remain the build step's, which runs with warnings as errors.
… warnings

Information messages were skipped, so an #eval in the statement file could run and print unchecked. Now every message other than its own sorry warnings fails the step, as AGENTS.md states, and output that is not JSON fails with the offending line.
A failing git ls-files fed an empty list to the filter, and || true then let the extra-file check pass. The listing now runs on its own under -e, and a grep exit above 1 fails the step.
A tracked file such as spec/SpecXlean passed the spec/ listing, because grep -x read the allowed names as regular expressions; they are now fixed strings. An example with sorry in the statement file passed, because any number of sorry warnings was accepted; the count must now equal the number of statements the comparator checked. The headline list is split on all whitespace, so a list of only newlines or tabs counts as empty.
…n panics

A statement proved around a sorry (have : True := sorry, then the library theorem) depended on sorryAx and passed; the comparator now requires the proof, under the statement's binders, to be an application of sorryAx. It reads the proof from the theorem record: ConstantInfo.value! panics on theorems in v4.34.1, and a panic substitutes a default value and continues with exit code 0, so the step now fails on any PANIC line and on stderr output from the JSON elaboration. The statement count is compared as a single number, so a malformed count cannot fall through.
The check accepted any term headed by sorryAx, so (sorry : A → T) a passed, including a sorry applied to the library proof itself. A statement's proof must now be exactly Lean's sorry under its binders: sorryAx with its type, the synthetic flag false, and a closed label made of Lean.Name constructors and Nat literals, applied to nothing else. The kernel already fixes the sorry's type to the conclusion, so the types are not compared again (a let in a statement is stored as a non-dependent let there and a dependent one in the sorry's type).

This branch has not been deployed

No deployments
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