FormalConjectures/Wikipedia/CernyConjecture.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned project documentation, Formal Conjectures paper, arXiv v1

2 declarations, 2 contain sorry, 0 declared as axioms

Černý Conjecture

A synchronizing word (also called a reset word) for a deterministic finite automaton (DFA) $M = (Q, \Sigma, \delta)$ is a word $w \in \Sigma^\*$ such that reading $w$ from any state always leads to the same single state — formally, $\exists p \in Q, \forall q \in Q, \delta^\*(q, w) = p$.

A DFA is called synchronizing if it admits at least one synchronizing word.

The Černý conjecture asserts that every synchronizing DFA with $n$ states has a synchronizing word of length at most $(n - 1)^2$. This bound is sharp: the family of Černý automata $C_n$ witnesses it, requiring exactly $(n - 1)^2$ steps.

Status: Open. The best known upper bound is $\left(\frac{7}{48} + \frac{2 \cdot 15625}{1597536}\right) n^3 + o(n^3) \approx 0.1654\,n^3$ (Shitov, 2019). The bound $(n - 1)^2$ has been verified for small $n$ and for special classes of automata (e.g., Eulerian, aperiodic, cyclic automata).

We use Mathlib's DFA α σ (from Mathlib.Computability.DFA), together with the auxiliary DFA.IsSynchronizingWord and DFA.IsSynchronizing predicates defined in FormalConjecturesForMathlib.Computability.DFA.

References:

Imports (1)
  1. theorem CernyConjecture.cerny_conjecture Černý Conjecture: Every synchronizing DFA with $n$ states admits a synchronizing word of length at most $(n - 1)^2$ sorry line 60 source

    Source documentation

    Černý Conjecture: Every synchronizing DFA with $n$ states admits a synchronizing word of length at most $(n - 1)^2$.

    depends on sorry what this means

    Statement uses: Iff, True, Fintype, DFA, DFA.IsSynchronizing, Exists, List, And, DFA.IsSynchronizingWord, LE.le, Nat, List.length, HPow.hPow, HSub.hSub, Fintype.card, OfNat.ofNat

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    16 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem cerny_conjecture :
        answer(sorry) ↔ ∀ {α : Type*} {σ : Type*} [Fintype σ] (M : DFA α σ) (hM : M.IsSynchronizing) ,
        ∃ w : List α, M.IsSynchronizingWord w ∧ w.length ≤ (Fintype.card σ - 1)^2 := by
    …
  2. theorem CernyConjecture.shitov_upper_bound Documented declaration: shitov_upper_bound sorry line 71 source

    Source documentation

    Shitov's bound (2019): Every synchronizing DFA with $n$ states admits a synchronizing word of length at most $\left(\frac{7}{48} + \frac{2 \cdot 15625}{1597536}\right) n^3 + o(n^3)$, where the $o(n^3)$ term is uniform over all alphabets. This is the best known upper bound towards the Černý conjecture.

    depends on sorry what this means

    Statement uses: Exists, Real, And, Asymptotics.IsLittleO, Filter.atTop, HPow.hPow, Nat, OfNat.ofNat, Fintype, DFA, DFA.IsSynchronizing, List, DFA.IsSynchronizingWord, LE.le, List.length, HAdd.hAdd, HMul.hMul, HDiv.hDiv, Fintype.card

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    40 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem shitov_upper_bound :
        ∃ f : ℝ → ℝ, f =o[atTop] (fun n : ℝ => n ^ 3) ∧
        ∀ {α : Type*} {σ : Type*} [Fintype σ] (M : DFA α σ) (hM : M.IsSynchronizing) ,
        ∃ w : List α, M.IsSynchronizingWord w ∧
        (w.length : ℝ) ≤ (7 / 48 + 2 * 15625 / 1597536) * (Fintype.card σ : ℝ) ^ 3
          + f (Fintype.card σ : ℝ) := by
    …