Pith. sign in

IndisputableMonolith.Gravity.Analysis.EdgeTTDecomposition4D

IndisputableMonolith/Gravity/Analysis/EdgeTTDecomposition4D.lean · 417 lines · 56 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import Mathlib
   2
   3/-!
   4# Edge TT decomposition (4D), algebraic layer
   5
   6QG full-theory campaign, Wave 4 / lane W4-1 (`edge_tt_decomposition`),
   7smallest kernel-checked increment: the **linear-algebra** transverse-traceless
   8decomposition of symmetric `4 × 4` real matrices against a nonzero Euclidean
   9wave covector on `Fin 4`.
  10
  11## Tier tags (binding)
  12
  13* THEOREM: every named result in this file (kernel-checked; no `sorry`, no
  14  `admit`, no new axioms, no `native_decide`, no `: True` shells).
  15* This is the algebraic layer of the ledger closing name
  16  `edge_tt_decomposition`.  It does **not** decompose Regge EDGE
  17  perturbations on a 4D lattice, does **not** prove `S_RS_converges_EH_4d`,
  18  and does **not** flip `gap_action_recovery`.
  19
  20## Conventions (inherited from 3D `IsTTPolarization`)
  21
  22The 3D closer chain uses Euclidean trace, Euclidean transversality, and
  23symmetry.  This module lifts those three conjuncts to `Fin 4` (no Frobenius
  24pin).  Minkowski/null specialization for the Lorentzian continuum is
  25deferred; "two polarizations in 4D" is an explicit independent TT pair on
  26the axis wave vector (unnormalized integer entries).
  27
  28Expected axiom footprint: `[propext, Classical.choice, Quot.sound]`.
  29-/
  30
  31namespace IndisputableMonolith
  32namespace Gravity
  33namespace Analysis
  34namespace EdgeTTDecomposition4D
  35
  36open Matrix BigOperators
  37
  38noncomputable section
  39
  40abbrev Mat4 := Matrix (Fin 4) (Fin 4) ℝ
  41
  42def IsSymmetric (H : Mat4) : Prop :=
  43  ∀ i j : Fin 4, H i j = H j i
  44
  45def euclideanTrace (H : Mat4) : ℝ :=
  46  ∑ i : Fin 4, H i i
  47
  48def IsTraceless (H : Mat4) : Prop :=
  49  euclideanTrace H = 0
  50
  51def IsTransverse (m : Fin 4 → ℝ) (H : Mat4) : Prop :=
  52  ∀ i : Fin 4, ∑ j : Fin 4, H i j * m j = 0
  53
  54/-- Algebraic TT: symmetric, Euclidean-traceless, transverse. -/
  55def IsTT (m : Fin 4 → ℝ) (H : Mat4) : Prop :=
  56  IsSymmetric H ∧ IsTraceless H ∧ IsTransverse m H
  57
  58def momentumSq (m : Fin 4 → ℝ) : ℝ :=
  59  ∑ i : Fin 4, m i * m i
  60
  61def gaugePart (m v : Fin 4 → ℝ) : Mat4 :=
  62  fun i j => m i * v j + v i * m j
  63
  64def outerSq (m : Fin 4 → ℝ) : Mat4 :=
  65  fun i j => m i * m j
  66
  67def transverseProjector (m : Fin 4 → ℝ) : Mat4 :=
  68  (1 : Mat4) - (momentumSq m)⁻¹ • outerSq m
  69
  70def load (H : Mat4) (m : Fin 4 → ℝ) : Fin 4 → ℝ :=
  71  fun i => ∑ j : Fin 4, H i j * m j
  72
  73def dot (a b : Fin 4 → ℝ) : ℝ :=
  74  ∑ i : Fin 4, a i * b i
  75
  76def gaugeVector (m : Fin 4 → ℝ) (H : Mat4) : Fin 4 → ℝ :=
  77  fun i =>
  78    let w := load H m
  79    let s := momentumSq m
  80    w i / s - m i * dot w m / (2 * s ^ 2)
  81
  82def gaugeCorrected (m : Fin 4 → ℝ) (H : Mat4) : Mat4 :=
  83  H - gaugePart m (gaugeVector m H)
  84
  85def residualTrace (m : Fin 4 → ℝ) (H : Mat4) : ℝ :=
  86  euclideanTrace (gaugeCorrected m H) / 3
  87
  88def ttProject (m : Fin 4 → ℝ) (H : Mat4) : Mat4 :=
  89  gaugeCorrected m H - residualTrace m H • transverseProjector m
  90
  91/-! ## §1. Elementary identities -/
  92
  93theorem gaugePart_symmetric (m v : Fin 4 → ℝ) :
  94    IsSymmetric (gaugePart m v) := by
  95  intro i j; unfold gaugePart; ring
  96
  97theorem outerSq_symmetric (m : Fin 4 → ℝ) :
  98    IsSymmetric (outerSq m) := by
  99  intro i j; unfold outerSq; ring
 100
 101theorem transverseProjector_symmetric (m : Fin 4 → ℝ) :
 102    IsSymmetric (transverseProjector m) := by
 103  intro i j
 104  unfold transverseProjector
 105  simp only [sub_apply, smul_apply, smul_eq_mul, one_apply]
 106  rw [outerSq_symmetric m i j]
 107  cases' eq_or_ne i j with hij hij
 108  · subst hij; rfl
 109  · rw [if_neg hij, if_neg (Ne.symm hij)]
 110
 111theorem load_gaugePart (m v : Fin 4 → ℝ) (i : Fin 4) :
 112    load (gaugePart m v) m i =
 113      momentumSq m * v i + m i * dot v m := by
 114  unfold load gaugePart momentumSq dot
 115  calc
 116    ∑ j : Fin 4, (m i * v j + v i * m j) * m j
 117        = ∑ j : Fin 4, (m i * (v j * m j) + v i * (m j * m j)) := by
 118      refine Finset.sum_congr rfl fun j _ => by ring
 119    _ = (∑ j : Fin 4, m i * (v j * m j)) +
 120          (∑ j : Fin 4, v i * (m j * m j)) := Finset.sum_add_distrib
 121    _ = m i * ∑ j : Fin 4, v j * m j + v i * ∑ j : Fin 4, m j * m j := by
 122      simp [Finset.mul_sum]
 123    _ = (∑ j : Fin 4, m j * m j) * v i + m i * ∑ j : Fin 4, v j * m j := by
 124      ring
 125
 126theorem load_smul (c : ℝ) (H : Mat4) (m : Fin 4 → ℝ) (i : Fin 4) :
 127    load (c • H) m i = c * load H m i := by
 128  unfold load
 129  simp only [smul_apply, smul_eq_mul, mul_assoc]
 130  exact (Finset.mul_sum Finset.univ (fun j => H i j * m j) c).symm
 131
 132theorem load_sub (A B : Mat4) (m : Fin 4 → ℝ) (i : Fin 4) :
 133    load (A - B) m i = load A m i - load B m i := by
 134  unfold load; simp [sub_mul, Finset.sum_sub_distrib]
 135
 136theorem load_one (m : Fin 4 → ℝ) (i : Fin 4) :
 137    load (1 : Mat4) m i = m i := by
 138  unfold load
 139  simp only [one_apply]
 140  rw [Finset.sum_eq_single (a := i)]
 141  · simp
 142  · intro j _ hj
 143    simp [Ne.symm hj]
 144  · intro hi
 145    exact (hi (Finset.mem_univ i)).elim
 146
 147theorem load_outerSq (m : Fin 4 → ℝ) (i : Fin 4) :
 148    load (outerSq m) m i = momentumSq m * m i := by
 149  unfold load outerSq momentumSq
 150  calc
 151    ∑ j : Fin 4, (m i * m j) * m j
 152        = m i * ∑ j : Fin 4, m j * m j := by
 153      simp [mul_assoc, Finset.mul_sum]
 154    _ = (∑ j : Fin 4, m j * m j) * m i := by ring
 155
 156theorem load_transverseProjector (m : Fin 4 → ℝ) (hm : momentumSq m ≠ 0)
 157    (i : Fin 4) :
 158    load (transverseProjector m) m i = 0 := by
 159  unfold transverseProjector
 160  rw [load_sub, load_one, load_smul, load_outerSq]
 161  field_simp [hm]; ring
 162
 163/-! ## §2. Gauge removal -/
 164
 165theorem dot_gaugeVector (m : Fin 4 → ℝ) (H : Mat4)
 166    (hm : momentumSq m ≠ 0) :
 167    dot (gaugeVector m H) m = dot (load H m) m / (2 * momentumSq m) := by
 168  set w := load H m with hw
 169  set s := momentumSq m with hs
 170  have hs0 : s ≠ 0 := hm
 171  set d := dot w m with hd
 172  -- expand
 173  have hexpand :
 174      dot (gaugeVector m H) m =
 175        ∑ i : Fin 4, (w i / s - m i * d / (2 * s ^ 2)) * m i := by
 176    simp [dot, gaugeVector, w, s, d]
 177  have hsplit :
 178      ∑ i : Fin 4, (w i / s - m i * d / (2 * s ^ 2)) * m i =
 179        ∑ i : Fin 4, (w i / s) * m i -
 180          ∑ i : Fin 4, (m i * d / (2 * s ^ 2)) * m i := by
 181    simp [sub_mul, Finset.sum_sub_distrib]
 182  have h1 : ∑ i : Fin 4, (w i / s) * m i = d / s := by
 183    simp only [d, dot, div_eq_mul_inv, mul_assoc]
 184    -- ∑ (s⁻¹ * wᵢ) * mᵢ = s⁻¹ * ∑ wᵢ mᵢ
 185    have :
 186        ∑ i : Fin 4, s⁻¹ * w i * m i = s⁻¹ * ∑ i : Fin 4, w i * m i := by
 187      simp [mul_assoc, ← Finset.mul_sum]
 188    convert this using 1
 189    · refine Finset.sum_congr rfl fun i _ => by ring
 190    · ring
 191  have h2 : ∑ i : Fin 4, (m i * d / (2 * s ^ 2)) * m i = s * d / (2 * s ^ 2) := by
 192    have :
 193        ∑ i : Fin 4, m i * m i * (d / (2 * s ^ 2)) =
 194          (∑ i : Fin 4, m i * m i) * (d / (2 * s ^ 2)) :=
 195      (Finset.sum_mul _ _ _).symm
 196    calc
 197      ∑ i : Fin 4, (m i * d / (2 * s ^ 2)) * m i
 198          = ∑ i : Fin 4, m i * m i * (d / (2 * s ^ 2)) := by
 199        refine Finset.sum_congr rfl fun i _ => by ring
 200      _ = (∑ i : Fin 4, m i * m i) * (d / (2 * s ^ 2)) := this
 201      _ = s * d / (2 * s ^ 2) := by
 202        simp [s, momentumSq]; ring
 203  calc
 204    dot (gaugeVector m H) m
 205        = ∑ i : Fin 4, (w i / s - m i * d / (2 * s ^ 2)) * m i := hexpand
 206    _ = d / s - s * d / (2 * s ^ 2) := by rw [hsplit, h1, h2]
 207    _ = d / (2 * s) := by field_simp [hs0]; ring
 208    _ = dot (load H m) m / (2 * momentumSq m) := by
 209        simp [d, w, s]
 210
 211theorem load_gaugePart_gaugeVector (m : Fin 4 → ℝ) (H : Mat4)
 212    (hm : momentumSq m ≠ 0) (i : Fin 4) :
 213    load (gaugePart m (gaugeVector m H)) m i = load H m i := by
 214  set w := load H m
 215  set s := momentumSq m
 216  set v := gaugeVector m H
 217  have hs0 : s ≠ 0 := hm
 218  have hL := load_gaugePart m v i
 219  have hdot := dot_gaugeVector m H hm
 220  have hvi : v i = w i / s - m i * dot w m / (2 * s ^ 2) := rfl
 221  have key : s * v i + m i * dot v m = w i := by
 222    rw [hvi, show dot v m = dot w m / (2 * s) from hdot]
 223    field_simp [hs0]; ring
 224  rw [hL]; simpa [s, w, v] using key
 225
 226theorem gaugeCorrected_transverse (m : Fin 4 → ℝ) (H : Mat4)
 227    (hm : momentumSq m ≠ 0) :
 228    IsTransverse m (gaugeCorrected m H) := by
 229  intro i
 230  change load (gaugeCorrected m H) m i = 0
 231  simp [gaugeCorrected, load_sub, load_gaugePart_gaugeVector m H hm]
 232
 233theorem gaugeCorrected_symmetric (m : Fin 4 → ℝ) (H : Mat4)
 234    (hH : IsSymmetric H) :
 235    IsSymmetric (gaugeCorrected m H) := by
 236  intro i j
 237  simp only [gaugeCorrected, sub_apply]
 238  rw [hH i j, gaugePart_symmetric m (gaugeVector m H) i j]
 239
 240/-! ## §3. TT projection -/
 241
 242theorem euclideanTrace_smul (c : ℝ) (H : Mat4) :
 243    euclideanTrace (c • H) = c * euclideanTrace H := by
 244  unfold euclideanTrace
 245  simp only [smul_apply, smul_eq_mul]
 246  exact (Finset.mul_sum Finset.univ (fun i => H i i) c).symm
 247
 248theorem euclideanTrace_sub (A B : Mat4) :
 249    euclideanTrace (A - B) = euclideanTrace A - euclideanTrace B := by
 250  unfold euclideanTrace; simp [Finset.sum_sub_distrib]
 251
 252theorem euclideanTrace_one : euclideanTrace (1 : Mat4) = 4 := by
 253  unfold euclideanTrace
 254  rw [Fin.sum_univ_four]
 255  simp
 256  norm_num
 257
 258theorem euclideanTrace_outerSq (m : Fin 4 → ℝ) :
 259    euclideanTrace (outerSq m) = momentumSq m := rfl
 260
 261theorem euclideanTrace_transverseProjector (m : Fin 4 → ℝ)
 262    (hm : momentumSq m ≠ 0) :
 263    euclideanTrace (transverseProjector m) = 3 := by
 264  unfold transverseProjector
 265  rw [euclideanTrace_sub, euclideanTrace_smul, euclideanTrace_one,
 266    euclideanTrace_outerSq]
 267  field_simp [hm]; ring
 268
 269theorem ttProject_symmetric (m : Fin 4 → ℝ) (H : Mat4)
 270    (hH : IsSymmetric H) :
 271    IsSymmetric (ttProject m H) := by
 272  intro i j
 273  simp only [ttProject, sub_apply, smul_apply, smul_eq_mul]
 274  rw [gaugeCorrected_symmetric m H hH i j,
 275    transverseProjector_symmetric m i j]
 276
 277theorem ttProject_transverse (m : Fin 4 → ℝ) (H : Mat4)
 278    (hm : momentumSq m ≠ 0) :
 279    IsTransverse m (ttProject m H) := by
 280  intro i
 281  change load (ttProject m H) m i = 0
 282  have h1 : load (gaugeCorrected m H) m i = 0 :=
 283    gaugeCorrected_transverse m H hm i
 284  have h2 := load_transverseProjector m hm i
 285  simp [ttProject, load_sub, load_smul, h1, h2]
 286
 287theorem ttProject_traceless (m : Fin 4 → ℝ) (H : Mat4)
 288    (hm : momentumSq m ≠ 0) :
 289    IsTraceless (ttProject m H) := by
 290  unfold IsTraceless ttProject residualTrace
 291  rw [euclideanTrace_sub, euclideanTrace_smul,
 292    euclideanTrace_transverseProjector m hm]
 293  ring
 294
 295theorem ttProject_isTT (m : Fin 4 → ℝ) (H : Mat4)
 296    (hH : IsSymmetric H) (hm : momentumSq m ≠ 0) :
 297    IsTT m (ttProject m H) :=
 298  ⟨ttProject_symmetric m H hH, ttProject_traceless m H hm,
 299    ttProject_transverse m H hm⟩
 300
 301/-- **THEOREM (algebraic `edge_tt_decomposition` layer).**
 302Every symmetric `4 × 4` matrix against a nonzero Euclidean wave covector
 303decomposes as TT + gauge + transverse-trace part. -/
 304theorem exists_edgeTTDecomposition (m : Fin 4 → ℝ) (H : Mat4)
 305    (hH : IsSymmetric H) (hm : momentumSq m ≠ 0) :
 306    H = ttProject m H + gaugePart m (gaugeVector m H) +
 307        residualTrace m H • transverseProjector m ∧
 308      IsTT m (ttProject m H) := by
 309  refine ⟨?_, ttProject_isTT m H hH hm⟩
 310  unfold ttProject gaugeCorrected; abel
 311
 312theorem exists_edgeTTDecomposition' (m : Fin 4 → ℝ) (H : Mat4)
 313    (hH : IsSymmetric H) (hm : momentumSq m ≠ 0) :
 314    ∃ (H_TT : Mat4) (v : Fin 4 → ℝ) (β : ℝ),
 315      H = H_TT + gaugePart m v + β • transverseProjector m ∧
 316        IsTT m H_TT :=
 317  ⟨ttProject m H, gaugeVector m H, residualTrace m H,
 318    exists_edgeTTDecomposition m H hH hm⟩
 319
 320/-! ## §4. Nondegeneracy: two independent unnormalized TT polarizations -/
 321
 322def axisWave : Fin 4 → ℝ
 323  | 0 => 1
 324  | 1 => 0
 325  | 2 => 0
 326  | 3 => 0
 327
 328theorem axisWave_momentumSq : momentumSq axisWave = 1 := by
 329  unfold momentumSq axisWave
 330  simp [Fin.sum_univ_four]
 331
 332/-- Plus polarization `diag(0,0,1,−1)` (unnormalized). -/
 333def axisTTPlus : Mat4
 334  | 0, 0 => 0 | 0, 1 => 0 | 0, 2 => 0 | 0, 3 => 0
 335  | 1, 0 => 0 | 1, 1 => 0 | 1, 2 => 0 | 1, 3 => 0
 336  | 2, 0 => 0 | 2, 1 => 0 | 2, 2 => 1 | 2, 3 => 0
 337  | 3, 0 => 0 | 3, 1 => 0 | 3, 2 => 0 | 3, 3 => -1
 338
 339/-- Cross polarization `H₂₃ = H₃₂ = 1` (unnormalized). -/
 340def axisTTCross : Mat4
 341  | 0, 0 => 0 | 0, 1 => 0 | 0, 2 => 0 | 0, 3 => 0
 342  | 1, 0 => 0 | 1, 1 => 0 | 1, 2 => 0 | 1, 3 => 0
 343  | 2, 0 => 0 | 2, 1 => 0 | 2, 2 => 0 | 2, 3 => 1
 344  | 3, 0 => 0 | 3, 1 => 0 | 3, 2 => 1 | 3, 3 => 0
 345
 346theorem axisTTPlus_isTT : IsTT axisWave axisTTPlus := by
 347  refine ⟨?_, ?_, ?_⟩
 348  · intro i j; fin_cases i <;> fin_cases j <;> rfl
 349  · unfold IsTraceless euclideanTrace axisTTPlus
 350    simp [Fin.sum_univ_four]
 351  · intro i
 352    fin_cases i <;> simp [axisTTPlus, axisWave, Fin.sum_univ_four]
 353
 354theorem axisTTCross_isTT : IsTT axisWave axisTTCross := by
 355  refine ⟨?_, ?_, ?_⟩
 356  · intro i j; fin_cases i <;> fin_cases j <;> rfl
 357  · unfold IsTraceless euclideanTrace axisTTCross
 358    simp [Fin.sum_univ_four]
 359  · intro i
 360    fin_cases i <;> simp [axisTTCross, axisWave, Fin.sum_univ_four]
 361
 362theorem axisTTPlus_ne_zero : axisTTPlus ≠ 0 := by
 363  intro h
 364  have := congrArg (fun M : Mat4 => M 2 2) h
 365  simp [axisTTPlus] at this
 366
 367theorem axisTTCross_ne_zero : axisTTCross ≠ 0 := by
 368  intro h
 369  have := congrArg (fun M : Mat4 => M 2 3) h
 370  simp [axisTTCross] at this
 371
 372theorem axisTT_independent {a b : ℝ}
 373    (h : a • axisTTPlus + b • axisTTCross = 0) :
 374    a = 0 ∧ b = 0 := by
 375  have h22 := congrArg (fun M : Mat4 => M 2 2) h
 376  have h23 := congrArg (fun M : Mat4 => M 2 3) h
 377  simp [axisTTPlus, axisTTCross, smul_eq_mul] at h22 h23
 378  exact ⟨h22, h23⟩
 379
 380/-! ## §5. Decoy and zero-momentum degeneracy -/
 381
 382def decoyLongitudinal : Mat4 :=
 383  gaugePart axisWave fun i => if i = 0 then (1 : ℝ) else 0
 384
 385theorem decoyLongitudinal_symmetric : IsSymmetric decoyLongitudinal :=
 386  gaugePart_symmetric _ _
 387
 388theorem decoyLongitudinal_not_transverse :
 389    ¬ IsTransverse axisWave decoyLongitudinal := by
 390  intro h
 391  have h0 := h 0
 392  simp [decoyLongitudinal, gaugePart, axisWave, Fin.sum_univ_four] at h0
 393
 394theorem decoy_ttProject_isTT :
 395    IsTT axisWave (ttProject axisWave decoyLongitudinal) :=
 396  ttProject_isTT axisWave decoyLongitudinal decoyLongitudinal_symmetric
 397    (by simp [axisWave_momentumSq])
 398
 399theorem decoy_projection_restores_transverse :
 400    IsTransverse axisWave (ttProject axisWave decoyLongitudinal) :=
 401  decoy_ttProject_isTT.2.2
 402
 403theorem zero_wave_momentumSq :
 404    momentumSq (fun _ : Fin 4 => (0 : ℝ)) = 0 := by
 405  unfold momentumSq; simp
 406
 407theorem decomposition_hypothesis_fails_at_zero :
 408    ¬ (momentumSq (fun _ : Fin 4 => (0 : ℝ)) ≠ 0) := by
 409  simp [zero_wave_momentumSq]
 410
 411end
 412
 413end EdgeTTDecomposition4D
 414end Analysis
 415end Gravity
 416end IndisputableMonolith
 417

source mirrored from github.com/jonwashburn/shape-of-logic