Pith. sign in

IndisputableMonolith.Gravity.FreudenthalLengthChainEndpointCert

IndisputableMonolith/Gravity/FreudenthalLengthChainEndpointCert.lean · 438 lines · 39 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import IndisputableMonolith.Geometry.FreudenthalCubeTriangulation
   2import IndisputableMonolith.Geometry.SchlaefliTetrahedronProof
   3
   4/-!
   5# Freudenthal length-chain Schläfli summand certificates
   6
   7Full `6 × 6` evaluation of `schlaefliPolySummandNorm` at `freudenthalTetSqEdges`, and the
   8induced closed-form `dihedralClosedDerivLength` table for
   9`freudenthalLocalPairClosedFormSchlaefliCoeff`.
  10-/
  11
  12namespace IndisputableMonolith
  13namespace Gravity
  14namespace FreudenthalLengthChainEndpointCert
  15
  16open Geometry
  17open CayleyMengerPolynomial
  18open FreudenthalCubeTriangulation
  19open SchlaefliTetrahedronProof
  20
  21set_option maxHeartbeats 20000000
  22
  23/-- Evaluated rationalized Schläfli summand table at `freudenthalTetSqEdges`. -/
  24def freudenthalSchlaefliPolySummandNormTable : Fin 6 → Fin 6 → ℝ
  25  | e, k =>
  26      match e, k with
  27      | 0, 0 => 0
  28      | 0, 1 => 0
  29      | 0, 2 => 0
  30      | 0, 3 => 0
  31      | 0, 4 => -1
  32      | 0, 5 => 2
  33      | 1, 0 => 0
  34      | 1, 1 => 2
  35      | 1, 2 => -2
  36      | 1, 3 => -4
  37      | 1, 4 => 4
  38      | 1, 5 => -2
  39      | 2, 0 => 0
  40      | 2, 1 => -3
  41      | 2, 2 => 2
  42      | 2, 3 => 6
  43      | 2, 4 => -3
  44      | 2, 5 => 0
  45      | 3, 0 => 0
  46      | 3, 1 => -2
  47      | 3, 2 => 2
  48      | 3, 3 => 2
  49      | 3, 4 => -2
  50      | 3, 5 => 0
  51      | 4, 0 => -2
  52      | 4, 1 => 4
  53      | 4, 2 => -2
  54      | 4, 3 => -4
  55      | 4, 4 => 2
  56      | 4, 5 => 0
  57      | 5, 0 => 2
  58      | 5, 1 => -1
  59      | 5, 2 => 0
  60      | 5, 3 => 0
  61      | 5, 4 => 0
  62      | 5, 5 => 0
  63
  64theorem snorm_zero_0_0 :
  65    schlaefliPolySummandNorm freudenthalTetSqEdges 0 0 = 0 := by
  66  rw [schlaefliPolySummandNorm_eq_num_div_den]
  67  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
  68    DihedralCayleyMenger.oppositeCMVertices
  69  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
  70  norm_num
  71
  72theorem snorm_zero_0_1 :
  73    schlaefliPolySummandNorm freudenthalTetSqEdges 0 1 = 0 := by
  74  rw [schlaefliPolySummandNorm_eq_num_div_den]
  75  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
  76    DihedralCayleyMenger.oppositeCMVertices
  77  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
  78  norm_num
  79
  80theorem snorm_zero_0_2 :
  81    schlaefliPolySummandNorm freudenthalTetSqEdges 0 2 = 0 := by
  82  rw [schlaefliPolySummandNorm_eq_num_div_den]
  83  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
  84    DihedralCayleyMenger.oppositeCMVertices
  85  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
  86  norm_num
  87
  88theorem snorm_zero_0_3 :
  89    schlaefliPolySummandNorm freudenthalTetSqEdges 0 3 = 0 := by
  90  rw [schlaefliPolySummandNorm_eq_num_div_den]
  91  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
  92    DihedralCayleyMenger.oppositeCMVertices
  93  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
  94  norm_num
  95
  96theorem snorm_0_4 :
  97    schlaefliPolySummandNorm freudenthalTetSqEdges 0 4 = -1 := by
  98  rw [schlaefliPolySummandNorm_eq_num_div_den]
  99  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 100    DihedralCayleyMenger.oppositeCMVertices
 101  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 102  norm_num
 103
 104theorem snorm_0_5 :
 105    schlaefliPolySummandNorm freudenthalTetSqEdges 0 5 = 2 := by
 106  rw [schlaefliPolySummandNorm_eq_num_div_den]
 107  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 108    DihedralCayleyMenger.oppositeCMVertices
 109  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 110  norm_num
 111
 112theorem snorm_zero_1_0 :
 113    schlaefliPolySummandNorm freudenthalTetSqEdges 1 0 = 0 := by
 114  rw [schlaefliPolySummandNorm_eq_num_div_den]
 115  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 116    DihedralCayleyMenger.oppositeCMVertices
 117  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 118  norm_num
 119
 120theorem snorm_1_1 :
 121    schlaefliPolySummandNorm freudenthalTetSqEdges 1 1 = 2 := by
 122  rw [schlaefliPolySummandNorm_eq_num_div_den]
 123  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 124    DihedralCayleyMenger.oppositeCMVertices
 125  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 126  norm_num
 127
 128theorem snorm_1_2 :
 129    schlaefliPolySummandNorm freudenthalTetSqEdges 1 2 = -2 := by
 130  rw [schlaefliPolySummandNorm_eq_num_div_den]
 131  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 132    DihedralCayleyMenger.oppositeCMVertices
 133  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 134  norm_num
 135
 136theorem snorm_1_3 :
 137    schlaefliPolySummandNorm freudenthalTetSqEdges 1 3 = -4 := by
 138  rw [schlaefliPolySummandNorm_eq_num_div_den]
 139  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 140    DihedralCayleyMenger.oppositeCMVertices
 141  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 142  norm_num
 143
 144theorem snorm_1_4 :
 145    schlaefliPolySummandNorm freudenthalTetSqEdges 1 4 = 4 := by
 146  rw [schlaefliPolySummandNorm_eq_num_div_den]
 147  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 148    DihedralCayleyMenger.oppositeCMVertices
 149  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 150  norm_num
 151
 152theorem snorm_1_5 :
 153    schlaefliPolySummandNorm freudenthalTetSqEdges 1 5 = -2 := by
 154  rw [schlaefliPolySummandNorm_eq_num_div_den]
 155  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 156    DihedralCayleyMenger.oppositeCMVertices
 157  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 158  norm_num
 159
 160theorem snorm_zero_2_0 :
 161    schlaefliPolySummandNorm freudenthalTetSqEdges 2 0 = 0 := by
 162  rw [schlaefliPolySummandNorm_eq_num_div_den]
 163  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 164    DihedralCayleyMenger.oppositeCMVertices
 165  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 166  norm_num
 167
 168theorem snorm_2_1 :
 169    schlaefliPolySummandNorm freudenthalTetSqEdges 2 1 = -3 := by
 170  rw [schlaefliPolySummandNorm_eq_num_div_den]
 171  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 172    DihedralCayleyMenger.oppositeCMVertices
 173  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 174  norm_num
 175
 176theorem snorm_2_2 :
 177    schlaefliPolySummandNorm freudenthalTetSqEdges 2 2 = 2 := by
 178  rw [schlaefliPolySummandNorm_eq_num_div_den]
 179  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 180    DihedralCayleyMenger.oppositeCMVertices
 181  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 182  norm_num
 183
 184theorem snorm_2_3 :
 185    schlaefliPolySummandNorm freudenthalTetSqEdges 2 3 = 6 := by
 186  rw [schlaefliPolySummandNorm_eq_num_div_den]
 187  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 188    DihedralCayleyMenger.oppositeCMVertices
 189  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 190  norm_num
 191
 192theorem snorm_2_4 :
 193    schlaefliPolySummandNorm freudenthalTetSqEdges 2 4 = -3 := by
 194  rw [schlaefliPolySummandNorm_eq_num_div_den]
 195  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 196    DihedralCayleyMenger.oppositeCMVertices
 197  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 198  norm_num
 199
 200theorem snorm_zero_2_5 :
 201    schlaefliPolySummandNorm freudenthalTetSqEdges 2 5 = 0 := by
 202  rw [schlaefliPolySummandNorm_eq_num_div_den]
 203  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 204    DihedralCayleyMenger.oppositeCMVertices
 205  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 206  norm_num
 207
 208theorem snorm_zero_3_0 :
 209    schlaefliPolySummandNorm freudenthalTetSqEdges 3 0 = 0 := by
 210  rw [schlaefliPolySummandNorm_eq_num_div_den]
 211  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 212    DihedralCayleyMenger.oppositeCMVertices
 213  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 214  norm_num
 215
 216theorem snorm_3_1 :
 217    schlaefliPolySummandNorm freudenthalTetSqEdges 3 1 = -2 := by
 218  rw [schlaefliPolySummandNorm_eq_num_div_den]
 219  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 220    DihedralCayleyMenger.oppositeCMVertices
 221  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 222  norm_num
 223
 224theorem snorm_3_2 :
 225    schlaefliPolySummandNorm freudenthalTetSqEdges 3 2 = 2 := by
 226  rw [schlaefliPolySummandNorm_eq_num_div_den]
 227  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 228    DihedralCayleyMenger.oppositeCMVertices
 229  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 230  norm_num
 231
 232theorem snorm_3_3 :
 233    schlaefliPolySummandNorm freudenthalTetSqEdges 3 3 = 2 := by
 234  rw [schlaefliPolySummandNorm_eq_num_div_den]
 235  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 236    DihedralCayleyMenger.oppositeCMVertices
 237  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 238  norm_num
 239
 240theorem snorm_3_4 :
 241    schlaefliPolySummandNorm freudenthalTetSqEdges 3 4 = -2 := by
 242  rw [schlaefliPolySummandNorm_eq_num_div_den]
 243  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 244    DihedralCayleyMenger.oppositeCMVertices
 245  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 246  norm_num
 247
 248theorem snorm_zero_3_5 :
 249    schlaefliPolySummandNorm freudenthalTetSqEdges 3 5 = 0 := by
 250  rw [schlaefliPolySummandNorm_eq_num_div_den]
 251  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 252    DihedralCayleyMenger.oppositeCMVertices
 253  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 254  norm_num
 255
 256theorem snorm_4_0 :
 257    schlaefliPolySummandNorm freudenthalTetSqEdges 4 0 = -2 := by
 258  rw [schlaefliPolySummandNorm_eq_num_div_den]
 259  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 260    DihedralCayleyMenger.oppositeCMVertices
 261  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 262  norm_num
 263
 264theorem snorm_4_1 :
 265    schlaefliPolySummandNorm freudenthalTetSqEdges 4 1 = 4 := by
 266  rw [schlaefliPolySummandNorm_eq_num_div_den]
 267  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 268    DihedralCayleyMenger.oppositeCMVertices
 269  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 270  norm_num
 271
 272theorem snorm_4_2 :
 273    schlaefliPolySummandNorm freudenthalTetSqEdges 4 2 = -2 := by
 274  rw [schlaefliPolySummandNorm_eq_num_div_den]
 275  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 276    DihedralCayleyMenger.oppositeCMVertices
 277  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 278  norm_num
 279
 280theorem snorm_4_3 :
 281    schlaefliPolySummandNorm freudenthalTetSqEdges 4 3 = -4 := by
 282  rw [schlaefliPolySummandNorm_eq_num_div_den]
 283  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 284    DihedralCayleyMenger.oppositeCMVertices
 285  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 286  norm_num
 287
 288theorem snorm_4_4 :
 289    schlaefliPolySummandNorm freudenthalTetSqEdges 4 4 = 2 := by
 290  rw [schlaefliPolySummandNorm_eq_num_div_den]
 291  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 292    DihedralCayleyMenger.oppositeCMVertices
 293  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 294  norm_num
 295
 296theorem snorm_zero_4_5 :
 297    schlaefliPolySummandNorm freudenthalTetSqEdges 4 5 = 0 := by
 298  rw [schlaefliPolySummandNorm_eq_num_div_den]
 299  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 300    DihedralCayleyMenger.oppositeCMVertices
 301  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 302  norm_num
 303
 304theorem snorm_5_0 :
 305    schlaefliPolySummandNorm freudenthalTetSqEdges 5 0 = 2 := by
 306  rw [schlaefliPolySummandNorm_eq_num_div_den]
 307  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 308    DihedralCayleyMenger.oppositeCMVertices
 309  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 310  norm_num
 311
 312theorem snorm_5_1 :
 313    schlaefliPolySummandNorm freudenthalTetSqEdges 5 1 = -1 := by
 314  rw [schlaefliPolySummandNorm_eq_num_div_den]
 315  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 316    DihedralCayleyMenger.oppositeCMVertices
 317  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 318  norm_num
 319
 320theorem snorm_zero_5_2 :
 321    schlaefliPolySummandNorm freudenthalTetSqEdges 5 2 = 0 := by
 322  rw [schlaefliPolySummandNorm_eq_num_div_den]
 323  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 324    DihedralCayleyMenger.oppositeCMVertices
 325  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 326  norm_num
 327
 328theorem snorm_zero_5_3 :
 329    schlaefliPolySummandNorm freudenthalTetSqEdges 5 3 = 0 := by
 330  rw [schlaefliPolySummandNorm_eq_num_div_den]
 331  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 332    DihedralCayleyMenger.oppositeCMVertices
 333  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 334  norm_num
 335
 336theorem snorm_zero_5_4 :
 337    schlaefliPolySummandNorm freudenthalTetSqEdges 5 4 = 0 := by
 338  rw [schlaefliPolySummandNorm_eq_num_div_den]
 339  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 340    DihedralCayleyMenger.oppositeCMVertices
 341  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 342  norm_num
 343
 344theorem snorm_zero_5_5 :
 345    schlaefliPolySummandNorm freudenthalTetSqEdges 5 5 = 0 := by
 346  rw [schlaefliPolySummandNorm_eq_num_div_den]
 347  unfold schlaefliPolySummandNum schlaefliPolySummandDen freudenthalTetSqEdges
 348    DihedralCayleyMenger.oppositeCMVertices
 349  simp [CofactorPolynomial.cmCofactor3Poly, CofactorPolynomial.cmCofactorPartial]
 350  norm_num
 351
 352/-- The lookup table matches the evaluated rationalized Schläfli summands. -/
 353theorem freudenthalSchlaefliPolySummandNorm_eq_table (e k : Fin 6) :
 354    schlaefliPolySummandNorm freudenthalTetSqEdges e k =
 355      freudenthalSchlaefliPolySummandNormTable e k := by
 356  match e, k with
 357  | 0, 0 => exact snorm_zero_0_0
 358  | 0, 1 => exact snorm_zero_0_1
 359  | 0, 2 => exact snorm_zero_0_2
 360  | 0, 3 => exact snorm_zero_0_3
 361  | 0, 4 => exact snorm_0_4
 362  | 0, 5 => exact snorm_0_5
 363  | 1, 0 => exact snorm_zero_1_0
 364  | 1, 1 => exact snorm_1_1
 365  | 1, 2 => exact snorm_1_2
 366  | 1, 3 => exact snorm_1_3
 367  | 1, 4 => exact snorm_1_4
 368  | 1, 5 => exact snorm_1_5
 369  | 2, 0 => exact snorm_zero_2_0
 370  | 2, 1 => exact snorm_2_1
 371  | 2, 2 => exact snorm_2_2
 372  | 2, 3 => exact snorm_2_3
 373  | 2, 4 => exact snorm_2_4
 374  | 2, 5 => exact snorm_zero_2_5
 375  | 3, 0 => exact snorm_zero_3_0
 376  | 3, 1 => exact snorm_3_1
 377  | 3, 2 => exact snorm_3_2
 378  | 3, 3 => exact snorm_3_3
 379  | 3, 4 => exact snorm_3_4
 380  | 3, 5 => exact snorm_zero_3_5
 381  | 4, 0 => exact snorm_4_0
 382  | 4, 1 => exact snorm_4_1
 383  | 4, 2 => exact snorm_4_2
 384  | 4, 3 => exact snorm_4_3
 385  | 4, 4 => exact snorm_4_4
 386  | 4, 5 => exact snorm_zero_4_5
 387  | 5, 0 => exact snorm_5_0
 388  | 5, 1 => exact snorm_5_1
 389  | 5, 2 => exact snorm_zero_5_2
 390  | 5, 3 => exact snorm_zero_5_3
 391  | 5, 4 => exact snorm_zero_5_4
 392  | 5, 5 => exact snorm_zero_5_5
 393
 394/-- Closed-form edge-length derivative from the evaluated rationalized summand. -/
 395theorem freudenthalDihedralClosedDerivLength_snorm (e k : Fin 6) :
 396    dihedralClosedDerivLength freudenthalTet e k =
 397      schlaefliPolySummandNorm freudenthalTetSqEdges e k *
 398        Real.sqrt (freudenthalTetSqEdges k) / (2 * Real.sqrt (freudenthalTetSqEdges e)) := by
 399  unfold dihedralClosedDerivLength
 400  rw [dihedralClosedDerivSq_eq_poly]
 401  have hsq : freudenthalTet.sqEdge = freudenthalTetSqEdges := by
 402    simp [freudenthalTet]
 403  have hbridge := schlaefliSummandBridge freudenthalTet e k
 404  have hcm : Real.sqrt (2 * cm3 freudenthalTetSqEdges) = 4 := by
 405    rw [cm3_freudenthalTetSqEdges]
 406    norm_num
 407  have hse_ne : Real.sqrt (freudenthalTetSqEdges e) ≠ 0 :=
 408    ne_of_gt (Real.sqrt_pos.mpr (freudenthalTet.sqEdge_pos e))
 409  have hinv :
 410      (1 / Real.sqrt (2 * cm3 freudenthalTetSqEdges)) = 1 / 4 := by
 411    rw [hcm]
 412  have hd_sq :
 413      dihedralClosedDerivSqPoly freudenthalTet e k =
 414        schlaefliPolySummandNorm freudenthalTetSqEdges e k /
 415          (4 * Real.sqrt (freudenthalTetSqEdges e)) := by
 416    simp only [hsq] at hbridge
 417    rw [hinv] at hbridge
 418    have hden_ne : 4 * Real.sqrt (freudenthalTetSqEdges e) ≠ 0 :=
 419      mul_ne_zero (by norm_num : (4 : ℝ) ≠ 0) hse_ne
 420    rw [eq_div_iff hden_ne]
 421    linarith
 422  calc
 423    2 * Real.sqrt (freudenthalTet.sqEdge k) * dihedralClosedDerivSqPoly freudenthalTet e k
 424        = 2 * Real.sqrt (freudenthalTetSqEdges k) * dihedralClosedDerivSqPoly freudenthalTet e k := by
 425            rw [hsq]
 426    _ = 2 * Real.sqrt (freudenthalTetSqEdges k) *
 427            (schlaefliPolySummandNorm freudenthalTetSqEdges e k /
 428              (4 * Real.sqrt (freudenthalTetSqEdges e))) := by
 429            rw [hd_sq]
 430    _ = schlaefliPolySummandNorm freudenthalTetSqEdges e k *
 431          Real.sqrt (freudenthalTetSqEdges k) / (2 * Real.sqrt (freudenthalTetSqEdges e)) := by
 432          field_simp [hse_ne]
 433          ring
 434
 435end FreudenthalLengthChainEndpointCert
 436end Gravity
 437end IndisputableMonolith
 438

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