Skip to content

refactor: #70 — dissolve CaiGovorov/SimpleOrbitRank into Lovasz + fill legacy sorries (Lovász sorry-free, axiom-clean)#3

Open
cameronfreer wants to merge 8 commits into
masterfrom
70-relocate-caigovorov-stack
Open

refactor: #70 — dissolve CaiGovorov/SimpleOrbitRank into Lovasz + fill legacy sorries (Lovász sorry-free, axiom-clean)#3
cameronfreer wants to merge 8 commits into
masterfrom
70-relocate-caigovorov-stack

Conversation

@cameronfreer

Copy link
Copy Markdown
Owner

Summary

Follow-up to #70 (merged as PR #2). Consolidates the Cai–Govorov / simple-orbit
machinery into Lovasz.lean and fills the remaining legacy sorries left open by
the merged descent + rank theorem.

Net effect: project drops 21 → 15 sorries; Lovász has zero live sorries.
All new proofs verified #print axioms-clean.

Relocation (R1–R5)

  • R1 — move out_pair_eq' upstream into Lovasz; add CaiGovorov / Pigeonhole imports.
  • R2 — dissolve CaiGovorovOrbit.lean into Lovasz.lean (§ CaiGovorovStack).
  • R3 — FILL tupleEquivSimple_implies_orbit + orbit_separation_by_simple_graph.
  • R4 — move submodule block + rank skeleton into Lovasz (§ RankTheorem); dissolve SimpleOrbitRank.lean.
  • R5 — FILL toSimple, InTupleSimpleEvalSpan.mul, orbitIndicator_mem_simpleGraphSpan
    (with hB/hW/htwin hypotheses — the unhypothesized form is false).

Fills (F3)

  • FILL private Lemma 2.4 tupleEquiv_implies_tupleOrbitRel.
  • FILL the three multigraph descents (Lovász now sorry-free).
  • CLOSE the σ-sum parallel-edge frontier Dtr.eval_tupleEquiv_invariant.

Files

  • Graphon/CaiGovorovOrbit.lean, Graphon/SimpleOrbitRank.leanremoved (dissolved into Lovasz).
  • Graphon/Lovasz.lean — absorbs both, plus the new proofs.
  • Graphon.lean, CycleKrylov.lean, MatrixDetermination.lean — import/wiring updates.

…vorov/Pigeonhole imports

out_pair_eq' is Mathlib-only and was the Cai-Govorov stack's sole real
dependency on CycleKrylov; moving it upstream (same namespace) keeps all
~24 CycleKrylov call sites resolving through the import chain. Lovasz
now imports Graphon.CaiGovorov (Mathlib-only Vandermonde engine) and
Mathlib.Combinatorics.Pigeonhole, ready for the R2 stack insertion.
… CaiGovorovStack)

The entire Cai–Govorov stack (test graphs, chunk 3A/4A super-case,
eq. (10), chunks 4B–4G descent, tupleEquivSimple_implies_orbit_general)
moves verbatim into Lovasz.lean as a self-contained section (open
Finset, variable {K}) inserted immediately before
orbit_separation_by_simple_graph — the position its header always
envisioned. Staging file deleted; SimpleOrbitRank now imports
CycleKrylov (transitively Lovasz ⊇ the stack); root module updated.
Zero proof changes; lake build green (2962 jobs).
…n_by_simple_graph (−2 sorries, axiom-clean)

The simple-graph Lemma 2.4's 'both non-surjective' branch — the
long-standing critical sorry — closes with one line:
tupleEquivSimple_implies_orbit_general (the Cai–Govorov descent, now
upstream in § CaiGovorovStack). orbit_separation_by_simple_graph is
its contrapositive (by_contra + push_neg; tupleEquivSimple is
definitionally the simpleEvalAt equality family).

Un-taints the whole simple-side chain: k1_orbit_sep_aux,
InRootedProfileSpan.of_const_on_orbit,
label_unlabeled_square_moment_descends now verify
[propext, Classical.choice, Quot.sound] (checked via lean_verify).
Docstrings updated to PROVED. Sorry count 20 → 18.
…(§ RankTheorem); dissolve SimpleOrbitRank.lean

