Dual circuits decode to contours in two dimensions
A. Primal and dual edges
DefinitionPrimal edge crossed by a dual edge#✓fully proved
The primal edge of ℤ² crossed by the dual edge between the faces f and g, defined
symmetrically in f and g. See also sharedPrimalEdge, with which it agrees on adjacent
faces (symPrimal_eq_shared).
noncomputable def symPrimal (f g : Site 2) : Sym2 (Site 2) := by
classical
exact if f 0 = g 0 then
s(![f 0, max (f 1) (g 1)], ![f 0 + 1, max (f 1) (g 1)])
else
s(![max (f 0) (g 0), min (f 1) (g 1)], ![max (f 0) (g 0), min (f 1) (g 1) + 1])
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
Uses 1 · Used by 5
DefinitionPrimal edge crossed by an unordered pair of faces#✓fully proved
symPrimal on unordered pairs of faces.
noncomputable def symPrimalSym : Sym2 (Site 2) → Sym2 (Site 2) :=
Sym2.lift ⟨symPrimal, symPrimal_comm⟩
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
noncomputable def symPrimal (f g : Site 2) : Sym2 (Site 2) := by
classical
exact if f 0 = g 0 then
s(![f 0, max (f 1) (g 1)], ![f 0 + 1, max (f 1) (g 1)])
else
s(![max (f 0) (g 0), min (f 1) (g 1)], ![max (f 0) (g 0), min (f 1) (g 1) + 1])
PhyslibExt/CondensedMatter/IsingModel/Peierls/DualCircuitDecoding.lean:76
lemma symPrimal_comm (f g : Site 2) : symPrimal f g = symPrimal g f
PhyslibExt/CondensedMatter/IsingModel/Peierls/DualCircuitDecoding.lean:83
Uses 2 · Used by 5
DefinitionTwo faces flanking a primal edge#✓fully proved
The two faces of ℤ² flanking the primal edge {p, q}.
noncomputable def flankFaces (p q : Site 2) : Sym2 (Site 2) := by
classical
exact if p 0 = q 0 then
s(![p 0 - 1, min (p 1) (q 1)], ![p 0, min (p 1) (q 1)])
else
s(![min (p 0) (q 0), min (p 1) (q 1) - 1], ![min (p 0) (q 0), min (p 1) (q 1)])
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
DefinitionTwo faces flanking an unordered pair of sites#✓fully proved
flankFaces on unordered pairs of sites.
noncomputable def flankFacesSym : Sym2 (Site 2) → Sym2 (Site 2) :=
Sym2.lift ⟨flankFaces, flankFaces_comm⟩
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
noncomputable def flankFaces (p q : Site 2) : Sym2 (Site 2) := by
classical
exact if p 0 = q 0 then
s(![p 0 - 1, min (p 1) (q 1)], ![p 0, min (p 1) (q 1)])
else
s(![min (p 0) (q 0), min (p 1) (q 1) - 1], ![min (p 0) (q 0), min (p 1) (q 1)])
PhyslibExt/CondensedMatter/IsingModel/Peierls/DualCircuitDecoding.lean:114
lemma flankFaces_comm (p q : Site 2) : flankFaces p q = flankFaces q p
PhyslibExt/CondensedMatter/IsingModel/Peierls/DualCircuitDecoding.lean:121
B. Decoding dual circuits
DefinitionPrimal edges crossed by a closed dual walk#✓fully proved
The set of primal edges crossed by a closed dual walk.
noncomputable def dualWalkContour (W : Σ v : Site 2, (hypercubicLattice 2).Walk v v) :
Finset (Sym2 (Site 2)) :=
(W.2.edges.map symPrimalSym).toFinset
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
def hypercubicLattice (d : ℕ) : SimpleGraph (Site d) where
Adj := NearestNeighbour d
symm := ⟨fun _ _ h => nearestNeighbour_symm d h⟩
loopless := nearestNeighbour_irrefl d
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:76
noncomputable def symPrimalSym : Sym2 (Site 2) → Sym2 (Site 2) :=
Sym2.lift ⟨symPrimal, symPrimal_comm⟩
PhyslibExt/CondensedMatter/IsingModel/Peierls/DualCircuitDecoding.lean:108
C. Circuit data and the Peierls count
DefinitionConnected face-boundary graphs at the axis for all realised contours#✓fully proved
Every realised contour of length ℓ in Λ_n ⊆ ℤ² is the contour of a finite cluster whose
face-boundary graph is connected on boundarySupport and meets an axis face (j, 0) with j <
ℓ. The condition refers to the face set boundarySupport, which is chosen by
Classical.choose.
def PeierlsContourCircuitData (n ℓ : ℕ) : Prop :=
∀ F ∈ realisedContours 2 n ℓ,
∃ K : Finset (Site 2), (↑K : Set (Site 2)) ⊆ box 2 n ∧
crossEdges (↑K : Set (Site 2)) (bondFinsetTouch 2 n) = F ∧
contourLen (↑K : Set (Site 2)) (bondFinsetTouch 2 n) = ℓ ∧
∃ hfin : (↑K : Set (Site 2)).Finite,
FaceBoundaryConnected (↑K : Set (Site 2)) (boundarySupport hfin) ∧
∃ j : ℕ, j < ℓ ∧ axisVertex 2 j ∈ (boundarySupport hfin : Set (Site 2))
noncomputable def realisedContours (d n ℓ : ℕ) : Finset (Finset (Sym2 (Site d))) :=
((connClusterFamily (d := d) n).filter
(fun K : Finset (Site d) => contourLen (↑K) (bondFinsetTouch d n) = ℓ)).image
(fun K : Finset (Site d) => crossEdges (↑K : Set (Site d)) (bondFinsetTouch d n))
PhyslibExt/CondensedMatter/IsingModel/Peierls/ContourCountInjection.lean:188
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
def box (d n : ℕ) : Set (Site d) := {x | ∀ i, (x i).natAbs ≤ n}
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:86
noncomputable def crossEdges (K : Set (Site d)) (B : Finset (Sym2 (Site d))) :
Finset (Sym2 (Site d)) :=
B.filter (crosses K)
PhyslibExt/CondensedMatter/IsingModel/PeierlsContours.lean:111
noncomputable def bondFinsetTouch (d n : ℕ) : Finset (Sym2 (Site d)) :=
(bondPairsTouch d n).image (fun p => s(p.1, p.2))
PhyslibExt/CondensedMatter/IsingModel/InfiniteVolume.lean:114
noncomputable def contourLen (K : Set (Site d)) (B : Finset (Sym2 (Site d))) : ℕ :=
(crossEdges K B).card
PhyslibExt/CondensedMatter/IsingModel/PeierlsContours.lean:116
def FaceBoundaryConnected (K : Set (Site 2)) (T : Finset (Site 2)) : Prop :=
((faceBoundaryGraph K).induce (T : Set (Site 2))).Connected
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsSingleCircuit.lean:366
noncomputable def boundarySupport {K : Set (Site 2)} (hK : K.Finite) : Finset (Site 2) :=
(exists_finset_support_faceBoundaryGraph K hK).choose
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsSingleCircuit.lean:379
def axisVertex (d j : ℕ) : Site d := fun i => if i.val = 0 then (j : ℤ) else 0
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsAnchorEncode.lean:97
Uses 9
DefinitionConnected face-boundary graphs at the axis for all connected clusters#✓fully proved
Every connected cluster in Λ_n ⊆ ℤ² with contour length ℓ is finite, has face-boundary graph
connected on boundarySupport, and meets an axis face (j, 0) with j < ℓ. The condition
refers to the face set boundarySupport, which is chosen by Classical.choose;
TightAxisCircuitData avoids this choice.
def ContourGeometryResidue (n ℓ : ℕ) : Prop :=
∀ K : Finset (Site 2), K ∈ connClusterFamily (d := 2) n →
contourLen (↑K : Set (Site 2)) (bondFinsetTouch 2 n) = ℓ →
∃ hfin : (↑K : Set (Site 2)).Finite,
FaceBoundaryConnected (↑K : Set (Site 2)) (boundarySupport hfin) ∧
∃ j : ℕ, j < ℓ ∧ axisVertex 2 j ∈ (boundarySupport hfin : Set (Site 2))
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
noncomputable def connClusterFamily (n : ℕ) : Finset (Finset (Site d)) :=
(clusterFamily (d := d) n).filter (fun K => IsConnectedCluster K)
PhyslibExt/CondensedMatter/IsingModel/PeierlsContourCount.lean:237
noncomputable def contourLen (K : Set (Site d)) (B : Finset (Sym2 (Site d))) : ℕ :=
(crossEdges K B).card
PhyslibExt/CondensedMatter/IsingModel/PeierlsContours.lean:116
noncomputable def bondFinsetTouch (d n : ℕ) : Finset (Sym2 (Site d)) :=
(bondPairsTouch d n).image (fun p => s(p.1, p.2))
PhyslibExt/CondensedMatter/IsingModel/InfiniteVolume.lean:114
def FaceBoundaryConnected (K : Set (Site 2)) (T : Finset (Site 2)) : Prop :=
((faceBoundaryGraph K).induce (T : Set (Site 2))).Connected
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsSingleCircuit.lean:366
noncomputable def boundarySupport {K : Set (Site 2)} (hK : K.Finite) : Finset (Site 2) :=
(exists_finset_support_faceBoundaryGraph K hK).choose
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsSingleCircuit.lean:379
def axisVertex (d j : ℕ) : Site d := fun i => if i.val = 0 then (j : ℤ) else 0
PhyslibExt/CondensedMatter/IsingModel/Peierls/PeierlsAnchorEncode.lean:97
Uses 7
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.