theorem
proved
winding_cons
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.Foundation.WindingCharges on GitHub at line 147.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
formal source
144 simp [winding_number, List.map_append, List.sum_append]
145
146/-- Prepending a step adds its displacement. -/
147theorem winding_cons {D : ℕ} (s : LatticeStep D) (p : LatticePath D) (axis : Fin D) :
148 winding_number (s :: p) axis = step_displacement s axis + winding_number p axis := by
149 unfold winding_number
150 simp [List.map_cons, List.sum_cons]
151
152/-! ## Part 4: Invariance Under Local Deformations -/
153
154/-- A **local deformation** is a pair of steps that cancel each other:
155 a plus-step followed by a minus-step along the same axis (or vice versa).
156
157 Inserting or removing such pairs from a path does not change any
158 winding number. This is the discrete analogue of homotopy invariance. -/
159def is_cancelling_pair {D : ℕ} (s₁ s₂ : LatticeStep D) : Prop :=
160 (∃ a : Fin D, s₁ = .plus a ∧ s₂ = .minus a) ∨
161 (∃ a : Fin D, s₁ = .minus a ∧ s₂ = .plus a)
162
163/-- A cancelling pair has zero total displacement along every axis. -/
164theorem cancelling_pair_zero_displacement {D : ℕ} (s₁ s₂ : LatticeStep D)
165 (h : is_cancelling_pair s₁ s₂) (axis : Fin D) :
166 step_displacement s₁ axis + step_displacement s₂ axis = 0 := by
167 rcases h with ⟨a, h₁, h₂⟩ | ⟨a, h₁, h₂⟩
168 · subst h₁; subst h₂
169 simp [step_displacement]
170 split <;> simp
171 · subst h₁; subst h₂
172 simp [step_displacement]
173 split <;> simp
174
175/-- **THEOREM (Inserting a Cancelling Pair Preserves Winding Number)**:
176 If we insert a cancelling pair (→←) at any point in a path,
177 the winding number along every axis is unchanged. -/