Skip to content
Merged
Show file tree
Hide file tree
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 Sep 28, 2026
e13b737
ci: ignore prose theorem-block labels in the doc-name check
Fieldnote-Echo Sep 28, 2026
ea22cfa
docs: fix names that do not resolve and the obsolete Sard-typeclass plan
Fieldnote-Echo Sep 28, 2026
facac19
build: bump Lean and Mathlib from v4.28.0 to v4.34.1
Fieldnote-Echo Sep 28, 2026
e229598
fix: repair existing proofs for Lean/Mathlib v4.34.1
Fieldnote-Echo Sep 28, 2026
df9be0f
feat: exact coincidence-length theory, least horizon and sharp finite…
Fieldnote-Echo Sep 28, 2026
31e6847
feat: ordinal transform laws, empirical entropy, reconstruction and q…
Fieldnote-Echo Sep 28, 2026
5ecea1f
feat: smooth delay map on manifolds, immersion criteria, circle example
Fieldnote-Echo Sep 28, 2026
1cc21d5
ci: run the mathematical examples as their own step
Fieldnote-Echo Sep 28, 2026
ad84b22
build: port Moreira's Morse–Sard theorem from SardMoreira
Fieldnote-Echo Sep 28, 2026
7b204c9
feat: Sard's theorem in all dimensions at the sharp finite regularity
Fieldnote-Echo Sep 28, 2026
8af73fa
fix: adapt the ported Sard files to Mathlib v4.34.1 API changes
Fieldnote-Echo Sep 28, 2026
e0234cb
feat: parametric avoidance of level sets by dimension count
Fieldnote-Echo Sep 28, 2026
e9948b1
fix: use the current names of deprecated Mathlib lemmas in the port
Fieldnote-Echo Sep 28, 2026
5f927c1
fix: second round of API adaptation in the Sard port and avoidance lemma
Fieldnote-Echo Sep 28, 2026
89a15b7
fix: third round of API adaptation in the Sard port
Fieldnote-Echo Sep 28, 2026
24f23de
fix: fourth round of API adaptation in the Sard port
Fieldnote-Echo Sep 28, 2026
58a2e35
docs: AGENTS.md as the conventions file; retire CLAUDE.md and debt.md
Fieldnote-Echo Sep 28, 2026
f01fa9c
fix: fifth round of API adaptation in the Sard port (charts)
Fieldnote-Echo Sep 28, 2026
fa66373
fix: sixth round of API adaptation in the Sard port (charts)
Fieldnote-Echo Sep 28, 2026
d919931
fix: seventh round of API adaptation in the Sard port (chart estimates)
Fieldnote-Echo Sep 28, 2026
e2f616a
fix: eighth round of API adaptation in the Sard port (main theorem)
Fieldnote-Echo Sep 28, 2026
ad8e454
feat: generic members of finite-dimensional affine families
Fieldnote-Echo Sep 28, 2026
7f88e84
fix: current Mathlib names in the Sard module
Fieldnote-Echo Sep 28, 2026
971ec3a
feat: generic-family lemmas with pointwise hypotheses and finite sums
Fieldnote-Echo Sep 28, 2026
0e71d53
feat: generic observations in a finite family for delay maps
Fieldnote-Echo Sep 28, 2026
d164859
fix: binder types in the generic-immersion proof
Fieldnote-Echo Sep 28, 2026
3bf62ca
feat: span conditions for delay maps from interpolating families
Fieldnote-Echo Sep 28, 2026
a4059d5
fix: explicit pair in the separation step; beta-reduced span goals
Fieldnote-Echo Sep 28, 2026
356d105
fix: state the immersion span condition with `mvfderiv`
Fieldnote-Echo Sep 28, 2026
00607d8
fix: lint findings in the Sard port
Fieldnote-Echo Sep 28, 2026
a41daed
feat: an interpolating family and Takens' theorem without short perio…
Fieldnote-Echo Sep 28, 2026
b679c7a
fix: argument order, namespaces and coercion typing in the family file
Fieldnote-Echo Sep 28, 2026
0d5d58b
fix: injectivity of the candidate parameters via `Nat.cast_injective`
Fieldnote-Echo Sep 28, 2026
5a98c1f
docs: reconcile README and site with the current mathematics
Fieldnote-Echo Sep 28, 2026
f0707ca
docs: API notes for the pin and provenance of the port changes
Fieldnote-Echo Sep 28, 2026
d8adea5
fix: drop the remaining unused measurability arguments in the port
Fieldnote-Echo Sep 28, 2026
c6ad1ea
feat: Takens' theorem for a fixed map with short periodic orbits
Fieldnote-Echo Sep 28, 2026
f4db8a3
fix: names and simp sets in the polynomial null-set file
Fieldnote-Echo Sep 28, 2026
fbf5fec
fix: a local Fintype instance for Lebesgue measure in the null-set lemma
Fieldnote-Echo Sep 28, 2026
f6a0080
fix: native tangent types and term-mode chains at periodic points
Fieldnote-Echo Sep 28, 2026
2b7564c
fix: native F-valued differentials in the covector interpolation
Fieldnote-Echo Sep 28, 2026
3c4a88c
fix: read the perturbed differential at the continuous-linear-map type
Fieldnote-Echo Sep 28, 2026
4807107
fix: avoid the scoped omega notation and deprecated apply lemmas
Fieldnote-Echo Sep 28, 2026
de3745c
fix: state the injectivity of the F-valued differential through its t…
Fieldnote-Echo Sep 28, 2026
6742a4e
feat: the C² topology on observations and open dense good observation…
Fieldnote-Echo Sep 28, 2026
debbe78
fix: type the neighbourhood filters on C^n maps and mark the topology…
Fieldnote-Echo Sep 28, 2026
8a72c2b
fix: neighbourhoods of a C^n map through the metric basis of uniform …
Fieldnote-Echo Sep 28, 2026
5541ce7
fix: spell out the type of uniform convergence in the neighbourhood l…
Fieldnote-Echo Sep 28, 2026
b681c8c
docs: Takens' theorem for a fixed map in the C² topology; remaining o…
Fieldnote-Echo Sep 28, 2026
1cb6730
fix: state the ball radius, apply the fold-min bounds and assume fini…
Fieldnote-Echo Sep 28, 2026
542f6cd
fix: open the smoothness-exponent notation in the generic observation…
Fieldnote-Echo Sep 28, 2026
e1907dd
feat: the C² topology on diffeomorphisms and openness of good pairs
Fieldnote-Echo Sep 28, 2026
e1a83e9
fix: record the target chart in bi-chart windows and give the weak to…
Fieldnote-Echo Sep 28, 2026
d1635bc
fix: type the neighbourhood filter on diffeomorphisms, continuity of …
Fieldnote-Echo Sep 28, 2026
f7fb07c
feat: parametric derivatives and bump perturbations of the identity
Fieldnote-Echo Sep 28, 2026
a6bb6f0
fix: apply the linear map with clm_apply and close the bump-perturbat…
Fieldnote-Echo Sep 28, 2026
bcecac7
feat: generic linear maps at periodic points (no eigenvalue a root of…
Fieldnote-Echo Sep 28, 2026
b44d002
fix: open the matrix notation for the observability argument
Fieldnote-Echo Sep 28, 2026
60698d6
docs: record the C² topology on diffeomorphisms and openness of good …
Fieldnote-Echo Sep 28, 2026
c25f052
refactor: replace prover-style SardInfra proofs with explicit terms
Fieldnote-Echo Sep 28, 2026
39ab8b9
docs: document the target_mem field of BiChartWindow
Fieldnote-Echo Sep 28, 2026
00508e5
docs: correct a stale IteratePeriod docstring and drop a leftover com…
Fieldnote-Echo Sep 28, 2026
d6ac2e8
refactor: take finiteness as an instance in exists_separatingWindow_iff
Fieldnote-Echo Sep 28, 2026
39da407
docs: distinguish the docstring of mfderiv_iterate_apply_ne_zero from…
Fieldnote-Echo Sep 28, 2026
c13ce30
refactor: share the delay-map closeness step between the fixed-map an…
Fieldnote-Echo Sep 28, 2026
7944df9
refactor: get small good coefficient vectors from Measure.dense_of_ae
Fieldnote-Echo Sep 28, 2026
d2bcd83
refactor: factor Lagrange interpolation and the single moment functio…
Fieldnote-Echo Sep 28, 2026
36ad79c
refactor: state the distinct-iterate arguments once in DelayWindow
Fieldnote-Echo Sep 28, 2026
40f5312
refactor: move injective_fderiv_comp_extChartAt_symm to the chart lem…
Fieldnote-Echo Sep 28, 2026
36e0154
feat: fixed points of generic bump perturbations are good
Fieldnote-Echo Sep 28, 2026
b0e032e
feat: good periodic points give the periodic-point conditions of fixe…
Fieldnote-Echo Sep 28, 2026
efaede7
feat: C² diffeomorphisms supported in a chart, tending to the identity
Fieldnote-Echo Sep 28, 2026
c3bbb0b
feat: C⁰ and C¹ stability of periodic-point conditions for diffeomorp…
Fieldnote-Echo Sep 28, 2026
417de0d
feat: Kupka–Smale density of diffeomorphisms good up to period 4 d
Fieldnote-Echo Sep 28, 2026
14dd740
feat: Takens' theorem for generic pairs in the C² topology
Fieldnote-Echo Sep 28, 2026
7de44ac
docs: lead with Takens' theorem for generic pairs
Fieldnote-Echo Sep 28, 2026
577214c
style: restrict a non-terminal simp and unsqueeze a terminal one
Fieldnote-Echo Sep 28, 2026
0a5f10e
fix: catch qualified trust-extending names and native evaluation in t…
Fieldnote-Echo Sep 28, 2026
2aa3493
ci: run the source check even when fetching the cache fails
Fieldnote-Echo Sep 28, 2026
7412187
docs: point the fixed-map module at the generic-pair theorem
Fieldnote-Echo Sep 28, 2026
d4870c0
fix: read imports from the actual Lean header in the source check
Fieldnote-Echo Sep 28, 2026
6703a34
docs: state module scope precisely and record the covering-measure in…
Fieldnote-Echo Sep 28, 2026
45f2a87
docs: qualify finite horizons, the Sard threshold, reconstruction and…
Fieldnote-Echo Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 27 additions & 16 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,55 @@
name: Docs

on:
pull_request:
push:
branches: [main]
paths:
- "docs/**"
- "zensical.toml"
- ".github/workflows/docs.yml"
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write
permissions: {}

concurrency:
group: pages
cancel-in-progress: true
group: docs-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build:
docs:
name: docs
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1
with:
enable-cache: true
- name: Install docs dependencies
run: uv sync --frozen --no-install-project --group docs
- name: Build site
run: uv run zensical build
- name: Strip internal docs from build
run: rm -rf site/internal site/aristotle site/plans site/superpowers
- uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
run: uv run zensical build --clean
- name: Check nav pages, links, fragments, assets and retired paths
run: python3 scripts/check_docs_site.py --external
# Only a push to main (or a manual run on main) publishes the site.
- name: Upload Pages artifact
if: >-
github.ref == 'refs/heads/main' &&
(github.event_name == 'push' || github.event_name == 'workflow_dispatch')
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
with:
path: site

deploy:
needs: build
needs: docs
if: >-
github.ref == 'refs/heads/main' &&
(github.event_name == 'push' || github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
Expand Down
112 changes: 79 additions & 33 deletions .github/workflows/lean_action_ci.yml
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
Comment thread
qodo-code-review[bot] marked this conversation as resolved.

- 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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,6 @@

# Root-level browser-check screenshots (docs/assets/ remains tracked)
/*.png

# Python bytecode
__pycache__/
Loading
Loading