Self-duality of the square lattice
DefinitionDual square lattice#✓fully proved
The dual square lattice. Its vertices are the face centres of ℤ², relabelled as integer
points, so as a graph it is hypercubicLattice 2.
def dualLattice : SimpleGraph (Site 2) := hypercubicLattice 2
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
Uses 2 · Used by 3
DefinitionQuarter-turn rotation of the square lattice#✓fully proved
The quarter-turn rotation (a, b) ↦ (-b, a) of ℤ².
def rot90Fun (x : Site 2) : Site 2 := ![- x 1, x 0]
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
Uses 1 · Used by 29
DefinitionInverse quarter-turn rotation#✓fully proved
The inverse quarter-turn rotation (a, b) ↦ (b, -a) of ℤ².
def rot90Inv (x : Site 2) : Site 2 := ![x 1, - x 0]
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
Uses 1 · Used by 3
DefinitionQuarter-turn rotation as a permutation#✓fully proved
The quarter-turn rotation as a permutation of ℤ².
def rot90Equiv : Site 2 ≃ Site 2 where
toFun := rot90Fun
invFun := rot90Inv
left_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
right_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
def rot90Fun (x : Site 2) : Site 2 := ![- x 1, x 0]
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:65
def rot90Inv (x : Site 2) : Site 2 := ![x 1, - x 0]
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:68
Uses 3 · Used by 8
DefinitionQuarter-turn rotation as a lattice automorphism#✓fully proved
The quarter-turn rotation as a graph automorphism of the square lattice.
def rot90Iso : hypercubicLattice 2 ≃g hypercubicLattice 2 :=
⟨rot90Equiv, fun {x y} => rot90_adj x y⟩
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
def rot90Equiv : Site 2 ≃ Site 2 where
toFun := rot90Fun
invFun := rot90Inv
left_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
right_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:77
theorem rot90_adj (x y : Site 2) :
(hypercubicLattice 2).Adj (rot90Fun x) (rot90Fun y) ↔
(hypercubicLattice 2).Adj x y
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:86
DefinitionIdentity self-duality of the square lattice#✓fully proved
The identity isomorphism between the square lattice and its dual.
def selfDual : hypercubicLattice 2 ≃g dualLattice := SimpleGraph.Iso.refl
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
def dualLattice : SimpleGraph (Site 2) := hypercubicLattice 2
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:58
Uses 3
DefinitionRotational self-duality of the square lattice#✓fully proved
The isomorphism between the square lattice and its dual given by the quarter-turn rotation.
def selfDualCross : hypercubicLattice 2 ≃g dualLattice := rot90Iso
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
def dualLattice : SimpleGraph (Site 2) := hypercubicLattice 2
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:58
def rot90Iso : hypercubicLattice 2 ≃g hypercubicLattice 2 :=
⟨rot90Equiv, fun {x y} => rot90_adj x y⟩
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:95
DefinitionBijection between primal and dual edges#✓fully proved
The bijection between primal and dual edges induced by rot90Iso.
def crossingEdgeEquiv : (hypercubicLattice 2).edgeSet ≃ dualLattice.edgeSet :=
rot90Iso.mapEdgeSet
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
def dualLattice : SimpleGraph (Site 2) := hypercubicLattice 2
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:58
def rot90Iso : hypercubicLattice 2 ≃g hypercubicLattice 2 :=
⟨rot90Equiv, fun {x y} => rot90_adj x y⟩
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:95
DefinitionUnordered pairs under an equivalence#✓fully proved
An equivalence α ≃ β induces an equivalence of unordered pairs Sym2 α ≃ Sym2 β.
DefinitionQuarter-turn rotation of unordered site pairs#✓fully proved
The bijection on unordered pairs of sites induced by the quarter-turn rotation
(a, b) ↦ (-b, a). It maps lattice edges to lattice edges, but not to the dual edge crossing them:
{(0,0), (1,0)} goes to {(0,0), (0,1)}. For the geometric crossing use sharedPrimalEdge.
def crossEdge : Sym2 (Site 2) ≃ Sym2 (Site 2) := sym2Congr rot90Equiv
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
def sym2Congr {α β : Type*} (e : α ≃ β) : Sym2 α ≃ Sym2 β where
toFun := Sym2.map e
invFun := Sym2.map e.symm
left_inv := by intro x; rw [Sym2.map_map]; simp
right_inv := by intro x; rw [Sym2.map_map]; simp
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:132
def rot90Equiv : Site 2 ≃ Site 2 where
toFun := rot90Fun
invFun := rot90Inv
left_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
right_inv := by intro x; funext i; fin_cases i <;> simp [rot90Fun, rot90Inv]
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:77
Uses 3 · Used by 4
DefinitionRotated dual configuration#✓fully proved
The configuration in which e is open exactly when the inverse quarter turn crossEdge.symm e
of e is closed in ω. This is the dual configuration only up to the rotation: applying it twice
gives the half-turn of ω (dualConfig_dualConfig), not ω.
def dualConfig (ω : ConfigSpace (Sym2 (Site 2))) : ConfigSpace (Sym2 (Site 2)) :=
fun e => !(ω (crossEdge.symm e))
abbrev ConfigSpace (E : Type*) : Type _ := E → Bool
MathlibExt/Probability/Configuration/ConfigSpace.lean:40
abbrev Site (d : ℕ) : Type := Fin d → ℤ
MathlibExt/Combinatorics/SimpleGraph/Lattice/HypercubicLattice.lean:55
def crossEdge : Sym2 (Site 2) ≃ Sym2 (Site 2) := sym2Congr rot90Equiv
MathlibExt/Combinatorics/SimpleGraph/Lattice/PlanarDual.lean:144
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.