Interior cells have connected lower-left corners to A simple closed walk without right turns has under eight left turns
TheoremInterior cells have connected lower-left corners#✓fully proved
Any two interior cells of a simple closed walk without right turns have skeleton-connected lower-left corners.
theorem interior_representatives_reachable {m : ℕ}
(d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (BaseCase.pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1)
(c e : interiorCells d hclosed hsimple hreflexfree) :
(cellSkeleton (interiorCells d hclosed hsimple hreflexfree)).Reachable
(skeletonRepresentative _ c) (skeletonRepresentative _ e)
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
noncomputable def interiorCells : Finset (ℤ × ℤ) :=
(componentCellSet_finite d hclosed hsimple hreflexfree).toFinset
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/WalkCellRegion.lean:323
def cellSkeleton (S : Finset Cell) : SimpleGraph {v // v ∈ regVerts S} where
Adj a b := s(a.1, b.1) ∈ StatMech.CellEulerChar.regEdges S
symm := ⟨fun a b h => by rwa [Sym2.eq_swap]⟩
loopless := ⟨by
intro a h
exact wad_edge_not_diag h (by simp)⟩
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/InteriorEulerBound.lean:59
def skeletonRepresentative (S : Finset Cell) (c : S) : {v // v ∈ regVerts S} :=
skeletonVertexOfCorner S c.1 c.2 c.1 (by
obtain ⟨x, y⟩ := c.1
simp [StatMech.CellEulerChar.cellVerts])
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/InteriorEulerBound.lean:332
Uses 20 · Used by 1
TheoremConnectedness of the skeleton of the interior#✓fully proved
The skeleton of the interior of a simple closed walk without right turns is connected.
theorem interior_cellSkeleton_connected {m : ℕ}
(d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
(cellSkeleton (interiorCells d hclosed hsimple hreflexfree)).Connected
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def cellSkeleton (S : Finset Cell) : SimpleGraph {v // v ∈ regVerts S} where
Adj a b := s(a.1, b.1) ∈ StatMech.CellEulerChar.regEdges S
symm := ⟨fun a b h => by rwa [Sym2.eq_swap]⟩
loopless := ⟨by
intro a h
exact wad_edge_not_diag h (by simp)⟩
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/InteriorEulerBound.lean:59
noncomputable def interiorCells : Finset (ℤ × ℤ) :=
(componentCellSet_finite d hclosed hsimple hreflexfree).toFinset
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/WalkCellRegion.lean:323
Uses 13 · Used by 1
TheoremInterior of a simple closed walk has Euler characteristic at most 1#✓fully proved
The interior of a simple closed walk without right turns has Euler characteristic at most
1.
theorem eulerChar_interiorCells_le_one {m : ℕ}
(d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
eulerChar (interiorCells d hclosed hsimple hreflexfree) ≤ 1
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def eulerChar (S : Finset (ℤ × ℤ)) : ℤ :=
((cellVerts S).card : ℤ) - (cellEdges S).card + S.card
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/CellEuler.lean:176
noncomputable def interiorCells : Finset (ℤ × ℤ) :=
(componentCellSet_finite d hclosed hsimple hreflexfree).toFinset
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/WalkCellRegion.lean:323
Uses 6 · Used by 1
TheoremHopf's Umlaufsatz#✓fully proved
Hopf's Umlaufsatz for lattice polygons. A simple closed walk in ℤ² with at least three
steps and no U-turns has total turning ±4 quarter turns, that is rotation index ±1 (H. Hopf,
Über die Drehung der Tangenten und Sehnen ebener Kurven, 1935).
theorem turnSum_eq_four_or_neg_four (d : Fin n → Fin 4)
(hclosed : ∑ i, stepOf (d i) = 0) (hsimple : Function.Injective (pos d))
(hn : 3 ≤ n) (hnu : ∀ i, d (i + 1) ≠ d i + 2) :
(∑ i, ons_turnPow (d i) (d (i + 1))) = 4 ∨
(∑ i, ons_turnPow (d i) (d (i + 1))) = -4
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def ons_turnPow (μ ν : Fin 4) : ℤ :=
if ν = μ then 0 else if ν = μ + 1 then 1 else if ν = μ + 2 then 0 else -1
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:120
Uses 84 · Used by 1
TheoremAgreement of the two definitions of the left cell#✓fully proved
The two descriptions of the cell to the left of a step agree.
theorem leftCell_bridge (d : Fin (m + 3) → Fin 4) (k : Fin (m + 3)) :
Orientation.leftCell (d k) (pos d k) = WalkCellBoundary.leftCell d k
def leftCell : Fin 4 → ℤ × ℤ → ℤ × ℤ
| 0, p => p
| 1, p => (p.1 - 1, p.2)
| 2, p => (p.1 - 1, p.2 - 1)
| 3, p => (p.1, p.2 - 1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/Orientation.lean:46
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def leftCell (d : Fin (m + 3) → Fin 4) (k : Fin (m + 3)) : ℤ × ℤ :=
match d k with
| 0 => ((pos d k).1, (pos d k).2)
| 1 => ((pos d k).1 - 1, (pos d k).2)
| 2 => ((pos d k).1 - 1, (pos d k).2 - 1)
| 3 => ((pos d k).1, (pos d k).2 - 1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/WalkCellBoundary.lean:52
Uses 3 · Used by 1
TheoremA walk without right turns is positively oriented#✓fully proved
The cell to the left of the first step is inside: the walk is positively oriented.
theorem leftParity_zero (d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
leftParity d 0 = 1
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def leftParity (d : Fin n → Fin 4) (k : Fin n) : ZMod 2 :=
rayParity d (leftCell (d k) (pos d k)).1 (leftCell (d k) (pos d k)).2
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/Orientation.lean:212
Uses 8 · Used by 1
TheoremRay-parity interior equals the bounded face#✓fully proved
The ray-parity interior of a simple closed walk without right turns equals its bounded face.
theorem interiorCells_bridge (d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
InteriorCells.interiorCells d hclosed
= WalkCellRegion.interiorCells d hclosed hsimple hreflexfree
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
noncomputable def interiorCells (d : Fin n → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0) :
Finset (ℤ × ℤ) := (interiorSet_finite d hclosed).toFinset
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/InteriorCells.lean:114
noncomputable def interiorCells : Finset (ℤ × ℤ) :=
(componentCellSet_finite d hclosed hsimple hreflexfree).toFinset
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/WalkCellRegion.lean:323
Uses 8 · Used by 1
TheoremDiscrete Umlaufsatz for walks of length at least three, shifted form#✓fully proved
The discrete Umlaufsatz for walks of length m + 3 without right turns.
theorem cc_eq_four' (d : Fin (m + 3) → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin (m + 3), d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
cc d = 4
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def cc {n : ℕ} [NeZero n] (d : Fin n → Fin 4) : ℕ :=
(Finset.univ.filter (fun i : Fin n => d (i + 1) - d i = 1)).card
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:62
Uses 16 · Used by 1
TheoremDiscrete Umlaufsatz for walks of length at least three#✓fully proved
The discrete Umlaufsatz for walks of length at least 3 without right turns.
theorem cc_eq_four {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hsimple : Function.Injective (pos d)) (hn : 3 ≤ n)
(hreflexfree : ∀ i : Fin n, d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
cc d = 4
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def cc {n : ℕ} [NeZero n] (d : Fin n → Fin 4) : ℕ :=
(Finset.univ.filter (fun i : Fin n => d (i + 1) - d i = 1)).card
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:62
Uses 4 · Used by 1
TheoremA closed walk without right turns has length at least three#✓fully proved
A closed walk without right turns or reversals has length at least 3.
theorem three_le_n {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (hclosed : ∑ i, stepOf (d i) = 0)
(hreflexfree : ∀ i : Fin n, d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) : 3 ≤ n
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
Uses 1 · Used by 1
TheoremDiscrete Umlaufsatz for lattice walks without right turns#✓fully proved
Discrete Umlaufsatz (theorem of turning tangents) for lattice walks without right turns: a
simple closed walk on ℤ² whose every turn is straight or a left quarter turn has exactly four
left turns, i.e. its direction makes one full counterclockwise revolution. Right turns and
reversals are excluded by hypothesis, so the walks covered are exactly counterclockwise
boundaries of lattice rectangles (no reflex corner); the general signed statement is
StatMech.Onsager.GeneralUmlaufsatz.turnSum_eq_four_or_neg_four. Compare H. Hopf, Über die
Drehung der Tangenten und Sehnen ebener Kurven, Compositio Math. 2 (1935), for smooth curves.
theorem cc_eq_four_of_no_right_turn {n : ℕ} [NeZero n] (d : Fin n → Fin 4)
(hclosed : ∑ i, stepOf (d i) = 0) (hsimple : Function.Injective (pos d))
(hreflexfree : ∀ i : Fin n, d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
cc d = 4
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def cc {n : ℕ} [NeZero n] (d : Fin n → Fin 4) : ℕ :=
(Finset.univ.filter (fun i : Fin n => d (i + 1) - d i = 1)).card
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:62
TheoremA simple closed walk without right turns has under eight left turns#✓fully proved
The hypothesis of StatMech.Onsager.BaseCase.base_cc_eq_four holds: a simple closed walk
without right turns has fewer than eight left turns.
theorem hnodbl_discharged {n : ℕ} [NeZero n] (d : Fin n → Fin 4)
(hclosed : ∑ i, stepOf (d i) = 0)
(hreflexfree : ∀ i : Fin n, d (i + 1) - d i = 0 ∨ d (i + 1) - d i = 1) :
Function.Injective (pos d) → cc d < 8
def stepOf : Fin 4 → ℤ × ℤ
| 0 => (1, 0)
| 1 => (0, 1)
| 2 => (-1, 0)
| 3 => (0, -1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:49
def pos {n : ℕ} [NeZero n] (d : Fin n → Fin 4) (k : Fin n) : ℤ × ℤ :=
∑ i ∈ Finset.filter (· < k) Finset.univ, stepOf (d i)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:57
def cc {n : ℕ} [NeZero n] (d : Fin n → Fin 4) : ℕ :=
(Finset.univ.filter (fun i : Fin n => d (i + 1) - d i = 1)).card
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/DirectionWalk.lean:62
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.