CubicPathwidth.Alg.Proofs2.K2Theorem2a

Source file CubicPathwidth/Alg/Proofs2/K2Theorem2a.lean of the Lean project (how it is built).

import CubicPathwidth.Alg.Plan2
import CubicPathwidth.Alg.Proofs.Targets
import CubicPathwidth.T2.TargetA

/-!
# K2: Theorem 2(a) realized by `algo_T2a`

Route (mirror of `T2.target2a_of_bridge`, with the plain-sweep layout bridge replaced by
`AlgoT2aWidth` and the rational labels obtained from real ones by `LabelTransfer`):
for a graph `S` of maximum degree at most `4` on `Fin n`, `GoodLabels4` at a large
radius gives real injective labels `y` whose outer frontiers have at most
`(idealSup (radiusCorr4 R) + ε/2) n` vertices; `LabelTransfer` (on `ofSimpleGraph S`,
renamed by `Fin.val`) gives rational labels `Y` with the same frontier sizes at every
rational threshold; `AlgoT2aWidth` bounds the width by that quantity; `IdealLimit`
bounds `idealSup (radiusCorr4 R)` by `F4 + ε/2`; `algoT2aExported` gives the path
decomposition.
-/

noncomputable section

namespace CubicPathwidth.Alg

open Graph

/-- **K2.** Theorem 2(a) is realized by `algo_T2a`, given the width bridge for the
plain sweep, the relabelling of `ofSimpleGraph`, and the label transfer. -/
theorem algoT2aRealizesTheorem2a_of (hW : AlgoT2aWidth) (hX1 : RelabelOfSimpleGraph)
    (hX4 : LabelTransfer) : AlgoT2aRealizesTheorem2a := by
  unfold AlgoT2aRealizesTheorem2a
  intro h1 ε hε
  have hε2 : 0 < ε / 2 := by linarith
  -- a radius whose ideal supremum is within ε/2 of F₄
  obtain ⟨R₀, hR₀⟩ :=
    (Metric.tendsto_atTop.mp (T2.idealLimit_of_bridge T2.bridge)) (ε / 2) hε2
  set R := max R₀ 2 with hR
  have hRle : R₀ ≤ R := le_max_left _ _
  have hR2 : 2 ≤ R := le_max_right _ _
  have hclose : T2.idealSup (T2.radiusCorr4 R) ≤ T2.F4 + ε / 2 := by
    have := hR₀ R hRle
    rw [Real.dist_eq] at this
    linarith [(abs_lt.mp this).2]
  obtain ⟨N, hN⟩ :=
    T2.goodLabels4_of_star (T2.starFour_of T2.slepian T2.bridge h1) R hR2 (ε / 2) hε2
  refine ⟨N, fun n hn S _ hS => ?_⟩
  obtain ⟨y, hy, hfr⟩ := hN n hn S hS
  have hWF : (Graph.ofSimpleGraph S).WF := (ofSimpleGraphSpec n S).1
  obtain ⟨Y, hYinj, -, hout, -, -, -⟩ :=
    hX4 (Graph.ofSimpleGraph S) n S Fin.val hWF (hX1 n S) y hy
  refine ⟨Y, algoT2aExported n S Y, ?_⟩
  have hbd : ∀ t : ℚ, ((outerFr (Graph.ofSimpleGraph S) Y t).length : ℝ) ≤
      (T2.idealSup (T2.radiusCorr4 R) + ε / 2) * n := by
    intro t
    obtain ⟨s, -, hs⟩ := hout t
    rw [hs]
    exact hfr s
  have hw := hW (Graph.ofSimpleGraph S) hWF Y hYinj _ hbd
  have hn : (0 : ℝ) ≤ n := Nat.cast_nonneg n
  refine le_trans hw ?_
  refine mul_le_mul_of_nonneg_right ?_ hn
  linarith

end CubicPathwidth.Alg

#print axioms CubicPathwidth.Alg.algoT2aRealizesTheorem2a_of
Back to top