Skip to content

Commit 9dff417

Browse files
author
Sirui Lu
committed
feat(PEPS): two-block coefficient as a global virtual-configuration sum
1 parent 526c584 commit 9dff417

1 file changed

Lines changed: 102 additions & 0 deletions

File tree

TNLean/PEPS/FundamentalTheorem.lean

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,108 @@ theorem isTwoBlockInjective_complementTwoBlock (A : Tensor G d)
13871387
rw [IsTwoBlockInjective, hequiv]
13881388
exact hInj.comp _ (Equiv.punitProd _).injective
13891389

1390+
/-! ### Two-block coefficient identity
1391+
1392+
The two-block inserted coefficient of the vertex/complement split equals an
1393+
edge-inserted coefficient of the full PEPS. This is the first translation step of
1394+
`gaugeConsistency`: it turns the abstract two-injective comparison into a
1395+
statement about `edgeInsertedCoeff`, which the post-absorption insertion identity
1396+
controls.
1397+
1398+
Source: arXiv:1804.04964, Section 3, lines 1205--1210 of
1399+
`Papers/1804.04964/paper_normal.tex`: the comparison after Lemma
1400+
inj_equal_tensors_2 inserts a matrix on a v-star bond and reads off the
1401+
edge-centred contraction. -/
1402+
1403+
/-- Glue the physical index at `v` and a complement physical configuration into a
1404+
global physical configuration on all vertices. -/
1405+
def assembleσ (v : V) (σ₁ : Fin d)
1406+
(τ : VertexComplementPhysicalConfig (V := V) (d := d) v) : V → Fin d :=
1407+
fun w => if h : w = v then σ₁ else τ ⟨w, h⟩
1408+
1409+
omit [Fintype V] in
1410+
@[simp] theorem assembleσ_self (v : V) (σ₁ : Fin d)
1411+
(τ : VertexComplementPhysicalConfig (V := V) (d := d) v) :
1412+
assembleσ (V := V) (d := d) v σ₁ τ v = σ₁ := by
1413+
simp [assembleσ]
1414+
1415+
omit [Fintype V] in
1416+
theorem assembleσ_of_ne (v : V) (σ₁ : Fin d)
1417+
(τ : VertexComplementPhysicalConfig (V := V) (d := d) v) {w : V} (h : w ≠ v) :
1418+
assembleσ (V := V) (d := d) v σ₁ τ w = τ ⟨w, h⟩ := by
1419+
simp [assembleσ, h]
1420+
1421+
open scoped Classical in
1422+
/-- The vertex/complement two-block inserted coefficient, with the abstract
1423+
shared-bond sums of `twoBlockInsertedCoeff` rewritten over the local virtual
1424+
configuration `Fintype` instance.
1425+
1426+
`twoBlockInsertedCoeff` sums over `SharedBondConfig` using `Pi.instFintype`;
1427+
this lemma transports both sums to `LocalVirtualConfig A v` so the downstream
1428+
fiberwise collapse over the global virtual configuration is instance-aligned. -/
1429+
theorem twoBlockInsertedCoeff_vertex_complement (A : Tensor G d) (v : V)
1430+
(ie : IncidentEdge G v) (M : Matrix (Fin (A.bondDim ie.1)) (Fin (A.bondDim ie.1)) ℂ)
1431+
(σ₁ : Fin d) (τ : VertexComplementPhysicalConfig (V := V) (d := d) v) :
1432+
twoBlockInsertedCoeff (Bond := IncidentEdge G v)
1433+
(bondDim := fun ie => Fin (A.bondDim ie.1))
1434+
(vertexTwoBlock (G := G) A v) (complementTwoBlock (G := G) A v)
1435+
ie M PUnit.unit PUnit.unit σ₁ τ =
1436+
∑ μ : LocalVirtualConfig A v, ∑ ν : LocalVirtualConfig A v,
1437+
(if SameAwayFromBond ie μ ν then M (μ ie) (ν ie) else 0) *
1438+
A.component v μ σ₁ * vertexComplementWeight (G := G) A v ν τ := by
1439+
rw [twoBlockInsertedCoeff]
1440+
simp only [vertexTwoBlock_apply, complementTwoBlock_apply]
1441+
refine Finset.sum_congr (by ext x; simp) (fun μ _ => ?_)
1442+
refine Finset.sum_congr (by ext x; simp) (fun ν _ => rfl)
1443+
1444+
open scoped Classical in
1445+
/-- The vertex/complement two-block inserted coefficient as a sum over global
1446+
virtual configurations.
1447+
1448+
The complement weight is a fibered sum over global virtual configurations whose
1449+
v-star equals the second block boundary; collapsing that fiber identifies the
1450+
second block configuration `ν` with `vertexStarLabel ζ` and leaves a sum over
1451+
the global configuration `ζ` and the v-star configuration `μ` of the first
1452+
block.
1453+
1454+
Source: arXiv:1804.04964, Section 3, lines 1205--1210 of
1455+
`Papers/1804.04964/paper_normal.tex`. -/
1456+
theorem twoBlock_lhs_global (A : Tensor G d) (v : V) (ie : IncidentEdge G v)
1457+
(M : Matrix (Fin (A.bondDim ie.1)) (Fin (A.bondDim ie.1)) ℂ)
1458+
(σ₁ : Fin d) (τ : VertexComplementPhysicalConfig (V := V) (d := d) v) :
1459+
twoBlockInsertedCoeff (Bond := IncidentEdge G v)
1460+
(bondDim := fun ie => Fin (A.bondDim ie.1))
1461+
(vertexTwoBlock (G := G) A v) (complementTwoBlock (G := G) A v)
1462+
ie M PUnit.unit PUnit.unit σ₁ τ =
1463+
∑ ζ : VirtualConfig A,
1464+
∑ μ : LocalVirtualConfig A v,
1465+
(if SameAwayFromBond ie μ (vertexStarLabel (G := G) A v ζ) then
1466+
M (μ ie) (ζ ie.1) else 0) *
1467+
A.component v μ σ₁ *
1468+
∏ w : {w : V // w ≠ v}, A.component w.1 (fun ie => ζ ie.1) (τ w) := by
1469+
rw [twoBlockInsertedCoeff_vertex_complement]
1470+
-- Move the second-block boundary `ν` outermost.
1471+
rw [Finset.sum_comm]
1472+
-- Expand the complement weight as a fibered sum over global configurations and
1473+
-- distribute it into each summand.
1474+
simp only [vertexComplementWeight, Finset.mul_sum]
1475+
-- Un-fiber the right-hand global sum over the v-star label.
1476+
conv_rhs =>
1477+
rw [← Finset.sum_fiberwise Finset.univ
1478+
(fun ζ : VirtualConfig A => vertexStarLabel (G := G) A v ζ)
1479+
(fun ζ => ∑ μ : LocalVirtualConfig A v,
1480+
(if SameAwayFromBond ie μ (vertexStarLabel (G := G) A v ζ) then
1481+
M (μ ie) (ζ ie.1) else 0) * A.component v μ σ₁ *
1482+
∏ w : {w : V // w ≠ v}, A.component w.1 (fun ie => ζ ie.1) (τ w))]
1483+
-- Both sides now sum over `ν` and the fiber `ζ`; reconcile the summands,
1484+
-- replacing `ν` by `vertexStarLabel ζ` on the fiber.
1485+
refine Finset.sum_congr rfl fun ν _ => ?_
1486+
rw [Finset.sum_comm]
1487+
refine Finset.sum_congr rfl fun ζ hζ => ?_
1488+
rw [Finset.mem_filter] at hζ
1489+
refine Finset.sum_congr rfl fun μ _ => ?_
1490+
rw [← hζ.2, vertexStarLabel_apply]
1491+
13901492
/-! ### Vertex injectivity of the absorbed tensor family -/
13911493

13921494
/-- Recombining a linearly independent family by an invertible matrix preserves

0 commit comments

Comments
 (0)