Encyclopedia Foundation Foundation Pair Kernel Lattice3 Pair Min Ge One Via Two Paths
ARTICLE 3 claims 3 theorems
Foundation Pair Kernel Lattice3 Pair Min Ge One Via Two Paths
A machine-checked theorem shows that in a lattice where each step costs exactly one unit, two distinct routes between two points guarantee the minimum cost is at least one.
The two-path lower bound
A ledger, a discrete record of events, can be modeled as a graph whose edges carry weights. In the Recognition Science framework, a central quantity is pairMin, the minimum possible cost of a flow that sends one unit from a source site to a target site, with the cost measured by the sum of squared edge flows. The declaration pairMin_ge_one_via_two_paths proves a simple fact about this quantity: if every edge has weight either 0 or 1, and there exist two distinct paths from a to b that share no edges, then pairMin is at least 1.
The proof is constructive. It builds an explicit flow, called twoPathFlow, that sends half a unit along each of the two paths. Because the paths are edge-disjoint, the flow is antisymmetric and has the correct divergence: one unit leaves the source, one unit arrives at the target, and nothing accumulates elsewhere. The energy of this flow is exactly 1, and since pairMin is defined as the infimum over all valid flows, the existence of a flow with energy 1 forces the infimum to be at least 1. The theorem is tagged THEOREM in the framework's machine-checked library, meaning it is proved with no unverified axioms.
The result matters because it is a building block for the three-dimensional lattice box. In that box, sites are arranged on an L × L × L grid, and edges connect sites that differ by exactly one step in one coordinate. The theorem guarantees that any two sites connected by two edge-disjoint paths have pairMin at least 1, which is a concrete, non-vacuous lower bound. This is the first step toward showing that in three dimensions the minimum cost does not decay to zero with distance, in contrast to the one-dimensional case where it behaves like 1/d.
What the theorem does not claim is equally important. It does not say that two paths are necessary for the bound; a single edge with weight 1 already gives pairMin ≥ 1 by a separate theorem. It does not describe the asymptotic behavior of pairMin for distant sites in the box; that remains an open target. And it does not establish the three-dimensional Green's function 1/(4πr), which is a different quantity, the response to a unit charge, not the pinned-pair minimum cost.
THEOREM pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **Two-parallel-paths lower bound (graph-generic).** Let `a, u, v, b` be four distinct sites of
a 0/1-weighted ledger graph, with the four edges `a—u`, `u—b`, `a—v`, `v—b` all present
(weight `1`). Then `pairMin G a b ≥ 1`, even though `a, b` need not be adjacent: the unit flow
that splits `½ : ½` between the two length-2 paths dissipates energy exactly `1`, and Thomson
duality (`pairMin_ge_inv_flowEnergy`) turns that into the lower bound. Contrast the 1D chain,
where a distance-2 pair has `pairMin ≤ ½` (`pairMin_band_le_inv_dist`) because no second
parallel route exists — this is the smallest strict recurrence/transience witness. -/
theorem pairMin_ge_one_via_two_paths {n : ℕ} (G : WeightedLedgerGraph n)
(hw01 : ∀ i j, G.weight i j = 0 ∨ G.weight i j = 1)
{a u v b : Fin n}
(hau : a ≠ u) (hav : a ≠ v) (hab : a ≠ b)
(hub : u ≠ b) (hvb : v ≠ b) (huv : u ≠ v)
(wau : G.weight a u = 1) (wub : G.weight u b = 1)
(wav : G.weight a v = 1) (wvb : G.weight v b = 1) :
(1:ℝ) ≤ pairMin G a b := by
have hua := hau.symm
have hva := hav.symm
have hba := hab.symm
have hbu := hub.symm
have hbv := hvb.symm
have hvu := huv.symm
have htheta : ∀ i j : Fin n, twoPathFlow a u v b i j
= (1 / 2) * ((if i = a ∧ j = u then (1:ℝ) else if i = u ∧ j = a then (-1:ℝ) else 0)
+ (if i = u ∧ j = b then (1:ℝ) else if i = b ∧ j = u then (-1:ℝ) else 0)
+ (if i = a ∧ j = v then (1:ℝ) else if i = v ∧ j = a then (-1:ℝ) else 0)
+ (if i = v ∧ j = b then (1:ℝ) else if i = b ∧ j = v then (-1:ℝ) else 0)) := by
intro i j
unfold twoPathFlow fourEdgeSum
rw [ep_val hau i j, ep_val hub i j, ep_val hav i j, ep_val hvb i j]
have tau_au : twoPathFlow a u v b a u = 1 / 2 := by
rw [htheta a u, if_pos (⟨rfl, rfl⟩ : a = a ∧ u = u),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_neg (fun h => huv h.2), if_neg (fun h => hav h.1),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have tau_av : twoPathFlow a u v b a v = 1 / 2 := by
rw [htheta a v,
if_neg (fun h => hvu h.2), if_neg (fun h => hau h.1),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_pos (⟨rfl, rfl⟩ : a = a ∧ v = v),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have tau_ua : twoPathFlow a u v b u a = -1 / 2 := by
rw [htheta u a,
if_neg (fun h => hua h.1), if_pos (⟨rfl, rfl⟩ : u = u ∧ a = a),
if_neg (fun h => hab h.2), if_neg (fun h => hub h.1),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have tau_ub : twoPathFlow a u v b u b = 1 / 2 := by
rw [htheta u b,
if_neg (fun h => hua h.1), if_neg (fun h => hba h.2),
if_pos (⟨rfl, rfl⟩ : u = u ∧ b = b),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have tau_va : twoPathFlow a u v b v a = -1 / 2 := by
rw [htheta v a,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_pos (⟨rfl, rfl⟩ : v = v ∧ a = a),
if_neg (fun h => hab h.2), if_neg (fun h => hvb h.1)]
norm_num
have tau_vb : twoPathFlow a u v b v b = 1 / 2 := by
rw [htheta v b,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_neg (fun h => hba h.2),
if_pos (⟨rfl, rfl⟩ : v = v ∧ b = b)]
norm_num
have tau_bu : twoPathFlow a u v b b u = -1 / 2 := by
rw [htheta b u,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ u = u),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_neg (fun h => huv h.2)]
norm_num
have tau_bv : twoPathFlow a u v b b v = -1 / 2 := by
rw [htheta b v,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_neg (fun h => hvu h.2),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ v = v)]
norm_num
have theta_a_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b a j = 0 := by
intro j hju hjv
rw [htheta a j,
if_neg (fun h => hju h.2), if_neg (fun h => hau h.1),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_neg (fun h => hjv h.2), if_neg (fun h => hav h.1),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have theta_u_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b u j = 0 := by
intro j hja hjb
rw [htheta u j,
if_neg (fun h => hua h.1), if_neg (fun h => hja h.2),
if_neg (fun h => hjb h.2), if_neg (fun h => hub h.1),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have theta_v_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b v j = 0 := by
intro j hja hjb
rw [htheta v j,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_neg (fun h => hja h.2),
if_neg (fun h => hjb h.2), if_neg (fun h => hvb h.1)]
norm_num
have theta_b_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b b j = 0 := by
intro j hju hjv
rw [htheta b j,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_neg (fun h => hju h.2),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_neg (fun h => hjv h.2)]
norm_num
have theta_row_zero : ∀ i j : Fin n, i ≠ a → i ≠ u → i ≠ v → i ≠ b →
twoPathFlow a u v b i j = 0 := by
intro i j hia hiu hiv hib
rw [htheta i j,
if_neg (fun h => hia h.1), if_neg (fun h => hiu h.1),
if_neg (fun h => hiu h.1), if_neg (fun h => hib h.1),
if_neg (fun h => hia h.1), if_neg (fun h => hiv h.1),
if_neg (fun h => hiv h.1), if_neg (fun h => hib h.1)]
norm_num
have rowa : (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) →
twoPathFlow a u v b a j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_a_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz,
Finset.sum_pair huv, tau_au, tau_av]
norm_num
have rowu : (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) →
twoPathFlow a u v b u j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_u_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz,
Finset.sum_pair hab, tau_ua, tau_ub]
norm_num
have rowv : (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) →
twoPathFlow a u v b v j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_v_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz,
Finset.sum_pair hab, tau_va, tau_vb]
norm_num
have rowb : (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) →
twoPathFlow a u v b b j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_b_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz,
Finset.sum_pair huv, tau_bu, tau_bv]
norm_num
have hset : (∑ i ∈ ({a, u, v, b} : Finset (Fin n)), ∑ j : Fin n, twoPathFlow a u v b i j ^ 2)
= (∑ j : Fin n, twoPathFlow a u v b a j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b u j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b v j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) := by
rw [Finset.sum_insert (by
simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨hau, hav, hab⟩),
Finset.sum_insert (by
simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨huv, hub⟩),
Finset.sum_insert (by
simp only [Finset.mem_singleton]; exact hvb),
Finset.sum_singleton]
ring
have hE : flowEnergy (twoPathFlow a u v b) = 1 := by
unfold flowEnergy
have hz : ∀ i ∈ (Finset.univ : Finset (Fin n)), i ∉ ({a, u, v, b} : Finset (Fin n)) →
(∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = 0 := by
intro i _ hi
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hi
exact Finset.sum_eq_zero (fun j _ => by
rw [theta_row_zero i j hi.1 hi.2.1 hi.2.2.1 hi.2.2.2]; norm_num)
rw [← Finset.sum_subset (Finset.subset_univ ({a, u, v, b} : Finset (Fin n))) hz,
hset, rowa, rowu, rowv, rowb]
norm_num
have hsupp : ∀ i j, G.weight i j = 0 → twoPathFlow a u v b i j = 0 := by
intro i j hw
unfold twoPathFlow fourEdgeSum
rw [ep_zero_of_weight_zero G hau wau i j hw, ep_zero_of_weight_zero G hub wub i j hw,
ep_zero_of_weight_zero G hav wav i j hw, ep_zero_of_weight_zero G hvb wvb i j hw]
ring
have hdiva : divF (twoPathFlow a u v b) a = 1 := by
rw [twoPathFlow_divF, elementaryPosting_div_source a u hau, ep_div_off u b a hau hab,
elementaryPosting_div_source a v hav, ep_div_off v b a hav hab]
norm_num
have hdiv0 : ∀ i, i ≠ a → i ≠ b → divF (twoPathFlow a u v b) i = 0 := by
intro i hia hib
rw [twoPathFlow_divF]
by_cases hiu : i = u
· rw [hiu, elementaryPosting_div_sink a u hau, elementaryPosting_div_source u b hub,
ep_div_off a v u hua huv, ep_div_off v b u huv hub]
norm_num
· by_cases hiv : i = v
· rw [hiv, ep_div_off a u v hva hvu, ep_div_off u b v hvu hvb,
elementaryPosting_div_sink a v hav, elementaryPosting_div_source v b hvb]
norm_num
· rw [ep_div_off a u i hia hiu, ep_div_off u b i hiu hib,
ep_div_off a v i hia hiv, ep_div_off v b i hiv hib]
norm_num
have hEpos : 0 < flowEnergy (twoPathFlow a u v b) := by rw [hE]; norm_num
have hbound := pairMin_ge_inv_flowEnergy G hw01 hab (twoPathFlow a u v b)
(twoPathFlow_antisym a u v b) hsupp hdiva hdiv0 hEpos
rw [hE] at hbound
norm_num at hbound
exact hbound
THEOREM twoPathFlow · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **The two-parallel-paths unit flow.** Half a unit of current along `a→u→b`, half along
`a→v→b`. Antisymmetric by construction (a scaled sum of double-entry postings). -/
def twoPathFlow {n : ℕ} (a u v b : Fin n) : Fin n → Fin n → ℝ :=
fun i j => (1 / 2) * fourEdgeSum a u v b i j
THEOREM pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **Two-parallel-paths lower bound (graph-generic).** Let `a, u, v, b` be four distinct sites of
a 0/1-weighted ledger graph, with the four edges `a—u`, `u—b`, `a—v`, `v—b` all present
(weight `1`). Then `pairMin G a b ≥ 1`, even though `a, b` need not be adjacent: the unit flow
that splits `½ : ½` between the two length-2 paths dissipates energy exactly `1`, and Thomson
duality (`pairMin_ge_inv_flowEnergy`) turns that into the lower bound. Contrast the 1D chain,
where a distance-2 pair has `pairMin ≤ ½` (`pairMin_band_le_inv_dist`) because no second
parallel route exists — this is the smallest strict recurrence/transience witness. -/
theorem pairMin_ge_one_via_two_paths {n : ℕ} (G : WeightedLedgerGraph n)
(hw01 : ∀ i j, G.weight i j = 0 ∨ G.weight i j = 1)
{a u v b : Fin n}
(hau : a ≠ u) (hav : a ≠ v) (hab : a ≠ b)
(hub : u ≠ b) (hvb : v ≠ b) (huv : u ≠ v)
(wau : G.weight a u = 1) (wub : G.weight u b = 1)
(wav : G.weight a v = 1) (wvb : G.weight v b = 1) :
(1:ℝ) ≤ pairMin G a b := by
have hua := hau.symm
have hva := hav.symm
have hba := hab.symm
have hbu := hub.symm
have hbv := hvb.symm
have hvu := huv.symm
have htheta : ∀ i j : Fin n, twoPathFlow a u v b i j
= (1 / 2) * ((if i = a ∧ j = u then (1:ℝ) else if i = u ∧ j = a then (-1:ℝ) else 0)
+ (if i = u ∧ j = b then (1:ℝ) else if i = b ∧ j = u then (-1:ℝ) else 0)
+ (if i = a ∧ j = v then (1:ℝ) else if i = v ∧ j = a then (-1:ℝ) else 0)
+ (if i = v ∧ j = b then (1:ℝ) else if i = b ∧ j = v then (-1:ℝ) else 0)) := by
intro i j
unfold twoPathFlow fourEdgeSum
rw [ep_val hau i j, ep_val hub i j, ep_val hav i j, ep_val hvb i j]
have tau_au : twoPathFlow a u v b a u = 1 / 2 := by
rw [htheta a u, if_pos (⟨rfl, rfl⟩ : a = a ∧ u = u),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_neg (fun h => huv h.2), if_neg (fun h => hav h.1),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have tau_av : twoPathFlow a u v b a v = 1 / 2 := by
rw [htheta a v,
if_neg (fun h => hvu h.2), if_neg (fun h => hau h.1),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_pos (⟨rfl, rfl⟩ : a = a ∧ v = v),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have tau_ua : twoPathFlow a u v b u a = -1 / 2 := by
rw [htheta u a,
if_neg (fun h => hua h.1), if_pos (⟨rfl, rfl⟩ : u = u ∧ a = a),
if_neg (fun h => hab h.2), if_neg (fun h => hub h.1),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have tau_ub : twoPathFlow a u v b u b = 1 / 2 := by
rw [htheta u b,
if_neg (fun h => hua h.1), if_neg (fun h => hba h.2),
if_pos (⟨rfl, rfl⟩ : u = u ∧ b = b),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have tau_va : twoPathFlow a u v b v a = -1 / 2 := by
rw [htheta v a,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_pos (⟨rfl, rfl⟩ : v = v ∧ a = a),
if_neg (fun h => hab h.2), if_neg (fun h => hvb h.1)]
norm_num
have tau_vb : twoPathFlow a u v b v b = 1 / 2 := by
rw [htheta v b,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_neg (fun h => hba h.2),
if_pos (⟨rfl, rfl⟩ : v = v ∧ b = b)]
norm_num
have tau_bu : twoPathFlow a u v b b u = -1 / 2 := by
rw [htheta b u,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ u = u),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_neg (fun h => huv h.2)]
norm_num
have tau_bv : twoPathFlow a u v b b v = -1 / 2 := by
rw [htheta b v,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_neg (fun h => hvu h.2),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ v = v)]
norm_num
have theta_a_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b a j = 0 := by
intro j hju hjv
rw [htheta a j,
if_neg (fun h => hju h.2), if_neg (fun h => hau h.1),
if_neg (fun h => hau h.1), if_neg (fun h => hab h.1),
if_neg (fun h => hjv h.2), if_neg (fun h => hav h.1),
if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)]
norm_num
have theta_u_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b u j = 0 := by
intro j hja hjb
rw [htheta u j,
if_neg (fun h => hua h.1), if_neg (fun h => hja h.2),
if_neg (fun h => hjb h.2), if_neg (fun h => hub h.1),
if_neg (fun h => hua h.1), if_neg (fun h => huv h.1),
if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)]
norm_num
have theta_v_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b v j = 0 := by
intro j hja hjb
rw [htheta v j,
if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1),
if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1),
if_neg (fun h => hva h.1), if_neg (fun h => hja h.2),
if_neg (fun h => hjb h.2), if_neg (fun h => hvb h.1)]
norm_num
have theta_b_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b b j = 0 := by
intro j hju hjv
rw [htheta b j,
if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1),
if_neg (fun h => hbu h.1), if_neg (fun h => hju h.2),
if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1),
if_neg (fun h => hbv h.1), if_neg (fun h => hjv h.2)]
norm_num
have theta_row_zero : ∀ i j : Fin n, i ≠ a → i ≠ u → i ≠ v → i ≠ b →
twoPathFlow a u v b i j = 0 := by
intro i j hia hiu hiv hib
rw [htheta i j,
if_neg (fun h => hia h.1), if_neg (fun h => hiu h.1),
if_neg (fun h => hiu h.1), if_neg (fun h => hib h.1),
if_neg (fun h => hia h.1), if_neg (fun h => hiv h.1),
if_neg (fun h => hiv h.1), if_neg (fun h => hib h.1)]
norm_num
have rowa : (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) →
twoPathFlow a u v b a j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_a_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz,
Finset.sum_pair huv, tau_au, tau_av]
norm_num
have rowu : (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) →
twoPathFlow a u v b u j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_u_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz,
Finset.sum_pair hab, tau_ua, tau_ub]
norm_num
have rowv : (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) →
twoPathFlow a u v b v j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_v_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz,
Finset.sum_pair hab, tau_va, tau_vb]
norm_num
have rowb : (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) = 1 / 2 := by
have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) →
twoPathFlow a u v b b j ^ 2 = 0 := by
intro j _ hj
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj
rw [theta_b_off j hj.1 hj.2]; norm_num
rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz,
Finset.sum_pair huv, tau_bu, tau_bv]
norm_num
have hset : (∑ i ∈ ({a, u, v, b} : Finset (Fin n)), ∑ j : Fin n, twoPathFlow a u v b i j ^ 2)
= (∑ j : Fin n, twoPathFlow a u v b a j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b u j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b v j ^ 2)
+ (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) := by
rw [Finset.sum_insert (by
simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨hau, hav, hab⟩),
Finset.sum_insert (by
simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨huv, hub⟩),
Finset.sum_insert (by
simp only [Finset.mem_singleton]; exact hvb),
Finset.sum_singleton]
ring
have hE : flowEnergy (twoPathFlow a u v b) = 1 := by
unfold flowEnergy
have hz : ∀ i ∈ (Finset.univ : Finset (Fin n)), i ∉ ({a, u, v, b} : Finset (Fin n)) →
(∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = 0 := by
intro i _ hi
simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hi
exact Finset.sum_eq_zero (fun j _ => by
rw [theta_row_zero i j hi.1 hi.2.1 hi.2.2.1 hi.2.2.2]; norm_num)
rw [← Finset.sum_subset (Finset.subset_univ ({a, u, v, b} : Finset (Fin n))) hz,
hset, rowa, rowu, rowv, rowb]
norm_num
have hsupp : ∀ i j, G.weight i j = 0 → twoPathFlow a u v b i j = 0 := by
intro i j hw
unfold twoPathFlow fourEdgeSum
rw [ep_zero_of_weight_zero G hau wau i j hw, ep_zero_of_weight_zero G hub wub i j hw,
ep_zero_of_weight_zero G hav wav i j hw, ep_zero_of_weight_zero G hvb wvb i j hw]
ring
have hdiva : divF (twoPathFlow a u v b) a = 1 := by
rw [twoPathFlow_divF, elementaryPosting_div_source a u hau, ep_div_off u b a hau hab,
elementaryPosting_div_source a v hav, ep_div_off v b a hav hab]
norm_num
have hdiv0 : ∀ i, i ≠ a → i ≠ b → divF (twoPathFlow a u v b) i = 0 := by
intro i hia hib
rw [twoPathFlow_divF]
by_cases hiu : i = u
· rw [hiu, elementaryPosting_div_sink a u hau, elementaryPosting_div_source u b hub,
ep_div_off a v u hua huv, ep_div_off v b u huv hub]
norm_num
· by_cases hiv : i = v
· rw [hiv, ep_div_off a u v hva hvu, ep_div_off u b v hvu hvb,
elementaryPosting_div_sink a v hav, elementaryPosting_div_source v b hvb]
norm_num
· rw [ep_div_off a u i hia hiu, ep_div_off u b i hiu hib,
ep_div_off a v i hia hiv, ep_div_off v b i hiv hib]
norm_num
have hEpos : 0 < flowEnergy (twoPathFlow a u v b) := by rw [hE]; norm_num
have hbound := pairMin_ge_inv_flowEnergy G hw01 hab (twoPathFlow a u v b)
(twoPathFlow_antisym a u v b) hsupp hdiva hdiv0 hEpos
rw [hE] at hbound
norm_num at hbound
exact hbound
What this page does not claim
Two paths are necessary for the lower bound; a single edge already suffices. The theorem describes the asymptotic decay of pairMin for distant sites in the box. The theorem establishes the three-dimensional Green's function 1/(4πr).
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Foundation/PairKernelLattice3.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- What is the exact asymptotic behavior of pairMin for distant sites in the three-dimensional box?
- How does the two-path lower bound generalize to graphs with more than two edge-disjoint paths?
- What is the precise relationship between pairMin and the lattice Green's function in three dimensions?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **Two-parallel-paths lower bound (graph-generic).** Let `a, u, v, b` be four distinct sites of a 0/1-weighted ledger graph, with the four edges `a—u`, `u—b`, `a—v`, `v—b` all present (weight `1`). Then `pairMin G a b ≥ 1`, even though `a, b` need not be adjacent: the unit flow that splits `½ : ½` between the two length-2 paths dissipates energy exactly `1`, and Thomson duality (`pairMin_ge_inv_flowEnergy`) turns that into the lower bound. Contrast the 1D chain, where a distance-2 pair has `pairMin ≤ ½` (`pairMin_band_le_inv_dist`) because no second parallel route exists — this is the smallest strict recurrence/transience witness. -/ theorem pairMin_ge_one_via_two_paths {n : ℕ} (G : WeightedLedgerGraph n) (hw01 : ∀ i j, G.weight i j = 0 ∨ G.weight i j = 1) {a u v b : Fin n} (hau : a ≠ u) (hav : a ≠ v) (hab : a ≠ b) (hub : u ≠ b) (hvb : v ≠ b) (huv : u ≠ v) (wau : G.weight a u = 1) (wub : G.weight u b = 1) (wav : G.weight a v = 1) (wvb : G.weight v b = 1) : (1:ℝ) ≤ pairMin G a b := by have hua := hau.symm have hva := hav.symm have hba := hab.symm have hbu := hub.symm have hbv := hvb.symm have hvu := huv.symm have htheta : ∀ i j : Fin n, twoPathFlow a u v b i j = (1 / 2) * ((if i = a ∧ j = u then (1:ℝ) else if i = u ∧ j = a then (-1:ℝ) else 0) + (if i = u ∧ j = b then (1:ℝ) else if i = b ∧ j = u then (-1:ℝ) else 0) + (if i = a ∧ j = v then (1:ℝ) else if i = v ∧ j = a then (-1:ℝ) else 0) + (if i = v ∧ j = b then (1:ℝ) else if i = b ∧ j = v then (-1:ℝ) else 0)) := by intro i j unfold twoPathFlow fourEdgeSum rw [ep_val hau i j, ep_val hub i j, ep_val hav i j, ep_val hvb i j] have tau_au : twoPathFlow a u v b a u = 1 / 2 := by rw [htheta a u, if_pos (⟨rfl, rfl⟩ : a = a ∧ u = u), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_neg (fun h => huv h.2), if_neg (fun h => hav h.1), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have tau_av : twoPathFlow a u v b a v = 1 / 2 := by rw [htheta a v, if_neg (fun h => hvu h.2), if_neg (fun h => hau h.1), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_pos (⟨rfl, rfl⟩ : a = a ∧ v = v), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have tau_ua : twoPathFlow a u v b u a = -1 / 2 := by rw [htheta u a, if_neg (fun h => hua h.1), if_pos (⟨rfl, rfl⟩ : u = u ∧ a = a), if_neg (fun h => hab h.2), if_neg (fun h => hub h.1), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have tau_ub : twoPathFlow a u v b u b = 1 / 2 := by rw [htheta u b, if_neg (fun h => hua h.1), if_neg (fun h => hba h.2), if_pos (⟨rfl, rfl⟩ : u = u ∧ b = b), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have tau_va : twoPathFlow a u v b v a = -1 / 2 := by rw [htheta v a, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_pos (⟨rfl, rfl⟩ : v = v ∧ a = a), if_neg (fun h => hab h.2), if_neg (fun h => hvb h.1)] norm_num have tau_vb : twoPathFlow a u v b v b = 1 / 2 := by rw [htheta v b, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_neg (fun h => hba h.2), if_pos (⟨rfl, rfl⟩ : v = v ∧ b = b)] norm_num have tau_bu : twoPathFlow a u v b b u = -1 / 2 := by rw [htheta b u, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ u = u), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_neg (fun h => huv h.2)] norm_num have tau_bv : twoPathFlow a u v b b v = -1 / 2 := by rw [htheta b v, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hvu h.2), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ v = v)] norm_num have theta_a_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b a j = 0 := by intro j hju hjv rw [htheta a j, if_neg (fun h => hju h.2), if_neg (fun h => hau h.1), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_neg (fun h => hjv h.2), if_neg (fun h => hav h.1), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have theta_u_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b u j = 0 := by intro j hja hjb rw [htheta u j, if_neg (fun h => hua h.1), if_neg (fun h => hja h.2), if_neg (fun h => hjb h.2), if_neg (fun h => hub h.1), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have theta_v_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b v j = 0 := by intro j hja hjb rw [htheta v j, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_neg (fun h => hja h.2), if_neg (fun h => hjb h.2), if_neg (fun h => hvb h.1)] norm_num have theta_b_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b b j = 0 := by intro j hju hjv rw [htheta b j, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hju h.2), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hjv h.2)] norm_num have theta_row_zero : ∀ i j : Fin n, i ≠ a → i ≠ u → i ≠ v → i ≠ b → twoPathFlow a u v b i j = 0 := by intro i j hia hiu hiv hib rw [htheta i j, if_neg (fun h => hia h.1), if_neg (fun h => hiu h.1), if_neg (fun h => hiu h.1), if_neg (fun h => hib h.1), if_neg (fun h => hia h.1), if_neg (fun h => hiv h.1), if_neg (fun h => hiv h.1), if_neg (fun h => hib h.1)] norm_num have rowa : (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) → twoPathFlow a u v b a j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_a_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz, Finset.sum_pair huv, tau_au, tau_av] norm_num have rowu : (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) → twoPathFlow a u v b u j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_u_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz, Finset.sum_pair hab, tau_ua, tau_ub] norm_num have rowv : (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) → twoPathFlow a u v b v j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_v_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz, Finset.sum_pair hab, tau_va, tau_vb] norm_num have rowb : (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) → twoPathFlow a u v b b j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_b_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz, Finset.sum_pair huv, tau_bu, tau_bv] norm_num have hset : (∑ i ∈ ({a, u, v, b} : Finset (Fin n)), ∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) := by rw [Finset.sum_insert (by simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨hau, hav, hab⟩), Finset.sum_insert (by simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨huv, hub⟩), Finset.sum_insert (by simp only [Finset.mem_singleton]; exact hvb), Finset.sum_singleton] ring have hE : flowEnergy (twoPathFlow a u v b) = 1 := by unfold flowEnergy have hz : ∀ i ∈ (Finset.univ : Finset (Fin n)), i ∉ ({a, u, v, b} : Finset (Fin n)) → (∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = 0 := by intro i _ hi simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hi exact Finset.sum_eq_zero (fun j _ => by rw [theta_row_zero i j hi.1 hi.2.1 hi.2.2.1 hi.2.2.2]; norm_num) rw [← Finset.sum_subset (Finset.subset_univ ({a, u, v, b} : Finset (Fin n))) hz, hset, rowa, rowu, rowv, rowb] norm_num have hsupp : ∀ i j, G.weight i j = 0 → twoPathFlow a u v b i j = 0 := by intro i j hw unfold twoPathFlow fourEdgeSum rw [ep_zero_of_weight_zero G hau wau i j hw, ep_zero_of_weight_zero G hub wub i j hw, ep_zero_of_weight_zero G hav wav i j hw, ep_zero_of_weight_zero G hvb wvb i j hw] ring have hdiva : divF (twoPathFlow a u v b) a = 1 := by rw [twoPathFlow_divF, elementaryPosting_div_source a u hau, ep_div_off u b a hau hab, elementaryPosting_div_source a v hav, ep_div_off v b a hav hab] norm_num have hdiv0 : ∀ i, i ≠ a → i ≠ b → divF (twoPathFlow a u v b) i = 0 := by intro i hia hib rw [twoPathFlow_divF] by_cases hiu : i = u · rw [hiu, elementaryPosting_div_sink a u hau, elementaryPosting_div_source u b hub, ep_div_off a v u hua huv, ep_div_off v b u huv hub] norm_num · by_cases hiv : i = v · rw [hiv, ep_div_off a u v hva hvu, ep_div_off u b v hvu hvb, elementaryPosting_div_sink a v hav, elementaryPosting_div_source v b hvb] norm_num · rw [ep_div_off a u i hia hiu, ep_div_off u b i hiu hib, ep_div_off a v i hia hiv, ep_div_off v b i hiv hib] norm_num have hEpos : 0 < flowEnergy (twoPathFlow a u v b) := by rw [hE]; norm_num have hbound := pairMin_ge_inv_flowEnergy G hw01 hab (twoPathFlow a u v b) (twoPathFlow_antisym a u v b) hsupp hdiva hdiv0 hEpos rw [hE] at hbound norm_num at hbound exact hboundThe declaration pairMin_ge_one_via_two_paths proves that if every edge has weight either 0 or 1, and there exist two distinct paths from a to b that share no edges, then pairMin is at least 1. pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.leanTHEOREM twoPathFlow · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **The two-parallel-paths unit flow.** Half a unit of current along `a→u→b`, half along `a→v→b`. Antisymmetric by construction (a scaled sum of double-entry postings). -/ def twoPathFlow {n : ℕ} (a u v b : Fin n) : Fin n → Fin n → ℝ := fun i j => (1 / 2) * fourEdgeSum a u v b i jThe proof constructs an explicit flow, called twoPathFlow, that sends half a unit along each of the two paths. twoPathFlow · IndisputableMonolith/Foundation/PairKernelLattice3.leanTHEOREM pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.lean
/-- **Two-parallel-paths lower bound (graph-generic).** Let `a, u, v, b` be four distinct sites of a 0/1-weighted ledger graph, with the four edges `a—u`, `u—b`, `a—v`, `v—b` all present (weight `1`). Then `pairMin G a b ≥ 1`, even though `a, b` need not be adjacent: the unit flow that splits `½ : ½` between the two length-2 paths dissipates energy exactly `1`, and Thomson duality (`pairMin_ge_inv_flowEnergy`) turns that into the lower bound. Contrast the 1D chain, where a distance-2 pair has `pairMin ≤ ½` (`pairMin_band_le_inv_dist`) because no second parallel route exists — this is the smallest strict recurrence/transience witness. -/ theorem pairMin_ge_one_via_two_paths {n : ℕ} (G : WeightedLedgerGraph n) (hw01 : ∀ i j, G.weight i j = 0 ∨ G.weight i j = 1) {a u v b : Fin n} (hau : a ≠ u) (hav : a ≠ v) (hab : a ≠ b) (hub : u ≠ b) (hvb : v ≠ b) (huv : u ≠ v) (wau : G.weight a u = 1) (wub : G.weight u b = 1) (wav : G.weight a v = 1) (wvb : G.weight v b = 1) : (1:ℝ) ≤ pairMin G a b := by have hua := hau.symm have hva := hav.symm have hba := hab.symm have hbu := hub.symm have hbv := hvb.symm have hvu := huv.symm have htheta : ∀ i j : Fin n, twoPathFlow a u v b i j = (1 / 2) * ((if i = a ∧ j = u then (1:ℝ) else if i = u ∧ j = a then (-1:ℝ) else 0) + (if i = u ∧ j = b then (1:ℝ) else if i = b ∧ j = u then (-1:ℝ) else 0) + (if i = a ∧ j = v then (1:ℝ) else if i = v ∧ j = a then (-1:ℝ) else 0) + (if i = v ∧ j = b then (1:ℝ) else if i = b ∧ j = v then (-1:ℝ) else 0)) := by intro i j unfold twoPathFlow fourEdgeSum rw [ep_val hau i j, ep_val hub i j, ep_val hav i j, ep_val hvb i j] have tau_au : twoPathFlow a u v b a u = 1 / 2 := by rw [htheta a u, if_pos (⟨rfl, rfl⟩ : a = a ∧ u = u), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_neg (fun h => huv h.2), if_neg (fun h => hav h.1), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have tau_av : twoPathFlow a u v b a v = 1 / 2 := by rw [htheta a v, if_neg (fun h => hvu h.2), if_neg (fun h => hau h.1), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_pos (⟨rfl, rfl⟩ : a = a ∧ v = v), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have tau_ua : twoPathFlow a u v b u a = -1 / 2 := by rw [htheta u a, if_neg (fun h => hua h.1), if_pos (⟨rfl, rfl⟩ : u = u ∧ a = a), if_neg (fun h => hab h.2), if_neg (fun h => hub h.1), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have tau_ub : twoPathFlow a u v b u b = 1 / 2 := by rw [htheta u b, if_neg (fun h => hua h.1), if_neg (fun h => hba h.2), if_pos (⟨rfl, rfl⟩ : u = u ∧ b = b), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have tau_va : twoPathFlow a u v b v a = -1 / 2 := by rw [htheta v a, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_pos (⟨rfl, rfl⟩ : v = v ∧ a = a), if_neg (fun h => hab h.2), if_neg (fun h => hvb h.1)] norm_num have tau_vb : twoPathFlow a u v b v b = 1 / 2 := by rw [htheta v b, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_neg (fun h => hba h.2), if_pos (⟨rfl, rfl⟩ : v = v ∧ b = b)] norm_num have tau_bu : twoPathFlow a u v b b u = -1 / 2 := by rw [htheta b u, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ u = u), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_neg (fun h => huv h.2)] norm_num have tau_bv : twoPathFlow a u v b b v = -1 / 2 := by rw [htheta b v, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hvu h.2), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_pos (⟨rfl, rfl⟩ : b = b ∧ v = v)] norm_num have theta_a_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b a j = 0 := by intro j hju hjv rw [htheta a j, if_neg (fun h => hju h.2), if_neg (fun h => hau h.1), if_neg (fun h => hau h.1), if_neg (fun h => hab h.1), if_neg (fun h => hjv h.2), if_neg (fun h => hav h.1), if_neg (fun h => hav h.1), if_neg (fun h => hab h.1)] norm_num have theta_u_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b u j = 0 := by intro j hja hjb rw [htheta u j, if_neg (fun h => hua h.1), if_neg (fun h => hja h.2), if_neg (fun h => hjb h.2), if_neg (fun h => hub h.1), if_neg (fun h => hua h.1), if_neg (fun h => huv h.1), if_neg (fun h => huv h.1), if_neg (fun h => hub h.1)] norm_num have theta_v_off : ∀ j : Fin n, j ≠ a → j ≠ b → twoPathFlow a u v b v j = 0 := by intro j hja hjb rw [htheta v j, if_neg (fun h => hva h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvu h.1), if_neg (fun h => hvb h.1), if_neg (fun h => hva h.1), if_neg (fun h => hja h.2), if_neg (fun h => hjb h.2), if_neg (fun h => hvb h.1)] norm_num have theta_b_off : ∀ j : Fin n, j ≠ u → j ≠ v → twoPathFlow a u v b b j = 0 := by intro j hju hjv rw [htheta b j, if_neg (fun h => hba h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hbu h.1), if_neg (fun h => hju h.2), if_neg (fun h => hba h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hbv h.1), if_neg (fun h => hjv h.2)] norm_num have theta_row_zero : ∀ i j : Fin n, i ≠ a → i ≠ u → i ≠ v → i ≠ b → twoPathFlow a u v b i j = 0 := by intro i j hia hiu hiv hib rw [htheta i j, if_neg (fun h => hia h.1), if_neg (fun h => hiu h.1), if_neg (fun h => hiu h.1), if_neg (fun h => hib h.1), if_neg (fun h => hia h.1), if_neg (fun h => hiv h.1), if_neg (fun h => hiv h.1), if_neg (fun h => hib h.1)] norm_num have rowa : (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) → twoPathFlow a u v b a j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_a_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz, Finset.sum_pair huv, tau_au, tau_av] norm_num have rowu : (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) → twoPathFlow a u v b u j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_u_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz, Finset.sum_pair hab, tau_ua, tau_ub] norm_num have rowv : (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({a, b} : Finset (Fin n)) → twoPathFlow a u v b v j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_v_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({a, b} : Finset (Fin n))) hz, Finset.sum_pair hab, tau_va, tau_vb] norm_num have rowb : (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) = 1 / 2 := by have hz : ∀ j ∈ (Finset.univ : Finset (Fin n)), j ∉ ({u, v} : Finset (Fin n)) → twoPathFlow a u v b b j ^ 2 = 0 := by intro j _ hj simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hj rw [theta_b_off j hj.1 hj.2]; norm_num rw [← Finset.sum_subset (Finset.subset_univ ({u, v} : Finset (Fin n))) hz, Finset.sum_pair huv, tau_bu, tau_bv] norm_num have hset : (∑ i ∈ ({a, u, v, b} : Finset (Fin n)), ∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = (∑ j : Fin n, twoPathFlow a u v b a j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b u j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b v j ^ 2) + (∑ j : Fin n, twoPathFlow a u v b b j ^ 2) := by rw [Finset.sum_insert (by simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨hau, hav, hab⟩), Finset.sum_insert (by simp only [Finset.mem_insert, Finset.mem_singleton, not_or]; exact ⟨huv, hub⟩), Finset.sum_insert (by simp only [Finset.mem_singleton]; exact hvb), Finset.sum_singleton] ring have hE : flowEnergy (twoPathFlow a u v b) = 1 := by unfold flowEnergy have hz : ∀ i ∈ (Finset.univ : Finset (Fin n)), i ∉ ({a, u, v, b} : Finset (Fin n)) → (∑ j : Fin n, twoPathFlow a u v b i j ^ 2) = 0 := by intro i _ hi simp only [Finset.mem_insert, Finset.mem_singleton, not_or] at hi exact Finset.sum_eq_zero (fun j _ => by rw [theta_row_zero i j hi.1 hi.2.1 hi.2.2.1 hi.2.2.2]; norm_num) rw [← Finset.sum_subset (Finset.subset_univ ({a, u, v, b} : Finset (Fin n))) hz, hset, rowa, rowu, rowv, rowb] norm_num have hsupp : ∀ i j, G.weight i j = 0 → twoPathFlow a u v b i j = 0 := by intro i j hw unfold twoPathFlow fourEdgeSum rw [ep_zero_of_weight_zero G hau wau i j hw, ep_zero_of_weight_zero G hub wub i j hw, ep_zero_of_weight_zero G hav wav i j hw, ep_zero_of_weight_zero G hvb wvb i j hw] ring have hdiva : divF (twoPathFlow a u v b) a = 1 := by rw [twoPathFlow_divF, elementaryPosting_div_source a u hau, ep_div_off u b a hau hab, elementaryPosting_div_source a v hav, ep_div_off v b a hav hab] norm_num have hdiv0 : ∀ i, i ≠ a → i ≠ b → divF (twoPathFlow a u v b) i = 0 := by intro i hia hib rw [twoPathFlow_divF] by_cases hiu : i = u · rw [hiu, elementaryPosting_div_sink a u hau, elementaryPosting_div_source u b hub, ep_div_off a v u hua huv, ep_div_off v b u huv hub] norm_num · by_cases hiv : i = v · rw [hiv, ep_div_off a u v hva hvu, ep_div_off u b v hvu hvb, elementaryPosting_div_sink a v hav, elementaryPosting_div_source v b hvb] norm_num · rw [ep_div_off a u i hia hiu, ep_div_off u b i hiu hib, ep_div_off a v i hia hiv, ep_div_off v b i hiv hib] norm_num have hEpos : 0 < flowEnergy (twoPathFlow a u v b) := by rw [hE]; norm_num have hbound := pairMin_ge_inv_flowEnergy G hw01 hab (twoPathFlow a u v b) (twoPathFlow_antisym a u v b) hsupp hdiva hdiv0 hEpos rw [hE] at hbound norm_num at hbound exact hboundThe theorem is tagged THEOREM in the framework's machine-checked library, meaning it is proved with no unverified axioms. pairMin_ge_one_via_two_paths · IndisputableMonolith/Foundation/PairKernelLattice3.lean