Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
cb9e7a3
Update Cslib/Computability/Machines/MultiTapeTuring/Basic.lean
crei Mar 10, 2026
cc78278
Extract common parts.
crei Mar 10, 2026
07d7bcd
Simplify definitions and proofs.
crei Mar 10, 2026
841be7f
Use "@[expose] public section"
crei Mar 10, 2026
abac0f1
Update Cslib.lean
crei Mar 10, 2026
ae6c498
Add missed file.
crei Mar 10, 2026
b38b929
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Mar 19, 2026
7401a21
fix import.
crei Mar 19, 2026
93b6704
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Apr 30, 2026
3110f77
Move "expose" command below module-level documentation.
crei Apr 30, 2026
21c3515
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Jun 2, 2026
883e868
Introduce read-only input tape and write-only output tape and define …
crei Jun 2, 2026
3ac3ac8
Clean up imports.
crei Jun 2, 2026
b5689a1
more cleanup
crei Jun 2, 2026
3d406b7
Do not use BiTape for input.
crei Jun 4, 2026
398ad91
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Jun 5, 2026
6847a62
Make move optional.
crei Jun 5, 2026
82e06e3
feat(Governance): Add new area maintainers for algorithms and logic (…
fmontesi Jun 10, 2026
b9d8076
chore(Semantics/LTS/Bisimulation): golf and simplify (#613)
thomaskwaring Jun 10, 2026
edfa974
Add chenson2018 explicitly to logic CODEOWNERS
fmontesi Jun 11, 2026
e3991ff
feat: logical equivalence for modal logic (#535)
fmontesi Jun 11, 2026
616e04b
doc: prefer +/- for Boolean `optConfig` (#620)
chenson2018 Jun 11, 2026
1f601a2
chore: bump mathlib to 8589236, fix breaking changes (#628)
mathlib-nightly-testing[bot] Jun 12, 2026
d6c0b90
feat(Data/PFunctor): add free monad of a polynomial functor (#477)
quangvdao Jun 12, 2026
ee5567b
chore: bump mathlib to 73b2611, fix breaking changes (#640)
mathlib-nightly-testing[bot] Jun 13, 2026
d5148c0
chore: split the `Relation` module (#632)
chenson2018 Jun 13, 2026
6311ef1
doc: add wikidata attribute for Church-Rosser theorems (#626)
chenson2018 Jun 13, 2026
87c249d
chore(LTS): add API for TraceEq and relatives (#617)
thomaskwaring Jun 13, 2026
8ea71c8
chore: bump toolchain to v4.31.0 (#651)
Garmelon Jun 15, 2026
70c5bf5
refactor(Logics/Propositional): classical and intuitionistic inferenc…
thomaskwaring Jun 16, 2026
c2197ac
feat(FLP): show that asynchronous distributed consensus is possible w…
ctchou Jun 19, 2026
1dbda53
feat(Automata, LTS, TM): Introduce LTS.SMTr and LTS.mapLabel, general…
fmontesi Jun 19, 2026
e0573fb
chore: bump toolchain to v4.32.0-rc1 (#664)
Garmelon Jun 19, 2026
dc23a39
feat(LocallyNameless/Untyped): `subst_intro` weaker precondition (#666)
lengyijun Jun 20, 2026
7e1ac9d
feat(LocallyNameless/Untyped): generalize `eta_subst_fvar` (#667)
lengyijun Jun 21, 2026
5564021
refactor(LocallyNameless/Untyped): rename close_open_to_subst → close…
lengyijun Jun 21, 2026
f03afdc
feat: `Set.ReflOn`, `Set.SymmOn` (#663)
chenson2018 Jun 21, 2026
dbce0f9
chore: bump mathlib to 29af524, fix breaking changes (#670)
mathlib-nightly-testing[bot] Jun 22, 2026
f10c049
feat(untyped): define CBN and Standard evaluation strategies (#671)
m-ow Jun 22, 2026
085e658
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Jun 23, 2026
4f6cf21
More design notes, references, switch from BiTape to \int -> Nat and …
crei Jun 23, 2026
d4a14ef
Some small tweaks.
crei Jun 23, 2026
a441db6
feat(Automata): Transducers (#650)
fmontesi Jun 25, 2026
2772f42
chore: fix the header of Cslib/Computability/Automata/DA/Prod.lean (#…
ctchou Jun 26, 2026
1edb390
chore: disable .github/workflows/lake-update.yml on personal forks (#…
ctchou Jul 1, 2026
5c41dcf
chore: bump mathlib to d52d26f, fix breaking changes (#694)
mathlib-nightly-testing[bot] Jul 2, 2026
7940a10
fix(Foundations/Syntax): guard substitution notation with noWs (#687)
loafer-19 Jul 5, 2026
f2aeae5
feat(Machines): Single-Tape Nondeterministic Turing Machines (NTMs) (…
fmontesi Jul 6, 2026
27d53d7
feat(untyped): standardization theorem for the lambda calculus (#679)
m-ow Jul 9, 2026
c0120dd
feat(LocallyNameless/Untyped): new theorem `lcAt_le` (#699)
lengyijun Jul 9, 2026
abb1720
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Jul 8, 2026
16d2320
Merge remote-tracking branch 'origin/main' into multi-tape-tm
crei Jul 11, 2026
4d3bcce
Replace Move by SignType and require Fintype and Inhabited for Symbol.
crei Jul 11, 2026
54580af
Whitespace and tactic nitpicks.
crei Jul 11, 2026
647d9d0
Generalize Symbol and State, remove the `tm` parameter from Cfg and a…
crei Jul 12, 2026
0247822
Some initial space-related results.
crei Jul 12, 2026
1143307
Unbundle configuration input and fix doc string.
crei Jul 12, 2026
e68a6a1
Merge branch 'multi-tape-tm' into finite_in_fin
crei Jul 12, 2026
4a149e2
updates
crei Jul 19, 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
5 changes: 4 additions & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
### Area access
# Each area maintainer has access to parts that pertain them. They get automatically asked for
# reviewing new PRs that touch those areas.
/Cslib/Languages/LambdaCalculus/ @chenson2018
/Cslib/Algorithms/ @fmontesi @sorrachai @chenson2018
/Cslib/Foundations/Logic/ @arademaker @fmontesi @chenson2018
/Cslib/Logics/ @arademaker @fmontesi @chenson2018
/Cslib/Languages/LambdaCalculus/ @chenson2018 @fmontesi
/.github/workflows @kim-em @fmontesi @chenson2018
/scripts @kim-em @fmontesi @chenson2018
2 changes: 2 additions & 0 deletions .github/workflows/lake-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ on:
jobs:
bump:
runs-on: ubuntu-latest
if: github.repository == 'leanprover/cslib'
steps:
- name: Generate app token
id: app-token
Expand Down Expand Up @@ -52,6 +53,7 @@ jobs:

open-issue:
runs-on: ubuntu-latest
if: github.repository == 'leanprover/cslib'
permissions:
issues: write
steps:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/lean_action_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
with:
build-args: "--wfail --iofail"
test-args: "--wfail --iofail"
- name: "lake exe mk_all --check --module"
- name: "lake exe mk_all --check"
run: |
set -e
lake exe mk_all --check --module
lake exe mk_all --check
#- name: "lake shake"
# run: |
# set -e
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ CSLib uses a number of linters, mostly inherited from Batteries and Mathlib. The
## Imports

There is a also a test that [Cslib.lean](/Cslib.lean) imports all files. You can ensure this by
running `lake exe mk_all --module` locally, which will make the required changes.
running `lake exe mk_all` locally, which will make the required changes.

CSLib tests for minimized imports using `lake shake --add-public --keep-implied --keep-prefix`, which also comes with a `--fix` option.
See `lake shake --help` for the special comment syntax used to preserve imports required for tactics or typeclasses.
Expand Down
24 changes: 22 additions & 2 deletions Cslib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,23 @@ public import Cslib.Computability.Automata.DA.Prod
public import Cslib.Computability.Automata.DA.ToNA
public import Cslib.Computability.Automata.EpsilonNA.Basic
public import Cslib.Computability.Automata.EpsilonNA.ToNA
public import Cslib.Computability.Automata.EpsilonNA.ToSingleAccept
public import Cslib.Computability.Automata.NA.Basic
public import Cslib.Computability.Automata.NA.BuchiEquiv
public import Cslib.Computability.Automata.NA.BuchiInter
public import Cslib.Computability.Automata.NA.Concat
public import Cslib.Computability.Automata.NA.EpsilonTransducer
public import Cslib.Computability.Automata.NA.Hist
public import Cslib.Computability.Automata.NA.Loop
public import Cslib.Computability.Automata.NA.Pair
public import Cslib.Computability.Automata.NA.Prod
public import Cslib.Computability.Automata.NA.Sum
public import Cslib.Computability.Automata.NA.ToDA
public import Cslib.Computability.Automata.NA.Total
public import Cslib.Computability.Automata.Transducers.Transducer
public import Cslib.Computability.Distributed.FLP.Algorithm
public import Cslib.Computability.Distributed.FLP.Consensus
public import Cslib.Computability.Distributed.FLP.ZeroConsensus
public import Cslib.Computability.Languages.Congruences.BuchiCongruence
public import Cslib.Computability.Languages.Congruences.RightCongruence
public import Cslib.Computability.Languages.ExampleEventuallyZero
Expand All @@ -32,7 +36,12 @@ public import Cslib.Computability.Languages.MyhillNerode
public import Cslib.Computability.Languages.OmegaLanguage
public import Cslib.Computability.Languages.OmegaRegularLanguage
public import Cslib.Computability.Languages.RegularLanguage
public import Cslib.Computability.Machines.SingleTapeTuring.Basic
public import Cslib.Computability.Machines.Turing.MultiTape.ConfigBound
public import Cslib.Computability.Machines.Turing.MultiTape.Deterministic
public import Cslib.Computability.Machines.Turing.MultiTape.Regular
public import Cslib.Computability.Machines.Turing.SingleTape.Defs
public import Cslib.Computability.Machines.Turing.SingleTape.Deterministic
public import Cslib.Computability.Machines.Turing.SingleTape.NonDeterministic
public import Cslib.Computability.URM.Basic
public import Cslib.Computability.URM.Computable
public import Cslib.Computability.URM.Defs
Expand Down Expand Up @@ -64,13 +73,19 @@ public import Cslib.Foundations.Data.OmegaSequence.Flatten
public import Cslib.Foundations.Data.OmegaSequence.InfOcc
public import Cslib.Foundations.Data.OmegaSequence.Init
public import Cslib.Foundations.Data.OmegaSequence.Temporal
public import Cslib.Foundations.Data.PFunctor.Free
public import Cslib.Foundations.Data.RelatesInSteps
public import Cslib.Foundations.Data.Relation
public import Cslib.Foundations.Data.Set.Saturation
public import Cslib.Foundations.Data.StackTape
public import Cslib.Foundations.Lint.Basic
public import Cslib.Foundations.Logic.InferenceSystem
public import Cslib.Foundations.Logic.LogicalEquivalence
public import Cslib.Foundations.Relation.Attr
public import Cslib.Foundations.Relation.Confluence
public import Cslib.Foundations.Relation.Defs
public import Cslib.Foundations.Relation.Domain
public import Cslib.Foundations.Relation.Euclidean
public import Cslib.Foundations.Relation.Restriction
public import Cslib.Foundations.Semantics.FLTS.Basic
public import Cslib.Foundations.Semantics.FLTS.FLTSToLTS
public import Cslib.Foundations.Semantics.FLTS.LTSToFLTS
Expand All @@ -81,6 +96,7 @@ public import Cslib.Foundations.Semantics.LTS.Divergence
public import Cslib.Foundations.Semantics.LTS.Execution
public import Cslib.Foundations.Semantics.LTS.HasTau
public import Cslib.Foundations.Semantics.LTS.LTSCat.Basic
public import Cslib.Foundations.Semantics.LTS.MapLabel
public import Cslib.Foundations.Semantics.LTS.Notation
public import Cslib.Foundations.Semantics.LTS.OmegaExecution
public import Cslib.Foundations.Semantics.LTS.Relation
Expand Down Expand Up @@ -116,6 +132,7 @@ public import Cslib.Languages.LambdaCalculus.LocallyNameless.Stlc.Basic
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Stlc.Safety
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Stlc.StrongNorm
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.Basic
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.CallByName
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.Congruence
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.FullBeta
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.FullBetaConfluence
Expand All @@ -127,6 +144,7 @@ public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.LcAt
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.MultiApp
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.MultiSubst
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.Properties
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.StandardReduction
public import Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.StrongNorm
public import Cslib.Languages.LambdaCalculus.Named.Untyped.Basic
public import Cslib.Logics.HML.Basic
Expand All @@ -139,8 +157,10 @@ public import Cslib.Logics.LinearLogic.CLL.PhaseSemantics.Basic
public import Cslib.Logics.Modal.Basic
public import Cslib.Logics.Modal.Cube
public import Cslib.Logics.Modal.Denotation
public import Cslib.Logics.Modal.LogicalEquivalence
public import Cslib.Logics.Propositional.Defs
public import Cslib.Logics.Propositional.NaturalDeduction.Basic
public import Cslib.Logics.Propositional.NaturalDeduction.Theory
public import Cslib.MachineLearning.PACLearning.Defs
public import Cslib.MachineLearning.PACLearning.VCDimension
public import Cslib.MachineLearning.PACLearning.VersionSpace
Expand Down
2 changes: 1 addition & 1 deletion Cslib/Algorithms/Lean/MergeSort/MergeSort.lean
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ module

public import Cslib.Algorithms.Lean.TimeM
public import Mathlib.Data.Nat.Cast.Order.Ring
public import Mathlib.Data.Nat.Lattice
public import Mathlib.Order.Lattice.Nat
public import Mathlib.Data.Nat.Log

/-!
Expand Down
2 changes: 1 addition & 1 deletion Cslib/Computability/Automata/DA/Prod.lean
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/-
Copyright (c) 2025 Fabrizio Montesi. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Ching-Tsun Chou
Authors: Fabrizio Montesi, Ching-Tsun Chou
-/

module
Expand Down
4 changes: 1 addition & 3 deletions Cslib/Computability/Automata/EpsilonNA/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ namespace FinAcc
that trace from the start state. -/
@[scoped grind =]
instance : Acceptor (FinAcc State Symbol) Symbol where
Accepts (a : FinAcc State Symbol) (xs : List Symbol) :=
∃ s ∈ a.εClosure a.start, ∃ s' ∈ a.accept,
a.saturate.MTr s (xs.map (some ·)) s'
Accepts a xs := ∃ s ∈ a.start, ∃ s' ∈ a.accept, a.SMTr s (xs.map some) s'

end FinAcc

Expand Down
53 changes: 18 additions & 35 deletions Cslib/Computability/Automata/EpsilonNA/ToNA.lean
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,13 @@ Authors: Fabrizio Montesi
module

public import Cslib.Computability.Automata.EpsilonNA.Basic
public import Cslib.Foundations.Semantics.LTS.MapLabel

/-! # Translation of εNA into NA -/

@[expose] public section

namespace Cslib

/-- Converts an `LTS` with Option labels into an `LTS` on the carried label type, by removing all
ε-transitions. -/
@[local grind =]
def LTS.noε (lts : LTS State (Option Label)) : LTS State Label where
Tr s μ s' := lts.Tr s (some μ) s'

@[local grind .]
private lemma LTS.noε_saturate_tr
{lts : LTS State (Option Label)} {h : μ = some μ'} :
lts.saturate.Tr s μ s' ↔ lts.saturate.noε.Tr s μ' s' := by
grind

@[scoped grind =]
lemma LTS.noε_saturate_mTr {lts : LTS State (Option Label)} :
lts.saturate.MTr s (μs.map some) = lts.saturate.noε.MTr s μs := by
ext s'
induction μs generalizing s <;> grind [<= LTS.MTr.stepL]

namespace Automata.εNA.FinAcc
namespace Cslib.Automata.εNA.FinAcc

variable {State Symbol : Type*}

Expand All @@ -41,21 +22,23 @@ variable {State Symbol : Type*}
def toNAFinAcc (a : εNA.FinAcc State Symbol) : NA.FinAcc State Symbol where
start := a.εClosure a.start
accept := a.accept
Tr := a.saturate.noε.Tr
toLTS := a.saturate.mapLabel Option.some

open Acceptor in
open scoped NA.FinAcc in
open scoped NA.FinAcc LTS LTS.MTr LTS.STr LTS.SMTr in
/-- Correctness of `toNAFinAcc`. -/
@[scoped grind _=_]
theorem toNAFinAcc_language_eq {ena : εNA.FinAcc State Symbol} :
language ena.toNAFinAcc = language ena := by
@[scoped grind =]
theorem toNAFinAcc_language_eq {a : εNA.FinAcc State Symbol} :
language a.toNAFinAcc = language a := by
ext xs
have : ∀ s s', ena.saturate.MTr s (xs.map some) s' = ena.saturate.noε.MTr s xs s' := by
simp [LTS.noε_saturate_mTr]
#adaptation_note
/-- A grind regression found moving to nightly-2026-03-31 (changes from lean#13166) -/
grind [Accepts]

end Automata.εNA.FinAcc

end Cslib
constructor <;> intro ⟨s, hs, s', hs', h⟩
· have ⟨sStart, h_sStart, hs⟩ : ∃ i ∈ a.start, s ∈ a.saturate.image i HasTau.τ := by
simpa [toNAFinAcc, LTS.τClosure, LTS.setImage] using hs
use sStart, h_sStart, s', hs'
have h_start := (LTS.sTr_τSTr_iff a.toLTS).mp hs
exact LTS.SMTr.comp (LTS.sMTr_τSTr_iff.mp h_start) (by grind)
· cases xs with
| nil => cases h with | τ tau => exact ⟨s', LTS.tr_setImage hs tau, by grind⟩
| cons x xs => exact ⟨s, by grind [Set.mem_of_mem_of_subset]⟩

end Cslib.Automata.εNA.FinAcc
Loading