The CycleKrylov Phase-A/B submodule packaging (simpleEvalSubmodule /
multiEvalSubmodule / orbitInvariantSubmodule, membership iffs,
inclusions) and the entire rank skeleton + annihilator argument from
SimpleOrbitRank.lean now live in Lovasz.lean directly after
simpleEvalAt_aut_invariant — every dependency (the Cai–Govorov stack,
tupleOrbitIndicator_mem_multiEvalSpan, simpleEvalAt_aut_invariant) is
above it. The #70 rank theorem is now available to everything
downstream of Lovasz, incl. MatrixDetermination. SimpleOrbitRank.lean
deleted; pointer comment in CycleKrylov; Lovasz gains
Mathlib.LinearAlgebra.Dual.Lemmas (previously transitive via
CycleKrylov's analysis imports). Zero proof changes; lake build green
(2961 jobs).
…tor_mem_simpleGraphSpan (−3 sorries, axiom-clean)

The three former §3 residues, relocated below § RankTheorem and proved:
- InTupleMultiEvalSpan.toSimple (the Hadamard-square residue, Lovász
  Lemma 2.5 content): direct corollary of the rank collapse — multigraph
  evals are aut-invariant, orbit-invariant functions lie in the
  simple-eval span.
- InTupleSimpleEvalSpan.mul: hB/hW/htwin added to the signature (as its
  own docstring always recorded necessary — without them the statement
  is FALSE via the label-label Hadamard square); proof =
  (h₁.toMulti.mul hB h₂.toMulti).toSimple hB hW htwin.
- orbitIndicator_mem_simpleGraphSpan: list repackaging of
  tupleOrbitIndicator_mem_simpleEvalSpan (now itself sorry-free) via
  List.finRange/Fin.sum_univ_def.

All lean_verify [propext, Classical.choice, Quot.sound]. Sorry count
18 → 15; Lovasz.lean's remaining 5 = 3 multigraph-descent infra
(#86-adjacent) + 2 known-false #77 (frozen).
…el (−1 sorry, axiom-clean)

The MatrixDetermination-local Lemma 2.4 (strong induction with the
'both non-surjective' architectural sorry) is replaced by the 10-line
bridge to Lovasz.tupleEquivSimple_implies_orbit_via_2_5 (proved via the
#70 rank theorem): tupleEquiv is definitionally tupleEquivSimple after
unfolding labeledEvalK, and the IsWeightedAutomorphism bodies coincide.
Mirrors the already-working multiLabeledEvalK_tupleEquiv_invariant
pattern (whose stale 'canonical sorry' docstring is also corrected —
it has been proved since the orbit route landed). The Claims 4.1-4.4
intermediate theorems remain as standalone results.

lean_verify: [propext, Classical.choice, Quot.sound]. Sorry count
15 → 14.
…RO live sorries (−3, axiom-clean)

§ CaiGovorovStack moves up (directly after out_pair_eq'/simpleEvalAt_eq_multi,
its minimal position); the descent chain (multigraphEval_unlabeled_excess/
label_unlabeled_nonisolated/unlabeled_unlabeled_nonisolated_descends +
wrapper + one_doubled + in_simpleProfileClosure + the Lovász
multiLabeledEvalK_tupleEquiv_invariant bridge) relocates below it.

- The three sorry'd descents are PROVED uniformly: 2 lines each via
  tupleEquivSimple_implies_orbit_general + multiLabeledEvalK_eq_of_orbit
  (the structural multiplicity hypotheses and square-moment inputs are
  no longer needed by the proofs; statements preserved, except hW/htwin
  ADDED to the UU-nonisolated case, which lacked them).
- multiLabeledEvalK_tupleEquiv_invariant rewired from the descent chain
  to the same 2-line orbit route (h_sq_moment now unused, renamed _).
- multigraphEval_in_simpleProfileClosure becomes sorry-free.

lean_verify [propext, Classical.choice, Quot.sound]. Sorry count
14 → 11. Lovasz.lean's remaining 2 = the frozen known-false #77 stubs.
The #86 descent question is closed as a corollary of #70.
…Equiv_invariant (−1 sorry, axiom-clean)

The 'genuine Lovász §3 multigraph frontier' dissolves into multigraph
semantics: DecLabeledGraphTr.toMulti packages the σ-sum content (graph
edges mult 1 + lu0Mult decorations as label-to-unlabeled-0 multi-edges,
multiplicities adding where they coincide); toMulti_sym2_prod splits
the Sym2 power product (pow_add + ofSimple-style collapse +
prod_pow_eq_pow_sum/prod_comm/prod_ite_eq' + out_pair_eq');
eval_eq_multiEval identifies Dtr.eval = LL-factor × multigraph eval for
n > 0; the (proved) bridge multiLabeledEvalK_tupleEquiv_invariant then
descends it through tupleEquiv uniformly — no case split on lu0Mult.
Theorem relocated below the bridge; hW/htwin added (required by the
bridge; the theorem is a leaf). n = 0 case kept direct. Stale
'canonical root'/frontier notes updated.

lean_verify: [propext, Classical.choice, Quot.sound]. Sorry count
11 → 10.
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