Repository navigation
Strengthen verification and prove Takens' theorem for generic pairs #14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
84 commits
Select commit
Hold shift + click to select a range
a550226
ci: enforce axiom records, all-module builds, doc names and docs links
Fieldnote-Echo e13b737
ci: ignore prose theorem-block labels in the doc-name check
Fieldnote-Echo ea22cfa
docs: fix names that do not resolve and the obsolete Sard-typeclass plan
Fieldnote-Echo facac19
build: bump Lean and Mathlib from v4.28.0 to v4.34.1
Fieldnote-Echo e229598
fix: repair existing proofs for Lean/Mathlib v4.34.1
Fieldnote-Echo df9be0f
feat: exact coincidence-length theory, least horizon and sharp finite…
Fieldnote-Echo 31e6847
feat: ordinal transform laws, empirical entropy, reconstruction and q…
Fieldnote-Echo 5ecea1f
feat: smooth delay map on manifolds, immersion criteria, circle example
Fieldnote-Echo 1cc21d5
ci: run the mathematical examples as their own step
Fieldnote-Echo ad84b22
build: port Moreira's Morse–Sard theorem from SardMoreira
Fieldnote-Echo 7b204c9
feat: Sard's theorem in all dimensions at the sharp finite regularity
Fieldnote-Echo 8af73fa
fix: adapt the ported Sard files to Mathlib v4.34.1 API changes
Fieldnote-Echo e0234cb
feat: parametric avoidance of level sets by dimension count
Fieldnote-Echo e9948b1
fix: use the current names of deprecated Mathlib lemmas in the port
Fieldnote-Echo 5f927c1
fix: second round of API adaptation in the Sard port and avoidance lemma
Fieldnote-Echo 89a15b7
fix: third round of API adaptation in the Sard port
Fieldnote-Echo 24f23de
fix: fourth round of API adaptation in the Sard port
Fieldnote-Echo 58a2e35
docs: AGENTS.md as the conventions file; retire CLAUDE.md and debt.md
Fieldnote-Echo f01fa9c
fix: fifth round of API adaptation in the Sard port (charts)
Fieldnote-Echo fa66373
fix: sixth round of API adaptation in the Sard port (charts)
Fieldnote-Echo d919931
fix: seventh round of API adaptation in the Sard port (chart estimates)
Fieldnote-Echo e2f616a
fix: eighth round of API adaptation in the Sard port (main theorem)
Fieldnote-Echo ad8e454
feat: generic members of finite-dimensional affine families
Fieldnote-Echo 7f88e84
fix: current Mathlib names in the Sard module
Fieldnote-Echo 971ec3a
feat: generic-family lemmas with pointwise hypotheses and finite sums
Fieldnote-Echo 0e71d53
feat: generic observations in a finite family for delay maps
Fieldnote-Echo d164859
fix: binder types in the generic-immersion proof
Fieldnote-Echo 3bf62ca
feat: span conditions for delay maps from interpolating families
Fieldnote-Echo a4059d5
fix: explicit pair in the separation step; beta-reduced span goals
Fieldnote-Echo 356d105
fix: state the immersion span condition with `mvfderiv`
Fieldnote-Echo 00607d8
fix: lint findings in the Sard port
Fieldnote-Echo a41daed
feat: an interpolating family and Takens' theorem without short perio…
Fieldnote-Echo b679c7a
fix: argument order, namespaces and coercion typing in the family file
Fieldnote-Echo 0d5d58b
fix: injectivity of the candidate parameters via `Nat.cast_injective`
Fieldnote-Echo 5a98c1f
docs: reconcile README and site with the current mathematics
Fieldnote-Echo f0707ca
docs: API notes for the pin and provenance of the port changes
Fieldnote-Echo d8adea5
fix: drop the remaining unused measurability arguments in the port
Fieldnote-Echo c6ad1ea
feat: Takens' theorem for a fixed map with short periodic orbits
Fieldnote-Echo f4db8a3
fix: names and simp sets in the polynomial null-set file
Fieldnote-Echo fbf5fec
fix: a local Fintype instance for Lebesgue measure in the null-set lemma
Fieldnote-Echo f6a0080
fix: native tangent types and term-mode chains at periodic points
Fieldnote-Echo 2b7564c
fix: native F-valued differentials in the covector interpolation
Fieldnote-Echo 3c4a88c
fix: read the perturbed differential at the continuous-linear-map type
Fieldnote-Echo 4807107
fix: avoid the scoped omega notation and deprecated apply lemmas
Fieldnote-Echo de3745c
fix: state the injectivity of the F-valued differential through its t…
Fieldnote-Echo 6742a4e
feat: the C² topology on observations and open dense good observation…
Fieldnote-Echo debbe78
fix: type the neighbourhood filters on C^n maps and mark the topology…
Fieldnote-Echo 8a72c2b
fix: neighbourhoods of a C^n map through the metric basis of uniform …
Fieldnote-Echo 5541ce7
fix: spell out the type of uniform convergence in the neighbourhood l…
Fieldnote-Echo b681c8c
docs: Takens' theorem for a fixed map in the C² topology; remaining o…
Fieldnote-Echo 1cb6730
fix: state the ball radius, apply the fold-min bounds and assume fini…
Fieldnote-Echo 542f6cd
fix: open the smoothness-exponent notation in the generic observation…
Fieldnote-Echo e1907dd
feat: the C² topology on diffeomorphisms and openness of good pairs
Fieldnote-Echo e1a83e9
fix: record the target chart in bi-chart windows and give the weak to…
Fieldnote-Echo d1635bc
fix: type the neighbourhood filter on diffeomorphisms, continuity of …
Fieldnote-Echo f7fb07c
feat: parametric derivatives and bump perturbations of the identity
Fieldnote-Echo a6bb6f0
fix: apply the linear map with clm_apply and close the bump-perturbat…
Fieldnote-Echo bcecac7
feat: generic linear maps at periodic points (no eigenvalue a root of…
Fieldnote-Echo b44d002
fix: open the matrix notation for the observability argument
Fieldnote-Echo 60698d6
docs: record the C² topology on diffeomorphisms and openness of good …
Fieldnote-Echo c25f052
refactor: replace prover-style SardInfra proofs with explicit terms
Fieldnote-Echo 39ab8b9
docs: document the target_mem field of BiChartWindow
Fieldnote-Echo 00508e5
docs: correct a stale IteratePeriod docstring and drop a leftover com…
Fieldnote-Echo d6ac2e8
refactor: take finiteness as an instance in exists_separatingWindow_iff
Fieldnote-Echo 39da407
docs: distinguish the docstring of mfderiv_iterate_apply_ne_zero from…
Fieldnote-Echo c13ce30
refactor: share the delay-map closeness step between the fixed-map an…
Fieldnote-Echo 7944df9
refactor: get small good coefficient vectors from Measure.dense_of_ae
Fieldnote-Echo d2bcd83
refactor: factor Lagrange interpolation and the single moment functio…
Fieldnote-Echo 36ad79c
refactor: state the distinct-iterate arguments once in DelayWindow
Fieldnote-Echo 40f5312
refactor: move injective_fderiv_comp_extChartAt_symm to the chart lem…
Fieldnote-Echo 36e0154
feat: fixed points of generic bump perturbations are good
Fieldnote-Echo b0e032e
feat: good periodic points give the periodic-point conditions of fixe…
Fieldnote-Echo efaede7
feat: C² diffeomorphisms supported in a chart, tending to the identity
Fieldnote-Echo c3bbb0b
feat: C⁰ and C¹ stability of periodic-point conditions for diffeomorp…
Fieldnote-Echo 417de0d
feat: Kupka–Smale density of diffeomorphisms good up to period 4 d
Fieldnote-Echo 14dd740
feat: Takens' theorem for generic pairs in the C² topology
Fieldnote-Echo 7de44ac
docs: lead with Takens' theorem for generic pairs
Fieldnote-Echo 577214c
style: restrict a non-terminal simp and unsqueeze a terminal one
Fieldnote-Echo 0a5f10e
fix: catch qualified trust-extending names and native evaluation in t…
Fieldnote-Echo 2aa3493
ci: run the source check even when fetching the cache fails
Fieldnote-Echo 7412187
docs: point the fixed-map module at the generic-pair theorem
Fieldnote-Echo d4870c0
fix: read imports from the actual Lean header in the source check
Fieldnote-Echo 6703a34
docs: state module scope precisely and record the covering-measure in…
Fieldnote-Echo 45f2a87
docs: qualify finite horizons, the Sard threshold, reconstruction and…
Fieldnote-Echo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,65 +1,111 @@ | ||
| name: Lean CI | ||
|
|
||
| on: | ||
| push: | ||
| pull_request: | ||
| push: | ||
| branches: [main] | ||
| workflow_dispatch: | ||
|
|
||
| permissions: {} | ||
|
|
||
| concurrency: | ||
| group: lean-ci-${{ github.head_ref || github.ref }} | ||
| group: lean-ci-${{ github.event.pull_request.number || github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| env: | ||
| ELAN_HOME: /home/runner/.elan | ||
|
|
||
| jobs: | ||
| # CONTRACT: org ruleset requires this exact check name 'build' | ||
| # CONTRACT: the org ruleset requires this exact check name: build | ||
| build: | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 120 | ||
| timeout-minutes: 240 | ||
| permissions: | ||
| contents: read | ||
| defaults: | ||
| run: | ||
| shell: bash | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | ||
| with: | ||
| persist-credentials: false | ||
|
|
||
| - name: Install elan and toolchain | ||
| - name: Record the checked revision | ||
| env: | ||
| EVENT: ${{ github.event_name }} | ||
| GITHUB_SHA_CTX: ${{ github.sha }} | ||
| PR_HEAD: ${{ github.event.pull_request.head.sha }} | ||
| PR_BASE: ${{ github.event.pull_request.base.sha }} | ||
| run: | | ||
| curl -sSf https://raw.githubusercontent.com/leanprover/elan/917c18d0ad52f649c2603dc8b973f5b9fa5f8f43/elan-init.sh | sh -s -- -y --default-toolchain none | ||
| set -euo pipefail | ||
| echo "event: $EVENT" | ||
| echo "github.sha: $GITHUB_SHA_CTX" | ||
| echo "pr head sha: ${PR_HEAD:-n/a}" | ||
| echo "pr base sha: ${PR_BASE:-n/a}" | ||
| echo "checked commit: $(git rev-parse HEAD)" | ||
| fingerprint="$(git ls-files '*.lean' lakefile.toml lake-manifest.json lean-toolchain \ | ||
| | sort | xargs sha256sum | sha256sum | cut -d' ' -f1)" | ||
| echo "lean source fingerprint: $fingerprint" | ||
|
|
||
| - name: Install elan and the pinned toolchain | ||
| run: | | ||
| set -euo pipefail | ||
| curl -sSfL -o elan-init.sh \ | ||
| https://raw.githubusercontent.com/leanprover/elan/917c18d0ad52f649c2603dc8b973f5b9fa5f8f43/elan-init.sh | ||
| echo "4bacca9502cb89736fe63d2685abc2947cfbf34dc87673504f1bb4c43eda9264 elan-init.sh" \ | ||
| | sha256sum -c - | ||
| sh elan-init.sh -y --default-toolchain none | ||
| rm elan-init.sh | ||
| echo "${ELAN_HOME}/bin" >> "${GITHUB_PATH}" | ||
| export PATH="${ELAN_HOME}/bin:${PATH}" | ||
| elan --version | ||
| elan show | ||
| lean --version | ||
| lake --version | ||
|
|
||
| - name: Cache Lake build artifacts | ||
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 | ||
| with: | ||
| path: .lake | ||
| key: lake-${{ hashFiles('lean-toolchain', 'lakefile.toml', 'lake-manifest.json') }} | ||
| restore-keys: lake- | ||
| # Mathlib's own olean cache only; the project is rebuilt from this fresh checkout. | ||
| - name: Fetch the Mathlib build cache | ||
| id: cache | ||
| run: lake exe cache get | ||
|
|
||
| - name: Get Mathlib cache | ||
| run: lake exe cache get || true | ||
| - name: Confirm no prebuilt project outputs | ||
| id: fresh | ||
| run: test ! -e .lake/build | ||
|
|
||
| - name: Build (fail on sorry) | ||
| run: lake build --wfail | ||
| # Each check below reports even if an earlier independent check failed; | ||
| # the job fails if any of them fails. | ||
| - name: Source hygiene | ||
| if: ${{ !cancelled() }} | ||
| run: python3 scripts/check_source.py | ||
|
|
||
| - name: Lint (Mathlib environment linters) | ||
| - name: Build every tracked Lean module (warnings are errors) | ||
| id: build | ||
| if: ${{ !cancelled() && steps.cache.outcome == 'success' && steps.fresh.outcome == 'success' }} | ||
| run: | | ||
| set -euo pipefail | ||
| modules="$(python3 scripts/check_source.py --list-modules)" | ||
| echo "modules: $modules" | ||
| # shellcheck disable=SC2086 | ||
| lake build --wfail $modules | ||
|
|
||
| - name: Mathematical examples | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: lake env lean -DwarningAsError=true TakensFormal/Examples.lean | ||
|
|
||
| - name: Lint | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: lake lint | ||
|
|
||
| - name: Verify axiom dashboard compiles | ||
| run: lake build TakensFormal.Verify | ||
| - name: Axiom records of the selected declarations | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: python3 scripts/check_axioms.py | ||
|
|
||
| - name: Check for sorry contamination | ||
| run: | | ||
| echo "Checking axiom dependencies..." | ||
| touch TakensFormal/Verify.lean | ||
| lake env lean TakensFormal/Verify.lean 2>&1 | tee verify_output.txt | ||
| # NOTE: At skeleton stage (no #print axioms), this grep finds nothing | ||
| # and passes vacuously. Becomes meaningful once definitions land. | ||
| if grep -q "sorryAx" verify_output.txt; then | ||
| echo "FATAL: sorryAx found in verified theorems!" | ||
| exit 1 | ||
| fi | ||
| echo "No sorry contamination detected." | ||
| - name: Documented Lean names resolve | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: python3 scripts/check_doc_names.py | ||
|
|
||
| - name: Checker negative tests | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: python3 scripts/test_checkers.py --lean | ||
|
|
||
| - name: Fresh kernel replay | ||
| if: ${{ !cancelled() && steps.build.outcome == 'success' }} | ||
| run: lake env leanchecker --fresh TakensFormal | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -28,3 +28,6 @@ | |
|
|
||
| # Root-level browser-check screenshots (docs/assets/ remains tracked) | ||
| /*.png | ||
|
|
||
| # Python bytecode | ||
| __pycache__/ | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.