Spin Kac–Ward identities
DefinitionOne-edge decorated walk along an external edge#✓fully proved
The one-edge decorated walk along the external edge from d to its reverse.
def ons_decExternalStepWalk (L : ℕ) (d : ons_Dart L) :
(ons_decGraph L).Walk d (ons_dartRev L d) :=
.cons (@id ((ons_decGraph L).Adj d (ons_dartRev L d)) (Or.inl rfl)) .nil
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
Uses 4 · Used by 1
DefinitionValue of a monomial at weights#✓fully proved
The value ∏_e w_e ^ {m e} of the monomial with exponent m at weights w.
noncomputable def ons_mvMonomialValue
{E : Type*} (weight : E → ℂ) (m : E →₀ ℕ) : ℂ :=
m.prod fun edge n ↦ weight edge ^ n
Used by 7
DefinitionAbsolute summability of a power series evaluated at weights#✓fully proved
Absolute summability of ∑_m coeff_m · w^m.
def ons_MvSeriesEvalSummable
{E : Type*} (series : MvPowerSeries E ℂ) (weight : E → ℂ) : Prop :=
Summable fun m : E →₀ ℕ ↦
‖MvPowerSeries.coeff m series * ons_mvMonomialValue weight m‖
noncomputable def ons_mvMonomialValue
{E : Type*} (weight : E → ℂ) (m : E →₀ ℕ) : ℂ :=
m.prod fun edge n ↦ weight edge ^ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalEvalAlgebra.lean:58
Uses 1 · Used by 3
DefinitionSum of absolute values of an evaluated power series#✓fully proved
The sum ∑_m ‖coeff_m · w^m‖ of absolute values.
noncomputable def ons_mvSeriesEvalNorm
{E : Type*} (series : MvPowerSeries E ℂ) (weight : E → ℂ) : ℝ :=
∑' m : E →₀ ℕ,
‖MvPowerSeries.coeff m series * ons_mvMonomialValue weight m‖
noncomputable def ons_mvMonomialValue
{E : Type*} (weight : E → ℂ) (m : E →₀ ℕ) : ℂ :=
m.prod fun edge n ↦ weight edge ^ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalEvalAlgebra.lean:58
Uses 1 · Used by 3
AbbreviationEven subgraphs of the L × L torus#✓fully proved
Even subgraphs of the L × L torus.
abbrev ons_TorusEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{F : Finset (Sym2 (ZMod L × ZMod L)) //
F ∈ evenSubgraphs (onsTorusGraph L)}
noncomputable def evenSubgraphs : Finset (Finset (Sym2 V)) :=
Gd.edgeFinset.powerset.filter IsEvenSubgraph
PhyslibExt/CondensedMatter/IsingModel/KramersWannierDuality.lean:65
def onsTorusGraph (L : ℕ) [Fact (2 < L)] : SimpleGraph (ZMod L × ZMod L) where
Adj := onsTorusAdj L
symm := by
refine ⟨?_⟩
rintro u v (⟨h1, h2 | h2⟩ | ⟨h1, h2 | h2⟩)
· exact Or.inl ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inl ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
loopless := by
have hne1 : (1 : ZMod L) ≠ 0 := by
have : Fact (1 < L) := ⟨by have := (Fact.out : 2 < L); omega⟩
⋯
PhyslibExt/CondensedMatter/IsingModel/Onsager/Torus.lean:65
AbbreviationEven subgraphs of the decorated torus graph#✓fully proved
Even subgraphs of the decorated graph of the torus.
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def evenSubgraphs : Finset (Finset (Sym2 V)) :=
Gd.edgeFinset.powerset.filter IsEvenSubgraph
PhyslibExt/CondensedMatter/IsingModel/KramersWannierDuality.lean:65
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
Uses 6 · Used by 12
DefinitionTorus even subgraph of a decorated even subgraph#✓fully proved
The torus even subgraph corresponding to a decorated even subgraph under the decoration bijection.
noncomputable def ons_originalEdgesOfDecorated
(L : ℕ) [Fact (2 < L)]
(D : ons_DecoratedEvenSubgraph L) :
Finset (Sym2 (ZMod L × ZMod L)) :=
((ons_decorationEquiv L).symm D).1
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
noncomputable def ons_decorationEquiv (L : ℕ) [Fact (2 < L)] :
{F : Finset (Sym2 (ZMod L × ZMod L)) //
F ∈ evenSubgraphs (onsTorusGraph L)} ≃
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)} :=
(ons_evenSubgraphPortEquiv L).trans (ons_decoratedPortEquiv L).symm
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:941
Uses 10 · Used by 7
DefinitionExternality of a decorated edge#✓fully proved
An edge of the decorated graph is external if it joins a dart to its reverse.
def ons_decIsExternal {L : ℕ} (edge : Sym2 (ons_Dart L)) : Prop :=
∃ d : ons_Dart L, edge = s(d, ons_dartRev L d)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
Uses 2 · Used by 7
DefinitionExternal edges of a decorated edge set#✓fully proved
The external edges of a decorated edge set.
noncomputable def ons_decoratedExternalEdges {L : ℕ}
(D : Finset (Sym2 (ons_Dart L))) : Finset (Sym2 (ons_Dart L)) := by
classical
exact D.filter ons_decIsExternal
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
Uses 2 · Used by 4
DefinitionProjection of a decorated edge to the torus#✓fully proved
The projection of a decorated edge to the torus, taking each dart to its starting site.
def ons_decEdgeProjection {L : ℕ}
(edge : Sym2 (ons_Dart L)) : Sym2 (ZMod L × ZMod L) :=
Sym2.map Prod.fst edge
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
Uses 1 · Used by 6
DefinitionSpin weight of a decorated even subgraph#✓fully proved
The weight χ_{a,b}(hom F) x^|F| of the torus even subgraph F corresponding to a decorated
even subgraph.
noncomputable def ons_decoratedSpinWeight
(L : ℕ) [Fact (2 < L)] (x : ℝ) (a b : Fin 2)
(D : ons_DecoratedEvenSubgraph L) : ℝ :=
let F := ons_originalEdgesOfDecorated L D
ons_spinCharacter a b (ons_evenHomology L F) * x ^ F.card
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
noncomputable def ons_originalEdgesOfDecorated
(L : ℕ) [Fact (2 < L)]
(D : ons_DecoratedEvenSubgraph L) :
Finset (Sym2 (ZMod L × ZMod L)) :=
((ons_decorationEquiv L).symm D).1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:72
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
DefinitionExternal edges used by a decorated walk#✓fully proved
The external edges used by a walk in the decorated graph.
noncomputable def ons_walkExternalEdges {L : ℕ} {u v : ons_Dart L}
(p : (ons_decGraph L).Walk u v) : Finset (Sym2 (ons_Dart L)) :=
ons_decoratedExternalEdges p.edges.toFinset
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
noncomputable def ons_decoratedExternalEdges {L : ℕ}
(D : Finset (Sym2 (ons_Dart L))) : Finset (Sym2 (ons_Dart L)) := by
classical
exact D.filter ons_decIsExternal
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:98
Uses 3 · Used by 2
DefinitionTorus edges underlying a decorated walk#✓fully proved
The torus edges underlying the external edges of a decorated walk.
noncomputable def ons_walkOriginalEdges {L : ℕ} {u v : ons_Dart L}
(p : (ons_decGraph L).Walk u v) :
Finset (Sym2 (ZMod L × ZMod L)) :=
(ons_walkExternalEdges p).image ons_decEdgeProjection
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
noncomputable def ons_walkExternalEdges {L : ℕ} {u v : ons_Dart L}
(p : (ons_decGraph L).Walk u v) : Finset (Sym2 (ons_Dart L)) :=
ons_decoratedExternalEdges p.edges.toFinset
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:196
def ons_decEdgeProjection {L : ℕ}
(edge : Sym2 (ons_Dart L)) : Sym2 (ZMod L × ZMod L) :=
Sym2.map Prod.fst edge
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:104
AbbreviationDecorated edges as formal-series variables#✓fully proved
Decorated edges, used as the variables of the formal series.
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
Uses 1 · Used by 40
DefinitionExponent of a Kac-Ward transition#✓fully proved
The exponent of a transition: one for the external edge at d₁ and one for each internal edge
on the path at the site of d₂.
noncomputable def ons_decTransitionExponent
(L : ℕ) (d₂ d₁ : ons_Dart L) : ons_DecEdge L →₀ ℕ := by
classical
exact Finsupp.single s(d₁, ons_dartRev L d₁) 1 +
∑ i ∈ ons_decChainPathIndices (d₁.2 + 2) d₂.2,
Finsupp.single (ons_decChainEdge d₂.1 i) 1
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
Uses 5 · Used by 6
DefinitionScalar of a Kac-Ward transition#✓fully proved
The scalar of a transition: its boundary phase times its turn weight, or 0 if d₂ does not
start at the head of d₁.
noncomputable def ons_decTransitionScalar
(L : ℕ) (omega u v : ℂ) (d₂ d₁ : ons_Dart L) : ℂ :=
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 * ons_turnW omega d₁.2 d₂.2
else 0
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dirStep (L : ℕ) (μ : Fin 4) (s : ZMod L × ZMod L) : ZMod L × ZMod L :=
match μ with
| 0 => (s.1 + 1, s.2)
| 1 => (s.1, s.2 + 1)
| 2 => (s.1 - 1, s.2)
| 3 => (s.1, s.2 - 1)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:55
noncomputable def ons_dirPhase (u v : ℂ) (mu : Fin 4) : ℂ :=
match mu with
| 0 => u
| 1 => v
| 2 => u⁻¹
| 3 => v⁻¹
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:59
noncomputable def ons_turnW (ω : ℂ) (μ ν : Fin 4) : ℂ :=
if ν = μ then 1
else if ν = μ + 1 then ω
else if ν = μ + 2 then 0
else ω⁻¹
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:69
Uses 4 · Used by 5
DefinitionMonomial of a Kac-Ward transition#✓fully proved
The monomial of the transition from d₁ to d₂.
noncomputable def ons_decFormalTransition
(L : ℕ) (omega u v : ℂ) (d₂ d₁ : ons_Dart L) :
MvPowerSeries (ons_DecEdge L) ℂ :=
MvPowerSeries.monomial (ons_decTransitionExponent L d₂ d₁)
(ons_decTransitionScalar L omega u v d₂ d₁)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_decTransitionExponent
(L : ℕ) (d₂ d₁ : ons_Dart L) : ons_DecEdge L →₀ ℕ := by
classical
exact Finsupp.single s(d₁, ons_dartRev L d₁) 1 +
∑ i ∈ ons_decChainPathIndices (d₁.2 + 2) d₂.2,
Finsupp.single (ons_decChainEdge d₂.1 i) 1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:72
noncomputable def ons_decTransitionScalar
(L : ℕ) (omega u v : ℂ) (d₂ d₁ : ons_Dart L) : ℂ :=
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 * ons_turnW omega d₁.2 d₂.2
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:81
DefinitionExponent of a closed Kac-Ward walk#✓fully proved
The exponent of a closed walk: the sum of the exponents of its transitions.
noncomputable def ons_decLoopExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, ons_decTransitionExponent L (d k) (d (k + 1))
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_decTransitionExponent
(L : ℕ) (d₂ d₁ : ons_Dart L) : ons_DecEdge L →₀ ℕ := by
classical
exact Finsupp.single s(d₁, ons_dartRev L d₁) 1 +
∑ i ∈ ons_decChainPathIndices (d₁.2 + 2) d₂.2,
Finsupp.single (ons_decChainEdge d₂.1 i) 1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:72
Uses 3 · Used by 6
DefinitionScalar of a closed Kac-Ward walk#✓fully proved
The scalar of a closed walk: the product of the scalars of its transitions.
noncomputable def ons_decLoopScalar
(L : ℕ) (omega u v : ℂ) {n : ℕ} [NeZero n]
(d : Fin n → ons_Dart L) : ℂ :=
∏ k, ons_decTransitionScalar L omega u v (d k) (d (k + 1))
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_decTransitionScalar
(L : ℕ) (omega u v : ℂ) (d₂ d₁ : ons_Dart L) : ℂ :=
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 * ons_turnW omega d₁.2 d₂.2
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:81
Uses 2 · Used by 6
DefinitionTotal degree of an exponent#✓fully proved
The total degree ∑ m e of an exponent; this is Finsupp.degree.
def ons_finsuppTotalDegree {E : Type*} (m : E →₀ ℕ) : ℕ :=
m.sum fun _ n ↦ n
LemmaTotal degree of an exponent agrees with Mathlib's degree#✓fully proved
ons_finsuppTotalDegree agrees with Mathlib's Finsupp.degree.
lemma ons_finsuppTotalDegree_eq_degree {E : Type*} (m : E →₀ ℕ) :
ons_finsuppTotalDegree m = m.degree
def ons_finsuppTotalDegree {E : Type*} (m : E →₀ ℕ) : ℕ :=
m.sum fun _ n ↦ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:109
Uses 1
DefinitionCoefficient of the formal Kac-Ward logarithm#✓fully proved
The coefficient of x^m in the formal logarithm: minus one half of the sum over closed walks of
length r + 1 ≤ deg m with exponent m of their scalars divided by r + 1.
noncomputable def ons_decFormalLogCoeff
(L : ℕ) [NeZero L] (omega u v : ℂ)
(m : ons_DecEdge L →₀ ℕ) : ℂ :=
-(∑ r ∈ Finset.range (ons_finsuppTotalDegree m),
(∑ d : Fin (r + 1) → ons_Dart L,
if ons_decLoopExponent L d = m then
ons_decLoopScalar L omega u v d
else 0) / ((r : ℂ) + 1)) / 2
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
def ons_finsuppTotalDegree {E : Type*} (m : E →₀ ℕ) : ℕ :=
m.sum fun _ n ↦ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:109
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_decLoopExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, ons_decTransitionExponent L (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:95
noncomputable def ons_decLoopScalar
(L : ℕ) (omega u v : ℂ) {n : ℕ} [NeZero n]
(d : Fin n → ons_Dart L) : ℂ :=
∏ k, ons_decTransitionScalar L omega u v (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:101
Uses 5 · Used by 4
DefinitionFormal logarithm of the Kac-Ward root#✓fully proved
The formal logarithm of the Kac-Ward root.
noncomputable def ons_decFormalLog
(L : ℕ) [NeZero L] (omega u v : ℂ) :
MvPowerSeries (ons_DecEdge L) ℂ :=
ons_decFormalLogCoeff L omega u v
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_decFormalLogCoeff
(L : ℕ) [NeZero L] (omega u v : ℂ)
(m : ons_DecEdge L →₀ ℕ) : ℂ :=
-(∑ r ∈ Finset.range (ons_finsuppTotalDegree m),
(∑ d : Fin (r + 1) → ons_Dart L,
if ons_decLoopExponent L d = m then
ons_decLoopScalar L omega u v d
else 0) / ((r : ℂ) + 1)) / 2
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:171
Uses 2 · Used by 4
DefinitionFormal Kac-Ward root#✓fully proved
The formal Kac-Ward root: the formal exponential of ons_decFormalLog.
noncomputable def ons_decFormalRoot
(L : ℕ) [NeZero L] (omega u v : ℂ) :
MvPowerSeries (ons_DecEdge L) ℂ :=
PowerSeries.subst (ons_decFormalLog L omega u v)
(PowerSeries.exp ℂ)
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_decFormalLog
(L : ℕ) [NeZero L] (omega u v : ℂ) :
MvPowerSeries (ons_DecEdge L) ℂ :=
ons_decFormalLogCoeff L omega u v
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:181
Uses 2 · Used by 5
DefinitionSquarefree exponent of a set of variables#✓fully proved
The squarefree exponent ∑_{e ∈ S} single e 1 of a set of variables.
noncomputable def ons_finsetExponent
{E : Type*} [DecidableEq E] (S : Finset E) : E →₀ ℕ :=
∑ edge ∈ S, Finsupp.single edge 1
Used by 6
DefinitionDecorated spin polynomial#✓fully proved
The decorated spin polynomial ∑_D χ_{a,b}(hom D) ∏_{e ∈ D} x_e over decorated even subgraphs.
noncomputable def ons_decoratedSpinPolynomial
(L : ℕ) [Fact (2 < L)] (a b : Fin 2) :
MvPolynomial (ons_DecEdge L) ℂ :=
∑ D : ons_DecoratedEvenSubgraph L,
MvPolynomial.monomial (ons_finsetExponent D.1)
(ons_spinCharacter a b
(ons_evenHomology L (ons_originalEdgesOfDecorated L D)) : ℂ)
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
noncomputable def ons_finsetExponent
{E : Type*} [DecidableEq E] (S : Finset E) : E →₀ ℕ :=
∑ edge ∈ S, Finsupp.single edge 1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:239
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
noncomputable def ons_originalEdgesOfDecorated
(L : ℕ) [Fact (2 < L)]
(D : ons_DecoratedEvenSubgraph L) :
Finset (Sym2 (ZMod L × ZMod L)) :=
((ons_decorationEquiv L).symm D).1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:72
Uses 12 · Used by 4
DefinitionEvaluation of a multivariate power series at weights#✓fully proved
Evaluation of a multivariate formal power series at weights, as the sum
∑_m coeff_m · weight^m.
noncomputable def ons_mvSeriesEval
{E : Type*} (series : MvPowerSeries E ℂ) (weight : E → ℂ) : ℂ :=
∑' m : E →₀ ℕ,
MvPowerSeries.coeff m series *
m.prod (fun edge n ↦ weight edge ^ n)
DefinitionFormal Kac-Ward identity on the torus#✓fully proved
The formal Kac-Ward identity on the L × L torus: for every spin structure, the formal Kac-Ward
root equals the decorated spin polynomial.
def ons_decoratedFormalKacWardIdentity
(L : ℕ) [Fact (2 < L)] : Prop :=
∀ a b : Fin 2,
ons_decFormalRoot L ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b) =
(ons_decoratedSpinPolynomial L a b :
MvPowerSeries (ons_DecEdge L) ℂ)
noncomputable def ons_decFormalRoot
(L : ℕ) [NeZero L] (omega u v : ℂ) :
MvPowerSeries (ons_DecEdge L) ℂ :=
PowerSeries.subst (ons_decFormalLog L omega u v)
(PowerSeries.exp ℂ)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:230
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
noncomputable def ons_decoratedSpinPolynomial
(L : ℕ) [Fact (2 < L)] (a b : Fin 2) :
MvPolynomial (ons_DecEdge L) ℂ :=
∑ D : ons_DecoratedEvenSubgraph L,
MvPolynomial.monomial (ons_finsetExponent D.1)
(ons_spinCharacter a b
(ons_evenHomology L (ons_originalEdgesOfDecorated L D)) : ℂ)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:321
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
Uses 5 · Used by 3
DefinitionClosed-walk weight through a dart but not its reverse#✓fully proved
The total decorated-weight Kac-Ward weight of closed walks of length n + 1 visiting e but
not its reverse.
noncomputable def ons_decPhaseBucketE
(L : ℕ) [NeZero L] (decWeight : ons_DecEdge L → ℂ)
(a b : Fin 2) (e : ons_Dart L) (n : ℕ) : ℂ :=
∑ loop ∈ Finset.univ.filter
(fun loop : Fin (n + 1) → ons_Dart L =>
(∃ i, loop i = e) ∧
¬ ∃ j, loop j = ons_dartRev L e),
ons_loopWeight
(ons_KWmatDecorationWeightedPhase L decWeight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b)) loop
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_loopWeight {E : Type*} [Fintype E] [DecidableEq E] (Λ : Matrix E E ℂ)
{n : ℕ} [NeZero n] (v : Fin n → E) : ℂ := ∏ k : Fin n, Λ (v k) (v (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanLoop.lean:56
noncomputable def ons_KWmatDecorationWeightedPhase
(L : ℕ) (decWeight : Sym2 (ons_Dart L) → ℂ)
(omega u v : ℂ) : Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d₂ d₁ ↦
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 *
(ons_decTransitionWeight L decWeight d₂ d₁ *
ons_turnW omega d₁.2 d₂.2)
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:88
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
DefinitionClosed-walk weight avoiding a dart and its reverse#✓fully proved
The total decorated-weight Kac-Ward weight of closed walks of length n + 1 visiting neither
e nor its reverse.
noncomputable def ons_decPhaseBucketN
(L : ℕ) [NeZero L] (decWeight : ons_DecEdge L → ℂ)
(a b : Fin 2) (e : ons_Dart L) (n : ℕ) : ℂ :=
∑ loop ∈ Finset.univ.filter
(fun loop : Fin (n + 1) → ons_Dart L =>
¬ (∃ i, loop i = e) ∧
¬ ∃ j, loop j = ons_dartRev L e),
ons_loopWeight
(ons_KWmatDecorationWeightedPhase L decWeight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b)) loop
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_loopWeight {E : Type*} [Fintype E] [DecidableEq E] (Λ : Matrix E E ℂ)
{n : ℕ} [NeZero n] (v : Fin n → E) : ℂ := ∏ k : Fin n, Λ (v k) (v (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanLoop.lean:56
noncomputable def ons_KWmatDecorationWeightedPhase
(L : ℕ) (decWeight : Sym2 (ons_Dart L) → ℂ)
(omega u v : ℂ) : Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d₂ d₁ ↦
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 *
(ons_decTransitionWeight L decWeight d₂ d₁ *
ons_turnW omega d₁.2 d₂.2)
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:88
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
DefinitionMasked closed-walk weight through a dart but not its reverse#✓fully proved
As ons_decPhaseBucketE, with the darts of forbidden masked.
noncomputable def ons_decMaskPhaseBucketE
(L : ℕ) [NeZero L] (decWeight : ons_DecEdge L → ℂ)
(a b : Fin 2) (forbidden : Finset (ons_Dart L))
(e : ons_Dart L) (n : ℕ) : ℂ :=
∑ loop ∈ Finset.univ.filter
(fun loop : Fin (n + 1) → ons_Dart L =>
(∃ i, loop i = e) ∧
¬ ∃ j, loop j = ons_dartRev L e),
ons_loopWeight
(ons_maskMatrix forbidden
(ons_KWmatDecorationWeightedPhase L decWeight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))) loop
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_loopWeight {E : Type*} [Fintype E] [DecidableEq E] (Λ : Matrix E E ℂ)
{n : ℕ} [NeZero n] (v : Fin n → E) : ℂ := ∏ k : Fin n, Λ (v k) (v (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanLoop.lean:56
def ons_maskMatrix {E : Type*} [DecidableEq E]
(forbidden : Finset E) (Λ : Matrix E E ℂ) : Matrix E E ℂ :=
fun i j => if i ∈ forbidden ∨ j ∈ forbidden then 0 else Λ i j
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:69
noncomputable def ons_KWmatDecorationWeightedPhase
(L : ℕ) (decWeight : Sym2 (ons_Dart L) → ℂ)
(omega u v : ℂ) : Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d₂ d₁ ↦
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 *
(ons_decTransitionWeight L decWeight d₂ d₁ *
ons_turnW omega d₁.2 d₂.2)
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:88
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
Uses 8 · Used by 1
DefinitionMasked closed-walk weight avoiding a dart and its reverse#✓fully proved
As ons_decPhaseBucketN, with the darts of forbidden masked.
noncomputable def ons_decMaskPhaseBucketN
(L : ℕ) [NeZero L] (decWeight : ons_DecEdge L → ℂ)
(a b : Fin 2) (forbidden : Finset (ons_Dart L))
(e : ons_Dart L) (n : ℕ) : ℂ :=
∑ loop ∈ Finset.univ.filter
(fun loop : Fin (n + 1) → ons_Dart L =>
¬ (∃ i, loop i = e) ∧
¬ ∃ j, loop j = ons_dartRev L e),
ons_loopWeight
(ons_maskMatrix forbidden
(ons_KWmatDecorationWeightedPhase L decWeight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))) loop
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_loopWeight {E : Type*} [Fintype E] [DecidableEq E] (Λ : Matrix E E ℂ)
{n : ℕ} [NeZero n] (v : Fin n → E) : ℂ := ∏ k : Fin n, Λ (v k) (v (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanLoop.lean:56
def ons_maskMatrix {E : Type*} [DecidableEq E]
(forbidden : Finset E) (Λ : Matrix E E ℂ) : Matrix E E ℂ :=
fun i j => if i ∈ forbidden ∨ j ∈ forbidden then 0 else Λ i j
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:69
noncomputable def ons_KWmatDecorationWeightedPhase
(L : ℕ) (decWeight : Sym2 (ons_Dart L) → ℂ)
(omega u v : ℂ) : Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d₂ d₁ ↦
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 *
(ons_decTransitionWeight L decWeight d₂ d₁ *
ons_turnW omega d₁.2 d₂.2)
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:88
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
Uses 8 · Used by 1
DefinitionDecorated weights with one edge weight scaled by t#✓fully proved
Decorated weights with the weight of edge multiplied by t.
def ons_scaleDecEdgeWeight
{L : ℕ} (decWeight : ons_DecEdge L → ℂ)
(edge : ons_DecEdge L) (t : ℂ) : ons_DecEdge L → ℂ :=
fun f => if f = edge then t * decWeight f else decWeight f
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
Uses 2 · Used by 5
DefinitionLog-coefficient polynomial over the cycles of a decomposition#✓fully proved
The polynomial ∑_C log-coefficient(C) x^{E(C)} over the cycles C of a fixed decomposition of
an even subgraph.
noncomputable def ons_decComponentSeries
(L : ℕ) [Fact (2 < L)] (a b : Fin 2)
{I : Type*} [Fintype I]
(base : I → ons_Dart L)
(p : (i : I) → (ons_decGraph L).Walk (base i) (base i)) :
MvPowerSeries (ons_DecEdge L) ℂ :=
∑ i : I, MvPowerSeries.monomial
(ons_finsetExponent (p i).edges.toFinset)
(ons_spinCharacter a b
(ons_evenHomology L (ons_walkOriginalEdges (p i))) : ℂ)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_finsetExponent
{E : Type*} [DecidableEq E] (S : Finset E) : E →₀ ℕ :=
∑ edge ∈ S, Finsupp.single edge 1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:239
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
noncomputable def ons_walkOriginalEdges {L : ℕ} {u v : ons_Dart L}
(p : (ons_decGraph L).Walk u v) :
Finset (Sym2 (ZMod L × ZMod L)) :=
(ons_walkExternalEdges p).image ons_decEdgeProjection
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:201
Uses 7 · Used by 1
DefinitionSquarefree exponent#✓fully proved
An exponent is squarefree if every variable occurs with exponent at most 1.
def ons_IsSquarefreeExponent {E : Type*} (m : E →₀ ℕ) : Prop :=
∀ edge, m edge ≤ 1
Used by 1
DefinitionFormal-logarithm term from closed walks of given length and exponent#✓fully proved
The term of the evaluated formal logarithm from closed walks of length r + 1 with exponent
m, divided by r + 1 and multiplied by w^m.
noncomputable def ons_decFormalBucketTerm
(L : ℕ) [NeZero L] (omega u v : ℂ) (decWeight : ons_DecEdge L → ℂ)
(r : ℕ) (m : ons_DecEdge L →₀ ℕ) : ℂ :=
((∑ d : Fin (r + 1) → ons_Dart L,
if ons_decLoopExponent L d = m then
ons_decLoopScalar L omega u v d
else 0) / ((r : ℂ) + 1)) *
m.prod (fun edge n ↦ decWeight edge ^ n)
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_decLoopExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, ons_decTransitionExponent L (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:95
noncomputable def ons_decLoopScalar
(L : ℕ) (omega u v : ℂ) {n : ℕ} [NeZero n]
(d : Fin n → ons_Dart L) : ℂ :=
∏ k, ons_decTransitionScalar L omega u v (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:101
Uses 4 · Used by 3
DefinitionExternal part of a loop exponent#✓fully proved
The external part of a loop exponent: one for the external edge at each dart of the loop.
noncomputable def ons_decLoopExternalExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, Finsupp.single s(d k, ons_dartRev L (d k)) 1
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
Uses 3 · Used by 1
DefinitionInternal part of a loop exponent#✓fully proved
The internal part of a loop exponent: the internal edges on the paths between consecutive ports.
noncomputable def ons_decLoopInternalExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, ∑ i ∈ ons_decChainPathIndices ((d (k + 1)).2 + 2) (d k).2,
Finsupp.single (ons_decChainEdge (d k).1 i) 1
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
def ons_decChainPathIndices (a b : Fin 4) : Finset (Fin 3) :=
Finset.univ.filter fun i ↦ (i.val < a.val) ≠ (i.val < b.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:66
def ons_decChainEdge {L : ℕ}
(site : ZMod L × ZMod L) (i : Fin 3) : Sym2 (ons_Dart L) :=
s((site, ⟨i.val, by omega⟩), (site, ⟨i.val + 1, by omega⟩))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:61
Uses 4 · Used by 1
DefinitionKac-Ward loops with a given squarefree exponent and nonzero scalar#✓fully proved
The closed Kac-Ward walks of length n with exponent the squarefree exponent of S and nonzero
scalar.
noncomputable def ons_decSquarefreeLoopFinset
(L : ℕ) [Fact (2 < L)] (a b : Fin 2)
{n : ℕ} [NeZero n] (S : Finset (ons_DecEdge L)) :
Finset (Fin n → ons_Dart L) :=
Finset.univ.filter fun d ↦
ons_decLoopExponent L d = ons_finsetExponent S ∧
ons_decLoopScalar L ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b) d ≠ 0
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_decLoopExponent
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
ons_DecEdge L →₀ ℕ :=
∑ k, ons_decTransitionExponent L (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:95
noncomputable def ons_finsetExponent
{E : Type*} [DecidableEq E] (S : Finset E) : E →₀ ℕ :=
∑ edge ∈ S, Finsupp.single edge 1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:239
noncomputable def ons_decLoopScalar
(L : ℕ) (omega u v : ℂ) {n : ℕ} [NeZero n]
(d : Fin n → ons_Dart L) : ℂ :=
∏ k, ons_decTransitionScalar L omega u v (d k) (d (k + 1))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:101
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
Uses 7 · Used by 1
DefinitionDarts of a loop with their reverses#✓fully proved
The darts of a loop together with their reverses.
noncomputable def ons_decLoopRootFinset
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
Finset (ons_Dart L) :=
Finset.univ.image d ∪
Finset.univ.image (fun k ↦ ons_dartRev L (d k))
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
Uses 2 · Used by 1
DefinitionRotations of a loop and of its reversal#✓fully proved
The 2n rotations of a loop and of its reversal, indexed by Fin n ⊕ Fin n.
def ons_decLoopOrientation
(L : ℕ) {n : ℕ} [NeZero n] (d : Fin n → ons_Dart L) :
Fin n ⊕ Fin n → (Fin n → ons_Dart L)
| Sum.inl k => ons_rotate k d
| Sum.inr k => ons_rotate k (ons_loopRev L d)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_rotate (k : Fin n) (v : Fin n → E) : Fin n → E :=
fun j => v (j + k)
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanReroot.lean:61
def ons_loopRev (L : ℕ) {n : ℕ} [NeZero n] (v : Fin n → ons_Dart L) : Fin n → ons_Dart L :=
fun k => ons_dartRev L (v (-k))
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanLoopReversal.lean:76
Uses 3 · Used by 1
DefinitionColumn-scaled augmented Kac-Ward matrix#✓fully proved
The augmented matrix with blocks Λ₀, t U, V and 0 (scaling on the column factor).
noncomputable def ons_decMiddleAugmentedCol
(L : ℕ) (decWeight : ons_DecEdge L → ℂ)
(omega t : ℂ) (site : ZMod L × ZMod L) :
Matrix (ons_Dart L ⊕ Fin 2) (ons_Dart L ⊕ Fin 2) ℂ :=
Matrix.fromBlocks
(ons_KWmatDecorationWeightedPhase L
(ons_scaleDecEdgeWeight decWeight
(ons_decChainEdge site 1) 0) omega 1 1)
(t • ons_decMiddleU L decWeight omega site)
(ons_decMiddleV L decWeight omega 1 1 site)
0
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_KWmatDecorationWeightedPhase
(L : ℕ) (decWeight : Sym2 (ons_Dart L) → ℂ)
(omega u v : ℂ) : Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d₂ d₁ ↦
if d₂.1 = ons_dirStep L d₁.2 d₁.1 then
ons_dirPhase u v d₁.2 *
(ons_decTransitionWeight L decWeight d₂ d₁ *
ons_turnW omega d₁.2 d₂.2)
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:88
def ons_scaleDecEdgeWeight
{L : ℕ} (decWeight : ons_DecEdge L → ℂ)
(edge : ons_DecEdge L) (t : ℂ) : ons_DecEdge L → ℂ :=
fun f => if f = edge then t * decWeight f else decWeight f
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationExternalDeletion.lean:113
def ons_decChainEdge {L : ℕ}
(site : ZMod L × ZMod L) (i : Fin 3) : Sym2 (ons_Dart L) :=
s((site, ⟨i.val, by omega⟩), (site, ⟨i.val + 1, by omega⟩))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:61
noncomputable def ons_decMiddleU
(L : ℕ) (decWeight : ons_DecEdge L → ℂ)
(omega : ℂ) (site : ZMod L × ZMod L) :
Matrix (ons_Dart L) (Fin 2) ℂ :=
fun d side ↦
if d.1 = site ∧ ons_decMiddleSide d.2 = side then
ons_decMiddleDestFactor decWeight site d.2 *
ons_turnW omega (ons_decMiddleDir side) d.2
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationInternalMiddle.lean:94
noncomputable def ons_decMiddleV
(L : ℕ) (decWeight : ons_DecEdge L → ℂ)
(omega u v : ℂ) (site : ZMod L × ZMod L) :
Matrix (Fin 2) (ons_Dart L) ℂ :=
fun side d ↦
if site = ons_dirStep L d.2 d.1 ∧
ons_decMiddleSide d.2 = side then
decWeight (ons_decChainEdge site 1) *
ons_dirPhase u v d.2 *
decWeight s(d, ons_dartRev L d) *
ons_decMiddleSourceFactor decWeight site d.2 *
ons_turnW omega d.2 (ons_decMiddleDir side)
⋯
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationInternalMiddle.lean:106
Uses 7
DefinitionRow weights of the column-scaled augmented matrix#✓fully proved
Row weights of the column-scaled augmented matrix.
noncomputable def ons_decMiddleColRowWeight
{L : ℕ} (decWeight : ons_DecEdge L → ℂ)
(site : ZMod L × ZMod L) :
ons_Dart L ⊕ Fin 2 → ℂ
| .inl _ => 1
| .inr _ => decWeight (ons_decChainEdge site 1)
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_decChainEdge {L : ℕ}
(site : ZMod L × ZMod L) (i : Fin 3) : Sym2 (ons_Dart L) :=
s((site, ⟨i.val, by omega⟩), (site, ⟨i.val + 1, by omega⟩))
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationTransitionWeights.lean:61
DefinitionColumn weights of the column-scaled augmented matrix#✓fully proved
Column weights of the column-scaled augmented matrix.
noncomputable def ons_decMiddleColColWeight
{L : ℕ} (decWeight : ons_DecEdge L → ℂ) (t : ℂ) :
ons_Dart L ⊕ Fin 2 → ℂ
| .inl d => decWeight s(d, ons_dartRev L d)
| .inr _ => t
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
Uses 3
DefinitionVanishing of repeated-edge coefficients of the formal Kac-Ward root#✓fully proved
On every L × L torus with L > 2 and for every spin structure, the coefficient of the formal
Kac-Ward root at any exponent that uses some decorated edge at least twice is zero.
def ons_DecFormalRepeatedEdgeVanishes : Prop :=
∀ (L : ℕ) (hL : 2 < L),
letI : Fact (2 < L) := ⟨hL⟩
∀ (a b : Fin 2) (m : ons_DecEdge L →₀ ℕ)
(edge : ons_DecEdge L), 2 ≤ m edge →
MvPowerSeries.coeff m
(ons_decFormalRoot L ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b)) = 0
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
noncomputable def ons_decFormalRoot
(L : ℕ) [NeZero L] (omega u v : ℂ) :
MvPowerSeries (ons_DecEdge L) ℂ :=
PowerSeries.subst (ons_decFormalLog L omega u v)
(PowerSeries.exp ℂ)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:230
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
Uses 4 · Used by 1
DefinitionEdge-weighted spin weight of a decorated even subgraph#✓fully proved
The edge-weighted spin weight χ_{a,b}(hom F) ∏_{e ∈ F} w_e of the torus even subgraph F
corresponding to a decorated even subgraph.
noncomputable def ons_decoratedWeightedSpinWeight
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (a b : Fin 2)
(D : ons_DecoratedEvenSubgraph L) : ℂ :=
(ons_spinCharacter a b
(ons_evenHomology L (ons_originalEdgesOfDecorated L D)) : ℂ) *
∏ edge ∈ ons_originalEdgesOfDecorated L D, weight edge
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
noncomputable def ons_originalEdgesOfDecorated
(L : ℕ) [Fact (2 < L)]
(D : ons_DecoratedEvenSubgraph L) :
Finset (Sym2 (ZMod L × ZMod L)) :=
((ons_decorationEquiv L).symm D).1
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:72
AbbreviationDecorated even subgraphs containing a given external edge#✓fully proved
Decorated even subgraphs that contain the external edge at d.
abbrev ons_DecoratedContainingEdge
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L) :=
{D : ons_DecoratedEvenSubgraph L //
s(d, ons_dartRev L d) ∈ D.1}
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
StructureSplit of a decorated even subgraph into a rooted cycle and remainder#✓fully proved
A split of a decorated even subgraph containing the external edge at d into a simple cycle
rooted at d (starting along that edge) and an even remainder disjoint from the cycle.
structure ons_DecoratedEdgeSplit
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L)
(D : ons_DecoratedContainingEdge L d) where
cycle : (ons_decGraph L).Walk d d
remainder : ons_DecoratedEvenSubgraph L
cycle_isCycle : cycle.IsCycle
cycle_snd : cycle.snd = ons_dartRev L d
edge_split : D.1.1 = cycle.edges.toFinset ∪ remainder.1
edge_disjoint : Disjoint cycle.edges.toFinset remainder.1
remainder_zero : ∀ v ∈ cycle.support, incCount remainder.1 v = 0
remainder_zero_root : incCount remainder.1 d = 0
remainder_zero_rev : incCount remainder.1 (ons_dartRev L d) = 0
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecoratedContainingEdge
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L) :=
{D : ons_DecoratedEvenSubgraph L //
s(d, ons_dartRev L d) ∈ D.1}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:131
def ons_decGraph (L : ℕ) : SimpleGraph (ons_Dart L) where
Adj := ons_decAdj L
symm := ⟨fun _ _ h => ons_decAdj_symm L h⟩
loopless := by
refine ⟨?_⟩
intro d hd
rcases hd with hrev | hint
· exact ons_dartRev_ne_self L d hrev.symm
· rcases hint.2 with h | h <;> omega
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:105
abbrev ons_DecoratedEvenSubgraph (L : ℕ) [Fact (2 < L)] :=
{D : Finset (Sym2 (ons_Dart L)) //
D ∈ evenSubgraphs (ons_decGraph L)}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationSum.lean:66
cycle : (ons_decGraph L).Walk d d
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:141
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
remainder : ons_DecoratedEvenSubgraph L
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:142
def incCount (F : Finset (Sym2 V)) (v : V) : ℕ :=
(F.filter (fun e => v ∈ e)).card
PhyslibExt/CondensedMatter/IsingModel/KWSelfDuality.lean:101
Uses 9 · Used by 2
DefinitionChosen split of a decorated even subgraph at an external edge#✓fully proved
A chosen split of a decorated even subgraph at the external edge of d.
noncomputable def ons_decoratedEdgeSplit
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L)
(D : ons_DecoratedContainingEdge L d) :
ons_DecoratedEdgeSplit L d D := by
let hex := ons_decorated_split_cycle_at_external L D.1 d D.2
let q := Classical.choose hex
let hexR := Classical.choose_spec hex
let R := Classical.choose hexR
have hs := Classical.choose_spec hexR
exact ⟨q, R, hs.1, hs.2.1, hs.2.2.1, hs.2.2.2.1,
hs.2.2.2.2.1, hs.2.2.2.2.2.1, hs.2.2.2.2.2.2⟩
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
abbrev ons_DecoratedContainingEdge
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L) :=
{D : ons_DecoratedEvenSubgraph L //
s(d, ons_dartRev L d) ∈ D.1}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:131
structure ons_DecoratedEdgeSplit
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L)
(D : ons_DecoratedContainingEdge L d) where
cycle : (ons_decGraph L).Walk d d
remainder : ons_DecoratedEvenSubgraph L
cycle_isCycle : cycle.IsCycle
cycle_snd : cycle.snd = ons_dartRev L d
edge_split : D.1.1 = cycle.edges.toFinset ∪ remainder.1
edge_disjoint : Disjoint cycle.edges.toFinset remainder.1
remainder_zero : ∀ v ∈ cycle.support, incCount remainder.1 v = 0
remainder_zero_root : incCount remainder.1 d = 0
remainder_zero_rev : incCount remainder.1 (ons_dartRev L d) = 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:138
Uses 13 · Used by 1
DefinitionCycle removal identity for decorated even subgraphs#✓fully proved
The cycle removal identity: the Kac-Ward root with d and its reverse masked, times the total
first-return weight at d, equals the sum over decorated even subgraphs through d of the
first-return weight of the split-off cycle times the spin weight of the remainder.
StatMech.Onsager.ons_decoratedCycleRemovalIdentity · 19 lines
def ons_decoratedCycleRemovalIdentity (L : ℕ) [Fact (2 < L)] : Prop :=
∀ (a b : Fin 2)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (d : ons_Dart L),
ons_detWalkRoot
(ons_maskMatrix ({d, ons_dartRev L d} : Finset (ons_Dart L))
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))) *
(∑' s, ons_firstReturnWeight
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))
d (ons_dartRev L d) s) =
∑ D : ons_DecoratedContainingEdge L d,
ons_edgeWeight
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))
(ons_decCycleFirstReturn
(ons_decoratedEdgeSplit L d D).cycle) *
ons_decoratedWeightedSpinWeight L weight a b
(ons_decoratedEdgeSplit L d D).remainder
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_detWalkRoot {E : Type*} [Fintype E] [DecidableEq E]
(Λ : Matrix E E ℂ) : ℂ :=
Complex.exp (-(∑' n : ℕ,
(∑ v : Fin (n + 1) → E,
∏ k : Fin (n + 1), Λ (v k) (v (k + 1))) / (n + 1)) / 2)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:60
def ons_maskMatrix {E : Type*} [DecidableEq E]
(forbidden : Finset E) (Λ : Matrix E E ℂ) : Matrix E E ℂ :=
fun i j => if i ∈ forbidden ∨ j ∈ forbidden then 0 else Λ i j
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:69
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_KWmatWeightedPhase (L : ℕ)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (omega u v : ℂ) :
Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d2 d1 =>
ons_dirPhase u v d1.2 * ons_KWmatWeighted L weight omega d2 d1
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWWeighted.lean:98
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
noncomputable def ons_firstReturnWeight (Lambda : Matrix E E ℂ) (e r : E)
(s : List E) : ℂ := by
classical
exact if ons_isFirstReturnSegment e s ∧ (∀ x ∈ s, x ≠ r) then
ons_edgeWeight Lambda s
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanGenericCancellation.lean:183
abbrev ons_DecoratedContainingEdge
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L) :=
{D : ons_DecoratedEvenSubgraph L //
s(d, ons_dartRev L d) ∈ D.1}
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:131
noncomputable def ons_edgeWeight (Λ : Matrix E E ℂ) : List E → ℂ
| [] => 1
| [_] => 1
| a :: b :: t => Λ a b * ons_edgeWeight Λ (b :: t)
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanSplit.lean:67
def ons_decCycleFirstReturn {L : ℕ} {d : ons_Dart L}
(q : (ons_decGraph L).Walk d d) : List (ons_Dart L) :=
d :: (ons_decWalkExternalDarts q).tail.reverse ++ [d]
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationWalkExtract.lean:232
noncomputable def ons_decoratedEdgeSplit
(L : ℕ) [Fact (2 < L)] (d : ons_Dart L)
(D : ons_DecoratedContainingEdge L d) :
ons_DecoratedEdgeSplit L d D := by
let hex := ons_decorated_split_cycle_at_external L D.1 d D.2
let q := Classical.choose hex
let hexR := Classical.choose_spec hex
let R := Classical.choose hexR
have hs := Classical.choose_spec hexR
exact ⟨q, R, hs.1, hs.2.1, hs.2.2.1, hs.2.2.2.1,
hs.2.2.2.2.1, hs.2.2.2.2.2.1, hs.2.2.2.2.2.2⟩
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationCycleRemoval.lean:152
noncomputable def ons_decoratedWeightedSpinWeight
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (a b : Fin 2)
(D : ons_DecoratedEvenSubgraph L) : ℂ :=
(ons_spinCharacter a b
(ons_evenHomology L (ons_originalEdgesOfDecorated L D)) : ℂ) *
∏ edge ∈ ons_originalEdgesOfDecorated L D, weight edge
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationWeighted.lean:56
Uses 19
DefinitionDegree-\(n\) part of a power series evaluated at a point#✓fully proved
The sum of the terms of total degree n of a series evaluated at w.
noncomputable def ons_degreeFiberCoeff
{E : Type*} (series : MvPowerSeries E ℂ)
(weight : E → ℂ) (n : ℕ) : ℂ :=
∑' m : {m : E →₀ ℕ // Finsupp.degree m = n},
MvPowerSeries.coeff m.1 series * ons_mvMonomialValue weight m.1
noncomputable def ons_mvMonomialValue
{E : Type*} (weight : E → ℂ) (m : E →₀ ℕ) : ℂ :=
m.prod fun edge n ↦ weight edge ^ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalEvalAlgebra.lean:58
Uses 1 · Used by 1
DefinitionSum of absolute values of the degree-\(n\) terms at a point#✓fully proved
The sum of the absolute values of the terms of total degree n evaluated at w.
noncomputable def ons_degreeFiberNorm
{E : Type*} (series : MvPowerSeries E ℂ)
(weight : E → ℂ) (n : ℕ) : ℝ :=
∑' m : {m : E →₀ ℕ // Finsupp.degree m = n},
‖MvPowerSeries.coeff m.1 series * ons_mvMonomialValue weight m.1‖
noncomputable def ons_mvMonomialValue
{E : Type*} (weight : E → ℂ) (m : E →₀ ℕ) : ℂ :=
m.prod fun edge n ↦ weight edge ^ n
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalEvalAlgebra.lean:58
Uses 1 · Used by 1
DefinitionHomogeneous degree-\(n\) part of a power series as a polynomial#✓fully proved
The homogeneous degree-n part of a series as a polynomial (finitely many variables).
noncomputable def ons_degreeFiberPolynomial
{E : Type*} [Fintype E] [DecidableEq E]
(series : MvPowerSeries E ℂ) (n : ℕ) : MvPolynomial E ℂ :=
∑ m ∈ (Finsupp.finite_of_degree_le (σ := E) n).toFinset.filter
(fun m ↦ Finsupp.degree m = n),
MvPolynomial.monomial m (MvPowerSeries.coeff m series)
Used by 1
DefinitionSpin-character sums squared as twisted determinants at activity \(x\)#✓fully proved
For every spin structure (a, b), the square of the spin-character sum equals the twisted
Kac-Ward determinant det (1 - Λ_{ab}) at activity x.
def ons_spinCoefficientIdentity (L : ℕ) [Fact (2 < L)] (x : ℝ) : Prop :=
∀ a b : Fin 2,
(ons_spinCharacterSum L x a b : ℂ) ^ 2 =
(1 - ons_KWmatPhase L (x : ℂ) ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b)).det
noncomputable def ons_spinCharacterSum (L : ℕ) [Fact (2 < L)]
(x : ℝ) (a b : Fin 2) : ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L),
ons_spinCharacter a b (ons_evenHomology L F) * x ^ F.card
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:140
noncomputable def ons_KWmatPhase (L : ℕ) (x omega u v : ℂ) :
Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d2 d1 => ons_dirPhase u v d1.2 * ons_KWmat L x omega d2 d1
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:111
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
DefinitionSector weight of a homology class as a polynomial#✓fully proved
The sector weight of the homology class h as a real polynomial in x.
noncomputable def ons_sectorPoly (L : ℕ) [Fact (2 < L)]
(h : Fin 2 × Fin 2) : Polynomial ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L) with ons_evenHomology L F = h,
X ^ F.card
noncomputable def evenSubgraphs : Finset (Finset (Sym2 V)) :=
Gd.edgeFinset.powerset.filter IsEvenSubgraph
PhyslibExt/CondensedMatter/IsingModel/KramersWannierDuality.lean:65
def onsTorusGraph (L : ℕ) [Fact (2 < L)] : SimpleGraph (ZMod L × ZMod L) where
Adj := onsTorusAdj L
symm := by
refine ⟨?_⟩
rintro u v (⟨h1, h2 | h2⟩ | ⟨h1, h2 | h2⟩)
· exact Or.inl ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inl ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
loopless := by
have hne1 : (1 : ZMod L) ≠ 0 := by
have : Fact (1 < L) := ⟨by have := (Fact.out : 2 < L); omega⟩
⋯
PhyslibExt/CondensedMatter/IsingModel/Onsager/Torus.lean:65
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
Uses 4 · Used by 7
DefinitionSigned sector polynomial with the \((1,1)\) sector negated#✓fully proved
The signed sector sum ons_spin00 as a polynomial.
noncomputable def ons_spinPoly00 (L : ℕ) [Fact (2 < L)] : Polynomial ℝ :=
ons_sectorPoly L (0, 0) + ons_sectorPoly L (1, 0) +
ons_sectorPoly L (0, 1) - ons_sectorPoly L (1, 1)
noncomputable def ons_sectorPoly (L : ℕ) [Fact (2 < L)]
(h : Fin 2 × Fin 2) : Polynomial ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L) with ons_evenHomology L F = h,
X ^ F.card
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinPolynomial.lean:57
DefinitionSigned sector polynomial with the \((1,0)\) sector negated#✓fully proved
The signed sector sum ons_spin10 as a polynomial.
noncomputable def ons_spinPoly10 (L : ℕ) [Fact (2 < L)] : Polynomial ℝ :=
ons_sectorPoly L (0, 0) - ons_sectorPoly L (1, 0) +
ons_sectorPoly L (0, 1) + ons_sectorPoly L (1, 1)
noncomputable def ons_sectorPoly (L : ℕ) [Fact (2 < L)]
(h : Fin 2 × Fin 2) : Polynomial ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L) with ons_evenHomology L F = h,
X ^ F.card
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinPolynomial.lean:57
DefinitionSigned sector polynomial with the \((0,1)\) sector negated#✓fully proved
The signed sector sum ons_spin01 as a polynomial.
noncomputable def ons_spinPoly01 (L : ℕ) [Fact (2 < L)] : Polynomial ℝ :=
ons_sectorPoly L (0, 0) + ons_sectorPoly L (1, 0) -
ons_sectorPoly L (0, 1) + ons_sectorPoly L (1, 1)
noncomputable def ons_sectorPoly (L : ℕ) [Fact (2 < L)]
(h : Fin 2 × Fin 2) : Polynomial ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L) with ons_evenHomology L F = h,
X ^ F.card
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinPolynomial.lean:57
DefinitionSigned sector polynomial with only the \((0,0)\) sector positive#✓fully proved
The signed sector sum ons_spin11 as a polynomial.
noncomputable def ons_spinPoly11 (L : ℕ) [Fact (2 < L)] : Polynomial ℝ :=
ons_sectorPoly L (0, 0) - ons_sectorPoly L (1, 0) -
ons_sectorPoly L (0, 1) - ons_sectorPoly L (1, 1)
noncomputable def ons_sectorPoly (L : ℕ) [Fact (2 < L)]
(h : Fin 2 × Fin 2) : Polynomial ℝ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L) with ons_evenHomology L F = h,
X ^ F.card
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinPolynomial.lean:57
DefinitionSector determinant as a function of \(x\)#✓fully proved
The sector determinant as a function of x: the product over shifted momenta of
(1 + x²)² - 2x(1 - x²)(cos k₁ + cos k₂).
noncomputable def ons_spinDetX (L : ℕ) (x : ℝ) (a b : Fin 2) : ℝ :=
∏ i ∈ Finset.range L, ∏ j ∈ Finset.range L,
((1 + x ^ 2) ^ 2 - 2 * x * (1 - x ^ 2) *
(Real.cos (2 * Real.pi * (i + (a.val : ℝ) / 2) / L) +
Real.cos (2 * Real.pi * (j + (b.val : ℝ) / 2) / L)))
DefinitionSector determinant as a real polynomial#✓fully proved
The sector determinant as a real polynomial in x.
noncomputable def ons_spinDetPoly (L : ℕ) (a b : Fin 2) : Polynomial ℝ :=
∏ i ∈ Finset.range L, ∏ j ∈ Finset.range L,
((1 + X ^ 2) ^ 2 -
C (2 * (Real.cos (2 * Real.pi * (i + (a.val : ℝ) / 2) / L) +
Real.cos (2 * Real.pi * (j + (b.val : ℝ) / 2) / L))) * X * (1 - X ^ 2))
DefinitionFour spin Kac-Ward identities on the torus at activity \(x\)#✓fully proved
The four spin Kac-Ward identities spin_{ab}(x)² = det_{ab}(x) on the L × L torus at activity
x.
def ons_spinKacWardAt (L : ℕ) [Fact (2 < L)] (x : ℝ) : Prop :=
ons_spin11 L x ^ 2 = ons_spinDetX L x 0 0 ∧
ons_spin01 L x ^ 2 = ons_spinDetX L x 1 0 ∧
ons_spin10 L x ^ 2 = ons_spinDetX L x 0 1 ∧
ons_spin00 L x ^ 2 = ons_spinDetX L x 1 1
noncomputable def ons_spin11 (L : ℕ) [Fact (2 < L)] (x : ℝ) : ℝ :=
ons_sector00 L x - ons_sector10 L x - ons_sector01 L x - ons_sector11 L x
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:170
noncomputable def ons_spinDetX (L : ℕ) (x : ℝ) (a b : Fin 2) : ℝ :=
∏ i ∈ Finset.range L, ∏ j ∈ Finset.range L,
((1 + x ^ 2) ^ 2 - 2 * x * (1 - x ^ 2) *
(Real.cos (2 * Real.pi * (i + (a.val : ℝ) / 2) / L) +
Real.cos (2 * Real.pi * (j + (b.val : ℝ) / 2) / L)))
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinPolynomial.lean:111
noncomputable def ons_spin01 (L : ℕ) [Fact (2 < L)] (x : ℝ) : ℝ :=
ons_sector00 L x + ons_sector10 L x - ons_sector01 L x + ons_sector11 L x
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:166
noncomputable def ons_spin10 (L : ℕ) [Fact (2 < L)] (x : ℝ) : ℝ :=
ons_sector00 L x - ons_sector10 L x + ons_sector01 L x + ons_sector11 L x
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:162
noncomputable def ons_spin00 (L : ℕ) [Fact (2 < L)] (x : ℝ) : ℝ :=
ons_sector00 L x + ons_sector10 L x + ons_sector01 L x - ons_sector11 L x
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:158
Uses 5 · Used by 3
DefinitionWeighted character sum over even subgraphs containing an edge#✓fully proved
The part of the edge-weighted character sum coming from even subgraphs that contain edge.
noncomputable def ons_weightedSpinEdgeCoefficient
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ)
(a b : Fin 2) (edge : Sym2 (ZMod L × ZMod L)) : ℂ :=
∑ F ∈ (evenSubgraphs (onsTorusGraph L)).filter (edge ∈ ·),
(ons_spinCharacter a b (ons_evenHomology L F) : ℂ) *
∏ f ∈ F, weight f
noncomputable def evenSubgraphs : Finset (Finset (Sym2 V)) :=
Gd.edgeFinset.powerset.filter IsEvenSubgraph
PhyslibExt/CondensedMatter/IsingModel/KramersWannierDuality.lean:65
def onsTorusGraph (L : ℕ) [Fact (2 < L)] : SimpleGraph (ZMod L × ZMod L) where
Adj := onsTorusAdj L
symm := by
refine ⟨?_⟩
rintro u v (⟨h1, h2 | h2⟩ | ⟨h1, h2 | h2⟩)
· exact Or.inl ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inl ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
loopless := by
have hne1 : (1 : ZMod L) ≠ 0 := by
have : Fact (1 < L) := ⟨by have := (Fact.out : 2 < L); omega⟩
⋯
PhyslibExt/CondensedMatter/IsingModel/Onsager/Torus.lean:65
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
Uses 5 · Used by 1
DefinitionEdge weights restricted to a set of edges#✓fully proved
The edge weights restricted to S: equal to weight on S and 0 elsewhere.
DefinitionEdge coefficient identity on the \(L \times L\) torus#✓fully proved
The edge coefficient identity on the L × L torus: for small weights, the part of the
edge-weighted character sum from even subgraphs through the edge of e equals minus the Kac-Ward
root with e and its reverse masked, times the total first-return weight at e.
StatMech.Onsager.ons_weightedEdgeCoefficientIdentity · 16 lines
def ons_weightedEdgeCoefficientIdentity (L : ℕ) [Fact (2 < L)] : Prop :=
∀ (a b : Fin 2)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (q : ℝ),
0 ≤ q →
(∀ edge, ‖weight edge‖ ≤ q) →
q < (2 * (Fintype.card (ons_Dart L) : ℝ) ^ 2)⁻¹ →
∀ e : ons_Dart L,
ons_weightedSpinEdgeCoefficient L weight a b (ons_portEdge L e) =
-ons_detWalkRoot
(ons_maskMatrix ({e, ons_dartRev L e} : Finset (ons_Dart L))
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))) *
(∑' s, ons_firstReturnWeight
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b))
e (ons_dartRev L e) s)
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_weightedSpinEdgeCoefficient
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ)
(a b : Fin 2) (edge : Sym2 (ZMod L × ZMod L)) : ℂ :=
∑ F ∈ (evenSubgraphs (onsTorusGraph L)).filter (edge ∈ ·),
(ons_spinCharacter a b (ons_evenHomology L F) : ℂ) *
∏ f ∈ F, weight f
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinWeightedAffine.lean:71
def ons_portEdge (L : ℕ) (d : ons_Dart L) : Sym2 (ZMod L × ZMod L) :=
s(d.1, ons_dirStep L d.2 d.1)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusDecoration.lean:405
noncomputable def ons_detWalkRoot {E : Type*} [Fintype E] [DecidableEq E]
(Λ : Matrix E E ℂ) : ℂ :=
Complex.exp (-(∑' n : ℕ,
(∑ v : Fin (n + 1) → E,
∏ k : Fin (n + 1), Λ (v k) (v (k + 1))) / (n + 1)) / 2)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:60
def ons_maskMatrix {E : Type*} [DecidableEq E]
(forbidden : Finset E) (Λ : Matrix E E ℂ) : Matrix E E ℂ :=
fun i j => if i ∈ forbidden ∨ j ∈ forbidden then 0 else Λ i j
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:69
def ons_dartRev (L : ℕ) (d : ons_Dart L) : ons_Dart L :=
(ons_dirStep L d.2 d.1, d.2 + 2)
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/TurningTelescope.lean:59
noncomputable def ons_KWmatWeightedPhase (L : ℕ)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (omega u v : ℂ) :
Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d2 d1 =>
ons_dirPhase u v d1.2 * ons_KWmatWeighted L weight omega d2 d1
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWWeighted.lean:98
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
noncomputable def ons_firstReturnWeight (Lambda : Matrix E E ℂ) (e r : E)
(s : List E) : ℂ := by
classical
exact if ons_isFirstReturnSegment e s ∧ (∀ x ∈ s, x ≠ r) then
ons_edgeWeight Lambda s
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/ShermanGenericCancellation.lean:183
Uses 10
DefinitionEdge-weighted spin-character sum over even subgraphs#✓fully proved
The edge-weighted spin-character sum ∑_F χ_{a,b}(hom F) ∏_{e ∈ F} w_e over even subgraphs of
the torus.
noncomputable def ons_weightedSpinCharacterSum
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ)
(a b : Fin 2) : ℂ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L),
(ons_spinCharacter a b (ons_evenHomology L F) : ℂ) *
∏ edge ∈ F, weight edge
noncomputable def evenSubgraphs : Finset (Finset (Sym2 V)) :=
Gd.edgeFinset.powerset.filter IsEvenSubgraph
PhyslibExt/CondensedMatter/IsingModel/KramersWannierDuality.lean:65
def onsTorusGraph (L : ℕ) [Fact (2 < L)] : SimpleGraph (ZMod L × ZMod L) where
Adj := onsTorusAdj L
symm := by
refine ⟨?_⟩
rintro u v (⟨h1, h2 | h2⟩ | ⟨h1, h2 | h2⟩)
· exact Or.inl ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inl ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inr (by rw [h2]; ring)⟩
· exact Or.inr ⟨h1.symm, Or.inl (by rw [h2]; ring)⟩
loopless := by
have hne1 : (1 : ZMod L) ≠ 0 := by
have : Fact (1 < L) := ⟨by have := (Fact.out : 2 < L); omega⟩
⋯
PhyslibExt/CondensedMatter/IsingModel/Onsager/Torus.lean:65
def ons_spinCharacter (a b : Fin 2) (h : Fin 2 × Fin 2) : ℝ :=
(-1 : ℝ) ^ ((1 + a.val) * h.1.val + (1 + b.val) * h.2.val +
h.1.val * h.2.val)
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinCharacter.lean:60
noncomputable def ons_evenHomology (L : ℕ)
(F : Finset (Sym2 (ZMod L × ZMod L))) : Fin 2 × Fin 2 :=
by
classical
exact (⟨(F.filter (ons_xSeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩,
⟨(F.filter (ons_ySeamEdge L)).card % 2, Nat.mod_lt _ (by decide)⟩)
PhyslibExt/CondensedMatter/IsingModel/Onsager/TorusSpinSectors.lean:74
DefinitionEdge-weighted root identity on the torus#✓fully proved
The edge-weighted root identity on the L × L torus: for every spin structure and every edge
weight bounded by q below Sherman's radius, the walk-series square root of the twisted
edge-weighted Kac-Ward determinant equals the edge-weighted character sum.
def ons_weightedRootIdentity (L : ℕ) [Fact (2 < L)] : Prop :=
∀ (a b : Fin 2)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (q : ℝ),
0 ≤ q →
(∀ edge, ‖weight edge‖ ≤ q) →
q < (2 * (Fintype.card (ons_Dart L) : ℝ) ^ 2)⁻¹ →
ons_detWalkRoot
(ons_KWmatWeightedPhase L weight ons_turnRoot
(ons_spinPhase L a) (ons_spinPhase L b)) =
ons_weightedSpinCharacterSum L weight a b
abbrev ons_Dart (L : ℕ) := (ZMod L × ZMod L) × Fin 4
MathlibExt/Combinatorics/SimpleGraph/Lattice/TurningNumber/KacWardMatrix.lean:63
noncomputable def ons_detWalkRoot {E : Type*} [Fintype E] [DecidableEq E]
(Λ : Matrix E E ℂ) : ℂ :=
Complex.exp (-(∑' n : ℕ,
(∑ v : Fin (n + 1) → E,
∏ k : Fin (n + 1), Λ (v k) (v (k + 1))) / (n + 1)) / 2)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DetWalkExp.lean:60
noncomputable def ons_KWmatWeightedPhase (L : ℕ)
(weight : Sym2 (ZMod L × ZMod L) → ℂ) (omega u v : ℂ) :
Matrix (ons_Dart L) (ons_Dart L) ℂ :=
fun d2 d1 =>
ons_dirPhase u v d1.2 * ons_KWmatWeighted L weight omega d2 d1
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWWeighted.lean:98
noncomputable def ons_turnRoot : ℂ := Complex.exp (Complex.I * (Real.pi / 4))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWDetLimit.lean:59
noncomputable def ons_spinPhase (L : ℕ) (a : Fin 2) : ℂ :=
Complex.exp (Complex.I * ((Real.pi * a.val / L : ℝ) : ℂ))
PhyslibExt/CondensedMatter/IsingModel/Onsager/KWSpinFourier.lean:268
noncomputable def ons_weightedSpinCharacterSum
(L : ℕ) [Fact (2 < L)]
(weight : Sym2 (ZMod L × ZMod L) → ℂ)
(a b : Fin 2) : ℂ :=
∑ F ∈ evenSubgraphs (onsTorusGraph L),
(ons_spinCharacter a b (ons_evenHomology L F) : ℂ) *
∏ edge ∈ F, weight edge
PhyslibExt/CondensedMatter/IsingModel/Onsager/SpinWeightedTarget.lean:60
DefinitionSherman's radius for \(L > 2\), with value 1 otherwise#✓fully proved
Sherman's radius for L > 2, and 1 otherwise.
noncomputable def ons_spinShermanRadius (L : ℕ) : ℝ :=
if h : 2 < L then
letI : NeZero L := ⟨by omega⟩
ons_ShermanRadius L
else 1
DefinitionSecond-difference factor for a monomial of degree k#✓fully proved
The factor 2^k - 2 + 0^k by which a second difference multiplies a monomial of degree k in
one variable.
def ons_secondDifferenceFactor (k : ℕ) : ℂ :=
(2 : ℂ) ^ k - 2 + (0 : ℂ) ^ k
Used by 2
DefinitionSecond difference of a formal series in one variable#✓fully proved
The second difference of a formal series in the variable edge: the coefficient at m is
multiplied by 2^{m edge} - 2 + 0^{m edge}.
noncomputable def ons_decFormalSecondDifference
{L : ℕ} (series : MvPowerSeries (ons_DecEdge L) ℂ)
(edge : ons_DecEdge L) : MvPowerSeries (ons_DecEdge L) ℂ :=
fun m ↦ ons_secondDifferenceFactor (m edge) *
MvPowerSeries.coeff m series
abbrev ons_DecEdge (L : ℕ) := Sym2 (ons_Dart L)
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalSeries.lean:68
def ons_secondDifferenceFactor (k : ℕ) : ℂ :=
(2 : ℂ) ^ k - 2 + (0 : ℂ) ^ k
PhyslibExt/CondensedMatter/IsingModel/Onsager/DecorationFormalMultiaffine.lean:68
Uses 2 · Used by 1
TheoremOnsager's formula#✓fully proved
Onsager's formula for the zero-field square-lattice Ising model, in the form
torus pressure → ons_pressure β for β ≥ 0 (L. Onsager, Crystal statistics. I, 1944). See
main_free_energy for the explicit integral.
theorem ons_free_energy
(beta : ℝ) (hbeta : 0 ≤ beta) :
Filter.Tendsto (ons_torusPressureSeq beta)
Filter.atTop (nhds (ons_pressure beta))
noncomputable def ons_torusPressureSeq (beta : ℝ) (L : ℕ) : ℝ :=
if h : 2 < L then
letI : Fact (2 < L) := ⟨h⟩
ons_pressureFinite (onsTorusGraph L) beta
else 0
PhyslibExt/CondensedMatter/IsingModel/Onsager/CriticalTransfer.lean:137
noncomputable def ons_pressure (β : ℝ) : ℝ := Real.log 2 + ons_freeEnergyIntegral β
PhyslibExt/CondensedMatter/IsingModel/Onsager/FreeEnergy.lean:70
Uses 283 · Used by 1
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.