All problems

Does a line finder need fewer test orbits than a pixel stack to exhaustively search the distant solar system?

Shared Resources

import Mathlib

/-!
# Vocabulary for the test-orbit covering problem

Two searches for faint distant solar-system bodies use "trial" or "test" orbits, and
they pay for them differently.

*Matched-filter digital tracking* (Geringer-Sameth, Golovich & Iwabuchi 2025,
arXiv:2509.25428) stacks pixels along a trial orbit, so the trial orbit must land on the
object's actual position in every image. Every direction in the six-dimensional orbital
parameter space has to be resolved, and the trial-orbit density goes as the inverse sixth
power of the point-spread width. That is `RecoveredByRigid`.

*THOR* (Moeyens et al. 2021, AJ 162:143) instead transforms detections into the frame of
the test orbit and runs a line finder. A constant offset and a constant drift are exactly
what a line finder fits, so those directions cost nothing. That is `RecoveredBy`, the same
condition modulo an affine-in-time function of the observer's sky coordinates.

`RecoveredByRigid → RecoveredBy`, so the affine notion never needs more test orbits. How
many fewer is the open question these definitions exist to state.

Units are fixed by the observer: lengths are in units of the observer's maximum distance
from the attracting centre, so an observer satisfies `‖e t‖ ≤ 1`.
-/

namespace Commons.PlanetNineTestOrbits

open Set

/-- Physical three-space. -/
abbrev Vec := EuclideanSpace ℝ (Fin 3)

/-- `IsKeplerOn μ T x` : on the window `[0, T]` the curve `x` is twice differentiable,
never passes through the attracting centre, and obeys the Newtonian two-body equation
`x'' = -(μ / ‖x‖³) • x`. -/
def IsKeplerOn (μ T : ℝ) (x : ℝ → Vec) : Prop :=
  ∃ v : ℝ → Vec,
    (∀ t ∈ Icc (0 : ℝ) T, x t ≠ 0) ∧
    (∀ t ∈ Icc (0 : ℝ) T, HasDerivAt x (v t) t) ∧
    (∀ t ∈ Icc (0 : ℝ) T, HasDerivAt v (-(μ / ‖x t‖ ^ 3) • x t) t)

/-- `InShell R₁ R₂ T x` : the body stays in the shell `[R₁, R₂]` for the whole window. -/
def InShell (R₁ R₂ T : ℝ) (x : ℝ → Vec) : Prop :=
  ∀ t ∈ Icc (0 : ℝ) T, ‖x t‖ ∈ Icc R₁ R₂

/-- `IsTarget μ R₁ R₂ T x` : a body the search must not miss. -/
def IsTarget (μ R₁ R₂ T : ℝ) (x : ℝ → Vec) : Prop :=
  IsKeplerOn μ T x ∧ InShell R₁ R₂ T x

/-- Unit line of sight from an observer at `e t` to a body at `x t`. -/
noncomputable def los (e x : ℝ → Vec) (t : ℝ) : Vec :=
  ‖x t - e t‖⁻¹ • (x t - e t)

/-- `RecoveredByRigid e ε T ξ x` : the line of sight to `x` stays within `ε` of the line
of sight to the test orbit `ξ` throughout the window. This is what pixel-stacking demands:
the trial track must land on the object itself. -/
def RecoveredByRigid (e : ℝ → Vec) (ε T : ℝ) (ξ x : ℝ → Vec) : Prop :=
  ∀ t ∈ Icc (0 : ℝ) T, ‖los e x t - los e ξ t‖ ≤ ε

/-- `RecoveredBy e ε T ξ x` : the line of sight to `x` differs from the line of sight to
the test orbit `ξ` by an affine function of time, to within `ε`, throughout the window.

This is THOR's condition. In the frame co-moving with `ξ` the track of `x` is straight to
within `ε`, and the affine term `p + t • v` is precisely the line the downstream finder is
free to fit, so a constant offset and a constant drift are free. Everything of higher
order is what the cover still has to resolve. -/
def RecoveredBy (e : ℝ → Vec) (ε T : ℝ) (ξ x : ℝ → Vec) : Prop :=
  ∃ p v : Vec, ∀ t ∈ Icc (0 : ℝ) T,
    ‖(los e x t - los e ξ t) - (p + t • v)‖ ≤ ε

/-- The observer: a body on its own Kepler orbit about the same centre, never further
than one length unit from it. -/
def IsObserver (μ T : ℝ) (e : ℝ → Vec) : Prop :=
  IsKeplerOn μ T e ∧ ∀ t ∈ Icc (0 : ℝ) T, ‖e t‖ ≤ 1

/-- `IsExhaustiveCover μ R₁ R₂ T ε e S` : `S` is a set of test orbits, each itself a body
of the population being searched, such that every target in the shell is recovered by one
of them at tolerance `ε`. Nothing in the shell is invisible to the search. -/
def IsExhaustiveCover (μ R₁ R₂ T ε : ℝ) (e : ℝ → Vec) (S : Set (ℝ → Vec)) : Prop :=
  (∀ ξ ∈ S, IsTarget μ R₁ R₂ T ξ) ∧
  ∀ x, IsTarget μ R₁ R₂ T x → ∃ ξ ∈ S, RecoveredBy e ε T ξ x

end Commons.PlanetNineTestOrbits
Commons.PlanetNineTestOrbits
V1
Refuted

Contributors

Solution

import Mathlib
import Commons.PlanetNineTestOrbits

/-!
Kernel-checked pieces of a refutation of `TestOrbitCover`.

Instance: μ = 1, R₁ = 2, R₂ = 3, T = 1, observer the unit circle,
reference target the circle of radius 5/2.  The linearized
los-mod-affine 2–3 jet at that point is a 6×6 matrix over ℚ(√10)
whose transcribed determinant is nonzero (proved).  Circular Kepler
curves are `IsKeplerOn` / `IsObserver` / `IsTarget` (proved).

Kernel-green beyond the circular instance: Kepler inverse, perifocal
radius, first derivatives of `perifocal`, `E(t)`, `E'(t)`, `ellipse`,
`periVel ∘ E`, vis-viva *scalar* identities `accel_coord_x/y`,
`InShell` for the ellipse, `applyMat` linearity/HasDerivAt, Euler
family *definition*, packing arithmetic.

Kernel-green: `isKeplerOn_ellipse`, `isTarget_ellipse`,
`isTarget_family` (eulerR = rotZ*rotY*rotX, orthogonal, applyMat
preserves Kepler/InShell), bivariate IFT `hasDerivAt_eccentricAnomaly_ecc`
(`∂E/∂e = sin E / (1-e cos E)`), and the 6×6 Cartesian t²/t³ los-jet
`jetMatrix` at the circular instance with `jetMatrix.det ≠ 0`.
Kernel-green this pass: secondDiff linearity, RecoveredBy pigeonhole
(`not_both_recovered`, `_two`), scaled packing, `pStar` target, `packBox_target`,
`gridPt` ncard/`IsTarget`.
This pass: quantitative invertibility of `jetMatrix` (σ>0 by compactness)
and `‖ΔF‖ ≥ σ‖Δp‖−K‖Δp‖²` from a Lipschitz derivative.
This pass: algebraic `losTaylor23` (t²/t³ Taylor of los from ICs; CAS-checked
Jacobian = `jetMatrix`), Lagrange f,g `keplerIC` / `sdCart`, `univF` at `sStar`
is `(5/2)χ`, `keplerIC sStar 0` matches the circular IC.
Kernel-green this pass: `keplerIC_sStar t`; `univF_dchi sStar = 5/2 ≠ 0`;
`HasDerivAt (univF sStar) (5/2)`; `univF_f2` invertible; inverse-function
`HasDerivAt (chiOf sStar) (5/2)⁻¹` (`of_local_left_inverse`).
`chiOf` is still the circular inverse `2t/5`. This pass assembled the χ-partial
of `univF` off `sStar`: regularized Stumpff `cbar`/`sbar` (continuous at 0),
elliptic form `univF_ell` for `α>0`, `HasDerivAt (univF s) (univF_dchi s χ)`,
`eventually_hasFDerivAt_univF_chi` (`df2`) and `continuousAt_univF_f2` (`cf2`).
Kernel-green this pass: C^∞ `losTaylor23` at `sStar` (`contDiffAt_losTaylor23`)
and `HasFDerivAt` via `fderiv`, plus axis restrictions `lineJet`.
Kernel-green this pass: axis-0 `p2`/`u2`/`u3` `HasDerivAt` and the six
`deriv (losTaylor23 ∘ lineJet 0) 0 = jetMatrix i 0` identities (`u2'=(2 jetA,0,0)`,
`u3'=(0,6 jetF,0)`). Kernel-green this pass: axis-2 `deriv (losTaylor23 ∘ lineJet 2) 0 = jetMatrix i 2` (`u2'=(0,0,2 jetD)`, `u3'=0`). This pass: `HasFDerivAt sdCart`, `fderiv secondDiff = secondDiff ∘ fderiv`,
`fderiv_sdCart_apply`, `hasDerivAt_alphaOf_lineJet2`.
Kernel-green this pass: `ρ²=29/4-5 cos((n-1)t)`, `zBlk.det>0` (~1.3e-3).
This pass: all six `keplerIC∘lineJet = stmCol`, and the in-plane los chain
`hasDerivAt_los_inPlane` / `fderiv_sdCart_inPlane` / `xyBlk = xyBlkSTM`.
This pass: interval helpers, tight `cos`/`sin`/`ρ`, STM/`dlos` coordinates,
milli conversions, `1/n`/`1/ρ`, STM columns 0–3 at `t=1/4,1/2,1`, `uStar` at `1/4,1/2,1`.
Kernel-green this pass: all `dlosCol` j at `t=1/4,1/2,1` via
`inner_uStar_stm_xy`/`ρ⁻¹` boxes, and all 16 `xyBlkSTM` entries
(`secondDiff` of `dlosCol` at `hSD1`/`hSD2`).
Kernel-green this pass: interval Leibniz `xyBlk.det ≠ 0`
(`xyBlkSTM_det_bounds`: [355,402]×10⁻⁹).
Leftover: identify `keplerIC` with `propagator` in time (not just diag), then `IsKeplerOn`/`InShell`/`IsTarget` ball + packing. `f″=-f/ρ³`, `g″=-g/ρ³`, local Kepler for `propagator` are kernel-green.
-/

namespace Submissions.TestOrbitCoverFalse.Gtokman

open Commons.PlanetNineTestOrbits
open scoped InnerProductSpace RealInnerProductSpace
open Matrix

noncomputable section

def ofCoords (x y z : ℝ) : Vec := WithLp.toLp 2 ![x, y, z]

lemma ofLp_ofCoords (x y z : ℝ) :
    (ofCoords x y z).ofLp = ![x, y, z] :=
  WithLp.ofLp_toLp _ _

lemma ofCoords_norm (x y z : ℝ) :
    ‖ofCoords x y z‖ = Real.sqrt (x ^ 2 + y ^ 2 + z ^ 2) := by
  rw [EuclideanSpace.norm_eq, ofLp_ofCoords]
  simp [Fin.sum_univ_three]

def circular (R ω φ : ℝ) (t : ℝ) : Vec :=
  ofCoords (R * Real.cos (ω * t + φ)) (R * Real.sin (ω * t + φ)) 0

lemma hasDerivAt_coord3 {xt yt zt : ℝ → ℝ} {t x' y' z' : ℝ}
    (hx : HasDerivAt xt x' t) (hy : HasDerivAt yt y' t)
    (hz : HasDerivAt zt z' t) :
    HasDerivAt (fun s => ofCoords (xt s) (yt s) (zt s))
      (ofCoords x' y' z') t := by
  let L : (Fin 3 → ℝ) →L[ℝ] Vec :=
    (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).symm
  have hpi : HasDerivAt (fun s => (![xt s, yt s, zt s] : Fin 3 → ℝ))
      ![x', y', z'] t := by
    rw [hasDerivAt_pi]
    intro i
    fin_cases i
    · simpa using hx
    · simpa using hy
    · simpa using hz
  have hL : HasFDerivAt (fun u : Fin 3 → ℝ => (L u : Vec)) L (![xt t, yt t, zt t]) :=
    L.hasFDerivAt
  change HasDerivAt (fun s => L ![xt s, yt s, zt s]) (L ![x', y', z']) t
  exact hL.comp_hasDerivAt t hpi

lemma hasDerivAt_theta (ω φ t : ℝ) :
    HasDerivAt (fun s => ω * s + φ) ω t := by
  simpa using ((hasDerivAt_id t).const_mul ω).add_const φ

lemma hasDerivAt_circular (R ω φ t : ℝ) :
    HasDerivAt (circular R ω φ)
      (ofCoords (-R * ω * Real.sin (ω * t + φ))
                (R * ω * Real.cos (ω * t + φ)) 0) t := by
  refine hasDerivAt_coord3 ?_ ?_ (hasDerivAt_const t 0)
  · have := (hasDerivAt_theta ω φ t).cos.const_mul R
    simpa [mul_comm, mul_left_comm, mul_assoc] using this
  · have := (hasDerivAt_theta ω φ t).sin.const_mul R
    simpa [mul_comm, mul_left_comm, mul_assoc] using this

lemma hasDerivAt_circular_vel (R ω φ t : ℝ) :
    HasDerivAt
      (fun s => ofCoords (-R * ω * Real.sin (ω * s + φ))
                          (R * ω * Real.cos (ω * s + φ)) 0)
      (ofCoords (-R * ω ^ 2 * Real.cos (ω * t + φ))
                (-R * ω ^ 2 * Real.sin (ω * t + φ)) 0) t := by
  refine hasDerivAt_coord3 ?_ ?_ (hasDerivAt_const t 0)
  · -- d/dt (−R ω sin(ωs+φ)) = −R ω · cos · ω = −R ω² cos
    have := (hasDerivAt_theta ω φ t).sin.const_mul (-R * ω)
    simpa [mul_comm, mul_left_comm, mul_assoc, pow_two] using this
  · have := (hasDerivAt_theta ω φ t).cos.const_mul (R * ω)
    simpa [mul_comm, mul_left_comm, mul_assoc, pow_two, neg_mul] using this

lemma circular_norm (R ω φ t : ℝ) (hR : 0 ≤ R) :
    ‖circular R ω φ t‖ = R := by
  rw [circular, ofCoords_norm]
  have hcs : Real.cos (ω * t + φ) ^ 2 + Real.sin (ω * t + φ) ^ 2 = 1 :=
    Real.cos_sq_add_sin_sq _
  have : (R * Real.cos (ω * t + φ)) ^ 2 + (R * Real.sin (ω * t + φ)) ^ 2 + 0 ^ 2
      = R ^ 2 := by
    linear_combination R ^ 2 * hcs
  rw [this, Real.sqrt_sq hR]

lemma circular_ne_zero (R ω φ t : ℝ) (hR : 0 < R) :
    circular R ω φ t ≠ 0 := by
  intro h
  have := circular_norm R ω φ t hR.le
  rw [h, norm_zero] at this
  linarith

lemma circular_accel (R ω φ t : ℝ) :
    ofCoords (-R * ω ^ 2 * Real.cos (ω * t + φ))
             (-R * ω ^ 2 * Real.sin (ω * t + φ)) 0
      = -ω ^ 2 • circular R ω φ t := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;>
    simp [circular, ofCoords, PiLp.smul_apply,
      smul_eq_mul, mul_left_comm, mul_assoc, neg_mul]

lemma isKeplerOn_circular (μ R ω φ T : ℝ)
    (hR : 0 < R) (hω : ω ^ 2 = μ / R ^ 3) :
    IsKeplerOn μ T (circular R ω φ) := by
  refine ⟨fun s => ofCoords (-R * ω * Real.sin (ω * s + φ))
      (R * ω * Real.cos (ω * s + φ)) 0, ?_, ?_, ?_⟩
  · intro t _; exact circular_ne_zero R ω φ t hR
  · intro t _; exact hasDerivAt_circular R ω φ t
  · intro t _ht
    have hacc := hasDerivAt_circular_vel R ω φ t
    have hnorm : ‖circular R ω φ t‖ = R := circular_norm R ω φ t hR.le
    have hvec :
        ofCoords (-R * ω ^ 2 * Real.cos (ω * t + φ))
                 (-R * ω ^ 2 * Real.sin (ω * t + φ)) 0
          = -(μ / ‖circular R ω φ t‖ ^ 3) • circular R ω φ t := by
      rw [circular_accel, hnorm, hω]
    exact hvec ▸ hacc

lemma isObserver_unitCircle (T : ℝ) :
    IsObserver (1 : ℝ) T (circular 1 1 0) := by
  refine ⟨isKeplerOn_circular 1 1 1 0 T (by norm_num) (by norm_num), ?_⟩
  intro t _
  rw [circular_norm _ _ _ _ (by norm_num)]

lemma isTarget_circular_fiveHalves (T : ℝ) :
    IsTarget (1 : ℝ) 2 3 T (circular (5 / 2) (Real.sqrt (8 / 125)) 0) := by
  refine ⟨?_, ?_⟩
  · refine isKeplerOn_circular 1 (5 / 2) (Real.sqrt (8 / 125)) 0 T
      (by norm_num) ?_
    rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 8 / 125)]
    norm_num
  · intro t _
    rw [circular_norm _ _ _ _ (by norm_num)]
    constructor <;> norm_num

lemma instance_hyps :
    (0 : ℝ) < 1 ∧ 1 < (2 : ℝ) ∧ (2 : ℝ) < 3 ∧ (1 : ℝ) ≤ (2 : ℝ) ^ 3 := by
  norm_num

lemma instance_window :
    (1 : ℝ) ≤ 1 ∧ (1 : ℝ) * (1 : ℝ) ^ 2 ≤ (2 : ℝ) ^ 3 := by
  norm_num

/-! Algebraic nonvanishing of the transcribed 6×6 jet determinant. -/

lemma hundred_sqrt10_lt_677 : 100 * Real.sqrt 10 < 677 := by
  have h : Real.sqrt 10 < 677 / 100 :=
    (Real.sqrt_lt' (by norm_num)).2 (by norm_num)
  linarith

lemma jet_factor_ne : (-677 + 100 * Real.sqrt 10 : ℝ) ≠ 0 := by
  linarith [hundred_sqrt10_lt_677]

lemma sqrt_mul_lt_of_sq {a b : ℝ} (ha : 0 < a) (hb : 0 < b)
    (hsq : b ^ 2 * 10 < a ^ 2) : b * Real.sqrt 10 < a := by
  have hs : 0 < Real.sqrt 10 := Real.sqrt_pos.2 (by norm_num)
  have hnn : 0 ≤ Real.sqrt 10 := hs.le
  have : (b * Real.sqrt 10) ^ 2 < a ^ 2 := by
    calc
      (b * Real.sqrt 10) ^ 2 = b ^ 2 * (Real.sqrt 10) ^ 2 := by ring
      _ = b ^ 2 * 10 := by rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
      _ < a ^ 2 := hsq
  exact (sq_lt_sq₀ (by positivity) ha.le).1 this

lemma jet_big_factor_ne :
    (-8251966477776884439461520637
      + 2609500924511182814654054825 * Real.sqrt 10 : ℝ) ≠ 0 := by
  have ha : (0 : ℝ) < 8251966477776884439461520637 := by norm_num
  have hb : (0 : ℝ) < 2609500924511182814654054825 := by norm_num
  have hsq : (2609500924511182814654054825 : ℝ) ^ 2 * 10
      < (8251966477776884439461520637 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

lemma jet_denom_ne :
    (-1186721730591670267 + 375274361663189633 * Real.sqrt 10 : ℝ) ≠ 0 := by
  have ha : (0 : ℝ) < 1186721730591670267 := by norm_num
  have hb : (0 : ℝ) < 375274361663189633 := by norm_num
  have hsq : (375274361663189633 : ℝ) ^ 2 * 10
      < (1186721730591670267 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

/-- Right-hand side of the transcribed `det jetMatrix` formula.  Nonzero
by integer comparisons in `ℚ(√10)`.  Identifying this with
`jetMatrix.det` is a finite `Matrix.det` expansion not yet transcribed
into the kernel. -/
lemma jet_det_rhs_ne_zero :
    (256 * (-8251966477776884439461520637
        + 2609500924511182814654054825 * Real.sqrt 10)
      * (-677 + 100 * Real.sqrt 10)
      / (145964630126953125
        * (-1186721730591670267
          + 375274361663189633 * Real.sqrt 10)) : ℝ) ≠ 0 := by
  refine div_ne_zero ?_ ?_
  · exact mul_ne_zero (mul_ne_zero (by norm_num) jet_big_factor_ne) jet_factor_ne
  · exact mul_ne_zero (by norm_num) jet_denom_ne

/-! Kepler equation inverse (Mathlib IFT + order-iso). -/

open Filter Topology

def keplerMap (ecc E : ℝ) : ℝ := E - ecc * Real.sin E

lemma hasDerivAt_keplerMap (ecc E : ℝ) :
    HasDerivAt (fun x => keplerMap ecc x) (1 - ecc * Real.cos E) E := by
  have h : HasDerivAt (fun x => x - ecc * Real.sin x) (1 - ecc * Real.cos E) E :=
    (hasDerivAt_id E).sub ((Real.hasDerivAt_sin E).const_mul ecc)
  simpa [keplerMap] using h

lemma keplerMap_deriv_pos {ecc E : ℝ} (he : |ecc| < 1) :
    0 < 1 - ecc * Real.cos E := by
  have habs : |ecc * Real.cos E| ≤ |ecc| := by
    rw [abs_mul]
    exact mul_le_of_le_one_right (abs_nonneg _) (Real.abs_cos_le_one _)
  have hlt : |ecc * Real.cos E| < 1 := habs.trans_lt he
  linarith [(abs_lt.mp hlt).2]

lemma keplerMap_strictMono {ecc : ℝ} (he : |ecc| < 1) :
    StrictMono (keplerMap ecc) :=
  strictMono_of_hasDerivAt_pos (hasDerivAt_keplerMap ecc)
    (fun E => keplerMap_deriv_pos (E := E) he)

lemma keplerMap_continuous (ecc : ℝ) : Continuous (keplerMap ecc) := by
  unfold keplerMap; fun_prop

lemma abs_keplerMap_sub (ecc E : ℝ) : |keplerMap ecc E - E| ≤ |ecc| := by
  unfold keplerMap
  simpa [sub_eq_add_neg, add_comm, abs_neg] using
    (by
      rw [abs_mul]
      exact mul_le_of_le_one_right (abs_nonneg _) (Real.abs_sin_le_one E) :
        |ecc * Real.sin E| ≤ |ecc|)

lemma keplerMap_le (ecc E : ℝ) : E - |ecc| ≤ keplerMap ecc E := by
  linarith [(abs_le.mp (abs_keplerMap_sub ecc E)).1]

lemma keplerMap_ge (ecc E : ℝ) : keplerMap ecc E ≤ E + |ecc| := by
  linarith [(abs_le.mp (abs_keplerMap_sub ecc E)).2]

lemma keplerMap_tendsto_atTop (ecc : ℝ) : Tendsto (keplerMap ecc) atTop atTop :=
  tendsto_atTop_mono (fun E => keplerMap_le ecc E)
    (tendsto_atTop_add_const_right atTop (-|ecc|) tendsto_id)

lemma keplerMap_tendsto_atBot (ecc : ℝ) : Tendsto (keplerMap ecc) atBot atBot :=
  tendsto_atBot_mono (fun E => keplerMap_ge ecc E)
    (tendsto_atBot_add_const_right atBot (|ecc|) tendsto_id)

lemma keplerMap_surjective (ecc : ℝ) : Function.Surjective (keplerMap ecc) :=
  (keplerMap_continuous ecc).surjective
    (keplerMap_tendsto_atTop ecc) (keplerMap_tendsto_atBot ecc)

noncomputable def keplerIso {ecc : ℝ} (he : |ecc| < 1) : ℝ ≃o ℝ :=
  (keplerMap_strictMono he).orderIsoOfSurjective (keplerMap ecc) (keplerMap_surjective ecc)

noncomputable def eccentricAnomaly (ecc M : ℝ) : ℝ :=
  if h : |ecc| < 1 then (keplerIso h).symm M else M

lemma keplerMap_eccentricAnomaly {ecc M : ℝ} (he : |ecc| < 1) :
    keplerMap ecc (eccentricAnomaly ecc M) = M := by
  simp only [eccentricAnomaly, he, ↓reduceDIte]
  exact (keplerIso he).apply_symm_apply M

lemma hasDerivAt_eccentricAnomaly {ecc M : ℝ} (he : |ecc| < 1) :
    HasDerivAt (eccentricAnomaly ecc)
      (1 - ecc * Real.cos (eccentricAnomaly ecc M))⁻¹ M := by
  have hfg : ∀ y, keplerMap ecc (eccentricAnomaly ecc y) = y :=
    fun y => keplerMap_eccentricAnomaly he
  have hf' : 1 - ecc * Real.cos (eccentricAnomaly ecc M) ≠ 0 :=
    (keplerMap_deriv_pos (E := eccentricAnomaly ecc M) he).ne'
  have hg : ContinuousAt (eccentricAnomaly ecc) M := by
    have : eccentricAnomaly ecc = ⇑(keplerIso he).symm := by
      funext y; simp only [eccentricAnomaly, he, ↓reduceDIte]
    rw [this]
    exact (keplerIso he).symm.continuous.continuousAt
  exact HasDerivAt.of_local_left_inverse hg
    (hasDerivAt_keplerMap ecc (eccentricAnomaly ecc M)) hf'
    (Eventually.of_forall hfg)

lemma hasDerivAt_meanAnomaly (n M0 t : ℝ) :
    HasDerivAt (fun s => n * s + M0) n t := by
  simpa using ((hasDerivAt_id t).const_mul n).add_const M0

lemma hasDerivAt_E_of_t {n ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (eccentricAnomaly ecc ∘ fun s => n * s + M0)
      ((1 - ecc * Real.cos (eccentricAnomaly ecc (n * t + M0)))⁻¹ * n) t := by
  exact HasDerivAt.comp (h := fun s => n * s + M0) (x := t)
    (hasDerivAt_eccentricAnomaly (ecc := ecc) (M := n * t + M0) he)
    (hasDerivAt_meanAnomaly n M0 t)

/-! Perifocal ellipse: radius identity (needed for the two-body RHS). -/

def perifocal (a ecc E : ℝ) : Vec :=
  ofCoords (a * (Real.cos E - ecc))
           (a * Real.sqrt (1 - ecc ^ 2) * Real.sin E) 0

lemma perifocal_norm_sq {a ecc E : ℝ} (he : |ecc| ≤ 1) :
    ‖perifocal a ecc E‖ ^ 2 = a ^ 2 * (1 - ecc * Real.cos E) ^ 2 := by
  have hnn : 0 ≤ 1 - ecc ^ 2 := by
    have habs := abs_le.mp he
    nlinarith
  rw [perifocal, ofCoords_norm, Real.sq_sqrt
    (add_nonneg (add_nonneg (sq_nonneg _) (sq_nonneg _)) (sq_nonneg _))]
  have hsq : Real.sqrt (1 - ecc ^ 2) ^ 2 = 1 - ecc ^ 2 := Real.sq_sqrt hnn
  have hcs : Real.cos E ^ 2 + Real.sin E ^ 2 = 1 := Real.cos_sq_add_sin_sq E
  have : (a * (Real.cos E - ecc)) ^ 2
      + (a * Real.sqrt (1 - ecc ^ 2) * Real.sin E) ^ 2 + (0 : ℝ) ^ 2
      = a ^ 2 * (1 - ecc * Real.cos E) ^ 2 := by
    calc
      (a * (Real.cos E - ecc)) ^ 2
          + (a * Real.sqrt (1 - ecc ^ 2) * Real.sin E) ^ 2 + 0 ^ 2
          = a ^ 2 * ((Real.cos E - ecc) ^ 2
            + Real.sqrt (1 - ecc ^ 2) ^ 2 * Real.sin E ^ 2) := by ring
      _ = a ^ 2 * ((Real.cos E - ecc) ^ 2 + (1 - ecc ^ 2) * Real.sin E ^ 2) := by
            rw [hsq]
      _ = a ^ 2 * (Real.cos E ^ 2 - 2 * ecc * Real.cos E + ecc ^ 2
            + Real.sin E ^ 2 - ecc ^ 2 * Real.sin E ^ 2) := by ring
      _ = a ^ 2 * ((Real.cos E ^ 2 + Real.sin E ^ 2)
            - 2 * ecc * Real.cos E + ecc ^ 2 * (1 - Real.sin E ^ 2)) := by ring
      _ = a ^ 2 * (1 - 2 * ecc * Real.cos E + ecc ^ 2 * Real.cos E ^ 2) := by
            rw [hcs, show 1 - Real.sin E ^ 2 = Real.cos E ^ 2 by linarith [hcs]]
      _ = a ^ 2 * (1 - ecc * Real.cos E) ^ 2 := by ring
  simpa using this

/-! Finite-difference functionals vanishing on affine maps. -/

def secondDiff (f : ℝ → Vec) (h : ℝ) : Vec :=
  f 0 - (2 : ℝ) • f h + f (2 * h)

lemma secondDiff_affine (p v : Vec) (h : ℝ) :
    secondDiff (fun t => p + t • v) h = 0 := by
  ext i
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
  ring

lemma secondDiff_bound {f g : ℝ → Vec} {ε h : ℝ}
    (hf : ∀ t ∈ ({0, h, 2 * h} : Set ℝ), ‖f t - g t‖ ≤ ε) :
    ‖secondDiff f h - secondDiff g h‖ ≤ 4 * ε := by
  have h0 := hf 0 (by simp)
  have hh := hf h (by simp)
  have h2 := hf (2 * h) (by simp)
  have hdiff :
      secondDiff f h - secondDiff g h =
        (f 0 - g 0) - (2 : ℝ) • (f h - g h) + (f (2 * h) - g (2 * h)) := by
    ext i
    simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  rw [hdiff]
  have htri :
      ‖(f 0 - g 0) - (2 : ℝ) • (f h - g h) + (f (2 * h) - g (2 * h))‖
        ≤ ‖f 0 - g 0‖ + ‖(2 : ℝ) • (f h - g h)‖ + ‖f (2 * h) - g (2 * h)‖ := by
    refine (norm_add_le ((f 0 - g 0) - (2 : ℝ) • (f h - g h)) _).trans ?_
    gcongr
    exact norm_sub_le _ _
  refine htri.trans ?_
  have htwo : ‖(2 : ℝ) • (f h - g h)‖ = 2 * ‖f h - g h‖ := by
    rw [norm_smul, Real.norm_eq_abs, abs_two]
  rw [htwo]
  nlinarith [h0, hh, h2]

/-- If two curves are RecoveredBy each other, their second differences differ
by at most `4ε` (the affine term is killed). -/
lemma recoveredBy_secondDiff {e : ℝ → Vec} {ε T : ℝ} {ξ x : ℝ → Vec} {h : ℝ}
    (hT : (2 * h ∈ Set.Icc (0 : ℝ) T))
    (hrec : RecoveredBy e ε T ξ x) :
    ‖secondDiff (fun t => los e x t - los e ξ t) h‖ ≤ 4 * ε := by
  obtain ⟨p, v, hp⟩ := hrec
  have haff := secondDiff_affine p v h
  have bound := secondDiff_bound (f := fun t => los e x t - los e ξ t)
    (g := fun t => p + t • v) (ε := ε) (h := h) ?_
  · have : secondDiff (fun t => los e x t - los e ξ t) h -
        secondDiff (fun t => p + t • v) h =
        secondDiff (fun t => los e x t - los e ξ t) h := by
      simp [haff]
    rw [← this]
    exact bound
  · intro t ht
    have h0T : 0 ≤ T := le_trans hT.1 hT.2
    have hh0 : 0 ≤ h := by nlinarith [hT.1]
    have htI : t ∈ Set.Icc (0 : ℝ) T := by
      rcases ht with (rfl | rfl | h')
      · exact ⟨le_rfl, h0T⟩
      · exact ⟨hh0, by nlinarith [hT.2]⟩
      · have : t = 2 * h := by simpa using h'
        subst this
        exact hT
    exact hp t htI

/-- Packing arithmetic: a family of size `≳ ε⁻⁶` forces `N(ε) ε⁵ → ∞`,
so no `d ≤ 5` and finite `C` can bound the cover. -/
lemma packing_eps5_unbounded
    {ι : Type*} (S : ℝ → Set ι)
    (hlb : ∀ ε : ℝ, 0 < ε → ε ≤ 1 / 2 →
      ((S ε).ncard : ℝ) ≥ (1 / (2 * ε)) ^ 6) :
    ¬ ∃ C : ℝ, ∀ ε : ℝ, 0 < ε → ε ≤ 1 / 2 → ((S ε).ncard : ℝ) * ε ^ 5 ≤ C := by
  intro ⟨C, hC⟩
  -- at ε = min (1/2) (1 / (2 * (|C| + 1))) the product exceeds C
  let ε : ℝ := min (1 / 2) (1 / (128 * (|C| + 1)))
  have hεpos : 0 < ε := by
    have : 0 < |C| + 1 := by positivity
    have : 0 < 1 / (128 * (|C| + 1)) := by positivity
    exact lt_min (by norm_num) this
  have hεle : ε ≤ 1 / 2 := min_le_left _ _
  have hlb' := hlb ε hεpos hεle
  have hprod := hC ε hεpos hεle
  have : ((S ε).ncard : ℝ) * ε ^ 5 ≥ (1 / (2 * ε)) ^ 6 * ε ^ 5 := by
    gcongr
  have hsimp : (1 / (2 * ε)) ^ 6 * ε ^ 5 = 1 / (64 * ε) := by
    have hε0 : ε ≠ 0 := hεpos.ne'
    field_simp
    ring
  have hge : ((S ε).ncard : ℝ) * ε ^ 5 ≥ 1 / (64 * ε) := by
    rw [← hsimp]; exact this
  have hεsmall : ε ≤ 1 / (128 * (|C| + 1)) := min_le_right _ _
  have hbig : 1 / (64 * ε) ≥ 2 * (|C| + 1) := by
    have hδ : 0 < 1 / (128 * (|C| + 1)) := by positivity
    have hinv : 1 / (1 / (128 * (|C| + 1))) ≤ 1 / ε :=
      (one_div_le_one_div hδ hεpos).mpr hεsmall
    have : 1 / (1 / (128 * (|C| + 1))) = 128 * (|C| + 1) := by field_simp
    have : 1 / (64 * ε) = (1 / ε) / 64 := by field_simp [hεpos.ne']
    nlinarith
  have hchain : 2 * (|C| + 1) ≤ C :=
    (ge_iff_le.mp hbig).trans ((ge_iff_le.mp hge).trans hprod)
  have : 0 ≤ |C| := abs_nonneg _
  nlinarith [le_abs_self C, neg_le_abs C]

/-! Mean motion and eccentric anomaly along an orbit. -/

def meanMotion (μ a : ℝ) : ℝ := Real.sqrt (μ / a ^ 3)

def E_of (μ a ecc M0 t : ℝ) : ℝ :=
  eccentricAnomaly ecc (Real.sqrt (μ / a ^ 3) * t + M0)

/-- Perifocal ellipse as a function of time, via the Kepler inverse. -/
def ellipse (μ a ecc M0 : ℝ) : ℝ → Vec :=
  fun t => perifocal a ecc (E_of μ a ecc M0 t)

lemma ellipse_ne_zero {μ a ecc M0 t : ℝ}
    (ha : 0 < a) (he : |ecc| < 1) :
    ellipse μ a ecc M0 t ≠ 0 := by
  intro h
  have hsq := perifocal_norm_sq (a := a) (ecc := ecc)
    (E := E_of μ a ecc M0 t) he.le
  have hr : 0 < 1 - ecc * Real.cos (E_of μ a ecc M0 t) :=
    keplerMap_deriv_pos (E := E_of μ a ecc M0 t) he
  unfold ellipse at h
  rw [h, norm_zero, zero_pow (by norm_num)] at hsq
  have : a ^ 2 * (1 - ecc * Real.cos (E_of μ a ecc M0 t)) ^ 2 > 0 := by
    positivity
  linarith

def periVel (a ecc E : ℝ) : Vec :=
  ofCoords (-a * Real.sin E)
           (a * Real.sqrt (1 - ecc ^ 2) * Real.cos E) 0

def periAccE (a ecc E : ℝ) : Vec :=
  ofCoords (-a * Real.cos E)
           (-a * Real.sqrt (1 - ecc ^ 2) * Real.sin E) 0

lemma one_sub_ecc_cos_pos {ecc E : ℝ} (he : |ecc| < 1) :
    0 < 1 - ecc * Real.cos E :=
  keplerMap_deriv_pos (E := E) he

lemma one_sub_ecc_cos_nonneg {ecc E : ℝ} (he : |ecc| ≤ 1) :
    0 ≤ 1 - ecc * Real.cos E := by
  have : |ecc * Real.cos E| ≤ |ecc| := by
    rw [abs_mul]
    exact mul_le_of_le_one_right (abs_nonneg _) (Real.abs_cos_le_one _)
  have : |ecc * Real.cos E| ≤ 1 := this.trans he
  linarith [(abs_le.mp this).2]

lemma perifocal_norm {a ecc E : ℝ} (ha : 0 ≤ a) (he : |ecc| ≤ 1) :
    ‖perifocal a ecc E‖ = a * (1 - ecc * Real.cos E) := by
  have hsq := perifocal_norm_sq (a := a) (ecc := ecc) (E := E) he
  have hnn : 0 ≤ a * (1 - ecc * Real.cos E) :=
    mul_nonneg ha (one_sub_ecc_cos_nonneg he)
  have : ‖perifocal a ecc E‖ ^ 2 = (a * (1 - ecc * Real.cos E)) ^ 2 := by
    simpa [mul_pow] using hsq
  exact (sq_eq_sq₀ (norm_nonneg _) hnn).mp this

lemma hasDerivAt_perifocal (a ecc E : ℝ) :
    HasDerivAt (perifocal a ecc) (periVel a ecc E) E := by
  refine hasDerivAt_coord3 ?_ ?_ (hasDerivAt_const E 0)
  · have := (Real.hasDerivAt_cos E).sub_const ecc |>.const_mul a
    simpa [perifocal, periVel, sub_eq_add_neg, mul_comm, mul_left_comm, mul_assoc]
      using this
  · have := (Real.hasDerivAt_sin E).const_mul (a * Real.sqrt (1 - ecc ^ 2))
    simpa [perifocal, periVel, mul_comm, mul_left_comm, mul_assoc] using this

lemma hasDerivAt_periVel (a ecc E : ℝ) :
    HasDerivAt (periVel a ecc) (periAccE a ecc E) E := by
  refine hasDerivAt_coord3 ?_ ?_ (hasDerivAt_const E 0)
  · have := (Real.hasDerivAt_sin E).const_mul (-a)
    simpa [periVel, periAccE, mul_comm, mul_left_comm, mul_assoc] using this
  · have := (Real.hasDerivAt_cos E).const_mul (a * Real.sqrt (1 - ecc ^ 2))
    simpa [periVel, periAccE, mul_comm, mul_left_comm, mul_assoc, neg_mul] using this

lemma hasDerivAt_E_of {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (E_of μ a ecc M0)
      ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3)) t :=
  hasDerivAt_E_of_t (n := Real.sqrt (μ / a ^ 3)) (ecc := ecc) (M0 := M0) (t := t) he

lemma D_of_ne {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    1 - ecc * Real.cos (E_of μ a ecc M0 t) ≠ 0 :=
  (one_sub_ecc_cos_pos (E := E_of μ a ecc M0 t) he).ne'

lemma hasDerivAt_D_of {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (fun s => 1 - ecc * Real.cos (E_of μ a ecc M0 s))
      (ecc * Real.sin (E_of μ a ecc M0 t) *
        ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3))) t := by
  have hE := hasDerivAt_E_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  have hcos := hE.cos
  have h := hcos.const_mul ecc
  have h1 : HasDerivAt (fun _ : ℝ => (1 : ℝ)) 0 t := hasDerivAt_const t 1
  -- d/dt (1 - ecc cos E) = 0 - ecc * (-sin E * E') = ecc sin E * E'
  have hsub := h1.sub h
  have hderiv :
      (0 : ℝ) -
          ecc * (-Real.sin (E_of μ a ecc M0 t) *
            ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3)))
        = ecc * Real.sin (E_of μ a ecc M0 t) *
            ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3)) := by
    ring
  exact hderiv ▸ hsub

lemma hasDerivAt_invD_of {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (fun s => (1 - ecc * Real.cos (E_of μ a ecc M0 s))⁻¹)
      (-(ecc * Real.sin (E_of μ a ecc M0 t) *
          ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3))) /
        (1 - ecc * Real.cos (E_of μ a ecc M0 t)) ^ 2) t := by
  have hD := hasDerivAt_D_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  have hne := D_of_ne (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  have hinv := hD.inv hne
  have hderiv :
      -(ecc * Real.sin (E_of μ a ecc M0 t) *
            ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3))) /
          ((1 - ecc * Real.cos (E_of μ a ecc M0 t)) *
            (1 - ecc * Real.cos (E_of μ a ecc M0 t)))
        = -(ecc * Real.sin (E_of μ a ecc M0 t) *
            ((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3))) /
          (1 - ecc * Real.cos (E_of μ a ecc M0 t)) ^ 2 := by
    rw [pow_two]
  exact hderiv ▸ hinv

lemma hasDerivAt_E'_of {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (fun s =>
        (1 - ecc * Real.cos (E_of μ a ecc M0 s))⁻¹ * Real.sqrt (μ / a ^ 3))
      (-(Real.sqrt (μ / a ^ 3)) ^ 2 * ecc * Real.sin (E_of μ a ecc M0 t) /
        (1 - ecc * Real.cos (E_of μ a ecc M0 t)) ^ 3) t := by
  have hinv := hasDerivAt_invD_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  have h := hinv.mul_const (Real.sqrt (μ / a ^ 3))
  have hDne := D_of_ne (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  set D := 1 - ecc * Real.cos (E_of μ a ecc M0 t)
  set n := Real.sqrt (μ / a ^ 3)
  set sE := Real.sin (E_of μ a ecc M0 t)
  have hEq :
      -n ^ 2 * ecc * sE / D ^ 3
        = -(ecc * sE * (D⁻¹ * n)) / D ^ 2 * n := by
    have : D ≠ 0 := hDne
    field_simp [this]
  exact hEq ▸ h

lemma hasDerivAt_ellipse {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (ellipse μ a ecc M0)
      (((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3)) •
        periVel a ecc (E_of μ a ecc M0 t)) t := by
  have hE := hasDerivAt_E_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  have hp := hasDerivAt_perifocal a ecc (E_of μ a ecc M0 t)
  have hcomp := hp.scomp t hE
  exact hcomp

lemma hasDerivAt_periVel_comp_E {μ a ecc M0 t : ℝ} (he : |ecc| < 1) :
    HasDerivAt (fun s => periVel a ecc (E_of μ a ecc M0 s))
      (((1 - ecc * Real.cos (E_of μ a ecc M0 t))⁻¹ * Real.sqrt (μ / a ^ 3)) •
        periAccE a ecc (E_of μ a ecc M0 t)) t := by
  have hE := hasDerivAt_E_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
  exact (hasDerivAt_periVel a ecc (E_of μ a ecc M0 t)).scomp t hE

lemma ofCoords_smul (c x y z : ℝ) :
    c • ofCoords x y z = ofCoords (c * x) (c * y) (c * z) := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, smul_eq_mul]

lemma ofCoords_add (x1 y1 z1 x2 y2 z2 : ℝ) :
    ofCoords x1 y1 z1 + ofCoords x2 y2 z2 = ofCoords (x1 + x2) (y1 + y2) (z1 + z2) := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords]


lemma accel_coord_x (μ a ecc E : ℝ) (ha : a ≠ 0)
    (hD : 1 - ecc * Real.cos E ≠ 0)
    (hn2 : Real.sqrt (μ / a ^ 3) ^ 2 = μ / a ^ 3) :
    (-(Real.sqrt (μ / a ^ 3)) ^ 2 * ecc * Real.sin E
        / (1 - ecc * Real.cos E) ^ 3) * (-a * Real.sin E)
      + ((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3))
          * (((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3))
              * (-a * Real.cos E))
      = -(μ / (a * (1 - ecc * Real.cos E)) ^ 3)
          * (a * (Real.cos E - ecc)) := by
  set n := Real.sqrt (μ / a ^ 3)
  set D := 1 - ecc * Real.cos E
  have hD3 : D ^ 3 ≠ 0 := pow_ne_zero 3 hD
  have hna : n ^ 2 * a ^ 3 = μ := by
    rw [hn2]; field_simp [ha]
  field_simp [hD, ha, hD3]
  rw [hna]
  simp only [D]
  have : μ * ecc * Real.sin E ^ 2 + μ * ecc * Real.cos E ^ 2
      = μ * ecc := by
    rw [← mul_add, Real.sin_sq_add_cos_sq, mul_one]
  linarith

lemma accel_coord_y (μ a ecc E : ℝ) (ha : a ≠ 0)
    (hD : 1 - ecc * Real.cos E ≠ 0)
    (hn2 : Real.sqrt (μ / a ^ 3) ^ 2 = μ / a ^ 3) :
    (-(Real.sqrt (μ / a ^ 3)) ^ 2 * ecc * Real.sin E
        / (1 - ecc * Real.cos E) ^ 3)
        * (a * Real.sqrt (1 - ecc ^ 2) * Real.cos E)
      + ((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3))
          * (((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3))
              * (-a * Real.sqrt (1 - ecc ^ 2) * Real.sin E))
      = -(μ / (a * (1 - ecc * Real.cos E)) ^ 3)
          * (a * Real.sqrt (1 - ecc ^ 2) * Real.sin E) := by
  set n := Real.sqrt (μ / a ^ 3)
  set D := 1 - ecc * Real.cos E
  have hD3 : D ^ 3 ≠ 0 := pow_ne_zero 3 hD
  have hna : n ^ 2 * a ^ 3 = μ := by
    rw [hn2]; field_simp [ha]
  field_simp [hD, ha, hD3]
  have hre : n ^ 2 * Real.sin E * a ^ 3 = μ * Real.sin E := by
    calc
      n ^ 2 * Real.sin E * a ^ 3 = n ^ 2 * a ^ 3 * Real.sin E := by ring
      _ = μ * Real.sin E := by rw [hna]
  rw [hre]
  simp only [D]
  ring


lemma inShell_ellipse {μ a ecc M0 T R₁ R₂ : ℝ}
    (ha : 0 < a) (he : |ecc| < 1)
    (hlo : R₁ ≤ a * (1 - |ecc|)) (hhi : a * (1 + |ecc|) ≤ R₂) :
    InShell R₁ R₂ T (ellipse μ a ecc M0) := by
  intro t _
  have hnorm : ‖ellipse μ a ecc M0 t‖
      = a * (1 - ecc * Real.cos (E_of μ a ecc M0 t)) := by
    simpa [ellipse, E_of] using
      perifocal_norm (a := a) (ecc := ecc)
        (E := E_of μ a ecc M0 t) ha.le he.le
  have hcos : |ecc * Real.cos (E_of μ a ecc M0 t)| ≤ |ecc| := by
    rw [abs_mul]
    exact mul_le_of_le_one_right (abs_nonneg _) (Real.abs_cos_le_one _)
  have h1 : a * (1 - |ecc|) ≤ ‖ellipse μ a ecc M0 t‖ := by
    rw [hnorm]
    have : -|ecc| ≤ - (ecc * Real.cos (E_of μ a ecc M0 t)) := by
      linarith [(abs_le.mp hcos).2]
    nlinarith [ha.le]
  have h2 : ‖ellipse μ a ecc M0 t‖ ≤ a * (1 + |ecc|) := by
    rw [hnorm]
    have : -(ecc * Real.cos (E_of μ a ecc M0 t)) ≤ |ecc| := by
      linarith [(abs_le.mp hcos).1]
    nlinarith [ha.le]
  exact ⟨h1.trans' hlo, h2.trans hhi⟩

/-- Vector form of the vis-viva / two-body identity, matching
`HasDerivAt.smul`'s summand order `c • f' + c' • f` after `add_comm`. -/
lemma accel_vec {μ a ecc E : ℝ} (ha : a ≠ 0)
    (hD : 1 - ecc * Real.cos E ≠ 0)
    (hn2 : Real.sqrt (μ / a ^ 3) ^ 2 = μ / a ^ 3) :
    ((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3)) •
        (((1 - ecc * Real.cos E)⁻¹ * Real.sqrt (μ / a ^ 3)) •
          periAccE a ecc E)
      +
    (-(Real.sqrt (μ / a ^ 3)) ^ 2 * ecc * Real.sin E
        / (1 - ecc * Real.cos E) ^ 3) • periVel a ecc E
      = -(μ / (a * (1 - ecc * Real.cos E)) ^ 3) • perifocal a ecc E := by
  have hx := accel_coord_x μ a ecc E ha hD hn2
  have hy := accel_coord_y μ a ecc E ha hD hn2
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [periVel, periAccE, perifocal, ofCoords, PiLp.smul_apply, PiLp.add_apply,
      smul_eq_mul, neg_mul]
    -- `HasDerivAt.smul` order is `c * f' + c' * f`; coord lemmas use the reverse
    convert hx using 1
    · ring
    · ring
  · simp [periVel, periAccE, perifocal, ofCoords, PiLp.smul_apply, PiLp.add_apply,
      smul_eq_mul, neg_mul]
    convert hy using 1
    · ring
    · ring
  · simp [periVel, periAccE, perifocal, ofCoords, PiLp.smul_apply, PiLp.add_apply,
      smul_eq_mul]

lemma kepler_rhs_ellipse {μ a ecc M0 t : ℝ}
    (ha : 0 < a) (he : |ecc| < 1) :
    -(μ / ‖ellipse μ a ecc M0 t‖ ^ 3) • ellipse μ a ecc M0 t
      = -(μ / (a * (1 - ecc * Real.cos (E_of μ a ecc M0 t))) ^ 3) •
          perifocal a ecc (E_of μ a ecc M0 t) := by
  have hnorm : ‖perifocal a ecc (E_of μ a ecc M0 t)‖
      = a * (1 - ecc * Real.cos (E_of μ a ecc M0 t)) :=
    perifocal_norm (a := a) (ecc := ecc)
      (E := E_of μ a ecc M0 t) ha.le he.le
  simp only [ellipse, hnorm]

lemma isKeplerOn_ellipse {μ a ecc M0 T : ℝ}
    (hμ : 0 ≤ μ) (ha : 0 < a) (he : |ecc| < 1) :
    IsKeplerOn μ T (ellipse μ a ecc M0) := by
  refine ⟨fun s =>
      ((1 - ecc * Real.cos (E_of μ a ecc M0 s))⁻¹ * Real.sqrt (μ / a ^ 3)) •
        periVel a ecc (E_of μ a ecc M0 s), ?_, ?_, ?_⟩
  · intro t _; exact ellipse_ne_zero ha he
  · intro t _; exact hasDerivAt_ellipse (μ := μ) (a := a) (ecc := ecc)
      (M0 := M0) (t := t) he
  · intro t _ht
    have hn2 : Real.sqrt (μ / a ^ 3) ^ 2 = μ / a ^ 3 :=
      Real.sq_sqrt (div_nonneg hμ (pow_nonneg ha.le 3))
    have hD := D_of_ne (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
    have hc := hasDerivAt_E'_of (μ := μ) (a := a) (ecc := ecc) (M0 := M0) (t := t) he
    have hf := hasDerivAt_periVel_comp_E (μ := μ) (a := a) (ecc := ecc)
      (M0 := M0) (t := t) he
    have hsmul := hc.smul hf
    -- `hsmul` derivative is `c • f' + c' • f`, i.e. accel_vec's LHS.
    have hvec := accel_vec (μ := μ) (a := a) (ecc := ecc)
      (E := E_of μ a ecc M0 t) ha.ne' hD hn2
    have hrhs := kepler_rhs_ellipse (μ := μ) (a := a) (ecc := ecc)
      (M0 := M0) (t := t) ha he
    -- rewrite the Kepler target onto the vis-viva vector identity
    refine hrhs.symm ▸ ?_
    exact hvec ▸ hsmul

lemma isTarget_ellipse {μ a ecc M0 T R₁ R₂ : ℝ}
    (hμ : 0 ≤ μ) (ha : 0 < a) (he : |ecc| < 1)
    (hlo : R₁ ≤ a * (1 - |ecc|)) (hhi : a * (1 + |ecc|) ≤ R₂) :
    IsTarget μ R₁ R₂ T (ellipse μ a ecc M0) :=
  ⟨isKeplerOn_ellipse (T := T) hμ ha he,
    inShell_ellipse (T := T) ha he hlo hhi⟩

/-! Constant SO(3) action preserves Kepler. -/

def applyMat (M : Matrix (Fin 3) (Fin 3) ℝ) (v : Vec) : Vec :=
  WithLp.toLp 2 (M *ᵥ (WithLp.ofLp v))

lemma applyMat_smul (M : Matrix (Fin 3) (Fin 3) ℝ) (c : ℝ) (v : Vec) :
    applyMat M (c • v) = c • applyMat M v := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  simp [applyMat, Matrix.mulVec_smul]

lemma applyMat_add (M : Matrix (Fin 3) (Fin 3) ℝ) (u v : Vec) :
    applyMat M (u + v) = applyMat M u + applyMat M v := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  simp [applyMat, Matrix.mulVec_add]

lemma hasDerivAt_applyMat (M : Matrix (Fin 3) (Fin 3) ℝ)
    {x : ℝ → Vec} {x' : Vec} {t : ℝ} (hx : HasDerivAt x x' t) :
    HasDerivAt (fun s => applyMat M (x s)) (applyMat M x') t := by
  let L : Vec →L[ℝ] Vec :=
    { toFun := applyMat M
      map_add' := applyMat_add M
      map_smul' := by
        intro c v
        simpa using applyMat_smul M (c : ℝ) v
      cont := by
        -- continuous as composition of continuous maps
        have : Continuous (fun v : Vec => applyMat M v) := by
          unfold applyMat
          fun_prop
        exact this }
  exact L.hasFDerivAt.comp_hasDerivAt t hx

/-- 6-parameter family: (a, e, M0, yaw, pitch, roll). -/
def eulerR (α β γ : ℝ) : Matrix (Fin 3) (Fin 3) ℝ :=
  let cα := Real.cos α; let sα := Real.sin α
  let cβ := Real.cos β; let sβ := Real.sin β
  let cγ := Real.cos γ; let sγ := Real.sin γ
  !![cα * cβ, cα * sβ * sγ - sα * cγ, cα * sβ * cγ + sα * sγ;
     sα * cβ, sα * sβ * sγ + cα * cγ, sα * sβ * cγ - cα * sγ;
     -sβ,     cβ * sγ,                cβ * cγ]

def family (μ : ℝ) (p : Fin 6 → ℝ) : ℝ → Vec :=
  fun t => applyMat (eulerR (p 3) (p 4) (p 5))
    (ellipse μ (p 0) (p 1) (p 2) t)

/-- The circular-ish base point: a = 5/2, e = 0, M0 = 0, identity rotation. -/
def p0 : Fin 6 → ℝ := ![5 / 2, 0, 0, 0, 0, 0]

lemma eulerR_zero : eulerR 0 0 0 = 1 := by
  simp [eulerR, Matrix.one_fin_three]

lemma applyMat_one (v : Vec) : applyMat (1 : Matrix (Fin 3) (Fin 3) ℝ) v = v := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  simp [applyMat]

lemma family_p0 (μ t : ℝ) : family μ p0 t = ellipse μ (5 / 2) 0 0 t := by
  simp [family, p0, eulerR_zero, applyMat_one]

def rotX (γ : ℝ) : Matrix (Fin 3) (Fin 3) ℝ :=
  !![1, 0, 0;
     0, Real.cos γ, -Real.sin γ;
     0, Real.sin γ, Real.cos γ]

def rotY (β : ℝ) : Matrix (Fin 3) (Fin 3) ℝ :=
  !![Real.cos β, 0, Real.sin β;
     0, 1, 0;
     -Real.sin β, 0, Real.cos β]

def rotZ (α : ℝ) : Matrix (Fin 3) (Fin 3) ℝ :=
  !![Real.cos α, -Real.sin α, 0;
     Real.sin α, Real.cos α, 0;
     0, 0, 1]

private lemma matrix_eq_one_of_entries {A : Matrix (Fin 3) (Fin 3) ℝ}
    (h00 : A 0 0 = 1) (h01 : A 0 1 = 0) (h02 : A 0 2 = 0)
    (h10 : A 1 0 = 0) (h11 : A 1 1 = 1) (h12 : A 1 2 = 0)
    (h20 : A 2 0 = 0) (h21 : A 2 1 = 0) (h22 : A 2 2 = 1) :
    A = 1 := by
  ext i j
  fin_cases i <;> fin_cases j <;> simp [h00, h01, h02, h10, h11, h12, h20, h21, h22]

lemma rotX_mul_transpose (γ : ℝ) : (rotX γ)ᵀ * rotX γ = 1 := by
  have hcs : Real.cos γ ^ 2 + Real.sin γ ^ 2 = 1 := Real.cos_sq_add_sin_sq γ
  ext i j
  fin_cases i <;> fin_cases j <;>
    simp [rotX, Matrix.mul_apply, Fin.sum_univ_three] <;> nlinarith [hcs]

lemma rotY_mul_transpose (β : ℝ) : (rotY β)ᵀ * rotY β = 1 := by
  have hcs : Real.cos β ^ 2 + Real.sin β ^ 2 = 1 := Real.cos_sq_add_sin_sq β
  ext i j
  fin_cases i <;> fin_cases j <;>
    simp [rotY, Matrix.mul_apply, Fin.sum_univ_three] <;> nlinarith [hcs]

lemma rotZ_mul_transpose (α : ℝ) : (rotZ α)ᵀ * rotZ α = 1 := by
  have hcs : Real.cos α ^ 2 + Real.sin α ^ 2 = 1 := Real.cos_sq_add_sin_sq α
  ext i j
  fin_cases i <;> fin_cases j <;>
    simp [rotZ, Matrix.mul_apply, Fin.sum_univ_three] <;> nlinarith [hcs]

lemma eulerR_eq_prod (α β γ : ℝ) :
    eulerR α β γ = rotZ α * rotY β * rotX γ := by
  ext i j
  fin_cases i <;> fin_cases j <;>
    simp [eulerR, rotX, rotY, rotZ, Matrix.mul_apply, Fin.sum_univ_three] <;> ring

lemma mul_transpose_one_mul {n : Type*} [Fintype n] [DecidableEq n]
    {A B : Matrix n n ℝ} (hA : Aᵀ * A = 1) (hB : Bᵀ * B = 1) :
    (A * B)ᵀ * (A * B) = 1 := by
  calc
    (A * B)ᵀ * (A * B) = Bᵀ * Aᵀ * (A * B) := by rw [Matrix.transpose_mul]
    _ = Bᵀ * (Aᵀ * A * B) := by simp [Matrix.mul_assoc]
    _ = Bᵀ * (1 * B) := by rw [hA]
    _ = Bᵀ * B := by simp
    _ = 1 := hB

lemma eulerR_mul_transpose (α β γ : ℝ) :
    (eulerR α β γ)ᵀ * eulerR α β γ = 1 := by
  rw [eulerR_eq_prod, Matrix.mul_assoc]
  exact mul_transpose_one_mul (rotZ_mul_transpose α)
    (mul_transpose_one_mul (rotY_mul_transpose β) (rotX_mul_transpose γ))

lemma ofLp_applyMat (M : Matrix (Fin 3) (Fin 3) ℝ) (v : Vec) :
    (applyMat M v).ofLp = M *ᵥ v.ofLp :=
  WithLp.ofLp_toLp _ _

lemma applyMat_norm_of_mul_transpose
    {M : Matrix (Fin 3) (Fin 3) ℝ} (h : Mᵀ * M = 1) (v : Vec) :
    ‖applyMat M v‖ = ‖v‖ := by
  have hsq : ‖applyMat M v‖ ^ 2 = ‖v‖ ^ 2 := by
    have hs1 : 0 ≤ ∑ i : Fin 3, (applyMat M v).ofLp i ^ 2 :=
      Finset.sum_nonneg fun _ _ => sq_nonneg _
    have hs2 : 0 ≤ ∑ i : Fin 3, v.ofLp i ^ 2 :=
      Finset.sum_nonneg fun _ _ => sq_nonneg _
    have hn1 : ∑ i : Fin 3, ‖(applyMat M v).ofLp i‖ ^ 2
        = ∑ i : Fin 3, (applyMat M v).ofLp i ^ 2 := by
      simp [Real.norm_eq_abs, sq_abs]
    have hn2 : ∑ i : Fin 3, ‖v.ofLp i‖ ^ 2 = ∑ i : Fin 3, v.ofLp i ^ 2 := by
      simp [Real.norm_eq_abs, sq_abs]
    rw [EuclideanSpace.norm_eq, EuclideanSpace.norm_eq, hn1, hn2,
      Real.sq_sqrt hs1, Real.sq_sqrt hs2, ofLp_applyMat]
    set x := v.ofLp
    have hdot : (M *ᵥ x) ⬝ᵥ (M *ᵥ x) = x ⬝ᵥ x := by
      rw [dotProduct_mulVec]
      have htr : (M *ᵥ x) ᵥ* M = Mᵀ *ᵥ (M *ᵥ x) :=
        (mulVec_transpose M (M *ᵥ x)).symm
      rw [htr, mulVec_mulVec, h, one_mulVec]
    simpa [dotProduct, pow_two] using hdot
  exact (sq_eq_sq₀ (norm_nonneg _) (norm_nonneg _)).mp hsq

lemma applyMat_norm_euler (α β γ : ℝ) (v : Vec) :
    ‖applyMat (eulerR α β γ) v‖ = ‖v‖ :=
  applyMat_norm_of_mul_transpose (eulerR_mul_transpose α β γ) v

lemma applyMat_kepler {μ T : ℝ} {x : ℝ → Vec}
    (M : Matrix (Fin 3) (Fin 3) ℝ) (hO : ∀ v, ‖applyMat M v‖ = ‖v‖)
    (hx : IsKeplerOn μ T x) :
    IsKeplerOn μ T (fun t => applyMat M (x t)) := by
  obtain ⟨v, hnz, hd1, hd2⟩ := hx
  refine ⟨fun t => applyMat M (v t), ?_, ?_, ?_⟩
  · intro t ht h
    have : ‖x t‖ = 0 := by
      have hz : applyMat M (x t) = 0 := h
      rw [← hO (x t), hz, norm_zero]
    exact hnz t ht (norm_eq_zero.mp this)
  · intro t ht; exact hasDerivAt_applyMat M (hd1 t ht)
  · intro t ht
    have hder := hasDerivAt_applyMat M (hd2 t ht)
    have hvec :
        applyMat M (-(μ / ‖x t‖ ^ 3) • x t)
          = -(μ / ‖applyMat M (x t)‖ ^ 3) • applyMat M (x t) := by
      rw [applyMat_smul, hO]
    exact hvec ▸ hder

lemma inShell_applyMat {R₁ R₂ T : ℝ} {x : ℝ → Vec}
    (M : Matrix (Fin 3) (Fin 3) ℝ) (hO : ∀ v, ‖applyMat M v‖ = ‖v‖)
    (hx : InShell R₁ R₂ T x) :
    InShell R₁ R₂ T (fun t => applyMat M (x t)) := by
  intro t ht
  simpa [hO] using hx t ht

lemma isTarget_family {μ T R₁ R₂ : ℝ} {p : Fin 6 → ℝ}
    (hμ : 0 ≤ μ) (ha : 0 < p 0) (he : |p 1| < 1)
    (hlo : R₁ ≤ p 0 * (1 - |p 1|)) (hhi : p 0 * (1 + |p 1|) ≤ R₂) :
    IsTarget μ R₁ R₂ T (family μ p) := by
  have hx : IsTarget μ R₁ R₂ T (ellipse μ (p 0) (p 1) (p 2)) :=
    isTarget_ellipse (T := T) hμ ha he hlo hhi
  unfold family
  exact ⟨applyMat_kepler (M := eulerR (p 3) (p 4) (p 5))
      (applyMat_norm_euler (p 3) (p 4) (p 5)) hx.1,
    inShell_applyMat (M := eulerR (p 3) (p 4) (p 5))
      (applyMat_norm_euler (p 3) (p 4) (p 5)) hx.2⟩

/-- Partial IFT: `E` as a C¹ function of mean anomaly at fixed eccentricity. -/
lemma hasDerivAt_E_mean {ecc M : ℝ} (he : |ecc| < 1) :
    HasDerivAt (eccentricAnomaly ecc)
      (1 - ecc * Real.cos (eccentricAnomaly ecc M))⁻¹ M :=
  hasDerivAt_eccentricAnomaly he

/-! Bivariate Kepler inverse: `∂E/∂e` via the implicit function theorem. -/

def keplerF (e E : ℝ) : ℝ := E - e * Real.sin E

lemma hasDerivAt_keplerF_fst (e E : ℝ) :
    HasDerivAt (fun x => keplerF x E) (-Real.sin E) e := by
  change HasDerivAt ((fun _ : ℝ => E) - fun x => x * Real.sin E) (-Real.sin E) e
  have h0 := (hasDerivAt_const e E).sub ((hasDerivAt_id e).mul_const (Real.sin E))
  have hderiv : (0 - 1 * Real.sin E) = -Real.sin E := by ring
  exact hderiv ▸ h0

lemma hasFDerivAt_keplerF_fst (e E : ℝ) :
    HasFDerivAt (fun x => keplerF x E)
      (ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (-Real.sin E)) e :=
  (hasDerivAt_keplerF_fst e E).hasFDerivAt

lemma hasFDerivAt_keplerF_snd (e E : ℝ) :
    HasFDerivAt (fun y => keplerF e y)
      (ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (1 - e * Real.cos E)) E :=
  (hasDerivAt_keplerMap e E).hasFDerivAt

lemma continuous_smulRight_scalar :
    Continuous (fun c : ℝ => ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c) :=
  (ContinuousLinearMap.smulRightL ℝ ℝ ℝ (1 : ℝ →L[ℝ] ℝ)).continuous

lemma continuousAt_keplerF_fderiv_fst (u : ℝ × ℝ) :
    ContinuousAt (fun v : ℝ × ℝ =>
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (-Real.sin v.2)) u :=
  (continuous_smulRight_scalar.comp
    (continuous_neg.comp (Real.continuous_sin.comp continuous_snd))).continuousAt

lemma continuousAt_keplerF_fderiv_snd (u : ℝ × ℝ) :
    ContinuousAt (fun v : ℝ × ℝ =>
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (1 - v.1 * Real.cos v.2)) u :=
  (continuous_smulRight_scalar.comp
    (continuous_const.sub
      (continuous_fst.mul (Real.continuous_cos.comp continuous_snd)))).continuousAt

lemma smulRight_id_isInvertible {c : ℝ} (hc : c ≠ 0) :
    (ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c).IsInvertible :=
  ContinuousLinearMap.IsInvertible.of_inverse
    (g := ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c⁻¹)
    (by ext; simp; field_simp [hc])
    (by ext; simp; field_simp [hc])

lemma smulRight_id_inverse_apply {c : ℝ} (hc : c ≠ 0) (y : ℝ) :
    (ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c).inverse y = c⁻¹ * y := by
  have hf : ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c ∘L
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c⁻¹
      = ContinuousLinearMap.id ℝ ℝ := by
    ext; simp; field_simp [hc]
  have hg : ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c⁻¹ ∘L
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c
      = ContinuousLinearMap.id ℝ ℝ := by
    ext; simp; field_simp [hc]
  rw [ContinuousLinearMap.inverse_eq hf hg]
  simp [mul_comm]

/-- Implicit `∂E/∂e` at fixed mean anomaly. -/
lemma hasDerivAt_eccentricAnomaly_ecc {ecc M : ℝ} (he : |ecc| < 1) :
    HasDerivAt (fun e => eccentricAnomaly e M)
      (Real.sin (eccentricAnomaly ecc M)
        / (1 - ecc * Real.cos (eccentricAnomaly ecc M))) ecc := by
  set E0 := eccentricAnomaly ecc M
  set D := 1 - ecc * Real.cos E0
  have hD : D ≠ 0 := (keplerMap_deriv_pos (E := E0) he).ne'
  let f1 : ℝ → ℝ → ℝ →L[ℝ] ℝ :=
    fun _ y => ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (-Real.sin y)
  let f2 : ℝ → ℝ → ℝ →L[ℝ] ℝ :=
    fun x y => ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (1 - x * Real.cos y)
  have df1 : ∀ᶠ v : ℝ × ℝ in 𝓝 (ecc, E0),
      HasFDerivAt (fun x => keplerF x v.2) (f1 v.1 v.2) v.1 :=
    Eventually.of_forall fun v => hasFDerivAt_keplerF_fst v.1 v.2
  have df2 : ∀ᶠ v : ℝ × ℝ in 𝓝 (ecc, E0),
      HasFDerivAt (fun y => keplerF v.1 y) (f2 v.1 v.2) v.2 :=
    Eventually.of_forall fun v => hasFDerivAt_keplerF_snd v.1 v.2
  have cf1 : ContinuousAt (Function.uncurry f1) (ecc, E0) :=
    continuousAt_keplerF_fderiv_fst (ecc, E0)
  have cf2 : ContinuousAt (Function.uncurry f2) (ecc, E0) :=
    continuousAt_keplerF_fderiv_snd (ecc, E0)
  have if2 : (f2 ecc E0).IsInvertible := smulRight_id_isInvertible hD
  set ψ := implicitFunctionOfBivariate (f := keplerF) (f₁ := f1) (f₂ := f2)
    df1 df2 cf1 cf2 if2
  have hψ := hasStrictFDerivAt_implicitFunctionOfBivariate
    (f := keplerF) (f₁ := f1) (f₂ := f2) df1 df2 cf1 cf2 if2
  have hval :
      (-(f2 ecc E0).inverse ∘L f1 ecc E0) 1 = Real.sin E0 / D := by
    change (-(ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) D).inverse ∘L
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) (-Real.sin E0)) 1
      = Real.sin E0 / D
    simp [ContinuousLinearMap.comp_apply, ContinuousLinearMap.smulRight_apply,
      smul_eq_mul, mul_neg]
    rw [smulRight_id_inverse_apply hD]
    field_simp [hD]
  have hψderiv : HasDerivAt ψ (Real.sin E0 / D) ecc :=
    hval ▸ hψ.hasFDerivAt.hasDerivAt
  have hagree : ∀ᶠ e in 𝓝 ecc, ψ e = eccentricAnomaly e M := by
    have hψeq := eventually_apply_implicitFunctionOfBivariate
      (f := keplerF) (f₁ := f1) (f₂ := f2) df1 df2 cf1 cf2 if2
    have hnh : ∀ᶠ e : ℝ in 𝓝 ecc, |e| < 1 :=
      (continuous_abs.continuousAt (x := ecc)).preimage_mem_nhds (Iio_mem_nhds he)
    filter_upwards [hψeq, hnh] with e heq hlt
    have hM : keplerF ecc E0 = M := by
      simpa [keplerF, keplerMap, E0] using keplerMap_eccentricAnomaly he
    have hψM : keplerF e (ψ e) = M := heq.trans hM
    have hEM : keplerMap e (eccentricAnomaly e M) = M :=
      keplerMap_eccentricAnomaly hlt
    have : keplerMap e (ψ e) = keplerMap e (eccentricAnomaly e M) := by
      simpa [keplerMap, keplerF] using hψM.trans hEM.symm
    exact (keplerMap_strictMono hlt).injective this
  have hEq : (fun e => eccentricAnomaly e M) =ᶠ[𝓝 ecc] ψ :=
    hagree.mono fun _ h => h.symm
  exact hψderiv.congr_of_eventuallyEq hEq

/-! The 6×6 t²/t³ line-of-sight jet against Cartesian ICs.

At the circular instance the target is `r(0)=(5/2,0,0)`,
`v(0)=(0,√10/5,0)` (Kepler with `μ=1`).  Higher time derivatives of
`r` are algebraic in `(r,v)` via `r''=-(μ/‖r‖³)•r`.  The observer is
the unit circle.  Rows of `jetMatrix` are the t² and t³ Taylor
coefficients of `los` (x,y,z); columns are `∂/∂(x,y,z,vx,vy,vz)`.
The matrix is permutation-equivalent to three 2×2 blocks, so its
determinant is their product. -/

def jetA : ℝ := 56 / 135 - 16 * Real.sqrt 10 / 135
def jetB : ℝ := 4 / 9 - 4 * Real.sqrt 10 / 45
def jetC : ℝ := -934 / 1125 + 8 * Real.sqrt 10 / 45
def jetD : ℝ := -1402 / 3375 + 8 * Real.sqrt 10 / 135
def jetE : ℝ := -3338 / 3375 + 4304 * Real.sqrt 10 / 16875
def jetF : ℝ := -3194 / 3375 + 20944 * Real.sqrt 10 / 84375
def jetG : ℝ := -102 / 125 + 8 * Real.sqrt 10 / 45
def jetH : ℝ := -1354 / 3375 + 8 * Real.sqrt 10 / 135

/-- Linearized t²/t³ los-jet vs Cartesian ICs at the circular instance. -/
def jetMatrix : Matrix (Fin 6) (Fin 6) ℝ :=
  !![jetA, 0, 0, 0, jetB, 0;
     0, jetC, 0, jetB, 0, 0;
     0, 0, jetD, 0, 0, 0;
     0, jetE, 0, jetA, 0, 0;
     jetF, 0, 0, 0, jetG, 0;
     0, 0, 0, 0, 0, jetH]

/-- Reorder to the three 2×2 blocks
`(z,vz)`, `(x,vy)`, `(y,vx)`.  Same permutation on rows and columns. -/
def jetReorder : Fin 6 ≃ Fin 6 where
  toFun i := ![ (2 : Fin 6), 5, 0, 4, 1, 3 ] i
  invFun j := ![ (2 : Fin 6), 4, 0, 5, 3, 1 ] j
  left_inv i := by fin_cases i <;> simp
  right_inv j := by fin_cases j <;> simp

lemma jetMatrix_submatrix_00 :
    (jetMatrix.submatrix jetReorder jetReorder) 0 0 = jetD := by
  simp [jetMatrix, jetReorder]

lemma jetMatrix_submatrix_11 :
    (jetMatrix.submatrix jetReorder jetReorder) 1 1 = jetH := by
  simp [jetMatrix, jetReorder]

lemma sqrt10_sq : Real.sqrt 10 ^ 2 = 10 :=
  Real.sq_sqrt (by norm_num)

lemma jet_block_AG :
    jetA * jetG - jetB * jetF = 8 * (971 - 253 * Real.sqrt 10) / 84375 := by
  unfold jetA jetB jetF jetG
  field_simp
  ring_nf
  simp [pow_two]
  ring

lemma jet_block_CA :
    jetC * jetA - jetB * jetE = 8 * (2111 - 553 * Real.sqrt 10) / 151875 := by
  unfold jetA jetB jetC jetE
  field_simp
  ring_nf
  simp [pow_two]
  ring

lemma jetD_eq : jetD = 2 * (-701 + 100 * Real.sqrt 10) / 3375 := by
  unfold jetD
  field_simp
  ring

lemma jetH_eq : jetH = 2 * (-677 + 100 * Real.sqrt 10) / 3375 := by
  unfold jetH
  field_simp
  ring

lemma jet_block_AG_ne : 971 - 253 * Real.sqrt 10 ≠ 0 := by
  have ha : (0 : ℝ) < 971 := by norm_num
  have hb : (0 : ℝ) < 253 := by norm_num
  have hsq : (253 : ℝ) ^ 2 * 10 < (971 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

lemma jet_block_CA_ne : 2111 - 553 * Real.sqrt 10 ≠ 0 := by
  have ha : (0 : ℝ) < 2111 := by norm_num
  have hb : (0 : ℝ) < 553 := by norm_num
  have hsq : (553 : ℝ) ^ 2 * 10 < (2111 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

lemma jetD_ne : jetD ≠ 0 := by
  rw [jetD_eq]
  refine div_ne_zero (mul_ne_zero (by norm_num) ?_) (by norm_num)
  have ha : (0 : ℝ) < 701 := by norm_num
  have hb : (0 : ℝ) < 100 := by norm_num
  have hsq : (100 : ℝ) ^ 2 * 10 < (701 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

lemma jetH_ne : jetH ≠ 0 := by
  rw [jetH_eq]
  exact div_ne_zero (mul_ne_zero (by norm_num) jet_factor_ne) (by norm_num)

lemma jet_simple_factor_ne :
    (3457543340567 - 1090652821342 * Real.sqrt 10 : ℝ) ≠ 0 := by
  have ha : (0 : ℝ) < 3457543340567 := by norm_num
  have hb : (0 : ℝ) < 1090652821342 := by norm_num
  have hsq : (1090652821342 : ℝ) ^ 2 * 10
      < (3457543340567 : ℝ) ^ 2 := by norm_num
  have hlt := sqrt_mul_lt_of_sq ha hb hsq
  linarith

/-- Product of the three 2×2 block determinants. -/
lemma jet_block_prod :
    jetD * jetH * (jetA * jetG - jetB * jetF) * (jetC * jetA - jetB * jetE)
      = 256 * (3457543340567 - 1090652821342 * Real.sqrt 10)
        / 145964630126953125 := by
  rw [jetD_eq, jetH_eq, jet_block_AG, jet_block_CA]
  field_simp
  ring_nf
  have hs2 : Real.sqrt 10 ^ 2 = 10 := sqrt10_sq
  have hs3 : Real.sqrt 10 ^ 3 = 10 * Real.sqrt 10 := by
    rw [pow_succ, hs2]
  have hs4 : Real.sqrt 10 ^ 4 = 100 := by
    rw [show (4 : ℕ) = 2 + 2 from rfl, pow_add, hs2]; norm_num
  simp [hs2, hs3, hs4]
  ring

def jetBlk2 : Matrix (Fin 2) (Fin 2) ℝ :=
  !![jetD, 0; 0, jetH]

def jetBlk4a : Matrix (Fin 2) (Fin 2) ℝ :=
  !![jetA, jetB; jetF, jetG]

def jetBlk4b : Matrix (Fin 2) (Fin 2) ℝ :=
  !![jetC, jetB; jetE, jetA]

def jetBlk4sum : Matrix (Fin 2 ⊕ Fin 2) (Fin 2 ⊕ Fin 2) ℝ :=
  Matrix.fromBlocks jetBlk4a 0 0 jetBlk4b

def jetBlk4 : Matrix (Fin 4) (Fin 4) ℝ :=
  Matrix.reindex finSumFinEquiv finSumFinEquiv jetBlk4sum

def jetBlk6 : Matrix (Fin 2 ⊕ Fin 4) (Fin 2 ⊕ Fin 4) ℝ :=
  Matrix.fromBlocks jetBlk2 0 0 jetBlk4

lemma jetBlk2_det : jetBlk2.det = jetD * jetH := by
  simp [jetBlk2, Matrix.det_fin_two]

lemma jetBlk4a_det : jetBlk4a.det = jetA * jetG - jetB * jetF := by
  simp [jetBlk4a, Matrix.det_fin_two]

lemma jetBlk4b_det : jetBlk4b.det = jetC * jetA - jetB * jetE := by
  simp [jetBlk4b, Matrix.det_fin_two]

lemma jetBlk4_det :
    jetBlk4.det = (jetA * jetG - jetB * jetF) * (jetC * jetA - jetB * jetE) := by
  rw [jetBlk4, Matrix.det_reindex_self, jetBlk4sum, Matrix.det_fromBlocks_zero₁₂,
    jetBlk4a_det, jetBlk4b_det]

lemma jetBlk6_det :
    jetBlk6.det
      = jetD * jetH * (jetA * jetG - jetB * jetF)
        * (jetC * jetA - jetB * jetE) := by
  rw [jetBlk6, Matrix.det_fromBlocks_zero₁₂, jetBlk2_det, jetBlk4_det]
  ring

def jetReordered : Matrix (Fin 6) (Fin 6) ℝ :=
  !![jetD, 0, 0, 0, 0, 0;
     0, jetH, 0, 0, 0, 0;
     0, 0, jetA, jetB, 0, 0;
     0, 0, jetF, jetG, 0, 0;
     0, 0, 0, 0, jetC, jetB;
     0, 0, 0, 0, jetE, jetA]

lemma jetMatrix_submatrix_eq_reordered :
    jetMatrix.submatrix jetReorder jetReorder = jetReordered := by
  ext i j
  fin_cases i <;> fin_cases j <;> simp [jetMatrix, jetReorder, jetReordered]

lemma fin6_cast0 : (0 : Fin 6) = Fin.castAdd 4 (0 : Fin 2) := rfl
lemma fin6_cast1 : (1 : Fin 6) = Fin.castAdd 4 (1 : Fin 2) := rfl
lemma fin6_nat2 : (2 : Fin 6) = Fin.natAdd 2 (0 : Fin 4) := rfl
lemma fin6_nat3 : (3 : Fin 6) = Fin.natAdd 2 (1 : Fin 4) := rfl
lemma fin6_nat4 : (4 : Fin 6) = Fin.natAdd 2 (2 : Fin 4) := rfl
lemma fin6_nat5 : (5 : Fin 6) = Fin.natAdd 2 (3 : Fin 4) := rfl

lemma fin4_cast0 : (0 : Fin 4) = Fin.castAdd 2 (0 : Fin 2) := rfl
lemma fin4_cast1 : (1 : Fin 4) = Fin.castAdd 2 (1 : Fin 2) := rfl
lemma fin4_nat2 : (2 : Fin 4) = Fin.natAdd 2 (0 : Fin 2) := rfl
lemma fin4_nat3 : (3 : Fin 4) = Fin.natAdd 2 (1 : Fin 2) := rfl

lemma symm6_0 : (finSumFinEquiv (m := 2) (n := 4)).symm (0 : Fin 6) = Sum.inl 0 := by
  rw [fin6_cast0, finSumFinEquiv_symm_apply_castAdd]
lemma symm6_1 : (finSumFinEquiv (m := 2) (n := 4)).symm (1 : Fin 6) = Sum.inl 1 := by
  rw [fin6_cast1, finSumFinEquiv_symm_apply_castAdd]
lemma symm6_2 : (finSumFinEquiv (m := 2) (n := 4)).symm (2 : Fin 6) = Sum.inr 0 := by
  rw [fin6_nat2, finSumFinEquiv_symm_apply_natAdd]
lemma symm6_3 : (finSumFinEquiv (m := 2) (n := 4)).symm (3 : Fin 6) = Sum.inr 1 := by
  rw [fin6_nat3, finSumFinEquiv_symm_apply_natAdd]
lemma symm6_4 : (finSumFinEquiv (m := 2) (n := 4)).symm (4 : Fin 6) = Sum.inr 2 := by
  rw [fin6_nat4, finSumFinEquiv_symm_apply_natAdd]
lemma symm6_5 : (finSumFinEquiv (m := 2) (n := 4)).symm (5 : Fin 6) = Sum.inr 3 := by
  rw [fin6_nat5, finSumFinEquiv_symm_apply_natAdd]

lemma symm4_0 : (finSumFinEquiv (m := 2) (n := 2)).symm (0 : Fin 4) = Sum.inl 0 := by
  rw [fin4_cast0, finSumFinEquiv_symm_apply_castAdd]
lemma symm4_1 : (finSumFinEquiv (m := 2) (n := 2)).symm (1 : Fin 4) = Sum.inl 1 := by
  rw [fin4_cast1, finSumFinEquiv_symm_apply_castAdd]
lemma symm4_2 : (finSumFinEquiv (m := 2) (n := 2)).symm (2 : Fin 4) = Sum.inr 0 := by
  rw [fin4_nat2, finSumFinEquiv_symm_apply_natAdd]
lemma symm4_3 : (finSumFinEquiv (m := 2) (n := 2)).symm (3 : Fin 4) = Sum.inr 1 := by
  rw [fin4_nat3, finSumFinEquiv_symm_apply_natAdd]

lemma jetReordered_eq_reindex :
    jetReordered = Matrix.reindex finSumFinEquiv finSumFinEquiv jetBlk6 := by
  ext i j
  rw [Matrix.reindex_apply, Matrix.submatrix_apply]
  fin_cases i <;> fin_cases j <;>
    simp [jetReordered, jetBlk6, jetBlk4, jetBlk4sum, jetBlk2, jetBlk4a, jetBlk4b,
      symm6_0, symm6_1, symm6_2, symm6_3, symm6_4, symm6_5,
      symm4_0, symm4_1, symm4_2, symm4_3,
      Matrix.fromBlocks_apply₁₁, Matrix.fromBlocks_apply₁₂,
      Matrix.fromBlocks_apply₂₁, Matrix.fromBlocks_apply₂₂,
      Matrix.reindex_apply, Matrix.submatrix_apply]

lemma jetReorder_eq_reindex :
    jetMatrix.submatrix jetReorder jetReorder
      = Matrix.reindex finSumFinEquiv finSumFinEquiv jetBlk6 := by
  rw [jetMatrix_submatrix_eq_reordered, jetReordered_eq_reindex]

lemma jetMatrix_det_eq_blocks :
    jetMatrix.det
      = jetD * jetH * (jetA * jetG - jetB * jetF)
        * (jetC * jetA - jetB * jetE) := by
  have h1 := Matrix.det_submatrix_equiv_self (A := jetMatrix) jetReorder
  have h2 : (jetMatrix.submatrix jetReorder jetReorder).det = jetBlk6.det := by
    rw [jetReorder_eq_reindex, Matrix.det_reindex_self]
  rw [← h1, h2, jetBlk6_det]

/-- In-kernel determinant of the Cartesian t²/t³ los-jet. -/
lemma jetMatrix_det :
    jetMatrix.det
      = 256 * (3457543340567 - 1090652821342 * Real.sqrt 10)
        / 145964630126953125 := by
  rw [jetMatrix_det_eq_blocks, jet_block_prod]

lemma jetMatrix_det_ne_zero : jetMatrix.det ≠ 0 := by
  rw [jetMatrix_det]
  refine div_ne_zero ?_ (by norm_num)
  exact mul_ne_zero (by norm_num) jet_simple_factor_ne

/-! Second-difference linearity and RecoveredBy packing. -/

lemma secondDiff_sub (f g : ℝ → Vec) (h : ℝ) :
    secondDiff (fun t => f t - g t) h = secondDiff f h - secondDiff g h := by
  ext i
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
  ring

lemma not_both_recovered
    {e : ℝ → Vec} {ε T h : ℝ} {ξ x y : ℝ → Vec}
    (hT : 2 * h ∈ Set.Icc (0 : ℝ) T)
    (hsep : 8 * ε < ‖secondDiff (fun t => los e x t - los e y t) h‖)
    (hx : RecoveredBy e ε T ξ x) (hy : RecoveredBy e ε T ξ y) : False := by
  have hx' := recoveredBy_secondDiff hT hx
  have hy' := recoveredBy_secondDiff hT hy
  have hlin :
      secondDiff (fun t => los e x t - los e y t) h =
        secondDiff (fun t => los e x t - los e ξ t) h
        - secondDiff (fun t => los e y t - los e ξ t) h := by
    ext i
    simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  have : ‖secondDiff (fun t => los e x t - los e y t) h‖ ≤ 8 * ε := by
    rw [hlin]
    exact (norm_sub_le _ _).trans (by linarith [hx', hy'])
  linarith

lemma not_both_recovered_two
    {e : ℝ → Vec} {ε T h₁ h₂ : ℝ} {ξ x y : ℝ → Vec}
    (hT₁ : 2 * h₁ ∈ Set.Icc (0 : ℝ) T)
    (hT₂ : 2 * h₂ ∈ Set.Icc (0 : ℝ) T)
    (hsep : 16 * ε <
      ‖secondDiff (fun t => los e x t - los e y t) h₁‖ +
        ‖secondDiff (fun t => los e x t - los e y t) h₂‖)
    (hx : RecoveredBy e ε T ξ x) (hy : RecoveredBy e ε T ξ y) : False := by
  have hx1 := recoveredBy_secondDiff hT₁ hx
  have hy1 := recoveredBy_secondDiff hT₁ hy
  have hx2 := recoveredBy_secondDiff hT₂ hx
  have hy2 := recoveredBy_secondDiff hT₂ hy
  have hlin1 :
      secondDiff (fun t => los e x t - los e y t) h₁ =
        secondDiff (fun t => los e x t - los e ξ t) h₁
        - secondDiff (fun t => los e y t - los e ξ t) h₁ := by
    ext i
    simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  have hlin2 :
      secondDiff (fun t => los e x t - los e y t) h₂ =
        secondDiff (fun t => los e x t - los e ξ t) h₂
        - secondDiff (fun t => los e y t - los e ξ t) h₂ := by
    ext i
    simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  have b1 : ‖secondDiff (fun t => los e x t - los e y t) h₁‖ ≤ 8 * ε := by
    rw [hlin1]; exact (norm_sub_le _ _).trans (by linarith [hx1, hy1])
  have b2 : ‖secondDiff (fun t => los e x t - los e y t) h₂‖ ≤ 8 * ε := by
    rw [hlin2]; exact (norm_sub_le _ _).trans (by linarith [hx2, hy2])
  linarith

lemma packing_eps5_unbounded_scaled
    {ι : Type*} (S : ℝ → Set ι) {c : ℝ} (hc : 0 < c)
    (hlb : ∀ ε : ℝ, 0 < ε → ε ≤ 1 / 2 →
      ((S ε).ncard : ℝ) ≥ (c / ε) ^ 6) :
    ¬ ∃ C : ℝ, ∀ ε : ℝ, 0 < ε → ε ≤ 1 / 2 → ((S ε).ncard : ℝ) * ε ^ 5 ≤ C := by
  intro ⟨C, hC⟩
  let ε : ℝ := min (1 / 2) (c ^ 6 / (2 * (|C| + 1)))
  have hC1 : 0 < |C| + 1 := by positivity
  have hc6 : 0 < c ^ 6 := pow_pos hc 6
  have hεpos : 0 < ε := by
    have : 0 < c ^ 6 / (2 * (|C| + 1)) := by positivity
    exact lt_min (by norm_num) this
  have hεle : ε ≤ 1 / 2 := min_le_left _ _
  have hlb' := hlb ε hεpos hεle
  have hprod := hC ε hεpos hεle
  have hge0 : ((S ε).ncard : ℝ) * ε ^ 5 ≥ (c / ε) ^ 6 * ε ^ 5 := by gcongr
  have hsimp : (c / ε) ^ 6 * ε ^ 5 = c ^ 6 / ε := by
    field_simp [hεpos.ne']
  have hge : ((S ε).ncard : ℝ) * ε ^ 5 ≥ c ^ 6 / ε := by
    rw [← hsimp]; exact hge0
  have hεsmall : ε ≤ c ^ 6 / (2 * (|C| + 1)) := min_le_right _ _
  have hδ : 0 < c ^ 6 / (2 * (|C| + 1)) := by positivity
  have hineq : 2 * (|C| + 1) / c ^ 6 ≤ 1 / ε := by
    have := (one_div_le_one_div hδ hεpos).mpr hεsmall
    simpa [one_div_div] using this
  have hbig : 2 * (|C| + 1) ≤ c ^ 6 / ε := by
    have hc6n : c ^ 6 ≠ 0 := hc6.ne'
    have hεn : ε ≠ 0 := hεpos.ne'
    rw [div_le_div_iff₀ hc6 hεpos] at hineq
    -- hineq : 2(|C|+1) * ε ≤ c^6 * 1
    have : 2 * (|C| + 1) * ε ≤ c ^ 6 := by
      simpa [mul_one] using hineq
    rw [le_div_iff₀ hεpos]
    simpa [mul_comm] using this
  have hchain : 2 * (|C| + 1) ≤ C :=
    hbig.trans ((ge_iff_le.mp hge).trans hprod)
  nlinarith [le_abs_self C, abs_nonneg C, neg_le_abs C]

def pStar : Fin 6 → ℝ := ![5 / 2, (1 / 10 : ℝ), 0, 0, 0, 0]

lemma pStar_target (T : ℝ) :
    IsTarget (1 : ℝ) 2 3 T (family 1 pStar) :=
  isTarget_family (μ := 1) (T := T) (R₁ := 2) (R₂ := 3) (p := pStar)
    (by norm_num)
    (by norm_num [pStar])
    (by norm_num [pStar])
    (by norm_num [pStar])
    (by norm_num [pStar])

def hSD1 : ℝ := 1 / 4
def hSD2 : ℝ := 1 / 2

lemma hSD1_window : 2 * hSD1 ∈ Set.Icc (0 : ℝ) 1 := by
  unfold hSD1; norm_num

lemma hSD2_window : 2 * hSD2 ∈ Set.Icc (0 : ℝ) 1 := by
  unfold hSD2; norm_num

/-- Box radius around `pStar` that stays in the shell `[2, 3]`. -/
def packRadius : ℝ := 1 / 40

lemma packBox_target (T : ℝ) {p : Fin 6 → ℝ}
    (hp : ∀ i, |p i - pStar i| ≤ packRadius) :
    IsTarget (1 : ℝ) 2 3 T (family 1 p) := by
  have ha : 0 < p 0 := by
    have := hp 0
    have : |p 0 - 5 / 2| ≤ 1 / 40 := by simpa [pStar, packRadius] using this
    nlinarith [le_abs_self (p 0 - 5 / 2), neg_le_abs (p 0 - 5 / 2)]
  have he : |p 1| < 1 := by
    have := hp 1
    have : |p 1 - 1 / 10| ≤ 1 / 40 := by simpa [pStar, packRadius] using this
    have : |p 1| ≤ |p 1 - 1 / 10| + |(1 / 10 : ℝ)| := by simpa using abs_sub_le (p 1) (1 / 10 : ℝ) 0
    nlinarith
  have hlo : (2 : ℝ) ≤ p 0 * (1 - |p 1|) := by
    have h0 := hp 0
    have h1 := hp 1
    have ha' : |p 0 - 5 / 2| ≤ 1 / 40 := by simpa [pStar, packRadius] using h0
    have he' : |p 1 - 1 / 10| ≤ 1 / 40 := by simpa [pStar, packRadius] using h1
    have hp0 : 5 / 2 - 1 / 40 ≤ p 0 := by nlinarith [neg_le_abs (p 0 - 5 / 2)]
    have hp1 : |p 1| ≤ 1 / 10 + 1 / 40 := by
      have : |p 1| ≤ |p 1 - 1 / 10| + |(1 / 10 : ℝ)| := by simpa using abs_sub_le (p 1) (1 / 10 : ℝ) 0
      nlinarith [abs_of_nonneg (by norm_num : (0 : ℝ) ≤ 1 / 10)]
    have : (5 / 2 - 1 / 40) * (1 - (1 / 10 + 1 / 40)) ≤ p 0 * (1 - |p 1|) := by
      have hnn : 0 ≤ 1 - |p 1| := by nlinarith
      have hnn' : 0 ≤ 5 / 2 - 1 / 40 := by norm_num
      nlinarith [hp0]
    nlinarith
  have hhi : p 0 * (1 + |p 1|) ≤ 3 := by
    have h0 := hp 0
    have h1 := hp 1
    have ha' : |p 0 - 5 / 2| ≤ 1 / 40 := by simpa [pStar, packRadius] using h0
    have he' : |p 1 - 1 / 10| ≤ 1 / 40 := by simpa [pStar, packRadius] using h1
    have hp0 : p 0 ≤ 5 / 2 + 1 / 40 := by nlinarith [le_abs_self (p 0 - 5 / 2)]
    have hp1 : |p 1| ≤ 1 / 10 + 1 / 40 := by
      have : |p 1| ≤ |p 1 - 1 / 10| + |(1 / 10 : ℝ)| := by simpa using abs_sub_le (p 1) (1 / 10 : ℝ) 0
      nlinarith [abs_of_nonneg (by norm_num : (0 : ℝ) ≤ 1 / 10)]
    nlinarith
  exact isTarget_family (μ := 1) (T := T) (R₁ := 2) (R₂ := 3) (p := p)
    (by norm_num) ha he hlo hhi

/-- Integer lattice in the 6-parameter box. -/
def gridPt (n : ℕ) (δ : ℝ) (u : Fin 6 → Fin n) : Fin 6 → ℝ :=
  fun i => pStar i + δ * (((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2)

lemma gridPt_mem_box {n : ℕ} {δ : ℝ} (hn : 0 < n)
    (hδ : 0 ≤ δ) (hbd : δ * ((n : ℝ) - 1) / 2 ≤ packRadius)
    (u : Fin 6 → Fin n) (i : Fin 6) :
    |gridPt n δ u i - pStar i| ≤ packRadius := by
  simp only [gridPt, add_sub_cancel_left, abs_mul]
  have habs : |δ| = δ := abs_of_nonneg hδ
  rw [habs]
  have hidx : |((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2| ≤ ((n : ℝ) - 1) / 2 := by
    have hu : (u i : ℕ) < n := (u i).isLt
    have hu0 : (0 : ℝ) ≤ (u i : ℕ) := Nat.cast_nonneg _
    have hun : ((u i : ℕ) : ℝ) ≤ (n : ℝ) - 1 := by
      have : (u i : ℕ) ≤ n - 1 := Nat.le_pred_of_lt hu
      have hn1 : (1 : ℝ) ≤ n := Nat.one_le_cast.mpr (Nat.succ_le_of_lt hn)
      exact (Nat.cast_le.mpr this).trans_eq (by
        cases n with
        | zero => exact (lt_irrefl _ hn).elim
        | succ n =>
          simp [Nat.cast_succ])
    have hhalf : 0 ≤ ((n : ℝ) - 1) / 2 := by
      have : 1 ≤ (n : ℝ) := Nat.one_le_cast.mpr (Nat.succ_le_of_lt hn)
      linarith
    exact abs_sub_le_iff.2 ⟨by linarith, by linarith⟩
  have : δ * |((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2| ≤ δ * (((n : ℝ) - 1) / 2) := by
    gcongr
  have : δ * (((n : ℝ) - 1) / 2) = δ * ((n : ℝ) - 1) / 2 := by ring
  nlinarith

lemma gridPt_target (T : ℝ) {n : ℕ} {δ : ℝ} (hn : 0 < n)
    (hδ : 0 ≤ δ) (hbd : δ * ((n : ℝ) - 1) / 2 ≤ packRadius)
    (u : Fin 6 → Fin n) :
    IsTarget (1 : ℝ) 2 3 T (family 1 (gridPt n δ u)) :=
  packBox_target T (gridPt_mem_box hn hδ hbd u)

lemma ncard_grid (n : ℕ) :
    (Set.univ : Set (Fin 6 → Fin n)).ncard = n ^ 6 := by
  rw [Set.ncard_univ, Nat.card_fun, Nat.card_fin, Nat.card_fin]

lemma gridPt_injective {n : ℕ} {δ : ℝ} (hδ : 0 < δ) {u v : Fin 6 → Fin n}
    (h : gridPt n δ u = gridPt n δ v) : u = v := by
  funext i
  have hcongr := congrArg (fun f : Fin 6 → ℝ => f i) h
  -- gridPt i = pStar i + δ * (↑↑(u i) - (↑n-1)/2)
  simp only [gridPt] at hcongr
  have : δ * (((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2) =
      δ * (((v i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2) := by linarith
  have hδ0 : δ ≠ 0 := hδ.ne'
  have : ((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2 =
      ((v i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2 := by
    apply mul_left_cancel₀ hδ0
    exact this
  have : ((u i : ℕ) : ℝ) = ((v i : ℕ) : ℝ) := by linarith
  exact Fin.ext (Nat.cast_injective this)

lemma exhaustive_ncard_ge_packing
    {μ R₁ R₂ T ε h : ℝ} {e : ℝ → Vec} {P S : Set (ℝ → Vec)}
    (hT : 2 * h ∈ Set.Icc (0 : ℝ) T)
    (hSfin : S.Finite)
    (hP : ∀ x ∈ P, IsTarget μ R₁ R₂ T x)
    (hsep : ∀ x ∈ P, ∀ y ∈ P, x ≠ y →
      8 * ε < ‖secondDiff (fun t => los e x t - los e y t) h‖)
    (hcov : IsExhaustiveCover μ R₁ R₂ T ε e S) :
    P.ncard ≤ S.ncard := by
  classical
  obtain ⟨_, hrec⟩ := hcov
  let f : (ℝ → Vec) → (ℝ → Vec) := fun x =>
    if hx : x ∈ P then Classical.choose (hrec x (hP x hx)) else x
  have hfmem : ∀ x ∈ P, f x ∈ S := by
    intro x hx
    simpa [f, dif_pos hx] using (Classical.choose_spec (hrec x (hP x hx))).1
  have hfrec : ∀ x ∈ P, RecoveredBy e ε T (f x) x := by
    intro x hx
    simpa [f, dif_pos hx] using (Classical.choose_spec (hrec x (hP x hx))).2
  refine Set.ncard_le_ncard_of_injOn f hfmem ?_ hSfin
  intro x hx y hy hxy
  by_contra hne
  exact not_both_recovered hT (hsep x hx y hy hne) (hfrec x hx) (hxy ▸ hfrec y hy)

/-! Cartesian IC chart at the circular instance.

`sStar` is `(r,v) = ((5/2,0,0),(0,√10/5,0))`.  The Euler-family chart
at `e=0` is degenerate in `(M0, yaw)`; this chart is not.  `jetMatrix`
is the t²/t³ los-jet in these coordinates. -/

def sStar : Fin 6 → ℝ := ![5 / 2, 0, 0, 0, Real.sqrt 10 / 5, 0]

def obs : ℝ → Vec := circular 1 1 0

lemma isObserver_obs (T : ℝ) : IsObserver (1 : ℝ) T obs :=
  isObserver_unitCircle T

def statePos (s : Fin 6 → ℝ) : Vec := ofCoords (s 0) (s 1) (s 2)

def stateVel (s : Fin 6 → ℝ) : Vec := ofCoords (s 3) (s 4) (s 5)

lemma sStar_pos : statePos sStar = ofCoords (5 / 2) 0 0 := by
  simp [statePos, sStar]

lemma sStar_vel : stateVel sStar = ofCoords 0 (Real.sqrt 10 / 5) 0 := by
  simp [stateVel, sStar]

/-- Pack two `Vec` second-differences as a 6-tuple (sup-normed). -/
def sdPairCoord (w₁ w₂ : Vec) : Fin 6 → ℝ :=
  ![w₁.ofLp 0, w₁.ofLp 1, w₁.ofLp 2, w₂.ofLp 0, w₂.ofLp 1, w₂.ofLp 2]

lemma coord_le_euclidean (w : Vec) (i : Fin 3) : |w.ofLp i| ≤ ‖w‖ := by
  have hEu : ‖w‖ = Real.sqrt (∑ j : Fin 3, ‖w.ofLp j‖ ^ 2) := by
    rw [EuclideanSpace.norm_eq]
  have hsq : ‖w.ofLp i‖ ^ 2 ≤ ∑ j : Fin 3, ‖w.ofLp j‖ ^ 2 :=
    Finset.single_le_sum (f := fun j : Fin 3 => ‖w.ofLp j‖ ^ 2)
      (fun _ _ => sq_nonneg _) (Finset.mem_univ i)
  have : ‖w.ofLp i‖ ≤ Real.sqrt (∑ j : Fin 3, ‖w.ofLp j‖ ^ 2) :=
    Real.le_sqrt_of_sq_le hsq
  simpa [Real.norm_eq_abs, hEu] using this

lemma sdPairCoord_norm_le (w₁ w₂ : Vec) :
    ‖sdPairCoord w₁ w₂‖ ≤ ‖w₁‖ + ‖w₂‖ := by
  refine (pi_norm_le_iff_of_nonneg (add_nonneg (norm_nonneg w₁) (norm_nonneg w₂))).2 ?_
  intro i
  fin_cases i <;> simp [sdPairCoord, Real.norm_eq_abs]
  · exact (coord_le_euclidean w₁ 0).trans (le_add_of_nonneg_right (norm_nonneg w₂))
  · exact (coord_le_euclidean w₁ 1).trans (le_add_of_nonneg_right (norm_nonneg w₂))
  · exact (coord_le_euclidean w₁ 2).trans (le_add_of_nonneg_right (norm_nonneg w₂))
  · exact (coord_le_euclidean w₂ 0).trans (le_add_of_nonneg_left (norm_nonneg w₁))
  · exact (coord_le_euclidean w₂ 1).trans (le_add_of_nonneg_left (norm_nonneg w₁))
  · exact (coord_le_euclidean w₂ 2).trans (le_add_of_nonneg_left (norm_nonneg w₁))

lemma jetMatrix_mulVec_eq_zero {v : Fin 6 → ℝ}
    (h : jetMatrix *ᵥ v = 0) : v = 0 :=
  Matrix.eq_zero_of_mulVec_eq_zero jetMatrix_det_ne_zero h

lemma jetMatrix_mulVec_injective :
    Function.Injective fun v : Fin 6 → ℝ => jetMatrix *ᵥ v := by
  intro v w hvw
  have : jetMatrix *ᵥ (v - w) = 0 := by
    simp [Matrix.mulVec_sub, hvw]
  exact sub_eq_zero.mp (jetMatrix_mulVec_eq_zero this)

/-- Finite-dimensional: injective `mulVec` is bounded below. -/
lemma exists_sigma_jet :
    ∃ σ : ℝ, 0 < σ ∧ ∀ v : Fin 6 → ℝ, σ * ‖v‖ ≤ ‖jetMatrix *ᵥ v‖ := by
  classical
  let S : Set (Fin 6 → ℝ) := Metric.sphere 0 1
  have hK : IsCompact S := isCompact_sphere (0 : Fin 6 → ℝ) 1
  have hne : (Metric.sphere (0 : Fin 6 → ℝ) 1).Nonempty :=
    NormedSpace.sphere_nonempty.mpr (by norm_num : (0 : ℝ) ≤ 1)
  have hcont : Continuous fun v : Fin 6 → ℝ => ‖jetMatrix *ᵥ v‖ := by
    fun_prop
  obtain ⟨v0, hv0S, hmin⟩ := hK.exists_isMinOn hne hcont.continuousOn
  have hv01 : ‖v0‖ = 1 := mem_sphere_zero_iff_norm.mp hv0S
  have hσpos : 0 < ‖jetMatrix *ᵥ v0‖ := by
    refine norm_pos_iff.mpr ?_
    intro hz
    have : v0 = 0 := jetMatrix_mulVec_eq_zero hz
    have : (0 : ℝ) = 1 := by rw [← hv01, this, norm_zero]
    exact (by norm_num : (0 : ℝ) ≠ 1) this
  refine ⟨‖jetMatrix *ᵥ v0‖, hσpos, ?_⟩
  intro v
  rcases eq_or_ne v 0 with hv | hv
  · simp [hv]
  · have hun : ‖(‖v‖)⁻¹ • v‖ = 1 := by
      rw [norm_smul, norm_inv, norm_norm]
      field_simp [norm_ne_zero_iff.mpr hv]
    have huS : (‖v‖)⁻¹ • v ∈ S := mem_sphere_zero_iff_norm.mpr hun
    have hmin' : ‖jetMatrix *ᵥ v0‖ ≤ ‖jetMatrix *ᵥ ((‖v‖)⁻¹ • v)‖ :=
      hmin huS
    have hsc : jetMatrix *ᵥ ((‖v‖)⁻¹ • v) = (‖v‖)⁻¹ • (jetMatrix *ᵥ v) :=
      Matrix.mulVec_smul _ _ _
    rw [hsc, norm_smul, norm_inv, norm_norm] at hmin'
    have hvpos : 0 < ‖v‖ := norm_pos_iff.mpr hv
    have : ‖jetMatrix *ᵥ v0‖ * ‖v‖ ≤ ‖jetMatrix *ᵥ v‖ := by
      have := mul_le_mul_of_nonneg_right hmin' hvpos.le
      field_simp [hvpos.ne'] at this
      exact this
    simpa [mul_comm] using this

/-- Invertible linearisation plus quadratic remainder ⇒ linear-minus-quadratic lower bound. -/
lemma remainder_lower_bound {E F : Type*}
    [NormedAddCommGroup E] [NormedSpace ℝ E]
    [NormedAddCommGroup F] [NormedSpace ℝ F]
    {f : E → F} {x y : E} {A : E →L[ℝ] F} {σ K : ℝ}
    (hσ : ∀ v : E, σ * ‖v‖ ≤ ‖A v‖)
    (hrem : ‖f y - f x - A (y - x)‖ ≤ K * ‖y - x‖ ^ 2) :
    σ * ‖y - x‖ - K * ‖y - x‖ ^ 2 ≤ ‖f y - f x‖ := by
  have hA : σ * ‖y - x‖ ≤ ‖A (y - x)‖ := hσ (y - x)
  have htri : ‖A (y - x)‖ ≤ ‖f y - f x‖ + ‖f y - f x - A (y - x)‖ := by
    calc
      ‖A (y - x)‖
          = ‖(f y - f x) - (f y - f x - A (y - x))‖ := by
            simp
      _ ≤ ‖f y - f x‖ + ‖f y - f x - A (y - x)‖ := norm_sub_le _ _
  linarith

/-! Algebraic t^2/t^3 los-jet in Cartesian ICs.  Matches `jetMatrix` as the
Jacobian of Taylor coefficients (los''(0)/2, los'''(0)/6). -/

def vecDot (u v : Vec) : ℝ := ∑ i : Fin 3, u.ofLp i * v.ofLp i

def accelOf (s : Fin 6 → ℝ) : Vec :=
  -((‖statePos s‖) ^ 3)⁻¹ • statePos s

def jerkOf (s : Fin 6 → ℝ) : Vec :=
  -(‖statePos s‖ ^ 3)⁻¹ • stateVel s
    + ((3 * vecDot (statePos s) (stateVel s)) / (‖statePos s‖ ^ 5)) • statePos s

def eJet0 : Vec := ofCoords 1 0 0
def eJet1 : Vec := ofCoords 0 1 0
def eJet2 : Vec := ofCoords (-1) 0 0
def eJet3 : Vec := ofCoords 0 (-1) 0

def n0Of (s : Fin 6 → ℝ) : Vec := statePos s - eJet0
def n1Of (s : Fin 6 → ℝ) : Vec := stateVel s - eJet1
def n2Of (s : Fin 6 → ℝ) : Vec := accelOf s - eJet2
def n3Of (s : Fin 6 → ℝ) : Vec := jerkOf s - eJet3

def qOf (s : Fin 6 → ℝ) : ℝ := vecDot (n0Of s) (n0Of s)
def q1Of (s : Fin 6 → ℝ) : ℝ := 2 * vecDot (n0Of s) (n1Of s)
def q2Of (s : Fin 6 → ℝ) : ℝ :=
  2 * vecDot (n1Of s) (n1Of s) + 2 * vecDot (n0Of s) (n2Of s)
def q3Of (s : Fin 6 → ℝ) : ℝ :=
  6 * vecDot (n1Of s) (n2Of s) + 2 * vecDot (n0Of s) (n3Of s)

def pOf (s : Fin 6 → ℝ) : ℝ := (qOf s) ^ (-(1 / 2 : ℝ))
def p1Of (s : Fin 6 → ℝ) : ℝ :=
  -(1 / 2 : ℝ) * (qOf s) ^ (-(3 / 2 : ℝ)) * q1Of s
def p2Of (s : Fin 6 → ℝ) : ℝ :=
  (3 / 4 : ℝ) * (qOf s) ^ (-(5 / 2 : ℝ)) * (q1Of s) ^ 2
    - (1 / 2 : ℝ) * (qOf s) ^ (-(3 / 2 : ℝ)) * q2Of s
def p3Of (s : Fin 6 → ℝ) : ℝ :=
  -(15 / 8 : ℝ) * (qOf s) ^ (-(7 / 2 : ℝ)) * (q1Of s) ^ 3
    + (9 / 4 : ℝ) * (qOf s) ^ (-(5 / 2 : ℝ)) * q1Of s * q2Of s
    - (1 / 2 : ℝ) * (qOf s) ^ (-(3 / 2 : ℝ)) * q3Of s

def u2Of (s : Fin 6 → ℝ) : Vec :=
  pOf s • n2Of s + (2 : ℝ) • (p1Of s • n1Of s) + p2Of s • n0Of s

def u3Of (s : Fin 6 → ℝ) : Vec :=
  pOf s • n3Of s + (3 : ℝ) • (p1Of s • n2Of s)
    + (3 : ℝ) • (p2Of s • n1Of s) + p3Of s • n0Of s

/-- Taylor t^2, t^3 coefficients of los along the Kepler flow of `s`, at time 0. -/
def losTaylor23 (s : Fin 6 → ℝ) : Fin 6 → ℝ :=
  ![ (u2Of s).ofLp 0 / 2, (u2Of s).ofLp 1 / 2, (u2Of s).ofLp 2 / 2
   , (u3Of s).ofLp 0 / 6, (u3Of s).ofLp 1 / 6, (u3Of s).ofLp 2 / 6 ]

def stumpffC (z : ℝ) : ℝ :=
  if z = 0 then (1 / 2 : ℝ) else (1 - Real.cos (Real.sqrt z)) / z

def stumpffS (z : ℝ) : ℝ :=
  if z = 0 then (1 / 6 : ℝ)
  else (Real.sqrt z - Real.sin (Real.sqrt z)) / (z * Real.sqrt z)

def rnorm (s : Fin 6 → ℝ) : ℝ := ‖statePos s‖
def alphaOf (s : Fin 6 → ℝ) : ℝ := 2 / rnorm s - ‖stateVel s‖ ^ 2
def sigmaOf (s : Fin 6 → ℝ) : ℝ := vecDot (statePos s) (stateVel s)

def univF (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  let α := alphaOf s
  let z := α * χ ^ 2
  let r0 := rnorm s
  sigmaOf s * χ ^ 2 * stumpffC z + (1 - α * r0) * χ ^ 3 * stumpffS z + r0 * χ

def fg_f (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  1 - χ ^ 2 / rnorm s * stumpffC (alphaOf s * χ ^ 2)

def fg_g (s : Fin 6 → ℝ) (t χ : ℝ) : ℝ :=
  t - χ ^ 3 * stumpffS (alphaOf s * χ ^ 2)

lemma sStar_rnorm : ‖statePos sStar‖ = 5 / 2 := by
  rw [sStar_pos, ofCoords_norm]
  norm_num [Real.sqrt_sq (by norm_num : (0 : ℝ) ≤ 5 / 2)]

lemma sStar_inner_rv : vecDot (statePos sStar) (stateVel sStar) = (0 : ℝ) := by
  simp [vecDot, sStar_pos, sStar_vel, ofLp_ofCoords, Fin.sum_univ_three]

lemma sStar_vel_norm_sq : ‖stateVel sStar‖ ^ 2 = 2 / 5 := by
  rw [sStar_vel, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ 0 ^ 2 + (Real.sqrt 10 / 5) ^ 2 + 0 ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  field_simp
  rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma rnorm_sStar : rnorm sStar = 5 / 2 := sStar_rnorm

lemma alphaOf_sStar : alphaOf sStar = 2 / 5 := by
  simp [alphaOf, rnorm_sStar, sStar_vel_norm_sq]
  norm_num

lemma sigmaOf_sStar : sigmaOf sStar = 0 := sStar_inner_rv

lemma univF_sStar (χ : ℝ) : univF sStar χ = (5 / 2) * χ := by
  simp [univF, alphaOf_sStar, sigmaOf_sStar, rnorm_sStar]

lemma stumpffC_pos {z : ℝ} (hz : 0 < z) :
    stumpffC z = (1 - Real.cos (Real.sqrt z)) / z := by
  simp [stumpffC, hz.ne']

lemma stumpffS_pos {z : ℝ} (hz : 0 < z) :
    stumpffS z = (Real.sqrt z - Real.sin (Real.sqrt z)) / (z * Real.sqrt z) := by
  simp [stumpffS, hz.ne']

lemma chi_sStar (t : ℝ) : univF sStar (2 * t / 5) = t := by
  rw [univF_sStar]; ring

/-! Universal Kepler equation `univF s χ = t`, solved for `χ` by the bivariate IFT. -/

def univF_dchi (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  rnorm s
    + sigmaOf s * χ * (1 - alphaOf s * χ ^ 2 * stumpffS (alphaOf s * χ ^ 2))
    + (1 - alphaOf s * rnorm s) * χ ^ 2 * stumpffC (alphaOf s * χ ^ 2)

lemma univF_dchi_sStar (χ : ℝ) : univF_dchi sStar χ = 5 / 2 := by
  simp [univF_dchi, rnorm_sStar, sigmaOf_sStar, alphaOf_sStar]

lemma rnorm_sStar_pos : 0 < rnorm sStar := by
  rw [rnorm_sStar]; norm_num

lemma stumpffC_zero : stumpffC 0 = 1 / 2 := by simp [stumpffC]

lemma stumpffS_zero : stumpffS 0 = 1 / 6 := by simp [stumpffS]

/-- Regularization of `(1 - cos u) / u²`. Continuous on all of `ℝ`. -/
def cbar (u : ℝ) : ℝ := (1 / 2) * Real.sinc (u / 2) ^ 2

lemma cbar_zero : cbar 0 = 1 / 2 := by simp [cbar]

lemma cbar_of_ne {u : ℝ} (hu : u ≠ 0) :
    cbar u = (1 - Real.cos u) / u ^ 2 := by
  have hu2 : u / 2 ≠ 0 := div_ne_zero hu (by norm_num)
  unfold cbar
  rw [Real.sinc_of_ne_zero hu2]
  have hcos : Real.cos u = 1 - 2 * Real.sin (u / 2) ^ 2 := by
    have := Real.cos_two_mul_eq_one_sub (u / 2)
    simpa [mul_div_cancel₀ u (by norm_num : (2 : ℝ) ≠ 0)] using this
  rw [hcos]
  field_simp [hu, hu2]
  ring

lemma cbar_neg (u : ℝ) : cbar (-u) = cbar u := by
  simp [cbar, neg_div, Real.sinc_neg]

lemma continuous_cbar : Continuous cbar := by
  unfold cbar
  fun_prop

/-- Regularization of `(u - sin u) / u³`. -/
def sbar (u : ℝ) : ℝ :=
  if u = 0 then (1 / 6 : ℝ) else (u - Real.sin u) / u ^ 3

lemma sbar_zero : sbar 0 = 1 / 6 := by simp [sbar]

lemma sbar_of_ne {u : ℝ} (hu : u ≠ 0) :
    sbar u = (u - Real.sin u) / u ^ 3 := by
  simp [sbar, hu]

lemma sbar_neg (u : ℝ) : sbar (-u) = sbar u := by
  rcases eq_or_ne u 0 with rfl | hu
  · simp [sbar]
  · have : -u ≠ 0 := neg_ne_zero.mpr hu
    rw [sbar_of_ne this, sbar_of_ne hu, Real.sin_neg]
    have : (-u - -Real.sin u) / (-u) ^ 3 = (u - Real.sin u) / u ^ 3 := by
      have hu3 : u ^ 3 ≠ 0 := pow_ne_zero 3 hu
      field_simp [hu, hu3]
      ring
    exact this

lemma tendsto_one_sub_cos_div_three_sq :
    Tendsto (fun u : ℝ => (1 - Real.cos u) / (3 * u ^ 2)) (𝓝[≠] (0 : ℝ)) (𝓝 (1 / 6)) := by
  have hcongr : (fun u : ℝ => (1 - Real.cos u) / (3 * u ^ 2)) =ᶠ[𝓝[≠] (0 : ℝ)]
      fun u => cbar u / 3 := by
    filter_upwards [self_mem_nhdsWithin] with u hu
    rw [cbar_of_ne hu]
    field_simp [hu]
  refine Tendsto.congr' hcongr.symm ?_
  have hc : Tendsto cbar (𝓝 (0 : ℝ)) (𝓝 (1 / 2)) := by
    simpa [cbar_zero] using continuous_cbar.tendsto (0 : ℝ)
  have : Tendsto (fun u : ℝ => cbar u / 3) (𝓝 (0 : ℝ)) (𝓝 (1 / 6)) := by
    convert hc.div_const 3 using 1
    norm_num
  exact this.mono_left nhdsWithin_le_nhds

lemma tendsto_sbar_nhdsGT :
    Tendsto (fun u : ℝ => (u - Real.sin u) / u ^ 3) (𝓝[>] (0 : ℝ)) (𝓝 (1 / 6)) := by
  have hab : (0 : ℝ) < 1 := by norm_num
  have hf : ∀ x ∈ Set.Ioo (0 : ℝ) 1,
      HasDerivAt (fun u => u - Real.sin u) (1 - Real.cos x) x := by
    intro x _; exact (hasDerivAt_id x).sub (Real.hasDerivAt_sin x)
  have hg : ∀ x ∈ Set.Ioo (0 : ℝ) 1,
      HasDerivAt (fun u : ℝ => u ^ 3) (3 * x ^ 2) x := by
    intro x _
    simpa [pow_succ, pow_two, mul_comm, mul_left_comm, mul_assoc] using hasDerivAt_pow 3 x
  have hg' : ∀ x ∈ Set.Ioo (0 : ℝ) 1, 3 * x ^ 2 ≠ 0 := by
    intro x hx; exact mul_ne_zero (by norm_num) (pow_ne_zero 2 (ne_of_gt hx.1))
  have hfa : Tendsto (fun u : ℝ => u - Real.sin u) (𝓝[>] (0 : ℝ)) (𝓝 0) := by
    have : Tendsto (fun u : ℝ => u - Real.sin u) (𝓝 0) (𝓝 (0 - Real.sin 0)) :=
      (continuous_id.sub Real.continuous_sin).tendsto 0
    simpa using this.mono_left nhdsWithin_le_nhds
  have hga : Tendsto (fun u : ℝ => u ^ 3) (𝓝[>] (0 : ℝ)) (𝓝 0) := by
    have : Tendsto (fun u : ℝ => u ^ 3) (𝓝 0) (𝓝 (0 ^ 3)) :=
      (continuous_pow 3).tendsto 0
    simpa using this.mono_left (nhdsWithin_le_nhds (s := Set.Ioi (0 : ℝ)))
  have hdiv : Tendsto (fun x : ℝ => (1 - Real.cos x) / (3 * x ^ 2))
      (𝓝[>] (0 : ℝ)) (𝓝 (1 / 6)) :=
    tendsto_one_sub_cos_div_three_sq.mono_left (nhdsGT_le_nhdsNE (0 : ℝ))
  exact HasDerivAt.lhopital_zero_right_on_Ioo hab hf hg hg' hfa hga hdiv

lemma tendsto_sbar_nhdsLT :
    Tendsto (fun u : ℝ => (u - Real.sin u) / u ^ 3) (𝓝[<] (0 : ℝ)) (𝓝 (1 / 6)) := by
  have hab : (-1 : ℝ) < 0 := by norm_num
  have hf : ∀ x ∈ Set.Ioo (-1 : ℝ) 0,
      HasDerivAt (fun u => u - Real.sin u) (1 - Real.cos x) x := by
    intro x _; exact (hasDerivAt_id x).sub (Real.hasDerivAt_sin x)
  have hg : ∀ x ∈ Set.Ioo (-1 : ℝ) 0,
      HasDerivAt (fun u : ℝ => u ^ 3) (3 * x ^ 2) x := by
    intro x _
    simpa [pow_succ, pow_two, mul_comm, mul_left_comm, mul_assoc] using hasDerivAt_pow 3 x
  have hg' : ∀ x ∈ Set.Ioo (-1 : ℝ) 0, 3 * x ^ 2 ≠ 0 := by
    intro x hx; exact mul_ne_zero (by norm_num) (pow_ne_zero 2 (ne_of_lt hx.2))
  have hfb : Tendsto (fun u : ℝ => u - Real.sin u) (𝓝[<] (0 : ℝ)) (𝓝 0) := by
    have : Tendsto (fun u : ℝ => u - Real.sin u) (𝓝 0) (𝓝 (0 - Real.sin 0)) :=
      (continuous_id.sub Real.continuous_sin).tendsto 0
    simpa using this.mono_left nhdsWithin_le_nhds
  have hgb : Tendsto (fun u : ℝ => u ^ 3) (𝓝[<] (0 : ℝ)) (𝓝 0) := by
    have : Tendsto (fun u : ℝ => u ^ 3) (𝓝 0) (𝓝 (0 ^ 3)) :=
      (continuous_pow 3).tendsto 0
    simpa using this.mono_left (nhdsWithin_le_nhds (s := Set.Iio (0 : ℝ)))
  have hdiv : Tendsto (fun x : ℝ => (1 - Real.cos x) / (3 * x ^ 2))
      (𝓝[<] (0 : ℝ)) (𝓝 (1 / 6)) :=
    tendsto_one_sub_cos_div_three_sq.mono_left (nhdsLT_le_nhdsNE (0 : ℝ))
  exact HasDerivAt.lhopital_zero_left_on_Ioo hab hf hg hg' hfb hgb hdiv

lemma continuous_sbar : Continuous sbar := by
  refine continuous_iff_continuousAt.mpr fun u => ?_
  rcases eq_or_ne u 0 with rfl | hu
  · rw [continuousAt_iff_continuous_left'_right']
    constructor
    · change Tendsto sbar (𝓝[<] (0 : ℝ)) (𝓝 (sbar 0))
      rw [sbar_zero]
      refine tendsto_sbar_nhdsLT.congr' ?_
      filter_upwards [self_mem_nhdsWithin] with v hv
      exact (sbar_of_ne (ne_of_lt hv)).symm
    · change Tendsto sbar (𝓝[>] (0 : ℝ)) (𝓝 (sbar 0))
      rw [sbar_zero]
      refine tendsto_sbar_nhdsGT.congr' ?_
      filter_upwards [self_mem_nhdsWithin] with v hv
      exact (sbar_of_ne (ne_of_gt hv)).symm
  · have hne : {v : ℝ | v ≠ 0} ∈ 𝓝 u := isOpen_compl_singleton.mem_nhds hu
    have hc : ContinuousAt (fun v : ℝ => (v - Real.sin v) / v ^ 3) u := by
      refine ContinuousAt.div ?_ ?_ (pow_ne_zero 3 hu)
      · exact (continuous_id.sub Real.continuous_sin).continuousAt
      · exact (continuous_pow 3).continuousAt
    have hfeq : (fun v : ℝ => (v - Real.sin v) / v ^ 3) =ᶠ[𝓝 u] sbar := by
      filter_upwards [hne] with v hv
      exact (sbar_of_ne hv).symm
    exact (continuousAt_congr hfeq).mp hc

lemma stumpffC_eq_cbar {z : ℝ} (hz : 0 ≤ z) :
    stumpffC z = cbar (Real.sqrt z) := by
  rcases eq_or_lt_of_le hz with h | hz
  · subst h; simp [stumpffC, cbar]
  · have hsq : Real.sqrt z ≠ 0 := (Real.sqrt_pos.2 hz).ne'
    rw [stumpffC_pos hz, cbar_of_ne hsq, Real.sq_sqrt hz.le]

lemma stumpffS_eq_sbar {z : ℝ} (hz : 0 ≤ z) :
    stumpffS z = sbar (Real.sqrt z) := by
  rcases eq_or_lt_of_le hz with h | hz
  · subst h; simp [stumpffS, sbar]
  · have hsq : Real.sqrt z ≠ 0 := (Real.sqrt_pos.2 hz).ne'
    rw [stumpffS_pos hz, sbar_of_ne hsq]
    have : z * Real.sqrt z = Real.sqrt z ^ 3 := by
      have := Real.sq_sqrt hz.le
      calc
        z * Real.sqrt z = Real.sqrt z ^ 2 * Real.sqrt z := by rw [this]
        _ = Real.sqrt z ^ 3 := by ring
    rw [this]

lemma sin_omega_abs (ω t : ℝ) :
    Real.sin (ω * |t|) * Real.sign t = Real.sin (ω * t) := by
  rcases lt_trichotomy t 0 with h | rfl | h
  · rw [abs_of_neg h, Real.sign_of_neg h]
    have : ω * -t = -(ω * t) := by ring
    rw [this, Real.sin_neg]; ring
  · simp
  · rw [abs_of_pos h, Real.sign_of_pos h, mul_one]

lemma sign_abs_eq (t : ℝ) : Real.sign t * |t| = t := by
  rcases lt_trichotomy t 0 with h | rfl | h
  · rw [Real.sign_of_neg h, abs_of_neg h]; ring
  · simp
  · rw [Real.sign_of_pos h, abs_of_pos h]; ring

lemma sqrt_alpha_chi {α χ : ℝ} (hα : 0 < α) :
    Real.sqrt (α * χ ^ 2) = Real.sqrt α * |χ| := by
  rw [Real.sqrt_mul hα.le, Real.sqrt_sq_eq_abs]

lemma chiSq_mul_stumpffC {α χ : ℝ} (hα : 0 < α) :
    χ ^ 2 * stumpffC (α * χ ^ 2) = (1 - Real.cos (Real.sqrt α * χ)) / α := by
  rcases eq_or_ne χ 0 with rfl | hχ
  · simp [stumpffC]
  · have hz : 0 < α * χ ^ 2 := mul_pos hα (sq_pos_of_ne_zero hχ)
    rw [stumpffC_pos hz]
    have hχ2 : χ ^ 2 ≠ 0 := pow_ne_zero 2 hχ
    have hα0 : α ≠ 0 := hα.ne'
    have hz0 : α * χ ^ 2 ≠ 0 := hz.ne'
    field_simp [hχ2, hα0, hz0]
    have hsqrt : Real.sqrt (χ ^ 2 * α) = Real.sqrt α * |χ| := by
      rw [mul_comm, sqrt_alpha_chi hα]
    rw [hsqrt, mul_comm (Real.sqrt α) |χ|]
    have habs : |χ| * Real.sqrt α = |χ * Real.sqrt α| := by
      rw [abs_mul, abs_of_nonneg (Real.sqrt_nonneg _)]
    rw [habs, Real.cos_abs]

lemma chiCube_mul_stumpffS {α χ : ℝ} (hα : 0 < α) :
    χ ^ 3 * stumpffS (α * χ ^ 2) =
      χ / α - Real.sin (Real.sqrt α * χ) / (α * Real.sqrt α) := by
  rcases eq_or_ne χ 0 with rfl | hχ
  · simp [stumpffS]
  · have hz : 0 < α * χ ^ 2 := mul_pos hα (sq_pos_of_ne_zero hχ)
    rw [stumpffS_pos hz]
    set ω := Real.sqrt α
    have hω0 : ω ≠ 0 := Real.sqrt_ne_zero'.2 hα
    have hωnn : 0 ≤ ω := Real.sqrt_nonneg _
    have hχ2 : χ ^ 2 ≠ 0 := pow_ne_zero 2 hχ
    have hα0 : α ≠ 0 := hα.ne'
    have habs : |χ| ≠ 0 := abs_ne_zero.mpr hχ
    have hz' : α * χ ^ 2 = ω ^ 2 * χ ^ 2 := by
      simp [ω, Real.sq_sqrt hα.le]
    have hsqrt : Real.sqrt (α * χ ^ 2) = |χ| * ω := by
      rw [sqrt_alpha_chi hα, mul_comm]
    have hden : α * χ ^ 2 * (|χ| * ω) ≠ 0 :=
      mul_ne_zero (mul_ne_zero hα0 hχ2) (mul_ne_zero habs hω0)
    have hstep :
        χ ^ 3 * ((|χ| * ω - Real.sin (|χ| * ω)) / (α * χ ^ 2 * (|χ| * ω)))
          = χ / α - χ * Real.sin (|χ| * ω) / (|χ| * ω * α) := by
      field_simp [hα0, hχ, habs, hω0, hden]
    have hsin :
        χ * Real.sin (|χ| * ω) / (|χ| * ω * α) =
          Real.sin (ω * χ) / (α * ω) := by
      have hden2 : |χ| * ω * α ≠ 0 := mul_ne_zero (mul_ne_zero habs hω0) hα0
      have hden3 : α * ω ≠ 0 := mul_ne_zero hα0 hω0
      rw [div_eq_div_iff hden2 hden3]
      have hs := sin_omega_abs ω χ
      calc
        χ * Real.sin (|χ| * ω) * (α * ω)
            = (Real.sign χ * |χ|) * Real.sin (ω * |χ|) * (α * ω) := by
              rw [sign_abs_eq χ, mul_comm (|χ|) ω]
        _ = (Real.sin (ω * |χ|) * Real.sign χ) * (|χ| * ω * α) := by ring
        _ = Real.sin (ω * χ) * (|χ| * ω * α) := by rw [hs]
    rw [hsqrt, hstep, hsin, mul_comm ω χ]

/-- Elliptic closed form of the universal Kepler function, valid for `α > 0`. -/
def univF_ell (α σ r χ : ℝ) : ℝ :=
  σ * (1 - Real.cos (Real.sqrt α * χ)) / α
    + (1 - α * r) * (χ / α - Real.sin (Real.sqrt α * χ) / (α * Real.sqrt α))
    + r * χ

lemma univF_eq_ell {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    univF s χ = univF_ell (alphaOf s) (sigmaOf s) (rnorm s) χ := by
  unfold univF univF_ell
  have hf := chiSq_mul_stumpffC (χ := χ) hα
  have hg := chiCube_mul_stumpffS (χ := χ) hα
  calc
    sigmaOf s * χ ^ 2 * stumpffC (alphaOf s * χ ^ 2)
        + (1 - alphaOf s * rnorm s) * χ ^ 3 * stumpffS (alphaOf s * χ ^ 2)
        + rnorm s * χ
      = sigmaOf s * (χ ^ 2 * stumpffC (alphaOf s * χ ^ 2))
          + (1 - alphaOf s * rnorm s) * (χ ^ 3 * stumpffS (alphaOf s * χ ^ 2))
          + rnorm s * χ := by ring
    _ = sigmaOf s * ((1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s)
          + (1 - alphaOf s * rnorm s) *
              (χ / alphaOf s - Real.sin (Real.sqrt (alphaOf s) * χ)
                / (alphaOf s * Real.sqrt (alphaOf s)))
          + rnorm s * χ := by rw [hf, hg]
    _ = sigmaOf s * (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s
          + (1 - alphaOf s * rnorm s) *
              (χ / alphaOf s - Real.sin (Real.sqrt (alphaOf s) * χ)
                / (alphaOf s * Real.sqrt (alphaOf s)))
          + rnorm s * χ := by ring

lemma univF_dchi_eq_ell {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    univF_dchi s χ =
      sigmaOf s * Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)
        + (1 - alphaOf s * rnorm s)
            * (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s
        + rnorm s := by
  unfold univF_dchi
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hc := chiSq_mul_stumpffC (χ := χ) hα
  have hs := chiCube_mul_stumpffS (χ := χ) hα
  have hlin :
      χ * (1 - alphaOf s * χ ^ 2 * stumpffS (alphaOf s * χ ^ 2))
        = Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s) := by
    have : χ ^ 3 * stumpffS (alphaOf s * χ ^ 2) =
        χ / alphaOf s - Real.sin (Real.sqrt (alphaOf s) * χ)
          / (alphaOf s * Real.sqrt (alphaOf s)) := hs
    have : χ - alphaOf s * (χ ^ 3 * stumpffS (alphaOf s * χ ^ 2))
        = Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s) := by
      rw [this]
      field_simp [hα0, hω0]
      ring
    convert this using 1
    ring
  calc
    rnorm s + sigmaOf s * χ * (1 - alphaOf s * χ ^ 2 * stumpffS (alphaOf s * χ ^ 2))
        + (1 - alphaOf s * rnorm s) * χ ^ 2 * stumpffC (alphaOf s * χ ^ 2)
      = rnorm s + sigmaOf s * (χ * (1 - alphaOf s * χ ^ 2 * stumpffS (alphaOf s * χ ^ 2)))
          + (1 - alphaOf s * rnorm s) * (χ ^ 2 * stumpffC (alphaOf s * χ ^ 2)) := by ring
    _ = rnorm s + sigmaOf s * (Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s))
          + (1 - alphaOf s * rnorm s) *
              ((1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s) := by
        rw [hlin, hc]
    _ = sigmaOf s * Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)
          + (1 - alphaOf s * rnorm s)
              * (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s
          + rnorm s := by ring

lemma hasDerivAt_univF_ell_chi {α σ r χ : ℝ} (hα : 0 < α) :
    HasDerivAt (univF_ell α σ r)
      (σ * Real.sin (Real.sqrt α * χ) / Real.sqrt α
        + (1 - α * r) * (1 - Real.cos (Real.sqrt α * χ)) / α
        + r) χ := by
  have hα0 : α ≠ 0 := hα.ne'
  have hω0 : Real.sqrt α ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt α * u) (Real.sqrt α) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt α)
  have h1 : HasDerivAt (fun u => 1 - Real.cos (Real.sqrt α * u))
      (Real.sin (Real.sqrt α * χ) * Real.sqrt α) χ := by
    refine ((hasDerivAt_const χ (1 : ℝ)).sub hωu.cos).congr_deriv ?_
    ring
  have h1c : HasDerivAt (fun u => (1 - Real.cos (Real.sqrt α * u)) / α)
      (Real.sin (Real.sqrt α * χ) * Real.sqrt α / α) χ :=
    h1.div_const α
  have hσ : HasDerivAt
      (fun u => σ * ((1 - Real.cos (Real.sqrt α * u)) / α))
      (σ * (Real.sin (Real.sqrt α * χ) * Real.sqrt α / α)) χ :=
    h1c.const_mul σ
  have hidα : HasDerivAt (fun u => u / α) (1 / α) χ :=
    (hasDerivAt_id χ).div_const α
  have hsin : HasDerivAt (fun u => Real.sin (Real.sqrt α * u))
      (Real.cos (Real.sqrt α * χ) * Real.sqrt α) χ :=
    hωu.sin
  have hsinα : HasDerivAt
      (fun u => Real.sin (Real.sqrt α * u) / (α * Real.sqrt α))
      (Real.cos (Real.sqrt α * χ) / α) χ := by
    have := hsin.div_const (α * Real.sqrt α)
    refine this.congr_deriv ?_
    field_simp [hα0, hω0]
  have hmid : HasDerivAt
      (fun u => u / α - Real.sin (Real.sqrt α * u) / (α * Real.sqrt α))
      (1 / α - Real.cos (Real.sqrt α * χ) / α) χ :=
    hidα.sub hsinα
  have hmid' : HasDerivAt
      (fun u => u / α - Real.sin (Real.sqrt α * u) / (α * Real.sqrt α))
      ((1 - Real.cos (Real.sqrt α * χ)) / α) χ := by
    convert hmid using 1
    ring
  have hmidc : HasDerivAt
      (fun u => (1 - α * r) *
        (u / α - Real.sin (Real.sqrt α * u) / (α * Real.sqrt α)))
      ((1 - α * r) * ((1 - Real.cos (Real.sqrt α * χ)) / α)) χ :=
    hmid'.const_mul (1 - α * r)
  have hr : HasDerivAt (fun u => r * u) r χ := by
    simpa using (hasDerivAt_id χ).const_mul r
  have hsum := (hσ.add hmidc).add hr
  have hfun :
      (fun u =>
          σ * ((1 - Real.cos (Real.sqrt α * u)) / α)
            + (1 - α * r) *
                (u / α - Real.sin (Real.sqrt α * u) / (α * Real.sqrt α))
            + r * u)
        = univF_ell α σ r := by
    ext u
    simp [univF_ell, div_eq_mul_inv, mul_assoc]
  rw [← hfun]
  refine hsum.congr_deriv ?_
  have hsq : Real.sqrt α * Real.sqrt α = α := Real.mul_self_sqrt hα.le
  have hstep : σ * (Real.sin (Real.sqrt α * χ) * Real.sqrt α / α)
      = σ * Real.sin (Real.sqrt α * χ) / Real.sqrt α := by
    field_simp [hα0, hω0]
    simp [pow_two, hsq]
    ring
  rw [hstep]
  ring

lemma hasDerivAt_univF_of_alpha_pos {s : Fin 6 → ℝ} {χ : ℝ}
    (hα : 0 < alphaOf s) :
    HasDerivAt (univF s) (univF_dchi s χ) χ := by
  have h := hasDerivAt_univF_ell_chi (α := alphaOf s) (σ := sigmaOf s)
    (r := rnorm s) (χ := χ) hα
  have heq : univF s = univF_ell (alphaOf s) (sigmaOf s) (rnorm s) :=
    funext fun u => univF_eq_ell hα
  rw [heq, univF_dchi_eq_ell hα]
  exact h

lemma hasDerivAt_univF_sStar (χ : ℝ) :
    HasDerivAt (univF sStar) (5 / 2) χ := by
  have h := (hasDerivAt_id χ).const_mul (5 / 2)
  refine (h.congr_of_eventuallyEq (Eventually.of_forall univF_sStar)).congr_deriv ?_
  ring

def univF_f2 (s : Fin 6 → ℝ) (χ : ℝ) : ℝ →L[ℝ] ℝ :=
  ContinuousLinearMap.toSpanSingleton ℝ (univF_dchi s χ)

lemma hasFDerivAt_univF_chi_of_alpha_pos {s : Fin 6 → ℝ} {χ : ℝ}
    (hα : 0 < alphaOf s) :
    HasFDerivAt (univF s) (univF_f2 s χ) χ :=
  (hasDerivAt_univF_of_alpha_pos hα).hasFDerivAt


lemma univF_f2_sStar (χ : ℝ) :
    univF_f2 sStar χ = ContinuousLinearMap.toSpanSingleton ℝ (5 / 2) := by
  simp [univF_f2, univF_dchi_sStar]

lemma univF_f2_invertible (t : ℝ) :
    (univF_f2 sStar (2 * t / 5)).IsInvertible := by
  rw [univF_f2_sStar]
  exact ContinuousLinearMap.IsInvertible.of_inverse
    (g := ContinuousLinearMap.toSpanSingleton ℝ (2 / 5))
    (by ext; simp) (by ext; simp)

lemma hasFDerivAt_univF_chi_sStar (χ : ℝ) :
    HasFDerivAt (univF sStar) (univF_f2 sStar χ) χ := by
  rw [univF_f2, univF_dchi_sStar]
  exact (hasDerivAt_univF_sStar χ).hasFDerivAt

lemma continuous_statePos : Continuous statePos := by
  unfold statePos ofCoords
  fun_prop

lemma continuous_stateVel : Continuous stateVel := by
  unfold stateVel ofCoords
  fun_prop

lemma continuous_rnorm : Continuous rnorm := by
  unfold rnorm
  exact continuous_statePos.norm

lemma continuous_sigmaOf : Continuous sigmaOf := by
  unfold sigmaOf vecDot
  fun_prop

lemma rnorm_sStar_ne : rnorm sStar ≠ 0 := rnorm_sStar_pos.ne'

lemma continuousAt_alphaOf {s : Fin 6 → ℝ} (hs : rnorm s ≠ 0) :
    ContinuousAt alphaOf s := by
  unfold alphaOf
  have hr : ContinuousAt rnorm s := continuous_rnorm.continuousAt
  have hinv : ContinuousAt (fun t : ℝ => (2 : ℝ) / t) (rnorm s) :=
    continuousAt_const.div continuousAt_id hs
  have hvel : ContinuousAt (fun u => ‖stateVel u‖ ^ 2) s :=
    (continuous_stateVel.norm.pow 2).continuousAt
  exact (hinv.comp hr).sub hvel

lemma continuousAt_alphaOf_sStar : ContinuousAt alphaOf sStar :=
  continuousAt_alphaOf (s := sStar) rnorm_sStar_ne

lemma eventually_alphaOf_pos :
    ∀ᶠ s in 𝓝 sStar, 0 < alphaOf s := by
  have hpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  exact continuousAt_alphaOf_sStar.preimage_mem_nhds (Ioi_mem_nhds hpos)

lemma eventually_hasFDerivAt_univF_chi (χ0 : ℝ) :
    ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0),
      HasFDerivAt (fun y => univF v.1 y) (univF_f2 v.1 v.2) v.2 := by
  have hα : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0), 0 < alphaOf v.1 := by
    have : Tendsto (fun v : (Fin 6 → ℝ) × ℝ => alphaOf v.1)
        (𝓝 (sStar, χ0)) (𝓝 (alphaOf sStar)) :=
      continuousAt_alphaOf_sStar.tendsto.comp (continuous_fst.tendsto (sStar, χ0))
    have hpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
    exact this.eventually (Ioi_mem_nhds hpos)
  filter_upwards [hα] with v hv
  exact hasFDerivAt_univF_chi_of_alpha_pos hv

lemma continuousAt_univF_dchi (χ0 : ℝ) :
    ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => univF_dchi v.1 v.2)
      (sStar, χ0) := by
  have hα : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0), 0 < alphaOf v.1 := by
    have : Tendsto (fun v : (Fin 6 → ℝ) × ℝ => alphaOf v.1)
        (𝓝 (sStar, χ0)) (𝓝 (alphaOf sStar)) :=
      continuousAt_alphaOf_sStar.tendsto.comp (continuous_fst.tendsto (sStar, χ0))
    have hpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
    exact this.eventually (Ioi_mem_nhds hpos)
  have heq : (fun v : (Fin 6 → ℝ) × ℝ => univF_dchi v.1 v.2) =ᶠ[𝓝 (sStar, χ0)]
      fun v =>
        sigmaOf v.1 * (Real.sin (Real.sqrt (alphaOf v.1) * v.2)
            / Real.sqrt (alphaOf v.1))
          + (1 - alphaOf v.1 * rnorm v.1)
              * ((1 - Real.cos (Real.sqrt (alphaOf v.1) * v.2))
              / alphaOf v.1)
          + rnorm v.1 := by
    filter_upwards [hα] with v hv
    simpa [div_eq_mul_inv, mul_assoc] using univF_dchi_eq_ell hv
  refine (continuousAt_congr heq).mpr ?_
  have hσ : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => sigmaOf v.1) (sStar, χ0) :=
    continuous_sigmaOf.continuousAt.tendsto.comp (continuous_fst.tendsto (sStar, χ0))
  have hαc : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => alphaOf v.1) (sStar, χ0) :=
    continuousAt_alphaOf_sStar.tendsto.comp (continuous_fst.tendsto (sStar, χ0))
  have hr : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => rnorm v.1) (sStar, χ0) :=
    continuous_rnorm.continuousAt.tendsto.comp (continuous_fst.tendsto (sStar, χ0))
  have hpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  have hω0 : Real.sqrt (alphaOf sStar) ≠ 0 := Real.sqrt_ne_zero'.2 hpos
  have hα0 : alphaOf sStar ≠ 0 := hpos.ne'
  have hsqrt : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => Real.sqrt (alphaOf v.1))
      (sStar, χ0) :=
    Real.continuous_sqrt.continuousAt.comp hαc
  have hsin : ContinuousAt
      (fun v : (Fin 6 → ℝ) × ℝ => Real.sin (Real.sqrt (alphaOf v.1) * v.2))
      (sStar, χ0) :=
    Real.continuous_sin.continuousAt.comp (hsqrt.mul continuous_snd.continuousAt)
  have hcos : ContinuousAt
      (fun v : (Fin 6 → ℝ) × ℝ => Real.cos (Real.sqrt (alphaOf v.1) * v.2))
      (sStar, χ0) :=
    Real.continuous_cos.continuousAt.comp (hsqrt.mul continuous_snd.continuousAt)
  have hone : ContinuousAt (fun _ : (Fin 6 → ℝ) × ℝ => (1 : ℝ)) (sStar, χ0) :=
    continuousAt_const
  have hterm1 : ContinuousAt
      (fun v : (Fin 6 → ℝ) × ℝ =>
        sigmaOf v.1 * (Real.sin (Real.sqrt (alphaOf v.1) * v.2)
          / Real.sqrt (alphaOf v.1))) (sStar, χ0) :=
    hσ.mul (hsin.div hsqrt hω0)
  have hterm2 : ContinuousAt
      (fun v : (Fin 6 → ℝ) × ℝ =>
        (1 - alphaOf v.1 * rnorm v.1)
          * ((1 - Real.cos (Real.sqrt (alphaOf v.1) * v.2))
              / alphaOf v.1)) (sStar, χ0) :=
    (hone.sub (hαc.mul hr)).mul ((hone.sub hcos).div hαc hα0)
  exact (hterm1.add hterm2).add hr

lemma continuousAt_univF_f2 (χ0 : ℝ) :
    ContinuousAt (Function.uncurry univF_f2) (sStar, χ0) := by
  have h := continuousAt_univF_dchi χ0
  have hL : Continuous (fun c : ℝ =>
      ContinuousLinearMap.smulRight (1 : ℝ →L[ℝ] ℝ) c) :=
    continuous_smulRight_scalar
  change ContinuousAt
      (fun v : (Fin 6 → ℝ) × ℝ =>
        ContinuousLinearMap.toSpanSingleton ℝ (univF_dchi v.1 v.2))
      (sStar, χ0)
  convert hL.continuousAt.comp h using 1
  ext v
  simp [ContinuousLinearMap.toSpanSingleton]


/-! Cartesian-state derivatives of `rnorm`, `sigmaOf`, `alphaOf`, and `univF`. -/

lemma statePos_add (s t : Fin 6 → ℝ) : statePos (s + t) = statePos s + statePos t := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [statePos, ofCoords, PiLp.add_apply]

lemma statePos_smul (c : ℝ) (s : Fin 6 → ℝ) : statePos (c • s) = c • statePos s := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [statePos, ofCoords, PiLp.smul_apply, smul_eq_mul]

lemma stateVel_add (s t : Fin 6 → ℝ) : stateVel (s + t) = stateVel s + stateVel t := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [stateVel, ofCoords, PiLp.add_apply]

lemma stateVel_smul (c : ℝ) (s : Fin 6 → ℝ) : stateVel (c • s) = c • stateVel s := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [stateVel, ofCoords, PiLp.smul_apply, smul_eq_mul]

def clmStatePos : (Fin 6 → ℝ) →L[ℝ] Vec :=
  { toLinearMap :=
    { toFun := statePos
      map_add' := statePos_add
      map_smul' := statePos_smul }
    cont := continuous_statePos }

def clmStateVel : (Fin 6 → ℝ) →L[ℝ] Vec :=
  { toLinearMap :=
    { toFun := stateVel
      map_add' := stateVel_add
      map_smul' := stateVel_smul }
    cont := continuous_stateVel }

lemma hasFDerivAt_statePos (s : Fin 6 → ℝ) : HasFDerivAt statePos clmStatePos s :=
  clmStatePos.hasFDerivAt

lemma hasFDerivAt_stateVel (s : Fin 6 → ℝ) : HasFDerivAt stateVel clmStateVel s :=
  clmStateVel.hasFDerivAt

lemma vecDot_eq_inner (u v : Vec) : vecDot u v = ⟪u, v⟫ := by
  rw [EuclideanSpace.inner_eq_star_dotProduct, dotProduct_comm, dotProduct]
  simp [vecDot]

lemma contDiff_statePos : ContDiff ℝ ⊤ statePos := clmStatePos.contDiff

lemma contDiff_stateVel : ContDiff ℝ ⊤ stateVel := clmStateVel.contDiff

lemma contDiffAt_rnorm {s : Fin 6 → ℝ} (hs : rnorm s ≠ 0) :
    ContDiffAt ℝ ⊤ rnorm s := by
  have hsq : ContDiffAt ℝ ⊤ (fun u => ‖statePos u‖ ^ 2) s :=
    (contDiff_statePos.contDiffAt.norm_sq ℝ)
  have hne : ‖statePos s‖ ^ 2 ≠ 0 := pow_ne_zero 2 hs
  have hsqrt : ContDiffAt ℝ ⊤ (fun u => Real.sqrt (‖statePos u‖ ^ 2)) s :=
    hsq.sqrt hne
  refine hsqrt.congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun u => (Real.sqrt_sq (norm_nonneg (statePos u))).symm

lemma contDiffAt_sigmaOf (s : Fin 6 → ℝ) : ContDiffAt ℝ ⊤ sigmaOf s := by
  have h : ContDiffAt ℝ ⊤ (fun u => ⟪statePos u, stateVel u⟫) s :=
    (contDiff_statePos.contDiffAt.inner (𝕜 := ℝ) contDiff_stateVel.contDiffAt)
  refine h.congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun u => (vecDot_eq_inner _ _).symm

lemma contDiffAt_alphaOf' {s : Fin 6 → ℝ} (hs : rnorm s ≠ 0) :
    ContDiffAt ℝ ⊤ alphaOf s := by
  have hr := contDiffAt_rnorm hs
  have hinv : ContDiffAt ℝ ⊤ (fun y : ℝ => (2 : ℝ) / y) (rnorm s) :=
    contDiffAt_const.div contDiffAt_id hs
  have h2r := hinv.comp s hr
  have hvil : ContDiffAt ℝ ⊤ (fun u => ‖stateVel u‖ ^ 2) s :=
    (contDiff_stateVel.contDiffAt.norm_sq ℝ)
  exact (h2r.sub hvil).congr_of_eventuallyEq (Eventually.of_forall fun _ => rfl)

def asrOf (s : Fin 6 → ℝ) : ℝ × ℝ × ℝ := (alphaOf s, sigmaOf s, rnorm s)

lemma contDiffAt_asrOf {s : Fin 6 → ℝ} (hs : rnorm s ≠ 0) :
    ContDiffAt ℝ ⊤ asrOf s :=
  (contDiffAt_alphaOf' hs).prodMk ((contDiffAt_sigmaOf s).prodMk (contDiffAt_rnorm hs))

lemma contDiffAt_univF_ell3 {α σ r χ : ℝ} (hα : 0 < α) :
    ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => univF_ell p.1 p.2.1 p.2.2 χ) (α, σ, r) := by
  have hfst : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => p.1) (α, σ, r) :=
    contDiff_fst.contDiffAt
  have hσ : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => p.2.1) (α, σ, r) :=
    (contDiff_fst.comp contDiff_snd).contDiffAt
  have hr : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => p.2.2) (α, σ, r) :=
    (contDiff_snd.comp contDiff_snd).contDiffAt
  have hsqrt : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => Real.sqrt p.1) (α, σ, r) :=
    (Real.contDiffAt_sqrt hα.ne').comp (α, σ, r) hfst
  have hωχ : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => Real.sqrt p.1 * χ) (α, σ, r) :=
    hsqrt.mul contDiffAt_const
  have hcos : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => Real.cos (Real.sqrt p.1 * χ))
      (α, σ, r) := hωχ.cos
  have hsin : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => Real.sin (Real.sqrt p.1 * χ))
      (α, σ, r) := hωχ.sin
  have hα0 : α ≠ 0 := hα.ne'
  have hω0 : Real.sqrt α ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hC : ContDiffAt ℝ ⊤
      (fun p : ℝ × ℝ × ℝ => (1 - Real.cos (Real.sqrt p.1 * χ)) / p.1) (α, σ, r) :=
    (contDiffAt_const.sub hcos).div hfst hα0
  have hS : ContDiffAt ℝ ⊤
      (fun p : ℝ × ℝ × ℝ =>
        χ / p.1 - Real.sin (Real.sqrt p.1 * χ) / (p.1 * Real.sqrt p.1)) (α, σ, r) :=
    (contDiffAt_const.div hfst hα0).sub
      (hsin.div (hfst.mul hsqrt) (mul_ne_zero hα0 hω0))
  have h1 : ContDiffAt ℝ ⊤
      (fun p : ℝ × ℝ × ℝ => p.2.1 * ((1 - Real.cos (Real.sqrt p.1 * χ)) / p.1))
      (α, σ, r) := hσ.mul hC
  have h2 : ContDiffAt ℝ ⊤
      (fun p : ℝ × ℝ × ℝ =>
        (1 - p.1 * p.2.2) *
          (χ / p.1 - Real.sin (Real.sqrt p.1 * χ) / (p.1 * Real.sqrt p.1)))
      (α, σ, r) := (contDiffAt_const.sub (hfst.mul hr)).mul hS
  have h3 : ContDiffAt ℝ ⊤ (fun p : ℝ × ℝ × ℝ => p.2.2 * χ) (α, σ, r) :=
    hr.mul contDiffAt_const
  refine ((h1.add h2).add h3).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun p => by
    simp [univF_ell, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]

lemma contDiffAt_univF_ell_unc {α σ r χ : ℝ} (hα : 0 < α) :
    ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ =>
      univF_ell q.1.1 q.1.2.1 q.1.2.2 q.2) ((α, σ, r), χ) := by
  have hfst : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => q.1.1) ((α, σ, r), χ) :=
    (contDiff_fst.comp contDiff_fst).contDiffAt
  have hσ : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => q.1.2.1) ((α, σ, r), χ) :=
    ((contDiff_fst.comp contDiff_snd).comp contDiff_fst).contDiffAt
  have hr : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => q.1.2.2) ((α, σ, r), χ) :=
    ((contDiff_snd.comp contDiff_snd).comp contDiff_fst).contDiffAt
  have hχ : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => q.2) ((α, σ, r), χ) :=
    contDiff_snd.contDiffAt
  have hsqrt : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => Real.sqrt q.1.1)
      ((α, σ, r), χ) :=
    (Real.contDiffAt_sqrt hα.ne').comp ((α, σ, r), χ) hfst
  have hωχ : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => Real.sqrt q.1.1 * q.2)
      ((α, σ, r), χ) := hsqrt.mul hχ
  have hα0 : α ≠ 0 := hα.ne'
  have hω0 : Real.sqrt α ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hC : ContDiffAt ℝ ⊤
      (fun q : (ℝ × ℝ × ℝ) × ℝ => (1 - Real.cos (Real.sqrt q.1.1 * q.2)) / q.1.1)
      ((α, σ, r), χ) :=
    (contDiffAt_const.sub hωχ.cos).div hfst hα0
  have hS : ContDiffAt ℝ ⊤
      (fun q : (ℝ × ℝ × ℝ) × ℝ =>
        q.2 / q.1.1 - Real.sin (Real.sqrt q.1.1 * q.2) / (q.1.1 * Real.sqrt q.1.1))
      ((α, σ, r), χ) :=
    (hχ.div hfst hα0).sub (hωχ.sin.div (hfst.mul hsqrt) (mul_ne_zero hα0 hω0))
  have h1 := hσ.mul hC
  have h2 : ContDiffAt ℝ ⊤
      (fun q : (ℝ × ℝ × ℝ) × ℝ =>
        (1 - q.1.1 * q.1.2.2) *
          (q.2 / q.1.1 - Real.sin (Real.sqrt q.1.1 * q.2) / (q.1.1 * Real.sqrt q.1.1)))
      ((α, σ, r), χ) :=
    (contDiffAt_const.sub (hfst.mul hr)).mul hS
  have h3 : ContDiffAt ℝ ⊤ (fun q : (ℝ × ℝ × ℝ) × ℝ => q.1.2.2 * q.2)
      ((α, σ, r), χ) := hr.mul hχ
  refine ((h1.add h2).add h3).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun q => by
    simp [univF_ell, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]

lemma eventually_rnorm_ne :
    ∀ᶠ s in 𝓝 sStar, rnorm s ≠ 0 := by
  have hmem : {s : Fin 6 → ℝ | 0 < rnorm s} ∈ 𝓝 sStar :=
    continuous_rnorm.continuousAt.preimage_mem_nhds (Ioi_mem_nhds rnorm_sStar_pos)
  exact Filter.eventually_of_mem hmem fun _ hs => ne_of_gt hs

lemma contDiffAt_uncurry_univF (χ0 : ℝ) :
    ContDiffAt ℝ ⊤ (Function.uncurry univF) (sStar, χ0) := by
  have hαpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  have hr : rnorm sStar ≠ 0 := rnorm_sStar_ne
  have hαnhd : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0), 0 < alphaOf v.1 := by
    have hf : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => v.1) (sStar, χ0) :=
      continuous_fst.continuousAt
    have : Tendsto (fun v : (Fin 6 → ℝ) × ℝ => alphaOf v.1)
        (𝓝 (sStar, χ0)) (𝓝 (alphaOf sStar)) :=
      Tendsto.comp continuousAt_alphaOf_sStar.tendsto hf.tendsto
    exact this.eventually (Ioi_mem_nhds hαpos)
  have hrnhd : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0), rnorm v.1 ≠ 0 := by
    have hf : ContinuousAt (fun v : (Fin 6 → ℝ) × ℝ => v.1) (sStar, χ0) :=
      continuous_fst.continuousAt
    have : Tendsto (rnorm ∘ fun v : (Fin 6 → ℝ) × ℝ => v.1)
        (𝓝 (sStar, χ0)) (𝓝 (rnorm sStar)) :=
      (continuous_rnorm.continuousAt (x := sStar)).tendsto.comp hf.tendsto
    exact this.eventually (isOpen_ne.mem_nhds rnorm_sStar_ne)
  have hell : ContDiffAt ℝ ⊤ (fun v : (Fin 6 → ℝ) × ℝ =>
      univF_ell (alphaOf v.1) (sigmaOf v.1) (rnorm v.1) v.2) (sStar, χ0) := by
    have hasr : ContDiffAt ℝ ⊤ (fun v : (Fin 6 → ℝ) × ℝ =>
        ((alphaOf v.1, sigmaOf v.1, rnorm v.1), v.2)) (sStar, χ0) := by
      have ha := (contDiffAt_alphaOf' hr).comp (sStar, χ0)
        (contDiff_fst.contDiffAt (x := (sStar, χ0)))
      have hs := (contDiffAt_sigmaOf sStar).comp (sStar, χ0)
        (contDiff_fst.contDiffAt (x := (sStar, χ0)))
      have hn := (contDiffAt_rnorm hr).comp (sStar, χ0)
        (contDiff_fst.contDiffAt (x := (sStar, χ0)))
      have hχ : ContDiffAt ℝ ⊤ (fun v : (Fin 6 → ℝ) × ℝ => v.2) (sStar, χ0) :=
        contDiff_snd.contDiffAt
      exact (ha.prodMk (hs.prodMk hn)).prodMk hχ
    exact (contDiffAt_univF_ell_unc (α := alphaOf sStar) (σ := sigmaOf sStar)
      (r := rnorm sStar) (χ := χ0) hαpos).comp (sStar, χ0) hasr
  refine hell.congr_of_eventuallyEq ?_
  filter_upwards [hαnhd] with v hv
  simpa [Function.uncurry] using univF_eq_ell hv

/-- Partial of `univF` in the Cartesian state. -/
def univF_f1 (s : Fin 6 → ℝ) (χ : ℝ) : (Fin 6 → ℝ) →L[ℝ] ℝ :=
  (fderiv ℝ (Function.uncurry univF) (s, χ)).comp (ContinuousLinearMap.inl ℝ (Fin 6 → ℝ) ℝ)

lemma eventually_hasFDerivAt_univF_s (χ0 : ℝ) :
    ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0),
      HasFDerivAt (fun s' => univF s' v.2) (univF_f1 v.1 v.2) v.1 := by
  have hcd : ContDiffAt ℝ 2 (Function.uncurry univF) (sStar, χ0) :=
    (contDiffAt_uncurry_univF χ0).of_le (by exact le_top)
  have hopen : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, χ0),
      ContDiffAt ℝ 2 (Function.uncurry univF) v :=
    hcd.eventually (by decide)
  filter_upwards [hopen] with v hv
  have hjoint : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) v) v :=
    (hv.differentiableAt (by decide)).hasFDerivAt
  have hconst : HasFDerivAt (fun _ : Fin 6 → ℝ => v.2)
      (0 : (Fin 6 → ℝ) →L[ℝ] ℝ) v.1 := hasFDerivAt_const _ _
  have hprod : HasFDerivAt (fun s' : Fin 6 → ℝ => (s', v.2))
      ((ContinuousLinearMap.id ℝ (Fin 6 → ℝ)).prod 0) v.1 :=
    (hasFDerivAt_id v.1).prodMk hconst
  have hcomp := hjoint.comp v.1 hprod
  refine hcomp.congr_fderiv ?_
  ext ds
  simp [univF_f1, ContinuousLinearMap.inl]

lemma continuousAt_univF_f1 (χ0 : ℝ) :
    ContinuousAt (Function.uncurry univF_f1) (sStar, χ0) := by
  have hf : ContDiffAt ℝ 2 (Function.uncurry univF) (sStar, χ0) :=
    (contDiffAt_uncurry_univF χ0).of_le (by exact le_top)
  have hfd : ContinuousAt (fderiv ℝ (Function.uncurry univF)) (sStar, χ0) :=
    hf.continuousAt_fderiv (by decide)
  have hcomp : Continuous
      (fun L : ((Fin 6 → ℝ) × ℝ) →L[ℝ] ℝ =>
        L.comp (ContinuousLinearMap.inl ℝ (Fin 6 → ℝ) ℝ)) :=
    continuous_id.clm_comp continuous_const
  exact hcomp.continuousAt.comp hfd

/-- Inverse Kepler anomaly via the bivariate IFT at `(sStar, 2t/5)`. -/
noncomputable def chiOf (s : Fin 6 → ℝ) (t : ℝ) : ℝ :=
  implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t) s

lemma chiOf_sStar (t : ℝ) : chiOf sStar t = 2 * t / 5 := by
  have hiff := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t)
  have := hiff.self_of_nhds
  simpa [chiOf] using this.mp rfl

lemma hasDerivAt_chiOf_sStar (t : ℝ) :
    HasDerivAt (chiOf sStar) (5 / 2)⁻¹ t := by
  have heq : chiOf sStar = fun y => 2 * y / 5 := funext chiOf_sStar
  rw [heq]
  have hg : ContinuousAt (fun y : ℝ => 2 * y / 5) t := by fun_prop
  exact HasDerivAt.of_local_left_inverse hg
    (hasDerivAt_univF_sStar (2 * t / 5)) (by norm_num)
    (Eventually.of_forall fun y => by simp [univF_sStar])

def keplerIC (s : Fin 6 → ℝ) : ℝ → Vec :=
  fun t =>
    let χ := chiOf s t
    fg_f s χ • statePos s + fg_g s t χ • stateVel s

lemma keplerIC_sStar_zero : keplerIC sStar 0 = ofCoords (5 / 2) 0 0 := by
  simp [keplerIC, chiOf_sStar, fg_f, fg_g, stumpffC, sStar_pos]

lemma meanMotion_sq : Real.sqrt (8 / 125) ^ 2 = 8 / 125 :=
  Real.sq_sqrt (by norm_num)

/-- `n = 2 √10 / 25`, equivalently `√(8/125)`. -/
lemma meanMotion_eq : Real.sqrt (8 / 125) = 2 * Real.sqrt 10 / 25 := by
  have hnn : (0 : ℝ) ≤ 2 * Real.sqrt 10 / 25 := by positivity
  refine (Real.sqrt_eq_iff_mul_self_eq (by norm_num) hnn).2 ?_
  field_simp
  ring_nf
  simp [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma omega_sq : Real.sqrt (8 / 125) ^ 2 = 8 / 125 :=
  meanMotion_sq

lemma z_of_sStar (t : ℝ) :
    alphaOf sStar * (2 * t / 5) ^ 2 = 8 * t ^ 2 / 125 := by
  rw [alphaOf_sStar]
  ring

lemma sqrt_z_of_sStar {t : ℝ} (_ht : t ≠ 0) :
    Real.sqrt (alphaOf sStar * (2 * t / 5) ^ 2) = |t| * Real.sqrt (8 / 125) := by
  rw [z_of_sStar, show 8 * t ^ 2 / 125 = (8 / 125) * t ^ 2 by ring]
  rw [Real.sqrt_mul (by positivity : (0 : ℝ) ≤ 8 / 125) (t ^ 2), Real.sqrt_sq_eq_abs]
  ring

lemma fg_f_sStar (t : ℝ) :
    fg_f sStar (2 * t / 5) = Real.cos (Real.sqrt (8 / 125) * t) := by
  unfold fg_f
  rw [rnorm_sStar]
  rcases eq_or_ne t 0 with rfl | ht
  · simp [stumpffC]
  · have hz : 0 < alphaOf sStar * (2 * t / 5) ^ 2 := by
      rw [z_of_sStar]
      exact div_pos (mul_pos (by norm_num) (sq_pos_of_ne_zero ht)) (by norm_num)
    rw [stumpffC_pos hz, z_of_sStar]
    have htn : t ^ 2 ≠ 0 := pow_ne_zero 2 ht
    have hdiv :
        (2 * t / 5) ^ 2 / (5 / 2) * ((1 - Real.cos (Real.sqrt (8 * t ^ 2 / 125))) /
          (8 * t ^ 2 / 125))
        = 1 - Real.cos (Real.sqrt (8 * t ^ 2 / 125)) := by
      field_simp [htn]
      ring
    rw [hdiv]
    have hsqrt : Real.sqrt (8 * t ^ 2 / 125) = |t| * Real.sqrt (8 / 125) := by
      rw [show 8 * t ^ 2 / 125 = (8 / 125) * t ^ 2 by ring]
      rw [Real.sqrt_mul (by positivity : (0 : ℝ) ≤ 8 / 125) (t ^ 2), Real.sqrt_sq_eq_abs]
      ring
    rw [show 1 - (1 - Real.cos (Real.sqrt (8 * t ^ 2 / 125)))
          = Real.cos (Real.sqrt (8 * t ^ 2 / 125)) by ring, hsqrt]
    have hω : 0 ≤ Real.sqrt (8 / 125) := Real.sqrt_nonneg _
    have : |Real.sqrt (8 / 125) * t| = Real.sqrt (8 / 125) * |t| := by
      rw [abs_mul, abs_of_nonneg hω]
    rw [mul_comm |t|, ← this, Real.cos_abs]

lemma sqrt_omega_sq_t (ω t : ℝ) (hω : 0 ≤ ω) :
    Real.sqrt (ω ^ 2 * t ^ 2) = |t| * ω := by
  have : ω ^ 2 * t ^ 2 = (ω * |t|) ^ 2 := by
    calc
      ω ^ 2 * t ^ 2 = ω ^ 2 * |t| ^ 2 := by rw [sq_abs]
      _ = (ω * |t|) ^ 2 := by ring
  rw [this, Real.sqrt_sq (mul_nonneg hω (abs_nonneg t)), mul_comm]

lemma t_div_abs (t : ℝ) (ht : t ≠ 0) : t / |t| = Real.sign t := by
  rcases lt_or_gt_of_ne ht with h | h
  · rw [abs_of_neg h, Real.sign_of_neg h]; field_simp [ne_of_lt h]
  · rw [abs_of_pos h, Real.sign_of_pos h]; field_simp [ne_of_gt h]

lemma fg_g_sStar (t : ℝ) :
    fg_g sStar t (2 * t / 5) = Real.sin (Real.sqrt (8 / 125) * t) / Real.sqrt (8 / 125) := by
  unfold fg_g
  rcases eq_or_ne t 0 with rfl | ht
  · simp [stumpffS]
  · have hz : 0 < alphaOf sStar * (2 * t / 5) ^ 2 := by
      rw [z_of_sStar]
      exact div_pos (mul_pos (by norm_num) (sq_pos_of_ne_zero ht)) (by norm_num)
    set ω := Real.sqrt (8 / 125)
    have hω0 : ω ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have hωnn : 0 ≤ ω := Real.sqrt_nonneg _
    have hz' : alphaOf sStar * (2 * t / 5) ^ 2 = ω ^ 2 * t ^ 2 := by
      rw [z_of_sStar, omega_sq]; ring
    have habs : |t| ≠ 0 := abs_ne_zero.mpr ht
    have hχ3 : (2 * t / 5) ^ 3 = 8 * t ^ 3 / 125 := by ring
    have hω2 : ω ^ 2 = 8 / 125 := omega_sq
    have hmain : (2 * t / 5) ^ 3 * stumpffS (alphaOf sStar * (2 * t / 5) ^ 2)
        = t - Real.sin (ω * t) / ω := by
      rw [stumpffS_pos hz, hχ3, hz', sqrt_omega_sq_t ω t hωnn, hω2]
      have hden : (8 / 125 : ℝ) * t ^ 2 * (|t| * ω) ≠ 0 := by
        refine mul_ne_zero (mul_ne_zero (by norm_num) (pow_ne_zero 2 ht)) (mul_ne_zero habs hω0)
      have hstep :
          8 * t ^ 3 / 125 * ((|t| * ω - Real.sin (|t| * ω)) / (8 / 125 * t ^ 2 * (|t| * ω)))
            = t - t * Real.sin (|t| * ω) / (|t| * ω) := by
        field_simp [hω0, ht, habs, hden]
      have hsin : t * Real.sin (|t| * ω) / (|t| * ω) = Real.sin (ω * t) / ω := by
        rw [div_eq_div_iff (mul_ne_zero habs hω0) hω0]
        have hs := sin_omega_abs ω t
        calc
          t * Real.sin (|t| * ω) * ω
              = (Real.sign t * |t|) * Real.sin (ω * |t|) * ω := by
                rw [sign_abs_eq t, mul_comm (|t|) ω]
          _ = (Real.sin (ω * |t|) * Real.sign t) * (|t| * ω) := by ring
          _ = Real.sin (ω * t) * (|t| * ω) := by rw [hs]
      rw [hstep, hsin]
    rw [hmain]
    ring

lemma vel_scale :
    (1 / Real.sqrt (8 / 125)) * (Real.sqrt 10 / 5) = (5 / 2 : ℝ) := by
  rw [meanMotion_eq]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring_nf

lemma keplerIC_sStar (t : ℝ) :
    keplerIC sStar t = circular (5 / 2) (Real.sqrt (8 / 125)) 0 t := by
  have hf := fg_f_sStar t
  have hg := fg_g_sStar t
  have hχ : chiOf sStar t = 2 * t / 5 := chiOf_sStar t
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [keplerIC, hχ, sStar_pos, sStar_vel, circular, ofCoords,
      PiLp.smul_apply, PiLp.add_apply, smul_eq_mul, hf]
    ring
  · simp [keplerIC, hχ, sStar_pos, sStar_vel, circular, ofCoords,
      PiLp.smul_apply, PiLp.add_apply, smul_eq_mul, hg]
    have hω : Real.sqrt (8 / 125) ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have hs10 : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    field_simp [hω, hs10]
    have h8 : Real.sqrt 8 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have h125 : Real.sqrt 125 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have hid : Real.sqrt 125 * Real.sqrt 10 * 2 = Real.sqrt 8 * 25 := by
      have hsq : (Real.sqrt 125 * Real.sqrt 10 * 2) ^ 2 = (Real.sqrt 8 * 25) ^ 2 := by
        simp [mul_pow, Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 125),
          Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10),
          Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 8)]
        norm_num
      exact (sq_eq_sq₀ (by positivity) (by positivity)).mp hsq
    set snt := Real.sin (Real.sqrt 8 * t / Real.sqrt 125)
    calc
      Real.sqrt 125 * snt * Real.sqrt 10 * 2
          = (Real.sqrt 125 * Real.sqrt 10 * 2) * snt := by ring
      _ = (Real.sqrt 8 * 25) * snt := by rw [hid]
      _ = Real.sqrt 8 * snt * 5 ^ 2 := by ring
  · simp [keplerIC, hχ, sStar_pos, sStar_vel, circular, ofCoords,
      PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]

/-! Values of the algebraic los-jet at `sStar`, and C^∞ of `losTaylor23`. -/

set_option maxHeartbeats 800000

lemma n0Of_sStar : n0Of sStar = ofCoords (3 / 2) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [n0Of, sStar_pos, eJet0, ofCoords, PiLp.sub_apply] <;> norm_num

lemma n1Of_sStar : n1Of sStar = ofCoords 0 (Real.sqrt 10 / 5 - 1) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [n1Of, sStar_vel, eJet1, ofCoords, PiLp.sub_apply]

lemma accelOf_sStar : accelOf sStar = ofCoords (-4 / 25) 0 0 := by
  unfold accelOf
  rw [sStar_rnorm, sStar_pos]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, smul_eq_mul] <;> norm_num

lemma n2Of_sStar : n2Of sStar = ofCoords (21 / 25) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [n2Of, accelOf_sStar, eJet2, ofCoords, PiLp.sub_apply]
    <;> norm_num

lemma jerkOf_sStar : jerkOf sStar = ofCoords 0 (-8 * Real.sqrt 10 / 625) 0 := by
  unfold jerkOf
  rw [sStar_rnorm, sStar_inner_rv, sStar_pos, sStar_vel]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    <;> field_simp <;> ring

lemma n3Of_sStar : n3Of sStar = ofCoords 0 (1 - 8 * Real.sqrt 10 / 625) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [n3Of, jerkOf_sStar, eJet3, ofCoords, PiLp.sub_apply]
  ring

lemma qOf_sStar : qOf sStar = 9 / 4 := by
  simp [qOf, vecDot, n0Of_sStar, ofLp_ofCoords, Fin.sum_univ_three]
  norm_num

lemma q1Of_sStar : q1Of sStar = 0 := by
  simp [q1Of, vecDot, n0Of_sStar, n1Of_sStar, ofLp_ofCoords, Fin.sum_univ_three]

lemma qOf_sStar_pos : 0 < qOf sStar := by
  rw [qOf_sStar]; norm_num

lemma contDiff_n0Of : ContDiff ℝ ⊤ n0Of := by
  unfold n0Of
  exact contDiff_statePos.sub (contDiff_const (c := eJet0))

lemma contDiff_n1Of : ContDiff ℝ ⊤ n1Of := by
  unfold n1Of
  exact contDiff_stateVel.sub (contDiff_const (c := eJet1))

lemma continuous_qOf : Continuous qOf := by
  have h : Continuous (fun s => ⟪n0Of s, n0Of s⟫) :=
    (contDiff_n0Of.continuous.inner (𝕜 := ℝ) contDiff_n0Of.continuous)
  convert h using 1
  ext s
  exact (vecDot_eq_inner (n0Of s) (n0Of s)).symm

lemma eventually_qOf_pos : ∀ᶠ s in 𝓝 sStar, 0 < qOf s :=
  continuous_qOf.continuousAt.preimage_mem_nhds (Ioi_mem_nhds qOf_sStar_pos)

lemma contDiffAt_accelOf : ContDiffAt ℝ ⊤ accelOf sStar := by
  have hpow : ContDiffAt ℝ ⊤ (fun s => rnorm s ^ 3) sStar :=
    (contDiffAt_rnorm rnorm_sStar_ne).pow 3
  have hinv : ContDiffAt ℝ ⊤ (fun s => (rnorm s ^ 3)⁻¹) sStar :=
    hpow.inv (by rw [rnorm_sStar]; norm_num)
  have hsmul : ContDiffAt ℝ ⊤ (fun s => (rnorm s ^ 3)⁻¹ • statePos s) sStar :=
    hinv.smul contDiff_statePos.contDiffAt
  refine hsmul.neg.congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by
    simp [accelOf, rnorm, neg_smul]

lemma contDiffAt_jerkOf : ContDiffAt ℝ ⊤ jerkOf sStar := by
  have hpow3 : ContDiffAt ℝ ⊤ (fun s => rnorm s ^ 3) sStar :=
    (contDiffAt_rnorm rnorm_sStar_ne).pow 3
  have hinv3 : ContDiffAt ℝ ⊤ (fun s => (rnorm s ^ 3)⁻¹) sStar :=
    hpow3.inv (by rw [rnorm_sStar]; norm_num)
  have hpow5 : ContDiffAt ℝ ⊤ (fun s => rnorm s ^ 5) sStar :=
    (contDiffAt_rnorm rnorm_sStar_ne).pow 5
  have hinv5 : ContDiffAt ℝ ⊤ (fun s => (rnorm s ^ 5)⁻¹) sStar :=
    hpow5.inv (by rw [rnorm_sStar]; norm_num)
  have hterm1 : ContDiffAt ℝ ⊤ (fun s => (rnorm s ^ 3)⁻¹ • stateVel s) sStar :=
    hinv3.smul contDiff_stateVel.contDiffAt
  have hinter : ContDiffAt ℝ ⊤ (fun s => ⟪statePos s, stateVel s⟫) sStar :=
    contDiff_statePos.contDiffAt.inner (𝕜 := ℝ) contDiff_stateVel.contDiffAt
  have hdot : ContDiffAt ℝ ⊤ (fun s => vecDot (statePos s) (stateVel s)) sStar := by
    refine hinter.congr_of_eventuallyEq ?_
    exact Eventually.of_forall fun u => (vecDot_eq_inner _ _).symm
  have hnum : ContDiffAt ℝ ⊤
      (fun s => (3 : ℝ) * vecDot (statePos s) (stateVel s)) sStar :=
    contDiffAt_const.mul hdot
  have hcoef : ContDiffAt ℝ ⊤
      (fun s => ((3 : ℝ) * vecDot (statePos s) (stateVel s)) * (rnorm s ^ 5)⁻¹)
      sStar :=
    hnum.mul hinv5
  have hterm2 : ContDiffAt ℝ ⊤
      (fun s => (((3 : ℝ) * vecDot (statePos s) (stateVel s)) / (rnorm s ^ 5)) •
        statePos s) sStar := by
    refine (hcoef.smul contDiff_statePos.contDiffAt).congr_of_eventuallyEq ?_
    exact Eventually.of_forall fun s => by simp [div_eq_mul_inv]
  refine (hterm1.neg.add hterm2).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by
    simp [jerkOf, rnorm, neg_smul, div_eq_mul_inv]

lemma contDiffAt_n2Of : ContDiffAt ℝ ⊤ n2Of sStar := by
  unfold n2Of
  exact contDiffAt_accelOf.sub (contDiff_const (c := eJet2)).contDiffAt

lemma contDiffAt_n3Of : ContDiffAt ℝ ⊤ n3Of sStar := by
  unfold n3Of
  exact contDiffAt_jerkOf.sub (contDiff_const (c := eJet3)).contDiffAt

lemma contDiff_qOf : ContDiff ℝ ⊤ qOf := by
  have h : ContDiff ℝ ⊤ (fun s => ⟪n0Of s, n0Of s⟫) :=
    contDiff_n0Of.inner (𝕜 := ℝ) contDiff_n0Of
  convert h using 1
  ext s
  exact (vecDot_eq_inner (n0Of s) (n0Of s)).symm

lemma contDiff_q1Of : ContDiff ℝ ⊤ q1Of := by
  have h : ContDiff ℝ ⊤ (fun s => (2 : ℝ) * ⟪n0Of s, n1Of s⟫) :=
    contDiff_const.mul (contDiff_n0Of.inner (𝕜 := ℝ) contDiff_n1Of)
  convert h using 1
  ext s
  simp [q1Of, vecDot_eq_inner]

lemma contDiffAt_q2Of : ContDiffAt ℝ ⊤ q2Of sStar := by
  have h11 : ContDiffAt ℝ ⊤ (fun s => (2 : ℝ) * ⟪n1Of s, n1Of s⟫) sStar :=
    (contDiff_const.mul (contDiff_n1Of.inner (𝕜 := ℝ) contDiff_n1Of)).contDiffAt
  have h02 : ContDiffAt ℝ ⊤ (fun s => (2 : ℝ) * ⟪n0Of s, n2Of s⟫) sStar :=
    contDiffAt_const.mul (contDiff_n0Of.contDiffAt.inner (𝕜 := ℝ) contDiffAt_n2Of)
  refine (h11.add h02).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [q2Of, vecDot_eq_inner]

lemma contDiffAt_q3Of : ContDiffAt ℝ ⊤ q3Of sStar := by
  have h12 : ContDiffAt ℝ ⊤ (fun s => (6 : ℝ) * ⟪n1Of s, n2Of s⟫) sStar :=
    contDiffAt_const.mul (contDiff_n1Of.contDiffAt.inner (𝕜 := ℝ) contDiffAt_n2Of)
  have h03 : ContDiffAt ℝ ⊤ (fun s => (2 : ℝ) * ⟪n0Of s, n3Of s⟫) sStar :=
    contDiffAt_const.mul (contDiff_n0Of.contDiffAt.inner (𝕜 := ℝ) contDiffAt_n3Of)
  refine (h12.add h03).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [q3Of, vecDot_eq_inner]

lemma contDiffAt_rpow_q (p : ℝ) :
    ContDiffAt ℝ ⊤ (fun s => (qOf s) ^ p) sStar :=
  contDiff_qOf.contDiffAt.rpow contDiffAt_const qOf_sStar_pos.ne'

lemma contDiffAt_pOf : ContDiffAt ℝ ⊤ pOf sStar := by
  unfold pOf
  exact contDiffAt_rpow_q (-(1 / 2 : ℝ))

lemma contDiffAt_p1Of : ContDiffAt ℝ ⊤ p1Of sStar := by
  unfold p1Of
  exact (contDiffAt_const.mul (contDiffAt_rpow_q (-(3 / 2 : ℝ)))).mul
    contDiff_q1Of.contDiffAt

lemma contDiffAt_p2Of : ContDiffAt ℝ ⊤ p2Of sStar := by
  have ht1 : ContDiffAt ℝ ⊤
      (fun s => (3 / 4 : ℝ) * (qOf s) ^ (-(5 / 2 : ℝ)) * (q1Of s) ^ 2) sStar :=
    (contDiffAt_const.mul (contDiffAt_rpow_q (-(5 / 2 : ℝ)))).mul
      (contDiff_q1Of.contDiffAt.pow 2)
  have ht2 : ContDiffAt ℝ ⊤
      (fun s => (1 / 2 : ℝ) * (qOf s) ^ (-(3 / 2 : ℝ)) * q2Of s) sStar :=
    (contDiffAt_const.mul (contDiffAt_rpow_q (-(3 / 2 : ℝ)))).mul contDiffAt_q2Of
  unfold p2Of
  exact ht1.sub ht2

lemma contDiffAt_p3Of : ContDiffAt ℝ ⊤ p3Of sStar := by
  have ht1 : ContDiffAt ℝ ⊤
      (fun s => (-(15 / 8 : ℝ)) * (qOf s) ^ (-(7 / 2 : ℝ)) * (q1Of s) ^ 3)
      sStar :=
    (contDiffAt_const.mul (contDiffAt_rpow_q (-(7 / 2 : ℝ)))).mul
      (contDiff_q1Of.contDiffAt.pow 3)
  have ht2 : ContDiffAt ℝ ⊤
      (fun s => (9 / 4 : ℝ) * (qOf s) ^ (-(5 / 2 : ℝ)) * q1Of s * q2Of s)
      sStar :=
    ((contDiffAt_const.mul (contDiffAt_rpow_q (-(5 / 2 : ℝ)))).mul
      contDiff_q1Of.contDiffAt).mul contDiffAt_q2Of
  have ht3 : ContDiffAt ℝ ⊤
      (fun s => (1 / 2 : ℝ) * (qOf s) ^ (-(3 / 2 : ℝ)) * q3Of s) sStar :=
    (contDiffAt_const.mul (contDiffAt_rpow_q (-(3 / 2 : ℝ)))).mul contDiffAt_q3Of
  unfold p3Of
  exact (ht1.add ht2).sub ht3

lemma contDiffAt_u2Of : ContDiffAt ℝ ⊤ u2Of sStar := by
  have a : ContDiffAt ℝ ⊤ (fun s => pOf s • n2Of s) sStar :=
    contDiffAt_pOf.smul contDiffAt_n2Of
  have bmid : ContDiffAt ℝ ⊤ (fun s => p1Of s • n1Of s) sStar :=
    contDiffAt_p1Of.smul contDiff_n1Of.contDiffAt
  have b : ContDiffAt ℝ ⊤ (fun s => (2 : ℝ) • (p1Of s • n1Of s)) sStar :=
    (contDiffAt_const (c := (2 : ℝ))).smul bmid
  have c : ContDiffAt ℝ ⊤ (fun s => p2Of s • n0Of s) sStar :=
    contDiffAt_p2Of.smul contDiff_n0Of.contDiffAt
  unfold u2Of
  exact (a.add b).add c

lemma contDiffAt_u3Of : ContDiffAt ℝ ⊤ u3Of sStar := by
  have a : ContDiffAt ℝ ⊤ (fun s => pOf s • n3Of s) sStar :=
    contDiffAt_pOf.smul contDiffAt_n3Of
  have bmid : ContDiffAt ℝ ⊤ (fun s => p1Of s • n2Of s) sStar :=
    contDiffAt_p1Of.smul contDiffAt_n2Of
  have b : ContDiffAt ℝ ⊤ (fun s => (3 : ℝ) • (p1Of s • n2Of s)) sStar :=
    (contDiffAt_const (c := (3 : ℝ))).smul bmid
  have cmid : ContDiffAt ℝ ⊤ (fun s => p2Of s • n1Of s) sStar :=
    contDiffAt_p2Of.smul contDiff_n1Of.contDiffAt
  have c : ContDiffAt ℝ ⊤ (fun s => (3 : ℝ) • (p2Of s • n1Of s)) sStar :=
    (contDiffAt_const (c := (3 : ℝ))).smul cmid
  have d : ContDiffAt ℝ ⊤ (fun s => p3Of s • n0Of s) sStar :=
    contDiffAt_p3Of.smul contDiff_n0Of.contDiffAt
  unfold u3Of
  exact ((a.add b).add c).add d

lemma contDiff_ofLp_coord (i : Fin 3) : ContDiff ℝ ⊤ (fun w : Vec => w.ofLp i) :=
  (ContinuousLinearMap.proj (R := ℝ) (φ := fun _ : Fin 3 => ℝ) i).contDiff.comp
    (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).contDiff

lemma contDiffAt_losTaylor23 : ContDiffAt ℝ ⊤ losTaylor23 sStar := by
  refine contDiffAt_pi.2 fun i => ?_
  fin_cases i
  · exact ((contDiff_ofLp_coord 0).contDiffAt.comp sStar contDiffAt_u2Of).div
      contDiffAt_const (by norm_num)
  · exact ((contDiff_ofLp_coord 1).contDiffAt.comp sStar contDiffAt_u2Of).div
      contDiffAt_const (by norm_num)
  · exact ((contDiff_ofLp_coord 2).contDiffAt.comp sStar contDiffAt_u2Of).div
      contDiffAt_const (by norm_num)
  · exact ((contDiff_ofLp_coord 0).contDiffAt.comp sStar contDiffAt_u3Of).div
      contDiffAt_const (by norm_num)
  · exact ((contDiff_ofLp_coord 1).contDiffAt.comp sStar contDiffAt_u3Of).div
      contDiffAt_const (by norm_num)
  · exact ((contDiff_ofLp_coord 2).contDiffAt.comp sStar contDiffAt_u3Of).div
      contDiffAt_const (by norm_num)

lemma hasFDerivAt_losTaylor23_fderiv :
    HasFDerivAt losTaylor23 (fderiv ℝ losTaylor23 sStar) sStar :=
  (contDiffAt_losTaylor23.differentiableAt (by decide)).hasFDerivAt

def lineJet (j : Fin 6) (t : ℝ) : Fin 6 → ℝ :=
  sStar + t • Pi.single j (1 : ℝ)

lemma lineJet_zero (j : Fin 6) : lineJet j 0 = sStar := by
  simp [lineJet]

lemma hasDerivAt_lineJet (j : Fin 6) (t : ℝ) :
    HasDerivAt (lineJet j) (Pi.single j (1 : ℝ)) t := by
  unfold lineJet
  have h :=
    ((hasDerivAt_id (𝕜 := ℝ) t).smul_const (Pi.single j (1 : ℝ))).const_add sStar
  have h' : HasDerivAt (fun x => sStar + x • Pi.single j (1 : ℝ))
      ((1 : ℝ) • Pi.single j (1 : ℝ)) t :=
    h.congr_of_eventuallyEq (Eventually.of_forall fun x => by simp)
  have h1 : (1 : ℝ) • Pi.single j (1 : ℝ) = Pi.single j (1 : ℝ) := one_smul ℝ _
  exact h'.congr_deriv h1

lemma hasDerivAt_losTaylor23_line (j i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet j t) i)
      (fderiv ℝ losTaylor23 sStar (Pi.single j 1) i) 0 := by
  have hf : HasFDerivAt losTaylor23 (fderiv ℝ losTaylor23 sStar) (lineJet j 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_losTaylor23_fderiv
  have hcomp := hf.comp_hasDerivAt 0 (hasDerivAt_lineJet j 0)
  exact (hasDerivAt_pi.mp hcomp) i

lemma toLin'_jetMatrix_single (j : Fin 6) :
    Matrix.toLin' jetMatrix (Pi.single j (1 : ℝ)) = fun i => jetMatrix i j := by
  ext i
  simp [Matrix.toLin'_apply, Matrix.mulVec, dotProduct]
  rw [Finset.sum_eq_single j]
  · simp
  · intro k _ hkj
    simp [Pi.single_eq_of_ne hkj]
  · simp

lemma fderiv_losTaylor23_single (j i : Fin 6) :
    fderiv ℝ losTaylor23 sStar (Pi.single j 1) i
      = deriv (fun t => losTaylor23 (lineJet j t) i) 0 :=
  (hasDerivAt_losTaylor23_line j i).deriv.symm

lemma q2Of_sStar : q2Of sStar = 133 / 25 - 4 * Real.sqrt 10 / 5 := by
  simp [q2Of, vecDot, n1Of_sStar, n0Of_sStar, n2Of_sStar, ofLp_ofCoords,
    Fin.sum_univ_three]
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma q3Of_sStar : q3Of sStar = 0 := by
  simp [q3Of, vecDot, n1Of_sStar, n2Of_sStar, n0Of_sStar, n3Of_sStar,
    ofLp_ofCoords, Fin.sum_univ_three]

lemma sqrt_nine_div_four : Real.sqrt (9 / 4) = 3 / 2 := by
  rw [Real.sqrt_div (by norm_num : (0 : ℝ) ≤ 9)]
  have h9 : Real.sqrt 9 = 3 :=
    (Real.sqrt_eq_iff_eq_sq (by norm_num : (0 : ℝ) ≤ 9) (by norm_num : (0 : ℝ) ≤ 3)).2
      (by norm_num)
  have h4 : Real.sqrt 4 = 2 :=
    (Real.sqrt_eq_iff_eq_sq (by norm_num : (0 : ℝ) ≤ 4) (by norm_num : (0 : ℝ) ≤ 2)).2
      (by norm_num)
  rw [h9, h4]

lemma rpow_neg_half_nine_four : (9 / 4 : ℝ) ^ (-(1 / 2 : ℝ)) = 2 / 3 := by
  have hpos : (0 : ℝ) < 9 / 4 := by norm_num
  rw [Real.rpow_neg hpos.le]
  have hs : (9 / 4 : ℝ) ^ (1 / 2 : ℝ) = Real.sqrt (9 / 4) := by
    rw [Real.sqrt_eq_rpow]
  rw [hs, sqrt_nine_div_four]
  field_simp

lemma rpow_neg_three_halves_nine_four : (9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) = 8 / 27 := by
  have hpos : (0 : ℝ) < 9 / 4 := by norm_num
  rw [Real.rpow_neg hpos.le]
  have h32 : (9 / 4 : ℝ) ^ (3 / 2 : ℝ) = (9 / 4) * Real.sqrt (9 / 4) := by
    have : (3 / 2 : ℝ) = 1 + 1 / 2 := by norm_num
    rw [this, Real.rpow_add hpos, Real.rpow_one, Real.sqrt_eq_rpow]
  rw [h32, sqrt_nine_div_four]
  field_simp
  norm_num

lemma pOf_sStar : pOf sStar = 2 / 3 := by
  unfold pOf
  rw [qOf_sStar, rpow_neg_half_nine_four]

lemma p1Of_sStar : p1Of sStar = 0 := by
  simp [p1Of, q1Of_sStar]

lemma p2Of_sStar : p2Of sStar = -532 / 675 + 16 * Real.sqrt 10 / 135 := by
  unfold p2Of
  rw [qOf_sStar, q1Of_sStar, q2Of_sStar]
  simp only [zero_pow (by norm_num : (2 : ℕ) ≠ 0), mul_zero, zero_mul, zero_sub]
  rw [rpow_neg_three_halves_nine_four]
  field_simp
  ring

lemma p3Of_sStar : p3Of sStar = 0 := by
  simp [p3Of, q1Of_sStar, q3Of_sStar]

lemma u2Of_sStar :
    u2Of sStar = ofCoords (-28 / 45 + 8 * Real.sqrt 10 / 45) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;>
    simp [u2Of, pOf_sStar, p1Of_sStar, p2Of_sStar, n2Of_sStar, n1Of_sStar, n0Of_sStar,
      ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul] <;> field_simp <;> ring

lemma u3Of_sStar :
    u3Of sStar = ofCoords 0 (842 / 225 - 4708 * Real.sqrt 10 / 5625) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;>
    simp [u3Of, pOf_sStar, p1Of_sStar, p2Of_sStar, p3Of_sStar, n3Of_sStar, n2Of_sStar,
      n1Of_sStar, n0Of_sStar, ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  all_goals (try (field_simp; ring_nf; simp [sqrt10_sq]; ring))

lemma lineJet_apply (j k : Fin 6) (t : ℝ) :
    lineJet j t k = sStar k + if k = j then t else 0 := by
  simp [lineJet, Pi.single_apply, smul_eq_mul]

lemma statePos_lineJet0 (t : ℝ) :
    statePos (lineJet 0 t) = ofCoords (5 / 2 + t) 0 0 := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet0 (t : ℝ) :
    stateVel (lineJet 0 t) = ofCoords 0 (Real.sqrt 10 / 5) 0 := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    rnorm (lineJet 0 t) = 5 / 2 + t := by
  rw [rnorm, statePos_lineJet0, ofCoords_norm]
  simp
  exact Real.sqrt_sq (by linarith : 0 ≤ 5 / 2 + t)

lemma n0Of_lineJet0 (t : ℝ) :
    n0Of (lineJet 0 t) = ofCoords (3 / 2 + t) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet0, eJet0, ofCoords, PiLp.sub_apply] <;> ring

lemma n1Of_lineJet0 (t : ℝ) :
    n1Of (lineJet 0 t) = ofCoords 0 (Real.sqrt 10 / 5 - 1) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet0, eJet1, ofCoords, PiLp.sub_apply]

lemma accelOf_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    accelOf (lineJet 0 t) = ofCoords (-(5 / 2 + t)⁻¹ ^ 2) 0 0 := by
  have hpos : 0 < 5 / 2 + t := by linarith
  have hr : ‖ofCoords (5 / 2 + t) 0 0‖ = 5 / 2 + t := by
    rw [ofCoords_norm]
    simp [Real.sqrt_sq hpos.le]
  unfold accelOf
  rw [statePos_lineJet0, hr]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul]
    have hne : 5 / 2 + t ≠ 0 := hpos.ne'
    field_simp [hne]
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul]
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul]

lemma n2Of_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    n2Of (lineJet 0 t) = ofCoords (1 - (5 / 2 + t)⁻¹ ^ 2) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n2Of, accelOf_lineJet0 ht, eJet2, ofCoords, PiLp.sub_apply] <;> ring

lemma hasDerivAt_ofLp {f : ℝ → Vec} {f' : Vec} {t0 : ℝ}
    (hf : HasDerivAt f f' t0) (i : Fin 3) :
    HasDerivAt (fun t => (f t).ofLp i) (f'.ofLp i) t0 := by
  have h :=
    (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).toContinuousLinearMap.hasFDerivAt.comp_hasDerivAt
      t0 hf
  exact (hasDerivAt_pi.mp h) i

lemma eventually_lineJet0_pos : ∀ᶠ t : ℝ in 𝓝 0, -5 / 2 < t :=
  eventually_gt_nhds (by norm_num : (-5 / 2 : ℝ) < 0)

lemma vecDot_lineJet0 (t : ℝ) :
    vecDot (statePos (lineJet 0 t)) (stateVel (lineJet 0 t)) = 0 := by
  simp [vecDot, statePos_lineJet0, stateVel_lineJet0, ofLp_ofCoords, Fin.sum_univ_three]

lemma jerkOf_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    jerkOf (lineJet 0 t) =
      ofCoords 0 (-(Real.sqrt 10 / 5) * (5 / 2 + t)⁻¹ ^ 3) 0 := by
  have hpos : 0 < 5 / 2 + t := by linarith
  have hr : ‖statePos (lineJet 0 t)‖ = 5 / 2 + t := rnorm_lineJet0 ht
  unfold jerkOf
  rw [hr, vecDot_lineJet0, stateVel_lineJet0, statePos_lineJet0]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    have hne : 5 / 2 + t ≠ 0 := hpos.ne'
    field_simp [hne]
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]

lemma n3Of_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    n3Of (lineJet 0 t) =
      ofCoords 0 (1 - (Real.sqrt 10 / 5) * (5 / 2 + t)⁻¹ ^ 3) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n3Of, jerkOf_lineJet0 ht, eJet3, ofCoords, PiLp.sub_apply] <;> ring

lemma qOf_lineJet0 (t : ℝ) : qOf (lineJet 0 t) = (3 / 2 + t) ^ 2 := by
  simp [qOf, vecDot, n0Of_lineJet0, ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma q1Of_lineJet0 (t : ℝ) : q1Of (lineJet 0 t) = 0 := by
  simp [q1Of, vecDot, n0Of_lineJet0, n1Of_lineJet0, ofLp_ofCoords, Fin.sum_univ_three]

lemma hasDerivAt_id_const_add (c t0 : ℝ) :
    HasDerivAt (fun t : ℝ => c + t) 1 t0 :=
  (hasDerivAt_id t0).const_add c

lemma hasDerivAt_inv_line0 :
    HasDerivAt (fun t : ℝ => (5 / 2 + t)⁻¹) (-4 / 25) 0 := by
  have hne : (5 / 2 + (0 : ℝ)) ≠ 0 := by norm_num
  have hinv := (hasDerivAt_id_const_add (5 / 2) 0).inv hne
  exact hinv.congr_deriv (by norm_num)

lemma hasDerivAt_pow2_at (a : ℝ) :
    HasDerivAt (fun x : ℝ => x ^ 2) (2 * a) a :=
  ((hasDerivAt_id a).pow 2).congr_deriv (by simp [id])

lemma hasDerivAt_pow3_at (a : ℝ) :
    HasDerivAt (fun x : ℝ => x ^ 3) (3 * a ^ 2) a :=
  ((hasDerivAt_id a).pow 3).congr_deriv (by simp [id])

lemma hasDerivAt_inv_pow2_line0 :
    HasDerivAt (fun t : ℝ => (5 / 2 + t)⁻¹ ^ 2) (-16 / 125) 0 := by
  have h := (hasDerivAt_pow2_at ((5 / 2 + (0 : ℝ))⁻¹)).comp 0 hasDerivAt_inv_line0
  exact h.congr_deriv (by norm_num)

lemma hasDerivAt_inv_pow3_line0 :
    HasDerivAt (fun t : ℝ => (5 / 2 + t)⁻¹ ^ 3) (-48 / 625) 0 := by
  have h := (hasDerivAt_pow3_at ((5 / 2 + (0 : ℝ))⁻¹)).comp 0 hasDerivAt_inv_line0
  exact h.congr_deriv (by norm_num)

lemma hasDerivAt_n0_lineJet0 :
    HasDerivAt (fun t => n0Of (lineJet 0 t)) (ofCoords 1 0 0) 0 := by
  have h := hasDerivAt_coord3
    ((hasDerivAt_id_const_add (3 / 2) 0)) (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet0)

lemma ofCoords_zero : (ofCoords 0 0 0 : Vec) = 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simp [ofCoords]

lemma hasDerivAt_n1_lineJet0 :
    HasDerivAt (fun t => n1Of (lineJet 0 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5 - 1)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n1Of (lineJet 0 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet0)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_n2_lineJet0 :
    HasDerivAt (fun t => n2Of (lineJet 0 t)) (ofCoords (16 / 125) 0 0) 0 := by
  have hx : HasDerivAt (fun t : ℝ => 1 - (5 / 2 + t)⁻¹ ^ 2) (16 / 125) 0 := by
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub hasDerivAt_inv_pow2_line0
    exact h.congr_deriv (by ring)
  have h := hasDerivAt_coord3 hx (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_const 0 (0 : ℝ))
  have heq : (fun t => n2Of (lineJet 0 t)) =ᶠ[𝓝 0]
      fun t => ofCoords (1 - (5 / 2 + t)⁻¹ ^ 2) 0 0 := by
    filter_upwards [eventually_lineJet0_pos] with t ht
    exact n2Of_lineJet0 ht
  exact h.congr_of_eventuallyEq heq

lemma hasDerivAt_n3_lineJet0 :
    HasDerivAt (fun t => n3Of (lineJet 0 t))
      (ofCoords 0 (48 * Real.sqrt 10 / 3125) 0) 0 := by
  have hy : HasDerivAt
      (fun t : ℝ => 1 - (Real.sqrt 10 / 5) * (5 / 2 + t)⁻¹ ^ 3)
      (48 * Real.sqrt 10 / 3125) 0 := by
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub
      ((hasDerivAt_const 0 (Real.sqrt 10 / 5)).mul hasDerivAt_inv_pow3_line0)
    exact h.congr_deriv (by
      simp
      field_simp
      ring)
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ)) hy
    (hasDerivAt_const 0 (0 : ℝ))
  have heq : (fun t => n3Of (lineJet 0 t)) =ᶠ[𝓝 0]
      fun t => ofCoords 0 (1 - (Real.sqrt 10 / 5) * (5 / 2 + t)⁻¹ ^ 3) 0 := by
    filter_upwards [eventually_lineJet0_pos] with t ht
    exact n3Of_lineJet0 ht
  exact h.congr_of_eventuallyEq heq

lemma hasDerivAt_q_lineJet0 :
    HasDerivAt (fun t => qOf (lineJet 0 t)) 3 0 := by
  have h := (hasDerivAt_pow2_at (3 / 2 + (0 : ℝ))).comp 0
    (hasDerivAt_id_const_add (3 / 2) 0)
  change HasDerivAt (fun t : ℝ => (3 / 2 + t) ^ 2) (2 * (3 / 2 + 0) * 1) 0 at h
  have hfeq : (2 * (3 / 2 + 0) * 1 : ℝ) = 3 := by norm_num
  have h' := h.congr_deriv hfeq
  exact h'.congr_of_eventuallyEq (Eventually.of_forall qOf_lineJet0)

lemma hasDerivAt_q1_lineJet0 :
    HasDerivAt (fun t => q1Of (lineJet 0 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q1Of_lineJet0)

lemma q2Of_lineJet0 {t : ℝ} (ht : -5 / 2 < t) :
    q2Of (lineJet 0 t) =
      2 * (Real.sqrt 10 / 5 - 1) ^ 2
        + 2 * (3 / 2 + t) * (1 - (5 / 2 + t)⁻¹ ^ 2) := by
  simp [q2Of, vecDot, n1Of_lineJet0, n0Of_lineJet0, n2Of_lineJet0 ht,
    ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma hasDerivAt_q2_lineJet0 :
    HasDerivAt (fun t => q2Of (lineJet 0 t)) (258 / 125) 0 := by
  have hx : HasDerivAt (fun t : ℝ => 1 - (5 / 2 + t)⁻¹ ^ 2) (16 / 125) 0 := by
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub hasDerivAt_inv_pow2_line0
    exact h.congr_deriv (by ring)
  have hm := (hasDerivAt_id_const_add (3 / 2) 0).mul hx
  have h2 := HasDerivAt.const_mul (2 : ℝ) hm
  have hc := hasDerivAt_const (0 : ℝ) (2 * (Real.sqrt 10 / 5 - 1) ^ 2)
  have hadd := hc.add h2
  have hd :
      (0 : ℝ) + 2 * (1 * (1 - (5 / 2 + 0)⁻¹ ^ 2) + (3 / 2 + 0) * (16 / 125))
        = 258 / 125 := by norm_num
  have hadd' := hadd.congr_deriv hd
  have heq : (fun t => q2Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        2 * (Real.sqrt 10 / 5 - 1) ^ 2
          + 2 * ((3 / 2 + t) * (1 - (5 / 2 + t)⁻¹ ^ 2)) := by
    filter_upwards [eventually_lineJet0_pos] with t ht
    simpa [mul_assoc] using q2Of_lineJet0 ht
  exact hadd'.congr_of_eventuallyEq heq

lemma q3Of_lineJet0 {t : ℝ} (ht : -5 / 2 < t) : q3Of (lineJet 0 t) = 0 := by
  simp [q3Of, vecDot, n1Of_lineJet0, n2Of_lineJet0 ht, n0Of_lineJet0, n3Of_lineJet0 ht,
    ofLp_ofCoords, Fin.sum_univ_three]

lemma hasDerivAt_q3_lineJet0 :
    HasDerivAt (fun t => q3Of (lineJet 0 t)) 0 0 := by
  have heq : (fun t => q3Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)] fun _ => (0 : ℝ) := by
    filter_upwards [eventually_lineJet0_pos] with t ht
    exact q3Of_lineJet0 ht
  exact (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq heq

lemma pOf_lineJet0 {t : ℝ} (ht : -3 / 2 < t) :
    pOf (lineJet 0 t) = (3 / 2 + t)⁻¹ := by
  have hpos : 0 < 3 / 2 + t := by linarith
  unfold pOf
  rw [qOf_lineJet0]
  have : ((3 / 2 + t) ^ 2) ^ (-(1 / 2 : ℝ)) = (3 / 2 + t)⁻¹ := by
    have hsq : ((3 / 2 + t) ^ 2) ^ (1 / 2 : ℝ) = 3 / 2 + t := by
      rw [← Real.sqrt_eq_rpow, Real.sqrt_sq hpos.le]
    rw [Real.rpow_neg (sq_nonneg _), hsq]
  exact this

lemma hasDerivAt_p_lineJet0 :
    HasDerivAt (fun t => pOf (lineJet 0 t)) (-4 / 9) 0 := by
  have hinv : HasDerivAt (fun t : ℝ => (3 / 2 + t)⁻¹) (-4 / 9) 0 := by
    have hne : (3 / 2 + (0 : ℝ)) ≠ 0 := by norm_num
    have h := (hasDerivAt_id_const_add (3 / 2) 0).inv hne
    exact h.congr_deriv (by norm_num)
  have heq : (fun t => pOf (lineJet 0 t)) =ᶠ[𝓝 0] fun t => (3 / 2 + t)⁻¹ := by
    filter_upwards [eventually_gt_nhds (by norm_num : (-3 / 2 : ℝ) < 0)] with t ht
    exact pOf_lineJet0 ht
  exact hinv.congr_of_eventuallyEq heq

lemma p1Of_lineJet0 (t : ℝ) : p1Of (lineJet 0 t) = 0 := by
  simp [p1Of, q1Of_lineJet0]

lemma hasDerivAt_p1_lineJet0 :
    HasDerivAt (fun t => p1Of (lineJet 0 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p1Of_lineJet0)

lemma rpow_neg_three_halves_sq {t : ℝ} (ht : -3 / 2 < t) :
    ((3 / 2 + t) ^ 2) ^ (-(3 / 2 : ℝ)) = (3 / 2 + t)⁻¹ ^ 3 := by
  have hpos : 0 < 3 / 2 + t := by linarith
  have hsq : ((3 / 2 + t) ^ 2) ^ (3 / 2 : ℝ) = (3 / 2 + t) ^ 3 := by
    have hpow : ((3 / 2 + t) ^ 2) ^ (3 / 2 : ℝ)
        = ((3 / 2 + t) ^ 2) ^ (1 + 1 / 2 : ℝ) := by
      congr 1; norm_num
    rw [hpow, Real.rpow_add (sq_pos_of_pos hpos), Real.rpow_one, ← Real.sqrt_eq_rpow,
      Real.sqrt_sq hpos.le]
    ring
  rw [Real.rpow_neg (sq_nonneg _), hsq]
  field_simp [hpos.ne']

lemma p2Of_lineJet0 {t : ℝ} (ht : -3 / 2 < t) (_hr : -5 / 2 < t) :
    p2Of (lineJet 0 t) =
      -(1 / 2 : ℝ) * ((3 / 2 + t)⁻¹ ^ 3 * q2Of (lineJet 0 t)) := by
  unfold p2Of
  rw [qOf_lineJet0, q1Of_lineJet0]
  simp only [zero_pow (by norm_num : (2 : ℕ) ≠ 0), mul_zero, zero_sub]
  rw [rpow_neg_three_halves_sq ht]
  ring

lemma hasDerivAt_inv_pow3_q_line0 :
    HasDerivAt (fun t : ℝ => (3 / 2 + t)⁻¹ ^ 3) (-16 / 27) 0 := by
  have hinv : HasDerivAt (fun t : ℝ => (3 / 2 + t)⁻¹) (-4 / 9) 0 := by
    have hne : (3 / 2 + (0 : ℝ)) ≠ 0 := by norm_num
    have h := (hasDerivAt_id_const_add (3 / 2) 0).inv hne
    exact h.congr_deriv (by norm_num)
  have h := (hasDerivAt_pow3_at ((3 / 2 + (0 : ℝ))⁻¹)).comp 0 hinv
  exact h.congr_deriv (by norm_num)

lemma inv_three_halves_pow3 : (3 / 2 + (0 : ℝ))⁻¹ ^ 3 = 8 / 27 := by norm_num

lemma p2'_lineJet0 :
    (-(1 / 2 : ℝ)) *
        ((-16 / 27 : ℝ) * (133 / 25 - 4 * Real.sqrt 10 / 5)
          + (8 / 27) * (258 / 125))
      = (4288 - 800 * Real.sqrt 10) / 3375 := by
  field_simp
  ring

lemma hasDerivAt_p2_lineJet0 :
    HasDerivAt (fun t => p2Of (lineJet 0 t))
      ((4288 - 800 * Real.sqrt 10) / 3375) 0 := by
  have hA := hasDerivAt_inv_pow3_q_line0
  have hq2 := hasDerivAt_q2_lineJet0
  have hmul := hA.mul hq2
  have h := HasDerivAt.const_mul (-(1 / 2 : ℝ)) hmul
  have hd :
      (-(1 / 2 : ℝ)) *
          ((-16 / 27) * q2Of (lineJet 0 0)
            + (3 / 2 + (0 : ℝ))⁻¹ ^ 3 * (258 / 125))
        = (4288 - 800 * Real.sqrt 10) / 3375 := by
    have hq : q2Of (lineJet 0 0) = q2Of sStar := by rw [lineJet_zero]
    rw [hq, q2Of_sStar, inv_three_halves_pow3]
    exact p2'_lineJet0
  have h' := h.congr_deriv hd
  have heq : (fun t => p2Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        -(1 / 2 : ℝ) * ((3 / 2 + t)⁻¹ ^ 3 * q2Of (lineJet 0 t)) := by
    filter_upwards [eventually_gt_nhds (by norm_num : (-3 / 2 : ℝ) < 0),
      eventually_lineJet0_pos] with t ht hr
    exact p2Of_lineJet0 ht hr
  exact h'.congr_of_eventuallyEq heq

lemma p3Of_lineJet0 {t : ℝ} (hr : -5 / 2 < t) : p3Of (lineJet 0 t) = 0 := by
  simp [p3Of, q1Of_lineJet0, q3Of_lineJet0 hr]

lemma hasDerivAt_p3_lineJet0 :
    HasDerivAt (fun t => p3Of (lineJet 0 t)) 0 0 := by
  have heq : (fun t => p3Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)] fun _ => (0 : ℝ) := by
    filter_upwards [eventually_lineJet0_pos] with t hr
    exact p3Of_lineJet0 hr
  exact (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq heq

lemma u2Of_lineJet0 {t : ℝ} (_ht : -3 / 2 < t) (_hr : -5 / 2 < t) :
    u2Of (lineJet 0 t) =
      pOf (lineJet 0 t) • n2Of (lineJet 0 t)
        + p2Of (lineJet 0 t) • n0Of (lineJet 0 t) := by
  unfold u2Of
  rw [p1Of_lineJet0]
  simp

lemma two_jetA_eval :
    (2 / 3 : ℝ) * (16 / 125) + (-4 / 9) * (21 / 25)
      + (-532 / 675 + 16 * Real.sqrt 10 / 135)
      + ((4288 - 800 * Real.sqrt 10) / 3375) * (3 / 2)
      = 2 * jetA := by
  unfold jetA
  field_simp
  ring

lemma six_jetF_eval :
    (-4 / 9 : ℝ) * (1 - 8 * Real.sqrt 10 / 625)
      + (2 / 3) * (48 * Real.sqrt 10 / 3125)
      + 3 * (((4288 - 800 * Real.sqrt 10) / 3375) * (Real.sqrt 10 / 5 - 1))
      = 6 * jetF := by
  unfold jetF
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma hasDerivAt_u2_lineJet0 :
    HasDerivAt (fun t => u2Of (lineJet 0 t)) (ofCoords (2 * jetA) 0 0) 0 := by
  have hp := hasDerivAt_p_lineJet0
  have hn2 := hasDerivAt_n2_lineJet0
  have hp2 := hasDerivAt_p2_lineJet0
  have hn0 := hasDerivAt_n0_lineJet0
  have h1 := hp.smul hn2
  have h2 := hp2.smul hn0
  have hadd := h1.add h2
  have heq : (fun t => u2Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 0 t) • n2Of (lineJet 0 t)
        + p2Of (lineJet 0 t) • n0Of (lineJet 0 t) := by
    filter_upwards [eventually_gt_nhds (by norm_num : (-3 / 2 : ℝ) < 0),
      eventually_lineJet0_pos] with t ht hr
    exact u2Of_lineJet0 ht hr
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 0 0) • ofCoords (16 / 125) 0 0
          + (-4 / 9 : ℝ) • n2Of (lineJet 0 0)
          + (p2Of (lineJet 0 0) • ofCoords 1 0 0
            + ((4288 - 800 * Real.sqrt 10) / 3375) • n0Of (lineJet 0 0))
        = ofCoords (2 * jetA) 0 0 := by
    rw [lineJet_zero, n2Of_sStar, n0Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using two_jetA_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact h'.congr_deriv hv

lemma u3Of_lineJet0 {t : ℝ} (_ht : -3 / 2 < t) (hr : -5 / 2 < t) :
    u3Of (lineJet 0 t) =
      pOf (lineJet 0 t) • n3Of (lineJet 0 t)
        + (3 : ℝ) • (p2Of (lineJet 0 t) • n1Of (lineJet 0 t)) := by
  unfold u3Of
  rw [p1Of_lineJet0, p3Of_lineJet0 hr]
  simp

lemma hasDerivAt_u3_lineJet0 :
    HasDerivAt (fun t => u3Of (lineJet 0 t)) (ofCoords 0 (6 * jetF) 0) 0 := by
  have hp := hasDerivAt_p_lineJet0
  have hn3 := hasDerivAt_n3_lineJet0
  have hp2 := hasDerivAt_p2_lineJet0
  have hn1 := hasDerivAt_n1_lineJet0
  have h1 := hp.smul hn3
  have hmid := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hmid
  have hadd := h1.add h3
  have heq : (fun t => u3Of (lineJet 0 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 0 t) • n3Of (lineJet 0 t)
        + (3 : ℝ) • (p2Of (lineJet 0 t) • n1Of (lineJet 0 t)) := by
    filter_upwards [eventually_gt_nhds (by norm_num : (-3 / 2 : ℝ) < 0),
      eventually_lineJet0_pos] with t ht hr
    exact u3Of_lineJet0 ht hr
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 0 0) • ofCoords 0 (48 * Real.sqrt 10 / 3125) 0
          + (-4 / 9 : ℝ) • n3Of (lineJet 0 0)
          + (3 : ℝ) •
            (p2Of (lineJet 0 0) • (0 : Vec)
              + ((4288 - 800 * Real.sqrt 10) / 3375) • n1Of (lineJet 0 0))
        = ofCoords 0 (6 * jetF) 0 := by
    rw [lineJet_zero, n3Of_sStar, n1Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using six_jetF_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact h'.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet0 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 0 t) i) (jetMatrix i 0) 0 := by
  have hu2 := hasDerivAt_u2_lineJet0
  have hu3 := hasDerivAt_u3_lineJet0
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet0 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 0 t) i) 0 = jetMatrix i 0 :=
  (hasDerivAt_losTaylor23_lineJet0 i).deriv

lemma rpow_neg_five_halves_nine_four : (9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) = 32 / 243 := by
  have hpos : (0 : ℝ) < 9 / 4 := by norm_num
  rw [Real.rpow_neg hpos.le]
  have h52 : (9 / 4 : ℝ) ^ (5 / 2 : ℝ) = (9 / 4) ^ 2 * Real.sqrt (9 / 4) := by
    have : (5 / 2 : ℝ) = 2 + 1 / 2 := by norm_num
    rw [this, Real.rpow_add hpos, Real.rpow_two, Real.sqrt_eq_rpow]
  rw [h52, sqrt_nine_div_four]
  field_simp
  norm_num

lemma rpow_neg_seven_halves_nine_four : (9 / 4 : ℝ) ^ (-(7 / 2 : ℝ)) = 128 / 2187 := by
  have hpos : (0 : ℝ) < 9 / 4 := by norm_num
  rw [Real.rpow_neg hpos.le]
  have : (7 / 2 : ℝ) = (3 : ℝ) + 1 / 2 := by norm_num
  rw [this, Real.rpow_add hpos, ← Real.sqrt_eq_rpow, sqrt_nine_div_four]
  norm_num

lemma hasDerivAt_pow2_id :
    HasDerivAt (fun t : ℝ => t ^ 2) 0 0 :=
  (hasDerivAt_pow2_at 0).congr_deriv (by norm_num)

lemma hasDerivAt_five_halves_sq_add :
    HasDerivAt (fun t : ℝ => (5 / 2) ^ 2 + t ^ 2) 0 0 := by
  have h := (hasDerivAt_const 0 ((5 / 2 : ℝ) ^ 2)).add hasDerivAt_pow2_id
  exact h.congr_deriv (by norm_num)

lemma hasDerivAt_nine_four_sq_add :
    HasDerivAt (fun t : ℝ => (9 / 4 : ℝ) + t ^ 2) 0 0 := by
  have h := (hasDerivAt_const 0 (9 / 4 : ℝ)).add hasDerivAt_pow2_id
  exact h.congr_deriv (by norm_num)

lemma sqrt_25_4 : Real.sqrt ((5 / 2 : ℝ) ^ 2) = 5 / 2 := by
  exact Real.sqrt_sq (by norm_num : (0 : ℝ) ≤ 5 / 2)

lemma hasDerivAt_sqrt_five_halves_sq :
    HasDerivAt (fun t : ℝ => Real.sqrt ((5 / 2) ^ 2 + t ^ 2)) 0 0 := by
  have hpos : (0 : ℝ) < (5 / 2) ^ 2 + (0 : ℝ) ^ 2 := by norm_num
  have hs : HasDerivAt Real.sqrt (1 / (2 * Real.sqrt ((5 / 2) ^ 2 + 0 ^ 2)))
      ((5 / 2) ^ 2 + 0 ^ 2) :=
    Real.hasDerivAt_sqrt hpos.ne'
  have h := hs.comp 0 hasDerivAt_five_halves_sq_add
  refine h.congr_deriv ?_
  simp [sqrt_25_4]

/-! Axis 2: z-perturbation of position. -/

lemma statePos_lineJet2 (t : ℝ) :
    statePos (lineJet 2 t) = ofCoords (5 / 2) 0 t := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet2 (t : ℝ) :
    stateVel (lineJet 2 t) = ofCoords 0 (Real.sqrt 10 / 5) 0 := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet2 (t : ℝ) :
    rnorm (lineJet 2 t) = Real.sqrt ((5 / 2) ^ 2 + t ^ 2) := by
  rw [rnorm, statePos_lineJet2, ofCoords_norm]
  simp

lemma hasDerivAt_rnorm_lineJet2 :
    HasDerivAt (fun t => rnorm (lineJet 2 t)) 0 0 :=
  hasDerivAt_sqrt_five_halves_sq.congr_of_eventuallyEq
    (Eventually.of_forall rnorm_lineJet2)

lemma vecDot_lineJet2 (t : ℝ) :
    vecDot (statePos (lineJet 2 t)) (stateVel (lineJet 2 t)) = 0 := by
  simp [vecDot, statePos_lineJet2, stateVel_lineJet2, ofLp_ofCoords, Fin.sum_univ_three]

lemma n0Of_lineJet2 (t : ℝ) :
    n0Of (lineJet 2 t) = ofCoords (3 / 2) 0 t := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet2, eJet0, ofCoords, PiLp.sub_apply] <;> ring

lemma n1Of_lineJet2 (t : ℝ) :
    n1Of (lineJet 2 t) = ofCoords 0 (Real.sqrt 10 / 5 - 1) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet2, eJet1, ofCoords, PiLp.sub_apply]

lemma rnorm_lineJet2_ne {t : ℝ} : rnorm (lineJet 2 t) ≠ 0 := by
  rw [rnorm_lineJet2]
  exact Real.sqrt_ne_zero'.2 (by nlinarith [sq_nonneg t])

lemma accelOf_lineJet2 (t : ℝ) :
    accelOf (lineJet 2 t) =
      -((rnorm (lineJet 2 t)) ^ 3)⁻¹ • ofCoords (5 / 2) 0 t := by
  unfold accelOf
  rw [statePos_lineJet2]
  simp [rnorm, statePos_lineJet2]

lemma hasDerivAt_rnorm_inv_lineJet2 :
    HasDerivAt (fun t => (rnorm (lineJet 2 t))⁻¹) 0 0 := by
  have hne : rnorm (lineJet 2 0) ≠ 0 := rnorm_lineJet2_ne
  have h := hasDerivAt_rnorm_lineJet2.inv hne
  exact h.congr_deriv (by simp [rnorm_lineJet2, sqrt_25_4])

lemma hasDerivAt_rnorm_inv_pow3_lineJet2 :
    HasDerivAt (fun t => (rnorm (lineJet 2 t))⁻¹ ^ 3) 0 0 := by
  have h := (hasDerivAt_pow3_at ((rnorm (lineJet 2 0))⁻¹)).comp 0
    hasDerivAt_rnorm_inv_lineJet2
  refine h.congr_deriv ?_
  simp [rnorm_lineJet2, sqrt_25_4]

lemma hasDerivAt_n0_lineJet2 :
    HasDerivAt (fun t => n0Of (lineJet 2 t)) (ofCoords 0 0 1) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (3 / 2 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_id 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet2)

lemma hasDerivAt_n1_lineJet2 :
    HasDerivAt (fun t => n1Of (lineJet 2 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5 - 1)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n1Of (lineJet 2 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet2)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_pos_lineJet2 :
    HasDerivAt (fun t => statePos (lineJet 2 t)) (ofCoords 0 0 1) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (5 / 2 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_id 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall statePos_lineJet2)

lemma hasDerivAt_accel_lineJet2 :
    HasDerivAt (fun t => accelOf (lineJet 2 t)) (ofCoords 0 0 (-8 / 125)) 0 := by
  have hc := hasDerivAt_rnorm_inv_pow3_lineJet2
  have hf := hasDerivAt_pos_lineJet2
  have hneg : HasDerivAt (fun t => -((rnorm (lineJet 2 t))⁻¹ ^ 3)) 0 0 :=
    hc.neg.congr_deriv (by simp)
  -- accel = (- r^{-3}) • pos
  have h := hneg.smul hf
  have heq : (fun t => accelOf (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => (-((rnorm (lineJet 2 t))⁻¹ ^ 3)) • statePos (lineJet 2 t) :=
    Eventually.of_forall fun t => by
      simp [accelOf, rnorm, neg_smul]
  have h' := h.congr_of_eventuallyEq heq
  have hv :
      (-((rnorm (lineJet 2 0))⁻¹ ^ 3)) • ofCoords 0 0 1
          + (0 : ℝ) • statePos (lineJet 2 0)
        = ofCoords 0 0 (-8 / 125) := by
    have hr0 : rnorm (lineJet 2 0) = 5 / 2 := by
      rw [rnorm_lineJet2]
      simp [sqrt_25_4]
    rw [hr0]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i <;> simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul] <;> norm_num
  exact h'.congr_deriv hv

lemma hasDerivAt_n2_lineJet2 :
    HasDerivAt (fun t => n2Of (lineJet 2 t)) (ofCoords 0 0 (-8 / 125)) 0 := by
  have h := hasDerivAt_accel_lineJet2.sub (hasDerivAt_const 0 eJet2)
  refine h.congr_deriv ?_
  simp [eJet2, ofCoords_zero]

lemma jerkOf_lineJet2 (t : ℝ) :
    jerkOf (lineJet 2 t) =
      -((rnorm (lineJet 2 t)) ^ 3)⁻¹ • stateVel (lineJet 2 t) := by
  unfold jerkOf
  rw [vecDot_lineJet2]
  simp [rnorm]

lemma hasDerivAt_vel_lineJet2 :
    HasDerivAt (fun t => stateVel (lineJet 2 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => stateVel (lineJet 2 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall stateVel_lineJet2)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_jerk_lineJet2 :
    HasDerivAt (fun t => jerkOf (lineJet 2 t)) (0 : Vec) 0 := by
  have hneg : HasDerivAt (fun t => -((rnorm (lineJet 2 t))⁻¹ ^ 3)) 0 0 :=
    hasDerivAt_rnorm_inv_pow3_lineJet2.neg.congr_deriv (by simp)
  have hv := hasDerivAt_vel_lineJet2
  have h := hneg.smul hv
  have heq : (fun t => jerkOf (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => (-((rnorm (lineJet 2 t))⁻¹ ^ 3)) • stateVel (lineJet 2 t) :=
    Eventually.of_forall fun t => by
      change jerkOf (lineJet 2 t) =
        (-((rnorm (lineJet 2 t))⁻¹ ^ 3)) • stateVel (lineJet 2 t)
      rw [jerkOf_lineJet2]
      have : ((rnorm (lineJet 2 t)) ^ 3)⁻¹ = (rnorm (lineJet 2 t))⁻¹ ^ 3 := by
        field_simp [rnorm_lineJet2_ne]
      rw [this, neg_smul]
  have h' := h.congr_of_eventuallyEq heq
  have hv0 :
      (-((rnorm (lineJet 2 0))⁻¹ ^ 3)) • (0 : Vec)
          + (0 : ℝ) • stateVel (lineJet 2 0) = (0 : Vec) := by
    simp
  exact h'.congr_deriv hv0

lemma hasDerivAt_n3_lineJet2 :
    HasDerivAt (fun t => n3Of (lineJet 2 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_jerk_lineJet2.sub (hasDerivAt_const 0 eJet3)
  refine h.congr_deriv ?_
  simp

lemma qOf_lineJet2 (t : ℝ) : qOf (lineJet 2 t) = (9 / 4 : ℝ) + t ^ 2 := by
  simp [qOf, vecDot, n0Of_lineJet2, ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma hasDerivAt_q_lineJet2 :
    HasDerivAt (fun t => qOf (lineJet 2 t)) 0 0 :=
  hasDerivAt_nine_four_sq_add.congr_of_eventuallyEq
    (Eventually.of_forall qOf_lineJet2)

lemma q1Of_lineJet2 (t : ℝ) : q1Of (lineJet 2 t) = 0 := by
  simp [q1Of, vecDot, n0Of_lineJet2, n1Of_lineJet2, ofLp_ofCoords, Fin.sum_univ_three]

lemma hasDerivAt_q1_lineJet2 :
    HasDerivAt (fun t => q1Of (lineJet 2 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q1Of_lineJet2)

lemma inv_pow3_rnorm (s : Fin 6 → ℝ) :
    ((rnorm s) ^ 3)⁻¹ = (rnorm s)⁻¹ ^ 3 := by
  by_cases h : rnorm s = 0
  · simp [h]
  · field_simp [h]

lemma n2Of_lineJet2 (t : ℝ) :
    n2Of (lineJet 2 t) =
      ofCoords (1 - (5 / 2) * (rnorm (lineJet 2 t))⁻¹ ^ 3)
        0 (-t * (rnorm (lineJet 2 t))⁻¹ ^ 3) := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  rw [n2Of, accelOf_lineJet2, inv_pow3_rnorm]
  fin_cases i
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
    ring

lemma n3Of_lineJet2 (t : ℝ) :
    n3Of (lineJet 2 t) =
      ofCoords 0 (1 - (Real.sqrt 10 / 5) * (rnorm (lineJet 2 t))⁻¹ ^ 3) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  have hj : jerkOf (lineJet 2 t) =
      -((rnorm (lineJet 2 t))⁻¹ ^ 3) • stateVel (lineJet 2 t) := by
    rw [jerkOf_lineJet2, inv_pow3_rnorm]
  rw [stateVel_lineJet2] at hj
  fin_cases i
  · simp [n3Of, hj, eJet3, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
  · simp [n3Of, hj, eJet3, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  · simp [n3Of, hj, eJet3, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]

lemma q2Of_lineJet2 (t : ℝ) :
    q2Of (lineJet 2 t) =
      2 * (Real.sqrt 10 / 5 - 1) ^ 2
        + 3 * (1 - (5 / 2) * (rnorm (lineJet 2 t))⁻¹ ^ 3)
        - 2 * t ^ 2 * (rnorm (lineJet 2 t))⁻¹ ^ 3 := by
  simp [q2Of, vecDot, n1Of_lineJet2, n0Of_lineJet2, n2Of_lineJet2, ofLp_ofCoords,
    Fin.sum_univ_three]
  ring

lemma hasDerivAt_t_sq_rinv3_lineJet2 :
    HasDerivAt (fun t => t ^ 2 * (rnorm (lineJet 2 t))⁻¹ ^ 3) 0 0 := by
  have h := hasDerivAt_pow2_id.mul hasDerivAt_rnorm_inv_pow3_lineJet2
  exact h.congr_deriv (by simp [rnorm_lineJet2, sqrt_25_4])

lemma hasDerivAt_q2_lineJet2 :
    HasDerivAt (fun t => q2Of (lineJet 2 t)) 0 0 := by
  have hc := hasDerivAt_const (0 : ℝ) (2 * (Real.sqrt 10 / 5 - 1) ^ 2)
  have hr := hasDerivAt_rnorm_inv_pow3_lineJet2
  have hmid : HasDerivAt
      (fun t : ℝ => 1 - (5 / 2) * (rnorm (lineJet 2 t))⁻¹ ^ 3) 0 0 := by
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub
      ((hasDerivAt_const 0 (5 / 2 : ℝ)).mul hr)
    exact h.congr_deriv (by simp)
  have h3 := HasDerivAt.const_mul (3 : ℝ) hmid
  have ht := hasDerivAt_t_sq_rinv3_lineJet2
  have h2t := HasDerivAt.const_mul (2 : ℝ) ht
  have hadd := (hc.add h3).sub h2t
  have heq : (fun t => q2Of (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        2 * (Real.sqrt 10 / 5 - 1) ^ 2
          + 3 * (1 - (5 / 2) * (rnorm (lineJet 2 t))⁻¹ ^ 3)
          - 2 * (t ^ 2 * (rnorm (lineJet 2 t))⁻¹ ^ 3) :=
    Eventually.of_forall fun t => by simpa [mul_assoc] using q2Of_lineJet2 t
  exact hadd.congr_of_eventuallyEq heq |>.congr_deriv (by ring)

lemma q3Of_lineJet2 (t : ℝ) : q3Of (lineJet 2 t) = 0 := by
  simp [q3Of, vecDot, n1Of_lineJet2, n2Of_lineJet2, n0Of_lineJet2, n3Of_lineJet2,
    ofLp_ofCoords, Fin.sum_univ_three]

lemma hasDerivAt_q3_lineJet2 :
    HasDerivAt (fun t => q3Of (lineJet 2 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q3Of_lineJet2)

lemma pOf_lineJet2 (t : ℝ) :
    pOf (lineJet 2 t) = ((9 / 4 : ℝ) + t ^ 2) ^ (-(1 / 2 : ℝ)) := by
  unfold pOf
  rw [qOf_lineJet2]

lemma hasDerivAt_rpow_neg_half_at_nine_four :
    HasDerivAt (fun x : ℝ => x ^ (-(1 / 2 : ℝ))) (-(4 / 27 : ℝ)) (9 / 4) := by
  have hx : (0 : ℝ) < 9 / 4 := by norm_num
  have h := Real.hasDerivAt_rpow_const (x := (9 / 4 : ℝ)) (p := -(1 / 2 : ℝ))
    (Or.inl hx.ne')
  refine h.congr_deriv ?_
  have : -(1 / 2 : ℝ) - 1 = -(3 / 2) := by norm_num
  rw [this, rpow_neg_three_halves_nine_four]
  field_simp
  ring

lemma hasDerivAt_p_lineJet2 :
    HasDerivAt (fun t => pOf (lineJet 2 t)) 0 0 := by
  have hpt : (9 / 4 : ℝ) + (0 : ℝ) ^ 2 = 9 / 4 := by norm_num
  have hr : HasDerivAt (fun x : ℝ => x ^ (-(1 / 2 : ℝ))) (-(4 / 27 : ℝ))
      ((9 / 4 : ℝ) + 0 ^ 2) := by
    rw [hpt]; exact hasDerivAt_rpow_neg_half_at_nine_four
  have h := hr.comp 0 hasDerivAt_nine_four_sq_add
  have h0 : HasDerivAt ((fun x : ℝ => x ^ (-(1 / 2 : ℝ))) ∘ fun t : ℝ => 9 / 4 + t ^ 2)
      0 0 := h.congr_deriv (mul_zero _)
  refine h0.congr_of_eventuallyEq ?_
  exact Eventually.of_forall pOf_lineJet2

lemma p1Of_lineJet2 (t : ℝ) : p1Of (lineJet 2 t) = 0 := by
  simp [p1Of, q1Of_lineJet2]

lemma hasDerivAt_p1_lineJet2 :
    HasDerivAt (fun t => p1Of (lineJet 2 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p1Of_lineJet2)

lemma hasDerivAt_rpow_neg_three_halves_at_nine_four :
    HasDerivAt (fun x : ℝ => x ^ (-(3 / 2 : ℝ))) (-(16 / 81 : ℝ)) (9 / 4) := by
  have hx : (0 : ℝ) < 9 / 4 := by norm_num
  have h := Real.hasDerivAt_rpow_const (x := (9 / 4 : ℝ)) (p := -(3 / 2 : ℝ))
    (Or.inl hx.ne')
  refine h.congr_deriv ?_
  have : -(3 / 2 : ℝ) - 1 = -(5 / 2) := by norm_num
  rw [this, rpow_neg_five_halves_nine_four]
  field_simp
  ring

lemma hasDerivAt_q_rpow_neg_three_halves_lineJet2 :
    HasDerivAt (fun t => (qOf (lineJet 2 t)) ^ (-(3 / 2 : ℝ))) 0 0 := by
  have hq : qOf (lineJet 2 0) = 9 / 4 := by
    rw [qOf_lineJet2]; simp
  have hr : HasDerivAt (fun x : ℝ => x ^ (-(3 / 2 : ℝ))) (-(16 / 81 : ℝ))
      (qOf (lineJet 2 0)) := by
    rw [hq]; exact hasDerivAt_rpow_neg_three_halves_at_nine_four
  have h := hr.comp 0 hasDerivAt_q_lineJet2
  exact h.congr_deriv (by simp)

lemma p2Of_lineJet2 (t : ℝ) :
    p2Of (lineJet 2 t) =
      -(1 / 2 : ℝ) * ((qOf (lineJet 2 t)) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 2 t)) := by
  unfold p2Of
  rw [q1Of_lineJet2]
  simp only [zero_pow (by norm_num : (2 : ℕ) ≠ 0), mul_zero, zero_sub]
  ring

lemma hasDerivAt_p2_lineJet2 :
    HasDerivAt (fun t => p2Of (lineJet 2 t)) 0 0 := by
  have hA := hasDerivAt_q_rpow_neg_three_halves_lineJet2
  have hq2 := hasDerivAt_q2_lineJet2
  have hmul := hA.mul hq2
  have h := HasDerivAt.const_mul (-(1 / 2 : ℝ)) hmul
  have hd :
      (-(1 / 2 : ℝ)) *
          (0 * q2Of (lineJet 2 0)
            + (qOf (lineJet 2 0)) ^ (-(3 / 2 : ℝ)) * 0) = 0 := by
    ring
  have h' := h.congr_deriv hd
  have heq : (fun t => p2Of (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        -(1 / 2 : ℝ) * ((qOf (lineJet 2 t)) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 2 t)) :=
    Eventually.of_forall p2Of_lineJet2
  exact h'.congr_of_eventuallyEq heq

lemma p3Of_lineJet2 (t : ℝ) : p3Of (lineJet 2 t) = 0 := by
  simp [p3Of, q1Of_lineJet2, q3Of_lineJet2]

lemma hasDerivAt_p3_lineJet2 :
    HasDerivAt (fun t => p3Of (lineJet 2 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p3Of_lineJet2)

lemma u2Of_lineJet2 (t : ℝ) :
    u2Of (lineJet 2 t) =
      pOf (lineJet 2 t) • n2Of (lineJet 2 t)
        + p2Of (lineJet 2 t) • n0Of (lineJet 2 t) := by
  unfold u2Of
  rw [p1Of_lineJet2]
  simp

lemma two_jetD_eval :
    (2 / 3 : ℝ) * (-8 / 125)
      + (-532 / 675 + 16 * Real.sqrt 10 / 135)
      = 2 * jetD := by
  unfold jetD
  field_simp
  ring

lemma hasDerivAt_u2_lineJet2 :
    HasDerivAt (fun t => u2Of (lineJet 2 t)) (ofCoords 0 0 (2 * jetD)) 0 := by
  have hp := hasDerivAt_p_lineJet2
  have hn2 := hasDerivAt_n2_lineJet2
  have hp2 := hasDerivAt_p2_lineJet2
  have hn0 := hasDerivAt_n0_lineJet2
  have h1 := hp.smul hn2
  have h2 := hp2.smul hn0
  have hadd := h1.add h2
  have heq : (fun t => u2Of (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 2 t) • n2Of (lineJet 2 t)
        + p2Of (lineJet 2 t) • n0Of (lineJet 2 t) :=
    Eventually.of_forall u2Of_lineJet2
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 2 0) • ofCoords 0 0 (-8 / 125)
          + (0 : ℝ) • n2Of (lineJet 2 0)
          + (p2Of (lineJet 2 0) • ofCoords 0 0 1
            + (0 : ℝ) • n0Of (lineJet 2 0))
        = ofCoords 0 0 (2 * jetD) := by
    rw [lineJet_zero, n2Of_sStar, n0Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using two_jetD_eval
  exact h'.congr_deriv hv

lemma u3Of_lineJet2 (t : ℝ) :
    u3Of (lineJet 2 t) =
      pOf (lineJet 2 t) • n3Of (lineJet 2 t)
        + (3 : ℝ) • (p2Of (lineJet 2 t) • n1Of (lineJet 2 t)) := by
  unfold u3Of
  rw [p1Of_lineJet2, p3Of_lineJet2]
  simp

lemma hasDerivAt_u3_lineJet2 :
    HasDerivAt (fun t => u3Of (lineJet 2 t)) (0 : Vec) 0 := by
  have hp := hasDerivAt_p_lineJet2
  have hn3 := hasDerivAt_n3_lineJet2
  have hp2 := hasDerivAt_p2_lineJet2
  have hn1 := hasDerivAt_n1_lineJet2
  have h1 := hp.smul hn3
  have hmid := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hmid
  have hadd := h1.add h3
  have heq : (fun t => u3Of (lineJet 2 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 2 t) • n3Of (lineJet 2 t)
        + (3 : ℝ) • (p2Of (lineJet 2 t) • n1Of (lineJet 2 t)) :=
    Eventually.of_forall u3Of_lineJet2
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 2 0) • (0 : Vec)
          + (0 : ℝ) • n3Of (lineJet 2 0)
          + (3 : ℝ) •
            (p2Of (lineJet 2 0) • (0 : Vec) + (0 : ℝ) • n1Of (lineJet 2 0))
        = (0 : Vec) := by
    simp
  exact h'.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet2 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 2 t) i) (jetMatrix i 2) 0 := by
  have hu2 := hasDerivAt_u2_lineJet2
  have hu3 := hasDerivAt_u3_lineJet2
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet2 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 2 t) i) 0 = jetMatrix i 2 :=
  (hasDerivAt_losTaylor23_lineJet2 i).deriv

/-! Axis 5: vz-perturbation. Position is fixed at `sStar`; many q-jets vanish. -/

lemma statePos_lineJet5 (t : ℝ) :
    statePos (lineJet 5 t) = ofCoords (5 / 2) 0 0 := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet5 (t : ℝ) :
    stateVel (lineJet 5 t) = ofCoords 0 (Real.sqrt 10 / 5) t := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet5 (t : ℝ) : rnorm (lineJet 5 t) = 5 / 2 := by
  rw [rnorm, statePos_lineJet5, ofCoords_norm]
  simp [sqrt_25_4]

lemma vecDot_lineJet5 (t : ℝ) :
    vecDot (statePos (lineJet 5 t)) (stateVel (lineJet 5 t)) = 0 := by
  simp [vecDot, statePos_lineJet5, stateVel_lineJet5, ofLp_ofCoords, Fin.sum_univ_three]

lemma n0Of_lineJet5 (t : ℝ) :
    n0Of (lineJet 5 t) = ofCoords (3 / 2) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet5, eJet0, ofCoords, PiLp.sub_apply] <;> ring

lemma n1Of_lineJet5 (t : ℝ) :
    n1Of (lineJet 5 t) = ofCoords 0 (Real.sqrt 10 / 5 - 1) t := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet5, eJet1, ofCoords, PiLp.sub_apply]

lemma accelOf_lineJet5 (t : ℝ) :
    accelOf (lineJet 5 t) = ofCoords (-4 / 25) 0 0 := by
  unfold accelOf
  rw [statePos_lineJet5]
  have hr : ‖ofCoords (5 / 2 : ℝ) 0 0‖ = 5 / 2 := by
    rw [ofCoords_norm]; simp [sqrt_25_4]
  rw [hr]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, smul_eq_mul] <;> norm_num

lemma n2Of_lineJet5 (t : ℝ) :
    n2Of (lineJet 5 t) = ofCoords (21 / 25) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n2Of, accelOf_lineJet5, eJet2, ofCoords, PiLp.sub_apply] <;> norm_num

lemma jerkOf_lineJet5 (t : ℝ) :
    jerkOf (lineJet 5 t) =
      ofCoords 0 (-8 * Real.sqrt 10 / 625) (-8 * t / 125) := by
  unfold jerkOf
  rw [show ‖statePos (lineJet 5 t)‖ = (5 / 2 : ℝ) from rnorm_lineJet5 t,
    vecDot_lineJet5, stateVel_lineJet5, statePos_lineJet5]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  · field_simp; ring
  · field_simp; ring

lemma n3Of_lineJet5 (t : ℝ) :
    n3Of (lineJet 5 t) =
      ofCoords 0 (1 - 8 * Real.sqrt 10 / 625) (-8 * t / 125) := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n3Of, jerkOf_lineJet5, eJet3, ofCoords, PiLp.sub_apply] <;> ring

lemma qOf_lineJet5 (t : ℝ) : qOf (lineJet 5 t) = 9 / 4 := by
  simp [qOf, vecDot, n0Of_lineJet5, ofLp_ofCoords, Fin.sum_univ_three]
  norm_num

lemma q1Of_lineJet5 (t : ℝ) : q1Of (lineJet 5 t) = 0 := by
  simp [q1Of, vecDot, n0Of_lineJet5, n1Of_lineJet5, ofLp_ofCoords, Fin.sum_univ_three]

lemma q2Of_lineJet5 (t : ℝ) :
    q2Of (lineJet 5 t) = 2 * t ^ 2 + (133 / 25 - 4 * Real.sqrt 10 / 5) := by
  simp [q2Of, vecDot, n1Of_lineJet5, n0Of_lineJet5, n2Of_lineJet5, ofLp_ofCoords,
    Fin.sum_univ_three]
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma q3Of_lineJet5 (t : ℝ) : q3Of (lineJet 5 t) = 0 := by
  simp [q3Of, vecDot, n1Of_lineJet5, n2Of_lineJet5, n0Of_lineJet5, n3Of_lineJet5,
    ofLp_ofCoords, Fin.sum_univ_three]

lemma pOf_lineJet5 (t : ℝ) : pOf (lineJet 5 t) = 2 / 3 := by
  unfold pOf
  rw [qOf_lineJet5, rpow_neg_half_nine_four]

lemma p1Of_lineJet5 (t : ℝ) : p1Of (lineJet 5 t) = 0 := by
  simp [p1Of, q1Of_lineJet5]

lemma p2Of_lineJet5 (t : ℝ) :
    p2Of (lineJet 5 t) =
      -(1 / 2 : ℝ) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 5 t)) := by
  unfold p2Of
  rw [qOf_lineJet5, q1Of_lineJet5]
  simp only [zero_pow (by norm_num : (2 : ℕ) ≠ 0), mul_zero, zero_sub]
  ring

lemma p3Of_lineJet5 (t : ℝ) : p3Of (lineJet 5 t) = 0 := by
  simp [p3Of, q1Of_lineJet5, q3Of_lineJet5]

lemma hasDerivAt_n0_lineJet5 :
    HasDerivAt (fun t => n0Of (lineJet 5 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (3 / 2 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n0Of (lineJet 5 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet5)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_n1_lineJet5 :
    HasDerivAt (fun t => n1Of (lineJet 5 t)) (ofCoords 0 0 1) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5 - 1)) (hasDerivAt_id 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet5)

lemma hasDerivAt_n2_lineJet5 :
    HasDerivAt (fun t => n2Of (lineJet 5 t)) (0 : Vec) 0 :=
  (hasDerivAt_const (0 : ℝ) (ofCoords (21 / 25) 0 0)).congr_of_eventuallyEq
    (Eventually.of_forall n2Of_lineJet5) |>.congr_deriv (by
      apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
      ext i; fin_cases i <;> simp [ofCoords])

lemma hasDerivAt_n3_lineJet5 :
    HasDerivAt (fun t => n3Of (lineJet 5 t)) (ofCoords 0 0 (-8 / 125)) 0 := by
  have hz0 : HasDerivAt (fun t : ℝ => (-8 / 125 : ℝ) * t) (-8 / 125) 0 :=
    ((hasDerivAt_id (0 : ℝ)).const_mul (-8 / 125 : ℝ)).congr_deriv (by simp)
  have hz : HasDerivAt (fun t : ℝ => -8 * t / 125) (-8 / 125) 0 :=
    hz0.congr_of_eventuallyEq (Eventually.of_forall fun t => by field_simp)
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (1 - 8 * Real.sqrt 10 / 625)) hz
  exact h.congr_of_eventuallyEq (Eventually.of_forall n3Of_lineJet5)

lemma hasDerivAt_q_lineJet5 :
    HasDerivAt (fun t => qOf (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (9 / 4 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall qOf_lineJet5)

lemma hasDerivAt_q1_lineJet5 :
    HasDerivAt (fun t => q1Of (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q1Of_lineJet5)

lemma hasDerivAt_q2_lineJet5 :
    HasDerivAt (fun t => q2Of (lineJet 5 t)) 0 0 := by
  have h2 : HasDerivAt (fun t : ℝ => 2 * t ^ 2) 0 0 :=
    (HasDerivAt.const_mul (2 : ℝ) hasDerivAt_pow2_id).congr_deriv (by simp)
  have h : HasDerivAt
      ((fun _ : ℝ => 133 / 25 - 4 * Real.sqrt 10 / 5) + fun t => 2 * t ^ 2) 0 0 :=
    (hasDerivAt_const 0 (133 / 25 - 4 * Real.sqrt 10 / 5)).add h2 |>.congr_deriv (by ring)
  exact h.congr_of_eventuallyEq (Eventually.of_forall fun t => by
    simpa [add_comm] using q2Of_lineJet5 t)

lemma hasDerivAt_q3_lineJet5 :
    HasDerivAt (fun t => q3Of (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q3Of_lineJet5)

lemma hasDerivAt_p_lineJet5 :
    HasDerivAt (fun t => pOf (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (2 / 3 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall pOf_lineJet5)

lemma hasDerivAt_p1_lineJet5 :
    HasDerivAt (fun t => p1Of (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p1Of_lineJet5)

lemma hasDerivAt_p2_lineJet5 :
    HasDerivAt (fun t => p2Of (lineJet 5 t)) 0 0 := by
  have hq2 := hasDerivAt_q2_lineJet5
  have hA := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)))
  have hmul := hA.mul hq2
  have h := HasDerivAt.const_mul (-(1 / 2 : ℝ)) hmul
  have hd :
      (-(1 / 2 : ℝ)) *
          (0 * q2Of (lineJet 5 0)
            + (9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * 0) = 0 := by
    ring
  have h' := h.congr_deriv hd
  exact h'.congr_of_eventuallyEq (Eventually.of_forall p2Of_lineJet5)

lemma hasDerivAt_p3_lineJet5 :
    HasDerivAt (fun t => p3Of (lineJet 5 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p3Of_lineJet5)

lemma u2Of_lineJet5 (t : ℝ) :
    u2Of (lineJet 5 t) =
      pOf (lineJet 5 t) • n2Of (lineJet 5 t)
        + p2Of (lineJet 5 t) • n0Of (lineJet 5 t) := by
  unfold u2Of
  rw [p1Of_lineJet5]
  simp

lemma hasDerivAt_u2_lineJet5 :
    HasDerivAt (fun t => u2Of (lineJet 5 t)) (0 : Vec) 0 := by
  have hp := hasDerivAt_p_lineJet5
  have hn2 := hasDerivAt_n2_lineJet5
  have hp2 := hasDerivAt_p2_lineJet5
  have hn0 := hasDerivAt_n0_lineJet5
  have h1 := hp.smul hn2
  have h2 := hp2.smul hn0
  have hadd := h1.add h2
  have heq : (fun t => u2Of (lineJet 5 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 5 t) • n2Of (lineJet 5 t)
        + p2Of (lineJet 5 t) • n0Of (lineJet 5 t) :=
    Eventually.of_forall u2Of_lineJet5
  have h' := hadd.congr_of_eventuallyEq heq
  exact h'.congr_deriv (by simp)

lemma u3Of_lineJet5 (t : ℝ) :
    u3Of (lineJet 5 t) =
      pOf (lineJet 5 t) • n3Of (lineJet 5 t)
        + (3 : ℝ) • (p2Of (lineJet 5 t) • n1Of (lineJet 5 t)) := by
  unfold u3Of
  rw [p1Of_lineJet5, p3Of_lineJet5]
  simp

lemma six_jetH_eval :
    (2 / 3 : ℝ) * (-8 / 125)
      + 3 * (-532 / 675 + 16 * Real.sqrt 10 / 135)
      = 6 * jetH := by
  unfold jetH
  field_simp
  ring

lemma hasDerivAt_u3_lineJet5 :
    HasDerivAt (fun t => u3Of (lineJet 5 t)) (ofCoords 0 0 (6 * jetH)) 0 := by
  have hp := hasDerivAt_p_lineJet5
  have hn3 := hasDerivAt_n3_lineJet5
  have hp2 := hasDerivAt_p2_lineJet5
  have hn1 := hasDerivAt_n1_lineJet5
  have h1 := hp.smul hn3
  have hmid := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hmid
  have hadd := h1.add h3
  have heq : (fun t => u3Of (lineJet 5 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 5 t) • n3Of (lineJet 5 t)
        + (3 : ℝ) • (p2Of (lineJet 5 t) • n1Of (lineJet 5 t)) :=
    Eventually.of_forall u3Of_lineJet5
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 5 0) • ofCoords 0 0 (-8 / 125)
          + (0 : ℝ) • n3Of (lineJet 5 0)
          + (3 : ℝ) •
            (p2Of (lineJet 5 0) • ofCoords 0 0 1
              + (0 : ℝ) • n1Of (lineJet 5 0))
        = ofCoords 0 0 (6 * jetH) := by
    rw [lineJet_zero, n3Of_sStar, n1Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using six_jetH_eval
  exact h'.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet5 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 5 t) i) (jetMatrix i 5) 0 := by
  have hu2 := hasDerivAt_u2_lineJet5
  have hu3 := hasDerivAt_u3_lineJet5
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet5 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 5 t) i) 0 = jetMatrix i 5 :=
  (hasDerivAt_losTaylor23_lineJet5 i).deriv

/-! Axis 4: vy-perturbation. Position is fixed; `q1 = q3 = 0`. -/

lemma statePos_lineJet4 (t : ℝ) :
    statePos (lineJet 4 t) = ofCoords (5 / 2) 0 0 := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet4 (t : ℝ) :
    stateVel (lineJet 4 t) = ofCoords 0 (Real.sqrt 10 / 5 + t) 0 := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet4 (t : ℝ) : rnorm (lineJet 4 t) = 5 / 2 := by
  rw [rnorm, statePos_lineJet4, ofCoords_norm]
  simp [sqrt_25_4]

lemma vecDot_lineJet4 (t : ℝ) :
    vecDot (statePos (lineJet 4 t)) (stateVel (lineJet 4 t)) = 0 := by
  simp [vecDot, statePos_lineJet4, stateVel_lineJet4, ofLp_ofCoords, Fin.sum_univ_three]

lemma n0Of_lineJet4 (t : ℝ) :
    n0Of (lineJet 4 t) = ofCoords (3 / 2) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet4, eJet0, ofCoords, PiLp.sub_apply] <;> ring

lemma n1Of_lineJet4 (t : ℝ) :
    n1Of (lineJet 4 t) = ofCoords 0 (Real.sqrt 10 / 5 - 1 + t) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet4, eJet1, ofCoords, PiLp.sub_apply] <;> ring

lemma accelOf_lineJet4 (t : ℝ) :
    accelOf (lineJet 4 t) = ofCoords (-4 / 25) 0 0 := by
  unfold accelOf
  rw [statePos_lineJet4]
  have hr : ‖ofCoords (5 / 2 : ℝ) 0 0‖ = 5 / 2 := by
    rw [ofCoords_norm]; simp [sqrt_25_4]
  rw [hr]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, smul_eq_mul] <;> norm_num

lemma n2Of_lineJet4 (t : ℝ) :
    n2Of (lineJet 4 t) = ofCoords (21 / 25) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n2Of, accelOf_lineJet4, eJet2, ofCoords, PiLp.sub_apply] <;> norm_num

lemma inv_five_halves_pow3 : ((5 / 2 : ℝ) ^ 3)⁻¹ = 8 / 125 := by norm_num

lemma jerkOf_lineJet4 (t : ℝ) :
    jerkOf (lineJet 4 t) =
      ofCoords 0 (-(8 / 125) * (Real.sqrt 10 / 5 + t)) 0 := by
  unfold jerkOf
  rw [show ‖statePos (lineJet 4 t)‖ = (5 / 2 : ℝ) from rnorm_lineJet4 t,
    vecDot_lineJet4, stateVel_lineJet4, statePos_lineJet4]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul]
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul, inv_five_halves_pow3]
  · simp [ofCoords, PiLp.smul_apply, smul_eq_mul]

lemma n3Of_lineJet4 (t : ℝ) :
    n3Of (lineJet 4 t) =
      ofCoords 0 (1 - (8 / 125) * (Real.sqrt 10 / 5 + t)) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n3Of, jerkOf_lineJet4, eJet3, ofCoords, PiLp.sub_apply] <;> ring

lemma qOf_lineJet4 (t : ℝ) : qOf (lineJet 4 t) = 9 / 4 := by
  simp [qOf, vecDot, n0Of_lineJet4, ofLp_ofCoords, Fin.sum_univ_three]
  norm_num

lemma q1Of_lineJet4 (t : ℝ) : q1Of (lineJet 4 t) = 0 := by
  simp [q1Of, vecDot, n0Of_lineJet4, n1Of_lineJet4, ofLp_ofCoords, Fin.sum_univ_three]

lemma q2Of_lineJet4 (t : ℝ) :
    q2Of (lineJet 4 t) =
      2 * (Real.sqrt 10 / 5 - 1 + t) ^ 2 + 63 / 25 := by
  simp [q2Of, vecDot, n1Of_lineJet4, n0Of_lineJet4, n2Of_lineJet4, ofLp_ofCoords,
    Fin.sum_univ_three]
  ring

lemma q3Of_lineJet4 (t : ℝ) : q3Of (lineJet 4 t) = 0 := by
  simp [q3Of, vecDot, n1Of_lineJet4, n2Of_lineJet4, n0Of_lineJet4, n3Of_lineJet4,
    ofLp_ofCoords, Fin.sum_univ_three]

lemma pOf_lineJet4 (t : ℝ) : pOf (lineJet 4 t) = 2 / 3 := by
  unfold pOf
  rw [qOf_lineJet4, rpow_neg_half_nine_four]

lemma p1Of_lineJet4 (t : ℝ) : p1Of (lineJet 4 t) = 0 := by
  simp [p1Of, q1Of_lineJet4]

lemma p2Of_lineJet4 (t : ℝ) :
    p2Of (lineJet 4 t) =
      -(1 / 2 : ℝ) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 4 t)) := by
  unfold p2Of
  rw [qOf_lineJet4, q1Of_lineJet4]
  simp only [zero_pow (by norm_num : (2 : ℕ) ≠ 0), mul_zero, zero_sub]
  ring

lemma p3Of_lineJet4 (t : ℝ) : p3Of (lineJet 4 t) = 0 := by
  simp [p3Of, q1Of_lineJet4, q3Of_lineJet4]

lemma hasDerivAt_n0_lineJet4 :
    HasDerivAt (fun t => n0Of (lineJet 4 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (3 / 2 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n0Of (lineJet 4 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet4)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_n1_lineJet4 :
    HasDerivAt (fun t => n1Of (lineJet 4 t)) (ofCoords 0 1 0) 0 := by
  have hy := hasDerivAt_id_const_add (Real.sqrt 10 / 5 - 1) 0
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ)) hy
    (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet4)

lemma hasDerivAt_n2_lineJet4 :
    HasDerivAt (fun t => n2Of (lineJet 4 t)) (0 : Vec) 0 :=
  (hasDerivAt_const (0 : ℝ) (ofCoords (21 / 25) 0 0)).congr_of_eventuallyEq
    (Eventually.of_forall n2Of_lineJet4) |>.congr_deriv (by
      apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
      ext i; fin_cases i <;> simp)

lemma hasDerivAt_n3_lineJet4 :
    HasDerivAt (fun t => n3Of (lineJet 4 t)) (ofCoords 0 (-8 / 125) 0) 0 := by
  have hy : HasDerivAt
      (fun t : ℝ => 1 - (8 / 125) * (Real.sqrt 10 / 5 + t)) (-8 / 125) 0 := by
    have hadd := hasDerivAt_id_const_add (Real.sqrt 10 / 5) 0
    have hm := hadd.const_mul (8 / 125 : ℝ)
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub hm
    exact h.congr_deriv (by norm_num)
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ)) hy
    (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n3Of_lineJet4)

lemma hasDerivAt_q_lineJet4 :
    HasDerivAt (fun t => qOf (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (9 / 4 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall qOf_lineJet4)

lemma hasDerivAt_q1_lineJet4 :
    HasDerivAt (fun t => q1Of (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q1Of_lineJet4)

lemma hasDerivAt_q2_lineJet4 :
    HasDerivAt (fun t => q2Of (lineJet 4 t))
      (4 * (Real.sqrt 10 / 5 - 1)) 0 := by
  have hc : HasDerivAt (fun t : ℝ => Real.sqrt 10 / 5 - 1 + t) 1 0 :=
    hasDerivAt_id_const_add (Real.sqrt 10 / 5 - 1) 0
  have hsq : HasDerivAt (fun t : ℝ => (Real.sqrt 10 / 5 - 1 + t) ^ 2)
      (2 * (Real.sqrt 10 / 5 - 1)) 0 := by
    have h := (hasDerivAt_pow2_at (Real.sqrt 10 / 5 - 1 + (0 : ℝ))).comp 0 hc
    exact h.congr_deriv (by simp)
  have h2 := HasDerivAt.const_mul (2 : ℝ) hsq
  have h := (hasDerivAt_const 0 (63 / 25 : ℝ)).add h2
  have h' : HasDerivAt
      ((fun _ : ℝ => (63 / 25 : ℝ)) + fun t => 2 * (Real.sqrt 10 / 5 - 1 + t) ^ 2)
      (4 * (Real.sqrt 10 / 5 - 1)) 0 :=
    h.congr_deriv (by ring)
  exact h'.congr_of_eventuallyEq (Eventually.of_forall fun t => by
    simpa [add_comm] using q2Of_lineJet4 t)

lemma hasDerivAt_q3_lineJet4 :
    HasDerivAt (fun t => q3Of (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall q3Of_lineJet4)

lemma hasDerivAt_p_lineJet4 :
    HasDerivAt (fun t => pOf (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (2 / 3 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall pOf_lineJet4)

lemma hasDerivAt_p1_lineJet4 :
    HasDerivAt (fun t => p1Of (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p1Of_lineJet4)

lemma hasDerivAt_p2_lineJet4 :
    HasDerivAt (fun t => p2Of (lineJet 4 t))
      (16 / 27 - 16 * Real.sqrt 10 / 135) 0 := by
  have hq2 := hasDerivAt_q2_lineJet4
  have hA := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)))
  have hmul := hA.mul hq2
  have h := HasDerivAt.const_mul (-(1 / 2 : ℝ)) hmul
  have hd :
      (-(1 / 2 : ℝ)) *
          (0 * q2Of (lineJet 4 0)
            + (9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * (4 * (Real.sqrt 10 / 5 - 1)))
        = 16 / 27 - 16 * Real.sqrt 10 / 135 := by
    rw [rpow_neg_three_halves_nine_four]
    field_simp
    ring
  have h' := h.congr_deriv hd
  exact h'.congr_of_eventuallyEq (Eventually.of_forall p2Of_lineJet4)

lemma hasDerivAt_p3_lineJet4 :
    HasDerivAt (fun t => p3Of (lineJet 4 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (0 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall p3Of_lineJet4)

lemma u2Of_lineJet4 (t : ℝ) :
    u2Of (lineJet 4 t) =
      pOf (lineJet 4 t) • n2Of (lineJet 4 t)
        + p2Of (lineJet 4 t) • n0Of (lineJet 4 t) := by
  unfold u2Of
  rw [p1Of_lineJet4]
  simp

lemma two_jetB_eval :
    (16 / 27 - 16 * Real.sqrt 10 / 135) * (3 / 2) = 2 * jetB := by
  unfold jetB
  field_simp
  ring

lemma hasDerivAt_u2_lineJet4 :
    HasDerivAt (fun t => u2Of (lineJet 4 t)) (ofCoords (2 * jetB) 0 0) 0 := by
  have hp := hasDerivAt_p_lineJet4
  have hn2 := hasDerivAt_n2_lineJet4
  have hp2 := hasDerivAt_p2_lineJet4
  have hn0 := hasDerivAt_n0_lineJet4
  have h1 := hp.smul hn2
  have h2 := hp2.smul hn0
  have hadd := h1.add h2
  have heq : (fun t => u2Of (lineJet 4 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 4 t) • n2Of (lineJet 4 t)
        + p2Of (lineJet 4 t) • n0Of (lineJet 4 t) :=
    Eventually.of_forall u2Of_lineJet4
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 4 0) • (0 : Vec)
          + (0 : ℝ) • n2Of (lineJet 4 0)
          + (p2Of (lineJet 4 0) • (0 : Vec)
            + (16 / 27 - 16 * Real.sqrt 10 / 135) • n0Of (lineJet 4 0))
        = ofCoords (2 * jetB) 0 0 := by
    rw [lineJet_zero, n0Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, mul_comm, mul_left_comm] using two_jetB_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact h'.congr_deriv hv

lemma u3Of_lineJet4 (t : ℝ) :
    u3Of (lineJet 4 t) =
      pOf (lineJet 4 t) • n3Of (lineJet 4 t)
        + (3 : ℝ) • (p2Of (lineJet 4 t) • n1Of (lineJet 4 t)) := by
  unfold u3Of
  rw [p1Of_lineJet4, p3Of_lineJet4]
  simp

lemma six_jetG_eval :
    (2 / 3 : ℝ) * (-8 / 125)
      + (3 * (-532 / 675 + 16 * Real.sqrt 10 / 135)
        + 3 * ((16 / 27 - 16 * Real.sqrt 10 / 135) * (Real.sqrt 10 / 5 - 1)))
      = 6 * jetG := by
  unfold jetG
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma hasDerivAt_u3_lineJet4 :
    HasDerivAt (fun t => u3Of (lineJet 4 t)) (ofCoords 0 (6 * jetG) 0) 0 := by
  have hp := hasDerivAt_p_lineJet4
  have hn3 := hasDerivAt_n3_lineJet4
  have hp2 := hasDerivAt_p2_lineJet4
  have hn1 := hasDerivAt_n1_lineJet4
  have h1 := hp.smul hn3
  have hmid := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hmid
  have hadd := h1.add h3
  have heq : (fun t => u3Of (lineJet 4 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => pOf (lineJet 4 t) • n3Of (lineJet 4 t)
        + (3 : ℝ) • (p2Of (lineJet 4 t) • n1Of (lineJet 4 t)) :=
    Eventually.of_forall u3Of_lineJet4
  have h' := hadd.congr_of_eventuallyEq heq
  have hv :
      pOf (lineJet 4 0) • ofCoords 0 (-8 / 125) 0
          + (0 : ℝ) • n3Of (lineJet 4 0)
          + (3 : ℝ) •
            (p2Of (lineJet 4 0) • ofCoords 0 1 0
              + (16 / 27 - 16 * Real.sqrt 10 / 135) • n1Of (lineJet 4 0))
        = ofCoords 0 (6 * jetG) 0 := by
    rw [lineJet_zero, n1Of_sStar, n3Of_sStar, pOf_sStar, p2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using six_jetG_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact h'.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet4 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 4 t) i) (jetMatrix i 4) 0 := by
  have hu2 := hasDerivAt_u2_lineJet4
  have hu3 := hasDerivAt_u3_lineJet4
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet4 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 4 t) i) 0 = jetMatrix i 4 :=
  (hasDerivAt_losTaylor23_lineJet4 i).deriv

/-! Axis 3: vx-perturbation. Position fixed; `q1 = 3t` is the new term. -/

lemma statePos_lineJet3 (t : ℝ) :
    statePos (lineJet 3 t) = ofCoords (5 / 2) 0 0 := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet3 (t : ℝ) :
    stateVel (lineJet 3 t) = ofCoords t (Real.sqrt 10 / 5) 0 := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet3 (t : ℝ) : rnorm (lineJet 3 t) = 5 / 2 := by
  rw [rnorm, statePos_lineJet3, ofCoords_norm]
  simp [sqrt_25_4]

lemma vecDot_lineJet3 (t : ℝ) :
    vecDot (statePos (lineJet 3 t)) (stateVel (lineJet 3 t)) = (5 / 2) * t := by
  simp [vecDot, statePos_lineJet3, stateVel_lineJet3, ofLp_ofCoords, Fin.sum_univ_three]

lemma n0Of_lineJet3 (t : ℝ) :
    n0Of (lineJet 3 t) = ofCoords (3 / 2) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet3, eJet0, ofCoords, PiLp.sub_apply] <;> ring

lemma n1Of_lineJet3 (t : ℝ) :
    n1Of (lineJet 3 t) = ofCoords t (Real.sqrt 10 / 5 - 1) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet3, eJet1, ofCoords, PiLp.sub_apply]

lemma accelOf_lineJet3 (t : ℝ) :
    accelOf (lineJet 3 t) = ofCoords (-4 / 25) 0 0 := by
  unfold accelOf
  rw [statePos_lineJet3]
  have hr : ‖ofCoords (5 / 2 : ℝ) 0 0‖ = 5 / 2 := by
    rw [ofCoords_norm]; simp [sqrt_25_4]
  rw [hr]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [ofCoords, PiLp.smul_apply, smul_eq_mul] <;> norm_num

lemma n2Of_lineJet3 (t : ℝ) :
    n2Of (lineJet 3 t) = ofCoords (21 / 25) 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n2Of, accelOf_lineJet3, eJet2, ofCoords, PiLp.sub_apply] <;> norm_num

lemma inv_five_halves_pow5 : ((5 / 2 : ℝ) ^ 5)⁻¹ = 32 / 3125 := by norm_num

lemma jerkOf_lineJet3 (t : ℝ) :
    jerkOf (lineJet 3 t) = ofCoords (16 * t / 125) (-8 * Real.sqrt 10 / 625) 0 := by
  unfold jerkOf
  rw [show ‖statePos (lineJet 3 t)‖ = (5 / 2 : ℝ) from rnorm_lineJet3 t,
    vecDot_lineJet3, stateVel_lineJet3, statePos_lineJet3]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul,
      inv_five_halves_pow3, inv_five_halves_pow5]
    ring
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul,
      inv_five_halves_pow3, inv_five_halves_pow5]
    ring
  · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]

lemma n3Of_lineJet3 (t : ℝ) :
    n3Of (lineJet 3 t) =
      ofCoords (16 * t / 125) (1 - 8 * Real.sqrt 10 / 625) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n3Of, jerkOf_lineJet3, eJet3, ofCoords, PiLp.sub_apply] <;> ring

lemma qOf_lineJet3 (t : ℝ) : qOf (lineJet 3 t) = 9 / 4 := by
  simp [qOf, vecDot, n0Of_lineJet3, ofLp_ofCoords, Fin.sum_univ_three]
  norm_num

lemma q1Of_lineJet3 (t : ℝ) : q1Of (lineJet 3 t) = 3 * t := by
  simp [q1Of, vecDot, n0Of_lineJet3, n1Of_lineJet3, ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma q2Of_lineJet3 (t : ℝ) :
    q2Of (lineJet 3 t) = 2 * t ^ 2 + (133 / 25 - 4 * Real.sqrt 10 / 5) := by
  simp [q2Of, vecDot, n1Of_lineJet3, n0Of_lineJet3, n2Of_lineJet3, ofLp_ofCoords,
    Fin.sum_univ_three]
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma q3Of_lineJet3 (t : ℝ) : q3Of (lineJet 3 t) = 678 * t / 125 := by
  simp [q3Of, vecDot, n1Of_lineJet3, n2Of_lineJet3, n0Of_lineJet3, n3Of_lineJet3,
    ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma pOf_lineJet3 (t : ℝ) : pOf (lineJet 3 t) = 2 / 3 := by
  unfold pOf
  rw [qOf_lineJet3, rpow_neg_half_nine_four]

lemma p1Of_lineJet3 (t : ℝ) :
    p1Of (lineJet 3 t) = (-(4 / 9 : ℝ)) * t := by
  unfold p1Of
  rw [qOf_lineJet3, q1Of_lineJet3, rpow_neg_three_halves_nine_four]
  ring

lemma hasDerivAt_n0_lineJet3 :
    HasDerivAt (fun t => n0Of (lineJet 3 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (3 / 2 : ℝ))
    (hasDerivAt_const 0 (0 : ℝ)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n0Of (lineJet 3 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet3)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_n1_lineJet3 :
    HasDerivAt (fun t => n1Of (lineJet 3 t)) (ofCoords 1 0 0) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_id 0)
    (hasDerivAt_const 0 (Real.sqrt 10 / 5 - 1)) (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet3)

lemma hasDerivAt_n2_lineJet3 :
    HasDerivAt (fun t => n2Of (lineJet 3 t)) (0 : Vec) 0 :=
  (hasDerivAt_const (0 : ℝ) (ofCoords (21 / 25) 0 0)).congr_of_eventuallyEq
    (Eventually.of_forall n2Of_lineJet3) |>.congr_deriv (by
      apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
      ext i; fin_cases i <;> simp)

lemma hasDerivAt_n3_lineJet3 :
    HasDerivAt (fun t => n3Of (lineJet 3 t)) (ofCoords (16 / 125) 0 0) 0 := by
  have hx0 : HasDerivAt (fun t : ℝ => (16 / 125 : ℝ) * t) (16 / 125) 0 :=
    ((hasDerivAt_id (0 : ℝ)).const_mul (16 / 125 : ℝ)).congr_deriv (by simp)
  have hx : HasDerivAt (fun t : ℝ => 16 * t / 125) (16 / 125) 0 :=
    hx0.congr_of_eventuallyEq (Eventually.of_forall fun t => by field_simp)
  have h := hasDerivAt_coord3 hx
    (hasDerivAt_const 0 (1 - 8 * Real.sqrt 10 / 625)) (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n3Of_lineJet3)

lemma hasDerivAt_q_lineJet3 :
    HasDerivAt (fun t => qOf (lineJet 3 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (9 / 4 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall qOf_lineJet3)

lemma hasDerivAt_q1_lineJet3 :
    HasDerivAt (fun t => q1Of (lineJet 3 t)) 3 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).const_mul (3 : ℝ)
  exact (h.congr_deriv (by simp)).congr_of_eventuallyEq
    (Eventually.of_forall q1Of_lineJet3)

lemma hasDerivAt_q2_lineJet3 :
    HasDerivAt (fun t => q2Of (lineJet 3 t)) 0 0 := by
  have h2 : HasDerivAt (fun t : ℝ => 2 * t ^ 2) 0 0 :=
    (HasDerivAt.const_mul (2 : ℝ) hasDerivAt_pow2_id).congr_deriv (by simp)
  have h : HasDerivAt
      ((fun _ : ℝ => 133 / 25 - 4 * Real.sqrt 10 / 5) + fun t => 2 * t ^ 2) 0 0 :=
    (hasDerivAt_const 0 (133 / 25 - 4 * Real.sqrt 10 / 5)).add h2 |>.congr_deriv (by ring)
  exact h.congr_of_eventuallyEq (Eventually.of_forall fun t => by
    simpa [add_comm] using q2Of_lineJet3 t)

lemma hasDerivAt_q3_lineJet3 :
    HasDerivAt (fun t => q3Of (lineJet 3 t)) (678 / 125) 0 := by
  have h0 : HasDerivAt (fun t : ℝ => (678 / 125 : ℝ) * t) (678 / 125) 0 :=
    ((hasDerivAt_id (0 : ℝ)).const_mul (678 / 125 : ℝ)).congr_deriv (by simp)
  have h : HasDerivAt (fun t : ℝ => 678 * t / 125) (678 / 125) 0 :=
    h0.congr_of_eventuallyEq (Eventually.of_forall fun t => by field_simp)
  exact h.congr_of_eventuallyEq (Eventually.of_forall q3Of_lineJet3)

lemma hasDerivAt_p_lineJet3 :
    HasDerivAt (fun t => pOf (lineJet 3 t)) 0 0 :=
  (hasDerivAt_const (0 : ℝ) (2 / 3 : ℝ)).congr_of_eventuallyEq
    (Eventually.of_forall pOf_lineJet3)

lemma hasDerivAt_p1_lineJet3 :
    HasDerivAt (fun t => p1Of (lineJet 3 t)) (-4 / 9) 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).const_mul (-(4 / 9 : ℝ))
  exact (h.congr_deriv (by norm_num)).congr_of_eventuallyEq
    (Eventually.of_forall p1Of_lineJet3)

lemma hasDerivAt_p2_lineJet3 :
    HasDerivAt (fun t => p2Of (lineJet 3 t)) 0 0 := by
  have hq1 := hasDerivAt_q1_lineJet3
  have hq2 := hasDerivAt_q2_lineJet3
  have hA := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)))
  have hB := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)))
  have hq1sq := hq1.pow 2
  have ht1 := (HasDerivAt.const_mul (3 / 4 : ℝ) (hA.mul hq1sq))
  have ht2 := (HasDerivAt.const_mul (1 / 2 : ℝ) (hB.mul hq2))
  have h := ht1.sub ht2
  have hd :
      (3 / 4 : ℝ) *
            (0 * ((fun t => q1Of (lineJet 3 t)) ^ 2) 0
              + (9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) *
                ((2 : ℕ) * q1Of (lineJet 3 0) ^ (2 - 1) * 3))
          - (1 / 2 : ℝ) *
            (0 * q2Of (lineJet 3 0)
              + (9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * 0)
        = 0 := by
    simp [q1Of_lineJet3, Pi.pow_apply]
  have h' := h.congr_deriv hd
  have heq : (fun t => p2Of (lineJet 3 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        (3 / 4 : ℝ) * ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 3 t) ^ 2)
          - (1 / 2 : ℝ) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 3 t)) :=
    Eventually.of_forall fun t => by
      simp [p2Of, qOf_lineJet3, mul_assoc]
  exact h'.congr_of_eventuallyEq heq

lemma p3'_lineJet3_eval :
    (9 / 4 : ℝ) * ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) * 3 *
        (133 / 25 - 4 * Real.sqrt 10 / 5))
      - (2⁻¹) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * (678 / 125))
      = 1472 / 375 - 32 * Real.sqrt 10 / 45 := by
  rw [rpow_neg_five_halves_nine_four, rpow_neg_three_halves_nine_four]
  field_simp
  ring

lemma hasDerivAt_p3_lineJet3 :
    HasDerivAt (fun t => p3Of (lineJet 3 t))
      (1472 / 375 - 32 * Real.sqrt 10 / 45) 0 := by
  have hq1 := hasDerivAt_q1_lineJet3
  have hq2 := hasDerivAt_q2_lineJet3
  have hq3 := hasDerivAt_q3_lineJet3
  have hA := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(7 / 2 : ℝ)))
  have hB := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)))
  have hC := hasDerivAt_const (0 : ℝ) ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)))
  have hq1c := hq1.pow 3
  have ht1 := HasDerivAt.const_mul (-(15 / 8 : ℝ)) (hA.mul hq1c)
  have hmid := (hB.mul hq1).mul hq2
  have ht2 := HasDerivAt.const_mul (9 / 4 : ℝ) hmid
  have ht3 := HasDerivAt.const_mul (1 / 2 : ℝ) (hC.mul hq3)
  have h := (ht1.add ht2).sub ht3
  have hd :
      (-(15 / 8 : ℝ)) *
            (0 * q1Of (lineJet 3 0) ^ 3
              + (9 / 4 : ℝ) ^ (-(7 / 2 : ℝ)) *
                (3 * q1Of (lineJet 3 0) ^ 2 * 3))
          + (9 / 4 : ℝ) *
            ((0 * q1Of (lineJet 3 0) + (9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) * 3) *
                q2Of (lineJet 3 0)
              + ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 3 0)) * 0)
          - (1 / 2 : ℝ) *
            (0 * q3Of (lineJet 3 0)
              + (9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * (678 / 125))
        = 1472 / 375 - 32 * Real.sqrt 10 / 45 := by
    rw [q1Of_lineJet3, q2Of_lineJet3, q3Of_lineJet3]
    simp
    exact p3'_lineJet3_eval
  have h' := h.congr_deriv hd
  have heq : (fun t => p3Of (lineJet 3 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        (-(15 / 8 : ℝ)) * ((9 / 4 : ℝ) ^ (-(7 / 2 : ℝ)) * q1Of (lineJet 3 t) ^ 3)
          + (9 / 4 : ℝ) *
            ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 3 t) * q2Of (lineJet 3 t))
          - (1 / 2 : ℝ) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) * q3Of (lineJet 3 t)) :=
    Eventually.of_forall fun t => by
      simp [p3Of, qOf_lineJet3, mul_assoc]
  exact h'.congr_of_eventuallyEq heq

lemma hasDerivAt_u2_lineJet3 :
    HasDerivAt (fun t => u2Of (lineJet 3 t)) (ofCoords 0 (2 * jetB) 0) 0 := by
  have hp := hasDerivAt_p_lineJet3
  have hn2 := hasDerivAt_n2_lineJet3
  have hp1 := hasDerivAt_p1_lineJet3
  have hn1 := hasDerivAt_n1_lineJet3
  have hp2 := hasDerivAt_p2_lineJet3
  have hn0 := hasDerivAt_n0_lineJet3
  have h1 := hp.smul hn2
  have hmid := hp1.smul hn1
  have h2 := HasDerivAt.const_smul (2 : ℝ) hmid
  have h3 := hp2.smul hn0
  have hadd := (h1.add h2).add h3
  have hv :
      pOf (lineJet 3 0) • (0 : Vec) + (0 : ℝ) • n2Of (lineJet 3 0)
          + (2 : ℝ) •
            (p1Of (lineJet 3 0) • ofCoords 1 0 0
              + (-4 / 9 : ℝ) • n1Of (lineJet 3 0))
          + (p2Of (lineJet 3 0) • (0 : Vec) + (0 : ℝ) • n0Of (lineJet 3 0))
        = ofCoords 0 (2 * jetB) 0 := by
    rw [lineJet_zero, pOf_sStar, p1Of_sStar, p2Of_sStar, n1Of_sStar, n2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      unfold jetB
      field_simp
      ring
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact hadd.congr_deriv hv

lemma six_jetA_axis3_eval :
    (2 / 3 : ℝ) * (16 / 125)
      + 3 * ((-4 / 9 : ℝ) * (21 / 25))
      + 3 * (-532 / 675 + 16 * Real.sqrt 10 / 135)
      + (1472 / 375 - 32 * Real.sqrt 10 / 45) * (3 / 2)
      = 6 * jetA := by
  unfold jetA
  field_simp
  ring

lemma hasDerivAt_u3_lineJet3 :
    HasDerivAt (fun t => u3Of (lineJet 3 t)) (ofCoords (6 * jetA) 0 0) 0 := by
  have hp := hasDerivAt_p_lineJet3
  have hn3 := hasDerivAt_n3_lineJet3
  have hp1 := hasDerivAt_p1_lineJet3
  have hn2 := hasDerivAt_n2_lineJet3
  have hp2 := hasDerivAt_p2_lineJet3
  have hn1 := hasDerivAt_n1_lineJet3
  have hp3 := hasDerivAt_p3_lineJet3
  have hn0 := hasDerivAt_n0_lineJet3
  have h1 := hp.smul hn3
  have ha := hp1.smul hn2
  have h2 := HasDerivAt.const_smul (3 : ℝ) ha
  have hb := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hb
  have h4 := hp3.smul hn0
  have hadd := ((h1.add h2).add h3).add h4
  have hv :
      pOf (lineJet 3 0) • ofCoords (16 / 125) 0 0 + (0 : ℝ) • n3Of (lineJet 3 0)
          + (3 : ℝ) •
            (p1Of (lineJet 3 0) • (0 : Vec) + (-4 / 9 : ℝ) • n2Of (lineJet 3 0))
          + (3 : ℝ) •
            (p2Of (lineJet 3 0) • ofCoords 1 0 0 + (0 : ℝ) • n1Of (lineJet 3 0))
          + (p3Of (lineJet 3 0) • (0 : Vec)
            + (1472 / 375 - 32 * Real.sqrt 10 / 45) • n0Of (lineJet 3 0))
        = ofCoords (6 * jetA) 0 0 := by
    rw [lineJet_zero, pOf_sStar, p1Of_sStar, p2Of_sStar, p3Of_sStar,
      n0Of_sStar, n1Of_sStar, n2Of_sStar, n3Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using six_jetA_axis3_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact hadd.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet3 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 3 t) i) (jetMatrix i 3) 0 := by
  have hu2 := hasDerivAt_u2_lineJet3
  have hu3 := hasDerivAt_u3_lineJet3
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet3 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 3 t) i) 0 = jetMatrix i 3 :=
  (hasDerivAt_losTaylor23_lineJet3 i).deriv

/-! Axis 1: y-perturbation of position.  `q = 9/4+t²`, `q1 = 2t(√10/5-1)`,
`σ = t √10/5` (jerk extra term).  Clone of axis 3 (nonzero q1/p1) plus
the axis-2 `rnorm`/`vecDot` helpers. -/

lemma statePos_lineJet1 (t : ℝ) :
    statePos (lineJet 1 t) = ofCoords (5 / 2) t 0 := by
  simp [statePos, ofCoords, lineJet_apply, sStar]

lemma stateVel_lineJet1 (t : ℝ) :
    stateVel (lineJet 1 t) = ofCoords 0 (Real.sqrt 10 / 5) 0 := by
  simp [stateVel, ofCoords, lineJet_apply, sStar]

lemma rnorm_lineJet1 (t : ℝ) :
    rnorm (lineJet 1 t) = Real.sqrt ((5 / 2) ^ 2 + t ^ 2) := by
  rw [rnorm, statePos_lineJet1, ofCoords_norm]
  simp [add_comm, add_left_comm]

lemma hasDerivAt_rnorm_lineJet1 :
    HasDerivAt (fun t => rnorm (lineJet 1 t)) 0 0 :=
  hasDerivAt_sqrt_five_halves_sq.congr_of_eventuallyEq
    (Eventually.of_forall rnorm_lineJet1)

lemma vecDot_lineJet1 (t : ℝ) :
    vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)) =
      t * (Real.sqrt 10 / 5) := by
  simp [vecDot, statePos_lineJet1, stateVel_lineJet1, ofLp_ofCoords,
    Fin.sum_univ_three]

lemma n0Of_lineJet1 (t : ℝ) :
    n0Of (lineJet 1 t) = ofCoords (3 / 2) t 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n0Of, statePos_lineJet1, eJet0, ofCoords, PiLp.sub_apply]
    <;> ring

lemma n1Of_lineJet1 (t : ℝ) :
    n1Of (lineJet 1 t) = ofCoords 0 (Real.sqrt 10 / 5 - 1) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i <;> simp [n1Of, stateVel_lineJet1, eJet1, ofCoords, PiLp.sub_apply]

lemma rnorm_lineJet1_ne {t : ℝ} : rnorm (lineJet 1 t) ≠ 0 := by
  rw [rnorm_lineJet1]
  exact Real.sqrt_ne_zero'.2 (by nlinarith [sq_nonneg t])

lemma rnorm_lineJet1_zero : rnorm (lineJet 1 0) = 5 / 2 := by
  rw [rnorm_lineJet1]; simp [sqrt_25_4]

lemma hasDerivAt_rnorm_inv_lineJet1 :
    HasDerivAt (fun t => (rnorm (lineJet 1 t))⁻¹) 0 0 := by
  have hne : rnorm (lineJet 1 0) ≠ 0 := rnorm_lineJet1_ne
  have h := hasDerivAt_rnorm_lineJet1.inv hne
  exact h.congr_deriv (by simp [rnorm_lineJet1_zero])

lemma hasDerivAt_rnorm_inv_pow3_lineJet1 :
    HasDerivAt (fun t => (rnorm (lineJet 1 t))⁻¹ ^ 3) 0 0 := by
  have h := (hasDerivAt_pow3_at ((rnorm (lineJet 1 0))⁻¹)).comp 0
    hasDerivAt_rnorm_inv_lineJet1
  refine h.congr_deriv ?_
  simp [rnorm_lineJet1_zero]

lemma hasDerivAt_pow5_at (a : ℝ) :
    HasDerivAt (fun x : ℝ => x ^ 5) (5 * a ^ 4) a :=
  ((hasDerivAt_id a).pow 5).congr_deriv (by simp [id])

lemma hasDerivAt_rnorm_inv_pow5_lineJet1 :
    HasDerivAt (fun t => (rnorm (lineJet 1 t))⁻¹ ^ 5) 0 0 := by
  have h := (hasDerivAt_pow5_at ((rnorm (lineJet 1 0))⁻¹)).comp 0
    hasDerivAt_rnorm_inv_lineJet1
  refine h.congr_deriv ?_
  simp [rnorm_lineJet1_zero]

lemma hasDerivAt_n0_lineJet1 :
    HasDerivAt (fun t => n0Of (lineJet 1 t)) (ofCoords 0 1 0) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (3 / 2 : ℝ))
    (hasDerivAt_id 0) (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall n0Of_lineJet1)

lemma hasDerivAt_n1_lineJet1 :
    HasDerivAt (fun t => n1Of (lineJet 1 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5 - 1)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => n1Of (lineJet 1 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall n1Of_lineJet1)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_pos_lineJet1 :
    HasDerivAt (fun t => statePos (lineJet 1 t)) (ofCoords 0 1 0) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (5 / 2 : ℝ))
    (hasDerivAt_id 0) (hasDerivAt_const 0 (0 : ℝ))
  exact h.congr_of_eventuallyEq (Eventually.of_forall statePos_lineJet1)

lemma hasDerivAt_vel_lineJet1 :
    HasDerivAt (fun t => stateVel (lineJet 1 t)) (0 : Vec) 0 := by
  have h := hasDerivAt_coord3 (hasDerivAt_const 0 (0 : ℝ))
    (hasDerivAt_const 0 (Real.sqrt 10 / 5)) (hasDerivAt_const 0 (0 : ℝ))
  have h' : HasDerivAt (fun t => stateVel (lineJet 1 t)) (ofCoords 0 0 0) 0 :=
    h.congr_of_eventuallyEq (Eventually.of_forall stateVel_lineJet1)
  exact h'.congr_deriv ofCoords_zero

lemma hasDerivAt_accel_lineJet1 :
    HasDerivAt (fun t => accelOf (lineJet 1 t)) (ofCoords 0 (-8 / 125) 0) 0 := by
  have hc := hasDerivAt_rnorm_inv_pow3_lineJet1
  have hf := hasDerivAt_pos_lineJet1
  have hneg : HasDerivAt (fun t => -((rnorm (lineJet 1 t))⁻¹ ^ 3)) 0 0 :=
    hc.neg.congr_deriv (by simp)
  have h := hneg.smul hf
  have heq : (fun t => accelOf (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t => (-((rnorm (lineJet 1 t))⁻¹ ^ 3)) • statePos (lineJet 1 t) :=
    Eventually.of_forall fun t => by
      simp [accelOf, rnorm, neg_smul]
  have h' := h.congr_of_eventuallyEq heq
  have hv :
      (-((rnorm (lineJet 1 0))⁻¹ ^ 3)) • ofCoords 0 1 0
          + (0 : ℝ) • statePos (lineJet 1 0)
        = ofCoords 0 (-8 / 125) 0 := by
    rw [rnorm_lineJet1_zero]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i <;> simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      <;> norm_num
  exact h'.congr_deriv hv

lemma hasDerivAt_n2_lineJet1 :
    HasDerivAt (fun t => n2Of (lineJet 1 t)) (ofCoords 0 (-8 / 125) 0) 0 := by
  have h := hasDerivAt_accel_lineJet1.sub (hasDerivAt_const 0 eJet2)
  refine h.congr_deriv ?_
  simp [eJet2, ofCoords_zero]

lemma hasDerivAt_sigma_lineJet1 :
    HasDerivAt (fun t => vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)))
      (Real.sqrt 10 / 5) 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).const_mul (Real.sqrt 10 / 5)
  exact (h.congr_deriv (by simp)).congr_of_eventuallyEq
    (Eventually.of_forall fun t => by simpa [mul_comm] using vecDot_lineJet1 t)

lemma hasDerivAt_sigma_rinv5_lineJet1 :
    HasDerivAt
      (fun t =>
        vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)) *
          (rnorm (lineJet 1 t))⁻¹ ^ 5)
      ((Real.sqrt 10 / 5) * (32 / 3125)) 0 := by
  have h := hasDerivAt_sigma_lineJet1.mul hasDerivAt_rnorm_inv_pow5_lineJet1
  refine h.congr_deriv ?_
  simp [vecDot_lineJet1, rnorm_lineJet1_zero]
  norm_num

lemma hasDerivAt_jerk_extra_lineJet1 :
    HasDerivAt
      (fun t =>
        ((3 : ℝ) *
            (vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)) *
              (rnorm (lineJet 1 t))⁻¹ ^ 5)) •
          statePos (lineJet 1 t))
      (ofCoords (48 * Real.sqrt 10 / 3125) 0 0) 0 := by
  have hc := HasDerivAt.const_mul (3 : ℝ) hasDerivAt_sigma_rinv5_lineJet1
  have hp := hasDerivAt_pos_lineJet1
  have h := hc.smul hp
  have hv :
      ((3 : ℝ) *
            (vecDot (statePos (lineJet 1 0)) (stateVel (lineJet 1 0)) *
              (rnorm (lineJet 1 0))⁻¹ ^ 5)) •
          ofCoords 0 1 0
        + ((3 : ℝ) * ((Real.sqrt 10 / 5) * (32 / 3125))) • statePos (lineJet 1 0)
        = ofCoords (48 * Real.sqrt 10 / 3125) 0 0 := by
    have hσ :
        vecDot (statePos (lineJet 1 0)) (stateVel (lineJet 1 0)) = 0 := by
      simp [vecDot_lineJet1]
    rw [hσ, rnorm_lineJet1_zero, statePos_lineJet1]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      field_simp
      ring
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact h.congr_deriv hv

lemma hasDerivAt_jerk_main_lineJet1 :
    HasDerivAt
      (fun t => (-((rnorm (lineJet 1 t))⁻¹ ^ 3)) • stateVel (lineJet 1 t))
      (0 : Vec) 0 := by
  have hneg : HasDerivAt (fun t => -((rnorm (lineJet 1 t))⁻¹ ^ 3)) 0 0 :=
    hasDerivAt_rnorm_inv_pow3_lineJet1.neg.congr_deriv (by simp)
  have h := hneg.smul hasDerivAt_vel_lineJet1
  exact h.congr_deriv (by simp)

lemma hasDerivAt_jerk_lineJet1 :
    HasDerivAt (fun t => jerkOf (lineJet 1 t))
      (ofCoords (48 * Real.sqrt 10 / 3125) 0 0) 0 := by
  have h1 := hasDerivAt_jerk_main_lineJet1
  have h2 := hasDerivAt_jerk_extra_lineJet1
  have h := h1.add h2
  have heq : (fun t => jerkOf (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        (-((rnorm (lineJet 1 t))⁻¹ ^ 3)) • stateVel (lineJet 1 t)
          + ((3 : ℝ) *
              (vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)) *
                (rnorm (lineJet 1 t))⁻¹ ^ 5)) •
            statePos (lineJet 1 t) :=
    Eventually.of_forall fun t => by
      unfold jerkOf
      have h3 : ((rnorm (lineJet 1 t)) ^ 3)⁻¹ = (rnorm (lineJet 1 t))⁻¹ ^ 3 :=
        inv_pow3_rnorm _
      have h5 : ((rnorm (lineJet 1 t)) ^ 5)⁻¹ = (rnorm (lineJet 1 t))⁻¹ ^ 5 := by
        have hn : rnorm (lineJet 1 t) ≠ 0 := rnorm_lineJet1_ne
        field_simp [hn]
      simp [h3, h5, rnorm, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]
  have h' := h.congr_of_eventuallyEq heq
  exact h'.congr_deriv (by simp)

lemma hasDerivAt_n3_lineJet1 :
    HasDerivAt (fun t => n3Of (lineJet 1 t))
      (ofCoords (48 * Real.sqrt 10 / 3125) 0 0) 0 := by
  have h := hasDerivAt_jerk_lineJet1.sub (hasDerivAt_const 0 eJet3)
  refine h.congr_deriv ?_
  simp [eJet3, ofCoords_zero]

lemma qOf_lineJet1 (t : ℝ) : qOf (lineJet 1 t) = (9 / 4 : ℝ) + t ^ 2 := by
  simp [qOf, vecDot, n0Of_lineJet1, ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma hasDerivAt_q_lineJet1 :
    HasDerivAt (fun t => qOf (lineJet 1 t)) 0 0 :=
  hasDerivAt_nine_four_sq_add.congr_of_eventuallyEq
    (Eventually.of_forall qOf_lineJet1)

lemma q1Of_lineJet1 (t : ℝ) :
    q1Of (lineJet 1 t) = 2 * t * (Real.sqrt 10 / 5 - 1) := by
  simp [q1Of, vecDot, n0Of_lineJet1, n1Of_lineJet1, ofLp_ofCoords,
    Fin.sum_univ_three]
  ring

lemma hasDerivAt_q1_lineJet1 :
    HasDerivAt (fun t => q1Of (lineJet 1 t)) (2 * (Real.sqrt 10 / 5 - 1)) 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).const_mul (2 * (Real.sqrt 10 / 5 - 1))
  exact (h.congr_deriv (by simp)).congr_of_eventuallyEq
    (Eventually.of_forall fun t => by simpa [mul_assoc, mul_comm, mul_left_comm] using q1Of_lineJet1 t)

lemma n2Of_lineJet1 (t : ℝ) :
    n2Of (lineJet 1 t) =
      ofCoords (1 - (5 / 2) * (rnorm (lineJet 1 t))⁻¹ ^ 3)
        (-t * (rnorm (lineJet 1 t))⁻¹ ^ 3) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  have ha : accelOf (lineJet 1 t) =
      -((rnorm (lineJet 1 t))⁻¹ ^ 3) • statePos (lineJet 1 t) := by
    simp [accelOf, rnorm, inv_pow3_rnorm, neg_smul]
  rw [n2Of, ha, statePos_lineJet1]
  fin_cases i
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]
    ring
  · simp [eJet2, ofCoords, PiLp.sub_apply, PiLp.smul_apply, smul_eq_mul]

lemma n3Of_lineJet1 (t : ℝ) :
    n3Of (lineJet 1 t) =
      ofCoords
        ((15 / 2) * t * (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 5)
        (1 - (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 3
          + 3 * t ^ 2 * (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 5)
        0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  have h3 : ((rnorm (lineJet 1 t)) ^ 3)⁻¹ = (rnorm (lineJet 1 t))⁻¹ ^ 3 :=
    inv_pow3_rnorm _
  have h5 : ((rnorm (lineJet 1 t)) ^ 5)⁻¹ = (rnorm (lineJet 1 t))⁻¹ ^ 5 := by
    have hn : rnorm (lineJet 1 t) ≠ 0 := rnorm_lineJet1_ne
    field_simp [hn]
  have hj :
      jerkOf (lineJet 1 t) =
        (-((rnorm (lineJet 1 t))⁻¹ ^ 3)) • stateVel (lineJet 1 t)
          + ((3 : ℝ) * vecDot (statePos (lineJet 1 t)) (stateVel (lineJet 1 t)) *
              (rnorm (lineJet 1 t))⁻¹ ^ 5) •
            statePos (lineJet 1 t) := by
    unfold jerkOf
    simp [h3, h5, rnorm, div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]
  rw [n3Of, hj, vecDot_lineJet1, stateVel_lineJet1, statePos_lineJet1]
  fin_cases i
  · simp [eJet3, ofCoords, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply,
      smul_eq_mul]
    ring
  · simp [eJet3, ofCoords, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply,
      smul_eq_mul]
    ring
  · simp [eJet3, ofCoords, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply,
      smul_eq_mul]

lemma q2Of_lineJet1 (t : ℝ) :
    q2Of (lineJet 1 t) =
      2 * (Real.sqrt 10 / 5 - 1) ^ 2
        + 3 * (1 - (5 / 2) * (rnorm (lineJet 1 t))⁻¹ ^ 3)
        - 2 * t ^ 2 * (rnorm (lineJet 1 t))⁻¹ ^ 3 := by
  simp [q2Of, vecDot, n1Of_lineJet1, n0Of_lineJet1, n2Of_lineJet1, ofLp_ofCoords,
    Fin.sum_univ_three]
  ring

lemma hasDerivAt_t_sq_rinv3_lineJet1 :
    HasDerivAt (fun t => t ^ 2 * (rnorm (lineJet 1 t))⁻¹ ^ 3) 0 0 := by
  have h := hasDerivAt_pow2_id.mul hasDerivAt_rnorm_inv_pow3_lineJet1
  exact h.congr_deriv (by simp [rnorm_lineJet1_zero])

lemma hasDerivAt_q2_lineJet1 :
    HasDerivAt (fun t => q2Of (lineJet 1 t)) 0 0 := by
  have hc := hasDerivAt_const (0 : ℝ) (2 * (Real.sqrt 10 / 5 - 1) ^ 2)
  have hr := hasDerivAt_rnorm_inv_pow3_lineJet1
  have hmid : HasDerivAt
      (fun t : ℝ => 1 - (5 / 2) * (rnorm (lineJet 1 t))⁻¹ ^ 3) 0 0 := by
    have h := (hasDerivAt_const 0 (1 : ℝ)).sub
      ((hasDerivAt_const 0 (5 / 2 : ℝ)).mul hr)
    exact h.congr_deriv (by simp)
  have h3 := HasDerivAt.const_mul (3 : ℝ) hmid
  have ht := hasDerivAt_t_sq_rinv3_lineJet1
  have h2t := HasDerivAt.const_mul (2 : ℝ) ht
  have hadd := (hc.add h3).sub h2t
  have heq : (fun t => q2Of (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        2 * (Real.sqrt 10 / 5 - 1) ^ 2
          + 3 * (1 - (5 / 2) * (rnorm (lineJet 1 t))⁻¹ ^ 3)
          - 2 * (t ^ 2 * (rnorm (lineJet 1 t))⁻¹ ^ 3) :=
    Eventually.of_forall fun t => by simpa [mul_assoc] using q2Of_lineJet1 t
  exact hadd.congr_of_eventuallyEq heq |>.congr_deriv (by ring)

lemma q3Of_lineJet1 (t : ℝ) :
    q3Of (lineJet 1 t) =
      -6 * (Real.sqrt 10 / 5 - 1) * t * (rnorm (lineJet 1 t))⁻¹ ^ 3
        + (45 / 2) * t * (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 5
        + 2 * t
        - 2 * t * (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 3
        + 6 * t ^ 3 * (Real.sqrt 10 / 5) * (rnorm (lineJet 1 t))⁻¹ ^ 5 := by
  simp [q3Of, vecDot, n1Of_lineJet1, n2Of_lineJet1, n0Of_lineJet1, n3Of_lineJet1,
    ofLp_ofCoords, Fin.sum_univ_three]
  ring

lemma hasDerivAt_t_rinv3_lineJet1 :
    HasDerivAt (fun t => t * (rnorm (lineJet 1 t))⁻¹ ^ 3) (8 / 125) 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).mul hasDerivAt_rnorm_inv_pow3_lineJet1
  refine h.congr_deriv ?_
  simp [rnorm_lineJet1_zero]
  norm_num

lemma hasDerivAt_t_rinv5_lineJet1 :
    HasDerivAt (fun t => t * (rnorm (lineJet 1 t))⁻¹ ^ 5) (32 / 3125) 0 := by
  have h := (hasDerivAt_id (0 : ℝ)).mul hasDerivAt_rnorm_inv_pow5_lineJet1
  refine h.congr_deriv ?_
  simp [rnorm_lineJet1_zero]
  norm_num

lemma hasDerivAt_t3_rinv5_lineJet1 :
    HasDerivAt (fun t => t ^ 3 * (rnorm (lineJet 1 t))⁻¹ ^ 5) 0 0 := by
  have ht : HasDerivAt (fun t : ℝ => t ^ 3) 0 0 :=
    (hasDerivAt_pow3_at 0).congr_deriv (by norm_num)
  have h := ht.mul hasDerivAt_rnorm_inv_pow5_lineJet1
  exact h.congr_deriv (by simp [rnorm_lineJet1_zero])

lemma q3'_lineJet1_eval :
    -6 * (Real.sqrt 10 / 5 - 1) * (8 / 125)
      + (45 / 2) * (Real.sqrt 10 / 5) * (32 / 3125)
      + 2
      - 2 * (Real.sqrt 10 / 5) * (8 / 125)
      = 298 / 125 - 176 * Real.sqrt 10 / 3125 := by
  field_simp
  ring

lemma hasDerivAt_q3_lineJet1 :
    HasDerivAt (fun t => q3Of (lineJet 1 t))
      (298 / 125 - 176 * Real.sqrt 10 / 3125) 0 := by
  have hA := HasDerivAt.const_mul (-6 * (Real.sqrt 10 / 5 - 1))
    hasDerivAt_t_rinv3_lineJet1
  have hB := HasDerivAt.const_mul ((45 / 2) * (Real.sqrt 10 / 5))
    hasDerivAt_t_rinv5_lineJet1
  have hC := HasDerivAt.const_mul (2 : ℝ) (hasDerivAt_id (0 : ℝ))
  have hD := HasDerivAt.const_mul (-2 * (Real.sqrt 10 / 5))
    hasDerivAt_t_rinv3_lineJet1
  have hE := HasDerivAt.const_mul (6 * (Real.sqrt 10 / 5))
    hasDerivAt_t3_rinv5_lineJet1
  have h := (((hA.add hB).add hC).add hD).add hE
  have hd :
      (-6 * (Real.sqrt 10 / 5 - 1)) * (8 / 125)
          + ((45 / 2) * (Real.sqrt 10 / 5)) * (32 / 3125)
          + (2 : ℝ) * 1
          + (-2 * (Real.sqrt 10 / 5)) * (8 / 125)
          + (6 * (Real.sqrt 10 / 5)) * 0
        = 298 / 125 - 176 * Real.sqrt 10 / 3125 := by
    convert q3'_lineJet1_eval using 1
    · ring
  have h' := h.congr_deriv hd
  have heq : (fun t => q3Of (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        -6 * (Real.sqrt 10 / 5 - 1) * (t * (rnorm (lineJet 1 t))⁻¹ ^ 3)
          + (45 / 2) * (Real.sqrt 10 / 5) * (t * (rnorm (lineJet 1 t))⁻¹ ^ 5)
          + 2 * t
          + (-2 * (Real.sqrt 10 / 5)) * (t * (rnorm (lineJet 1 t))⁻¹ ^ 3)
          + (6 * (Real.sqrt 10 / 5)) * (t ^ 3 * (rnorm (lineJet 1 t))⁻¹ ^ 5) :=
    Eventually.of_forall fun t => by
      simpa [mul_assoc, mul_left_comm, mul_comm, sub_eq_add_neg] using
        q3Of_lineJet1 t
  exact h'.congr_of_eventuallyEq heq

lemma hasDerivAt_p_lineJet1 :
    HasDerivAt (fun t => pOf (lineJet 1 t)) 0 0 := by
  have hpt : (9 / 4 : ℝ) + (0 : ℝ) ^ 2 = 9 / 4 := by norm_num
  have hr : HasDerivAt (fun x : ℝ => x ^ (-(1 / 2 : ℝ))) (-(4 / 27 : ℝ))
      ((9 / 4 : ℝ) + 0 ^ 2) := by
    rw [hpt]; exact hasDerivAt_rpow_neg_half_at_nine_four
  have h := hr.comp 0 hasDerivAt_nine_four_sq_add
  have h0 : HasDerivAt ((fun x : ℝ => x ^ (-(1 / 2 : ℝ))) ∘ fun t : ℝ => 9 / 4 + t ^ 2)
      0 0 := h.congr_deriv (mul_zero _)
  refine h0.congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun t => by simp [pOf, qOf_lineJet1]

lemma hasDerivAt_q_rpow_neg_three_halves_lineJet1 :
    HasDerivAt (fun t => (qOf (lineJet 1 t)) ^ (-(3 / 2 : ℝ))) 0 0 := by
  have hq : qOf (lineJet 1 0) = 9 / 4 := by
    rw [qOf_lineJet1]; simp
  have hr : HasDerivAt (fun x : ℝ => x ^ (-(3 / 2 : ℝ))) (-(16 / 81 : ℝ))
      (qOf (lineJet 1 0)) := by
    rw [hq]; exact hasDerivAt_rpow_neg_three_halves_at_nine_four
  have h := hr.comp 0 hasDerivAt_q_lineJet1
  exact h.congr_deriv (by simp)

lemma hasDerivAt_p1_lineJet1 :
    HasDerivAt (fun t => p1Of (lineJet 1 t))
      (-(8 / 27) * (Real.sqrt 10 / 5 - 1)) 0 := by
  have hA := hasDerivAt_q_rpow_neg_three_halves_lineJet1
  have hq1 := hasDerivAt_q1_lineJet1
  have hmul := hA.mul hq1
  have h := HasDerivAt.const_mul (-(1 / 2 : ℝ)) hmul
  have hd :
      (-(1 / 2 : ℝ)) *
          (0 * q1Of (lineJet 1 0)
            + (qOf (lineJet 1 0)) ^ (-(3 / 2 : ℝ)) *
              (2 * (Real.sqrt 10 / 5 - 1)))
        = -(8 / 27) * (Real.sqrt 10 / 5 - 1) := by
    rw [qOf_lineJet1, q1Of_lineJet1]
    simp [rpow_neg_three_halves_nine_four]
    ring
  have h' := h.congr_deriv hd
  have heq : (fun t => p1Of (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        -(1 / 2 : ℝ) * ((qOf (lineJet 1 t)) ^ (-(3 / 2 : ℝ)) * q1Of (lineJet 1 t)) :=
    Eventually.of_forall fun t => by simp [p1Of, mul_assoc]
  exact h'.congr_of_eventuallyEq heq

lemma hasDerivAt_q_rpow_neg_five_halves_lineJet1 :
    HasDerivAt (fun t => (qOf (lineJet 1 t)) ^ (-(5 / 2 : ℝ))) 0 0 := by
  have hq : qOf (lineJet 1 0) = 9 / 4 := by rw [qOf_lineJet1]; simp
  have hx : (0 : ℝ) < qOf (lineJet 1 0) := by rw [hq]; norm_num
  have hr := Real.hasDerivAt_rpow_const (x := qOf (lineJet 1 0))
    (p := -(5 / 2 : ℝ)) (Or.inl hx.ne')
  have h := hr.comp 0 hasDerivAt_q_lineJet1
  exact h.congr_deriv (by simp)

lemma hasDerivAt_q_rpow_neg_seven_halves_lineJet1 :
    HasDerivAt (fun t => (qOf (lineJet 1 t)) ^ (-(7 / 2 : ℝ))) 0 0 := by
  have hq : qOf (lineJet 1 0) = 9 / 4 := by rw [qOf_lineJet1]; simp
  have hx : (0 : ℝ) < qOf (lineJet 1 0) := by rw [hq]; norm_num
  have hr := Real.hasDerivAt_rpow_const (x := qOf (lineJet 1 0))
    (p := -(7 / 2 : ℝ)) (Or.inl hx.ne')
  have h := hr.comp 0 hasDerivAt_q_lineJet1
  exact h.congr_deriv (by simp)

lemma hasDerivAt_p2_lineJet1 :
    HasDerivAt (fun t => p2Of (lineJet 1 t)) 0 0 := by
  have hq1 := hasDerivAt_q1_lineJet1
  have hq2 := hasDerivAt_q2_lineJet1
  have hA := hasDerivAt_q_rpow_neg_five_halves_lineJet1
  have hB := hasDerivAt_q_rpow_neg_three_halves_lineJet1
  have hq1sq := hq1.pow 2
  have ht1 := (HasDerivAt.const_mul (3 / 4 : ℝ) (hA.mul hq1sq))
  have ht2 := (HasDerivAt.const_mul (1 / 2 : ℝ) (hB.mul hq2))
  have h := ht1.sub ht2
  have hd :
      (3 / 4 : ℝ) *
            (0 * ((fun t => q1Of (lineJet 1 t)) ^ 2) 0
              + (qOf (lineJet 1 0)) ^ (-(5 / 2 : ℝ)) *
                ((2 : ℕ) * q1Of (lineJet 1 0) ^ (2 - 1) *
                  (2 * (Real.sqrt 10 / 5 - 1))))
          - (1 / 2 : ℝ) *
            (0 * q2Of (lineJet 1 0)
              + (qOf (lineJet 1 0)) ^ (-(3 / 2 : ℝ)) * 0)
        = 0 := by
    simp [q1Of_lineJet1, Pi.pow_apply]
  have h' := h.congr_deriv hd
  have heq : (fun t => p2Of (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        (3 / 4 : ℝ) * ((qOf (lineJet 1 t)) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 1 t) ^ 2)
          - (1 / 2 : ℝ) * ((qOf (lineJet 1 t)) ^ (-(3 / 2 : ℝ)) * q2Of (lineJet 1 t)) :=
    Eventually.of_forall fun t => by
      simp [p2Of, mul_assoc]
  exact h'.congr_of_eventuallyEq heq

def p3deriv_axis1 : ℝ :=
  (9 / 4 : ℝ) * ((9 / 4 : ℝ) ^ (-(5 / 2 : ℝ)) *
      (2 * (Real.sqrt 10 / 5 - 1)) *
      (133 / 25 - 4 * Real.sqrt 10 / 5))
    - (2⁻¹) * ((9 / 4 : ℝ) ^ (-(3 / 2 : ℝ)) *
      (298 / 125 - 176 * Real.sqrt 10 / 3125))

lemma hasDerivAt_p3_lineJet1 :
    HasDerivAt (fun t => p3Of (lineJet 1 t)) p3deriv_axis1 0 := by
  have hq1 := hasDerivAt_q1_lineJet1
  have hq2 := hasDerivAt_q2_lineJet1
  have hq3 := hasDerivAt_q3_lineJet1
  have hA := hasDerivAt_q_rpow_neg_seven_halves_lineJet1
  have hB := hasDerivAt_q_rpow_neg_five_halves_lineJet1
  have hC := hasDerivAt_q_rpow_neg_three_halves_lineJet1
  have hq1c := hq1.pow 3
  have ht1 := HasDerivAt.const_mul (-(15 / 8 : ℝ)) (hA.mul hq1c)
  have hmid := (hB.mul hq1).mul hq2
  have ht2 := HasDerivAt.const_mul (9 / 4 : ℝ) hmid
  have ht3 := HasDerivAt.const_mul (1 / 2 : ℝ) (hC.mul hq3)
  have h := (ht1.add ht2).sub ht3
  have hd :
      (-(15 / 8 : ℝ)) *
            (0 * q1Of (lineJet 1 0) ^ 3
              + (qOf (lineJet 1 0)) ^ (-(7 / 2 : ℝ)) *
                (3 * q1Of (lineJet 1 0) ^ 2 * (2 * (Real.sqrt 10 / 5 - 1))))
          + (9 / 4 : ℝ) *
            ((0 * q1Of (lineJet 1 0)
                + (qOf (lineJet 1 0)) ^ (-(5 / 2 : ℝ)) * (2 * (Real.sqrt 10 / 5 - 1))) *
                q2Of (lineJet 1 0)
              + ((qOf (lineJet 1 0)) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 1 0)) * 0)
          - (1 / 2 : ℝ) *
            (0 * q3Of (lineJet 1 0)
              + (qOf (lineJet 1 0)) ^ (-(3 / 2 : ℝ)) *
                (298 / 125 - 176 * Real.sqrt 10 / 3125))
        = p3deriv_axis1 := by
    have hq0 : qOf (lineJet 1 0) = 9 / 4 := by rw [qOf_lineJet1]; simp
    have hq20 : q2Of (lineJet 1 0) = 133 / 25 - 4 * Real.sqrt 10 / 5 := by
      rw [lineJet_zero, q2Of_sStar]
    rw [q1Of_lineJet1, hq0, hq20]
    simp
    rfl
  have h' := h.congr_deriv hd
  have heq : (fun t => p3Of (lineJet 1 t)) =ᶠ[𝓝 (0 : ℝ)]
      fun t =>
        (-(15 / 8 : ℝ)) * ((qOf (lineJet 1 t)) ^ (-(7 / 2 : ℝ)) * q1Of (lineJet 1 t) ^ 3)
          + (9 / 4 : ℝ) *
            ((qOf (lineJet 1 t)) ^ (-(5 / 2 : ℝ)) * q1Of (lineJet 1 t) * q2Of (lineJet 1 t))
          - (1 / 2 : ℝ) * ((qOf (lineJet 1 t)) ^ (-(3 / 2 : ℝ)) * q3Of (lineJet 1 t)) :=
    Eventually.of_forall fun t => by
      simp [p3Of, mul_assoc]
  exact h'.congr_of_eventuallyEq heq

lemma two_jetC_axis1_eval :
    (2 / 3 : ℝ) * (-8 / 125)
      + 2 * ((-(8 / 27) * (Real.sqrt 10 / 5 - 1)) * (Real.sqrt 10 / 5 - 1))
      + (-532 / 675 + 16 * Real.sqrt 10 / 135)
      = 2 * jetC := by
  unfold jetC
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma hasDerivAt_u2_lineJet1 :
    HasDerivAt (fun t => u2Of (lineJet 1 t)) (ofCoords 0 (2 * jetC) 0) 0 := by
  have hp := hasDerivAt_p_lineJet1
  have hn2 := hasDerivAt_n2_lineJet1
  have hp1 := hasDerivAt_p1_lineJet1
  have hn1 := hasDerivAt_n1_lineJet1
  have hp2 := hasDerivAt_p2_lineJet1
  have hn0 := hasDerivAt_n0_lineJet1
  have h1 := hp.smul hn2
  have hmid := hp1.smul hn1
  have h2 := HasDerivAt.const_smul (2 : ℝ) hmid
  have h3 := hp2.smul hn0
  have hadd := (h1.add h2).add h3
  have hv :
      pOf (lineJet 1 0) • ofCoords 0 (-8 / 125) 0 + (0 : ℝ) • n2Of (lineJet 1 0)
          + (2 : ℝ) •
            (p1Of (lineJet 1 0) • (0 : Vec)
              + (-(8 / 27) * (Real.sqrt 10 / 5 - 1)) • n1Of (lineJet 1 0))
          + (p2Of (lineJet 1 0) • ofCoords 0 1 0 + (0 : ℝ) • n0Of (lineJet 1 0))
        = ofCoords 0 (2 * jetC) 0 := by
    rw [lineJet_zero, pOf_sStar, p1Of_sStar, p2Of_sStar, n1Of_sStar, n2Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using two_jetC_axis1_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact hadd.congr_deriv hv

lemma six_jetE_axis1_eval :
    (2 / 3 : ℝ) * (48 * Real.sqrt 10 / 3125)
      + 3 * ((-(8 / 27) * (Real.sqrt 10 / 5 - 1)) * (21 / 25))
      + p3deriv_axis1 * (3 / 2)
      = 6 * jetE := by
  unfold p3deriv_axis1 jetE
  rw [rpow_neg_five_halves_nine_four, rpow_neg_three_halves_nine_four]
  field_simp
  ring_nf
  simp [sqrt10_sq]
  ring

lemma hasDerivAt_u3_lineJet1 :
    HasDerivAt (fun t => u3Of (lineJet 1 t)) (ofCoords (6 * jetE) 0 0) 0 := by
  have hp := hasDerivAt_p_lineJet1
  have hn3 := hasDerivAt_n3_lineJet1
  have hp1 := hasDerivAt_p1_lineJet1
  have hn2 := hasDerivAt_n2_lineJet1
  have hp2 := hasDerivAt_p2_lineJet1
  have hn1 := hasDerivAt_n1_lineJet1
  have hp3 := hasDerivAt_p3_lineJet1
  have hn0 := hasDerivAt_n0_lineJet1
  have h1 := hp.smul hn3
  have ha := hp1.smul hn2
  have h2 := HasDerivAt.const_smul (3 : ℝ) ha
  have hb := hp2.smul hn1
  have h3 := HasDerivAt.const_smul (3 : ℝ) hb
  have h4 := hp3.smul hn0
  have hadd := ((h1.add h2).add h3).add h4
  have hv :
      pOf (lineJet 1 0) • ofCoords (48 * Real.sqrt 10 / 3125) 0 0
          + (0 : ℝ) • n3Of (lineJet 1 0)
          + (3 : ℝ) •
            (p1Of (lineJet 1 0) • ofCoords 0 (-8 / 125) 0
              + (-(8 / 27) * (Real.sqrt 10 / 5 - 1)) • n2Of (lineJet 1 0))
          + (3 : ℝ) •
            (p2Of (lineJet 1 0) • (0 : Vec) + (0 : ℝ) • n1Of (lineJet 1 0))
          + (p3Of (lineJet 1 0) • ofCoords 0 1 0
            + p3deriv_axis1 • n0Of (lineJet 1 0))
        = ofCoords (6 * jetE) 0 0 := by
    rw [lineJet_zero, pOf_sStar, p1Of_sStar, p2Of_sStar, p3Of_sStar,
      n0Of_sStar, n1Of_sStar, n2Of_sStar, n3Of_sStar]
    apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
    ext i
    fin_cases i
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
      simpa [mul_assoc, add_assoc, add_left_comm, add_comm, mul_comm, mul_left_comm]
        using six_jetE_axis1_eval
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
    · simp [ofCoords, PiLp.smul_apply, PiLp.add_apply, smul_eq_mul]
  exact hadd.congr_deriv hv

lemma hasDerivAt_losTaylor23_lineJet1 (i : Fin 6) :
    HasDerivAt (fun t => losTaylor23 (lineJet 1 t) i) (jetMatrix i 1) 0 := by
  have hu2 := hasDerivAt_u2_lineJet1
  have hu3 := hasDerivAt_u3_lineJet1
  fin_cases i
  · have h := (hasDerivAt_ofLp hu2 0).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 1).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu2 2).div_const (2 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 0).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 1).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]
  · have h := (hasDerivAt_ofLp hu3 2).div_const (6 : ℝ)
    refine h.congr_deriv ?_
    simp [jetMatrix, ofLp_ofCoords]

lemma deriv_losTaylor23_lineJet1 (i : Fin 6) :
    deriv (fun t => losTaylor23 (lineJet 1 t) i) 0 = jetMatrix i 1 :=
  (hasDerivAt_losTaylor23_lineJet1 i).deriv

lemma eq_sum_single (v : Fin 6 → ℝ) :
    v = ∑ j : Fin 6, v j • Pi.single j (1 : ℝ) := by
  ext k
  simp only [Finset.sum_apply, Pi.smul_apply, smul_eq_mul, Pi.single_apply]
  rw [Finset.sum_eq_single k]
  · simp
  · intro j _ hjk
    have : k ≠ j := hjk.symm
    simp [this]
  · simp

lemma fderiv_losTaylor23_basis (j i : Fin 6) :
    fderiv ℝ losTaylor23 sStar (Pi.single j 1) i = jetMatrix i j := by
  rw [fderiv_losTaylor23_single]
  fin_cases j
  · exact deriv_losTaylor23_lineJet0 i
  · exact deriv_losTaylor23_lineJet1 i
  · exact deriv_losTaylor23_lineJet2 i
  · exact deriv_losTaylor23_lineJet3 i
  · exact deriv_losTaylor23_lineJet4 i
  · exact deriv_losTaylor23_lineJet5 i

lemma fderiv_losTaylor23_eq_toLin' :
    (fderiv ℝ losTaylor23 sStar : (Fin 6 → ℝ) →ₗ[ℝ] (Fin 6 → ℝ))
      = Matrix.toLin' jetMatrix := by
  apply LinearMap.ext
  intro v
  ext i
  change fderiv ℝ losTaylor23 sStar v i = Matrix.toLin' jetMatrix v i
  have hL :
      fderiv ℝ losTaylor23 sStar v i
        = ∑ j : Fin 6, v j * jetMatrix i j := by
    conv_lhs => rw [eq_sum_single v]
    simp only [map_sum, map_smul, Finset.sum_apply, Pi.smul_apply, smul_eq_mul]
    refine Finset.sum_congr rfl ?_
    intro j _
    simp [fderiv_losTaylor23_basis]
  have hR :
      Matrix.toLin' jetMatrix v i = ∑ j : Fin 6, jetMatrix i j * v j := by
    simp [Matrix.toLin'_apply, Matrix.mulVec, dotProduct]
  rw [hL, hR]
  refine Finset.sum_congr rfl ?_
  intro j _
  ring

def cartRadius : ℝ := 1 / 80

def sdCart (s : Fin 6 → ℝ) : Fin 6 → ℝ :=
  sdPairCoord
    (secondDiff (fun t => los obs (keplerIC s) t) hSD1)
    (secondDiff (fun t => los obs (keplerIC s) t) hSD2)

lemma secondDiff_add (f g : ℝ → Vec) (h : ℝ) :
    secondDiff (fun t => f t + g t) h = secondDiff f h + secondDiff g h := by
  ext i
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
  ring

lemma secondDiff_smul (c : ℝ) (f : ℝ → Vec) (h : ℝ) :
    secondDiff (fun t => c • f t) h = c • secondDiff f h := by
  ext i
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
  ring

lemma univF_zero (s : Fin 6 → ℝ) : univF s 0 = 0 := by
  simp [univF, stumpffC, stumpffS]

lemma hasFDerivAt_uncurry_univF (chi0 : ℝ) :
    HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (sStar, chi0)) (sStar, chi0) :=
  ((contDiffAt_uncurry_univF chi0).differentiableAt (by decide)).hasFDerivAt

lemma hasFDerivAt_pair_sStar (chi0 : ℝ) :
    HasFDerivAt (fun chi : ℝ => (sStar, chi))
      (ContinuousLinearMap.inr ℝ (Fin 6 → ℝ) ℝ) chi0 := by
  have hconst : HasFDerivAt (fun _ : ℝ => sStar)
      (0 : ℝ →L[ℝ] (Fin 6 → ℝ)) chi0 := hasFDerivAt_const _ _
  have hid : HasFDerivAt (fun chi : ℝ => chi) (ContinuousLinearMap.id ℝ ℝ) chi0 :=
    hasFDerivAt_id chi0
  exact hconst.prodMk hid

lemma fderiv_univF_comp_inr (chi0 : ℝ) :
    fderiv ℝ (Function.uncurry univF) (sStar, chi0) ∘L
        ContinuousLinearMap.inr ℝ (Fin 6 → ℝ) ℝ
      = ContinuousLinearMap.toSpanSingleton ℝ (5 / 2) := by
  apply ContinuousLinearMap.ext
  intro c
  have hjoint := hasFDerivAt_uncurry_univF chi0
  have hpair := hasFDerivAt_pair_sStar chi0
  have hcomp := hjoint.comp chi0 hpair
  have hchi : HasFDerivAt (univF sStar)
      (ContinuousLinearMap.toSpanSingleton ℝ (5 / 2)) chi0 := by
    rw [← univF_f2_sStar]
    exact hasFDerivAt_univF_chi_sStar chi0
  have : fderiv ℝ (Function.uncurry univF) (sStar, chi0)
        (ContinuousLinearMap.inr ℝ (Fin 6 → ℝ) ℝ c)
      = (5 / 2) * c := by
    have h1 := hcomp.unique hchi
    have := congrArg (fun L : ℝ →L[ℝ] ℝ => L c) h1
    simpa [ContinuousLinearMap.comp_apply, ContinuousLinearMap.toSpanSingleton_apply, mul_comm] using this
  simpa [ContinuousLinearMap.comp_apply, ContinuousLinearMap.toSpanSingleton_apply, mul_comm] using this


lemma univF_partial_chi_invertible (t : ℝ) :
    (fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) ∘L
        ContinuousLinearMap.inr ℝ (Fin 6 → ℝ) ℝ).IsInvertible := by
  rw [fderiv_univF_comp_inr]
  exact ContinuousLinearMap.IsInvertible.of_inverse
    (g := ContinuousLinearMap.toSpanSingleton ℝ (2 / 5))
    (by ext; simp) (by ext; simp)

lemma contDiffAt_uncurry_univF_two (t : ℝ) :
    ContDiffAt ℝ 2 (Function.uncurry univF) (sStar, 2 * t / 5) :=
  (contDiffAt_uncurry_univF (2 * t / 5)).of_le (by exact le_top)

noncomputable def chiSmooth (t : ℝ) : (Fin 6 → ℝ) → ℝ :=
  (contDiffAt_uncurry_univF_two t).implicitFunction
    (by decide) (univF_partial_chi_invertible t)

lemma chiSmooth_sStar (t : ℝ) : chiSmooth t sStar = 2 * t / 5 :=
  (contDiffAt_uncurry_univF_two t).implicitFunction_apply_self
    (by decide) (univF_partial_chi_invertible t)

lemma eventually_univF_chiSmooth (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, univF s (chiSmooth t s) = t := by
  have h := (contDiffAt_uncurry_univF_two t).eventually_apply_implicitFunction
    (by decide) (univF_partial_chi_invertible t)
  refine h.mono ?_
  intro s hs
  simpa [chiSmooth, Function.uncurry, univF_sStar] using hs

lemma contDiffAt_chiSmooth (t : ℝ) :
    ContDiffAt ℝ 2 (chiSmooth t) sStar :=
  (contDiffAt_uncurry_univF_two t).contDiffAt_implicitFunction
    (by decide) (univF_partial_chi_invertible t)

lemma eventually_chiOf_eq_chiSmooth (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, chiOf s t = chiSmooth t s := by
  have hiff := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t)
  have hsm := eventually_univF_chiSmooth t
  have htend : Tendsto (fun s => (s, chiSmooth t s)) (𝓝 sStar)
      (𝓝 (sStar, 2 * t / 5)) := by
    have hc := (contDiffAt_chiSmooth t).continuousAt
    have : Tendsto (chiSmooth t) (𝓝 sStar) (𝓝 (2 * t / 5)) := by
      simpa [chiSmooth_sStar] using hc.tendsto
    exact Tendsto.prodMk_nhds continuousAt_id.tendsto this
  have hiff' : ∀ᶠ s in 𝓝 sStar,
      univF s (chiSmooth t s) = t ↔ chiOf s t = chiSmooth t s := by
    have : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, 2 * t / 5),
        univF v.1 v.2 = t ↔
          implicitFunctionOfBivariate
              (eventually_hasFDerivAt_univF_s (2 * t / 5))
              (eventually_hasFDerivAt_univF_chi (2 * t / 5))
              (continuousAt_univF_f1 (2 * t / 5))
              (continuousAt_univF_f2 (2 * t / 5))
              (univF_f2_invertible t) v.1 = v.2 := by
      refine hiff.mono ?_
      intro v hv
      simpa [univF_sStar] using hv
    exact htend.eventually this
  filter_upwards [hiff', hsm] with s hiffs hs
  exact hiffs.mp hs

lemma contDiffAt_chiOf (t : ℝ) :
    ContDiffAt ℝ 2 (fun s => chiOf s t) sStar := by
  refine (contDiffAt_chiSmooth t).congr_of_eventuallyEq ?_
  filter_upwards [eventually_chiOf_eq_chiSmooth t] with s hs
  exact hs


lemma fg_f_ell {s : Fin 6 → ℝ} {chi : ℝ} (hα : 0 < alphaOf s) :
    fg_f s chi =
      1 - (1 - Real.cos (Real.sqrt (alphaOf s) * chi)) /
        (alphaOf s * rnorm s) := by
  unfold fg_f
  have hf := chiSq_mul_stumpffC (χ := chi) hα
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have : chi ^ 2 / rnorm s * stumpffC (alphaOf s * chi ^ 2)
      = (1 - Real.cos (Real.sqrt (alphaOf s) * chi)) / (alphaOf s * rnorm s) := by
    calc
      chi ^ 2 / rnorm s * stumpffC (alphaOf s * chi ^ 2)
          = (chi ^ 2 * stumpffC (alphaOf s * chi ^ 2)) / rnorm s := by ring
      _ = ((1 - Real.cos (Real.sqrt (alphaOf s) * chi)) / alphaOf s) / rnorm s := by
            rw [hf]
      _ = (1 - Real.cos (Real.sqrt (alphaOf s) * chi)) / (alphaOf s * rnorm s) := by
            field_simp [hα0]
  rw [this]

lemma fg_g_ell {s : Fin 6 → ℝ} {t chi : ℝ} (hα : 0 < alphaOf s) :
    fg_g s t chi =
      t - (chi / alphaOf s
        - Real.sin (Real.sqrt (alphaOf s) * chi)
          / (alphaOf s * Real.sqrt (alphaOf s))) := by
  unfold fg_g
  rw [chiCube_mul_stumpffS (χ := chi) hα]

lemma eventually_alphaOf_pos_prod (chi0 : ℝ) :
    ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, chi0), 0 < alphaOf v.1 := by
  have hαpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  have : Tendsto (fun v : (Fin 6 → ℝ) × ℝ => alphaOf v.1)
      (𝓝 (sStar, chi0)) (𝓝 (alphaOf sStar)) :=
    continuousAt_alphaOf_sStar.tendsto.comp (continuous_fst.tendsto (sStar, chi0))
  exact this.eventually (Ioi_mem_nhds hαpos)

lemma contDiffAt_fg_f_unc (chi0 : ℝ) :
    ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (sStar, chi0) := by
  have hαpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  have hr : rnorm sStar ≠ 0 := rnorm_sStar_ne
  have ha := (contDiffAt_alphaOf' hr).comp (sStar, chi0)
    (contDiff_fst.contDiffAt (x := (sStar, chi0)))
  have hn := (contDiffAt_rnorm hr).comp (sStar, chi0)
    (contDiff_fst.contDiffAt (x := (sStar, chi0)))
  have hchi : ContDiffAt ℝ ⊤ (fun v : (Fin 6 → ℝ) × ℝ => v.2)
      (sStar, chi0) := contDiff_snd.contDiffAt
  have hsqrt := (Real.contDiffAt_sqrt hαpos.ne').comp (sStar, chi0) ha
  have hωchi := hsqrt.mul hchi
  have hnum := (contDiffAt_const (c := (1 : ℝ))).sub hωchi.cos
  have hden := ha.mul hn
  have hdiv := hnum.div hden (by
    change alphaOf sStar * rnorm sStar ≠ 0
    rw [alphaOf_sStar, rnorm_sStar]; norm_num)
  have hell := (contDiffAt_const (c := (1 : ℝ))).sub hdiv
  refine hell.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_pos_prod chi0] with v hv
  exact fg_f_ell hv

lemma contDiffAt_fg_g_unc (t chi0 : ℝ) :
    ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (sStar, chi0) := by
  have hαpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
  have hr : rnorm sStar ≠ 0 := rnorm_sStar_ne
  have ha := (contDiffAt_alphaOf' hr).comp (sStar, chi0)
    (contDiff_fst.contDiffAt (x := (sStar, chi0)))
  have hchi : ContDiffAt ℝ ⊤ (fun v : (Fin 6 → ℝ) × ℝ => v.2)
      (sStar, chi0) := contDiff_snd.contDiffAt
  have hsqrt := (Real.contDiffAt_sqrt hαpos.ne').comp (sStar, chi0) ha
  have hωchi := hsqrt.mul hchi
  have hden2 := ha.mul hsqrt
  have hα0 : alphaOf sStar ≠ 0 := by rw [alphaOf_sStar]; norm_num
  have hω0 : Real.sqrt (alphaOf sStar) ≠ 0 :=
    Real.sqrt_ne_zero'.2 (by rw [alphaOf_sStar]; norm_num)
  have hfrac2 := hωchi.sin.div hden2 (mul_ne_zero hα0 hω0)
  have hfrac1 := hchi.div ha hα0
  have hell := (contDiffAt_const (c := t)).sub (hfrac1.sub hfrac2)
  refine hell.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_pos_prod chi0] with v hv
  exact fg_g_ell (t := t) (chi := v.2) hv

lemma contDiffAt_fg_f_chiOf (t : ℝ) :
    ContDiffAt ℝ 2 (fun s => fg_f s (chiOf s t)) sStar := by
  have hunc : ContDiffAt ℝ 2 (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (sStar, 2 * t / 5) :=
    (contDiffAt_fg_f_unc (2 * t / 5)).of_le (by exact le_top)
  have hpair : ContDiffAt ℝ 2 (fun s => (s, chiOf s t)) sStar :=
    contDiffAt_id.prodMk (contDiffAt_chiOf t)
  have hunc' : ContDiffAt ℝ 2 (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (sStar, chiOf sStar t) := by
    simpa [chiOf_sStar] using hunc
  change ContDiffAt ℝ 2 ((fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) ∘ fun s => (s, chiOf s t)) sStar
  exact hunc'.comp sStar hpair

lemma contDiffAt_fg_g_chiOf (t : ℝ) :
    ContDiffAt ℝ 2 (fun s => fg_g s t (chiOf s t)) sStar := by
  have hunc : ContDiffAt ℝ 2 (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (sStar, 2 * t / 5) :=
    (contDiffAt_fg_g_unc t (2 * t / 5)).of_le (by exact le_top)
  have hpair : ContDiffAt ℝ 2 (fun s => (s, chiOf s t)) sStar :=
    contDiffAt_id.prodMk (contDiffAt_chiOf t)
  have hunc' : ContDiffAt ℝ 2 (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (sStar, chiOf sStar t) := by
    simpa [chiOf_sStar] using hunc
  change ContDiffAt ℝ 2 ((fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) ∘ fun s => (s, chiOf s t)) sStar
  exact hunc'.comp sStar hpair

lemma contDiffAt_keplerIC (t : ℝ) :
    ContDiffAt ℝ 2 (fun s => keplerIC s t) sStar := by
  have hf := contDiffAt_fg_f_chiOf t
  have hg := contDiffAt_fg_g_chiOf t
  have hp : ContDiffAt ℝ 2 statePos sStar :=
    (contDiff_statePos.contDiffAt (x := sStar)).of_le (by exact le_top)
  have hv : ContDiffAt ℝ 2 stateVel sStar :=
    (contDiff_stateVel.contDiffAt (x := sStar)).of_le (by exact le_top)
  have h1 := hf.smul hp
  have h2 := hg.smul hv
  refine (h1.add h2).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [keplerIC]

lemma keplerIC_sStar_obs_ne (t : ℝ) :
    keplerIC sStar t ≠ obs t := by
  intro h
  have hx := keplerIC_sStar t
  have : circular (5 / 2) (Real.sqrt (8 / 125)) 0 t = circular 1 1 0 t := by
    simpa [obs, hx] using h
  have hL : ‖circular (5 / 2) (Real.sqrt (8 / 125)) 0 t‖ = (5 / 2 : ℝ) :=
    circular_norm _ _ _ _ (by norm_num)
  have hR : ‖circular 1 1 0 t‖ = (1 : ℝ) :=
    circular_norm _ _ _ _ (by norm_num)
  have : (5 / 2 : ℝ) = 1 := by rw [← hL, this, hR]
  norm_num at this

lemma contDiffAt_los_keplerIC (t : ℝ) :
    ContDiffAt ℝ 2 (fun s => los obs (keplerIC s) t) sStar := by
  have hx := contDiffAt_keplerIC t
  have hconst : ContDiffAt ℝ 2 (fun _ : Fin 6 → ℝ => obs t) sStar :=
    (contDiff_const (c := obs t)).contDiffAt.of_le (by exact le_top)
  have hsub : ContDiffAt ℝ 2 (fun s => keplerIC s t - obs t) sStar :=
    hx.sub hconst
  have hne : keplerIC sStar t - obs t ≠ 0 :=
    sub_ne_zero.mpr (keplerIC_sStar_obs_ne t)
  have hsq : ContDiffAt ℝ 2 (fun s => ‖keplerIC s t - obs t‖ ^ 2) sStar :=
    hsub.norm_sq ℝ
  have hnz : ‖keplerIC sStar t - obs t‖ ^ 2 ≠ 0 :=
    pow_ne_zero 2 (norm_ne_zero_iff.mpr hne)
  have hsqrt : ContDiffAt ℝ 2
      (fun s => Real.sqrt (‖keplerIC s t - obs t‖ ^ 2)) sStar :=
    hsq.sqrt hnz
  have hnorm : ContDiffAt ℝ 2 (fun s => ‖keplerIC s t - obs t‖) sStar := by
    refine hsqrt.congr_of_eventuallyEq ?_
    exact Eventually.of_forall fun s =>
      (Real.sqrt_sq (norm_nonneg (keplerIC s t - obs t))).symm
  have hinv : ContDiffAt ℝ 2 (fun s => ‖keplerIC s t - obs t‖⁻¹) sStar :=
    hnorm.inv (norm_ne_zero_iff.mpr hne)
  refine (hinv.smul hsub).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [los]

lemma contDiffAt_secondDiff_los (h : ℝ) :
    ContDiffAt ℝ 2
      (fun s => secondDiff (fun t => los obs (keplerIC s) t) h) sStar := by
  have h0 := contDiffAt_los_keplerIC 0
  have hh := contDiffAt_los_keplerIC h
  have h2 := contDiffAt_los_keplerIC (2 * h)
  have hsmul : ContDiffAt ℝ 2 (fun s => (2 : ℝ) • los obs (keplerIC s) h) sStar :=
    (contDiffAt_const (c := (2 : ℝ))).smul hh
  refine ((h0.sub hsmul).add h2).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [secondDiff]

lemma contDiff_sdPairCoord :
    ContDiff ℝ ⊤ (fun w : Vec × Vec => sdPairCoord w.1 w.2) := by
  refine contDiff_pi.2 fun i => ?_
  fin_cases i
  · exact (contDiff_ofLp_coord 0).comp contDiff_fst
  · exact (contDiff_ofLp_coord 1).comp contDiff_fst
  · exact (contDiff_ofLp_coord 2).comp contDiff_fst
  · exact (contDiff_ofLp_coord 0).comp contDiff_snd
  · exact (contDiff_ofLp_coord 1).comp contDiff_snd
  · exact (contDiff_ofLp_coord 2).comp contDiff_snd

lemma contDiffAt_sdCart : ContDiffAt ℝ 2 sdCart sStar := by
  have h1 := contDiffAt_secondDiff_los hSD1
  have h2 := contDiffAt_secondDiff_los hSD2
  have hpair := h1.prodMk h2
  have hsd : ContDiffAt ℝ 2 (fun w : Vec × Vec => sdPairCoord w.1 w.2)
      (secondDiff (fun t => los obs (keplerIC sStar) t) hSD1,
        secondDiff (fun t => los obs (keplerIC sStar) t) hSD2) :=
    (contDiff_sdPairCoord.contDiffAt).of_le (by exact le_top)
  refine (hsd.comp sStar hpair).congr_of_eventuallyEq ?_
  exact Eventually.of_forall fun s => by simp [sdCart]

lemma hasFDerivAt_sdCart :
    HasFDerivAt sdCart (fderiv ℝ sdCart sStar) sStar :=
  (contDiffAt_sdCart.differentiableAt (by decide)).hasFDerivAt

lemma hasFDerivAt_los_keplerIC (t : ℝ) :
    HasFDerivAt (fun s => los obs (keplerIC s) t)
      (fderiv ℝ (fun s => los obs (keplerIC s) t) sStar) sStar :=
  ((contDiffAt_los_keplerIC t).differentiableAt (by decide)).hasFDerivAt

lemma hasFDerivAt_secondDiff_los (h : ℝ) :
    HasFDerivAt (fun s => secondDiff (fun t => los obs (keplerIC s) t) h)
      (fderiv ℝ (fun s => secondDiff (fun t => los obs (keplerIC s) t) h) sStar)
      sStar :=
  ((contDiffAt_secondDiff_los h).differentiableAt (by decide)).hasFDerivAt

lemma fderiv_secondDiff_los (h : ℝ) (v : Fin 6 → ℝ) :
    fderiv ℝ (fun s => secondDiff (fun t => los obs (keplerIC s) t) h) sStar v =
      secondDiff (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar v) h := by
  have h0 := hasFDerivAt_los_keplerIC 0
  have hh := hasFDerivAt_los_keplerIC h
  have h2 := hasFDerivAt_los_keplerIC (2 * h)
  have hsmul : HasFDerivAt (fun s => (2 : ℝ) • los obs (keplerIC s) h)
      ((2 : ℝ) • fderiv ℝ (fun s => los obs (keplerIC s) h) sStar) sStar :=
    hh.const_smul (2 : ℝ)
  have hsum := (h0.sub hsmul).add h2
  have hCLM :
      fderiv ℝ (fun s => secondDiff (fun t => los obs (keplerIC s) t) h) sStar
        = fderiv ℝ (fun s => los obs (keplerIC s) 0) sStar
            - (2 : ℝ) • fderiv ℝ (fun s => los obs (keplerIC s) h) sStar
            + fderiv ℝ (fun s => los obs (keplerIC s) (2 * h)) sStar :=
    (hasFDerivAt_secondDiff_los h).unique
      (hsum.congr_of_eventuallyEq (Eventually.of_forall fun _ => by simp [secondDiff]))
  rw [hCLM]
  simp [secondDiff]

def clm_ofLp (i : Fin 3) : Vec →L[ℝ] ℝ :=
  (ContinuousLinearMap.proj (R := ℝ) (φ := fun _ : Fin 3 => ℝ) i).comp
    (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).toContinuousLinearMap

lemma clm_ofLp_apply (i : Fin 3) (w : Vec) : clm_ofLp i w = w.ofLp i := rfl

lemma fderiv_ofLp_comp {f : (Fin 6 → ℝ) → Vec}
    (hf : HasFDerivAt f (fderiv ℝ f sStar) sStar) (i : Fin 3) (v : Fin 6 → ℝ) :
    fderiv ℝ (fun s => (f s).ofLp i) sStar v = (fderiv ℝ f sStar v).ofLp i := by
  have hL : HasFDerivAt (fun w : Vec => w.ofLp i) (clm_ofLp i) (f sStar) :=
    (clm_ofLp i).hasFDerivAt
  have hcomp := hL.comp sStar hf
  have heq : (fun s => (f s).ofLp i) = (fun w : Vec => w.ofLp i) ∘ f := rfl
  rw [heq, hcomp.fderiv]
  simp [ContinuousLinearMap.comp_apply, clm_ofLp_apply]

lemma fderiv_eval_coord {f : (Fin 6 → ℝ) → (Fin 6 → ℝ)}
    (hf : HasFDerivAt f (fderiv ℝ f sStar) sStar) (i : Fin 6) (v : Fin 6 → ℝ) :
    fderiv ℝ f sStar v i = fderiv ℝ (fun s => f s i) sStar v := by
  have hproj : HasFDerivAt (fun y : Fin 6 → ℝ => y i)
      (ContinuousLinearMap.proj i) (f sStar) :=
    (ContinuousLinearMap.proj (R := ℝ) (φ := fun _ : Fin 6 => ℝ) i).hasFDerivAt
  have hcomp := hproj.comp sStar hf
  have heq : (fun s => f s i) = (fun y : Fin 6 → ℝ => y i) ∘ f := rfl
  rw [heq, hcomp.fderiv]
  simp [ContinuousLinearMap.comp_apply]

lemma fderiv_sdCart_apply (v : Fin 6 → ℝ) :
    fderiv ℝ sdCart sStar v =
      sdPairCoord
        (secondDiff (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar v) hSD1)
        (secondDiff (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar v) hSD2) := by
  have h1 := hasFDerivAt_secondDiff_los hSD1
  have h2 := hasFDerivAt_secondDiff_los hSD2
  have hsd := hasFDerivAt_sdCart
  have hcoord : ∀ i : Fin 6,
      fderiv ℝ sdCart sStar v i = fderiv ℝ (fun s => sdCart s i) sStar v :=
    fun i => fderiv_eval_coord hsd i v
  ext i
  rw [hcoord]
  have hA0 : fderiv ℝ (fun s => sdCart s 0) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD1).ofLp 0) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have hA1 : fderiv ℝ (fun s => sdCart s 1) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD1).ofLp 1) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have hA2 : fderiv ℝ (fun s => sdCart s 2) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD1).ofLp 2) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have hA3 : fderiv ℝ (fun s => sdCart s 3) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD2).ofLp 0) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have hA4 : fderiv ℝ (fun s => sdCart s 4) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD2).ofLp 1) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have hA5 : fderiv ℝ (fun s => sdCart s 5) sStar =
      fderiv ℝ (fun s =>
        (secondDiff (fun t => los obs (keplerIC s) t) hSD2).ofLp 2) sStar :=
    Filter.EventuallyEq.fderiv_eq (Eventually.of_forall fun s => by simp [sdCart, sdPairCoord])
  have i0 : i = 0 ∨ i = 1 ∨ i = 2 ∨ i = 3 ∨ i = 4 ∨ i = 5 := by
    fin_cases i <;> simp
  rcases i0 with rfl | rfl | rfl | rfl | rfl | rfl
  · rw [hA0, fderiv_ofLp_comp h1 0 v, fderiv_secondDiff_los]; simp [sdPairCoord]
  · rw [hA1, fderiv_ofLp_comp h1 1 v, fderiv_secondDiff_los]; simp [sdPairCoord]
  · rw [hA2, fderiv_ofLp_comp h1 2 v, fderiv_secondDiff_los]; simp [sdPairCoord]
  · rw [hA3, fderiv_ofLp_comp h2 0 v, fderiv_secondDiff_los]; simp [sdPairCoord]
  · rw [hA4, fderiv_ofLp_comp h2 1 v, fderiv_secondDiff_los]; simp [sdPairCoord]
  · rw [hA5, fderiv_ofLp_comp h2 2 v, fderiv_secondDiff_los]; simp [sdPairCoord]

lemma sigmaOf_lineJet2 (t : ℝ) : sigmaOf (lineJet 2 t) = 0 :=
  vecDot_lineJet2 t

lemma velNormSq_lineJet2 (t : ℝ) : ‖stateVel (lineJet 2 t)‖ ^ 2 = 2 / 5 := by
  rw [stateVel_lineJet2, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ 0 ^ 2 + (Real.sqrt 10 / 5) ^ 2 + 0 ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  field_simp
  rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma alphaOf_lineJet2 (t : ℝ) :
    alphaOf (lineJet 2 t) = 2 / Real.sqrt ((5 / 2) ^ 2 + t ^ 2) - 2 / 5 := by
  simp [alphaOf, rnorm_lineJet2, velNormSq_lineJet2]

lemma hasDerivAt_alphaOf_lineJet2 :
    HasDerivAt (fun t => alphaOf (lineJet 2 t)) 0 0 := by
  have hinv : HasDerivAt (fun t => (rnorm (lineJet 2 t))⁻¹) 0 0 :=
    hasDerivAt_rnorm_inv_lineJet2
  have h2 : HasDerivAt (fun t => (2 : ℝ) * (rnorm (lineJet 2 t))⁻¹) 0 0 :=
    (hinv.const_mul (2 : ℝ)).congr_deriv (by simp)
  have h := h2.sub_const (2 / 5 : ℝ)
  refine (h.congr_of_eventuallyEq (Eventually.of_forall fun t => ?_)).congr_deriv (by ring)
  simp [alphaOf, rnorm_lineJet2, velNormSq_lineJet2]
  field_simp

lemma eventually_univF_chiOf (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, univF s (chiOf s t) = t := by
  filter_upwards [eventually_chiOf_eq_chiSmooth t, eventually_univF_chiSmooth t]
    with s hs hsm
  rw [hs, hsm]

def eZ : Vec := ofCoords 0 0 1

def nStar : ℝ := Real.sqrt (8 / 125)

lemma nStar_pos : 0 < nStar := Real.sqrt_pos.2 (by norm_num)

lemma nStar_ne : nStar ≠ 0 := nStar_pos.ne'

lemma hasDerivAt_even_zero {f : ℝ → ℝ} {f' : ℝ}
    (hf : HasDerivAt f f' 0) (heven : ∀ ε, f (-ε) = f ε) : f' = 0 := by
  have hneg : HasDerivAt (fun ε : ℝ => -ε) (-1 : ℝ) 0 := hasDerivAt_neg 0
  have hf0 : HasDerivAt f f' (-(0 : ℝ)) := by
    convert hf
    simp
  have hcomp : HasDerivAt (fun ε => f (-ε)) (f' * (-1)) 0 := hf0.comp 0 hneg
  have hcomp' : HasDerivAt (fun ε => f (-ε)) (-f') 0 :=
    hcomp.congr_deriv (by ring)
  have : HasDerivAt f (-f') 0 :=
    hcomp'.congr_of_eventuallyEq (Eventually.of_forall fun ε => (heven ε).symm)
  linarith [hf.unique this]

lemma rnorm_lineJet2_even (ε : ℝ) :
    rnorm (lineJet 2 (-ε)) = rnorm (lineJet 2 ε) := by
  simp [rnorm_lineJet2]

lemma velNormSq_lineJet5 (ε : ℝ) :
    ‖stateVel (lineJet 5 ε)‖ ^ 2 = 2 / 5 + ε ^ 2 := by
  rw [stateVel_lineJet5, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ 0 ^ 2 + (Real.sqrt 10 / 5) ^ 2 + ε ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  have hs : (Real.sqrt 10 / 5) ^ 2 = 2 / 5 := by
    field_simp
    rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
    norm_num
  rw [hs]
  ring

lemma alphaOf_lineJet5 (ε : ℝ) : alphaOf (lineJet 5 ε) = 2 / 5 - ε ^ 2 := by
  simp [alphaOf, rnorm_lineJet5, velNormSq_lineJet5]
  ring

lemma sigmaOf_lineJet5 (ε : ℝ) : sigmaOf (lineJet 5 ε) = 0 :=
  vecDot_lineJet5 ε

lemma univF_lineJet2_even (χ ε : ℝ) :
    univF (lineJet 2 (-ε)) χ = univF (lineJet 2 ε) χ := by
  simp [univF, alphaOf_lineJet2, rnorm_lineJet2, sigmaOf_lineJet2]

lemma univF_lineJet5_even (χ ε : ℝ) :
    univF (lineJet 5 (-ε)) χ = univF (lineJet 5 ε) χ := by
  simp [univF, alphaOf_lineJet5, rnorm_lineJet5, sigmaOf_lineJet5]

lemma hasDerivAt_pair_lineJet_const (j : Fin 6) (χ : ℝ) (ε : ℝ) :
    HasDerivAt (fun δ => (lineJet j δ, χ)) (Pi.single j (1 : ℝ), (0 : ℝ)) ε := by
  exact (hasDerivAt_lineJet j ε).prodMk (hasDerivAt_const ε χ)

lemma differentiableAt_univF_lineJet (j : Fin 6) (χ : ℝ) :
    DifferentiableAt ℝ (fun ε => univF (lineJet j ε) χ) 0 := by
  have hU : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (sStar, χ)) (sStar, χ) :=
    hasFDerivAt_uncurry_univF χ
  have hp := hasDerivAt_pair_lineJet_const j χ 0
  have hU' : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (lineJet j 0, χ)) (lineJet j 0, χ) := by
    rw [lineJet_zero]; exact hU
  exact (hU'.comp_hasDerivAt 0 hp).differentiableAt

lemma hasDerivAt_univF_lineJet2_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 2 ε) χ) 0 0 := by
  have hf := (differentiableAt_univF_lineJet 2 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (univF_lineJet2_even χ))

lemma hasDerivAt_univF_lineJet5_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 5 ε) χ) 0 0 := by
  have hf := (differentiableAt_univF_lineJet 5 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (univF_lineJet5_even χ))

lemma hasFDerivAt_keplerIC (t : ℝ) :
    HasFDerivAt (fun s => keplerIC s t)
      (fderiv ℝ (fun s => keplerIC s t) sStar) sStar :=
  ((contDiffAt_keplerIC t).differentiableAt (by decide)).hasFDerivAt

lemma hasDerivAt_chiOf_lineJet (j : Fin 6) (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet j ε) t)
      (fderiv ℝ (fun s => chiOf s t) sStar (Pi.single j 1)) 0 := by
  have hf : HasFDerivAt (fun s => chiOf s t)
      (fderiv ℝ (fun s => chiOf s t) sStar) (lineJet j 0) := by
    rw [lineJet_zero]
    exact ((contDiffAt_chiOf t).differentiableAt (by decide)).hasFDerivAt
  exact hf.comp_hasDerivAt 0 (hasDerivAt_lineJet j 0)

lemma tendsto_lineJet (j : Fin 6) : Tendsto (lineJet j) (𝓝 0) (𝓝 sStar) := by
  simpa [lineJet_zero] using (hasDerivAt_lineJet j 0).continuousAt.tendsto

lemma univF_fderiv_inr (χ0 c : ℝ) :
    fderiv ℝ (Function.uncurry univF) (sStar, χ0) (0, c) = (5 / 2) * c := by
  have := congrArg (fun L : ℝ →L[ℝ] ℝ => L c) (fderiv_univF_comp_inr χ0)
  have h : fderiv ℝ (Function.uncurry univF) (sStar, χ0) (0, c) = c * (5 / 2) := by
    simpa [ContinuousLinearMap.comp_apply, ContinuousLinearMap.inr_apply,
      ContinuousLinearMap.toSpanSingleton_apply] using this
  rw [h, mul_comm]

lemma hasDerivAt_chiOf_axis {j : Fin 6} (t : ℝ)
    (hfixed : HasDerivAt (fun ε => univF (lineJet j ε) (2 * t / 5)) 0 0) :
    HasDerivAt (fun ε => chiOf (lineJet j ε) t) 0 0 := by
  have hχ := hasDerivAt_chiOf_lineJet j t
  have hF : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    hasFDerivAt_uncurry_univF (2 * t / 5)
  set χ' := fderiv ℝ (fun s => chiOf s t) sStar (Pi.single j 1)
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), χ') 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hid : HasDerivAt (fun ε => univF (lineJet j ε) (chiOf (lineJet j ε) t)) 0 0 := by
    refine (hasDerivAt_const 0 t).congr_of_eventuallyEq ?_
    exact (tendsto_lineJet j).eventually (eventually_univF_chiOf t)
  have huniq := hcomp.unique hid
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have h0 := hcomp0.unique hfixed
  have hlin :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (Pi.single j 1, χ') = 0 := by
    have hpt : (lineJet j 0, chiOf (lineJet j 0) t) = (sStar, 2 * t / 5) := by
      simp [lineJet_zero, chiOf_sStar]
    simpa [hpt, χ'] using huniq
  have hlin0 :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (Pi.single j 1, (0 : ℝ)) = 0 := by
    have hpt : lineJet j 0 = sStar := lineJet_zero j
    simpa [hpt] using h0
  have hdiff :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (0, χ') = 0 := by
    have hL :=
      (map_sub (fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5))
        (Pi.single j (1 : ℝ), χ') (Pi.single j (1 : ℝ), (0 : ℝ)))
    have hsub : (Pi.single j (1 : ℝ), χ') - (Pi.single j (1 : ℝ), (0 : ℝ))
        = ((0 : Fin 6 → ℝ), χ') := by
      apply Prod.ext
      · simp
      · simp
    rw [← hsub, hL, hlin, hlin0, sub_zero]
  have hmul : (5 / 2 : ℝ) * χ' = 0 := by
    rw [← univF_fderiv_inr (2 * t / 5) χ', hdiff]
  have hχ0 : χ' = 0 := by
    have h52 : (5 / 2 : ℝ) ≠ 0 := by norm_num
    exact (mul_eq_zero.mp hmul).resolve_left h52
  exact hχ.congr_deriv hχ0

lemma hasDerivAt_chiOf_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 2 ε) t) 0 0 :=
  hasDerivAt_chiOf_axis t (hasDerivAt_univF_lineJet2_fixed (2 * t / 5))

lemma hasDerivAt_chiOf_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 5 ε) t) 0 0 :=
  hasDerivAt_chiOf_axis t (hasDerivAt_univF_lineJet5_fixed (2 * t / 5))

lemma fg_f_lineJet2_even (χ ε : ℝ) :
    fg_f (lineJet 2 (-ε)) χ = fg_f (lineJet 2 ε) χ := by
  simp [fg_f, alphaOf_lineJet2, rnorm_lineJet2]

lemma fg_f_lineJet5_even (χ ε : ℝ) :
    fg_f (lineJet 5 (-ε)) χ = fg_f (lineJet 5 ε) χ := by
  simp [fg_f, alphaOf_lineJet5, rnorm_lineJet5]

lemma fg_g_lineJet2_even (t χ ε : ℝ) :
    fg_g (lineJet 2 (-ε)) t χ = fg_g (lineJet 2 ε) t χ := by
  simp [fg_g, alphaOf_lineJet2]

lemma fg_g_lineJet5_even (t χ ε : ℝ) :
    fg_g (lineJet 5 (-ε)) t χ = fg_g (lineJet 5 ε) t χ := by
  simp [fg_g, alphaOf_lineJet5]

lemma differentiableAt_fg_f_lineJet (j : Fin 6) (χ : ℝ) :
    DifferentiableAt ℝ (fun ε => fg_f (lineJet j ε) χ) 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ) :=
    contDiffAt_fg_f_unc χ
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ)) (sStar, χ) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hp := hasDerivAt_pair_lineJet_const j χ 0
  have hF' : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (lineJet j 0, χ))
      (lineJet j 0, χ) := by
    rw [lineJet_zero]; exact hF
  exact (hF'.comp_hasDerivAt 0 hp).differentiableAt

lemma differentiableAt_fg_g_lineJet (j : Fin 6) (t χ : ℝ) :
    DifferentiableAt ℝ (fun ε => fg_g (lineJet j ε) t χ) 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ) :=
    contDiffAt_fg_g_unc t χ
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ)) (sStar, χ) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hp := hasDerivAt_pair_lineJet_const j χ 0
  have hF' : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (lineJet j 0, χ))
      (lineJet j 0, χ) := by
    rw [lineJet_zero]; exact hF
  exact (hF'.comp_hasDerivAt 0 hp).differentiableAt

lemma hasDerivAt_fg_f_lineJet2_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 2 ε) χ) 0 0 := by
  have hf := (differentiableAt_fg_f_lineJet 2 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_f_lineJet2_even χ))

lemma hasDerivAt_fg_f_lineJet5_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 5 ε) χ) 0 0 := by
  have hf := (differentiableAt_fg_f_lineJet 5 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_f_lineJet5_even χ))

lemma hasDerivAt_fg_g_lineJet2_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 2 ε) t χ) 0 0 := by
  have hf := (differentiableAt_fg_g_lineJet 2 t χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_g_lineJet2_even t χ))

lemma hasDerivAt_fg_g_lineJet5_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 5 ε) t χ) 0 0 := by
  have hf := (differentiableAt_fg_g_lineJet 5 t χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_g_lineJet5_even t χ))

lemma hasDerivAt_fg_f_chiOf_axis {j : Fin 6} (t : ℝ)
    (hχ : HasDerivAt (fun ε => chiOf (lineJet j ε) t) 0 0)
    (hfixed : HasDerivAt (fun ε => fg_f (lineJet j ε) (2 * t / 5)) 0 0) :
    HasDerivAt (fun ε => fg_f (lineJet j ε) (chiOf (lineJet j ε) t)) 0 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (sStar, 2 * t / 5) :=
    contDiffAt_fg_f_unc (2 * t / 5)
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), (0 : ℝ)) 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
        (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have hpt : chiOf (lineJet j 0) t = 2 * t / 5 := by
    rw [lineJet_zero, chiOf_sStar]
  rw [hpt] at hcomp
  exact hcomp.congr_deriv (hcomp0.unique hfixed)

lemma hasDerivAt_fg_g_chiOf_axis {j : Fin 6} (t : ℝ)
    (hχ : HasDerivAt (fun ε => chiOf (lineJet j ε) t) 0 0)
    (hfixed : HasDerivAt (fun ε => fg_g (lineJet j ε) t (2 * t / 5)) 0 0) :
    HasDerivAt (fun ε => fg_g (lineJet j ε) t (chiOf (lineJet j ε) t)) 0 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (sStar, 2 * t / 5) :=
    contDiffAt_fg_g_unc t (2 * t / 5)
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), (0 : ℝ)) 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
        (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have hpt : chiOf (lineJet j 0) t = 2 * t / 5 := by
    rw [lineJet_zero, chiOf_sStar]
  rw [hpt] at hcomp
  exact hcomp.congr_deriv (hcomp0.unique hfixed)

lemma hasDerivAt_fg_f_chiOf_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 2 ε) (chiOf (lineJet 2 ε) t)) 0 0 :=
  hasDerivAt_fg_f_chiOf_axis t (hasDerivAt_chiOf_lineJet2 t)
    (hasDerivAt_fg_f_lineJet2_fixed (2 * t / 5))

lemma hasDerivAt_fg_f_chiOf_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 5 ε) (chiOf (lineJet 5 ε) t)) 0 0 :=
  hasDerivAt_fg_f_chiOf_axis t (hasDerivAt_chiOf_lineJet5 t)
    (hasDerivAt_fg_f_lineJet5_fixed (2 * t / 5))

lemma hasDerivAt_fg_g_chiOf_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 2 ε) t (chiOf (lineJet 2 ε) t)) 0 0 :=
  hasDerivAt_fg_g_chiOf_axis t (hasDerivAt_chiOf_lineJet2 t)
    (hasDerivAt_fg_g_lineJet2_fixed t (2 * t / 5))

lemma hasDerivAt_fg_g_chiOf_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 5 ε) t (chiOf (lineJet 5 ε) t)) 0 0 :=
  hasDerivAt_fg_g_chiOf_axis t (hasDerivAt_chiOf_lineJet5 t)
    (hasDerivAt_fg_g_lineJet5_fixed t (2 * t / 5))

lemma hasDerivAt_statePos_lineJet5 :
    HasDerivAt (fun ε => statePos (lineJet 5 ε)) (0 : Vec) 0 := by
  have h := hasDerivAt_const (0 : ℝ) (ofCoords (5 / 2) 0 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall statePos_lineJet5)

lemma hasDerivAt_stateVel_lineJet5 :
    HasDerivAt (fun ε => stateVel (lineJet 5 ε)) eZ 0 := by
  have h : HasDerivAt (fun ε => ofCoords 0 (Real.sqrt 10 / 5) ε) (ofCoords 0 0 1) 0 :=
    hasDerivAt_coord3 (hasDerivAt_const (0 : ℝ) (0 : ℝ))
      (hasDerivAt_const (0 : ℝ) (Real.sqrt 10 / 5)) (hasDerivAt_id (0 : ℝ))
  have heq : (fun ε => stateVel (lineJet 5 ε)) = fun ε => ofCoords 0 (Real.sqrt 10 / 5) ε :=
    funext stateVel_lineJet5
  rw [heq, eZ]
  exact h

lemma keplerIC_lineJet_apply (j : Fin 6) (ε t : ℝ) :
    keplerIC (lineJet j ε) t =
      fg_f (lineJet j ε) (chiOf (lineJet j ε) t) • statePos (lineJet j ε) +
        fg_g (lineJet j ε) t (chiOf (lineJet j ε) t) • stateVel (lineJet j ε) :=
  rfl

lemma hasDerivAt_keplerIC_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 2 ε) t)
      (Real.cos (nStar * t) • eZ) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet2 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet2 t
  have hp := hasDerivAt_pos_lineJet2
  have hv := hasDerivAt_vel_lineJet2
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hf0 : fg_f sStar (2 * t / 5) = Real.cos (nStar * t) := by
    rw [nStar, fg_f_sStar]
  have hder :
      (0 : ℝ) • statePos (lineJet 2 0) +
          fg_f (lineJet 2 0) (chiOf (lineJet 2 0) t) • ofCoords 0 0 1 +
          ((0 : ℝ) • stateVel (lineJet 2 0) +
            fg_g (lineJet 2 0) t (chiOf (lineJet 2 0) t) • (0 : Vec))
        = Real.cos (nStar * t) • eZ := by
    simp [lineJet_zero, chiOf_sStar, hf0, eZ]
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 2 ε t)).congr_deriv ?_
  simpa [lineJet_zero, chiOf_sStar] using hder

lemma hasDerivAt_keplerIC_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 5 ε) t)
      ((Real.sin (nStar * t) / nStar) • eZ) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet5 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet5 t
  have hp := hasDerivAt_statePos_lineJet5
  have hv := hasDerivAt_stateVel_lineJet5
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hg0 : fg_g sStar t (2 * t / 5) = Real.sin (nStar * t) / nStar := by
    rw [nStar, fg_g_sStar]
  have hder :
      (0 : ℝ) • statePos (lineJet 5 0) +
          fg_f (lineJet 5 0) (chiOf (lineJet 5 0) t) • (0 : Vec) +
          ((0 : ℝ) • stateVel (lineJet 5 0) +
            fg_g (lineJet 5 0) t (chiOf (lineJet 5 0) t) • eZ)
        = (Real.sin (nStar * t) / nStar) • eZ := by
    simp [lineJet_zero, chiOf_sStar, hg0]
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 5 ε t)).congr_deriv ?_
  simpa [lineJet_zero, chiOf_sStar] using hder

lemma fderiv_keplerIC_ez (t : ℝ) :
    fderiv ℝ (fun s => keplerIC s t) sStar (Pi.single 2 1)
      = Real.cos (nStar * t) • eZ := by
  have hf : HasFDerivAt (fun s => keplerIC s t)
      (fderiv ℝ (fun s => keplerIC s t) sStar) (lineJet 2 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_keplerIC t
  exact (hf.comp_hasDerivAt 0 (hasDerivAt_lineJet 2 0)).unique
    (hasDerivAt_keplerIC_lineJet2 t)

lemma fderiv_keplerIC_evz (t : ℝ) :
    fderiv ℝ (fun s => keplerIC s t) sStar (Pi.single 5 1)
      = (Real.sin (nStar * t) / nStar) • eZ := by
  have hf : HasFDerivAt (fun s => keplerIC s t)
      (fderiv ℝ (fun s => keplerIC s t) sStar) (lineJet 5 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_keplerIC t
  exact (hf.comp_hasDerivAt 0 (hasDerivAt_lineJet 5 0)).unique
    (hasDerivAt_keplerIC_lineJet5 t)

lemma ofCoords_ofLp2 (x y z : ℝ) : (ofCoords x y z).ofLp 2 = z := by
  simp [ofCoords, ofLp_ofCoords]

lemma eZ_ofLp : eZ.ofLp 0 = 0 ∧ eZ.ofLp 1 = 0 ∧ eZ.ofLp 2 = 1 := by
  simp [eZ, ofCoords_ofLp2, ofLp_ofCoords]

lemma circular_ofLp2 (R ω φ t : ℝ) : (circular R ω φ t).ofLp 2 = 0 := by
  simp [circular, ofCoords_ofLp2]

lemma obs_ofLp2 (t : ℝ) : (obs t).ofLp 2 = 0 := circular_ofLp2 _ _ _ _

lemma keplerIC_sStar_ofLp2 (t : ℝ) : (keplerIC sStar t).ofLp 2 = 0 := by
  rw [keplerIC_sStar, circular_ofLp2]

lemma keplerIC_apply_ofLp2 (s : Fin 6 → ℝ) (t : ℝ) :
    (keplerIC s t).ofLp 2 =
      fg_f s (chiOf s t) * s 2 + fg_g s t (chiOf s t) * s 5 := by
  simp [keplerIC, statePos, stateVel, ofCoords, PiLp.smul_apply, PiLp.add_apply,
    smul_eq_mul, ofLp_ofCoords]

lemma lineJet_coord (j : Fin 6) (ε : ℝ) (i : Fin 6) :
    lineJet j ε i = sStar i + if i = j then ε else 0 := by
  simp [lineJet, Pi.add_apply, Pi.smul_apply, smul_eq_mul, Pi.single_apply]

lemma lineJet_z_of_ne (j : Fin 6) (hj : j ≠ 2) (ε : ℝ) : lineJet j ε 2 = 0 := by
  rw [lineJet_coord]
  simp [sStar, hj.symm]

lemma lineJet_vz_of_ne (j : Fin 6) (hj : j ≠ 5) (ε : ℝ) : lineJet j ε 5 = 0 := by
  rw [lineJet_coord]
  simp [sStar, hj.symm]

lemma keplerIC_inplane_z (j : Fin 6) (hj2 : j ≠ 2) (hj5 : j ≠ 5) (ε t : ℝ) :
    (keplerIC (lineJet j ε) t).ofLp 2 = 0 := by
  rw [keplerIC_apply_ofLp2, lineJet_z_of_ne j hj2, lineJet_vz_of_ne j hj5]
  ring

lemma fderiv_keplerIC_inplane_z (j : Fin 6) (hj2 : j ≠ 2) (hj5 : j ≠ 5) (t : ℝ) :
    (fderiv ℝ (fun s => keplerIC s t) sStar (Pi.single j 1)).ofLp 2 = 0 := by
  have hf : HasFDerivAt (fun s => keplerIC s t)
      (fderiv ℝ (fun s => keplerIC s t) sStar) (lineJet j 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_keplerIC t
  have hcomp := hf.comp_hasDerivAt 0 (hasDerivAt_lineJet j 0)
  have hz : HasDerivAt (fun ε => (keplerIC (lineJet j ε) t).ofLp 2) 0 0 := by
    have hconst : HasDerivAt (fun _ : ℝ => (0 : ℝ)) 0 0 := hasDerivAt_const _ _
    exact hconst.congr_of_eventuallyEq
      (Eventually.of_forall fun ε => keplerIC_inplane_z j hj2 hj5 ε t)
  have hL : HasFDerivAt (fun w : Vec => w.ofLp 2) (clm_ofLp 2)
      (keplerIC (lineJet j 0) t) :=
    (clm_ofLp 2).hasFDerivAt
  have hcoord := hL.comp_hasDerivAt 0 hcomp
  have : (fderiv ℝ (fun s => keplerIC s t) sStar (Pi.single j 1)).ofLp 2 = 0 :=
    hcoord.unique hz
  exact this

def rhoStar (t : ℝ) : ℝ := ‖keplerIC sStar t - obs t‖

lemma rhoStar_pos (t : ℝ) : 0 < rhoStar t :=
  norm_pos_iff.mpr (sub_ne_zero.mpr (keplerIC_sStar_obs_ne t))

lemma rhoStar_ne (t : ℝ) : rhoStar t ≠ 0 := (rhoStar_pos t).ne'

lemma kepler_obs_ofLp2 (t : ℝ) : (keplerIC sStar t - obs t).ofLp 2 = 0 := by
  simp [PiLp.sub_apply, keplerIC_sStar_ofLp2, obs_ofLp2]

lemma inner_kepler_obs_eZ (t : ℝ) :
    ⟪keplerIC sStar t - obs t, eZ⟫ = 0 := by
  rw [← vecDot_eq_inner]
  simp [vecDot, eZ, ofLp_ofCoords, Fin.sum_univ_three]
  simp [keplerIC_sStar_ofLp2, obs_ofLp2]

lemma hasDerivAt_kepler_obs_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 2 ε) t - obs t)
      (Real.cos (nStar * t) • eZ) 0 :=
  (hasDerivAt_keplerIC_lineJet2 t).sub_const (obs t)

lemma hasDerivAt_kepler_obs_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 5 ε) t - obs t)
      ((Real.sin (nStar * t) / nStar) • eZ) 0 :=
  (hasDerivAt_keplerIC_lineJet5 t).sub_const (obs t)

lemma hasDerivAt_norm_vec {f : ℝ → Vec} {f' : Vec} {x : ℝ}
    (hf : HasDerivAt f f' x) (hne : f x ≠ 0) :
    HasDerivAt (fun t => ‖f t‖) (⟪f x, f'⟫ / ‖f x‖) x := by
  have hne' : ‖f x‖ ≠ 0 := norm_ne_zero_iff.mpr hne
  have hsq' := hf.norm_sq
  have hpos : 0 < ‖f x‖ ^ 2 := sq_pos_of_ne_zero hne'
  have hsqrt : HasDerivAt (fun u : ℝ => Real.sqrt u)
      ((1 : ℝ) / (2 * Real.sqrt (‖f x‖ ^ 2))) (‖f x‖ ^ 2) :=
    Real.hasDerivAt_sqrt hpos.ne'
  have hcomp := hsqrt.comp x hsq'
  have hnn : 0 ≤ ‖f x‖ := norm_nonneg _
  refine (hcomp.congr_of_eventuallyEq (Eventually.of_forall fun t => ?_)).congr_deriv ?_
  · simpa using Real.sqrt_sq (norm_nonneg (f t))
  rw [Real.sqrt_sq hnn]
  ring

lemma hasDerivAt_rho_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => ‖keplerIC (lineJet 2 ε) t - obs t‖) 0 0 := by
  have hf := hasDerivAt_kepler_obs_lineJet2 t
  have hne : keplerIC (lineJet 2 0) t - obs t ≠ 0 := by
    rw [lineJet_zero]; exact sub_ne_zero.mpr (keplerIC_sStar_obs_ne t)
  have h := hasDerivAt_norm_vec hf hne
  have hin : ⟪keplerIC (lineJet 2 0) t - obs t, Real.cos (nStar * t) • eZ⟫ = 0 := by
    rw [lineJet_zero, inner_smul_right, inner_kepler_obs_eZ, mul_zero]
  exact h.congr_deriv (by simp [hin])

lemma hasDerivAt_rho_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => ‖keplerIC (lineJet 5 ε) t - obs t‖) 0 0 := by
  have hf := hasDerivAt_kepler_obs_lineJet5 t
  have hne : keplerIC (lineJet 5 0) t - obs t ≠ 0 := by
    rw [lineJet_zero]; exact sub_ne_zero.mpr (keplerIC_sStar_obs_ne t)
  have h := hasDerivAt_norm_vec hf hne
  have hin :
      ⟪keplerIC (lineJet 5 0) t - obs t, (Real.sin (nStar * t) / nStar) • eZ⟫ = 0 := by
    rw [lineJet_zero, inner_smul_right, inner_kepler_obs_eZ, mul_zero]
  exact h.congr_deriv (by simp [hin])

lemma los_kepler_apply (s : Fin 6 → ℝ) (t : ℝ) :
    los obs (keplerIC s) t =
      ‖keplerIC s t - obs t‖⁻¹ • (keplerIC s t - obs t) :=
  rfl

lemma hasDerivAt_los_lineJet2 (t : ℝ) :
    HasDerivAt (fun ε => los obs (keplerIC (lineJet 2 ε)) t)
      ((Real.cos (nStar * t) / rhoStar t) • eZ) 0 := by
  have hr := hasDerivAt_rho_lineJet2 t
  have hg := hasDerivAt_kepler_obs_lineJet2 t
  have hne : ‖keplerIC (lineJet 2 0) t - obs t‖ ≠ 0 := by
    rw [lineJet_zero]; exact rhoStar_ne t
  have hinv : HasDerivAt (fun ε => ‖keplerIC (lineJet 2 ε) t - obs t‖⁻¹) 0 0 := by
    have := hr.inv hne
    exact this.congr_deriv (by simp)
  have hsmul := hinv.smul hg
  have hval :
      (0 : ℝ) • (keplerIC (lineJet 2 0) t - obs t)
          + ‖keplerIC (lineJet 2 0) t - obs t‖⁻¹ • (Real.cos (nStar * t) • eZ)
        = (Real.cos (nStar * t) / rhoStar t) • eZ := by
    simp [lineJet_zero, rhoStar, smul_smul, div_eq_inv_mul]
  refine (hsmul.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => los_kepler_apply (lineJet 2 ε) t)).congr_deriv ?_
  simpa using hval

lemma hasDerivAt_los_lineJet5 (t : ℝ) :
    HasDerivAt (fun ε => los obs (keplerIC (lineJet 5 ε)) t)
      (((Real.sin (nStar * t) / nStar) / rhoStar t) • eZ) 0 := by
  have hr := hasDerivAt_rho_lineJet5 t
  have hg := hasDerivAt_kepler_obs_lineJet5 t
  have hne : ‖keplerIC (lineJet 5 0) t - obs t‖ ≠ 0 := by
    rw [lineJet_zero]; exact rhoStar_ne t
  have hinv : HasDerivAt (fun ε => ‖keplerIC (lineJet 5 ε) t - obs t‖⁻¹) 0 0 := by
    have := hr.inv hne
    exact this.congr_deriv (by simp)
  have hsmul := hinv.smul hg
  have hval :
      (0 : ℝ) • (keplerIC (lineJet 5 0) t - obs t)
          + ‖keplerIC (lineJet 5 0) t - obs t‖⁻¹ •
            ((Real.sin (nStar * t) / nStar) • eZ)
        = (((Real.sin (nStar * t) / nStar) / rhoStar t) • eZ) := by
    simp [lineJet_zero, rhoStar, smul_smul, div_eq_inv_mul]
  refine (hsmul.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => los_kepler_apply (lineJet 5 ε) t)).congr_deriv ?_
  simpa using hval

lemma fderiv_los_keplerIC_ez (t : ℝ) :
    fderiv ℝ (fun s => los obs (keplerIC s) t) sStar (Pi.single 2 1)
      = (Real.cos (nStar * t) / rhoStar t) • eZ := by
  have hf : HasFDerivAt (fun s => los obs (keplerIC s) t)
      (fderiv ℝ (fun s => los obs (keplerIC s) t) sStar) (lineJet 2 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_los_keplerIC t
  exact (hf.comp_hasDerivAt 0 (hasDerivAt_lineJet 2 0)).unique
    (hasDerivAt_los_lineJet2 t)

lemma fderiv_los_keplerIC_evz (t : ℝ) :
    fderiv ℝ (fun s => los obs (keplerIC s) t) sStar (Pi.single 5 1)
      = ((Real.sin (nStar * t) / nStar) / rhoStar t) • eZ := by
  have hf : HasFDerivAt (fun s => los obs (keplerIC s) t)
      (fderiv ℝ (fun s => los obs (keplerIC s) t) sStar) (lineJet 5 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_los_keplerIC t
  exact (hf.comp_hasDerivAt 0 (hasDerivAt_lineJet 5 0)).unique
    (hasDerivAt_los_lineJet5 t)

lemma secondDiff_smul_eZ (φ : ℝ → ℝ) (h : ℝ) :
    secondDiff (fun t => φ t • eZ) h = (φ 0 - 2 * φ h + φ (2 * h)) • eZ := by
  ext i
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul]
  ring

def phiZ (t : ℝ) : ℝ := Real.cos (nStar * t) / rhoStar t

def phiVz (t : ℝ) : ℝ := (Real.sin (nStar * t) / nStar) / rhoStar t

lemma fderiv_secondDiff_los_ez (h : ℝ) :
    secondDiff (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar
      (Pi.single 2 1)) h
      = (phiZ 0 - 2 * phiZ h + phiZ (2 * h)) • eZ := by
  have heq : (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar (Pi.single 2 1))
      = fun t => phiZ t • eZ :=
    funext fun t => by simp [fderiv_los_keplerIC_ez, phiZ]
  rw [heq, secondDiff_smul_eZ]

lemma fderiv_secondDiff_los_evz (h : ℝ) :
    secondDiff (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar
      (Pi.single 5 1)) h
      = (phiVz 0 - 2 * phiVz h + phiVz (2 * h)) • eZ := by
  have heq : (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar (Pi.single 5 1))
      = fun t => phiVz t • eZ :=
    funext fun t => by simp [fderiv_los_keplerIC_evz, phiVz]
  rw [heq, secondDiff_smul_eZ]

lemma sdPairCoord_smul_eZ (a b : ℝ) :
    sdPairCoord (a • eZ) (b • eZ) = ![0, 0, a, 0, 0, b] := by
  simp [sdPairCoord, eZ, ofLp_ofCoords, PiLp.smul_apply, smul_eq_mul]

lemma fderiv_sdCart_ez :
    fderiv ℝ sdCart sStar (Pi.single 2 1) =
      ![0, 0, phiZ 0 - 2 * phiZ hSD1 + phiZ (2 * hSD1),
        0, 0, phiZ 0 - 2 * phiZ hSD2 + phiZ (2 * hSD2)] := by
  rw [fderiv_sdCart_apply, fderiv_secondDiff_los_ez, fderiv_secondDiff_los_ez,
    sdPairCoord_smul_eZ]

lemma fderiv_sdCart_evz :
    fderiv ℝ sdCart sStar (Pi.single 5 1) =
      ![0, 0, phiVz 0 - 2 * phiVz hSD1 + phiVz (2 * hSD1),
        0, 0, phiVz 0 - 2 * phiVz hSD2 + phiVz (2 * hSD2)] := by
  rw [fderiv_sdCart_apply, fderiv_secondDiff_los_evz, fderiv_secondDiff_los_evz,
    sdPairCoord_smul_eZ]

def deltaPhi (φ : ℝ → ℝ) (h : ℝ) : ℝ := φ 0 - 2 * φ h + φ (2 * h)

lemma fderiv_sdCart_ez' :
    fderiv ℝ sdCart sStar (Pi.single 2 1) =
      ![0, 0, deltaPhi phiZ hSD1, 0, 0, deltaPhi phiZ hSD2] :=
  fderiv_sdCart_ez

lemma fderiv_sdCart_evz' :
    fderiv ℝ sdCart sStar (Pi.single 5 1) =
      ![0, 0, deltaPhi phiVz hSD1, 0, 0, deltaPhi phiVz hSD2] :=
  fderiv_sdCart_evz

def zBlk : Matrix (Fin 2) (Fin 2) ℝ :=
  !![deltaPhi phiZ hSD1, deltaPhi phiVz hSD1;
     deltaPhi phiZ hSD2, deltaPhi phiVz hSD2]

lemma zBlk_det_eq :
    zBlk.det = deltaPhi phiZ hSD1 * deltaPhi phiVz hSD2
      - deltaPhi phiVz hSD1 * deltaPhi phiZ hSD2 := by
  simp [zBlk, Matrix.det_fin_two]

lemma nStar_sq : nStar ^ 2 = 8 / 125 :=
  Real.sq_sqrt (by norm_num)

lemma nStar_gt_lo : (252 / 1000 : ℝ) < nStar := by
  have hsq : (252 / 1000 : ℝ) ^ 2 < nStar ^ 2 := by
    rw [nStar_sq]; norm_num
  exact lt_of_pow_lt_pow_left₀ 2 (le_of_lt nStar_pos) hsq

lemma nStar_lt_hi : nStar < (253 / 1000 : ℝ) := by
  have hsq : nStar ^ 2 < (253 / 1000 : ℝ) ^ 2 := by
    rw [nStar_sq]; norm_num
  exact lt_of_pow_lt_pow_left₀ 2 (by norm_num) hsq

lemma nStar_lt_one : nStar < 1 :=
  nStar_lt_hi.trans (by norm_num)

lemma circular_ofLp0 (R ω φ t : ℝ) :
    (circular R ω φ t).ofLp 0 = R * Real.cos (ω * t + φ) := by
  simp [circular, ofLp_ofCoords]

lemma circular_ofLp1 (R ω φ t : ℝ) :
    (circular R ω φ t).ofLp 1 = R * Real.sin (ω * t + φ) := by
  simp [circular, ofLp_ofCoords]

lemma keplerIC_sStar_ofLp01 (t : ℝ) :
    (keplerIC sStar t).ofLp 0 = (5 / 2) * Real.cos (nStar * t) ∧
    (keplerIC sStar t).ofLp 1 = (5 / 2) * Real.sin (nStar * t) := by
  rw [keplerIC_sStar, nStar]
  constructor <;> simp [circular_ofLp0, circular_ofLp1]

lemma obs_ofLp01 (t : ℝ) :
    (obs t).ofLp 0 = Real.cos t ∧ (obs t).ofLp 1 = Real.sin t := by
  simp [obs, circular_ofLp0, circular_ofLp1]

lemma rhoStar_sq_coords (t : ℝ) :
    rhoStar t ^ 2 =
      ((5 / 2) * Real.cos (nStar * t) - Real.cos t) ^ 2 +
        ((5 / 2) * Real.sin (nStar * t) - Real.sin t) ^ 2 := by
  have hx := keplerIC_sStar_ofLp01 t
  have he := obs_ofLp01 t
  have hz0 := keplerIC_sStar_ofLp2 t
  have hez := obs_ofLp2 t
  unfold rhoStar
  rw [EuclideanSpace.norm_eq, Real.sq_sqrt (Finset.sum_nonneg fun _ _ => sq_nonneg _)]
  simp [Fin.sum_univ_three, PiLp.sub_apply, hx.1, hx.2, he.1, he.2, hz0, hez]

lemma rhoStar_sq_trig (t : ℝ) :
    rhoStar t ^ 2 =
      (29 / 4 : ℝ) -
        5 * (Real.cos (nStar * t) * Real.cos t +
          Real.sin (nStar * t) * Real.sin t) := by
  rw [rhoStar_sq_coords]
  set cn := Real.cos (nStar * t)
  set sn := Real.sin (nStar * t)
  set c := Real.cos t
  set s := Real.sin t
  have hc : cn ^ 2 + sn ^ 2 = 1 := Real.cos_sq_add_sin_sq _
  have he : c ^ 2 + s ^ 2 = 1 := Real.cos_sq_add_sin_sq _
  calc
    (5 / 2 * cn - c) ^ 2 + (5 / 2 * sn - s) ^ 2
        = (25 / 4) * cn ^ 2 - 5 * cn * c + c ^ 2
          + (25 / 4) * sn ^ 2 - 5 * sn * s + s ^ 2 := by ring
    _ = (25 / 4) * (cn ^ 2 + sn ^ 2) + (c ^ 2 + s ^ 2)
          - 5 * (cn * c + sn * s) := by ring
    _ = (25 / 4) * 1 + 1 - 5 * (cn * c + sn * s) := by rw [hc, he]
    _ = 29 / 4 - 5 * (cn * c + sn * s) := by ring

lemma rhoStar_sq_cos (t : ℝ) :
    rhoStar t ^ 2 = (29 / 4 : ℝ) - 5 * Real.cos ((nStar - 1) * t) := by
  rw [rhoStar_sq_trig]
  have htrig :
      Real.cos (nStar * t) * Real.cos t + Real.sin (nStar * t) * Real.sin t
        = Real.cos ((nStar - 1) * t) := by
    have : (nStar - 1) * t = nStar * t - t := by ring
    rw [this, Real.cos_sub]
  rw [htrig]

lemma rhoStar_zero : rhoStar 0 = 3 / 2 := by
  have hsq : rhoStar 0 ^ 2 = (9 / 4 : ℝ) := by
    rw [rhoStar_sq_cos]; simp; norm_num
  have hnn : 0 ≤ rhoStar 0 := norm_nonneg _
  have : rhoStar 0 = Real.sqrt (9 / 4 : ℝ) := by
    rw [← Real.sqrt_sq hnn, hsq]
  rw [this, show (9 / 4 : ℝ) = (3 / 2 : ℝ) ^ 2 by norm_num, Real.sqrt_sq (by norm_num)]

lemma phiZ_zero : phiZ 0 = 2 / 3 := by
  simp [phiZ, rhoStar_zero]

lemma phiVz_zero : phiVz 0 = 0 := by
  simp [phiVz]

lemma abs_nStar_div4_le_one : |nStar / 4| ≤ 1 := by
  rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
  linarith [nStar_lt_one]

lemma abs_nStar_div2_le_one : |nStar / 2| ≤ 1 := by
  rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
  linarith [nStar_lt_one]

lemma abs_nStar_le_one : |nStar| ≤ 1 := by
  rw [abs_of_nonneg nStar_pos.le]
  exact nStar_lt_one.le

lemma sin_cubic_mono {x y : ℝ} (hx : 0 ≤ x) (hxy : x ≤ y) (hy : y ≤ 1) :
    x - x ^ 3 / 6 ≤ y - y ^ 3 / 6 := by
  have hx1 : x ≤ 1 := hxy.trans hy
  have hy0 : 0 ≤ y := hx.trans hxy
  have hx2 : x ^ 2 ≤ 1 := by nlinarith
  have hy2 : y ^ 2 ≤ 1 := by nlinarith
  have hxy1 : x * y ≤ 1 := mul_le_one₀ hx1 hy0 hy
  have hdiff : (y - y ^ 3 / 6) - (x - x ^ 3 / 6)
      = (y - x) * (1 - (x ^ 2 + x * y + y ^ 2) / 6) := by ring
  nlinarith [sub_nonneg.mpr hxy]

lemma cos_interval_of_abs {x aLo aHi : ℝ}
    (habs : |x| ≤ 1) (ha0 : 0 ≤ aLo) (hlo : aLo ≤ |x|) (hhi : |x| ≤ aHi) :
    (1 : ℝ) - aHi ^ 2 / 2 - aHi ^ 4 * (5 / 96) ≤ Real.cos x ∧
      Real.cos x ≤ (1 : ℝ) - aLo ^ 2 / 2 + aHi ^ 4 * (5 / 96) := by
  have hb := Real.cos_bound habs
  have hrem : |x| ^ 4 * (5 / 96) ≤ aHi ^ 4 * (5 / 96) :=
    mul_le_mul_of_nonneg_right (pow_le_pow_left₀ (abs_nonneg _) hhi 4) (by norm_num)
  have hx2lo : aLo ^ 2 ≤ x ^ 2 := by
    have : aLo ^ 2 ≤ |x| ^ 2 := pow_le_pow_left₀ ha0 hlo 2
    rwa [sq_abs] at this
  have hx2hi : x ^ 2 ≤ aHi ^ 2 := by
    have : |x| ^ 2 ≤ aHi ^ 2 := pow_le_pow_left₀ (abs_nonneg _) hhi 2
    rwa [sq_abs] at this
  have h1 := (abs_le.mp hb).1
  have h2 := (abs_le.mp hb).2
  constructor <;> linarith

lemma sin_interval {x xLo xHi : ℝ}
    (hx0 : 0 ≤ xLo) (hlo : xLo ≤ x) (hhi : x ≤ xHi) (h1 : xHi ≤ 1) :
    xLo - xLo ^ 3 / 6 - xHi ^ 5 / 100 ≤ Real.sin x ∧
      Real.sin x ≤ xHi - xHi ^ 3 / 6 + xHi ^ 5 / 100 := by
  have hxnn : 0 ≤ x := hx0.trans hlo
  have habs : |x| ≤ 1 := by
    rw [abs_of_nonneg hxnn]; exact hhi.trans h1
  have hb := Real.sin_bound habs
  have hrem : |x| ^ 5 / 100 ≤ xHi ^ 5 / 100 := by
    have : |x| ≤ xHi := by rwa [abs_of_nonneg hxnn]
    exact div_le_div_of_nonneg_right
      (pow_le_pow_left₀ (abs_nonneg _) this 5) (by norm_num)
  have hp' : xLo - xLo ^ 3 / 6 ≤ x - x ^ 3 / 6 :=
    sin_cubic_mono hx0 hlo (hhi.trans h1)
  have hp'' : x - x ^ 3 / 6 ≤ xHi - xHi ^ 3 / 6 :=
    sin_cubic_mono hxnn hhi h1
  have h1' := (abs_le.mp hb).1
  have h2' := (abs_le.mp hb).2
  constructor <;> linarith

lemma abs_nm1_mul_nonneg (t : ℝ) (ht : 0 ≤ t) :
    |(nStar - 1) * t| = (1 - nStar) * t := by
  have : (nStar - 1) * t ≤ 0 :=
    mul_nonpos_of_nonpos_of_nonneg (sub_nonpos.mpr nStar_lt_one.le) ht
  rw [abs_of_nonpos this]; ring

lemma nStar_div4_bounds :
    (252 / 4000 : ℝ) < nStar / 4 ∧ nStar / 4 < (253 / 4000 : ℝ) := by
  constructor <;> linarith [nStar_gt_lo, nStar_lt_hi]

lemma nStar_div2_bounds :
    (252 / 2000 : ℝ) < nStar / 2 ∧ nStar / 2 < (253 / 2000 : ℝ) := by
  constructor <;> linarith [nStar_gt_lo, nStar_lt_hi]

lemma one_sub_nStar_div4_bounds :
    (747 / 4000 : ℝ) < (1 - nStar) / 4 ∧ (1 - nStar) / 4 < (748 / 4000 : ℝ) := by
  constructor <;> linarith [nStar_gt_lo, nStar_lt_hi]

lemma one_sub_nStar_div2_bounds :
    (747 / 2000 : ℝ) < (1 - nStar) / 2 ∧ (1 - nStar) / 2 < (748 / 2000 : ℝ) := by
  constructor <;> linarith [nStar_gt_lo, nStar_lt_hi]

lemma one_sub_nStar_bounds :
    (747 / 1000 : ℝ) < 1 - nStar ∧ 1 - nStar < (748 / 1000 : ℝ) := by
  constructor <;> linarith [nStar_gt_lo, nStar_lt_hi]

lemma cos_nStar_div4_bounds :
    (499 / 500 : ℝ) - (253 / 4000 : ℝ) ^ 4 * (5 / 96) ≤ Real.cos (nStar / 4) ∧
      Real.cos (nStar / 4) ≤ (499 / 500 : ℝ) + (253 / 4000 : ℝ) ^ 4 * (5 / 96) := by
  have hb := Real.cos_bound abs_nStar_div4_le_one
  have hmid : (1 : ℝ) - (nStar / 4) ^ 2 / 2 = 499 / 500 := by
    have : (nStar / 4) ^ 2 = nStar ^ 2 / 16 := by field_simp; ring
    rw [this, nStar_sq]; field_simp; norm_num
  have hrem : |nStar / 4| ^ 4 * (5 / 96) ≤ (253 / 4000 : ℝ) ^ 4 * (5 / 96) := by
    have : |nStar / 4| ≤ (253 / 4000 : ℝ) := by
      rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
      exact nStar_div4_bounds.2.le
    exact mul_le_mul_of_nonneg_right (pow_le_pow_left₀ (abs_nonneg _) this 4) (by norm_num)
  constructor <;> linarith [(abs_le.mp hb).1, (abs_le.mp hb).2]

lemma cos_nStar_div2_bounds :
    (124 / 125 : ℝ) - (253 / 2000 : ℝ) ^ 4 * (5 / 96) ≤ Real.cos (nStar / 2) ∧
      Real.cos (nStar / 2) ≤ (124 / 125 : ℝ) + (253 / 2000 : ℝ) ^ 4 * (5 / 96) := by
  have hb := Real.cos_bound abs_nStar_div2_le_one
  have hmid : (1 : ℝ) - (nStar / 2) ^ 2 / 2 = 124 / 125 := by
    have : (nStar / 2) ^ 2 = nStar ^ 2 / 4 := by field_simp; ring
    rw [this, nStar_sq]; field_simp; norm_num
  have hrem : |nStar / 2| ^ 4 * (5 / 96) ≤ (253 / 2000 : ℝ) ^ 4 * (5 / 96) := by
    have : |nStar / 2| ≤ (253 / 2000 : ℝ) := by
      rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
      exact nStar_div2_bounds.2.le
    exact mul_le_mul_of_nonneg_right (pow_le_pow_left₀ (abs_nonneg _) this 4) (by norm_num)
  constructor <;> linarith [(abs_le.mp hb).1, (abs_le.mp hb).2]

lemma cos_nStar_bounds :
    (121 / 125 : ℝ) - (253 / 1000 : ℝ) ^ 4 * (5 / 96) ≤ Real.cos nStar ∧
      Real.cos nStar ≤ (121 / 125 : ℝ) + (253 / 1000 : ℝ) ^ 4 * (5 / 96) := by
  have hb := Real.cos_bound abs_nStar_le_one
  have hmid : (1 : ℝ) - nStar ^ 2 / 2 = 121 / 125 := by
    rw [nStar_sq]; field_simp; norm_num
  have hrem : |nStar| ^ 4 * (5 / 96) ≤ (253 / 1000 : ℝ) ^ 4 * (5 / 96) := by
    have : |nStar| ≤ (253 / 1000 : ℝ) := by
      rw [abs_of_nonneg nStar_pos.le]; exact nStar_lt_hi.le
    exact mul_le_mul_of_nonneg_right (pow_le_pow_left₀ (abs_nonneg _) this 4) (by norm_num)
  constructor <;> linarith [(abs_le.mp hb).1, (abs_le.mp hb).2]

lemma sin_nStar_div4_bounds :
    (252 / 4000 : ℝ) - (252 / 4000 : ℝ) ^ 3 / 6 - (253 / 4000 : ℝ) ^ 5 / 100
      ≤ Real.sin (nStar / 4) ∧
      Real.sin (nStar / 4)
        ≤ (253 / 4000 : ℝ) - (253 / 4000 : ℝ) ^ 3 / 6 + (253 / 4000 : ℝ) ^ 5 / 100 :=
  sin_interval (by norm_num) nStar_div4_bounds.1.le nStar_div4_bounds.2.le (by norm_num)

lemma sin_nStar_div2_bounds :
    (252 / 2000 : ℝ) - (252 / 2000 : ℝ) ^ 3 / 6 - (253 / 2000 : ℝ) ^ 5 / 100
      ≤ Real.sin (nStar / 2) ∧
      Real.sin (nStar / 2)
        ≤ (253 / 2000 : ℝ) - (253 / 2000 : ℝ) ^ 3 / 6 + (253 / 2000 : ℝ) ^ 5 / 100 :=
  sin_interval (by norm_num) nStar_div2_bounds.1.le nStar_div2_bounds.2.le (by norm_num)

lemma sin_nStar_bounds :
    (252 / 1000 : ℝ) - (252 / 1000 : ℝ) ^ 3 / 6 - (253 / 1000 : ℝ) ^ 5 / 100
      ≤ Real.sin nStar ∧
      Real.sin nStar
        ≤ (253 / 1000 : ℝ) - (253 / 1000 : ℝ) ^ 3 / 6 + (253 / 1000 : ℝ) ^ 5 / 100 :=
  sin_interval (by norm_num) nStar_gt_lo.le nStar_lt_hi.le (by norm_num)

lemma cos_nm1_div4_bounds :
    (1 : ℝ) - (748 / 4000 : ℝ) ^ 2 / 2 - (748 / 4000 : ℝ) ^ 4 * (5 / 96)
      ≤ Real.cos ((nStar - 1) * (1 / 4)) ∧
      Real.cos ((nStar - 1) * (1 / 4))
        ≤ (1 : ℝ) - (747 / 4000 : ℝ) ^ 2 / 2 + (748 / 4000 : ℝ) ^ 4 * (5 / 96) := by
  have hx : |(nStar - 1) * (1 / 4)| = (1 - nStar) / 4 := by
    simpa [div_eq_mul_inv] using abs_nm1_mul_nonneg (1 / 4) (by norm_num)
  have habs : |(nStar - 1) * (1 / 4)| ≤ 1 := by rw [hx]; linarith [nStar_gt_lo]
  refine cos_interval_of_abs habs (by norm_num) ?_ ?_
  · rw [hx]; exact one_sub_nStar_div4_bounds.1.le
  · rw [hx]; exact one_sub_nStar_div4_bounds.2.le

lemma cos_nm1_div2_bounds :
    (1 : ℝ) - (748 / 2000 : ℝ) ^ 2 / 2 - (748 / 2000 : ℝ) ^ 4 * (5 / 96)
      ≤ Real.cos ((nStar - 1) * (1 / 2)) ∧
      Real.cos ((nStar - 1) * (1 / 2))
        ≤ (1 : ℝ) - (747 / 2000 : ℝ) ^ 2 / 2 + (748 / 2000 : ℝ) ^ 4 * (5 / 96) := by
  have hx : |(nStar - 1) * (1 / 2)| = (1 - nStar) / 2 := by
    simpa [div_eq_mul_inv] using abs_nm1_mul_nonneg (1 / 2) (by norm_num)
  have habs : |(nStar - 1) * (1 / 2)| ≤ 1 := by rw [hx]; linarith [nStar_gt_lo]
  refine cos_interval_of_abs habs (by norm_num) ?_ ?_
  · rw [hx]; exact one_sub_nStar_div2_bounds.1.le
  · rw [hx]; exact one_sub_nStar_div2_bounds.2.le

lemma cos_nm1_one_bounds :
    (1 : ℝ) - (748 / 1000 : ℝ) ^ 2 / 2 - (748 / 1000 : ℝ) ^ 4 * (5 / 96)
      ≤ Real.cos (nStar - 1) ∧
      Real.cos (nStar - 1)
        ≤ (1 : ℝ) - (747 / 1000 : ℝ) ^ 2 / 2 + (748 / 1000 : ℝ) ^ 4 * (5 / 96) := by
  have hx : |nStar - 1| = 1 - nStar := by
    rw [abs_of_nonpos (sub_nonpos.mpr nStar_lt_one.le), neg_sub]
  have habs : |nStar - 1| ≤ 1 := by rw [hx]; linarith [nStar_gt_lo]
  refine cos_interval_of_abs habs (by norm_num) ?_ ?_
  · rw [hx]; exact one_sub_nStar_bounds.1.le
  · rw [hx]; exact one_sub_nStar_bounds.2.le

lemma rhoStar_sq_div4_bounds :
    (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (747 / 4000 : ℝ) ^ 2 / 2 + (748 / 4000 : ℝ) ^ 4 * (5 / 96))
      ≤ rhoStar (1 / 4) ^ 2 ∧
      rhoStar (1 / 4) ^ 2
        ≤ (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (748 / 4000 : ℝ) ^ 2 / 2 - (748 / 4000 : ℝ) ^ 4 * (5 / 96)) := by
  rw [rhoStar_sq_cos]; constructor <;> linarith [cos_nm1_div4_bounds.1, cos_nm1_div4_bounds.2]

lemma rhoStar_sq_div2_bounds :
    (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (747 / 2000 : ℝ) ^ 2 / 2 + (748 / 2000 : ℝ) ^ 4 * (5 / 96))
      ≤ rhoStar (1 / 2) ^ 2 ∧
      rhoStar (1 / 2) ^ 2
        ≤ (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (748 / 2000 : ℝ) ^ 2 / 2 - (748 / 2000 : ℝ) ^ 4 * (5 / 96)) := by
  rw [rhoStar_sq_cos]; constructor <;> linarith [cos_nm1_div2_bounds.1, cos_nm1_div2_bounds.2]

lemma rhoStar_sq_one_bounds :
    (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (747 / 1000 : ℝ) ^ 2 / 2 + (748 / 1000 : ℝ) ^ 4 * (5 / 96))
      ≤ rhoStar 1 ^ 2 ∧
      rhoStar 1 ^ 2
        ≤ (29 / 4 : ℝ) - 5 * ((1 : ℝ) - (748 / 1000 : ℝ) ^ 2 / 2 - (748 / 1000 : ℝ) ^ 4 * (5 / 96)) := by
  have : (nStar - 1) * (1 : ℝ) = nStar - 1 := by ring
  rw [rhoStar_sq_cos, this]
  constructor <;> linarith [cos_nm1_one_bounds.1, cos_nm1_one_bounds.2]

lemma abs_rhoStar (t : ℝ) : |rhoStar t| = rhoStar t :=
  abs_of_nonneg (norm_nonneg _)

lemma le_rho_of_sq {a t : ℝ} (ha : 0 ≤ a) (hsq : a ^ 2 ≤ rhoStar t ^ 2) :
    a ≤ rhoStar t := by
  have := sq_le_sq.mp hsq
  rwa [abs_of_nonneg ha, abs_rhoStar t] at this

lemma rho_of_sq_le {a t : ℝ} (ha : 0 ≤ a) (hsq : rhoStar t ^ 2 ≤ a ^ 2) :
    rhoStar t ≤ a := by
  have := sq_le_sq.mp hsq
  rwa [abs_rhoStar t, abs_of_nonneg ha] at this

lemma rhoStar_div4_bounds :
    (764341 / 500000 : ℝ) ≤ rhoStar (1 / 4) ∧
      rhoStar (1 / 4) ≤ (191121 / 125000 : ℝ) := by
  have hr := rhoStar_sq_div4_bounds
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1)
    norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_)
    norm_num

lemma rhoStar_div2_bounds :
    (402621 / 250000 : ℝ) ≤ rhoStar (1 / 2) ∧
      rhoStar (1 / 2) ≤ (322787 / 200000 : ℝ) := by
  have hr := rhoStar_sq_div2_bounds
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1)
    norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_)
    norm_num

lemma rhoStar_one_bounds :
    (1887723 / 1000000 : ℝ) ≤ rhoStar 1 ∧
      rhoStar 1 ≤ (965697 / 500000 : ℝ) := by
  have hr := rhoStar_sq_one_bounds
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1)
    norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_)
    norm_num

lemma div_bounds {nLo nHi dLo dHi n d : ℝ}
    (hn0 : 0 ≤ nLo) (hd0 : 0 < dLo)
    (hnl : nLo ≤ n) (hnh : n ≤ nHi) (hdl : dLo ≤ d) (hdh : d ≤ dHi) :
    nLo / dHi ≤ n / d ∧ n / d ≤ nHi / dLo := by
  have hd : 0 < d := hd0.trans_le hdl
  have hdHi : 0 < dHi := hd.trans_le hdh
  constructor
  · rw [div_le_div_iff₀ hdHi hd]; nlinarith
  · rw [div_le_div_iff₀ hd hd0]; nlinarith

lemma phiZ_apply (t : ℝ) : phiZ t = Real.cos (nStar * t) / rhoStar t := rfl

lemma phiVz_apply (t : ℝ) :
    phiVz t = Real.sin (nStar * t) / (nStar * rhoStar t) := by
  simp [phiVz, div_div, mul_comm]

lemma phiZ_div4_bounds :
    ((499 / 500 : ℝ) - (253 / 4000 : ℝ) ^ 4 * (5 / 96)) / (191121 / 125000)
      ≤ phiZ (1 / 4) ∧
      phiZ (1 / 4)
        ≤ ((499 / 500 : ℝ) + (253 / 4000 : ℝ) ^ 4 * (5 / 96)) / (764341 / 500000) := by
  rw [phiZ_apply, show nStar * (1 / 4) = nStar / 4 by ring]
  refine div_bounds ?_ (by norm_num) cos_nStar_div4_bounds.1 cos_nStar_div4_bounds.2
    rhoStar_div4_bounds.1 rhoStar_div4_bounds.2
  linarith [cos_nStar_div4_bounds.1]

lemma phiZ_div2_bounds :
    ((124 / 125 : ℝ) - (253 / 2000 : ℝ) ^ 4 * (5 / 96)) / (322787 / 200000)
      ≤ phiZ (1 / 2) ∧
      phiZ (1 / 2)
        ≤ ((124 / 125 : ℝ) + (253 / 2000 : ℝ) ^ 4 * (5 / 96)) / (402621 / 250000) := by
  rw [phiZ_apply, show nStar * (1 / 2) = nStar / 2 by ring]
  refine div_bounds ?_ (by norm_num) cos_nStar_div2_bounds.1 cos_nStar_div2_bounds.2
    rhoStar_div2_bounds.1 rhoStar_div2_bounds.2
  linarith [cos_nStar_div2_bounds.1]

lemma phiZ_one_bounds :
    ((121 / 125 : ℝ) - (253 / 1000 : ℝ) ^ 4 * (5 / 96)) / (965697 / 500000)
      ≤ phiZ 1 ∧
      phiZ 1
        ≤ ((121 / 125 : ℝ) + (253 / 1000 : ℝ) ^ 4 * (5 / 96)) / (1887723 / 1000000) := by
  rw [phiZ_apply, mul_one]
  refine div_bounds ?_ (by norm_num) cos_nStar_bounds.1 cos_nStar_bounds.2
    rhoStar_one_bounds.1 rhoStar_one_bounds.2
  linarith [cos_nStar_bounds.1]

lemma phiVz_div4_bounds :
    ((252 / 4000 : ℝ) - (252 / 4000 : ℝ) ^ 3 / 6 - (253 / 4000 : ℝ) ^ 5 / 100)
        / ((253 / 1000 : ℝ) * (191121 / 125000))
      ≤ phiVz (1 / 4) ∧
      phiVz (1 / 4)
        ≤ ((253 / 4000 : ℝ) - (253 / 4000 : ℝ) ^ 3 / 6 + (253 / 4000 : ℝ) ^ 5 / 100)
          / ((252 / 1000 : ℝ) * (764341 / 500000)) := by
  rw [phiVz_apply, show nStar * (1 / 4) = nStar / 4 by ring]
  have hdLo : (0 : ℝ) < (252 / 1000) * (764341 / 500000) := by norm_num
  have hn0 : (0 : ℝ)
      ≤ (252 / 4000 : ℝ) - (252 / 4000 : ℝ) ^ 3 / 6 - (253 / 4000 : ℝ) ^ 5 / 100 := by
    norm_num
  have hden_lo : (252 / 1000 : ℝ) * (764341 / 500000) ≤ nStar * rhoStar (1 / 4) :=
    mul_le_mul nStar_gt_lo.le rhoStar_div4_bounds.1 (by norm_num) nStar_pos.le
  have hden_hi : nStar * rhoStar (1 / 4) ≤ (253 / 1000 : ℝ) * (191121 / 125000) :=
    mul_le_mul nStar_lt_hi.le rhoStar_div4_bounds.2 (norm_nonneg _) (by norm_num)
  exact div_bounds hn0 (by norm_num) sin_nStar_div4_bounds.1 sin_nStar_div4_bounds.2
    hden_lo hden_hi

lemma phiVz_div2_bounds :
    ((252 / 2000 : ℝ) - (252 / 2000 : ℝ) ^ 3 / 6 - (253 / 2000 : ℝ) ^ 5 / 100)
        / ((253 / 1000 : ℝ) * (322787 / 200000))
      ≤ phiVz (1 / 2) ∧
      phiVz (1 / 2)
        ≤ ((253 / 2000 : ℝ) - (253 / 2000 : ℝ) ^ 3 / 6 + (253 / 2000 : ℝ) ^ 5 / 100)
          / ((252 / 1000 : ℝ) * (402621 / 250000)) := by
  rw [phiVz_apply, show nStar * (1 / 2) = nStar / 2 by ring]
  have hn0 : (0 : ℝ)
      ≤ (252 / 2000 : ℝ) - (252 / 2000 : ℝ) ^ 3 / 6 - (253 / 2000 : ℝ) ^ 5 / 100 := by
    norm_num
  have hden_lo : (252 / 1000 : ℝ) * (402621 / 250000) ≤ nStar * rhoStar (1 / 2) :=
    mul_le_mul nStar_gt_lo.le rhoStar_div2_bounds.1 (by norm_num) nStar_pos.le
  have hden_hi : nStar * rhoStar (1 / 2) ≤ (253 / 1000 : ℝ) * (322787 / 200000) :=
    mul_le_mul nStar_lt_hi.le rhoStar_div2_bounds.2 (norm_nonneg _) (by norm_num)
  exact div_bounds hn0 (by norm_num) sin_nStar_div2_bounds.1 sin_nStar_div2_bounds.2
    hden_lo hden_hi

lemma phiVz_one_bounds :
    ((252 / 1000 : ℝ) - (252 / 1000 : ℝ) ^ 3 / 6 - (253 / 1000 : ℝ) ^ 5 / 100)
        / ((253 / 1000 : ℝ) * (965697 / 500000))
      ≤ phiVz 1 ∧
      phiVz 1
        ≤ ((253 / 1000 : ℝ) - (253 / 1000 : ℝ) ^ 3 / 6 + (253 / 1000 : ℝ) ^ 5 / 100)
          / ((252 / 1000 : ℝ) * (1887723 / 1000000)) := by
  rw [phiVz_apply, mul_one]
  have hn0 : (0 : ℝ)
      ≤ (252 / 1000 : ℝ) - (252 / 1000 : ℝ) ^ 3 / 6 - (253 / 1000 : ℝ) ^ 5 / 100 := by
    norm_num
  have hden_lo : (252 / 1000 : ℝ) * (1887723 / 1000000) ≤ nStar * rhoStar 1 :=
    mul_le_mul nStar_gt_lo.le rhoStar_one_bounds.1 (by norm_num) nStar_pos.le
  have hden_hi : nStar * rhoStar 1 ≤ (253 / 1000 : ℝ) * (965697 / 500000) :=
    mul_le_mul nStar_lt_hi.le rhoStar_one_bounds.2 (norm_nonneg _) (by norm_num)
  exact div_bounds hn0 (by norm_num) sin_nStar_bounds.1 sin_nStar_bounds.2
    hden_lo hden_hi

lemma deltaPhi_phiZ_hSD1 :
    deltaPhi phiZ hSD1 = (2 / 3 : ℝ) - 2 * phiZ (1 / 4) + phiZ (1 / 2) := by
  unfold deltaPhi hSD1; rw [phiZ_zero]; norm_num

lemma deltaPhi_phiZ_hSD2 :
    deltaPhi phiZ hSD2 = (2 / 3 : ℝ) - 2 * phiZ (1 / 2) + phiZ 1 := by
  unfold deltaPhi hSD2; rw [phiZ_zero]; norm_num

lemma deltaPhi_phiVz_hSD1 :
    deltaPhi phiVz hSD1 = -2 * phiVz (1 / 4) + phiVz (1 / 2) := by
  unfold deltaPhi hSD1; rw [phiVz_zero]; norm_num

lemma deltaPhi_phiVz_hSD2 :
    deltaPhi phiVz hSD2 = -2 * phiVz (1 / 2) + phiVz 1 := by
  unfold deltaPhi hSD2; rw [phiVz_zero]; norm_num

lemma zBlk_det_pos : 0 < zBlk.det := by
  rw [zBlk_det_eq, deltaPhi_phiZ_hSD1, deltaPhi_phiZ_hSD2,
    deltaPhi_phiVz_hSD1, deltaPhi_phiVz_hSD2]
  have hz14 := phiZ_div4_bounds
  have hz12 := phiZ_div2_bounds
  have hz1 := phiZ_one_bounds
  have hv14 := phiVz_div4_bounds
  have hv12 := phiVz_div2_bounds
  have hv1 := phiVz_one_bounds
  have hpos : (0 : ℝ) < 7 / 10000 := by norm_num
  nlinarith [hpos]

lemma zBlk_det_ne : zBlk.det ≠ 0 := zBlk_det_pos.ne'

/-- In-plane Cartesian axes `(x,y,vx,vy)`. -/
def inPlane : Fin 4 → Fin 6 := ![0, 1, 3, 4]

/-- In-plane second-difference coordinates `(Δx₁,Δy₁,Δx₂,Δy₂)`. -/
def inPlaneOut : Fin 4 → Fin 6 := ![0, 1, 3, 4]

/-- In-plane 4×4 block of `D sdCart` at `sStar`. Numeric det ~ 3.79e-7. -/
def xyBlk : Matrix (Fin 4) (Fin 4) ℝ :=
  Matrix.of fun i j =>
    fderiv ℝ sdCart sStar (Pi.single (inPlane j) 1) (inPlaneOut i)

def eX : Vec := ofCoords 1 0 0
def eY : Vec := ofCoords 0 1 0

/-- Circular-Kepler STM radial LVLH coordinate, inertial ICs. -/
def stmRad (t dx dy dvx dvy : ℝ) : ℝ :=
  (2 - Real.cos (nStar * t)) * dx + Real.sin (nStar * t) * dy
    + Real.sin (nStar * t) / nStar * dvx
    + 2 * (1 - Real.cos (nStar * t)) / nStar * dvy

/-- Circular-Kepler STM along-track LVLH coordinate, inertial ICs. -/
def stmTan (t dx dy dvx dvy : ℝ) : ℝ :=
  (2 * Real.sin (nStar * t) - 3 * nStar * t) * dx
    + (2 * Real.cos (nStar * t) - 1) * dy
    - 2 * (1 - Real.cos (nStar * t)) / nStar * dvx
    + (4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar * dvy

def erOf (t : ℝ) : Vec :=
  ofCoords (Real.cos (nStar * t)) (Real.sin (nStar * t)) 0

def ethOf (t : ℝ) : Vec :=
  ofCoords (-Real.sin (nStar * t)) (Real.cos (nStar * t)) 0

def stmInertial (t dx dy dvx dvy : ℝ) : Vec :=
  stmRad t dx dy dvx dvy • erOf t + stmTan t dx dy dvx dvy • ethOf t

def stmCol (j : Fin 4) (t : ℝ) : Vec :=
  match j with
  | ⟨0, _⟩ => stmInertial t 1 0 0 0
  | ⟨1, _⟩ => stmInertial t 0 1 0 0
  | ⟨2, _⟩ => stmInertial t 0 0 1 0
  | ⟨3, _⟩ => stmInertial t 0 0 0 1

def uStar (t : ℝ) : Vec := (rhoStar t)⁻¹ • (keplerIC sStar t - obs t)

/-- First-order los variation from an in-plane inertial displacement. -/
def dlosSTM (t : ℝ) (dr : Vec) : Vec :=
  (rhoStar t)⁻¹ • (dr - ⟪uStar t, dr⟫ • uStar t)

def dlosCol (j : Fin 4) (t : ℝ) : Vec := dlosSTM t (stmCol j t)

def xyBlkSTM : Matrix (Fin 4) (Fin 4) ℝ :=
  Matrix.of fun i j =>
    let w1 := dlosCol j 0 - (2 : ℝ) • dlosCol j hSD1 + dlosCol j (2 * hSD1)
    let w2 := dlosCol j 0 - (2 : ℝ) • dlosCol j hSD2 + dlosCol j (2 * hSD2)
    match i with
    | ⟨0, _⟩ => w1.ofLp 0
    | ⟨1, _⟩ => w1.ofLp 1
    | ⟨2, _⟩ => w2.ofLp 0
    | ⟨3, _⟩ => w2.ofLp 1

lemma inPlane_apply :
    inPlane 0 = 0 ∧ inPlane 1 = 1 ∧ inPlane 2 = 3 ∧ inPlane 3 = 4 := by
  simp [inPlane]

lemma inPlaneOut_apply :
    inPlaneOut 0 = 0 ∧ inPlaneOut 1 = 1 ∧ inPlaneOut 2 = 3 ∧ inPlaneOut 3 = 4 := by
  simp [inPlaneOut]

lemma velNormSq_lineJet0 (ε : ℝ) :
    ‖stateVel (lineJet 0 ε)‖ ^ 2 = 2 / 5 := by
  rw [stateVel_lineJet0, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ 0 ^ 2 + (Real.sqrt 10 / 5) ^ 2 + 0 ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  field_simp
  rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma sigmaOf_lineJet0 (ε : ℝ) : sigmaOf (lineJet 0 ε) = 0 := by
  simp [sigmaOf, vecDot, statePos_lineJet0, stateVel_lineJet0, ofLp_ofCoords,
    Fin.sum_univ_three]

lemma alphaOf_lineJet0 {ε : ℝ} (hε : -5 / 2 < ε) :
    alphaOf (lineJet 0 ε) = 2 / (5 / 2 + ε) - 2 / 5 := by
  simp [alphaOf, rnorm_lineJet0 hε, velNormSq_lineJet0]

lemma one_sub_alpha_r_lineJet0 {ε : ℝ} (hε : -5 / 2 < ε) :
    1 - alphaOf (lineJet 0 ε) * rnorm (lineJet 0 ε) = (2 / 5) * ε := by
  have hr : rnorm (lineJet 0 ε) = 5 / 2 + ε := rnorm_lineJet0 hε
  have hden : 5 / 2 + ε ≠ 0 := by linarith
  rw [alphaOf_lineJet0 hε, hr]
  calc
    1 - (2 / (5 / 2 + ε) - 2 / 5) * (5 / 2 + ε)
        = 1 - (2 / (5 / 2 + ε) * (5 / 2 + ε) - (2 / 5) * (5 / 2 + ε)) := by
          ring
    _ = 1 - (2 - (2 / 5) * (5 / 2 + ε)) := by
          rw [div_mul_cancel₀ (2 : ℝ) hden]
    _ = (2 / 5) * (5 / 2 + ε) - 1 := by ring
    _ = (2 / 5) * ε := by ring

lemma univF_lineJet0 (ε χ : ℝ) (hε : -5 / 2 < ε) :
    univF (lineJet 0 ε) χ =
      (2 / 5) * ε * χ ^ 3 * stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2)
        + (5 / 2 + ε) * χ := by
  rw [univF, sigmaOf_lineJet0, one_sub_alpha_r_lineJet0 hε, rnorm_lineJet0 hε]
  ring

lemma continuousAt_alphaOf_lineJet0 :
    ContinuousAt (fun ε => alphaOf (lineJet 0 ε)) 0 := by
  have hnhds : ∀ᶠ ε : ℝ in 𝓝 0, -5 / 2 < ε :=
    eventually_gt_nhds (by norm_num : (-5 / 2 : ℝ) < 0)
  have hclosed : ContinuousAt (fun ε : ℝ => 2 / (5 / 2 + ε) - 2 / 5) 0 := by
    have hden : ContinuousAt (fun ε : ℝ => 5 / 2 + ε) 0 :=
      continuousAt_const.add continuousAt_id
    have hinv : ContinuousAt (fun ε : ℝ => (5 / 2 + ε)⁻¹) 0 :=
      ContinuousAt.inv₀ hden (by norm_num)
    exact (hinv.const_mul (2 : ℝ)).sub_const (2 / 5)
  exact hclosed.congr (hnhds.mono fun ε hε => (alphaOf_lineJet0 hε).symm)

lemma eventually_alpha_lineJet0_nonneg (χ : ℝ) :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 ≤ alphaOf (lineJet 0 ε) * χ ^ 2 := by
  have : ∀ᶠ ε : ℝ in 𝓝 0, -1 / 4 < ε ∧ ε < 1 / 4 :=
    eventually_and.2 ⟨eventually_gt_nhds (by norm_num), eventually_lt_nhds (by norm_num)⟩
  refine this.mono fun ε ⟨hlo, hhi⟩ => ?_
  have hε : -5 / 2 < ε := by linarith
  rw [alphaOf_lineJet0 hε]
  have hpos : 0 < 2 / (5 / 2 + ε) - 2 / 5 := by
    have hr : 0 < 5 / 2 + ε := by linarith
    have hlt : 5 / 2 + ε < 11 / 4 := by linarith
    have : 2 / (11 / 4 : ℝ) < 2 / (5 / 2 + ε) :=
      (div_lt_div_iff_of_pos_left (by norm_num : (0 : ℝ) < 2) (by positivity) hr).mpr hlt
    have hconv : 2 / (11 / 4 : ℝ) = (8 / 11 : ℝ) := by norm_num
    linarith
  exact mul_nonneg hpos.le (sq_nonneg _)

lemma continuousAt_stumpffS_alpha_lineJet0 (χ : ℝ) :
    ContinuousAt (fun ε => stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2)) 0 := by
  have hmul : ContinuousAt (fun ε => alphaOf (lineJet 0 ε) * χ ^ 2) 0 :=
    continuousAt_alphaOf_lineJet0.mul_const _
  have hcongr :
      (fun ε => stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2)) =ᶠ[𝓝 0]
        fun ε => sbar (Real.sqrt (alphaOf (lineJet 0 ε) * χ ^ 2)) :=
    (eventually_alpha_lineJet0_nonneg χ).mono fun ε hz => stumpffS_eq_sbar hz
  have hinner : ContinuousAt (fun ε => sbar (Real.sqrt (alphaOf (lineJet 0 ε) * χ ^ 2))) 0 :=
    (continuous_sbar.comp Real.continuous_sqrt).continuousAt.comp hmul
  exact hinner.congr hcongr.symm

lemma hasDerivAt_mul_continuousAt {g : ℝ → ℝ} {y : ℝ}
    (hg : ContinuousAt g 0) (hy : g 0 = y) :
    HasDerivAt (fun ε => ε * g ε) y 0 := by
  rw [hasDerivAt_iff_tendsto_slope]
  have ht : Tendsto g (𝓝[≠] (0 : ℝ)) (𝓝 y) := by
    simpa [hy] using hg.tendsto.mono_left nhdsWithin_le_nhds
  refine ht.congr' ?_
  filter_upwards [self_mem_nhdsWithin] with ε hε
  have hne : ε ≠ 0 := by
    simpa [Set.mem_compl_iff, Set.mem_singleton_iff] using hε
  simp [slope, hne]


lemma alphaOf_lineJet0_zero : alphaOf (lineJet 0 0) = 2 / 5 := by
  rw [lineJet_zero, alphaOf_sStar]

lemma hasDerivAt_univF_lineJet0_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 0 ε) χ)
      ((2 / 5) * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2) + χ) 0 := by
  have hnhds : ∀ᶠ ε : ℝ in 𝓝 0, -5 / 2 < ε := eventually_lineJet0_pos
  have hg : ContinuousAt
      (fun ε => (2 / 5) * χ ^ 3 * stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2)) 0 :=
    (continuousAt_stumpffS_alpha_lineJet0 χ).const_mul _
  have hy :
      (2 / 5) * χ ^ 3 * stumpffS (alphaOf (lineJet 0 0) * χ ^ 2)
        = (2 / 5) * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2) := by
    rw [alphaOf_lineJet0_zero]
  have hmul := hasDerivAt_mul_continuousAt hg hy
  have hadd : HasDerivAt (fun ε : ℝ => (5 / 2 + ε) * χ) χ 0 := by
    simpa using ((hasDerivAt_id (0 : ℝ)).const_add (5 / 2)).mul_const χ
  have hsum := hmul.add hadd
  have heq : (fun ε => univF (lineJet 0 ε) χ) =ᶠ[𝓝 0]
      fun ε => ε * ((2 / 5) * χ ^ 3 * stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2))
        + (5 / 2 + ε) * χ := by
    filter_upwards [hnhds] with ε hε
    rw [univF_lineJet0 ε χ hε]
    ring
  have hsum' : HasDerivAt
      (fun ε => ε * ((2 / 5) * χ ^ 3 * stumpffS (alphaOf (lineJet 0 ε) * χ ^ 2))
        + (5 / 2 + ε) * χ)
      ((2 / 5) * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2) + χ) 0 :=
    (hsum.congr_deriv (by ring))
  exact hsum'.congr_of_eventuallyEq heq

/-- IFT along an axis: `χ' = -F_ε / (5/2)` at the circular solution. -/
lemma hasDerivAt_chiOf_axis_gen {j : Fin 6} (t : ℝ) {Fε : ℝ}
    (hfixed : HasDerivAt (fun ε => univF (lineJet j ε) (2 * t / 5)) Fε 0) :
    HasDerivAt (fun ε => chiOf (lineJet j ε) t) (-(2 / 5) * Fε) 0 := by
  have hχ := hasDerivAt_chiOf_lineJet j t
  have hF : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    hasFDerivAt_uncurry_univF (2 * t / 5)
  set χ' := fderiv ℝ (fun s => chiOf s t) sStar (Pi.single j 1)
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), χ') 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hid : HasDerivAt (fun ε => univF (lineJet j ε) (chiOf (lineJet j ε) t)) 0 0 := by
    refine (hasDerivAt_const 0 t).congr_of_eventuallyEq ?_
    exact (tendsto_lineJet j).eventually (eventually_univF_chiOf t)
  have huniq := hcomp.unique hid
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have h0 := hcomp0.unique hfixed
  have hlin :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (Pi.single j 1, χ') = 0 := by
    have hpt : (lineJet j 0, chiOf (lineJet j 0) t) = (sStar, 2 * t / 5) := by
      simp [lineJet_zero, chiOf_sStar]
    simpa [hpt, χ'] using huniq
  have hlin0 :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (Pi.single j 1, (0 : ℝ))
        = Fε := by
    have hpt : lineJet j 0 = sStar := lineJet_zero j
    simpa [hpt] using h0
  have hdiff :
      fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (0, χ') = -Fε := by
    have hL :=
      (map_sub (fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5))
        (Pi.single j (1 : ℝ), χ') (Pi.single j (1 : ℝ), (0 : ℝ)))
    have hsub : (Pi.single j (1 : ℝ), χ') - (Pi.single j (1 : ℝ), (0 : ℝ))
        = ((0 : Fin 6 → ℝ), χ') := by
      apply Prod.ext
      · simp
      · simp
    have : fderiv ℝ (Function.uncurry univF) (sStar, 2 * t / 5) (0, χ')
        = 0 - Fε := by
      rw [← hsub, hL, hlin, hlin0]
    linarith
  have hmul : (5 / 2 : ℝ) * χ' = -Fε := by
    rw [← univF_fderiv_inr (2 * t / 5) χ', hdiff]
  have hχeq : χ' = -(2 / 5) * Fε := by
    have h52 : (5 / 2 : ℝ) ≠ 0 := by norm_num
    field_simp [h52] at hmul
    linarith
  exact hχ.congr_deriv hχeq

def Fε_lineJet0 (χ : ℝ) : ℝ :=
  (2 / 5) * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2) + χ

lemma hasDerivAt_chiOf_lineJet0 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 0 ε) t)
      (-(2 / 5) * Fε_lineJet0 (2 * t / 5)) 0 :=
  hasDerivAt_chiOf_axis_gen t (hasDerivAt_univF_lineJet0_fixed (2 * t / 5))

lemma Fε_lineJet0_sStar (t : ℝ) :
    Fε_lineJet0 (2 * t / 5) =
      (2 / 5) * (t - Real.sin (nStar * t) / nStar) + (2 * t / 5) := by
  unfold Fε_lineJet0
  have hg : (2 * t / 5) ^ 3 * stumpffS (alphaOf sStar * (2 * t / 5) ^ 2)
      = t - Real.sin (nStar * t) / nStar := by
    have h := fg_g_sStar t
    -- fg_g sStar t (2t/5) = t - χ³ S = sin(nt)/n
    have h' : t - (2 * t / 5) ^ 3 * stumpffS (alphaOf sStar * (2 * t / 5) ^ 2)
        = Real.sin (nStar * t) / nStar := by
      simpa [fg_g, nStar] using h
    linarith
  have hz : alphaOf sStar * (2 * t / 5) ^ 2 = (2 / 5) * (2 * t / 5) ^ 2 := by
    rw [alphaOf_sStar]
  have : (2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2)
      = t - Real.sin (nStar * t) / nStar := by
    simpa [hz] using hg
  calc
    (2 / 5) * (2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2) + (2 * t / 5)
        = (2 / 5) * ((2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2))
          + (2 * t / 5) := by ring
    _ = (2 / 5) * (t - Real.sin (nStar * t) / nStar) + (2 * t / 5) := by
          rw [this]


lemma sigmaOf_lineJet1 (ε : ℝ) :
    sigmaOf (lineJet 1 ε) = ε * (Real.sqrt 10 / 5) := by
  simp [sigmaOf, vecDot, statePos_lineJet1, stateVel_lineJet1, ofLp_ofCoords,
    Fin.sum_univ_three]

lemma velNormSq_lineJet1 (ε : ℝ) : ‖stateVel (lineJet 1 ε)‖ ^ 2 = 2 / 5 :=
  velNormSq_lineJet0 ε ▸ (by
    have h : stateVel (lineJet 1 ε) = stateVel (lineJet 0 ε) := by
      simp [stateVel_lineJet1, stateVel_lineJet0]
    rw [h])

lemma alphaOf_lineJet1 (ε : ℝ) :
    alphaOf (lineJet 1 ε) = 2 / rnorm (lineJet 1 ε) - 2 / 5 := by
  simp [alphaOf, velNormSq_lineJet1]

lemma rnorm_lineJet1_even (ε : ℝ) :
    rnorm (lineJet 1 (-ε)) = rnorm (lineJet 1 ε) := by
  simp [rnorm_lineJet1]

lemma continuousAt_alphaOf_lineJet1 :
    ContinuousAt (fun ε => alphaOf (lineJet 1 ε)) 0 := by
  have hr : ContinuousAt (fun ε => rnorm (lineJet 1 ε)) 0 :=
    hasDerivAt_rnorm_lineJet1.continuousAt
  have hinv : ContinuousAt (fun ε => (2 : ℝ) / rnorm (lineJet 1 ε)) 0 := by
    refine continuousAt_const.div hr ?_
    have : rnorm (lineJet 1 0) = 5 / 2 := by
      rw [rnorm_lineJet1]; norm_num [Real.sqrt_sq (by norm_num : (0 : ℝ) ≤ 5 / 2)]
    rw [this]; norm_num
  have hclosed : ContinuousAt (fun ε : ℝ => 2 / rnorm (lineJet 1 ε) - 2 / 5) 0 :=
    hinv.sub_const (2 / 5)
  exact hclosed.congr (Eventually.of_forall fun ε => (alphaOf_lineJet1 ε).symm)

lemma eventually_alpha_lineJet1_nonneg (χ : ℝ) :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 ≤ alphaOf (lineJet 1 ε) * χ ^ 2 := by
  have hα : ContinuousAt (fun ε => alphaOf (lineJet 1 ε)) 0 :=
    continuousAt_alphaOf_lineJet1
  have hα0 : 0 < alphaOf (lineJet 1 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have hpos : ∀ᶠ ε : ℝ in 𝓝 0, 0 < alphaOf (lineJet 1 ε) :=
    hα.tendsto.eventually (Ioi_mem_nhds hα0)
  exact hpos.mono fun ε h => mul_nonneg h.le (sq_nonneg _)

lemma continuousAt_stumpffC_alpha_lineJet1 (χ : ℝ) :
    ContinuousAt (fun ε => stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)) 0 := by
  have hmul : ContinuousAt (fun ε => alphaOf (lineJet 1 ε) * χ ^ 2) 0 :=
    continuousAt_alphaOf_lineJet1.mul_const _
  have hcongr :
      (fun ε => stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)) =ᶠ[𝓝 0]
        fun ε => cbar (Real.sqrt (alphaOf (lineJet 1 ε) * χ ^ 2)) :=
    (eventually_alpha_lineJet1_nonneg χ).mono fun ε hz => stumpffC_eq_cbar hz
  have hinner :
      ContinuousAt (fun ε => cbar (Real.sqrt (alphaOf (lineJet 1 ε) * χ ^ 2))) 0 :=
    (continuous_cbar.comp Real.continuous_sqrt).continuousAt.comp hmul
  exact hinner.congr hcongr.symm

lemma univF_odd_lineJet1 (ε χ : ℝ) :
    univF (lineJet 1 ε) χ
      - ((1 - alphaOf (lineJet 1 ε) * rnorm (lineJet 1 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 1 ε) * χ ^ 2)
        + rnorm (lineJet 1 ε) * χ)
      = ε * ((Real.sqrt 10 / 5) * χ ^ 2 *
          stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)) := by
  simp [univF, sigmaOf_lineJet1]
  ring

lemma rest_lineJet1_even (ε χ : ℝ) :
    (1 - alphaOf (lineJet 1 (-ε)) * rnorm (lineJet 1 (-ε))) * χ ^ 3
        * stumpffS (alphaOf (lineJet 1 (-ε)) * χ ^ 2)
      + rnorm (lineJet 1 (-ε)) * χ
      = (1 - alphaOf (lineJet 1 ε) * rnorm (lineJet 1 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 1 ε) * χ ^ 2)
        + rnorm (lineJet 1 ε) * χ := by
  rw [alphaOf_lineJet1 (-ε), alphaOf_lineJet1 ε, rnorm_lineJet1_even]

lemma hasDerivAt_univF_lineJet1_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 1 ε) χ)
      ((Real.sqrt 10 / 5) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 := by
  have hg : ContinuousAt
      (fun ε => (Real.sqrt 10 / 5) * χ ^ 2 *
        stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)) 0 :=
    (continuousAt_stumpffC_alpha_lineJet1 χ).const_mul _
  have hy :
      (Real.sqrt 10 / 5) * χ ^ 2 * stumpffC (alphaOf (lineJet 1 0) * χ ^ 2)
        = (Real.sqrt 10 / 5) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2) := by
    rw [lineJet_zero, alphaOf_sStar]
  have hodd := hasDerivAt_mul_continuousAt hg hy
  have hf := (differentiableAt_univF_lineJet 1 χ).hasDerivAt
  have hrest0 : HasDerivAt
      (fun ε => univF (lineJet 1 ε) χ
        - ε * ((Real.sqrt 10 / 5) * χ ^ 2 *
            stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)))
      (deriv (fun ε => univF (lineJet 1 ε) χ) 0
        - (Real.sqrt 10 / 5) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 :=
    hf.sub hodd
  have hrestFun :
      (fun ε => univF (lineJet 1 ε) χ
        - ε * ((Real.sqrt 10 / 5) * χ ^ 2 *
            stumpffC (alphaOf (lineJet 1 ε) * χ ^ 2)))
      = fun ε =>
        (1 - alphaOf (lineJet 1 ε) * rnorm (lineJet 1 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 1 ε) * χ ^ 2)
        + rnorm (lineJet 1 ε) * χ := by
    funext ε; linarith [univF_odd_lineJet1 ε χ]
  have hrest1 : HasDerivAt
      (fun ε =>
        (1 - alphaOf (lineJet 1 ε) * rnorm (lineJet 1 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 1 ε) * χ ^ 2)
        + rnorm (lineJet 1 ε) * χ)
      (deriv (fun ε => univF (lineJet 1 ε) χ) 0
        - (Real.sqrt 10 / 5) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 := by
    rw [← hrestFun]; exact hrest0
  have hzero :
      deriv (fun ε => univF (lineJet 1 ε) χ) 0
        - (Real.sqrt 10 / 5) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2) = 0 :=
    hasDerivAt_even_zero hrest1 (fun ε => rest_lineJet1_even ε χ)
  exact hf.congr_deriv (by linarith [hzero])

lemma hasDerivAt_chiOf_lineJet1 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 1 ε) t)
      (-(2 / 5) * ((Real.sqrt 10 / 5) * (2 * t / 5) ^ 2 *
        stumpffC ((2 / 5) * (2 * t / 5) ^ 2))) 0 :=
  hasDerivAt_chiOf_axis_gen t (hasDerivAt_univF_lineJet1_fixed (2 * t / 5))

lemma sigmaOf_lineJet3 (ε : ℝ) : sigmaOf (lineJet 3 ε) = (5 / 2) * ε :=
  vecDot_lineJet3 ε

lemma velNormSq_lineJet3 (ε : ℝ) :
    ‖stateVel (lineJet 3 ε)‖ ^ 2 = ε ^ 2 + 2 / 5 := by
  rw [stateVel_lineJet3, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ ε ^ 2 + (Real.sqrt 10 / 5) ^ 2 + 0 ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  have hs : (Real.sqrt 10 / 5) ^ 2 = 2 / 5 := by
    field_simp
    rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
    norm_num
  rw [hs]
  ring

lemma alphaOf_lineJet3 (ε : ℝ) : alphaOf (lineJet 3 ε) = 2 / 5 - ε ^ 2 := by
  simp [alphaOf, rnorm_lineJet3, velNormSq_lineJet3]
  ring

lemma one_sub_alpha_r_lineJet3 (ε : ℝ) :
    1 - alphaOf (lineJet 3 ε) * rnorm (lineJet 3 ε) = (5 / 2) * ε ^ 2 := by
  rw [alphaOf_lineJet3, rnorm_lineJet3]
  ring

lemma univF_odd_lineJet3 (ε χ : ℝ) :
    univF (lineJet 3 ε) χ
      - ((1 - alphaOf (lineJet 3 ε) * rnorm (lineJet 3 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 3 ε) * χ ^ 2)
        + rnorm (lineJet 3 ε) * χ)
      = ε * ((5 / 2) * χ ^ 2 * stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)) := by
  simp [univF, sigmaOf_lineJet3]
  ring

lemma rest_lineJet3_even (ε χ : ℝ) :
    (1 - alphaOf (lineJet 3 (-ε)) * rnorm (lineJet 3 (-ε))) * χ ^ 3
        * stumpffS (alphaOf (lineJet 3 (-ε)) * χ ^ 2)
      + rnorm (lineJet 3 (-ε)) * χ
      = (1 - alphaOf (lineJet 3 ε) * rnorm (lineJet 3 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 3 ε) * χ ^ 2)
        + rnorm (lineJet 3 ε) * χ := by
  simp [alphaOf_lineJet3, rnorm_lineJet3]

lemma continuousAt_alphaOf_lineJet3 :
    ContinuousAt (fun ε => alphaOf (lineJet 3 ε)) 0 := by
  have h : ContinuousAt (fun ε : ℝ => 2 / 5 - ε ^ 2) 0 := by fun_prop
  exact h.congr (Eventually.of_forall fun ε => (alphaOf_lineJet3 ε).symm)

lemma eventually_alpha_lineJet3_nonneg (χ : ℝ) :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 ≤ alphaOf (lineJet 3 ε) * χ ^ 2 := by
  have hα : ContinuousAt (fun ε => alphaOf (lineJet 3 ε)) 0 :=
    continuousAt_alphaOf_lineJet3
  have hα0 : 0 < alphaOf (lineJet 3 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have hpos : ∀ᶠ ε : ℝ in 𝓝 0, 0 < alphaOf (lineJet 3 ε) :=
    hα.tendsto.eventually (Ioi_mem_nhds hα0)
  exact hpos.mono fun ε h => mul_nonneg h.le (sq_nonneg _)

lemma continuousAt_stumpffC_alpha_lineJet3 (χ : ℝ) :
    ContinuousAt (fun ε => stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)) 0 := by
  have hmul : ContinuousAt (fun ε => alphaOf (lineJet 3 ε) * χ ^ 2) 0 :=
    continuousAt_alphaOf_lineJet3.mul_const _
  have hcongr :
      (fun ε => stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)) =ᶠ[𝓝 0]
        fun ε => cbar (Real.sqrt (alphaOf (lineJet 3 ε) * χ ^ 2)) :=
    (eventually_alpha_lineJet3_nonneg χ).mono fun ε hz => stumpffC_eq_cbar hz
  have hinner :
      ContinuousAt (fun ε => cbar (Real.sqrt (alphaOf (lineJet 3 ε) * χ ^ 2))) 0 :=
    (continuous_cbar.comp Real.continuous_sqrt).continuousAt.comp hmul
  exact hinner.congr hcongr.symm

lemma hasDerivAt_univF_lineJet3_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 3 ε) χ)
      ((5 / 2) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 := by
  have hg : ContinuousAt
      (fun ε => (5 / 2) * χ ^ 2 * stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)) 0 :=
    (continuousAt_stumpffC_alpha_lineJet3 χ).const_mul _
  have hy :
      (5 / 2) * χ ^ 2 * stumpffC (alphaOf (lineJet 3 0) * χ ^ 2)
        = (5 / 2) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2) := by
    rw [lineJet_zero, alphaOf_sStar]
  have hodd := hasDerivAt_mul_continuousAt hg hy
  have hf := (differentiableAt_univF_lineJet 3 χ).hasDerivAt
  have hrest0 : HasDerivAt
      (fun ε => univF (lineJet 3 ε) χ
        - ε * ((5 / 2) * χ ^ 2 * stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)))
      (deriv (fun ε => univF (lineJet 3 ε) χ) 0
        - (5 / 2) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 :=
    hf.sub hodd
  have hrestFun :
      (fun ε => univF (lineJet 3 ε) χ
        - ε * ((5 / 2) * χ ^ 2 * stumpffC (alphaOf (lineJet 3 ε) * χ ^ 2)))
      = fun ε =>
        (1 - alphaOf (lineJet 3 ε) * rnorm (lineJet 3 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 3 ε) * χ ^ 2)
        + rnorm (lineJet 3 ε) * χ := by
    funext ε; linarith [univF_odd_lineJet3 ε χ]
  have hrest1 : HasDerivAt
      (fun ε =>
        (1 - alphaOf (lineJet 3 ε) * rnorm (lineJet 3 ε)) * χ ^ 3
          * stumpffS (alphaOf (lineJet 3 ε) * χ ^ 2)
        + rnorm (lineJet 3 ε) * χ)
      (deriv (fun ε => univF (lineJet 3 ε) χ) 0
        - (5 / 2) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2)) 0 := by
    rw [← hrestFun]; exact hrest0
  have hzero :
      deriv (fun ε => univF (lineJet 3 ε) χ) 0
        - (5 / 2) * χ ^ 2 * stumpffC ((2 / 5) * χ ^ 2) = 0 :=
    hasDerivAt_even_zero hrest1 (fun ε => rest_lineJet3_even ε χ)
  exact hf.congr_deriv (by linarith [hzero])

lemma hasDerivAt_chiOf_lineJet3 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 3 ε) t)
      (-(2 / 5) * ((5 / 2) * (2 * t / 5) ^ 2 *
        stumpffC ((2 / 5) * (2 * t / 5) ^ 2))) 0 :=
  hasDerivAt_chiOf_axis_gen t (hasDerivAt_univF_lineJet3_fixed (2 * t / 5))

lemma sigmaOf_lineJet4 (ε : ℝ) : sigmaOf (lineJet 4 ε) = 0 :=
  vecDot_lineJet4 ε

lemma velNormSq_lineJet4 (ε : ℝ) :
    ‖stateVel (lineJet 4 ε)‖ ^ 2 =
      2 / 5 + 2 * (Real.sqrt 10 / 5) * ε + ε ^ 2 := by
  rw [stateVel_lineJet4, ofCoords_norm]
  have hnn : (0 : ℝ) ≤ 0 ^ 2 + (Real.sqrt 10 / 5 + ε) ^ 2 + 0 ^ 2 := by positivity
  rw [Real.sq_sqrt hnn]
  have hs : Real.sqrt 10 ^ 2 = 10 := Real.sq_sqrt (by norm_num)
  ring_nf
  rw [hs]
  ring

lemma alphaOf_lineJet4 (ε : ℝ) :
    alphaOf (lineJet 4 ε) =
      2 / 5 - 2 * (Real.sqrt 10 / 5) * ε - ε ^ 2 := by
  simp [alphaOf, rnorm_lineJet4, velNormSq_lineJet4]
  ring

lemma one_sub_alpha_r_lineJet4 (ε : ℝ) :
    1 - alphaOf (lineJet 4 ε) * rnorm (lineJet 4 ε) =
      Real.sqrt 10 * ε + (5 / 2) * ε ^ 2 := by
  rw [alphaOf_lineJet4, rnorm_lineJet4]
  ring

lemma univF_lineJet4 (ε χ : ℝ) :
    univF (lineJet 4 ε) χ =
      (Real.sqrt 10 * ε + (5 / 2) * ε ^ 2) * χ ^ 3
        * stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2)
        + (5 / 2) * χ := by
  rw [univF, sigmaOf_lineJet4, one_sub_alpha_r_lineJet4, rnorm_lineJet4]
  ring

lemma continuousAt_alphaOf_lineJet4 :
    ContinuousAt (fun ε => alphaOf (lineJet 4 ε)) 0 := by
  have h : ContinuousAt
      (fun ε : ℝ => 2 / 5 - 2 * (Real.sqrt 10 / 5) * ε - ε ^ 2) 0 := by fun_prop
  exact h.congr (Eventually.of_forall fun ε => (alphaOf_lineJet4 ε).symm)

lemma eventually_alpha_lineJet4_nonneg (χ : ℝ) :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 ≤ alphaOf (lineJet 4 ε) * χ ^ 2 := by
  have hα : ContinuousAt (fun ε => alphaOf (lineJet 4 ε)) 0 :=
    continuousAt_alphaOf_lineJet4
  have hα0 : 0 < alphaOf (lineJet 4 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have hpos : ∀ᶠ ε : ℝ in 𝓝 0, 0 < alphaOf (lineJet 4 ε) :=
    hα.tendsto.eventually (Ioi_mem_nhds hα0)
  exact hpos.mono fun ε h => mul_nonneg h.le (sq_nonneg _)

lemma continuousAt_stumpffS_alpha_lineJet4 (χ : ℝ) :
    ContinuousAt (fun ε => stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2)) 0 := by
  have hmul : ContinuousAt (fun ε => alphaOf (lineJet 4 ε) * χ ^ 2) 0 :=
    continuousAt_alphaOf_lineJet4.mul_const _
  have hcongr :
      (fun ε => stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2)) =ᶠ[𝓝 0]
        fun ε => sbar (Real.sqrt (alphaOf (lineJet 4 ε) * χ ^ 2)) :=
    (eventually_alpha_lineJet4_nonneg χ).mono fun ε hz => stumpffS_eq_sbar hz
  have hinner :
      ContinuousAt (fun ε => sbar (Real.sqrt (alphaOf (lineJet 4 ε) * χ ^ 2))) 0 :=
    (continuous_sbar.comp Real.continuous_sqrt).continuousAt.comp hmul
  exact hinner.congr hcongr.symm

lemma hasDerivAt_sq_mul_continuousAt {g : ℝ → ℝ}
    (hg : ContinuousAt g 0) :
    HasDerivAt (fun ε => ε ^ 2 * g ε) 0 0 := by
  have hεg : ContinuousAt (fun ε => ε * g ε) 0 :=
    continuousAt_id.mul hg
  have hy : (fun ε => ε * g ε) 0 = 0 := by simp
  have h := hasDerivAt_mul_continuousAt hεg hy
  refine h.congr_of_eventuallyEq (Eventually.of_forall fun ε => ?_)
  ring

lemma hasDerivAt_univF_lineJet4_fixed (χ : ℝ) :
    HasDerivAt (fun ε => univF (lineJet 4 ε) χ)
      (Real.sqrt 10 * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2)) 0 := by
  have hg : ContinuousAt
      (fun ε => Real.sqrt 10 * χ ^ 3 *
        stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2)) 0 :=
    (continuousAt_stumpffS_alpha_lineJet4 χ).const_mul _
  have hy :
      Real.sqrt 10 * χ ^ 3 * stumpffS (alphaOf (lineJet 4 0) * χ ^ 2)
        = Real.sqrt 10 * χ ^ 3 * stumpffS ((2 / 5) * χ ^ 2) := by
    rw [lineJet_zero, alphaOf_sStar]
  have hlin := hasDerivAt_mul_continuousAt hg hy
  have hsqg : ContinuousAt
      (fun ε => (5 / 2) * χ ^ 3 * stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2)) 0 :=
    (continuousAt_stumpffS_alpha_lineJet4 χ).const_mul _
  have hsq := hasDerivAt_sq_mul_continuousAt hsqg
  have hconst : HasDerivAt (fun _ : ℝ => (5 / 2 : ℝ) * χ) 0 0 :=
    hasDerivAt_const _ _
  have hsum := (hlin.add hsq).add hconst
  have heq : (fun ε => univF (lineJet 4 ε) χ) =ᶠ[𝓝 0]
      fun ε =>
        ε * (Real.sqrt 10 * χ ^ 3 * stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2))
          + ε ^ 2 * ((5 / 2) * χ ^ 3 * stumpffS (alphaOf (lineJet 4 ε) * χ ^ 2))
          + (5 / 2) * χ := by
    refine Eventually.of_forall fun ε => ?_
    convert univF_lineJet4 ε χ using 1
    ring
  exact (hsum.congr_deriv (by ring)).congr_of_eventuallyEq heq

lemma hasDerivAt_chiOf_lineJet4 (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 4 ε) t)
      (-(2 / 5) * (Real.sqrt 10 * (2 * t / 5) ^ 3 *
        stumpffS ((2 / 5) * (2 * t / 5) ^ 2))) 0 :=
  hasDerivAt_chiOf_axis_gen t (hasDerivAt_univF_lineJet4_fixed (2 * t / 5))

lemma omegaChi : Real.sqrt 10 / 5 = nStar * (5 / 2) := by
  rw [nStar, meanMotion_eq]
  ring

lemma fg_f_sStar_chi (χ : ℝ) :
    fg_f sStar χ = Real.cos ((Real.sqrt 10 / 5) * χ) := by
  have h := fg_f_sStar (5 / 2 * χ)
  have hχ : 2 * (5 / 2 * χ) / 5 = χ := by ring
  rw [hχ] at h
  rw [h]
  have heq : Real.sqrt (8 / 125) * (5 / 2 * χ) = (Real.sqrt 10 / 5) * χ := by
    calc
      Real.sqrt (8 / 125) * (5 / 2 * χ)
          = nStar * (5 / 2 * χ) := by rw [nStar]
      _ = (nStar * (5 / 2)) * χ := by ring
      _ = (Real.sqrt 10 / 5) * χ := by rw [← omegaChi]
  rw [heq]

lemma fg_g_sStar_chi (t χ : ℝ) :
    fg_g sStar t χ =
      t - (5 / 2) * χ + Real.sin ((Real.sqrt 10 / 5) * χ) / nStar := by
  have h := fg_g_sStar (5 / 2 * χ)
  have hχ : 2 * (5 / 2 * χ) / 5 = χ := by ring
  rw [hχ] at h
  have heq : Real.sqrt (8 / 125) * (5 / 2 * χ) = (Real.sqrt 10 / 5) * χ := by
    calc
      Real.sqrt (8 / 125) * (5 / 2 * χ)
          = nStar * (5 / 2 * χ) := by rw [nStar]
      _ = (nStar * (5 / 2)) * χ := by ring
      _ = (Real.sqrt 10 / 5) * χ := by rw [← omegaChi]
  have : fg_g sStar (5 / 2 * χ) χ =
      (5 / 2) * χ - χ ^ 3 * stumpffS (alphaOf sStar * χ ^ 2) := rfl
  have hS : χ ^ 3 * stumpffS (alphaOf sStar * χ ^ 2) =
      (5 / 2) * χ - Real.sin ((Real.sqrt 10 / 5) * χ) / nStar := by
    rw [this] at h
    rw [heq, show Real.sqrt (8 / 125) = nStar from rfl] at h
    linarith [h]
  simp [fg_g]
  linarith [hS]

lemma hasDerivAt_omega_mul (χ : ℝ) :
    HasDerivAt (fun ξ : ℝ => (Real.sqrt 10 / 5) * ξ) (Real.sqrt 10 / 5) χ := by
  simpa using (hasDerivAt_id χ).const_mul (Real.sqrt 10 / 5)

lemma hasDerivAt_fg_f_sStar (χ : ℝ) :
    HasDerivAt (fun ξ => fg_f sStar ξ)
      (-Real.sin ((Real.sqrt 10 / 5) * χ) * (Real.sqrt 10 / 5)) χ := by
  have heq : (fun ξ => fg_f sStar ξ) = fun ξ => Real.cos ((Real.sqrt 10 / 5) * ξ) :=
    funext fg_f_sStar_chi
  rw [heq]
  exact ((Real.hasDerivAt_cos ((Real.sqrt 10 / 5) * χ)).comp χ
    (hasDerivAt_omega_mul χ)).congr_deriv (by ring)

lemma hasDerivAt_fg_g_sStar (t χ : ℝ) :
    HasDerivAt (fun ξ => fg_g sStar t ξ)
      (-(5 / 2) + Real.cos ((Real.sqrt 10 / 5) * χ) * (Real.sqrt 10 / 5) / nStar) χ := by
  have heq :
      (fun ξ => fg_g sStar t ξ) =
        (fun ξ => t - (5 / 2) * ξ) +
          fun ξ => Real.sin ((Real.sqrt 10 / 5) * ξ) / nStar := by
    funext ξ
    simp [fg_g_sStar_chi t ξ, Pi.add_apply]
  rw [heq]
  have h52 : HasDerivAt (fun ξ : ℝ => ξ * (5 / 2)) (5 / 2) χ := by
    simpa using (hasDerivAt_id χ).mul_const (5 / 2 : ℝ)
  have hid : HasDerivAt (fun ξ : ℝ => t - ξ * (5 / 2)) (-(5 / 2)) χ :=
    ((hasDerivAt_const χ t).sub h52).congr_deriv (by ring)
  have hid' : HasDerivAt (fun ξ : ℝ => t - (5 / 2) * ξ) (-(5 / 2)) χ :=
    hid.congr_of_eventuallyEq (Eventually.of_forall fun ξ => by ring)
  have hsin := (Real.hasDerivAt_sin ((Real.sqrt 10 / 5) * χ)).comp χ
    (hasDerivAt_omega_mul χ)
  have hdiv : HasDerivAt
      (fun ξ => Real.sin ((Real.sqrt 10 / 5) * ξ) / nStar)
      (Real.cos ((Real.sqrt 10 / 5) * χ) * (Real.sqrt 10 / 5) / nStar) χ :=
    (hsin.div_const nStar).congr_deriv (by ring)
  exact hid'.add hdiv

lemma fderiv_uncurry_fg_f_inr (χ0 c : ℝ) :
    fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ0) (0, c) =
      c * deriv (fun ξ => fg_f sStar ξ) χ0 := by
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ0))
      (sStar, χ0) :=
    ((contDiffAt_fg_f_unc χ0).differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ξ : ℝ => (sStar, ξ)) ((0 : Fin 6 → ℝ), (1 : ℝ)) χ0 :=
    (hasDerivAt_const χ0 sStar).prodMk (hasDerivAt_id χ0)
  have hcomp := hF.comp_hasDerivAt χ0 hpath
  have huniq := hcomp.unique (hasDerivAt_fg_f_sStar χ0)
  have hlin1 :
      fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ0) (0, 1)
        = deriv (fun ξ => fg_f sStar ξ) χ0 := by
    rw [(hasDerivAt_fg_f_sStar χ0).deriv]
    simpa using huniq
  have hmap :=
    map_smul (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, χ0)) c
      ((0 : Fin 6 → ℝ), (1 : ℝ))
  have hsc : (c : ℝ) • ((0 : Fin 6 → ℝ), (1 : ℝ)) = ((0 : Fin 6 → ℝ), c) := by
    simp [Prod.smul_def]
  rw [← hsc, hmap, hlin1, smul_eq_mul]

lemma fderiv_uncurry_fg_g_inr (t χ0 c : ℝ) :
    fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ0) (0, c) =
      c * deriv (fun ξ => fg_g sStar t ξ) χ0 := by
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ0))
      (sStar, χ0) :=
    ((contDiffAt_fg_g_unc t χ0).differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ξ : ℝ => (sStar, ξ)) ((0 : Fin 6 → ℝ), (1 : ℝ)) χ0 :=
    (hasDerivAt_const χ0 sStar).prodMk (hasDerivAt_id χ0)
  have hcomp := hF.comp_hasDerivAt χ0 hpath
  have huniq := hcomp.unique (hasDerivAt_fg_g_sStar t χ0)
  have hlin1 :
      fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ0) (0, 1)
        = deriv (fun ξ => fg_g sStar t ξ) χ0 := by
    rw [(hasDerivAt_fg_g_sStar t χ0).deriv]
    simpa using huniq
  have hmap :=
    map_smul (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, χ0)) c
      ((0 : Fin 6 → ℝ), (1 : ℝ))
  have hsc : (c : ℝ) • ((0 : Fin 6 → ℝ), (1 : ℝ)) = ((0 : Fin 6 → ℝ), c) := by
    simp [Prod.smul_def]
  rw [← hsc, hmap, hlin1, smul_eq_mul]

lemma hasDerivAt_fg_f_chiOf_gen {j : Fin 6} (t : ℝ) {Ff χ' : ℝ}
    (hχ : HasDerivAt (fun ε => chiOf (lineJet j ε) t) χ' 0)
    (hfixed : HasDerivAt (fun ε => fg_f (lineJet j ε) (2 * t / 5)) Ff 0) :
    HasDerivAt (fun ε => fg_f (lineJet j ε) (chiOf (lineJet j ε) t))
      (Ff + χ' * deriv (fun ξ => fg_f sStar ξ) (2 * t / 5)) 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (sStar, 2 * t / 5) :=
    contDiffAt_fg_f_unc (2 * t / 5)
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), χ') 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
        (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have hpt : (lineJet j 0, chiOf (lineJet j 0) t) = (sStar, 2 * t / 5) := by
    simp [lineJet_zero, chiOf_sStar]
  have hlin :
      fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, 2 * t / 5)
        (Pi.single j 1, χ')
        = Ff + χ' * deriv (fun ξ => fg_f sStar ξ) (2 * t / 5) := by
    have hL :=
      map_add (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, 2 * t / 5))
        (Pi.single j (1 : ℝ), (0 : ℝ)) (0, χ')
    have hadd : (Pi.single j (1 : ℝ), (0 : ℝ)) + ((0 : Fin 6 → ℝ), χ')
        = (Pi.single j (1 : ℝ), χ') := by
      apply Prod.ext <;> simp
    have h0 :
        fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_f p.1 p.2) (sStar, 2 * t / 5)
          (Pi.single j 1, (0 : ℝ)) = Ff := by
      have hpt0 : lineJet j 0 = sStar := lineJet_zero j
      simpa [hpt0] using hcomp0.unique hfixed
    have hinr := fderiv_uncurry_fg_f_inr (2 * t / 5) χ'
    rw [← hadd, hL, h0, hinr]
  rw [hpt] at hcomp
  exact hcomp.congr_deriv hlin

lemma hasDerivAt_fg_g_chiOf_gen {j : Fin 6} (t : ℝ) {Fg χ' : ℝ}
    (hχ : HasDerivAt (fun ε => chiOf (lineJet j ε) t) χ' 0)
    (hfixed : HasDerivAt (fun ε => fg_g (lineJet j ε) t (2 * t / 5)) Fg 0) :
    HasDerivAt (fun ε => fg_g (lineJet j ε) t (chiOf (lineJet j ε) t))
      (Fg + χ' * deriv (fun ξ => fg_g sStar t ξ) (2 * t / 5)) 0 := by
  have hU : ContDiffAt ℝ ⊤ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (sStar, 2 * t / 5) :=
    contDiffAt_fg_g_unc t (2 * t / 5)
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, 2 * t / 5))
      (sStar, 2 * t / 5) :=
    (hU.differentiableAt (by decide)).hasFDerivAt
  have hpath : HasDerivAt (fun ε => (lineJet j ε, chiOf (lineJet j ε) t))
      (Pi.single j (1 : ℝ), χ') 0 :=
    (hasDerivAt_lineJet j 0).prodMk hχ
  have hFpath : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
        (lineJet j 0, chiOf (lineJet j 0) t))
      (lineJet j 0, chiOf (lineJet j 0) t) := by
    rw [lineJet_zero, chiOf_sStar]; exact hF
  have hcomp := hFpath.comp_hasDerivAt 0 hpath
  have hpair0 := hasDerivAt_pair_lineJet_const j (2 * t / 5) 0
  have hF0 : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2)
      (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (lineJet j 0, 2 * t / 5))
      (lineJet j 0, 2 * t / 5) := by
    rw [lineJet_zero]; exact hF
  have hcomp0 := hF0.comp_hasDerivAt 0 hpair0
  have hpt : (lineJet j 0, chiOf (lineJet j 0) t) = (sStar, 2 * t / 5) := by
    simp [lineJet_zero, chiOf_sStar]
  have hlin :
      fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, 2 * t / 5)
        (Pi.single j 1, χ')
        = Fg + χ' * deriv (fun ξ => fg_g sStar t ξ) (2 * t / 5) := by
    have hL :=
      map_add (fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, 2 * t / 5))
        (Pi.single j (1 : ℝ), (0 : ℝ)) (0, χ')
    have hadd : (Pi.single j (1 : ℝ), (0 : ℝ)) + ((0 : Fin 6 → ℝ), χ')
        = (Pi.single j (1 : ℝ), χ') := by
      apply Prod.ext <;> simp
    have h0 :
        fderiv ℝ (fun p : (Fin 6 → ℝ) × ℝ => fg_g p.1 t p.2) (sStar, 2 * t / 5)
          (Pi.single j 1, (0 : ℝ)) = Fg := by
      have hpt0 : lineJet j 0 = sStar := lineJet_zero j
      simpa [hpt0] using hcomp0.unique hfixed
    have hinr := fderiv_uncurry_fg_g_inr t (2 * t / 5) χ'
    rw [← hadd, hL, h0, hinr]
  rw [hpt] at hcomp
  exact hcomp.congr_deriv hlin

lemma fg_f_lineJet1_even (χ ε : ℝ) :
    fg_f (lineJet 1 (-ε)) χ = fg_f (lineJet 1 ε) χ := by
  simp [fg_f, alphaOf_lineJet1, rnorm_lineJet1]

lemma fg_g_lineJet1_even (t χ ε : ℝ) :
    fg_g (lineJet 1 (-ε)) t χ = fg_g (lineJet 1 ε) t χ := by
  simp [fg_g, alphaOf_lineJet1, rnorm_lineJet1]

lemma hasDerivAt_fg_f_lineJet1_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 1 ε) χ) 0 0 := by
  have hf := (differentiableAt_fg_f_lineJet 1 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_f_lineJet1_even χ))

lemma hasDerivAt_fg_g_lineJet1_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 1 ε) t χ) 0 0 := by
  have hf := (differentiableAt_fg_g_lineJet 1 t χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_g_lineJet1_even t χ))

lemma fg_f_lineJet3_even (χ ε : ℝ) :
    fg_f (lineJet 3 (-ε)) χ = fg_f (lineJet 3 ε) χ := by
  simp [fg_f, alphaOf_lineJet3, rnorm_lineJet3]

lemma fg_g_lineJet3_even (t χ ε : ℝ) :
    fg_g (lineJet 3 (-ε)) t χ = fg_g (lineJet 3 ε) t χ := by
  simp [fg_g, alphaOf_lineJet3]

lemma hasDerivAt_fg_f_lineJet3_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 3 ε) χ) 0 0 := by
  have hf := (differentiableAt_fg_f_lineJet 3 χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_f_lineJet3_even χ))

lemma hasDerivAt_fg_g_lineJet3_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 3 ε) t χ) 0 0 := by
  have hf := (differentiableAt_fg_g_lineJet 3 t χ).hasDerivAt
  exact hf.congr_deriv (hasDerivAt_even_zero hf (fg_g_lineJet3_even t χ))

lemma hasDerivAt_pos_lineJet3 :
    HasDerivAt (fun ε => statePos (lineJet 3 ε)) (0 : Vec) 0 := by
  have h := hasDerivAt_const (0 : ℝ) (ofCoords (5 / 2) 0 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall statePos_lineJet3)

lemma hasDerivAt_vel_lineJet3 :
    HasDerivAt (fun ε => stateVel (lineJet 3 ε)) eX 0 := by
  have h : HasDerivAt (fun ε => ofCoords ε (Real.sqrt 10 / 5) 0) (ofCoords 1 0 0) 0 :=
    hasDerivAt_coord3 (hasDerivAt_id (0 : ℝ))
      (hasDerivAt_const (0 : ℝ) (Real.sqrt 10 / 5)) (hasDerivAt_const (0 : ℝ) (0 : ℝ))
  have heq : (fun ε => stateVel (lineJet 3 ε)) = fun ε => ofCoords ε (Real.sqrt 10 / 5) 0 :=
    funext stateVel_lineJet3
  rw [heq, eX]
  exact h

lemma hasDerivAt_pos_lineJet0 :
    HasDerivAt (fun ε => statePos (lineJet 0 ε)) eX 0 := by
  have h : HasDerivAt (fun ε => ofCoords (5 / 2 + ε) 0 0) (ofCoords 1 0 0) 0 :=
    hasDerivAt_coord3 ((hasDerivAt_id (0 : ℝ)).const_add (5 / 2))
      (hasDerivAt_const (0 : ℝ) (0 : ℝ)) (hasDerivAt_const (0 : ℝ) (0 : ℝ))
  have heq : (fun ε => statePos (lineJet 0 ε)) = fun ε => ofCoords (5 / 2 + ε) 0 0 :=
    funext statePos_lineJet0
  rw [heq, eX]
  exact h.congr_deriv (by simp)

lemma hasDerivAt_vel_lineJet0 :
    HasDerivAt (fun ε => stateVel (lineJet 0 ε)) (0 : Vec) 0 := by
  have h := hasDerivAt_const (0 : ℝ) (ofCoords 0 (Real.sqrt 10 / 5) 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall stateVel_lineJet0)

lemma hasDerivAt_pos_lineJet4 :
    HasDerivAt (fun ε => statePos (lineJet 4 ε)) (0 : Vec) 0 := by
  have h := hasDerivAt_const (0 : ℝ) (ofCoords (5 / 2) 0 0)
  exact h.congr_of_eventuallyEq (Eventually.of_forall statePos_lineJet4)

lemma hasDerivAt_vel_lineJet4 :
    HasDerivAt (fun ε => stateVel (lineJet 4 ε)) eY 0 := by
  have h : HasDerivAt (fun ε => ofCoords 0 (Real.sqrt 10 / 5 + ε) 0) (ofCoords 0 1 0) 0 :=
    hasDerivAt_coord3 (hasDerivAt_const (0 : ℝ) (0 : ℝ))
      ((hasDerivAt_id (0 : ℝ)).const_add (Real.sqrt 10 / 5))
      (hasDerivAt_const (0 : ℝ) (0 : ℝ))
  have heq : (fun ε => stateVel (lineJet 4 ε)) =
      fun ε => ofCoords 0 (Real.sqrt 10 / 5 + ε) 0 :=
    funext stateVel_lineJet4
  rw [heq, eY]
  exact h

lemma sqrt_two_div_five : Real.sqrt (2 / 5) = Real.sqrt 10 / 5 := by
  have hnn : (0 : ℝ) ≤ Real.sqrt 10 / 5 := by positivity
  refine (Real.sqrt_eq_iff_mul_self_eq (by norm_num) hnn).2 ?_
  field_simp
  rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma omega_mul_chi_sStar (t : ℝ) :
    (Real.sqrt 10 / 5) * (2 * t / 5) = nStar * t := by
  rw [omegaChi]
  ring

lemma chiSq_C_sStar (t : ℝ) :
    (2 * t / 5) ^ 2 * stumpffC ((2 / 5) * (2 * t / 5) ^ 2) =
      (5 / 2) * (1 - Real.cos (nStar * t)) := by
  have hα : (0 : ℝ) < 2 / 5 := by norm_num
  have h := chiSq_mul_stumpffC (χ := 2 * t / 5) hα
  have harg : Real.sqrt (2 / 5) * (2 * t / 5) = nStar * t := by
    rw [sqrt_two_div_five, omega_mul_chi_sStar]
  rw [h, harg]
  field_simp

lemma chiCube_S_sStar (t : ℝ) :
    (2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2) =
      t - Real.sin (nStar * t) / nStar := by
  have h := fg_g_sStar t
  have : t - (2 * t / 5) ^ 3 * stumpffS (alphaOf sStar * (2 * t / 5) ^ 2)
      = Real.sin (nStar * t) / nStar := by
    simpa [fg_g, nStar] using h
  have hz : alphaOf sStar * (2 * t / 5) ^ 2 = (2 / 5) * (2 * t / 5) ^ 2 := by
    rw [alphaOf_sStar]
  linarith [this, (by rw [hz] : (2 * t / 5) ^ 3 *
    stumpffS (alphaOf sStar * (2 * t / 5) ^ 2) =
      (2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2))]

lemma deriv_fg_f_sStar_at (t : ℝ) :
    deriv (fun ξ => fg_f sStar ξ) (2 * t / 5) =
      -Real.sin (nStar * t) * (Real.sqrt 10 / 5) := by
  rw [(hasDerivAt_fg_f_sStar (2 * t / 5)).deriv, omega_mul_chi_sStar]

lemma deriv_fg_g_sStar_at (t : ℝ) :
    deriv (fun ξ => fg_g sStar t ξ) (2 * t / 5) =
      (5 / 2) * (Real.cos (nStar * t) - 1) := by
  have h := (hasDerivAt_fg_g_sStar t (2 * t / 5)).deriv
  rw [h, omega_mul_chi_sStar]
  have hn := nStar_ne
  have hquot : (Real.sqrt 10 / 5) / nStar = 5 / 2 := by
    have hω := omegaChi
    field_simp [hn] at hω ⊢
    linarith [hω]
  calc
    -(5 / 2) + Real.cos (nStar * t) * (Real.sqrt 10 / 5) / nStar
        = -(5 / 2) + Real.cos (nStar * t) * ((Real.sqrt 10 / 5) / nStar) := by
          ring
    _ = -(5 / 2) + Real.cos (nStar * t) * (5 / 2) := by rw [hquot]
    _ = (5 / 2) * (Real.cos (nStar * t) - 1) := by ring

lemma inv_nStar : (1 / nStar) = 5 * Real.sqrt 10 / 4 := by
  have hn := nStar_ne
  rw [nStar, meanMotion_eq]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hn, hs]
  ring_nf
  simp [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma five_sqrt10_div4 : (25 / 4) * (Real.sqrt 10 / 5) = 1 / nStar := by
  rw [inv_nStar]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring

lemma nStar_mul_sqrt10 : nStar * Real.sqrt 10 = 4 / 5 := by
  rw [nStar, meanMotion_eq]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring_nf
  simp [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma chiPrime_lineJet3 (t : ℝ) :
    -(2 / 5) * ((5 / 2) * (2 * t / 5) ^ 2 * stumpffC ((2 / 5) * (2 * t / 5) ^ 2)) =
      -(5 / 2) * (1 - Real.cos (nStar * t)) := by
  have h := chiSq_C_sStar t
  calc
    -(2 / 5) * ((5 / 2) * (2 * t / 5) ^ 2 * stumpffC ((2 / 5) * (2 * t / 5) ^ 2))
        = -((2 * t / 5) ^ 2 * stumpffC ((2 / 5) * (2 * t / 5) ^ 2)) := by ring
    _ = -((5 / 2) * (1 - Real.cos (nStar * t))) := by rw [h]
    _ = -(5 / 2) * (1 - Real.cos (nStar * t)) := by ring

lemma hasDerivAt_chiOf_lineJet3' (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 3 ε) t)
      (-(5 / 2) * (1 - Real.cos (nStar * t))) 0 :=
  (hasDerivAt_chiOf_lineJet3 t).congr_deriv (chiPrime_lineJet3 t)

lemma hasDerivAt_fg_f_chiOf_lineJet3 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 3 ε) (chiOf (lineJet 3 ε) t))
      ((5 / 2) * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) *
        (Real.sqrt 10 / 5)) 0 := by
  have h := hasDerivAt_fg_f_chiOf_gen t (hasDerivAt_chiOf_lineJet3' t)
    (hasDerivAt_fg_f_lineJet3_fixed (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_f_sStar_at]
  ring

lemma hasDerivAt_fg_g_chiOf_lineJet3 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 3 ε) t (chiOf (lineJet 3 ε) t))
      ((25 / 4) * (1 - Real.cos (nStar * t)) ^ 2) 0 := by
  have h := hasDerivAt_fg_g_chiOf_gen t (hasDerivAt_chiOf_lineJet3' t)
    (hasDerivAt_fg_g_lineJet3_fixed t (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_g_sStar_at]
  ring

lemma fg_f_sStar_n (t : ℝ) : fg_f sStar (2 * t / 5) = Real.cos (nStar * t) := by
  rw [nStar, fg_f_sStar]

lemma fg_g_sStar_n (t : ℝ) :
    fg_g sStar t (2 * t / 5) = Real.sin (nStar * t) / nStar := by
  rw [nStar, fg_g_sStar]

lemma stmInertial_ofCoords (t dx dy dvx dvy : ℝ) :
    stmInertial t dx dy dvx dvy =
      ofCoords
        (stmRad t dx dy dvx dvy * Real.cos (nStar * t)
          - stmTan t dx dy dvx dvy * Real.sin (nStar * t))
        (stmRad t dx dy dvx dvy * Real.sin (nStar * t)
          + stmTan t dx dy dvx dvy * Real.cos (nStar * t))
        0 := by
  simp [stmInertial, erOf, ethOf, ofCoords_smul, ofCoords_add]
  ring

lemma stmCol_dvx (t : ℝ) :
    stmCol 2 t =
      ofCoords
        (Real.sin (nStar * t) / nStar * Real.cos (nStar * t)
          + 2 * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) / nStar)
        (Real.sin (nStar * t) / nStar * Real.sin (nStar * t)
          - 2 * (1 - Real.cos (nStar * t)) * Real.cos (nStar * t) / nStar)
        0 := by
  simp [stmCol, stmInertial_ofCoords, stmRad, stmTan]
  ring

lemma axis3_vec_eq_stm (t : ℝ) :
    ((5 / 2) * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) *
        (Real.sqrt 10 / 5)) • ofCoords (5 / 2) 0 0 +
      ((25 / 4) * (1 - Real.cos (nStar * t)) ^ 2) • ofCoords 0 (Real.sqrt 10 / 5) 0 +
        (Real.sin (nStar * t) / nStar) • ofCoords 1 0 0
      = stmCol 2 t := by
  rw [ofCoords_smul, ofCoords_smul, ofCoords_smul, ofCoords_add, ofCoords_add,
    stmCol_dvx]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords]
    have hn := nStar_ne
    have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have hns := nStar_mul_sqrt10
    field_simp [hn, hs]
    have : 5 * nStar * (1 - Real.cos (nStar * t)) * Real.sqrt 10
        = 5 * (4 / 5) * (1 - Real.cos (nStar * t)) := by
      calc
        5 * nStar * (1 - Real.cos (nStar * t)) * Real.sqrt 10
            = 5 * (nStar * Real.sqrt 10) * (1 - Real.cos (nStar * t)) := by ring
        _ = 5 * (4 / 5) * (1 - Real.cos (nStar * t)) := by rw [hns]
    rw [this]
    ring
  · simp [ofCoords]
    have hn := nStar_ne
    have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    have hns := nStar_mul_sqrt10
    field_simp [hn, hs]
    have : 25 * nStar * (1 - Real.cos (nStar * t)) ^ 2 * Real.sqrt 10
        = 25 * (4 / 5) * (1 - Real.cos (nStar * t)) ^ 2 := by
      calc
        25 * nStar * (1 - Real.cos (nStar * t)) ^ 2 * Real.sqrt 10
            = 25 * (nStar * Real.sqrt 10) * (1 - Real.cos (nStar * t)) ^ 2 := by ring
        _ = 25 * (4 / 5) * (1 - Real.cos (nStar * t)) ^ 2 := by rw [hns]
    rw [this]
    have hsc : Real.sin (nStar * t) ^ 2 = 1 - Real.cos (nStar * t) ^ 2 := by
      linarith [Real.sin_sq_add_cos_sq (nStar * t)]
    rw [hsc]
    ring
  · simp [ofCoords]

lemma hasDerivAt_keplerIC_lineJet3 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 3 ε) t) (stmCol 2 t) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet3 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet3 t
  have hp := hasDerivAt_pos_lineJet3
  have hv := hasDerivAt_vel_lineJet3
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hf0 := fg_f_sStar_n t
  have hg0 := fg_g_sStar_n t
  have hvec :
      ((5 / 2) * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) *
            (Real.sqrt 10 / 5)) • statePos (lineJet 3 0) +
          fg_f (lineJet 3 0) (chiOf (lineJet 3 0) t) • (0 : Vec) +
          (((25 / 4) * (1 - Real.cos (nStar * t)) ^ 2) • stateVel (lineJet 3 0) +
            fg_g (lineJet 3 0) t (chiOf (lineJet 3 0) t) • eX)
        = stmCol 2 t := by
    simp [lineJet_zero, chiOf_sStar, hf0, hg0, sStar_pos, sStar_vel, eX, smul_zero]
    have h := axis3_vec_eq_stm t
    convert h using 1
    abel
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 3 ε t)).congr_deriv ?_
  have hgoal :
      ((5 / 2) * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) *
            (Real.sqrt 10 / 5)) • statePos (lineJet 3 0) +
          fg_f (lineJet 3 0) (chiOf (lineJet 3 0) t) • (0 : Vec) +
          (fg_g (lineJet 3 0) t (chiOf (lineJet 3 0) t) • eX +
            ((25 / 4) * (1 - Real.cos (nStar * t)) ^ 2) • stateVel (lineJet 3 0))
        = stmCol 2 t := by
    simp [lineJet_zero, chiOf_sStar] at hvec ⊢
    convert hvec using 1
    abel
  simpa [lineJet_zero, chiOf_sStar] using hgoal

lemma chiPrime_lineJet1' (t : ℝ) :
    -(2 / 5) * ((Real.sqrt 10 / 5) * (2 * t / 5) ^ 2 *
        stumpffC ((2 / 5) * (2 * t / 5) ^ 2)) =
      -(Real.sqrt 10 / 5) * (1 - Real.cos (nStar * t)) := by
  have h := chiSq_C_sStar t
  calc
    -(2 / 5) * ((Real.sqrt 10 / 5) * (2 * t / 5) ^ 2 *
          stumpffC ((2 / 5) * (2 * t / 5) ^ 2))
        = -((2 / 5) * (Real.sqrt 10 / 5) *
            ((2 * t / 5) ^ 2 * stumpffC ((2 / 5) * (2 * t / 5) ^ 2))) := by ring
    _ = -((2 / 5) * (Real.sqrt 10 / 5) *
            ((5 / 2) * (1 - Real.cos (nStar * t)))) := by rw [h]
    _ = -(Real.sqrt 10 / 5) * (1 - Real.cos (nStar * t)) := by ring

lemma hasDerivAt_chiOf_lineJet1' (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 1 ε) t)
      (-(Real.sqrt 10 / 5) * (1 - Real.cos (nStar * t))) 0 :=
  (hasDerivAt_chiOf_lineJet1 t).congr_deriv (chiPrime_lineJet1' t)

lemma sqrt10_div5_sq : (Real.sqrt 10 / 5) ^ 2 = 2 / 5 := by
  field_simp
  rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
  norm_num

lemma hasDerivAt_fg_f_chiOf_lineJet1 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 1 ε) (chiOf (lineJet 1 ε) t))
      ((2 / 5) * Real.sin (nStar * t) * (1 - Real.cos (nStar * t))) 0 := by
  have h := hasDerivAt_fg_f_chiOf_gen t (hasDerivAt_chiOf_lineJet1' t)
    (hasDerivAt_fg_f_lineJet1_fixed (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_f_sStar_at]
  calc
    0 + (-(Real.sqrt 10 / 5) * (1 - Real.cos (nStar * t))) *
          (-Real.sin (nStar * t) * (Real.sqrt 10 / 5))
        = (Real.sqrt 10 / 5) ^ 2 * Real.sin (nStar * t) *
            (1 - Real.cos (nStar * t)) := by ring
    _ = (2 / 5) * Real.sin (nStar * t) * (1 - Real.cos (nStar * t)) := by
          rw [sqrt10_div5_sq]

lemma hasDerivAt_fg_g_chiOf_lineJet1 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 1 ε) t (chiOf (lineJet 1 ε) t))
      ((Real.sqrt 10 / 2) * (1 - Real.cos (nStar * t)) ^ 2) 0 := by
  have h := hasDerivAt_fg_g_chiOf_gen t (hasDerivAt_chiOf_lineJet1' t)
    (hasDerivAt_fg_g_lineJet1_fixed t (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_g_sStar_at]
  ring

lemma stmCol_dy (t : ℝ) :
    stmCol 1 t =
      ofCoords
        (Real.sin (nStar * t) * (1 - Real.cos (nStar * t)))
        (1 - Real.cos (nStar * t) + Real.cos (nStar * t) ^ 2)
        0 := by
  have h := stmInertial_ofCoords t 0 1 0 0
  simp [stmCol, stmRad, stmTan] at h ⊢
  rw [h]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords]; ring
  · simp [ofCoords]
    have hsc := Real.sin_sq_add_cos_sq (nStar * t)
    linarith [hsc]
  · simp [ofCoords]

lemma axis1_vec_eq_stm (t : ℝ) :
    ((2 / 5) * Real.sin (nStar * t) * (1 - Real.cos (nStar * t))) •
        ofCoords (5 / 2) 0 0 +
      Real.cos (nStar * t) • ofCoords 0 1 0 +
        ((Real.sqrt 10 / 2) * (1 - Real.cos (nStar * t)) ^ 2) •
          ofCoords 0 (Real.sqrt 10 / 5) 0
      = stmCol 1 t := by
  rw [ofCoords_smul, ofCoords_smul, ofCoords_smul, ofCoords_add, ofCoords_add,
    stmCol_dy]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords]; ring
  · simp [ofCoords]
    have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    field_simp [hs]
    rw [Real.sq_sqrt (by norm_num : (0 : ℝ) ≤ 10)]
    ring
  · simp [ofCoords]

lemma hasDerivAt_keplerIC_lineJet1 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 1 ε) t) (stmCol 1 t) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet1 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet1 t
  have hp := hasDerivAt_pos_lineJet1
  have hv := hasDerivAt_vel_lineJet1
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hf0 := fg_f_sStar_n t
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 1 ε t)).congr_deriv ?_
  simp [lineJet_zero, chiOf_sStar, hf0, sStar_pos, sStar_vel, smul_zero]
  have h := axis1_vec_eq_stm t
  convert h using 1
  abel


lemma eventually_alphaOf_lineJet0_pos :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 < alphaOf (lineJet 0 ε) := by
  have hα0 : 0 < alphaOf (lineJet 0 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  exact continuousAt_alphaOf_lineJet0.tendsto.eventually (Ioi_mem_nhds hα0)

lemma eventually_alphaOf_lineJet4_pos :
    ∀ᶠ ε : ℝ in 𝓝 0, 0 < alphaOf (lineJet 4 ε) := by
  have hα0 : 0 < alphaOf (lineJet 4 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  exact continuousAt_alphaOf_lineJet4.tendsto.eventually (Ioi_mem_nhds hα0)


lemma hasDerivAt_alphaOf_lineJet0 :
    HasDerivAt (fun ε => alphaOf (lineJet 0 ε)) (-(8 / 25)) 0 := by
  have hden : HasDerivAt (fun ε : ℝ => 5 / 2 + ε) (1 : ℝ) 0 :=
    (hasDerivAt_id (0 : ℝ)).const_add (5 / 2)
  have hinv : HasDerivAt (fun ε : ℝ => (5 / 2 + ε)⁻¹) (-(4 / 25)) 0 := by
    have h0 : (5 / 2 + (0 : ℝ)) ≠ 0 := by norm_num
    exact (hden.inv h0).congr_deriv (by norm_num)
  have h2 : HasDerivAt (fun ε : ℝ => (2 : ℝ) * (5 / 2 + ε)⁻¹) (-(8 / 25)) 0 :=
    (hinv.const_mul (2 : ℝ)).congr_deriv (by ring)
  have hclosed : HasDerivAt (fun ε : ℝ => 2 / (5 / 2 + ε) - 2 / 5) (-(8 / 25)) 0 := by
    simpa [div_eq_mul_inv] using h2.sub_const (2 / 5)
  refine hclosed.congr_of_eventuallyEq ?_
  filter_upwards [eventually_lineJet0_pos] with ε hε
  simpa using alphaOf_lineJet0 hε

lemma sqrt10_sq_val : Real.sqrt 10 ^ 2 = 10 :=
  Real.sq_sqrt (by norm_num)

lemma sqrt_alpha_deriv0_eval :
    (1 / (2 * (Real.sqrt 10 / 5))) * (-(8 / 25)) = -(2 * Real.sqrt 10 / 25) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring_nf
  simp only [← pow_two, sqrt10_sq_val]
  ring

lemma hasDerivAt_sqrt_alpha_lineJet0 :
    HasDerivAt (fun ε => Real.sqrt (alphaOf (lineJet 0 ε)))
      (-(2 * Real.sqrt 10 / 25)) 0 := by
  have hα0 : 0 < alphaOf (lineJet 0 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have h := (Real.hasDerivAt_sqrt hα0.ne').comp 0 hasDerivAt_alphaOf_lineJet0
  refine h.congr_deriv ?_
  rw [lineJet_zero, alphaOf_sStar, sqrt_two_div_five]
  exact sqrt_alpha_deriv0_eval

lemma alpha_r_lineJet0 {ε : ℝ} (hε : -5 / 2 < ε) :
    alphaOf (lineJet 0 ε) * rnorm (lineJet 0 ε) = 1 - (2 / 5) * ε := by
  linarith [one_sub_alpha_r_lineJet0 hε]

lemma fg_f_lineJet0_ell {ε χ : ℝ} (hα : 0 < alphaOf (lineJet 0 ε))
    (hε : -5 / 2 < ε) :
    fg_f (lineJet 0 ε) χ =
      1 - (1 - Real.cos (Real.sqrt (alphaOf (lineJet 0 ε)) * χ)) /
        (1 - (2 / 5) * ε) := by
  rw [fg_f_ell hα, alpha_r_lineJet0 hε]

lemma fg_g_lineJet0_ell {ε t χ : ℝ} (hα : 0 < alphaOf (lineJet 0 ε)) :
    fg_g (lineJet 0 ε) t χ =
      t - χ / alphaOf (lineJet 0 ε) +
        Real.sin (Real.sqrt (alphaOf (lineJet 0 ε)) * χ) /
          (alphaOf (lineJet 0 ε) * Real.sqrt (alphaOf (lineJet 0 ε))) := by
  have h := fg_g_ell (s := lineJet 0 ε) (t := t) (chi := χ) hα
  simpa [sub_eq_add_neg, add_comm, add_left_comm, add_assoc] using h

lemma sqrt_alpha_lineJet0_zero :
    Real.sqrt (alphaOf (lineJet 0 0)) = Real.sqrt 10 / 5 := by
  rw [lineJet_zero, alphaOf_sStar, sqrt_two_div_five]

lemma hasDerivAt_one_sub_two_fifths :
    HasDerivAt (fun ε : ℝ => 1 - (2 / 5) * ε) (-(2 / 5)) 0 := by
  have h := ((hasDerivAt_id (0 : ℝ)).const_mul (2 / 5 : ℝ)).const_sub (1 : ℝ)
  refine (h.congr_of_eventuallyEq (Eventually.of_forall fun ε => by simp [id])).congr_deriv ?_
  ring

lemma hasDerivAt_fg_f_lineJet0_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 0 ε) χ)
      ((2 * Real.sqrt 10 / 25) * χ *
        Real.sin ((Real.sqrt 10 / 5) * χ)
        - (2 / 5) * (1 - Real.cos ((Real.sqrt 10 / 5) * χ))) 0 := by
  have hψ := hasDerivAt_sqrt_alpha_lineJet0
  have hψχ : HasDerivAt
      (fun ε => Real.sqrt (alphaOf (lineJet 0 ε)) * χ)
      ((-(2 * Real.sqrt 10 / 25)) * χ) 0 :=
    hψ.mul_const χ
  have hω : Real.sqrt (alphaOf (lineJet 0 0)) * χ = (Real.sqrt 10 / 5) * χ := by
    rw [sqrt_alpha_lineJet0_zero]
  have hcos : HasDerivAt
      (fun ε => Real.cos (Real.sqrt (alphaOf (lineJet 0 ε)) * χ))
      (-Real.sin ((Real.sqrt 10 / 5) * χ) * ((-(2 * Real.sqrt 10 / 25)) * χ)) 0 := by
    have h := (Real.hasDerivAt_cos (Real.sqrt (alphaOf (lineJet 0 0)) * χ)).comp 0 hψχ
    exact h.congr_deriv (by rw [hω])
  have hnum : HasDerivAt
      (fun ε => 1 - Real.cos (Real.sqrt (alphaOf (lineJet 0 ε)) * χ))
      (Real.sin ((Real.sqrt 10 / 5) * χ) * ((-(2 * Real.sqrt 10 / 25)) * χ)) 0 := by
    exact ((hasDerivAt_const (0 : ℝ) (1 : ℝ)).sub hcos).congr_deriv (by ring)
  have hden := hasDerivAt_one_sub_two_fifths
  have hden0 : (1 - (2 / 5) * (0 : ℝ)) ≠ 0 := by norm_num
  have hdiv := hnum.div hden hden0
  have hclosed : HasDerivAt
      (fun ε =>
        1 - (1 - Real.cos (Real.sqrt (alphaOf (lineJet 0 ε)) * χ)) /
          (1 - (2 / 5) * ε))
      ((2 * Real.sqrt 10 / 25) * χ *
        Real.sin ((Real.sqrt 10 / 5) * χ)
        - (2 / 5) * (1 - Real.cos ((Real.sqrt 10 / 5) * χ))) 0 := by
    have h1 := (hasDerivAt_const (0 : ℝ) (1 : ℝ)).sub hdiv
    refine h1.congr_deriv ?_
    have hnum0 : 1 - Real.cos (Real.sqrt (alphaOf (lineJet 0 0)) * χ) =
        1 - Real.cos ((Real.sqrt 10 / 5) * χ) := by rw [sqrt_alpha_lineJet0_zero]
    simp [hnum0]
    ring
  refine hclosed.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_lineJet0_pos, eventually_lineJet0_pos]
    with ε hα hε
  exact fg_f_lineJet0_ell hα hε

lemma hasDerivAt_inv_alpha_lineJet0 :
    HasDerivAt (fun ε => (alphaOf (lineJet 0 ε))⁻¹) 2 0 := by
  have hα0 : alphaOf (lineJet 0 0) ≠ 0 := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  refine (hasDerivAt_alphaOf_lineJet0.inv hα0).congr_deriv ?_
  rw [lineJet_zero, alphaOf_sStar]
  norm_num

lemma psi3_sStar : (Real.sqrt 10 / 5) ^ 3 = 2 * Real.sqrt 10 / 25 := by
  have hsq := sqrt10_sq_val
  calc
    (Real.sqrt 10 / 5) ^ 3
        = Real.sqrt 10 ^ 3 / 125 := by ring
    _ = Real.sqrt 10 ^ 2 * Real.sqrt 10 / 125 := by ring
    _ = 10 * Real.sqrt 10 / 125 := by rw [hsq]
    _ = 2 * Real.sqrt 10 / 25 := by ring

lemma psi3_sStar_sq : ((Real.sqrt 10 / 5) ^ 3) ^ 2 = (8 : ℝ) / 125 := by
  rw [psi3_sStar]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  rw [sqrt10_sq_val]
  ring

lemma hasDerivAt_pow3_sqrt_alpha_lineJet0 :
    HasDerivAt (fun ε => Real.sqrt (alphaOf (lineJet 0 ε)) ^ 3)
      (-(12 * Real.sqrt 10 / 125)) 0 := by
  have hψ := hasDerivAt_sqrt_alpha_lineJet0
  have h := (hasDerivAt_pow 3 (Real.sqrt (alphaOf (lineJet 0 0)))).comp 0 hψ
  refine h.congr_deriv ?_
  rw [sqrt_alpha_lineJet0_zero, sqrt10_div5_sq]
  ring

lemma sin_div_psi3_deriv0 (χ : ℝ) :
    (Real.cos ((Real.sqrt 10 / 5) * χ) * (-(2 * Real.sqrt 10 / 25) * χ) *
        (Real.sqrt 10 / 5) ^ 3
      - Real.sin ((Real.sqrt 10 / 5) * χ) * (-(12 * Real.sqrt 10 / 125))) /
      ((Real.sqrt 10 / 5) ^ 3) ^ 2
      = -χ * Real.cos ((Real.sqrt 10 / 5) * χ)
        + (3 * Real.sqrt 10 / 2) * Real.sin ((Real.sqrt 10 / 5) * χ) := by
  rw [psi3_sStar]
  have hden : (2 * Real.sqrt 10 / 25) ^ 2 = (8 : ℝ) / 125 := by
    have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    field_simp [hs]
    rw [sqrt10_sq_val]
    ring
  rw [hden]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring_nf
  simp only [sqrt10_sq_val]
  ring

lemma hasDerivAt_fg_g_lineJet0_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 0 ε) t χ)
      (-(2 : ℝ) * χ - χ * Real.cos ((Real.sqrt 10 / 5) * χ)
        + (3 * Real.sqrt 10 / 2) * Real.sin ((Real.sqrt 10 / 5) * χ)) 0 := by
  have hψ := hasDerivAt_sqrt_alpha_lineJet0
  have hψχ : HasDerivAt
      (fun ε => Real.sqrt (alphaOf (lineJet 0 ε)) * χ)
      ((-(2 * Real.sqrt 10 / 25)) * χ) 0 :=
    hψ.mul_const χ
  have hω : Real.sqrt (alphaOf (lineJet 0 0)) * χ = (Real.sqrt 10 / 5) * χ := by
    rw [sqrt_alpha_lineJet0_zero]
  have hsin : HasDerivAt
      (fun ε => Real.sin (Real.sqrt (alphaOf (lineJet 0 ε)) * χ))
      (Real.cos ((Real.sqrt 10 / 5) * χ) * ((-(2 * Real.sqrt 10 / 25)) * χ)) 0 := by
    exact ((Real.hasDerivAt_sin (Real.sqrt (alphaOf (lineJet 0 0)) * χ)).comp 0 hψχ).congr_deriv
      (by rw [hω])
  have hψ3 := hasDerivAt_pow3_sqrt_alpha_lineJet0
  have hψ30 : Real.sqrt (alphaOf (lineJet 0 0)) ^ 3 ≠ 0 := by
    rw [sqrt_alpha_lineJet0_zero]
    exact pow_ne_zero 3 (div_ne_zero (Real.sqrt_ne_zero'.2 (by norm_num)) (by norm_num))
  have hquot := hsin.div hψ3 hψ30
  have hinv := hasDerivAt_inv_alpha_lineJet0
  have hχα : HasDerivAt (fun ε => χ * (alphaOf (lineJet 0 ε))⁻¹) (2 * χ) 0 :=
    (hinv.const_mul χ).congr_deriv (by ring)
  have hclosed : HasDerivAt
      (fun ε =>
        t - χ * (alphaOf (lineJet 0 ε))⁻¹ +
          Real.sin (Real.sqrt (alphaOf (lineJet 0 ε)) * χ) /
            (Real.sqrt (alphaOf (lineJet 0 ε)) ^ 3))
      (-(2 : ℝ) * χ - χ * Real.cos ((Real.sqrt 10 / 5) * χ)
        + (3 * Real.sqrt 10 / 2) * Real.sin ((Real.sqrt 10 / 5) * χ)) 0 := by
    have hsum := (hasDerivAt_const (0 : ℝ) t).sub hχα |>.add hquot
    refine hsum.congr_deriv ?_
    rw [sqrt_alpha_lineJet0_zero]
    linarith [sin_div_psi3_deriv0 χ]
  refine hclosed.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_lineJet0_pos] with ε hα
  have hpow : alphaOf (lineJet 0 ε) * Real.sqrt (alphaOf (lineJet 0 ε)) =
      Real.sqrt (alphaOf (lineJet 0 ε)) ^ 3 := by
    have hsq := Real.sq_sqrt hα.le
    calc
      alphaOf (lineJet 0 ε) * Real.sqrt (alphaOf (lineJet 0 ε))
          = Real.sqrt (alphaOf (lineJet 0 ε)) ^ 2 *
            Real.sqrt (alphaOf (lineJet 0 ε)) := by rw [hsq]
      _ = Real.sqrt (alphaOf (lineJet 0 ε)) ^ 3 := by ring
  rw [fg_g_lineJet0_ell hα, hpow]
  ring

lemma hasDerivAt_alphaOf_lineJet4 :
    HasDerivAt (fun ε => alphaOf (lineJet 4 ε))
      (-(2 * (Real.sqrt 10 / 5))) 0 := by
  have hlin : HasDerivAt (fun ε : ℝ => (2 * (Real.sqrt 10 / 5)) * ε)
      (2 * (Real.sqrt 10 / 5)) 0 := by
    simpa using (hasDerivAt_id (0 : ℝ)).const_mul (2 * (Real.sqrt 10 / 5))
  have hsq : HasDerivAt (fun ε : ℝ => ε ^ 2) (0 : ℝ) 0 := by
    simpa using (hasDerivAt_pow 2 (0 : ℝ))
  have h : HasDerivAt
      (fun ε : ℝ => 2 / 5 - 2 * (Real.sqrt 10 / 5) * ε - ε ^ 2)
      (-(2 * (Real.sqrt 10 / 5))) 0 := by
    have h' := (hlin.const_sub (2 / 5 : ℝ)).sub hsq
    refine (h'.congr_of_eventuallyEq
      (Eventually.of_forall fun ε => by simp [Pi.sub_apply])).congr_deriv ?_
    ring
  refine h.congr_of_eventuallyEq ?_
  filter_upwards with ε
  simpa using alphaOf_lineJet4 ε

lemma sqrt_alpha_deriv4_eval :
    (1 / (2 * (Real.sqrt 10 / 5))) * (-(2 * (Real.sqrt 10 / 5))) = (-1 : ℝ) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]

lemma hasDerivAt_sqrt_alpha_lineJet4 :
    HasDerivAt (fun ε => Real.sqrt (alphaOf (lineJet 4 ε))) (-1) 0 := by
  have hα0 : 0 < alphaOf (lineJet 4 0) := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have h := (Real.hasDerivAt_sqrt hα0.ne').comp 0 hasDerivAt_alphaOf_lineJet4
  refine h.congr_deriv ?_
  rw [lineJet_zero, alphaOf_sStar, sqrt_two_div_five]
  exact sqrt_alpha_deriv4_eval

lemma sqrt_alpha_lineJet4_zero :
    Real.sqrt (alphaOf (lineJet 4 0)) = Real.sqrt 10 / 5 := by
  rw [lineJet_zero, alphaOf_sStar, sqrt_two_div_five]

lemma fg_f_lineJet4_ell {ε χ : ℝ} (hα : 0 < alphaOf (lineJet 4 ε)) :
    fg_f (lineJet 4 ε) χ =
      1 - (1 - Real.cos (Real.sqrt (alphaOf (lineJet 4 ε)) * χ)) /
        ((5 / 2) * alphaOf (lineJet 4 ε)) := by
  rw [fg_f_ell hα, rnorm_lineJet4]
  ring

lemma fg_g_lineJet4_ell {ε t χ : ℝ} (hα : 0 < alphaOf (lineJet 4 ε)) :
    fg_g (lineJet 4 ε) t χ =
      t - χ / alphaOf (lineJet 4 ε) +
        Real.sin (Real.sqrt (alphaOf (lineJet 4 ε)) * χ) /
          (alphaOf (lineJet 4 ε) * Real.sqrt (alphaOf (lineJet 4 ε))) := by
  have h := fg_g_ell (s := lineJet 4 ε) (t := t) (chi := χ) hα
  simpa [sub_eq_add_neg, add_comm, add_left_comm, add_assoc] using h

lemma fg_f_lineJet4_div_deriv (χ : ℝ) :
    (0 : ℝ) -
      (Real.sin ((Real.sqrt 10 / 5) * χ) * (-χ) * ((5 / 2) * (2 / 5))
        - (1 - Real.cos ((Real.sqrt 10 / 5) * χ)) * (-Real.sqrt 10)) /
        ((5 / 2) * (2 / 5)) ^ 2
      = χ * Real.sin ((Real.sqrt 10 / 5) * χ)
        - Real.sqrt 10 * (1 - Real.cos ((Real.sqrt 10 / 5) * χ)) := by
  norm_num
  ring

lemma hasDerivAt_fg_f_lineJet4_fixed (χ : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 4 ε) χ)
      (χ * Real.sin ((Real.sqrt 10 / 5) * χ)
        - Real.sqrt 10 * (1 - Real.cos ((Real.sqrt 10 / 5) * χ))) 0 := by
  have hψ := hasDerivAt_sqrt_alpha_lineJet4
  have hψχ : HasDerivAt
      (fun ε => Real.sqrt (alphaOf (lineJet 4 ε)) * χ) (-χ) 0 :=
    (hψ.mul_const χ).congr_deriv (by ring)
  have hω : Real.sqrt (alphaOf (lineJet 4 0)) * χ = (Real.sqrt 10 / 5) * χ := by
    rw [sqrt_alpha_lineJet4_zero]
  have hcos : HasDerivAt
      (fun ε => Real.cos (Real.sqrt (alphaOf (lineJet 4 ε)) * χ))
      (-Real.sin ((Real.sqrt 10 / 5) * χ) * (-χ)) 0 := by
    exact ((Real.hasDerivAt_cos (Real.sqrt (alphaOf (lineJet 4 0)) * χ)).comp 0 hψχ).congr_deriv
      (by rw [hω])
  have hnum : HasDerivAt
      (fun ε => 1 - Real.cos (Real.sqrt (alphaOf (lineJet 4 ε)) * χ))
      (Real.sin ((Real.sqrt 10 / 5) * χ) * (-χ)) 0 :=
    ((hasDerivAt_const (0 : ℝ) (1 : ℝ)).sub hcos).congr_deriv (by ring)
  have hden : HasDerivAt (fun ε => (5 / 2) * alphaOf (lineJet 4 ε))
      (-Real.sqrt 10) 0 :=
    (hasDerivAt_alphaOf_lineJet4.const_mul (5 / 2)).congr_deriv (by ring)
  have hden0 : (5 / 2) * alphaOf (lineJet 4 0) ≠ 0 := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  have hdiv := hnum.div hden hden0
  have hclosed : HasDerivAt
      (fun ε =>
        1 - (1 - Real.cos (Real.sqrt (alphaOf (lineJet 4 ε)) * χ)) /
          ((5 / 2) * alphaOf (lineJet 4 ε)))
      (χ * Real.sin ((Real.sqrt 10 / 5) * χ)
        - Real.sqrt 10 * (1 - Real.cos ((Real.sqrt 10 / 5) * χ))) 0 := by
    refine ((hasDerivAt_const (0 : ℝ) (1 : ℝ)).sub hdiv).congr_deriv ?_
    rw [lineJet_zero, alphaOf_sStar, sqrt_two_div_five]
    exact fg_f_lineJet4_div_deriv χ
  refine hclosed.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_lineJet4_pos] with ε hα
  exact fg_f_lineJet4_ell hα

lemma hasDerivAt_inv_alpha_lineJet4 :
    HasDerivAt (fun ε => (alphaOf (lineJet 4 ε))⁻¹)
      (5 * Real.sqrt 10 / 2) 0 := by
  have hα0 : alphaOf (lineJet 4 0) ≠ 0 := by
    rw [lineJet_zero, alphaOf_sStar]; norm_num
  refine (hasDerivAt_alphaOf_lineJet4.inv hα0).congr_deriv ?_
  rw [lineJet_zero, alphaOf_sStar]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]

lemma hasDerivAt_pow3_sqrt_alpha_lineJet4 :
    HasDerivAt (fun ε => Real.sqrt (alphaOf (lineJet 4 ε)) ^ 3)
      (-(6 / 5)) 0 := by
  have h := (hasDerivAt_pow 3 (Real.sqrt (alphaOf (lineJet 4 0)))).comp 0
    hasDerivAt_sqrt_alpha_lineJet4
  refine h.congr_deriv ?_
  rw [sqrt_alpha_lineJet4_zero, sqrt10_div5_sq]
  ring

lemma sin_div_psi3_deriv4 (χ : ℝ) :
    (Real.cos ((Real.sqrt 10 / 5) * χ) * (-χ) * (Real.sqrt 10 / 5) ^ 3
      - Real.sin ((Real.sqrt 10 / 5) * χ) * (-(6 / 5))) /
      ((Real.sqrt 10 / 5) ^ 3) ^ 2
      = -((5 * Real.sqrt 10 / 4) * χ * Real.cos ((Real.sqrt 10 / 5) * χ))
        + (75 / 4) * Real.sin ((Real.sqrt 10 / 5) * χ) := by
  rw [psi3_sStar]
  have hden : (2 * Real.sqrt 10 / 25) ^ 2 = (8 : ℝ) / 125 := by
    have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
    field_simp [hs]
    rw [sqrt10_sq_val]
    ring
  rw [hden]
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  field_simp [hs]
  ring

lemma hasDerivAt_fg_g_lineJet4_fixed (t χ : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 4 ε) t χ)
      (-(5 * Real.sqrt 10 / 2) * χ
        - (5 * Real.sqrt 10 / 4) * χ * Real.cos ((Real.sqrt 10 / 5) * χ)
        + (75 / 4) * Real.sin ((Real.sqrt 10 / 5) * χ)) 0 := by
  have hψχ : HasDerivAt
      (fun ε => Real.sqrt (alphaOf (lineJet 4 ε)) * χ) (-χ) 0 :=
    (hasDerivAt_sqrt_alpha_lineJet4.mul_const χ).congr_deriv (by ring)
  have hω : Real.sqrt (alphaOf (lineJet 4 0)) * χ = (Real.sqrt 10 / 5) * χ := by
    rw [sqrt_alpha_lineJet4_zero]
  have hsin : HasDerivAt
      (fun ε => Real.sin (Real.sqrt (alphaOf (lineJet 4 ε)) * χ))
      (Real.cos ((Real.sqrt 10 / 5) * χ) * (-χ)) 0 := by
    have h := (Real.hasDerivAt_sin (Real.sqrt (alphaOf (lineJet 4 0)) * χ)).comp 0 hψχ
    exact h.congr_deriv (by rw [hω])
  have hψ30 : Real.sqrt (alphaOf (lineJet 4 0)) ^ 3 ≠ 0 := by
    rw [sqrt_alpha_lineJet4_zero]
    exact pow_ne_zero 3 (div_ne_zero (Real.sqrt_ne_zero'.2 (by norm_num)) (by norm_num))
  have hquot := hsin.div hasDerivAt_pow3_sqrt_alpha_lineJet4 hψ30
  have hχα : HasDerivAt (fun ε => χ * (alphaOf (lineJet 4 ε))⁻¹)
      ((5 * Real.sqrt 10 / 2) * χ) 0 :=
    (hasDerivAt_inv_alpha_lineJet4.const_mul χ).congr_deriv (by ring)
  have hclosed : HasDerivAt
      (fun ε =>
        t - χ * (alphaOf (lineJet 4 ε))⁻¹ +
          Real.sin (Real.sqrt (alphaOf (lineJet 4 ε)) * χ) /
            (Real.sqrt (alphaOf (lineJet 4 ε)) ^ 3))
      (-(5 * Real.sqrt 10 / 2) * χ
        - (5 * Real.sqrt 10 / 4) * χ * Real.cos ((Real.sqrt 10 / 5) * χ)
        + (75 / 4) * Real.sin ((Real.sqrt 10 / 5) * χ)) 0 := by
    have hsum := (hasDerivAt_const (0 : ℝ) t).sub hχα |>.add hquot
    refine hsum.congr_deriv ?_
    rw [sqrt_alpha_lineJet4_zero]
    have hq := sin_div_psi3_deriv4 χ
    linarith [hq]
  refine hclosed.congr_of_eventuallyEq ?_
  filter_upwards [eventually_alphaOf_lineJet4_pos] with ε hα
  have hpow : alphaOf (lineJet 4 ε) * Real.sqrt (alphaOf (lineJet 4 ε)) =
      Real.sqrt (alphaOf (lineJet 4 ε)) ^ 3 := by
    have hsq := Real.sq_sqrt hα.le
    calc
      alphaOf (lineJet 4 ε) * Real.sqrt (alphaOf (lineJet 4 ε))
          = Real.sqrt (alphaOf (lineJet 4 ε)) ^ 2 *
            Real.sqrt (alphaOf (lineJet 4 ε)) := by rw [hsq]
      _ = Real.sqrt (alphaOf (lineJet 4 ε)) ^ 3 := by ring
  rw [fg_g_lineJet4_ell hα, hpow]
  ring


lemma hasDerivAt_fg_f_chiOf_lineJet0 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 0 ε) (chiOf (lineJet 0 ε) t))
      ((2 * Real.sqrt 10 / 25) * (2 * t / 5) * Real.sin (nStar * t)
        - (2 / 5) * (1 - Real.cos (nStar * t))
        + (-(2 / 5) * Fε_lineJet0 (2 * t / 5)) *
          (-Real.sin (nStar * t) * (Real.sqrt 10 / 5))) 0 := by
  have h := hasDerivAt_fg_f_chiOf_gen t (hasDerivAt_chiOf_lineJet0 t)
    (hasDerivAt_fg_f_lineJet0_fixed (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_f_sStar_at, omega_mul_chi_sStar]

lemma hasDerivAt_fg_g_chiOf_lineJet0 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 0 ε) t (chiOf (lineJet 0 ε) t))
      (-(2 : ℝ) * (2 * t / 5) - (2 * t / 5) * Real.cos (nStar * t)
        + (3 * Real.sqrt 10 / 2) * Real.sin (nStar * t)
        + (-(2 / 5) * Fε_lineJet0 (2 * t / 5)) *
          ((5 / 2) * (Real.cos (nStar * t) - 1))) 0 := by
  have h := hasDerivAt_fg_g_chiOf_gen t (hasDerivAt_chiOf_lineJet0 t)
    (hasDerivAt_fg_g_lineJet0_fixed t (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_g_sStar_at, omega_mul_chi_sStar]

lemma chiPrime_lineJet4 (t : ℝ) :
    -(2 / 5) * (Real.sqrt 10 * (2 * t / 5) ^ 3 *
      stumpffS ((2 / 5) * (2 * t / 5) ^ 2)) =
      -(2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) := by
  have h := chiCube_S_sStar t
  calc
    -(2 / 5) * (Real.sqrt 10 * (2 * t / 5) ^ 3 *
        stumpffS ((2 / 5) * (2 * t / 5) ^ 2))
        = -(2 / 5) * Real.sqrt 10 *
            ((2 * t / 5) ^ 3 * stumpffS ((2 / 5) * (2 * t / 5) ^ 2)) := by ring
    _ = -(2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) := by rw [h]

lemma hasDerivAt_chiOf_lineJet4' (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 4 ε) t)
      (-(2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar)) 0 :=
  (hasDerivAt_chiOf_lineJet4 t).congr_deriv (chiPrime_lineJet4 t)

lemma hasDerivAt_fg_f_chiOf_lineJet4 (t : ℝ) :
    HasDerivAt (fun ε => fg_f (lineJet 4 ε) (chiOf (lineJet 4 ε) t))
      ((2 * t / 5) * Real.sin (nStar * t)
        - Real.sqrt 10 * (1 - Real.cos (nStar * t))
        + (-(2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar)) *
          (-Real.sin (nStar * t) * (Real.sqrt 10 / 5))) 0 := by
  have h := hasDerivAt_fg_f_chiOf_gen t (hasDerivAt_chiOf_lineJet4' t)
    (hasDerivAt_fg_f_lineJet4_fixed (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_f_sStar_at, omega_mul_chi_sStar]

lemma hasDerivAt_fg_g_chiOf_lineJet4 (t : ℝ) :
    HasDerivAt (fun ε => fg_g (lineJet 4 ε) t (chiOf (lineJet 4 ε) t))
      (-(5 * Real.sqrt 10 / 2) * (2 * t / 5)
        - (5 * Real.sqrt 10 / 4) * (2 * t / 5) * Real.cos (nStar * t)
        + (75 / 4) * Real.sin (nStar * t)
        + (-(2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar)) *
          ((5 / 2) * (Real.cos (nStar * t) - 1))) 0 := by
  have h := hasDerivAt_fg_g_chiOf_gen t (hasDerivAt_chiOf_lineJet4' t)
    (hasDerivAt_fg_g_lineJet4_fixed t (2 * t / 5))
  refine h.congr_deriv ?_
  rw [deriv_fg_g_sStar_at, omega_mul_chi_sStar]

lemma stmCol_dx (t : ℝ) :
    stmCol 0 t =
      ofCoords
        (stmRad t 1 0 0 0 * Real.cos (nStar * t)
          - stmTan t 1 0 0 0 * Real.sin (nStar * t))
        (stmRad t 1 0 0 0 * Real.sin (nStar * t)
          + stmTan t 1 0 0 0 * Real.cos (nStar * t))
        0 := by
  simpa [stmCol] using stmInertial_ofCoords t 1 0 0 0

lemma stmCol_dvy (t : ℝ) :
    stmCol 3 t =
      ofCoords
        (stmRad t 0 0 0 1 * Real.cos (nStar * t)
          - stmTan t 0 0 0 1 * Real.sin (nStar * t))
        (stmRad t 0 0 0 1 * Real.sin (nStar * t)
          + stmTan t 0 0 0 1 * Real.cos (nStar * t))
        0 := by
  simpa [stmCol] using stmInertial_ofCoords t 0 0 0 1

lemma sqrt10_div5_eq_n : Real.sqrt 10 / 5 = (5 / 2) * nStar := by
  have h := omega_mul_chi_sStar 1
  -- (√10/5)*(2/5) = nStar
  have : (Real.sqrt 10 / 5) * (2 / 5) = nStar := by
    simpa using h
  have h2 : (2 / 5 : ℝ) ≠ 0 := by norm_num
  field_simp [h2] at this
  linarith

lemma chiPrime_lineJet0 (t : ℝ) :
    -(2 / 5) * Fε_lineJet0 (2 * t / 5) =
      -(8 * t / 25) + (4 / 25) * Real.sin (nStar * t) / nStar := by
  rw [Fε_lineJet0_sStar]
  have hn := nStar_ne
  field_simp [hn]
  ring

lemma hasDerivAt_chiOf_lineJet0' (t : ℝ) :
    HasDerivAt (fun ε => chiOf (lineJet 0 ε) t)
      (-(8 * t / 25) + (4 / 25) * Real.sin (nStar * t) / nStar) 0 :=
  (hasDerivAt_chiOf_lineJet0 t).congr_deriv (chiPrime_lineJet0 t)

lemma fg_f_prime_lineJet0 (t : ℝ) :
    (2 * Real.sqrt 10 / 25) * (2 * t / 5) * Real.sin (nStar * t)
      - (2 / 5) * (1 - Real.cos (nStar * t))
      + (-(2 / 5) * Fε_lineJet0 (2 * t / 5)) *
        (-Real.sin (nStar * t) * (Real.sqrt 10 / 5))
      = (2 * nStar * t / 5) * Real.sin (nStar * t)
        - (2 / 5) * (1 - Real.cos (nStar * t))
        - (-(8 * t / 25) + (4 / 25) * Real.sin (nStar * t) / nStar) *
          Real.sin (nStar * t) * ((5 / 2) * nStar) := by
  have hχ := chiPrime_lineJet0 t
  have hn : 2 * Real.sqrt 10 / 25 = nStar := by rw [nStar, meanMotion_eq]
  rw [hχ, hn, sqrt10_div5_eq_n]
  ring

lemma fg_g_prime_lineJet0 (t : ℝ) :
    -(2 : ℝ) * (2 * t / 5) - (2 * t / 5) * Real.cos (nStar * t)
      + (3 * Real.sqrt 10 / 2) * Real.sin (nStar * t)
      + (-(2 / 5) * Fε_lineJet0 (2 * t / 5)) *
        ((5 / 2) * (Real.cos (nStar * t) - 1))
      = -(4 * t / 5) - (2 * t / 5) * Real.cos (nStar * t)
        + (3 * Real.sqrt 10 / 2) * Real.sin (nStar * t)
        + (-(8 * t / 25) + (4 / 25) * Real.sin (nStar * t) / nStar) *
          ((5 / 2) * (Real.cos (nStar * t) - 1)) := by
  rw [chiPrime_lineJet0]
  ring

lemma stmCol_dx_coords (t : ℝ) :
    stmCol 0 t =
      ofCoords
        ((2 - Real.cos (nStar * t)) * Real.cos (nStar * t)
          - (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.sin (nStar * t))
        ((2 - Real.cos (nStar * t)) * Real.sin (nStar * t)
          + (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.cos (nStar * t))
        0 := by
  rw [stmCol_dx]
  simp [stmRad, stmTan]

lemma stmCol_dvy_coords (t : ℝ) :
    stmCol 3 t =
      ofCoords
        ((2 * (1 - Real.cos (nStar * t)) / nStar) * Real.cos (nStar * t)
          - ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) *
            Real.sin (nStar * t))
        ((2 * (1 - Real.cos (nStar * t)) / nStar) * Real.sin (nStar * t)
          + ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) *
            Real.cos (nStar * t))
        0 := by
  rw [stmCol_dvy]
  simp [stmRad, stmTan]

lemma sqrt10_cube : Real.sqrt 10 ^ 3 = 10 * Real.sqrt 10 := by
  calc
    Real.sqrt 10 ^ 3 = Real.sqrt 10 ^ 2 * Real.sqrt 10 := by ring
    _ = 10 * Real.sqrt 10 := by rw [sqrt10_sq_val]

lemma sin_sq_as_cos (θ : ℝ) :
    Real.sin θ ^ 2 = 1 - Real.cos θ ^ 2 := by
  linarith [Real.sin_sq_add_cos_sq θ]

lemma axis0_x_eq (t : ℝ) :
    Real.cos (nStar * t) +
      ((2 * Real.sqrt 10 / 25) * (2 * t / 5) * Real.sin (nStar * t)
        - (2 / 5) * (1 - Real.cos (nStar * t))
        + (2 / 5) * Fε_lineJet0 (2 * t / 5) *
          (Real.sin (nStar * t) * (Real.sqrt 10 / 5))) * (5 / 2)
      = (2 - Real.cos (nStar * t)) * Real.cos (nStar * t)
        - (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.sin (nStar * t) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  have hF := Fε_lineJet0_sStar t
  have hn : nStar = 2 * Real.sqrt 10 / 25 := by rw [nStar, meanMotion_eq]
  rw [hF, hn]
  field_simp [hs]
  ring_nf
  simp only [sqrt10_sq_val, sqrt10_cube, sin_sq_as_cos]
  ring

lemma axis0_y_eq (t : ℝ) :
    (-(2 * (2 * t / 5)) - (2 * t / 5) * Real.cos (nStar * t)
        + (3 * Real.sqrt 10 / 2) * Real.sin (nStar * t)
        + -(2 / 5 * Fε_lineJet0 (2 * t / 5) *
            (5 / 2 * (Real.cos (nStar * t) - 1)))) *
      (Real.sqrt 10 / 5)
      = (2 - Real.cos (nStar * t)) * Real.sin (nStar * t)
        + (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.cos (nStar * t) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  have hF := Fε_lineJet0_sStar t
  have hn : nStar = 2 * Real.sqrt 10 / 25 := by rw [nStar, meanMotion_eq]
  rw [hF, hn]
  field_simp [hs]
  ring_nf
  simp only [sqrt10_sq_val, sqrt10_cube, sin_sq_as_cos]
  ring

lemma axis4_x_eq (t : ℝ) :
    ((2 * t / 5) * Real.sin (nStar * t)
        - Real.sqrt 10 * (1 - Real.cos (nStar * t))
        + (2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) *
          (Real.sin (nStar * t) * (Real.sqrt 10 / 5))) * (5 / 2)
      = (2 * (1 - Real.cos (nStar * t)) / nStar) * Real.cos (nStar * t)
        - ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) *
          Real.sin (nStar * t) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  have hn0 := nStar_ne
  have hn : nStar = 2 * Real.sqrt 10 / 25 := by rw [nStar, meanMotion_eq]
  rw [hn] at hn0 ⊢
  field_simp [hs, hn0]
  ring_nf
  simp only [sqrt10_sq_val, sqrt10_cube, sin_sq_as_cos]
  ring

lemma axis4_y_eq (t : ℝ) :
    (Real.sin (nStar * t) / nStar) +
      (-(5 * Real.sqrt 10 / 2 * (2 * t / 5))
        - (5 * Real.sqrt 10 / 4) * (2 * t / 5) * Real.cos (nStar * t)
        + (75 / 4) * Real.sin (nStar * t)
        + -(2 / 5 * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) *
            (5 / 2 * (Real.cos (nStar * t) - 1)))) *
        (Real.sqrt 10 / 5)
      = (2 * (1 - Real.cos (nStar * t)) / nStar) * Real.sin (nStar * t)
        + ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) *
          Real.cos (nStar * t) := by
  have hs : Real.sqrt 10 ≠ 0 := Real.sqrt_ne_zero'.2 (by norm_num)
  have hn0 := nStar_ne
  have hn : nStar = 2 * Real.sqrt 10 / 25 := by rw [nStar, meanMotion_eq]
  rw [hn] at hn0 ⊢
  field_simp [hs, hn0]
  ring_nf
  simp only [sqrt10_sq_val, sqrt10_cube, sin_sq_as_cos]
  ring

lemma axis0_vec_eq_stm (t : ℝ) :
    Real.cos (nStar * t) • ofCoords 1 0 0 +
        ((2 * Real.sqrt 10 / 25) * (2 * t / 5) * Real.sin (nStar * t)
          - (2 / 5) * (1 - Real.cos (nStar * t))
          + (2 / 5) * Fε_lineJet0 (2 * t / 5) *
            (Real.sin (nStar * t) * (Real.sqrt 10 / 5))) •
          ofCoords (5 / 2) 0 0 +
      (-(2 * (2 * t / 5)) - (2 * t / 5) * Real.cos (nStar * t)
        + (3 * Real.sqrt 10 / 2) * Real.sin (nStar * t)
        + -(2 / 5 * Fε_lineJet0 (2 * t / 5) *
            (5 / 2 * (Real.cos (nStar * t) - 1)))) •
        ofCoords 0 (Real.sqrt 10 / 5) 0
      = stmCol 0 t := by
  rw [ofCoords_smul, ofCoords_smul, ofCoords_smul, ofCoords_add, ofCoords_add,
    stmCol_dx_coords]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords]; exact axis0_x_eq t
  · simp [ofCoords]; exact axis0_y_eq t
  · simp [ofCoords]

lemma hasDerivAt_keplerIC_lineJet0 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 0 ε) t) (stmCol 0 t) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet0 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet0 t
  have hp := hasDerivAt_pos_lineJet0
  have hv := hasDerivAt_vel_lineJet0
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hf0 := fg_f_sStar_n t
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 0 ε t)).congr_deriv ?_
  simp [lineJet_zero, chiOf_sStar, hf0, sStar_pos, sStar_vel, eX, smul_zero]
  exact axis0_vec_eq_stm t

lemma axis4_vec_eq_stm (t : ℝ) :
    ((2 * t / 5) * Real.sin (nStar * t)
        - Real.sqrt 10 * (1 - Real.cos (nStar * t))
        + (2 / 5) * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) *
          (Real.sin (nStar * t) * (Real.sqrt 10 / 5))) •
        ofCoords (5 / 2) 0 0 +
      ((Real.sin (nStar * t) / nStar) • ofCoords 0 1 0 +
        (-(5 * Real.sqrt 10 / 2 * (2 * t / 5))
          - (5 * Real.sqrt 10 / 4) * (2 * t / 5) * Real.cos (nStar * t)
          + (75 / 4) * Real.sin (nStar * t)
          + -(2 / 5 * Real.sqrt 10 * (t - Real.sin (nStar * t) / nStar) *
              (5 / 2 * (Real.cos (nStar * t) - 1)))) •
          ofCoords 0 (Real.sqrt 10 / 5) 0)
      = stmCol 3 t := by
  rw [ofCoords_smul, ofCoords_smul, ofCoords_smul, ofCoords_add, ofCoords_add,
    stmCol_dvy_coords]
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i
  fin_cases i
  · simp [ofCoords]; exact axis4_x_eq t
  · simp [ofCoords]; exact axis4_y_eq t
  · simp [ofCoords]

lemma hasDerivAt_keplerIC_lineJet4 (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet 4 ε) t) (stmCol 3 t) 0 := by
  have hf := hasDerivAt_fg_f_chiOf_lineJet4 t
  have hg := hasDerivAt_fg_g_chiOf_lineJet4 t
  have hp := hasDerivAt_pos_lineJet4
  have hv := hasDerivAt_vel_lineJet4
  have hsum := (hf.smul hp).add (hg.smul hv)
  have hg0 := fg_g_sStar_n t
  refine (hsum.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => keplerIC_lineJet_apply 4 ε t)).congr_deriv ?_
  simp [lineJet_zero, chiOf_sStar, hg0, sStar_pos, sStar_vel, eY, smul_zero]
  exact axis4_vec_eq_stm t

lemma hasDerivAt_keplerIC_inPlane (j : Fin 4) (t : ℝ) :
    HasDerivAt (fun ε => keplerIC (lineJet (inPlane j) ε) t) (stmCol j t) 0 := by
  fin_cases j
  · simpa [inPlane] using hasDerivAt_keplerIC_lineJet0 t
  · simpa [inPlane] using hasDerivAt_keplerIC_lineJet1 t
  · simpa [inPlane] using hasDerivAt_keplerIC_lineJet3 t
  · simpa [inPlane] using hasDerivAt_keplerIC_lineJet4 t

lemma inner_diff_div_rho (t : ℝ) (w : Vec) :
    ⟪keplerIC sStar t - obs t, w⟫ / rhoStar t = ⟪uStar t, w⟫ := by
  simp [uStar, inner_smul_left, div_eq_inv_mul]

lemma hasDerivAt_rho_of {j : Fin 6} {w : Vec} {t : ℝ}
    (h : HasDerivAt (fun ε => keplerIC (lineJet j ε) t) w 0) :
    HasDerivAt (fun ε => ‖keplerIC (lineJet j ε) t - obs t‖) (⟪uStar t, w⟫) 0 := by
  have hf := h.sub_const (obs t)
  have hne : keplerIC (lineJet j 0) t - obs t ≠ 0 := by
    rw [lineJet_zero]; exact sub_ne_zero.mpr (keplerIC_sStar_obs_ne t)
  have hn := hasDerivAt_norm_vec hf hne
  refine hn.congr_deriv ?_
  rw [lineJet_zero]
  exact inner_diff_div_rho t w

lemma kepler_obs_eq_rho_uStar (t : ℝ) :
    keplerIC sStar t - obs t = rhoStar t • uStar t := by
  unfold uStar
  rw [smul_smul]
  change keplerIC sStar t - obs t = (rhoStar t * (rhoStar t)⁻¹) • (keplerIC sStar t - obs t)
  rw [mul_inv_cancel₀ (rhoStar_ne t), one_smul]

lemma hasDerivAt_los_of {j : Fin 6} {w : Vec} {t : ℝ}
    (h : HasDerivAt (fun ε => keplerIC (lineJet j ε) t) w 0) :
    HasDerivAt (fun ε => los obs (keplerIC (lineJet j ε)) t) (dlosSTM t w) 0 := by
  have hr := hasDerivAt_rho_of h
  have hg := h.sub_const (obs t)
  have hne : ‖keplerIC (lineJet j 0) t - obs t‖ ≠ 0 := by
    rw [lineJet_zero]; exact rhoStar_ne t
  have hinv := hr.inv hne
  have hsmul := hinv.smul hg
  have hval :
      ‖keplerIC (lineJet j 0) t - obs t‖⁻¹ • w
        + (-⟪uStar t, w⟫ / ‖keplerIC (lineJet j 0) t - obs t‖ ^ 2)
            • (keplerIC (lineJet j 0) t - obs t)
        = dlosSTM t w := by
    rw [lineJet_zero]
    have hρ : ‖keplerIC sStar t - obs t‖ = rhoStar t := rfl
    rw [hρ, kepler_obs_eq_rho_uStar t]
    have hn := rhoStar_ne t
    have hpow : rhoStar t ^ 2 = rhoStar t * rhoStar t := sq (rhoStar t)
    have hscale :
        ⟪uStar t, w⟫ * ((rhoStar t)⁻¹ * (rhoStar t)⁻¹) * rhoStar t
          = (rhoStar t)⁻¹ * ⟪uStar t, w⟫ := by
      field_simp [hn]
    simp [dlosSTM, hpow, div_eq_mul_inv, smul_smul, smul_sub, neg_smul]
    rw [hscale, ← sub_eq_add_neg]
  refine (hsmul.congr_of_eventuallyEq
    (Eventually.of_forall fun ε => los_kepler_apply (lineJet j ε) t)).congr_deriv ?_
  simpa using hval

lemma hasDerivAt_los_inPlane (j : Fin 4) (t : ℝ) :
    HasDerivAt (fun ε => los obs (keplerIC (lineJet (inPlane j) ε)) t)
      (dlosCol j t) 0 := by
  simpa [dlosCol] using hasDerivAt_los_of (hasDerivAt_keplerIC_inPlane j t)

lemma fderiv_los_inPlane (j : Fin 4) (t : ℝ) :
    fderiv ℝ (fun s => los obs (keplerIC s) t) sStar (Pi.single (inPlane j) 1)
      = dlosCol j t := by
  have hf : HasFDerivAt (fun s => los obs (keplerIC s) t)
      (fderiv ℝ (fun s => los obs (keplerIC s) t) sStar)
      (lineJet (inPlane j) 0) := by
    rw [lineJet_zero]; exact hasFDerivAt_los_keplerIC t
  exact (hf.comp_hasDerivAt 0 (hasDerivAt_lineJet (inPlane j) 0)).unique
    (hasDerivAt_los_inPlane j t)

lemma secondDiff_dlosCol (j : Fin 4) (h : ℝ) :
    secondDiff (fun t => dlosCol j t) h
      = dlosCol j 0 - (2 : ℝ) • dlosCol j h + dlosCol j (2 * h) :=
  rfl

lemma fderiv_sdCart_inPlane (j : Fin 4) :
    fderiv ℝ sdCart sStar (Pi.single (inPlane j) 1)
      = sdPairCoord
          (secondDiff (fun t => dlosCol j t) hSD1)
          (secondDiff (fun t => dlosCol j t) hSD2) := by
  have heq : (fun t => fderiv ℝ (fun s => los obs (keplerIC s) t) sStar
        (Pi.single (inPlane j) 1))
      = fun t => dlosCol j t :=
    funext fun t => fderiv_los_inPlane j t
  rw [fderiv_sdCart_apply, heq]

lemma xyBlkSTM_apply (i j : Fin 4) :
    xyBlkSTM i j =
      let w1 := secondDiff (fun t => dlosCol j t) hSD1
      let w2 := secondDiff (fun t => dlosCol j t) hSD2
      sdPairCoord w1 w2 (inPlaneOut i) := by
  simp [xyBlkSTM, secondDiff, dlosCol]
  fin_cases i <;> simp [inPlaneOut, sdPairCoord]

lemma xyBlk_eq_xyBlkSTM : xyBlk = xyBlkSTM := by
  ext i j
  simp [xyBlk, xyBlkSTM_apply, fderiv_sdCart_inPlane]

lemma nStar_gt_tight : (252982 / 1000000 : ℝ) < nStar := by
  have hsq : (252982 / 1000000 : ℝ) ^ 2 < nStar ^ 2 := by
    rw [nStar_sq]; norm_num
  exact lt_of_pow_lt_pow_left₀ 2 nStar_pos.le hsq

lemma nStar_lt_tight : nStar < (252983 / 1000000 : ℝ) := by
  have hsq : nStar ^ 2 < (252983 / 1000000 : ℝ) ^ 2 := by
    rw [nStar_sq]; norm_num
  exact lt_of_pow_lt_pow_left₀ 2 (by norm_num) hsq

lemma nStar_tight :
    (252982 / 1000000 : ℝ) < nStar ∧ nStar < (252983 / 1000000 : ℝ) :=
  ⟨nStar_gt_tight, nStar_lt_tight⟩

open Complex Finset in
lemma cos_bound8 {x : ℝ} (hx : |x| ≤ 1) :
    |Real.cos x - (1 - x ^ 2 / 2 + x ^ 4 / 24 - x ^ 6 / 720)| ≤
      |x| ^ 8 * (9 / 322560) := by
  have hx' : ‖(x : ℂ)‖ ≤ 1 := by simpa [Complex.norm_real, Real.norm_eq_abs] using hx
  have h :=
    calc
      ‖Complex.cos x - (1 - (x : ℂ) ^ 2 / 2 + (x : ℂ) ^ 4 / 24 - (x : ℂ) ^ 6 / 720)‖ =
          ‖(Complex.exp (-(x : ℂ) * I) - ∑ m ∈ range 8, (-(x : ℂ) * I) ^ m / m.factorial) / 2 +
            (Complex.exp ((x : ℂ) * I) - ∑ m ∈ range 8, ((x : ℂ) * I) ^ m / m.factorial) / 2‖ := by
        simp [Complex.cos, field, Finset.sum_range_succ, Nat.factorial]
        grind [I_sq, two_ne_zero]
      _ ≤ ‖Complex.exp (-(x : ℂ) * I) - ∑ m ∈ range 8, (-(x : ℂ) * I) ^ m / m.factorial‖ / 2 +
          ‖Complex.exp ((x : ℂ) * I) - ∑ m ∈ range 8, ((x : ℂ) * I) ^ m / m.factorial‖ / 2 := by
        grw [norm_add_le]
        simp
      _ ≤ ‖-(x : ℂ) * I‖ ^ 8 * (Nat.succ 8 * (Nat.factorial 8 * (8 : ℕ) : ℝ)⁻¹) / 2 +
          ‖(x : ℂ) * I‖ ^ 8 * (Nat.succ 8 * (Nat.factorial 8 * (8 : ℕ) : ℝ)⁻¹) / 2 := by
        grw [Complex.exp_bound (by simpa) (by simp), Complex.exp_bound (by simpa) (by simp)]
      _ ≤ |x| ^ 8 * (9 / 322560) := by
        simp [norm_mul, norm_neg, Complex.norm_I, Complex.norm_real, Real.norm_eq_abs]
        norm_num
  simpa [← Complex.ofReal_cos, ← Real.norm_eq_abs, ← Complex.norm_real] using h

open Complex Finset in
lemma sin_bound9 {x : ℝ} (hx : |x| ≤ 1) :
    |Real.sin x - (x - x ^ 3 / 6 + x ^ 5 / 120 - x ^ 7 / 5040)| ≤
      |x| ^ 9 * (10 / 3265920) := by
  have hx' : ‖(x : ℂ)‖ ≤ 1 := by simpa [Complex.norm_real, Real.norm_eq_abs] using hx
  have h :=
    calc
      ‖Complex.sin x - ((x : ℂ) - (x : ℂ) ^ 3 / 6 + (x : ℂ) ^ 5 / 120 - (x : ℂ) ^ 7 / 5040)‖ =
          ‖(Complex.exp (-(x : ℂ) * I) - ∑ m ∈ range 9, (-(x : ℂ) * I) ^ m / m.factorial) * I / 2 -
            (Complex.exp ((x : ℂ) * I) - ∑ m ∈ range 9, ((x : ℂ) * I) ^ m / m.factorial) * I / 2‖ := by
        simp [Complex.sin, field, Finset.sum_range_succ, Nat.factorial]
        grind [I_sq, two_ne_zero]
      _ ≤ ‖Complex.exp (-(x : ℂ) * I) - ∑ m ∈ range 9, (-(x : ℂ) * I) ^ m / m.factorial‖ / 2 +
          ‖Complex.exp ((x : ℂ) * I) - ∑ m ∈ range 9, ((x : ℂ) * I) ^ m / m.factorial‖ / 2 := by
        grw [norm_sub_le]
        simp
      _ ≤ ‖-(x : ℂ) * I‖ ^ 9 * (Nat.succ 9 * (Nat.factorial 9 * (9 : ℕ) : ℝ)⁻¹) / 2 +
          ‖(x : ℂ) * I‖ ^ 9 * (Nat.succ 9 * (Nat.factorial 9 * (9 : ℕ) : ℝ)⁻¹) / 2 := by
        grw [Complex.exp_bound (by simpa) (by simp), Complex.exp_bound (by simpa) (by simp)]
      _ ≤ |x| ^ 9 * (10 / 3265920) := by
        simp [norm_mul, norm_neg, Complex.norm_I, Complex.norm_real, Real.norm_eq_abs]
        norm_num
  simpa [← Complex.ofReal_sin, ← Real.norm_eq_abs, ← Complex.norm_real] using h

def cosPoly8 (x : ℝ) : ℝ :=
  1 - x ^ 2 / 2 + x ^ 4 / 24 - x ^ 6 / 720

def sinPoly9 (x : ℝ) : ℝ :=
  x - x ^ 3 / 6 + x ^ 5 / 120 - x ^ 7 / 5040

lemma cos_of_poly8 {x r : ℝ} (habs : |x| ≤ 1)
    (hrem : |x| ^ 8 * (9 / 322560) ≤ r) :
    cosPoly8 x - r ≤ Real.cos x ∧ Real.cos x ≤ cosPoly8 x + r := by
  unfold cosPoly8
  have hb := abs_le.mp (cos_bound8 habs)
  constructor <;> linarith

lemma sin_of_poly9 {x r : ℝ} (habs : |x| ≤ 1)
    (hrem : |x| ^ 9 * (10 / 3265920) ≤ r) :
    sinPoly9 x - r ≤ Real.sin x ∧ Real.sin x ≤ sinPoly9 x + r := by
  unfold sinPoly9
  have hb := abs_le.mp (sin_bound9 habs)
  constructor <;> linarith

lemma nStar_pow8 : nStar ^ 8 = (4096 / 244140625 : ℝ) := by
  calc
    nStar ^ 8 = (nStar ^ 2) ^ 4 := by ring
    _ = (8 / 125) ^ 4 := by rw [nStar_sq]
    _ = 4096 / 244140625 := by norm_num

lemma cosPoly8_one : cosPoly8 (1 : ℝ) = (389 / 720 : ℝ) := by
  simp only [cosPoly8]; norm_num

lemma cos_one_tight :
    (174263 / 322560 : ℝ) ≤ Real.cos 1 ∧ Real.cos 1 ≤ (174281 / 322560 : ℝ) := by
  have hrem : |(1 : ℝ)| ^ 8 * (9 / 322560) ≤ (1 / 35840 : ℝ) := by norm_num
  have h := cos_of_poly8 (by norm_num) hrem
  rw [cosPoly8_one] at h
  constructor <;> linarith [h.1, h.2]

lemma cosPoly8_half : cosPoly8 (1 / 2 : ℝ) = (40439 / 46080 : ℝ) := by
  simp only [cosPoly8]; norm_num

lemma cos_half_tight :
    (72466679 / 82575360 : ℝ) ≤ Real.cos (1 / 2) ∧
      Real.cos (1 / 2) ≤ (72466697 / 82575360 : ℝ) := by
  have hrem : |(1 / 2 : ℝ)| ^ 8 * (9 / 322560) ≤ (1 / 9175040 : ℝ) := by norm_num
  have h := cos_of_poly8 (by norm_num) hrem
  rw [cosPoly8_half] at h
  constructor <;> linarith [h.1, h.2]

lemma cosPoly8_quarter : cosPoly8 (1 / 4 : ℝ) = (2857439 / 2949120 : ℝ) := by
  simp only [cosPoly8]; norm_num

lemma cos_quarter_tight :
    (20482122743 / 21139292160 : ℝ) ≤ Real.cos (1 / 4) ∧
      Real.cos (1 / 4) ≤ (20482122761 / 21139292160 : ℝ) := by
  have hrem : |(1 / 4 : ℝ)| ^ 8 * (9 / 322560) ≤ (1 / 2348810240 : ℝ) := by norm_num
  have h := cos_of_poly8 (by norm_num) hrem
  rw [cosPoly8_quarter] at h
  constructor <;> linarith [h.1, h.2]

lemma sinPoly9_one : sinPoly9 (1 : ℝ) = (4241 / 5040 : ℝ) := by
  simp only [sinPoly9]; norm_num

lemma sin_one_tight :
    (196297 / 233280 : ℝ) ≤ Real.sin 1 ∧ Real.sin 1 ≤ (1374089 / 1632960 : ℝ) := by
  have hrem : |(1 : ℝ)| ^ 9 * (10 / 3265920) ≤ (1 / 326592 : ℝ) := by norm_num
  have h := sin_of_poly9 (by norm_num) hrem
  rw [sinPoly9_one] at h
  constructor <;> linarith [h.1, h.2]

lemma sinPoly9_half : sinPoly9 (1 / 2 : ℝ) = (309287 / 645120 : ℝ) := by
  simp only [sinPoly9]; norm_num

lemma sin_half_tight :
    (309287 / 645120 : ℝ) - (1 / 167215104 : ℝ) ≤ Real.sin (1 / 2) ∧
      Real.sin (1 / 2) ≤ (309287 / 645120 : ℝ) + (1 / 167215104 : ℝ) := by
  have hrem : |(1 / 2 : ℝ)| ^ 9 * (10 / 3265920) ≤ (1 / 167215104 : ℝ) := by norm_num
  have h := sin_of_poly9 (by norm_num) hrem
  rw [sinPoly9_half] at h
  constructor <;> linarith [h.1, h.2]

lemma sinPoly9_quarter : sinPoly9 (1 / 4 : ℝ) = (20429471 / 82575360 : ℝ) := by
  simp only [sinPoly9]; norm_num

lemma sin_quarter_tight :
    (20429471 / 82575360 : ℝ) - (1 / 85614133248 : ℝ) ≤ Real.sin (1 / 4) ∧
      Real.sin (1 / 4) ≤ (20429471 / 82575360 : ℝ) + (1 / 85614133248 : ℝ) := by
  have hrem : |(1 / 4 : ℝ)| ^ 9 * (10 / 3265920) ≤ (1 / 85614133248 : ℝ) := by norm_num
  have h := sin_of_poly9 (by norm_num) hrem
  rw [sinPoly9_quarter] at h
  constructor <;> linarith [h.1, h.2]

lemma uStar_ofLp0 (t : ℝ) :
    (uStar t).ofLp 0 =
      ((5 / 2) * Real.cos (nStar * t) - Real.cos t) * (rhoStar t)⁻¹ := by
  simp [uStar, PiLp.smul_apply, smul_eq_mul, PiLp.sub_apply,
    (keplerIC_sStar_ofLp01 t).1, (obs_ofLp01 t).1, rhoStar, mul_comm]

lemma uStar_ofLp1 (t : ℝ) :
    (uStar t).ofLp 1 =
      ((5 / 2) * Real.sin (nStar * t) - Real.sin t) * (rhoStar t)⁻¹ := by
  simp [uStar, PiLp.smul_apply, smul_eq_mul, PiLp.sub_apply,
    (keplerIC_sStar_ofLp01 t).2, (obs_ofLp01 t).2, rhoStar, mul_comm]

lemma uStar_ofLp2 (t : ℝ) : (uStar t).ofLp 2 = 0 := by
  simp [uStar, PiLp.smul_apply, smul_eq_mul, PiLp.sub_apply,
    keplerIC_sStar_ofLp2, obs_ofLp2]

lemma dlosSTM_ofLp (t : ℝ) (dr : Vec) (i : Fin 3) :
    (dlosSTM t dr).ofLp i =
      (rhoStar t)⁻¹ * (dr.ofLp i - ⟪uStar t, dr⟫ * (uStar t).ofLp i) := by
  simp [dlosSTM, PiLp.smul_apply, smul_eq_mul, PiLp.sub_apply]

lemma stmCol0_zero : stmCol 0 0 = ofCoords 1 0 0 := by
  rw [stmCol_dx_coords]
  simp [mul_zero]
  norm_num

lemma stmCol1_zero : stmCol 1 0 = ofCoords 0 1 0 := by
  rw [stmCol_dy]
  simp

lemma stmCol2_zero : stmCol 2 0 = 0 := by
  rw [stmCol_dvx]
  simp [ofCoords_zero]

lemma stmCol3_zero : stmCol 3 0 = 0 := by
  rw [stmCol_dvy_coords]
  simp [mul_zero, ofCoords_zero]

lemma uStar_zero : uStar 0 = ofCoords 1 0 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i
  · have h := uStar_ofLp0 (0 : ℝ)
    simp [rhoStar_zero] at h
    simpa [ofCoords, h] using (by norm_num : (5 / 2 - 1 : ℝ) * (2 / 3) = 1)
  · have h := uStar_ofLp1 (0 : ℝ)
    simp [rhoStar_zero] at h
    simpa [ofCoords, h]
  · have h := uStar_ofLp2 (0 : ℝ)
    simpa [ofCoords] using h

lemma inner_uStar_stmCol0_zero : ⟪uStar 0, stmCol 0 0⟫ = 1 := by
  rw [stmCol0_zero, uStar_zero, ← vecDot_eq_inner]
  simp [vecDot, ofLp_ofCoords, Fin.sum_univ_three]

lemma dlosCol0_zero_ofLp (i : Fin 3) : (dlosCol 0 0).ofLp i = 0 := by
  have hinn : ⟪ofCoords 1 0 0, ofCoords 1 0 0⟫ = 1 := by
    rw [← vecDot_eq_inner]; simp [vecDot, ofLp_ofCoords, Fin.sum_univ_three]
  rw [dlosCol, dlosSTM_ofLp, rhoStar_zero, stmCol0_zero, uStar_zero, hinn]
  fin_cases i <;> simp [ofLp_ofCoords]

lemma dlosCol0_zero : dlosCol 0 0 = 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i <;> simpa [PiLp.zero_apply] using dlosCol0_zero_ofLp _

lemma dlosCol2_zero : dlosCol 2 0 = 0 := by
  simp [dlosCol, dlosSTM, stmCol2_zero]

lemma dlosCol3_zero : dlosCol 3 0 = 0 := by
  simp [dlosCol, dlosSTM, stmCol3_zero]

lemma inner_uStar_stmCol1_zero : ⟪uStar 0, stmCol 1 0⟫ = 0 := by
  rw [stmCol1_zero, uStar_zero, ← vecDot_eq_inner]
  simp [vecDot, ofLp_ofCoords, Fin.sum_univ_three]

lemma dlosCol1_zero_ofLp :
    (dlosCol 1 0).ofLp 0 = 0 ∧ (dlosCol 1 0).ofLp 1 = 2 / 3 ∧
      (dlosCol 1 0).ofLp 2 = 0 := by
  have hinn : ⟪ofCoords 1 0 0, ofCoords 0 1 0⟫ = 0 := by
    rw [← vecDot_eq_inner]; simp [vecDot, ofLp_ofCoords, Fin.sum_univ_three]
  refine ⟨?_, ?_, ?_⟩
  · rw [dlosCol, dlosSTM_ofLp, rhoStar_zero, stmCol1_zero, uStar_zero, hinn]
    simp [ofLp_ofCoords]
  · rw [dlosCol, dlosSTM_ofLp, rhoStar_zero, stmCol1_zero, uStar_zero, hinn]
    simp [ofLp_ofCoords]
  · rw [dlosCol, dlosSTM_ofLp, rhoStar_zero, stmCol1_zero, uStar_zero, hinn]
    simp [ofLp_ofCoords]

lemma dlosCol1_zero : dlosCol 1 0 = ofCoords 0 (2 / 3) 0 := by
  apply (PiLp.continuousLinearEquiv 2 ℝ (fun _ : Fin 3 => ℝ)).injective
  ext i; fin_cases i
  · simpa [ofCoords] using dlosCol1_zero_ofLp.1
  · simpa [ofCoords] using dlosCol1_zero_ofLp.2.1
  · simpa [ofCoords] using dlosCol1_zero_ofLp.2.2

/-! Interval arithmetic for the in-plane STM/dlos block. -/

lemma add_bounds {aLo aHi bLo bHi a b : ℝ}
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aLo + bLo ≤ a + b ∧ a + b ≤ aHi + bHi := by constructor <;> linarith

lemma sub_bounds {aLo aHi bLo bHi a b : ℝ}
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aLo - bHi ≤ a - b ∧ a - b ≤ aHi - bLo := by constructor <;> linarith

lemma mul_nonneg_bounds {aLo aHi bLo bHi a b : ℝ}
    (ha0 : 0 ≤ aLo) (hb0 : 0 ≤ bLo)
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aLo * bLo ≤ a * b ∧ a * b ≤ aHi * bHi := by
  constructor
  · exact mul_le_mul hal hbl hb0 (ha0.trans hal)
  · exact mul_le_mul hah hbh (hb0.trans hbl) (ha0.trans (hal.trans hah))

lemma mul_nonpos_nonneg_bounds {aLo aHi bLo bHi a b : ℝ}
    (ha1 : aHi ≤ 0) (hb0 : 0 ≤ bLo)
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aLo * bHi ≤ a * b ∧ a * b ≤ aHi * bLo := by
  have ha : a ≤ 0 := hah.trans ha1
  have hb : 0 ≤ b := hb0.trans hbl
  constructor <;> nlinarith

lemma inv_pos_bounds {dLo dHi d : ℝ} (hd0 : 0 < dLo)
    (hdl : dLo ≤ d) (hdh : d ≤ dHi) :
    dHi⁻¹ ≤ d⁻¹ ∧ d⁻¹ ≤ dLo⁻¹ := by
  have hd : 0 < d := hd0.trans_le hdl
  have hdHi : 0 < dHi := hd.trans_le hdh
  constructor
  · exact inv_anti₀ hd hdh
  · exact inv_anti₀ hd0 hdl

lemma nStar_pow4 : nStar ^ 4 = (64 / 15625 : ℝ) := by
  calc
    nStar ^ 4 = (nStar ^ 2) ^ 2 := by ring
    _ = (8 / 125) ^ 2 := by rw [nStar_sq]
    _ = 64 / 15625 := by norm_num

lemma nStar_pow6 : nStar ^ 6 = (512 / 1953125 : ℝ) := by
  calc
    nStar ^ 6 = nStar ^ 2 * nStar ^ 4 := by ring
    _ = (8 / 125) * (64 / 15625) := by rw [nStar_sq, nStar_pow4]
    _ = 512 / 1953125 := by norm_num

lemma nStar_div4_sq : (nStar / 4) ^ 2 = (1 / 250 : ℝ) := by
  field_simp; rw [nStar_sq]; norm_num

lemma nStar_div2_sq : (nStar / 2) ^ 2 = (2 / 125 : ℝ) := by
  field_simp; rw [nStar_sq]; norm_num

lemma cosPoly8_nStar_div4 : cosPoly8 (nStar / 4) = (11227507499 / 11250000000 : ℝ) := by
  simp only [cosPoly8]
  have h2 := nStar_div4_sq
  have h4 : (nStar / 4) ^ 4 = (1 / 62500 : ℝ) := by
    calc (nStar / 4) ^ 4 = ((nStar / 4) ^ 2) ^ 2 := by ring
      _ = (1 / 250) ^ 2 := by rw [h2]
      _ = 1 / 62500 := by norm_num
  have h6 : (nStar / 4) ^ 6 = (1 / 15625000 : ℝ) := by
    calc (nStar / 4) ^ 6 = (nStar / 4) ^ 2 * (nStar / 4) ^ 4 := by ring
      _ = (1 / 250) * (1 / 62500) := by rw [h2, h4]
      _ = 1 / 15625000 := by norm_num
  rw [h2, h4, h6]; norm_num

lemma cos_nStar_div4_tight :
    (1257480839887991 / 1260000000000000 : ℝ) ≤ Real.cos (nStar / 4) ∧
      Real.cos (nStar / 4) ≤ (1257480839888009 / 1260000000000000 : ℝ) := by
  have hrem : |nStar / 4| ^ 8 * (9 / 322560) ≤ (1 / 140000000000000 : ℝ) := by
    have habs : |nStar / 4| ^ 2 = (1 / 250 : ℝ) := by
      rw [sq_abs, nStar_div4_sq]
    have h8 : |nStar / 4| ^ 8 = (1 / 3906250000 : ℝ) := by
      calc |nStar / 4| ^ 8 = (|nStar / 4| ^ 2) ^ 4 := by ring
        _ = (1 / 250) ^ 4 := by rw [habs]
        _ = 1 / 3906250000 := by norm_num
    rw [h8]; norm_num
  have h := cos_of_poly8 abs_nStar_div4_le_one hrem
  rw [cosPoly8_nStar_div4] at h
  constructor <;> linarith [h.1, h.2]

lemma cosPoly8_nStar_div2 : cosPoly8 (nStar / 2) = (87188437 / 87890625 : ℝ) := by
  simp only [cosPoly8]
  have h2 := nStar_div2_sq
  have h4 : (nStar / 2) ^ 4 = (4 / 15625 : ℝ) := by
    calc (nStar / 2) ^ 4 = ((nStar / 2) ^ 2) ^ 2 := by ring
      _ = (2 / 125) ^ 2 := by rw [h2]
      _ = 4 / 15625 := by norm_num
  have h6 : (nStar / 2) ^ 6 = (8 / 1953125 : ℝ) := by
    calc (nStar / 2) ^ 6 = (nStar / 2) ^ 2 * (nStar / 2) ^ 4 := by ring
      _ = (2 / 125) * (4 / 15625) := by rw [h2, h4]
      _ = 8 / 1953125 := by norm_num
  rw [h2, h4, h6]; norm_num

lemma cos_nStar_div2_tight :
    (4882552471991 / 4921875000000 : ℝ) ≤ Real.cos (nStar / 2) ∧
      Real.cos (nStar / 2) ≤ (4882552472009 / 4921875000000 : ℝ) := by
  have hrem : |nStar / 2| ^ 8 * (9 / 322560) ≤ (1 / 546875000000 : ℝ) := by
    have habs : |nStar / 2| ^ 2 = (2 / 125 : ℝ) := by
      rw [sq_abs, nStar_div2_sq]
    have h8 : |nStar / 2| ^ 8 = (16 / 244140625 : ℝ) := by
      calc |nStar / 2| ^ 8 = (|nStar / 2| ^ 2) ^ 4 := by ring
        _ = (2 / 125) ^ 4 := by rw [habs]
        _ = 16 / 244140625 := by norm_num
    rw [h8]; norm_num
  have h := cos_of_poly8 abs_nStar_div2_le_one hrem
  rw [cosPoly8_nStar_div2] at h
  constructor <;> linarith [h.1, h.2]

lemma cosPoly8_nStar : cosPoly8 nStar = (85093093 / 87890625 : ℝ) := by
  simp only [cosPoly8]
  rw [nStar_sq, nStar_pow4, nStar_pow6]; norm_num

lemma cos_nStar_tight :
    (74456456339 / 76904296875 : ℝ) ≤ Real.cos nStar ∧
      Real.cos nStar ≤ (74456456411 / 76904296875 : ℝ) := by
  have hrem : |nStar| ^ 8 * (9 / 322560) ≤ (4 / 8544921875 : ℝ) := by
    rw [abs_of_nonneg nStar_pos.le, nStar_pow8]; norm_num
  have h := cos_of_poly8 abs_nStar_le_one hrem
  rw [cosPoly8_nStar] at h
  constructor <;> linarith [h.1, h.2]

lemma sinPoly9_factor_div4 :
    sinPoly9 (nStar / 4) = (nStar / 4) * (78697510499 / 78750000000 : ℝ) := by
  simp only [sinPoly9]
  have h2 := nStar_div4_sq
  have h4 : (nStar / 4) ^ 4 = (1 / 62500 : ℝ) := by
    calc (nStar / 4) ^ 4 = ((nStar / 4) ^ 2) ^ 2 := by ring
      _ = (1 / 250) ^ 2 := by rw [h2]
      _ = 1 / 62500 := by norm_num
  have h6 : (nStar / 4) ^ 6 = (1 / 15625000 : ℝ) := by
    calc (nStar / 4) ^ 6 = (nStar / 4) ^ 2 * (nStar / 4) ^ 4 := by ring
      _ = (1 / 250) * (1 / 62500) := by rw [h2, h4]
      _ = 1 / 15625000 := by norm_num
  have hx3 : (nStar / 4) ^ 3 = (nStar / 4) * (nStar / 4) ^ 2 := by ring
  have hx5 : (nStar / 4) ^ 5 = (nStar / 4) * (nStar / 4) ^ 4 := by ring
  have hx7 : (nStar / 4) ^ 7 = (nStar / 4) * (nStar / 4) ^ 6 := by ring
  rw [hx3, hx5, hx7, h2, h4, h6]
  ring

lemma sin_nStar_div4_tight :
    (63203 / 1000000 : ℝ) ≤ Real.sin (nStar / 4) ∧
      Real.sin (nStar / 4) ≤ (63204 / 1000000 : ℝ) := by
  have hQ : (0 : ℝ) ≤ 78697510499 / 78750000000 := by norm_num
  have hrem : |nStar / 4| ^ 9 * (10 / 3265920) ≤ (1 / 10000000000000000 : ℝ) := by
    have : |nStar / 4| ≤ (252983 / 4000000 : ℝ) := by
      rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
      linarith [nStar_lt_tight]
    have : |nStar / 4| ^ 9 ≤ (252983 / 4000000 : ℝ) ^ 9 :=
      pow_le_pow_left₀ (abs_nonneg _) this 9
    nlinarith
  have h := sin_of_poly9 abs_nStar_div4_le_one hrem
  rw [sinPoly9_factor_div4] at h
  have hlo : (252982 / 4000000 : ℝ) * (78697510499 / 78750000000)
      ≤ (nStar / 4) * (78697510499 / 78750000000) :=
    mul_le_mul_of_nonneg_right (by linarith [nStar_gt_tight] : (252982 / 4000000 : ℝ) ≤ nStar / 4) hQ
  have hhi : (nStar / 4) * (78697510499 / 78750000000)
      ≤ (252983 / 4000000 : ℝ) * (78697510499 / 78750000000) :=
    mul_le_mul_of_nonneg_right (by linarith [nStar_lt_tight] : nStar / 4 ≤ (252983 / 4000000 : ℝ)) hQ
  constructor <;> nlinarith [h.1, h.2, hlo, hhi]

lemma sinPoly9_factor_div2 :
    sinPoly9 (nStar / 2) = (nStar / 2) * (613595062 / 615234375 : ℝ) := by
  simp only [sinPoly9]
  have h2 := nStar_div2_sq
  have h4 : (nStar / 2) ^ 4 = (4 / 15625 : ℝ) := by
    calc (nStar / 2) ^ 4 = ((nStar / 2) ^ 2) ^ 2 := by ring
      _ = (2 / 125) ^ 2 := by rw [h2]
      _ = 4 / 15625 := by norm_num
  have h6 : (nStar / 2) ^ 6 = (8 / 1953125 : ℝ) := by
    calc (nStar / 2) ^ 6 = (nStar / 2) ^ 2 * (nStar / 2) ^ 4 := by ring
      _ = (2 / 125) * (4 / 15625) := by rw [h2, h4]
      _ = 8 / 1953125 := by norm_num
  have hx3 : (nStar / 2) ^ 3 = (nStar / 2) * (nStar / 2) ^ 2 := by ring
  have hx5 : (nStar / 2) ^ 5 = (nStar / 2) * (nStar / 2) ^ 4 := by ring
  have hx7 : (nStar / 2) ^ 7 = (nStar / 2) * (nStar / 2) ^ 6 := by ring
  rw [hx3, hx5, hx7, h2, h4, h6]
  ring

lemma sin_nStar_div2_tight :
    (126153 / 1000000 : ℝ) ≤ Real.sin (nStar / 2) ∧
      Real.sin (nStar / 2) ≤ (126155 / 1000000 : ℝ) := by
  have hQ : (0 : ℝ) ≤ 613595062 / 615234375 := by norm_num
  have hrem : |nStar / 2| ^ 9 * (10 / 3265920) ≤ (1 / 10000000000000 : ℝ) := by
    have : |nStar / 2| ≤ (252983 / 2000000 : ℝ) := by
      rw [abs_of_nonneg (div_nonneg nStar_pos.le (by norm_num))]
      linarith [nStar_lt_tight]
    have : |nStar / 2| ^ 9 ≤ (252983 / 2000000 : ℝ) ^ 9 :=
      pow_le_pow_left₀ (abs_nonneg _) this 9
    nlinarith
  have h := sin_of_poly9 abs_nStar_div2_le_one hrem
  rw [sinPoly9_factor_div2] at h
  have hlo : (252982 / 2000000 : ℝ) * (613595062 / 615234375)
      ≤ (nStar / 2) * (613595062 / 615234375) :=
    mul_le_mul_of_nonneg_right (by linarith [nStar_gt_tight] : (252982 / 2000000 : ℝ) ≤ nStar / 2) hQ
  have hhi : (nStar / 2) * (613595062 / 615234375)
      ≤ (252983 / 2000000 : ℝ) * (613595062 / 615234375) :=
    mul_le_mul_of_nonneg_right (by linarith [nStar_lt_tight] : nStar / 2 ≤ (252983 / 2000000 : ℝ)) hQ
  constructor <;> nlinarith [h.1, h.2, hlo, hhi]

lemma sinPoly9_factor_nStar :
    sinPoly9 nStar = nStar * (608692843 / 615234375 : ℝ) := by
  simp only [sinPoly9]
  have hx3 : nStar ^ 3 = nStar * nStar ^ 2 := by ring
  have hx5 : nStar ^ 5 = nStar * nStar ^ 4 := by ring
  have hx7 : nStar ^ 7 = nStar * nStar ^ 6 := by ring
  rw [hx3, hx5, hx7, nStar_sq, nStar_pow4, nStar_pow6]
  ring

lemma sin_nStar_tight :
    (250292 / 1000000 : ℝ) ≤ Real.sin nStar ∧
      Real.sin nStar ≤ (250294 / 1000000 : ℝ) := by
  have hQ : (0 : ℝ) ≤ 608692843 / 615234375 := by norm_num
  have hrem : |nStar| ^ 9 * (10 / 3265920) ≤ (1 / 10000000000 : ℝ) := by
    have : |nStar| ≤ (252983 / 1000000 : ℝ) := by
      rw [abs_of_nonneg nStar_pos.le]; exact nStar_lt_tight.le
    have : |nStar| ^ 9 ≤ (252983 / 1000000 : ℝ) ^ 9 :=
      pow_le_pow_left₀ (abs_nonneg _) this 9
    nlinarith
  have h := sin_of_poly9 abs_nStar_le_one hrem
  rw [sinPoly9_factor_nStar] at h
  have hlo : (252982 / 1000000 : ℝ) * (608692843 / 615234375)
      ≤ nStar * (608692843 / 615234375) :=
    mul_le_mul_of_nonneg_right nStar_gt_tight.le hQ
  have hhi : nStar * (608692843 / 615234375)
      ≤ (252983 / 1000000 : ℝ) * (608692843 / 615234375) :=
    mul_le_mul_of_nonneg_right nStar_lt_tight.le hQ
  constructor <;> nlinarith [h.1, h.2, hlo, hhi]

lemma one_sub_nStar_tight :
    (747017 / 1000000 : ℝ) < 1 - nStar ∧ 1 - nStar < (747018 / 1000000 : ℝ) := by
  constructor <;> linarith [nStar_gt_tight, nStar_lt_tight]

lemma abs_nm1_div4_tight :
    (747017 / 4000000 : ℝ) < |(nStar - 1) * (1 / 4)| ∧
      |(nStar - 1) * (1 / 4)| < (747018 / 4000000 : ℝ) := by
  have hx : |(nStar - 1) * (1 / 4)| = (1 - nStar) / 4 := by
    simpa [div_eq_mul_inv] using abs_nm1_mul_nonneg (1 / 4) (by norm_num)
  rw [hx]
  constructor <;> linarith [one_sub_nStar_tight.1, one_sub_nStar_tight.2]

lemma abs_nm1_div2_tight :
    (747017 / 2000000 : ℝ) < |(nStar - 1) * (1 / 2)| ∧
      |(nStar - 1) * (1 / 2)| < (747018 / 2000000 : ℝ) := by
  have hx : |(nStar - 1) * (1 / 2)| = (1 - nStar) / 2 := by
    simpa [div_eq_mul_inv] using abs_nm1_mul_nonneg (1 / 2) (by norm_num)
  rw [hx]
  constructor <;> linarith [one_sub_nStar_tight.1, one_sub_nStar_tight.2]

lemma abs_nm1_one_tight :
    (747017 / 1000000 : ℝ) < |nStar - 1| ∧ |nStar - 1| < (747018 / 1000000 : ℝ) := by
  have hx : |nStar - 1| = 1 - nStar := by
    rw [abs_of_nonpos (sub_nonpos.mpr nStar_lt_one.le), neg_sub]
  rw [hx]; exact one_sub_nStar_tight

lemma pow_even_abs (x : ℝ) :
    x ^ 2 = |x| ^ 2 ∧ x ^ 4 = |x| ^ 4 ∧ x ^ 6 = |x| ^ 6 := by
  have h2 : x ^ 2 = |x| ^ 2 := (sq_abs x).symm
  have h4 : x ^ 4 = |x| ^ 4 := by
    calc x ^ 4 = (x ^ 2) ^ 2 := by ring
      _ = (|x| ^ 2) ^ 2 := by rw [h2]
      _ = |x| ^ 4 := by ring
  have h6 : x ^ 6 = |x| ^ 6 := by
    calc x ^ 6 = x ^ 2 * x ^ 4 := by ring
      _ = |x| ^ 2 * |x| ^ 4 := by rw [h2, h4]
      _ = |x| ^ 6 := by ring
  exact ⟨h2, h4, h6⟩

lemma cosPoly8_abs (x : ℝ) :
    cosPoly8 x = 1 - |x| ^ 2 / 2 + |x| ^ 4 / 24 - |x| ^ 6 / 720 := by
  simp only [cosPoly8]
  have h := pow_even_abs x
  rw [h.1, h.2.1, h.2.2]

lemma rem8_of_le {x A B : ℝ} (hx : |x| ≤ A) (hA : 0 ≤ A)
    (hAB : A ^ 8 * (9 / 322560) ≤ B) :
    |x| ^ 8 * (9 / 322560) ≤ B := by
  have := pow_le_pow_left₀ (abs_nonneg x) hx 8
  have := mul_le_mul_of_nonneg_right this (by norm_num : (0 : ℝ) ≤ 9 / 322560)
  exact this.trans hAB

lemma cos_nm1_div4_tight :
    (982612 / 1000000 : ℝ) ≤ Real.cos ((nStar - 1) * (1 / 4)) ∧
      Real.cos ((nStar - 1) * (1 / 4)) ≤ (982613 / 1000000 : ℝ) := by
  have habs : |(nStar - 1) * (1 / 4)| ≤ 1 := by linarith [abs_nm1_div4_tight.2]
  have hA : |(nStar - 1) * (1 / 4)| ≤ (747018 / 4000000 : ℝ) :=
    abs_nm1_div4_tight.2.le
  have hrem : |(nStar - 1) * (1 / 4)| ^ 8 * (9 / 322560) ≤ (1 / 10000000000 : ℝ) :=
    rem8_of_le hA (by norm_num) (by norm_num)
  have h := cos_of_poly8 habs hrem
  rw [cosPoly8_abs] at h
  have hx2lo : (747017 / 4000000 : ℝ) ^ 2 ≤ |(nStar - 1) * (1 / 4)| ^ 2 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div4_tight.1.le 2
  have hx2hi : |(nStar - 1) * (1 / 4)| ^ 2 ≤ (747018 / 4000000 : ℝ) ^ 2 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 2
  have hx6hi : |(nStar - 1) * (1 / 4)| ^ 6 ≤ (747018 / 4000000 : ℝ) ^ 6 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 6
  have hx4hi : |(nStar - 1) * (1 / 4)| ^ 4 ≤ (747018 / 4000000 : ℝ) ^ 4 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 4
  -- poly ≥ 1 - x²/2 - x⁶/720
  have hx4lo : (747017 / 4000000 : ℝ) ^ 4 ≤ |(nStar - 1) * (1 / 4)| ^ 4 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div4_tight.1.le 4
  have hx6lo : (747017 / 4000000 : ℝ) ^ 6 ≤ |(nStar - 1) * (1 / 4)| ^ 6 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div4_tight.1.le 6
  have hlo : (982612 / 1000000 : ℝ)
      ≤ 1 - (747018 / 4000000 : ℝ) ^ 2 / 2 + (747017 / 4000000 : ℝ) ^ 4 / 24
        - (747018 / 4000000 : ℝ) ^ 6 / 720 - (1 / 10000000000 : ℝ) := by
    norm_num
  have hhi : 1 - (747017 / 4000000 : ℝ) ^ 2 / 2 + (747018 / 4000000 : ℝ) ^ 4 / 24
      - (747017 / 4000000 : ℝ) ^ 6 / 720 + (1 / 10000000000 : ℝ)
      ≤ (982613 / 1000000 : ℝ) := by
    norm_num
  constructor
  · nlinarith [h.1, hx2hi, hx4lo, hx6hi, hlo]
  · nlinarith [h.2, hx2lo, hx4hi, hx6lo, hhi]

lemma cos_nm1_div2_tight :
    (931052 / 1000000 : ℝ) ≤ Real.cos ((nStar - 1) * (1 / 2)) ∧
      Real.cos ((nStar - 1) * (1 / 2)) ≤ (931054 / 1000000 : ℝ) := by
  have habs : |(nStar - 1) * (1 / 2)| ≤ 1 := by linarith [abs_nm1_div2_tight.2]
  have hA : |(nStar - 1) * (1 / 2)| ≤ (747018 / 2000000 : ℝ) :=
    abs_nm1_div2_tight.2.le
  have hrem : |(nStar - 1) * (1 / 2)| ^ 8 * (9 / 322560) ≤ (2 / 100000000 : ℝ) :=
    rem8_of_le hA (by norm_num) (by norm_num)
  have h := cos_of_poly8 habs hrem
  rw [cosPoly8_abs] at h
  have hx2 : ((nStar - 1) * (1 / 2)) ^ 2 = |(nStar - 1) * (1 / 2)| ^ 2 := by
    rw [sq_abs]
  have hx2lo : (747017 / 2000000 : ℝ) ^ 2 ≤ |(nStar - 1) * (1 / 2)| ^ 2 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div2_tight.1.le 2
  have hx2hi : |(nStar - 1) * (1 / 2)| ^ 2 ≤ (747018 / 2000000 : ℝ) ^ 2 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 2
  have hx6hi : |(nStar - 1) * (1 / 2)| ^ 6 ≤ (747018 / 2000000 : ℝ) ^ 6 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 6
  have hx4hi : |(nStar - 1) * (1 / 2)| ^ 4 ≤ (747018 / 2000000 : ℝ) ^ 4 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 4
  have hx4lo : (747017 / 2000000 : ℝ) ^ 4 ≤ |(nStar - 1) * (1 / 2)| ^ 4 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div2_tight.1.le 4
  have hx6lo : (747017 / 2000000 : ℝ) ^ 6 ≤ |(nStar - 1) * (1 / 2)| ^ 6 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_div2_tight.1.le 6
  have hlo : (931052 / 1000000 : ℝ)
      ≤ 1 - (747018 / 2000000 : ℝ) ^ 2 / 2 + (747017 / 2000000 : ℝ) ^ 4 / 24
        - (747018 / 2000000 : ℝ) ^ 6 / 720 - (2 / 100000000 : ℝ) := by
    norm_num
  have hhi : 1 - (747017 / 2000000 : ℝ) ^ 2 / 2 + (747018 / 2000000 : ℝ) ^ 4 / 24
      - (747017 / 2000000 : ℝ) ^ 6 / 720 + (2 / 100000000 : ℝ)
      ≤ (931054 / 1000000 : ℝ) := by
    norm_num
  constructor
  · nlinarith [h.1, hx2hi, hx4lo, hx6hi, hlo]
  · nlinarith [h.2, hx2lo, hx4hi, hx6lo, hhi]

lemma cos_nm1_one_tight :
    (733705 / 1000000 : ℝ) ≤ Real.cos (nStar - 1) ∧
      Real.cos (nStar - 1) ≤ (733727 / 1000000 : ℝ) := by
  have habs : |nStar - 1| ≤ 1 := by linarith [abs_nm1_one_tight.2]
  have hA : |nStar - 1| ≤ (747018 / 1000000 : ℝ) := abs_nm1_one_tight.2.le
  have hrem : |nStar - 1| ^ 8 * (9 / 322560) ≤ (1 / 100000 : ℝ) :=
    rem8_of_le hA (by norm_num) (by norm_num)
  have h := cos_of_poly8 habs hrem
  rw [cosPoly8_abs] at h
  have hx2 : (nStar - 1) ^ 2 = |nStar - 1| ^ 2 := by rw [sq_abs]
  have hx2lo : (747017 / 1000000 : ℝ) ^ 2 ≤ |nStar - 1| ^ 2 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_one_tight.1.le 2
  have hx2hi : |nStar - 1| ^ 2 ≤ (747018 / 1000000 : ℝ) ^ 2 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 2
  have hx6hi : |nStar - 1| ^ 6 ≤ (747018 / 1000000 : ℝ) ^ 6 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 6
  have hx4hi : |nStar - 1| ^ 4 ≤ (747018 / 1000000 : ℝ) ^ 4 :=
    pow_le_pow_left₀ (abs_nonneg _) hA 4
  have hx4lo : (747017 / 1000000 : ℝ) ^ 4 ≤ |nStar - 1| ^ 4 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_one_tight.1.le 4
  have hx6lo : (747017 / 1000000 : ℝ) ^ 6 ≤ |nStar - 1| ^ 6 :=
    pow_le_pow_left₀ (by norm_num) abs_nm1_one_tight.1.le 6
  have hlo : (733705 / 1000000 : ℝ)
      ≤ 1 - (747018 / 1000000 : ℝ) ^ 2 / 2 + (747017 / 1000000 : ℝ) ^ 4 / 24
        - (747018 / 1000000 : ℝ) ^ 6 / 720 - (1 / 100000 : ℝ) := by
    norm_num
  have hhi : 1 - (747017 / 1000000 : ℝ) ^ 2 / 2 + (747018 / 1000000 : ℝ) ^ 4 / 24
      - (747017 / 1000000 : ℝ) ^ 6 / 720 + (1 / 100000 : ℝ)
      ≤ (733727 / 1000000 : ℝ) := by
    norm_num
  constructor
  · nlinarith [h.1, hx2hi, hx4lo, hx6hi, hlo]
  · nlinarith [h.2, hx2lo, hx4hi, hx6lo, hhi]

lemma rhoStar_sq_div4_tight :
    (2336935 / 1000000 : ℝ) ≤ rhoStar (1 / 4) ^ 2 ∧
      rhoStar (1 / 4) ^ 2 ≤ (2336940 / 1000000 : ℝ) := by
  rw [rhoStar_sq_cos]
  constructor <;> nlinarith [cos_nm1_div4_tight.1, cos_nm1_div4_tight.2]

lemma rhoStar_sq_div2_tight :
    (2594730 / 1000000 : ℝ) ≤ rhoStar (1 / 2) ^ 2 ∧
      rhoStar (1 / 2) ^ 2 ≤ (2594740 / 1000000 : ℝ) := by
  rw [rhoStar_sq_cos]
  constructor <;> nlinarith [cos_nm1_div2_tight.1, cos_nm1_div2_tight.2]

lemma rhoStar_sq_one_tight :
    (3581365 / 1000000 : ℝ) ≤ rhoStar 1 ^ 2 ∧
      rhoStar 1 ^ 2 ≤ (3581475 / 1000000 : ℝ) := by
  have : (nStar - 1) * (1 : ℝ) = nStar - 1 := by ring
  rw [rhoStar_sq_cos, this]
  constructor <;> nlinarith [cos_nm1_one_tight.1, cos_nm1_one_tight.2]

lemma rhoStar_div4_tight :
    (1528702 / 1000000 : ℝ) ≤ rhoStar (1 / 4) ∧
      rhoStar (1 / 4) ≤ (1528708 / 1000000 : ℝ) := by
  have hr := rhoStar_sq_div4_tight
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1); norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_); norm_num

lemma rhoStar_div2_tight :
    (1610815 / 1000000 : ℝ) ≤ rhoStar (1 / 2) ∧
      rhoStar (1 / 2) ≤ (1610822 / 1000000 : ℝ) := by
  have hr := rhoStar_sq_div2_tight
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1); norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_); norm_num

lemma rhoStar_one_tight :
    (1892420 / 1000000 : ℝ) ≤ rhoStar 1 ∧
      rhoStar 1 ≤ (1892500 / 1000000 : ℝ) := by
  have hr := rhoStar_sq_one_tight
  constructor
  · refine le_rho_of_sq (by norm_num) (le_trans ?_ hr.1); norm_num
  · refine rho_of_sq_le (by norm_num) (le_trans hr.2 ?_); norm_num

lemma stmCol0_ofLp (t : ℝ) :
    (stmCol 0 t).ofLp 0 =
      (2 - Real.cos (nStar * t)) * Real.cos (nStar * t)
        - (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.sin (nStar * t) ∧
    (stmCol 0 t).ofLp 1 =
      (2 - Real.cos (nStar * t)) * Real.sin (nStar * t)
        + (2 * Real.sin (nStar * t) - 3 * nStar * t) * Real.cos (nStar * t) ∧
    (stmCol 0 t).ofLp 2 = 0 := by
  rw [stmCol_dx_coords]; simp [ofLp_ofCoords]

lemma stmCol1_ofLp (t : ℝ) :
    (stmCol 1 t).ofLp 0 = Real.sin (nStar * t) * (1 - Real.cos (nStar * t)) ∧
    (stmCol 1 t).ofLp 1 = 1 - Real.cos (nStar * t) + Real.cos (nStar * t) ^ 2 ∧
    (stmCol 1 t).ofLp 2 = 0 := by
  rw [stmCol_dy]; simp [ofLp_ofCoords]

lemma stmCol2_ofLp (t : ℝ) :
    (stmCol 2 t).ofLp 0 =
      Real.sin (nStar * t) / nStar * Real.cos (nStar * t)
        + 2 * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t) / nStar ∧
    (stmCol 2 t).ofLp 1 =
      Real.sin (nStar * t) / nStar * Real.sin (nStar * t)
        - 2 * (1 - Real.cos (nStar * t)) * Real.cos (nStar * t) / nStar ∧
    (stmCol 2 t).ofLp 2 = 0 := by
  rw [stmCol_dvx]; simp [ofLp_ofCoords]

lemma stmCol3_ofLp (t : ℝ) :
    (stmCol 3 t).ofLp 0 =
      (2 * (1 - Real.cos (nStar * t)) / nStar) * Real.cos (nStar * t)
        - ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) * Real.sin (nStar * t) ∧
    (stmCol 3 t).ofLp 1 =
      (2 * (1 - Real.cos (nStar * t)) / nStar) * Real.sin (nStar * t)
        + ((4 * Real.sin (nStar * t) - 3 * nStar * t) / nStar) * Real.cos (nStar * t) ∧
    (stmCol 3 t).ofLp 2 = 0 := by
  rw [stmCol_dvy_coords]; simp [ofLp_ofCoords]

lemma inner_uStar_stm (t : ℝ) (dr : Vec) :
    ⟪uStar t, dr⟫ = (uStar t).ofLp 0 * dr.ofLp 0 + (uStar t).ofLp 1 * dr.ofLp 1
      + (uStar t).ofLp 2 * dr.ofLp 2 := by
  rw [← vecDot_eq_inner]
  simp [vecDot, Fin.sum_univ_three]

lemma dlosSTM_ofLp01 (t : ℝ) (dr : Vec) :
    (dlosSTM t dr).ofLp 0 =
      (rhoStar t)⁻¹ * (dr.ofLp 0 - ⟪uStar t, dr⟫ * (uStar t).ofLp 0) ∧
    (dlosSTM t dr).ofLp 1 =
      (rhoStar t)⁻¹ * (dr.ofLp 1 - ⟪uStar t, dr⟫ * (uStar t).ofLp 1) := by
  constructor <;> rw [dlosSTM_ofLp]


lemma mul_nonneg_nonpos_bounds {aLo aHi bLo bHi a b : ℝ}
    (ha0 : 0 ≤ aLo) (hb1 : bHi ≤ 0)
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aHi * bLo ≤ a * b ∧ a * b ≤ aLo * bHi := by
  have ha : 0 ≤ a := ha0.trans hal
  have hb : b ≤ 0 := hbh.trans hb1
  constructor <;> nlinarith

lemma mul_nonpos_nonpos_bounds {aLo aHi bLo bHi a b : ℝ}
    (ha1 : aHi ≤ 0) (hb1 : bHi ≤ 0)
    (hal : aLo ≤ a) (hah : a ≤ aHi) (hbl : bLo ≤ b) (hbh : b ≤ bHi) :
    aHi * bHi ≤ a * b ∧ a * b ≤ aLo * bLo := by
  have ha : a ≤ 0 := hah.trans ha1
  have hb : b ≤ 0 := hbh.trans hb1
  constructor <;> nlinarith

lemma nStar_mul_div4 : nStar * (1 / 4) = nStar / 4 := by ring
lemma nStar_mul_div2 : nStar * (1 / 2) = nStar / 2 := by ring

lemma inv_nStar_tight :
    (3952834 / 1000000 : ℝ) ≤ nStar⁻¹ ∧ nStar⁻¹ ≤ (3952851 / 1000000 : ℝ) := by
  have h := inv_pos_bounds (by norm_num : (0 : ℝ) < 252982 / 1000000)
    nStar_gt_tight.le nStar_lt_tight.le
  constructor <;> nlinarith [h.1, h.2]

lemma inv_rhoStar_div4_tight :
    (654147 / 1000000 : ℝ) ≤ (rhoStar (1 / 4))⁻¹ ∧
      (rhoStar (1 / 4))⁻¹ ≤ (654150 / 1000000 : ℝ) := by
  have h := inv_pos_bounds (by norm_num) rhoStar_div4_tight.1 rhoStar_div4_tight.2
  constructor <;> nlinarith [h.1, h.2]

lemma inv_rhoStar_div2_tight :
    (620801 / 1000000 : ℝ) ≤ (rhoStar (1 / 2))⁻¹ ∧
      (rhoStar (1 / 2))⁻¹ ≤ (620804 / 1000000 : ℝ) := by
  have h := inv_pos_bounds (by norm_num) rhoStar_div2_tight.1 rhoStar_div2_tight.2
  constructor <;> nlinarith [h.1, h.2]

lemma inv_rhoStar_one_tight :
    (528401 / 1000000 : ℝ) ≤ (rhoStar 1)⁻¹ ∧
      (rhoStar 1)⁻¹ ≤ (528424 / 1000000 : ℝ) := by
  have h := inv_pos_bounds (by norm_num) rhoStar_one_tight.1 rhoStar_one_tight.2
  constructor <;> nlinarith [h.1, h.2]

lemma cos_nStar_div4_milli :
    (998000 / 1000000 : ℝ) ≤ Real.cos (nStar / 4) ∧
      Real.cos (nStar / 4) ≤ (998001 / 1000000 : ℝ) := by
  have h := cos_nStar_div4_tight
  constructor <;> nlinarith [h.1, h.2]

lemma cos_nStar_div2_milli :
    (992010 / 1000000 : ℝ) ≤ Real.cos (nStar / 2) ∧
      Real.cos (nStar / 2) ≤ (992011 / 1000000 : ℝ) := by
  have h := cos_nStar_div2_tight
  constructor <;> nlinarith [h.1, h.2]

lemma cos_nStar_milli :
    (968170 / 1000000 : ℝ) ≤ Real.cos nStar ∧
      Real.cos nStar ≤ (968171 / 1000000 : ℝ) := by
  have h := cos_nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma cos_quarter_milli :
    (968912 / 1000000 : ℝ) ≤ Real.cos (1 / 4) ∧
      Real.cos (1 / 4) ≤ (968913 / 1000000 : ℝ) := by
  have h := cos_quarter_tight
  constructor <;> nlinarith [h.1, h.2]

lemma cos_half_milli :
    (877582 / 1000000 : ℝ) ≤ Real.cos (1 / 2) ∧
      Real.cos (1 / 2) ≤ (877583 / 1000000 : ℝ) := by
  have h := cos_half_tight
  constructor <;> nlinarith [h.1, h.2]

lemma cos_one_milli :
    (540249 / 1000000 : ℝ) ≤ Real.cos 1 ∧ Real.cos 1 ≤ (540306 / 1000000 : ℝ) := by
  have h := cos_one_tight
  constructor <;> nlinarith [h.1, h.2]

lemma sin_quarter_milli :
    (247403 / 1000000 : ℝ) ≤ Real.sin (1 / 4) ∧
      Real.sin (1 / 4) ≤ (247404 / 1000000 : ℝ) := by
  have h := sin_quarter_tight
  constructor <;> nlinarith [h.1, h.2]

lemma sin_half_milli :
    (479425 / 1000000 : ℝ) ≤ Real.sin (1 / 2) ∧
      Real.sin (1 / 2) ≤ (479426 / 1000000 : ℝ) := by
  have h := sin_half_tight
  constructor <;> nlinarith [h.1, h.2]

lemma sin_one_milli :
    (841465 / 1000000 : ℝ) ≤ Real.sin 1 ∧ Real.sin 1 ≤ (841472 / 1000000 : ℝ) := by
  have h := sin_one_tight
  constructor <;> nlinarith [h.1, h.2]

lemma ofLp_add (u v : Vec) (i : Fin 3) : (u + v).ofLp i = u.ofLp i + v.ofLp i := by
  simp [PiLp.add_apply]

lemma ofLp_sub (u v : Vec) (i : Fin 3) : (u - v).ofLp i = u.ofLp i - v.ofLp i := by
  simp [PiLp.sub_apply]

lemma ofLp_smul (c : ℝ) (u : Vec) (i : Fin 3) : (c • u).ofLp i = c * u.ofLp i := by
  simp [PiLp.smul_apply, smul_eq_mul]

lemma secondDiff_dlos_ofLp (j : Fin 4) (h : ℝ) (i : Fin 3) :
    (dlosCol j 0 - (2 : ℝ) • dlosCol j h + dlosCol j (2 * h)).ofLp i =
      (dlosCol j 0).ofLp i - 2 * (dlosCol j h).ofLp i + (dlosCol j (2 * h)).ofLp i := by
  simp [ofLp_add, ofLp_sub, ofLp_smul]

lemma uStar_ofLp2_zero (t : ℝ) : (uStar t).ofLp 2 = 0 := uStar_ofLp2 t

lemma inner_uStar_stm_xy (t : ℝ) (dr : Vec) :
    ⟪uStar t, dr⟫ = (uStar t).ofLp 0 * dr.ofLp 0 + (uStar t).ofLp 1 * dr.ofLp 1 := by
  rw [inner_uStar_stm]; simp [uStar_ofLp2]


lemma two_sub_cos_nStar_div4 :
    (1001999 / 1000000 : ℝ) ≤ 2 - Real.cos (nStar / 4) ∧
      2 - Real.cos (nStar / 4) ≤ (1002000 / 1000000 : ℝ) := by
  have h := cos_nStar_div4_milli
  constructor <;> nlinarith [h.1, h.2]

lemma two_sub_cos_nStar_div2 :
    (1007989 / 1000000 : ℝ) ≤ 2 - Real.cos (nStar / 2) ∧
      2 - Real.cos (nStar / 2) ≤ (1007990 / 1000000 : ℝ) := by
  have h := cos_nStar_div2_milli
  constructor <;> nlinarith [h.1, h.2]

lemma two_sub_cos_nStar :
    (1031829 / 1000000 : ℝ) ≤ 2 - Real.cos nStar ∧
      2 - Real.cos nStar ≤ (1031830 / 1000000 : ℝ) := by
  have h := cos_nStar_milli
  constructor <;> nlinarith [h.1, h.2]

lemma one_sub_cos_nStar_div4 :
    (1999 / 1000000 : ℝ) ≤ 1 - Real.cos (nStar / 4) ∧
      1 - Real.cos (nStar / 4) ≤ (2000 / 1000000 : ℝ) := by
  have h := cos_nStar_div4_milli
  constructor <;> nlinarith [h.1, h.2]

lemma one_sub_cos_nStar_div2 :
    (7989 / 1000000 : ℝ) ≤ 1 - Real.cos (nStar / 2) ∧
      1 - Real.cos (nStar / 2) ≤ (7990 / 1000000 : ℝ) := by
  have h := cos_nStar_div2_milli
  constructor <;> nlinarith [h.1, h.2]

lemma one_sub_cos_nStar :
    (31829 / 1000000 : ℝ) ≤ 1 - Real.cos nStar ∧
      1 - Real.cos nStar ≤ (31830 / 1000000 : ℝ) := by
  have h := cos_nStar_milli
  constructor <;> nlinarith [h.1, h.2]

lemma two_sin_nStar_div4 :
    (126406 / 1000000 : ℝ) ≤ 2 * Real.sin (nStar / 4) ∧
      2 * Real.sin (nStar / 4) ≤ (126408 / 1000000 : ℝ) := by
  have h := sin_nStar_div4_tight
  constructor <;> nlinarith [h.1, h.2]

lemma two_sin_nStar_div2 :
    (252306 / 1000000 : ℝ) ≤ 2 * Real.sin (nStar / 2) ∧
      2 * Real.sin (nStar / 2) ≤ (252310 / 1000000 : ℝ) := by
  have h := sin_nStar_div2_tight
  constructor <;> nlinarith [h.1, h.2]

lemma two_sin_nStar :
    (500584 / 1000000 : ℝ) ≤ 2 * Real.sin nStar ∧
      2 * Real.sin nStar ≤ (500588 / 1000000 : ℝ) := by
  have h := sin_nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma three_nStar_div4 :
    (189736 / 1000000 : ℝ) ≤ 3 * (nStar / 4) ∧
      3 * (nStar / 4) ≤ (189738 / 1000000 : ℝ) := by
  have h := nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma three_nStar_div2 :
    (379473 / 1000000 : ℝ) ≤ 3 * (nStar / 2) ∧
      3 * (nStar / 2) ≤ (379475 / 1000000 : ℝ) := by
  have h := nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma three_nStar :
    (758946 / 1000000 : ℝ) ≤ 3 * nStar ∧
      3 * nStar ≤ (758949 / 1000000 : ℝ) := by
  have h := nStar_tight
  constructor <;> nlinarith [h.1, h.2]


lemma tan_dx_div4 :
    (-63332 / 1000000 : ℝ) ≤ 2 * Real.sin (nStar / 4) - 3 * (nStar / 4) ∧
      2 * Real.sin (nStar / 4) - 3 * (nStar / 4) ≤ (-63328 / 1000000 : ℝ) := by
  have hs := two_sin_nStar_div4
  have hn := three_nStar_div4
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma tan_dx_div2 :
    (-127169 / 1000000 : ℝ) ≤ 2 * Real.sin (nStar / 2) - 3 * (nStar / 2) ∧
      2 * Real.sin (nStar / 2) - 3 * (nStar / 2) ≤ (-127163 / 1000000 : ℝ) := by
  have hs := two_sin_nStar_div2
  have hn := three_nStar_div2
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma tan_dx_one :
    (-258365 / 1000000 : ℝ) ≤ 2 * Real.sin nStar - 3 * nStar ∧
      2 * Real.sin nStar - 3 * nStar ≤ (-258358 / 1000000 : ℝ) := by
  have hs := two_sin_nStar
  have hn := three_nStar
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma two_c_mul_cos_div4 :
    (999995 / 1000000 : ℝ) ≤ (2 - Real.cos (nStar / 4)) * Real.cos (nStar / 4) ∧
      (2 - Real.cos (nStar / 4)) * Real.cos (nStar / 4) ≤ (999998 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar_div4
  have hb := cos_nStar_div4_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_c_mul_sin_div4 :
    (63329 / 1000000 : ℝ) ≤ (2 - Real.cos (nStar / 4)) * Real.sin (nStar / 4) ∧
      (2 - Real.cos (nStar / 4)) * Real.sin (nStar / 4) ≤ (63331 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar_div4
  have hb := sin_nStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_sin_div4 :
    (-4003 / 1000000 : ℝ) ≤
      (2 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4) ∧
      (2 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4)
        ≤ (-4002 / 1000000 : ℝ) := by
  have ha := tan_dx_div4
  have hb := sin_nStar_div4_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_cos_div4 :
    (-63206 / 1000000 : ℝ) ≤
      (2 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4) ∧
      (2 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4)
        ≤ (-63201 / 1000000 : ℝ) := by
  have ha := tan_dx_div4
  have hb := cos_nStar_div4_milli
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma three_nStar_mul_div4 :
    3 * nStar * (1 / 4) = 3 * (nStar / 4) := by ring

lemma stmCol0_x_div4 :
    (1003997 / 1000000 : ℝ) ≤ (stmCol 0 (1 / 4)).ofLp 0 ∧
      (stmCol 0 (1 / 4)).ofLp 0 ≤ (1004001 / 1000000 : ℝ) := by
  have hx := (stmCol0_ofLp (1 / 4)).1
  rw [hx, nStar_mul_div4, three_nStar_mul_div4]
  have ha := two_c_mul_cos_div4
  have hb := tan_dx_mul_sin_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol0_y_div4 :
    (123 / 1000000 : ℝ) ≤ (stmCol 0 (1 / 4)).ofLp 1 ∧
      (stmCol 0 (1 / 4)).ofLp 1 ≤ (130 / 1000000 : ℝ) := by
  have hy := (stmCol0_ofLp (1 / 4)).2.1
  rw [hy, nStar_mul_div4, three_nStar_mul_div4]
  have ha := two_c_mul_sin_div4
  have hb := tan_dx_mul_cos_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]


lemma three_nStar_mul_div2 : 3 * nStar * (1 / 2) = 3 * (nStar / 2) := by ring

lemma two_c_mul_cos_div2 :
    (999935 / 1000000 : ℝ) ≤ (2 - Real.cos (nStar / 2)) * Real.cos (nStar / 2) ∧
      (2 - Real.cos (nStar / 2)) * Real.cos (nStar / 2) ≤ (999938 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar_div2
  have hb := cos_nStar_div2_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_c_mul_sin_div2 :
    (127160 / 1000000 : ℝ) ≤ (2 - Real.cos (nStar / 2)) * Real.sin (nStar / 2) ∧
      (2 - Real.cos (nStar / 2)) * Real.sin (nStar / 2) ≤ (127163 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar_div2
  have hb := sin_nStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_sin_div2 :
    (-16044 / 1000000 : ℝ) ≤
      (2 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2) ∧
      (2 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2)
        ≤ (-16041 / 1000000 : ℝ) := by
  have ha := tan_dx_div2
  have hb := sin_nStar_div2_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_cos_div2 :
    (-126154 / 1000000 : ℝ) ≤
      (2 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2) ∧
      (2 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2)
        ≤ (-126146 / 1000000 : ℝ) := by
  have ha := tan_dx_div2
  have hb := cos_nStar_div2_milli
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol0_x_div2 :
    (1015976 / 1000000 : ℝ) ≤ (stmCol 0 (1 / 2)).ofLp 0 ∧
      (stmCol 0 (1 / 2)).ofLp 0 ≤ (1015982 / 1000000 : ℝ) := by
  have hx := (stmCol0_ofLp (1 / 2)).1
  rw [hx, nStar_mul_div2, three_nStar_mul_div2]
  have ha := two_c_mul_cos_div2
  have hb := tan_dx_mul_sin_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol0_y_div2 :
    (1006 / 1000000 : ℝ) ≤ (stmCol 0 (1 / 2)).ofLp 1 ∧
      (stmCol 0 (1 / 2)).ofLp 1 ≤ (1017 / 1000000 : ℝ) := by
  have hy := (stmCol0_ofLp (1 / 2)).2.1
  rw [hy, nStar_mul_div2, three_nStar_mul_div2]
  have ha := two_c_mul_sin_div2
  have hb := tan_dx_mul_cos_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma two_c_mul_cos_one :
    (998985 / 1000000 : ℝ) ≤ (2 - Real.cos nStar) * Real.cos nStar ∧
      (2 - Real.cos nStar) * Real.cos nStar ≤ (998988 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar
  have hb := cos_nStar_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_c_mul_sin_one :
    (258258 / 1000000 : ℝ) ≤ (2 - Real.cos nStar) * Real.sin nStar ∧
      (2 - Real.cos nStar) * Real.sin nStar ≤ (258261 / 1000000 : ℝ) := by
  have ha := two_sub_cos_nStar
  have hb := sin_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_sin_one :
    (-64668 / 1000000 : ℝ) ≤ (2 * Real.sin nStar - 3 * nStar) * Real.sin nStar ∧
      (2 * Real.sin nStar - 3 * nStar) * Real.sin nStar ≤ (-64664 / 1000000 : ℝ) := by
  have ha := tan_dx_one
  have hb := sin_nStar_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dx_mul_cos_one :
    (-250142 / 1000000 : ℝ) ≤ (2 * Real.sin nStar - 3 * nStar) * Real.cos nStar ∧
      (2 * Real.sin nStar - 3 * nStar) * Real.cos nStar ≤ (-250134 / 1000000 : ℝ) := by
  have ha := tan_dx_one
  have hb := cos_nStar_milli
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol0_x_one :
    (1063649 / 1000000 : ℝ) ≤ (stmCol 0 1).ofLp 0 ∧
      (stmCol 0 1).ofLp 0 ≤ (1063656 / 1000000 : ℝ) := by
  have hx := (stmCol0_ofLp 1).1
  rw [hx, mul_one]
  have ha := two_c_mul_cos_one
  have hb := tan_dx_mul_sin_one
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol0_y_one :
    (8116 / 1000000 : ℝ) ≤ (stmCol 0 1).ofLp 1 ∧
      (stmCol 0 1).ofLp 1 ≤ (8127 / 1000000 : ℝ) := by
  have hy := (stmCol0_ofLp 1).2.1
  rw [hy, mul_one]
  have ha := two_c_mul_sin_one
  have hb := tan_dx_mul_cos_one
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma sin_mul_omc_div4 :
    (126 / 1000000 : ℝ) ≤ Real.sin (nStar / 4) * (1 - Real.cos (nStar / 4)) ∧
      Real.sin (nStar / 4) * (1 - Real.cos (nStar / 4)) ≤ (127 / 1000000 : ℝ) := by
  have ha := sin_nStar_div4_tight
  have hb := one_sub_cos_nStar_div4
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma cos_sq_nStar_div4 :
    (996004 / 1000000 : ℝ) ≤ Real.cos (nStar / 4) ^ 2 ∧
      Real.cos (nStar / 4) ^ 2 ≤ (996006 / 1000000 : ℝ) := by
  have hb := cos_nStar_div4_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol1_x_div4 :
    (126 / 1000000 : ℝ) ≤ (stmCol 1 (1 / 4)).ofLp 0 ∧
      (stmCol 1 (1 / 4)).ofLp 0 ≤ (127 / 1000000 : ℝ) := by
  have hx := (stmCol1_ofLp (1 / 4)).1
  rw [hx, nStar_mul_div4]
  exact sin_mul_omc_div4

lemma stmCol1_y_div4 :
    (998003 / 1000000 : ℝ) ≤ (stmCol 1 (1 / 4)).ofLp 1 ∧
      (stmCol 1 (1 / 4)).ofLp 1 ≤ (998006 / 1000000 : ℝ) := by
  have hy := (stmCol1_ofLp (1 / 4)).2.1
  rw [hy, nStar_mul_div4]
  have ha := one_sub_cos_nStar_div4
  have hb := cos_sq_nStar_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]


lemma sin_mul_omc_div2 :
    (1007 / 1000000 : ℝ) ≤ Real.sin (nStar / 2) * (1 - Real.cos (nStar / 2)) ∧
      Real.sin (nStar / 2) * (1 - Real.cos (nStar / 2)) ≤ (1008 / 1000000 : ℝ) := by
  have ha := sin_nStar_div2_tight
  have hb := one_sub_cos_nStar_div2
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma cos_sq_nStar_div2 :
    (984083 / 1000000 : ℝ) ≤ Real.cos (nStar / 2) ^ 2 ∧
      Real.cos (nStar / 2) ^ 2 ≤ (984086 / 1000000 : ℝ) := by
  have hb := cos_nStar_div2_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol1_x_div2 :
    (1007 / 1000000 : ℝ) ≤ (stmCol 1 (1 / 2)).ofLp 0 ∧
      (stmCol 1 (1 / 2)).ofLp 0 ≤ (1008 / 1000000 : ℝ) := by
  have hx := (stmCol1_ofLp (1 / 2)).1
  rw [hx, nStar_mul_div2]
  exact sin_mul_omc_div2

lemma stmCol1_y_div2 :
    (992072 / 1000000 : ℝ) ≤ (stmCol 1 (1 / 2)).ofLp 1 ∧
      (stmCol 1 (1 / 2)).ofLp 1 ≤ (992076 / 1000000 : ℝ) := by
  have hy := (stmCol1_ofLp (1 / 2)).2.1
  rw [hy, nStar_mul_div2]
  have ha := one_sub_cos_nStar_div2
  have hb := cos_sq_nStar_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma sin_mul_omc_one :
    (7966 / 1000000 : ℝ) ≤ Real.sin nStar * (1 - Real.cos nStar) ∧
      Real.sin nStar * (1 - Real.cos nStar) ≤ (7967 / 1000000 : ℝ) := by
  have ha := sin_nStar_tight
  have hb := one_sub_cos_nStar
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma cos_sq_nStar :
    (937353 / 1000000 : ℝ) ≤ Real.cos nStar ^ 2 ∧
      Real.cos nStar ^ 2 ≤ (937356 / 1000000 : ℝ) := by
  have hb := cos_nStar_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol1_x_one :
    (7966 / 1000000 : ℝ) ≤ (stmCol 1 1).ofLp 0 ∧
      (stmCol 1 1).ofLp 0 ≤ (7967 / 1000000 : ℝ) := by
  have hx := (stmCol1_ofLp 1).1
  rw [hx, mul_one]
  exact sin_mul_omc_one

lemma stmCol1_y_one :
    (969182 / 1000000 : ℝ) ≤ (stmCol 1 1).ofLp 1 ∧
      (stmCol 1 1).ofLp 1 ≤ (969186 / 1000000 : ℝ) := by
  have hy := (stmCol1_ofLp 1).2.1
  rw [hy, mul_one]
  have ha := one_sub_cos_nStar
  have hb := cos_sq_nStar
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]


lemma five_halves_cos_div4 :
    (2495000 / 1000000 : ℝ) ≤ (5 / 2) * Real.cos (nStar / 4) ∧
      (5 / 2) * Real.cos (nStar / 4) ≤ (2495003 / 1000000 : ℝ) := by
  have h := cos_nStar_div4_milli
  constructor <;> nlinarith [h.1, h.2]

lemma five_halves_sin_div4 :
    (158007 / 1000000 : ℝ) ≤ (5 / 2) * Real.sin (nStar / 4) ∧
      (5 / 2) * Real.sin (nStar / 4) ≤ (158010 / 1000000 : ℝ) := by
  have h := sin_nStar_div4_tight
  constructor <;> nlinarith [h.1, h.2]

lemma uStar_x_div4 :
    (998285 / 1000000 : ℝ) ≤ (uStar (1 / 4)).ofLp 0 ∧
      (uStar (1 / 4)).ofLp 0 ≤ (998293 / 1000000 : ℝ) := by
  rw [uStar_ofLp0, nStar_mul_div4]
  have hn := five_halves_cos_div4
  have hc := cos_quarter_milli
  have hnum : (1526087 / 1000000 : ℝ) ≤
      (5 / 2) * Real.cos (nStar / 4) - Real.cos (1 / 4) ∧
      (5 / 2) * Real.cos (nStar / 4) - Real.cos (1 / 4) ≤ (1526091 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hc.1, hc.2]
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  constructor <;> nlinarith [h.1, h.2]

lemma uStar_y_div4 :
    (-58480 / 1000000 : ℝ) ≤ (uStar (1 / 4)).ofLp 1 ∧
      (uStar (1 / 4)).ofLp 1 ≤ (-58476 / 1000000 : ℝ) := by
  rw [uStar_ofLp1, nStar_mul_div4]
  have hn := five_halves_sin_div4
  have hs := sin_quarter_milli
  have hnum : (-89397 / 1000000 : ℝ) ≤
      (5 / 2) * Real.sin (nStar / 4) - Real.sin (1 / 4) ∧
      (5 / 2) * Real.sin (nStar / 4) - Real.sin (1 / 4) ≤ (-89393 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hs.1, hs.2]
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  constructor <;> nlinarith [h.1, h.2]

/-! STM columns 2–3 and remaining `uStar` intervals. -/

lemma stmCol2_x_eq (t : ℝ) :
    (stmCol 2 t).ofLp 0 =
      (2 - Real.cos (nStar * t)) * Real.sin (nStar * t) * nStar⁻¹ := by
  have hx := (stmCol2_ofLp t).1
  rw [hx]
  have hn : nStar ≠ 0 := nStar_ne
  field_simp [hn]
  ring

lemma stmCol2_y_eq (t : ℝ) :
    (stmCol 2 t).ofLp 1 =
      (Real.sin (nStar * t) ^ 2
        - 2 * (1 - Real.cos (nStar * t)) * Real.cos (nStar * t)) * nStar⁻¹ := by
  have hy := (stmCol2_ofLp t).2.1
  rw [hy]
  have hn : nStar ≠ 0 := nStar_ne
  field_simp [hn]

lemma stmCol3_x_eq (t : ℝ) :
    (stmCol 3 t).ofLp 0 =
      (2 * (1 - Real.cos (nStar * t)) * Real.cos (nStar * t)
        - (4 * Real.sin (nStar * t) - 3 * nStar * t) * Real.sin (nStar * t))
        * nStar⁻¹ := by
  have hx := (stmCol3_ofLp t).1
  rw [hx]
  have hn : nStar ≠ 0 := nStar_ne
  field_simp [hn]

lemma stmCol3_y_eq (t : ℝ) :
    (stmCol 3 t).ofLp 1 =
      (2 * (1 - Real.cos (nStar * t)) * Real.sin (nStar * t)
        + (4 * Real.sin (nStar * t) - 3 * nStar * t) * Real.cos (nStar * t))
        * nStar⁻¹ := by
  have hy := (stmCol3_ofLp t).2.1
  rw [hy]
  have hn : nStar ≠ 0 := nStar_ne
  field_simp [hn]


lemma tighten_mul {aLo aHi bLo bHi lo hi a b : ℝ}
    (h : aLo * bLo ≤ a * b ∧ a * b ≤ aHi * bHi)
    (hlo : lo ≤ aLo * bLo) (hhi : aHi * bHi ≤ hi) :
    lo ≤ a * b ∧ a * b ≤ hi :=
  ⟨hlo.trans h.1, h.2.trans hhi⟩

lemma tighten_mul_pn {aLo aHi bLo bHi lo hi a b : ℝ}
    (h : aLo * bHi ≤ a * b ∧ a * b ≤ aHi * bLo)
    (hlo : lo ≤ aLo * bHi) (hhi : aHi * bLo ≤ hi) :
    lo ≤ a * b ∧ a * b ≤ hi :=
  ⟨hlo.trans h.1, h.2.trans hhi⟩

lemma stmCol2_x_div4 :
    (250329 / 1000000 : ℝ) ≤ (stmCol 2 (1 / 4)).ofLp 0 ∧
      (stmCol 2 (1 / 4)).ofLp 0 ≤ (250339 / 1000000 : ℝ) := by
  rw [stmCol2_x_eq, nStar_mul_div4]
  have ha := two_c_mul_sin_div4
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma sin_sq_nStar_div4 :
    (3994 / 1000000 : ℝ) ≤ Real.sin (nStar / 4) ^ 2 ∧
      Real.sin (nStar / 4) ^ 2 ≤ (3995 / 1000000 : ℝ) := by
  have hb := sin_nStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_omc_mul_cos_div4 :
    (3990 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4) ∧
      2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4) ≤ (3993 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar_div4
  have hb := cos_nStar_div4_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol2_y_num_div4 :
    (1 / 1000000 : ℝ) ≤
      Real.sin (nStar / 4) ^ 2 - 2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4) ∧
      Real.sin (nStar / 4) ^ 2 - 2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4)
        ≤ (5 / 1000000 : ℝ) := by
  have ha := sin_sq_nStar_div4
  have hb := two_omc_mul_cos_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol2_y_div4 :
    (3 / 1000000 : ℝ) ≤ (stmCol 2 (1 / 4)).ofLp 1 ∧
      (stmCol 2 (1 / 4)).ofLp 1 ≤ (20 / 1000000 : ℝ) := by
  rw [stmCol2_y_eq, nStar_mul_div4]
  have ha := stmCol2_y_num_div4
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma stmCol2_x_div2 :
    (502642 / 1000000 : ℝ) ≤ (stmCol 2 (1 / 2)).ofLp 0 ∧
      (stmCol 2 (1 / 2)).ofLp 0 ≤ (502657 / 1000000 : ℝ) := by
  rw [stmCol2_x_eq, nStar_mul_div2]
  have ha := two_c_mul_sin_div2
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma sin_sq_nStar_div2 :
    (15914 / 1000000 : ℝ) ≤ Real.sin (nStar / 2) ^ 2 ∧
      Real.sin (nStar / 2) ^ 2 ≤ (15916 / 1000000 : ℝ) := by
  have hb := sin_nStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_omc_mul_cos_div2 :
    (15850 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2) ∧
      2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2) ≤ (15853 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar_div2
  have hb := cos_nStar_div2_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol2_y_num_div2 :
    (61 / 1000000 : ℝ) ≤
      Real.sin (nStar / 2) ^ 2 - 2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2) ∧
      Real.sin (nStar / 2) ^ 2 - 2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2)
        ≤ (66 / 1000000 : ℝ) := by
  have ha := sin_sq_nStar_div2
  have hb := two_omc_mul_cos_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol2_y_div2 :
    (241 / 1000000 : ℝ) ≤ (stmCol 2 (1 / 2)).ofLp 1 ∧
      (stmCol 2 (1 / 2)).ofLp 1 ≤ (261 / 1000000 : ℝ) := by
  rw [stmCol2_y_eq, nStar_mul_div2]
  have ha := stmCol2_y_num_div2
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma stmCol2_x_one :
    (1020851 / 1000000 : ℝ) ≤ (stmCol 2 1).ofLp 0 ∧
      (stmCol 2 1).ofLp 0 ≤ (1020868 / 1000000 : ℝ) := by
  rw [stmCol2_x_eq, mul_one]
  have ha := two_c_mul_sin_one
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma sin_sq_nStar :
    (62646 / 1000000 : ℝ) ≤ Real.sin nStar ^ 2 ∧
      Real.sin nStar ^ 2 ≤ (62648 / 1000000 : ℝ) := by
  have hb := sin_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hb.1 hb.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma two_omc_mul_cos_one :
    (61631 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos nStar) * Real.cos nStar ∧
      2 * (1 - Real.cos nStar) * Real.cos nStar ≤ (61634 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar
  have hb := cos_nStar_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol2_y_num_one :
    (1012 / 1000000 : ℝ) ≤
      Real.sin nStar ^ 2 - 2 * (1 - Real.cos nStar) * Real.cos nStar ∧
      Real.sin nStar ^ 2 - 2 * (1 - Real.cos nStar) * Real.cos nStar
        ≤ (1017 / 1000000 : ℝ) := by
  have ha := sin_sq_nStar
  have hb := two_omc_mul_cos_one
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol2_y_one :
    (4000 / 1000000 : ℝ) ≤ (stmCol 2 1).ofLp 1 ∧
      (stmCol 2 1).ofLp 1 ≤ (4021 / 1000000 : ℝ) := by
  rw [stmCol2_y_eq, mul_one]
  have ha := stmCol2_y_num_one
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma four_sin_nStar_div4 :
    (252812 / 1000000 : ℝ) ≤ 4 * Real.sin (nStar / 4) ∧
      4 * Real.sin (nStar / 4) ≤ (252816 / 1000000 : ℝ) := by
  have h := sin_nStar_div4_tight
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_div4 :
    (63074 / 1000000 : ℝ) ≤ 4 * Real.sin (nStar / 4) - 3 * (nStar / 4) ∧
      4 * Real.sin (nStar / 4) - 3 * (nStar / 4) ≤ (63080 / 1000000 : ℝ) := by
  have hs := four_sin_nStar_div4
  have hn := three_nStar_div4
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma tan_dv_mul_sin_div4 :
    (3986 / 1000000 : ℝ) ≤
      (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4) ∧
      (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4)
        ≤ (3987 / 1000000 : ℝ) := by
  have ha := tan_dv_div4
  have hb := sin_nStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_x_num_div4 :
    (3 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4)
        - (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4) ∧
      2 * (1 - Real.cos (nStar / 4)) * Real.cos (nStar / 4)
        - (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.sin (nStar / 4)
        ≤ (7 / 1000000 : ℝ) := by
  have ha := two_omc_mul_cos_div4
  have hb := tan_dv_mul_sin_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_x_div4 :
    (11 / 1000000 : ℝ) ≤ (stmCol 3 (1 / 4)).ofLp 0 ∧
      (stmCol 3 (1 / 4)).ofLp 0 ≤ (28 / 1000000 : ℝ) := by
  rw [stmCol3_x_eq, nStar_mul_div4, three_nStar_mul_div4]
  have ha := stmCol3_x_num_div4
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma two_omc_mul_sin_div4 :
    (252 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos (nStar / 4)) * Real.sin (nStar / 4) ∧
      2 * (1 - Real.cos (nStar / 4)) * Real.sin (nStar / 4) ≤ (253 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar_div4
  have hb := sin_nStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_mul_cos_div4 :
    (62947 / 1000000 : ℝ) ≤
      (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4) ∧
      (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4)
        ≤ (62954 / 1000000 : ℝ) := by
  have ha := tan_dv_div4
  have hb := cos_nStar_div4_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_y_num_div4 :
    (63199 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos (nStar / 4)) * Real.sin (nStar / 4)
        + (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4) ∧
      2 * (1 - Real.cos (nStar / 4)) * Real.sin (nStar / 4)
        + (4 * Real.sin (nStar / 4) - 3 * (nStar / 4)) * Real.cos (nStar / 4)
        ≤ (63207 / 1000000 : ℝ) := by
  have ha := two_omc_mul_sin_div4
  have hb := tan_dv_mul_cos_div4
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_y_div4 :
    (249815 / 1000000 : ℝ) ≤ (stmCol 3 (1 / 4)).ofLp 1 ∧
      (stmCol 3 (1 / 4)).ofLp 1 ≤ (249848 / 1000000 : ℝ) := by
  rw [stmCol3_y_eq, nStar_mul_div4, three_nStar_mul_div4]
  have ha := stmCol3_y_num_div4
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma four_sin_nStar_div2 :
    (504612 / 1000000 : ℝ) ≤ 4 * Real.sin (nStar / 2) ∧
      4 * Real.sin (nStar / 2) ≤ (504620 / 1000000 : ℝ) := by
  have h := sin_nStar_div2_tight
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_div2 :
    (125137 / 1000000 : ℝ) ≤ 4 * Real.sin (nStar / 2) - 3 * (nStar / 2) ∧
      4 * Real.sin (nStar / 2) - 3 * (nStar / 2) ≤ (125147 / 1000000 : ℝ) := by
  have hs := four_sin_nStar_div2
  have hn := three_nStar_div2
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma tan_dv_mul_sin_div2 :
    (15786 / 1000000 : ℝ) ≤
      (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2) ∧
      (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2)
        ≤ (15788 / 1000000 : ℝ) := by
  have ha := tan_dv_div2
  have hb := sin_nStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_x_num_div2 :
    (62 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2)
        - (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2) ∧
      2 * (1 - Real.cos (nStar / 2)) * Real.cos (nStar / 2)
        - (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.sin (nStar / 2)
        ≤ (67 / 1000000 : ℝ) := by
  have ha := two_omc_mul_cos_div2
  have hb := tan_dv_mul_sin_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_x_div2 :
    (245 / 1000000 : ℝ) ≤ (stmCol 3 (1 / 2)).ofLp 0 ∧
      (stmCol 3 (1 / 2)).ofLp 0 ≤ (265 / 1000000 : ℝ) := by
  rw [stmCol3_x_eq, nStar_mul_div2, three_nStar_mul_div2]
  have ha := stmCol3_x_num_div2
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma two_omc_mul_sin_div2 :
    (2015 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos (nStar / 2)) * Real.sin (nStar / 2) ∧
      2 * (1 - Real.cos (nStar / 2)) * Real.sin (nStar / 2) ≤ (2016 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar_div2
  have hb := sin_nStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_mul_cos_div2 :
    (124137 / 1000000 : ℝ) ≤
      (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2) ∧
      (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2)
        ≤ (124148 / 1000000 : ℝ) := by
  have ha := tan_dv_div2
  have hb := cos_nStar_div2_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_y_num_div2 :
    (126152 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos (nStar / 2)) * Real.sin (nStar / 2)
        + (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2) ∧
      2 * (1 - Real.cos (nStar / 2)) * Real.sin (nStar / 2)
        + (4 * Real.sin (nStar / 2) - 3 * (nStar / 2)) * Real.cos (nStar / 2)
        ≤ (126164 / 1000000 : ℝ) := by
  have ha := two_omc_mul_sin_div2
  have hb := tan_dv_mul_cos_div2
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_y_div2 :
    (498657 / 1000000 : ℝ) ≤ (stmCol 3 (1 / 2)).ofLp 1 ∧
      (stmCol 3 (1 / 2)).ofLp 1 ≤ (498708 / 1000000 : ℝ) := by
  rw [stmCol3_y_eq, nStar_mul_div2, three_nStar_mul_div2]
  have ha := stmCol3_y_num_div2
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma four_sin_nStar :
    (1001168 / 1000000 : ℝ) ≤ 4 * Real.sin nStar ∧
      4 * Real.sin nStar ≤ (1001176 / 1000000 : ℝ) := by
  have h := sin_nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_one :
    (242219 / 1000000 : ℝ) ≤ 4 * Real.sin nStar - 3 * nStar ∧
      4 * Real.sin nStar - 3 * nStar ≤ (242230 / 1000000 : ℝ) := by
  have hs := four_sin_nStar
  have hn := three_nStar
  constructor <;> nlinarith [hs.1, hs.2, hn.1, hn.2]

lemma tan_dv_mul_sin_one :
    (60625 / 1000000 : ℝ) ≤ (4 * Real.sin nStar - 3 * nStar) * Real.sin nStar ∧
      (4 * Real.sin nStar - 3 * nStar) * Real.sin nStar ≤ (60629 / 1000000 : ℝ) := by
  have ha := tan_dv_one
  have hb := sin_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_x_num_one :
    (1002 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos nStar) * Real.cos nStar
        - (4 * Real.sin nStar - 3 * nStar) * Real.sin nStar ∧
      2 * (1 - Real.cos nStar) * Real.cos nStar
        - (4 * Real.sin nStar - 3 * nStar) * Real.sin nStar
        ≤ (1009 / 1000000 : ℝ) := by
  have ha := two_omc_mul_cos_one
  have hb := tan_dv_mul_sin_one
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_x_one :
    (3960 / 1000000 : ℝ) ≤ (stmCol 3 1).ofLp 0 ∧
      (stmCol 3 1).ofLp 0 ≤ (3989 / 1000000 : ℝ) := by
  rw [stmCol3_x_eq, mul_one, mul_one]
  have ha := stmCol3_x_num_one
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma two_omc_mul_sin_one :
    (15933 / 1000000 : ℝ) ≤ 2 * (1 - Real.cos nStar) * Real.sin nStar ∧
      2 * (1 - Real.cos nStar) * Real.sin nStar ≤ (15934 / 1000000 : ℝ) := by
  have ha := one_sub_cos_nStar
  have hb := sin_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma tan_dv_mul_cos_one :
    (234509 / 1000000 : ℝ) ≤ (4 * Real.sin nStar - 3 * nStar) * Real.cos nStar ∧
      (4 * Real.sin nStar - 3 * nStar) * Real.cos nStar ≤ (234521 / 1000000 : ℝ) := by
  have ha := tan_dv_one
  have hb := cos_nStar_milli
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  constructor <;> nlinarith [h.1, h.2]

lemma stmCol3_y_num_one :
    (250442 / 1000000 : ℝ) ≤
      2 * (1 - Real.cos nStar) * Real.sin nStar
        + (4 * Real.sin nStar - 3 * nStar) * Real.cos nStar ∧
      2 * (1 - Real.cos nStar) * Real.sin nStar
        + (4 * Real.sin nStar - 3 * nStar) * Real.cos nStar
        ≤ (250455 / 1000000 : ℝ) := by
  have ha := two_omc_mul_sin_one
  have hb := tan_dv_mul_cos_one
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma stmCol3_y_one :
    (989955 / 1000000 : ℝ) ≤ (stmCol 3 1).ofLp 1 ∧
      (stmCol 3 1).ofLp 1 ≤ (990012 / 1000000 : ℝ) := by
  rw [stmCol3_y_eq, mul_one, mul_one]
  have ha := stmCol3_y_num_one
  have hb := inv_nStar_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) ha.1 ha.2 hb.1 hb.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma five_halves_cos_div2 :
    (2480025 / 1000000 : ℝ) ≤ (5 / 2) * Real.cos (nStar / 2) ∧
      (5 / 2) * Real.cos (nStar / 2) ≤ (2480028 / 1000000 : ℝ) := by
  have h := cos_nStar_div2_milli
  constructor <;> nlinarith [h.1, h.2]

lemma five_halves_sin_div2 :
    (315382 / 1000000 : ℝ) ≤ (5 / 2) * Real.sin (nStar / 2) ∧
      (5 / 2) * Real.sin (nStar / 2) ≤ (315388 / 1000000 : ℝ) := by
  have h := sin_nStar_div2_tight
  constructor <;> nlinarith [h.1, h.2]

lemma uStar_x_div2 :
    (994797 / 1000000 : ℝ) ≤ (uStar (1 / 2)).ofLp 0 ∧
      (uStar (1 / 2)).ofLp 0 ≤ (994805 / 1000000 : ℝ) := by
  rw [uStar_ofLp0, nStar_mul_div2]
  have hn := five_halves_cos_div2
  have hc := cos_half_milli
  have hnum : (1602442 / 1000000 : ℝ) ≤
      (5 / 2) * Real.cos (nStar / 2) - Real.cos (1 / 2) ∧
      (5 / 2) * Real.cos (nStar / 2) - Real.cos (1 / 2) ≤ (1602446 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hc.1, hc.2]
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma uStar_y_div2 :
    (-101840 / 1000000 : ℝ) ≤ (uStar (1 / 2)).ofLp 1 ∧
      (uStar (1 / 2)).ofLp 1 ≤ (-101834 / 1000000 : ℝ) := by
  rw [uStar_ofLp1, nStar_mul_div2]
  have hn := five_halves_sin_div2
  have hs := sin_half_milli
  have hnum : (-164044 / 1000000 : ℝ) ≤
      (5 / 2) * Real.sin (nStar / 2) - Real.sin (1 / 2) ∧
      (5 / 2) * Real.sin (nStar / 2) - Real.sin (1 / 2) ≤ (-164037 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hs.1, hs.2]
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  refine tighten_mul_pn h ?_ ?_ <;> norm_num

lemma five_halves_cos_one :
    (2420425 / 1000000 : ℝ) ≤ (5 / 2) * Real.cos nStar ∧
      (5 / 2) * Real.cos nStar ≤ (2420428 / 1000000 : ℝ) := by
  have h := cos_nStar_milli
  constructor <;> nlinarith [h.1, h.2]

lemma five_halves_sin_one :
    (625730 / 1000000 : ℝ) ≤ (5 / 2) * Real.sin nStar ∧
      (5 / 2) * Real.sin nStar ≤ (625735 / 1000000 : ℝ) := by
  have h := sin_nStar_tight
  constructor <;> nlinarith [h.1, h.2]

lemma uStar_x_one :
    (993456 / 1000000 : ℝ) ≤ (uStar 1).ofLp 0 ∧
      (uStar 1).ofLp 0 ≤ (993532 / 1000000 : ℝ) := by
  rw [uStar_ofLp0, mul_one]
  have hn := five_halves_cos_one
  have hc := cos_one_milli
  have hnum : (1880119 / 1000000 : ℝ) ≤
      (5 / 2) * Real.cos nStar - Real.cos 1 ∧
      (5 / 2) * Real.cos nStar - Real.cos 1 ≤ (1880179 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hc.1, hc.2]
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  refine tighten_mul h ?_ ?_ <;> norm_num

lemma uStar_y_one :
    (-114004 / 1000000 : ℝ) ≤ (uStar 1).ofLp 1 ∧
      (uStar 1).ofLp 1 ≤ (-113991 / 1000000 : ℝ) := by
  rw [uStar_ofLp1, mul_one]
  have hn := five_halves_sin_one
  have hs := sin_one_milli
  have hnum : (-215742 / 1000000 : ℝ) ≤
      (5 / 2) * Real.sin nStar - Real.sin 1 ∧
      (5 / 2) * Real.sin nStar - Real.sin 1 ≤ (-215730 / 1000000 : ℝ) := by
    constructor <;> nlinarith [hn.1, hn.2, hs.1, hs.2]
  have hr := inv_rhoStar_one_tight
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hnum.1 hnum.2 hr.1 hr.2
  refine tighten_mul_pn h ?_ ?_ <;> norm_num

/-! `dlosCol` intervals via `inner_uStar_stm_xy` and `ρ⁻¹` boxes. -/

lemma two_hSD1 : (2 : ℝ) * hSD1 = 1 / 2 := by unfold hSD1; norm_num
lemma two_hSD2 : (2 : ℝ) * hSD2 = 1 := by unfold hSD2; norm_num

lemma dlosCol_ofLp01 (j : Fin 4) (t : ℝ) :
    (dlosCol j t).ofLp 0 =
      (rhoStar t)⁻¹ *
        ((stmCol j t).ofLp 0 - ⟪uStar t, stmCol j t⟫ * (uStar t).ofLp 0) ∧
    (dlosCol j t).ofLp 1 =
      (rhoStar t)⁻¹ *
        ((stmCol j t).ofLp 1 - ⟪uStar t, stmCol j t⟫ * (uStar t).ofLp 1) :=
  dlosSTM_ofLp01 t (stmCol j t)

lemma inner_uStar_stmCol0_div4 :
    (1002267 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ ∧
      ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ ≤ (1002280 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div4
  have huy := uStar_y_div4
  have hdx := stmCol0_x_div4
  have hdy := stmCol0_y_div4
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol0_div2 :
    (1010586 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ ∧
      ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ ≤ (1010602 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div2
  have huy := uStar_y_div2
  have hdx := stmCol0_x_div2
  have hdy := stmCol0_y_div2
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol0_one :
    (1055761 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 0 1⟫ ∧
      ⟪uStar 1, stmCol 0 1⟫ ≤ (1055852 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_one
  have huy := uStar_y_one
  have hdx := stmCol0_x_one
  have hdy := stmCol0_y_one
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol1_div4 :
    (-58238 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ ∧
      ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ ≤ (-58232 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div4
  have huy := uStar_y_div4
  have hdx := stmCol1_x_div4
  have hdy := stmCol1_y_div4
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol1_div2 :
    (-100032 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ ∧
      ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ ≤ (-100023 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div2
  have huy := uStar_y_div2
  have hdx := stmCol1_x_div2
  have hdy := stmCol1_y_div2
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol1_one :
    (-102578 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 1 1⟫ ∧
      ⟪uStar 1, stmCol 1 1⟫ ≤ (-102562 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_one
  have huy := uStar_y_one
  have hdx := stmCol1_x_one
  have hdy := stmCol1_y_one
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol2_div4 :
    (249898 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ ∧
      ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ ≤ (249912 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div4
  have huy := uStar_y_div4
  have hdx := stmCol2_x_div4
  have hdy := stmCol2_y_div4
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol2_div2 :
    (500000 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ ∧
      ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ ≤ (500022 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div2
  have huy := uStar_y_div2
  have hdx := stmCol2_x_div2
  have hdy := stmCol2_y_div2
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol2_one :
    (1013712 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 2 1⟫ ∧
      ⟪uStar 1, stmCol 2 1⟫ ≤ (1013810 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_one
  have huy := uStar_y_one
  have hdx := stmCol2_x_one
  have hdy := stmCol2_y_one
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol3_div4 :
    (-14601 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ ∧
      ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ ≤ (-14580 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div4
  have huy := uStar_y_div4
  have hdx := stmCol3_x_div4
  have hdy := stmCol3_y_div4
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol3_div2 :
    (-50545 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ ∧
      ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ ≤ (-50516 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_div2
  have huy := uStar_y_div2
  have hdx := stmCol3_x_div2
  have hdy := stmCol3_y_div2
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inner_uStar_stmCol3_one :
    (-108932 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 3 1⟫ ∧
      ⟪uStar 1, stmCol 3 1⟫ ≤ (-108882 / 1000000 : ℝ) := by
  rw [inner_uStar_stm_xy]
  have hux := uStar_x_one
  have huy := uStar_y_one
  have hdx := stmCol3_x_one
  have hdy := stmCol3_y_one
  have h0 := mul_nonneg_bounds (by norm_num) (by norm_num) hux.1 hux.2 hdx.1 hdx.2
  have h1 := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) huy.1 huy.2 hdy.1 hdy.2
  constructor <;> nlinarith [h0.1, h0.2, h1.1, h1.2]

lemma inn_ux_stmCol0_div4 :
    (1000548 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ≤ (1000570 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_div4
  have hux := uStar_x_div4
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol0_div4 :
    (-58614 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ≤ (-58608 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_div4
  have huy := uStar_y_div4
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol0_div4 :
    (3427 / 1000000 : ℝ) ≤
      (stmCol 0 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      (stmCol 0 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0
        ≤ (3453 / 1000000 : ℝ) := by
  have hdx := stmCol0_x_div4
  have hm := inn_ux_stmCol0_div4
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol0_div4 :
    (58731 / 1000000 : ℝ) ≤
      (stmCol 0 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      (stmCol 0 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 0 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1
        ≤ (58744 / 1000000 : ℝ) := by
  have hdy := stmCol0_y_div4
  have hm := inn_uy_stmCol0_div4
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol0_x_div4 :
    (2241 / 1000000 : ℝ) ≤ (dlosCol 0 (1 / 4)).ofLp 0 ∧
      (dlosCol 0 (1 / 4)).ofLp 0 ≤ (2259 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 (1 / 4)).1]
  have hp := proj_x_stmCol0_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol0_y_div4 :
    (38418 / 1000000 : ℝ) ≤ (dlosCol 0 (1 / 4)).ofLp 1 ∧
      (dlosCol 0 (1 / 4)).ofLp 1 ≤ (38428 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 (1 / 4)).2]
  have hp := proj_y_stmCol0_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol0_div2 :
    (1005327 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ≤ (1005352 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_div2
  have hux := uStar_x_div2
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol0_div2 :
    (-102920 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ≤ (-102912 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_div2
  have huy := uStar_y_div2
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol0_div2 :
    (10624 / 1000000 : ℝ) ≤
      (stmCol 0 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      (stmCol 0 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0
        ≤ (10655 / 1000000 : ℝ) := by
  have hdx := stmCol0_x_div2
  have hm := inn_ux_stmCol0_div2
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol0_div2 :
    (103918 / 1000000 : ℝ) ≤
      (stmCol 0 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      (stmCol 0 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 0 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1
        ≤ (103937 / 1000000 : ℝ) := by
  have hdy := stmCol0_y_div2
  have hm := inn_uy_stmCol0_div2
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol0_x_div2 :
    (6595 / 1000000 : ℝ) ≤ (dlosCol 0 (1 / 2)).ofLp 0 ∧
      (dlosCol 0 (1 / 2)).ofLp 0 ≤ (6615 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 (1 / 2)).1]
  have hp := proj_x_stmCol0_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol0_y_div2 :
    (64512 / 1000000 : ℝ) ≤ (dlosCol 0 (1 / 2)).ofLp 1 ∧
      (dlosCol 0 (1 / 2)).ofLp 1 ≤ (64525 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 (1 / 2)).2]
  have hp := proj_y_stmCol0_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol0_one :
    (1048852 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 0 ∧
      ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 0 ≤ (1049023 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_one
  have hux := uStar_x_one
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol0_one :
    (-120372 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 1 ∧
      ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 1 ≤ (-120347 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol0_one
  have huy := uStar_y_one
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol0_one :
    (14626 / 1000000 : ℝ) ≤
      (stmCol 0 1).ofLp 0
        - ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 0 ∧
      (stmCol 0 1).ofLp 0
        - ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 0
        ≤ (14804 / 1000000 : ℝ) := by
  have hdx := stmCol0_x_one
  have hm := inn_ux_stmCol0_one
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol0_one :
    (128463 / 1000000 : ℝ) ≤
      (stmCol 0 1).ofLp 1
        - ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 1 ∧
      (stmCol 0 1).ofLp 1
        - ⟪uStar 1, stmCol 0 1⟫ * (uStar 1).ofLp 1
        ≤ (128499 / 1000000 : ℝ) := by
  have hdy := stmCol0_y_one
  have hm := inn_uy_stmCol0_one
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol0_x_one :
    (7728 / 1000000 : ℝ) ≤ (dlosCol 0 1).ofLp 0 ∧
      (dlosCol 0 1).ofLp 0 ≤ (7823 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 1).1]
  have hp := proj_x_stmCol0_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol0_y_one :
    (67879 / 1000000 : ℝ) ≤ (dlosCol 0 1).ofLp 1 ∧
      (dlosCol 0 1).ofLp 1 ≤ (67902 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 0 1).2]
  have hp := proj_y_stmCol0_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol1_div4 :
    (-58139 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ≤ (-58132 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_div4
  have hux := uStar_x_div4
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol1_div4 :
    (3405 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ≤ (3406 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_div4
  have huy := uStar_y_div4
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol1_div4 :
    (58258 / 1000000 : ℝ) ≤
      (stmCol 1 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      (stmCol 1 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0
        ≤ (58266 / 1000000 : ℝ) := by
  have hdx := stmCol1_x_div4
  have hm := inn_ux_stmCol1_div4
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol1_div4 :
    (994597 / 1000000 : ℝ) ≤
      (stmCol 1 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      (stmCol 1 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 1 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1
        ≤ (994601 / 1000000 : ℝ) := by
  have hdy := stmCol1_y_div4
  have hm := inn_uy_stmCol1_div4
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol1_x_div4 :
    (38109 / 1000000 : ℝ) ≤ (dlosCol 1 (1 / 4)).ofLp 0 ∧
      (dlosCol 1 (1 / 4)).ofLp 0 ≤ (38115 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 (1 / 4)).1]
  have hp := proj_x_stmCol1_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol1_y_div4 :
    (650612 / 1000000 : ℝ) ≤ (dlosCol 1 (1 / 4)).ofLp 1 ∧
      (dlosCol 1 (1 / 4)).ofLp 1 ≤ (650619 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 (1 / 4)).2]
  have hp := proj_y_stmCol1_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol1_div2 :
    (-99513 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ≤ (-99502 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_div2
  have hux := uStar_x_div2
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol1_div2 :
    (10185 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ≤ (10188 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_div2
  have huy := uStar_y_div2
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol1_div2 :
    (100509 / 1000000 : ℝ) ≤
      (stmCol 1 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      (stmCol 1 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0
        ≤ (100521 / 1000000 : ℝ) := by
  have hdx := stmCol1_x_div2
  have hm := inn_ux_stmCol1_div2
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol1_div2 :
    (981884 / 1000000 : ℝ) ≤
      (stmCol 1 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      (stmCol 1 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 1 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1
        ≤ (981891 / 1000000 : ℝ) := by
  have hdy := stmCol1_y_div2
  have hm := inn_uy_stmCol1_div2
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol1_x_div2 :
    (62396 / 1000000 : ℝ) ≤ (dlosCol 1 (1 / 2)).ofLp 0 ∧
      (dlosCol 1 (1 / 2)).ofLp 0 ≤ (62404 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 (1 / 2)).1]
  have hp := proj_x_stmCol1_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol1_y_div2 :
    (609554 / 1000000 : ℝ) ≤ (dlosCol 1 (1 / 2)).ofLp 1 ∧
      (dlosCol 1 (1 / 2)).ofLp 1 ≤ (609562 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 (1 / 2)).2]
  have hp := proj_y_stmCol1_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol1_one :
    (-101915 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 0 ∧
      ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 0 ≤ (-101890 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_one
  have hux := uStar_x_one
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol1_one :
    (11691 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 1 ∧
      ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 1 ≤ (11695 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol1_one
  have huy := uStar_y_one
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol1_one :
    (109856 / 1000000 : ℝ) ≤
      (stmCol 1 1).ofLp 0
        - ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 0 ∧
      (stmCol 1 1).ofLp 0
        - ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 0
        ≤ (109882 / 1000000 : ℝ) := by
  have hdx := stmCol1_x_one
  have hm := inn_ux_stmCol1_one
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol1_one :
    (957487 / 1000000 : ℝ) ≤
      (stmCol 1 1).ofLp 1
        - ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 1 ∧
      (stmCol 1 1).ofLp 1
        - ⟪uStar 1, stmCol 1 1⟫ * (uStar 1).ofLp 1
        ≤ (957495 / 1000000 : ℝ) := by
  have hdy := stmCol1_y_one
  have hm := inn_uy_stmCol1_one
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol1_x_one :
    (58048 / 1000000 : ℝ) ≤ (dlosCol 1 1).ofLp 0 ∧
      (dlosCol 1 1).ofLp 0 ≤ (58065 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 1).1]
  have hp := proj_x_stmCol1_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol1_y_one :
    (505937 / 1000000 : ℝ) ≤ (dlosCol 1 1).ofLp 1 ∧
      (dlosCol 1 1).ofLp 1 ≤ (505964 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 1 1).2]
  have hp := proj_y_stmCol1_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol2_div4 :
    (249469 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ≤ (249486 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_div4
  have hux := uStar_x_div4
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol2_div4 :
    (-14615 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ≤ (-14613 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_div4
  have huy := uStar_y_div4
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol2_div4 :
    (843 / 1000000 : ℝ) ≤
      (stmCol 2 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      (stmCol 2 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0
        ≤ (870 / 1000000 : ℝ) := by
  have hdx := stmCol2_x_div4
  have hm := inn_ux_stmCol2_div4
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol2_div4 :
    (14616 / 1000000 : ℝ) ≤
      (stmCol 2 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      (stmCol 2 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 2 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1
        ≤ (14635 / 1000000 : ℝ) := by
  have hdy := stmCol2_y_div4
  have hm := inn_uy_stmCol2_div4
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol2_x_div4 :
    (551 / 1000000 : ℝ) ≤ (dlosCol 2 (1 / 4)).ofLp 0 ∧
      (dlosCol 2 (1 / 4)).ofLp 0 ≤ (570 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 (1 / 4)).1]
  have hp := proj_x_stmCol2_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol2_y_div4 :
    (9561 / 1000000 : ℝ) ≤ (dlosCol 2 (1 / 4)).ofLp 1 ∧
      (dlosCol 2 (1 / 4)).ofLp 1 ≤ (9574 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 (1 / 4)).2]
  have hp := proj_y_stmCol2_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol2_div2 :
    (497398 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ≤ (497425 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_div2
  have hux := uStar_x_div2
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol2_div2 :
    (-50923 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ≤ (-50917 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_div2
  have huy := uStar_y_div2
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol2_div2 :
    (5217 / 1000000 : ℝ) ≤
      (stmCol 2 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      (stmCol 2 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0
        ≤ (5259 / 1000000 : ℝ) := by
  have hdx := stmCol2_x_div2
  have hm := inn_ux_stmCol2_div2
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol2_div2 :
    (51158 / 1000000 : ℝ) ≤
      (stmCol 2 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      (stmCol 2 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 2 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1
        ≤ (51184 / 1000000 : ℝ) := by
  have hdy := stmCol2_y_div2
  have hm := inn_uy_stmCol2_div2
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol2_x_div2 :
    (3238 / 1000000 : ℝ) ≤ (dlosCol 2 (1 / 2)).ofLp 0 ∧
      (dlosCol 2 (1 / 2)).ofLp 0 ≤ (3265 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 (1 / 2)).1]
  have hp := proj_x_stmCol2_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol2_y_div2 :
    (31758 / 1000000 : ℝ) ≤ (dlosCol 2 (1 / 2)).ofLp 1 ∧
      (dlosCol 2 (1 / 2)).ofLp 1 ≤ (31776 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 (1 / 2)).2]
  have hp := proj_y_stmCol2_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol2_one :
    (1007078 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 0 ∧
      ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 0 ≤ (1007253 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_one
  have hux := uStar_x_one
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol2_one :
    (-115579 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 1 ∧
      ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 1 ≤ (-115554 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol2_one
  have huy := uStar_y_one
  have h := mul_nonneg_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol2_one :
    (13598 / 1000000 : ℝ) ≤
      (stmCol 2 1).ofLp 0
        - ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 0 ∧
      (stmCol 2 1).ofLp 0
        - ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 0
        ≤ (13790 / 1000000 : ℝ) := by
  have hdx := stmCol2_x_one
  have hm := inn_ux_stmCol2_one
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol2_one :
    (119554 / 1000000 : ℝ) ≤
      (stmCol 2 1).ofLp 1
        - ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 1 ∧
      (stmCol 2 1).ofLp 1
        - ⟪uStar 1, stmCol 2 1⟫ * (uStar 1).ofLp 1
        ≤ (119600 / 1000000 : ℝ) := by
  have hdy := stmCol2_y_one
  have hm := inn_uy_stmCol2_one
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol2_x_one :
    (7185 / 1000000 : ℝ) ≤ (dlosCol 2 1).ofLp 0 ∧
      (dlosCol 2 1).ofLp 0 ≤ (7287 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 1).1]
  have hp := proj_x_stmCol2_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol2_y_one :
    (63172 / 1000000 : ℝ) ≤ (dlosCol 2 1).ofLp 1 ∧
      (dlosCol 2 1).ofLp 1 ≤ (63200 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 2 1).2]
  have hp := proj_y_stmCol2_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol3_div4 :
    (-14577 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ≤ (-14554 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_div4
  have hux := uStar_x_div4
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol3_div4 :
    (852 / 1000000 : ℝ) ≤ ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ≤ (854 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_div4
  have huy := uStar_y_div4
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol3_div4 :
    (14565 / 1000000 : ℝ) ≤
      (stmCol 3 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0 ∧
      (stmCol 3 (1 / 4)).ofLp 0
        - ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 0
        ≤ (14605 / 1000000 : ℝ) := by
  have hdx := stmCol3_x_div4
  have hm := inn_ux_stmCol3_div4
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol3_div4 :
    (248961 / 1000000 : ℝ) ≤
      (stmCol 3 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1 ∧
      (stmCol 3 (1 / 4)).ofLp 1
        - ⟪uStar (1 / 4), stmCol 3 (1 / 4)⟫ * (uStar (1 / 4)).ofLp 1
        ≤ (248996 / 1000000 : ℝ) := by
  have hdy := stmCol3_y_div4
  have hm := inn_uy_stmCol3_div4
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol3_x_div4 :
    (9527 / 1000000 : ℝ) ≤ (dlosCol 3 (1 / 4)).ofLp 0 ∧
      (dlosCol 3 (1 / 4)).ofLp 0 ≤ (9554 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 (1 / 4)).1]
  have hp := proj_x_stmCol3_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol3_y_div4 :
    (162857 / 1000000 : ℝ) ≤ (dlosCol 3 (1 / 4)).ofLp 1 ∧
      (dlosCol 3 (1 / 4)).ofLp 1 ≤ (162881 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 (1 / 4)).2]
  have hp := proj_y_stmCol3_div4
  have hr := inv_rhoStar_div4_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol3_div2 :
    (-50283 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ≤ (-50253 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_div2
  have hux := uStar_x_div2
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol3_div2 :
    (5144 / 1000000 : ℝ) ≤ ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ≤ (5148 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_div2
  have huy := uStar_y_div2
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol3_div2 :
    (50498 / 1000000 : ℝ) ≤
      (stmCol 3 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0 ∧
      (stmCol 3 (1 / 2)).ofLp 0
        - ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 0
        ≤ (50548 / 1000000 : ℝ) := by
  have hdx := stmCol3_x_div2
  have hm := inn_ux_stmCol3_div2
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol3_div2 :
    (493509 / 1000000 : ℝ) ≤
      (stmCol 3 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1 ∧
      (stmCol 3 (1 / 2)).ofLp 1
        - ⟪uStar (1 / 2), stmCol 3 (1 / 2)⟫ * (uStar (1 / 2)).ofLp 1
        ≤ (493564 / 1000000 : ℝ) := by
  have hdy := stmCol3_y_div2
  have hm := inn_uy_stmCol3_div2
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol3_x_div2 :
    (31349 / 1000000 : ℝ) ≤ (dlosCol 3 (1 / 2)).ofLp 0 ∧
      (dlosCol 3 (1 / 2)).ofLp 0 ≤ (31381 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 (1 / 2)).1]
  have hp := proj_x_stmCol3_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol3_y_div2 :
    (306370 / 1000000 : ℝ) ≤ (dlosCol 3 (1 / 2)).ofLp 1 ∧
      (dlosCol 3 (1 / 2)).ofLp 1 ≤ (306407 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 (1 / 2)).2]
  have hp := proj_y_stmCol3_div2
  have hr := inv_rhoStar_div2_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_ux_stmCol3_one :
    (-108228 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 0 ∧
      ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 0 ≤ (-108169 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_one
  have hux := uStar_x_one
  have h := mul_nonpos_nonneg_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 hux.1 hux.2
  constructor <;> nlinarith [h.1, h.2]

lemma inn_uy_stmCol3_one :
    (12411 / 1000000 : ℝ) ≤ ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 1 ∧
      ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 1 ≤ (12419 / 1000000 : ℝ) := by
  have hinn := inner_uStar_stmCol3_one
  have huy := uStar_y_one
  have h := mul_nonpos_nonpos_bounds (by norm_num) (by norm_num) hinn.1 hinn.2 huy.1 huy.2
  constructor <;> nlinarith [h.1, h.2]

lemma proj_x_stmCol3_one :
    (112129 / 1000000 : ℝ) ≤
      (stmCol 3 1).ofLp 0
        - ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 0 ∧
      (stmCol 3 1).ofLp 0
        - ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 0
        ≤ (112217 / 1000000 : ℝ) := by
  have hdx := stmCol3_x_one
  have hm := inn_ux_stmCol3_one
  constructor <;> nlinarith [hdx.1, hdx.2, hm.1, hm.2]

lemma proj_y_stmCol3_one :
    (977536 / 1000000 : ℝ) ≤
      (stmCol 3 1).ofLp 1
        - ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 1 ∧
      (stmCol 3 1).ofLp 1
        - ⟪uStar 1, stmCol 3 1⟫ * (uStar 1).ofLp 1
        ≤ (977601 / 1000000 : ℝ) := by
  have hdy := stmCol3_y_one
  have hm := inn_uy_stmCol3_one
  constructor <;> nlinarith [hdy.1, hdy.2, hm.1, hm.2]

lemma dlosCol3_x_one :
    (59249 / 1000000 : ℝ) ≤ (dlosCol 3 1).ofLp 0 ∧
      (dlosCol 3 1).ofLp 0 ≤ (59299 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 1).1]
  have hp := proj_x_stmCol3_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma dlosCol3_y_one :
    (516530 / 1000000 : ℝ) ≤ (dlosCol 3 1).ofLp 1 ∧
      (dlosCol 3 1).ofLp 1 ≤ (516588 / 1000000 : ℝ) := by
  rw [(dlosCol_ofLp01 3 1).2]
  have hp := proj_y_stmCol3_one
  have hr := inv_rhoStar_one_tight
  have h := mul_nonneg_bounds (by norm_num) (by norm_num) hr.1 hr.2 hp.1 hp.2
  constructor <;> nlinarith [h.1, h.2]

lemma xyBlkSTM_00_eq :
    xyBlkSTM 0 0 = (dlosCol 0 0).ofLp 0 - 2 * (dlosCol 0 (1 / 4)).ofLp 0 + (dlosCol 0 (1 / 2)).ofLp 0 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_10_eq :
    xyBlkSTM 1 0 = (dlosCol 0 0).ofLp 1 - 2 * (dlosCol 0 (1 / 4)).ofLp 1 + (dlosCol 0 (1 / 2)).ofLp 1 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_20_eq :
    xyBlkSTM 2 0 = (dlosCol 0 0).ofLp 0 - 2 * (dlosCol 0 (1 / 2)).ofLp 0 + (dlosCol 0 1).ofLp 0 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_30_eq :
    xyBlkSTM 3 0 = (dlosCol 0 0).ofLp 1 - 2 * (dlosCol 0 (1 / 2)).ofLp 1 + (dlosCol 0 1).ofLp 1 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_01_eq :
    xyBlkSTM 0 1 = (dlosCol 1 0).ofLp 0 - 2 * (dlosCol 1 (1 / 4)).ofLp 0 + (dlosCol 1 (1 / 2)).ofLp 0 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_11_eq :
    xyBlkSTM 1 1 = (dlosCol 1 0).ofLp 1 - 2 * (dlosCol 1 (1 / 4)).ofLp 1 + (dlosCol 1 (1 / 2)).ofLp 1 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_21_eq :
    xyBlkSTM 2 1 = (dlosCol 1 0).ofLp 0 - 2 * (dlosCol 1 (1 / 2)).ofLp 0 + (dlosCol 1 1).ofLp 0 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_31_eq :
    xyBlkSTM 3 1 = (dlosCol 1 0).ofLp 1 - 2 * (dlosCol 1 (1 / 2)).ofLp 1 + (dlosCol 1 1).ofLp 1 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_02_eq :
    xyBlkSTM 0 2 = (dlosCol 2 0).ofLp 0 - 2 * (dlosCol 2 (1 / 4)).ofLp 0 + (dlosCol 2 (1 / 2)).ofLp 0 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_12_eq :
    xyBlkSTM 1 2 = (dlosCol 2 0).ofLp 1 - 2 * (dlosCol 2 (1 / 4)).ofLp 1 + (dlosCol 2 (1 / 2)).ofLp 1 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_22_eq :
    xyBlkSTM 2 2 = (dlosCol 2 0).ofLp 0 - 2 * (dlosCol 2 (1 / 2)).ofLp 0 + (dlosCol 2 1).ofLp 0 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_32_eq :
    xyBlkSTM 3 2 = (dlosCol 2 0).ofLp 1 - 2 * (dlosCol 2 (1 / 2)).ofLp 1 + (dlosCol 2 1).ofLp 1 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_03_eq :
    xyBlkSTM 0 3 = (dlosCol 3 0).ofLp 0 - 2 * (dlosCol 3 (1 / 4)).ofLp 0 + (dlosCol 3 (1 / 2)).ofLp 0 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_13_eq :
    xyBlkSTM 1 3 = (dlosCol 3 0).ofLp 1 - 2 * (dlosCol 3 (1 / 4)).ofLp 1 + (dlosCol 3 (1 / 2)).ofLp 1 := by
  have ht : (2 : ℝ) * (4 : ℝ)⁻¹ = (2 : ℝ)⁻¹ := by norm_num
  rw [xyBlkSTM_apply]
  simp [hSD1, sdPairCoord, inPlaneOut, secondDiff_dlosCol]
  rw [ht]

lemma xyBlkSTM_23_eq :
    xyBlkSTM 2 3 = (dlosCol 3 0).ofLp 0 - 2 * (dlosCol 3 (1 / 2)).ofLp 0 + (dlosCol 3 1).ofLp 0 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_33_eq :
    xyBlkSTM 3 3 = (dlosCol 3 0).ofLp 1 - 2 * (dlosCol 3 (1 / 2)).ofLp 1 + (dlosCol 3 1).ofLp 1 := by
  rw [xyBlkSTM_apply]
  simp [hSD2, sdPairCoord, inPlaneOut, secondDiff_dlosCol,
    ofLp_add, ofLp_sub, ofLp_smul]

lemma xyBlkSTM_00 :
    (2077 / 1000000 : ℝ) ≤ xyBlkSTM 0 0 ∧ xyBlkSTM 0 0 ≤ (2133 / 1000000 : ℝ) := by
  rw [xyBlkSTM_00_eq]
  have hz : (dlosCol 0 0).ofLp 0 = 0 := by simpa using dlosCol0_zero_ofLp 0
  have ha := dlosCol0_x_div4
  have hb := dlosCol0_x_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_10 :
    (-12344 / 1000000 : ℝ) ≤ xyBlkSTM 1 0 ∧ xyBlkSTM 1 0 ≤ (-12311 / 1000000 : ℝ) := by
  rw [xyBlkSTM_10_eq]
  have hz : (dlosCol 0 0).ofLp 1 = 0 := by simpa using dlosCol0_zero_ofLp 1
  have ha := dlosCol0_y_div4
  have hb := dlosCol0_y_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_20 :
    (-5502 / 1000000 : ℝ) ≤ xyBlkSTM 2 0 ∧ xyBlkSTM 2 0 ≤ (-5367 / 1000000 : ℝ) := by
  rw [xyBlkSTM_20_eq]
  have hz : (dlosCol 0 0).ofLp 0 = 0 := by simpa using dlosCol0_zero_ofLp 0
  have ha := dlosCol0_x_div2
  have hb := dlosCol0_x_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_30 :
    (-61171 / 1000000 : ℝ) ≤ xyBlkSTM 3 0 ∧ xyBlkSTM 3 0 ≤ (-61122 / 1000000 : ℝ) := by
  rw [xyBlkSTM_30_eq]
  have hz : (dlosCol 0 0).ofLp 1 = 0 := by simpa using dlosCol0_zero_ofLp 1
  have ha := dlosCol0_y_div2
  have hb := dlosCol0_y_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_01 :
    (-13834 / 1000000 : ℝ) ≤ xyBlkSTM 0 1 ∧ xyBlkSTM 0 1 ≤ (-13814 / 1000000 : ℝ) := by
  rw [xyBlkSTM_01_eq]
  have hz : (dlosCol 1 0).ofLp 0 = 0 := dlosCol1_zero_ofLp.1
  have ha := dlosCol1_x_div4
  have hb := dlosCol1_x_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_11 :
    (-25018 / 1000000 : ℝ) ≤ xyBlkSTM 1 1 ∧ xyBlkSTM 1 1 ≤ (-24995 / 1000000 : ℝ) := by
  rw [xyBlkSTM_11_eq]
  have hz : (dlosCol 1 0).ofLp 1 = (2 / 3 : ℝ) := dlosCol1_zero_ofLp.2.1
  have ha := dlosCol1_y_div4
  have hb := dlosCol1_y_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_21 :
    (-66760 / 1000000 : ℝ) ≤ xyBlkSTM 2 1 ∧ xyBlkSTM 2 1 ≤ (-66727 / 1000000 : ℝ) := by
  rw [xyBlkSTM_21_eq]
  have hz : (dlosCol 1 0).ofLp 0 = 0 := dlosCol1_zero_ofLp.1
  have ha := dlosCol1_x_div2
  have hb := dlosCol1_x_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_31 :
    (-46521 / 1000000 : ℝ) ≤ xyBlkSTM 3 1 ∧ xyBlkSTM 3 1 ≤ (-46477 / 1000000 : ℝ) := by
  rw [xyBlkSTM_31_eq]
  have hz : (dlosCol 1 0).ofLp 1 = (2 / 3 : ℝ) := dlosCol1_zero_ofLp.2.1
  have ha := dlosCol1_y_div2
  have hb := dlosCol1_y_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_02 :
    (2098 / 1000000 : ℝ) ≤ xyBlkSTM 0 2 ∧ xyBlkSTM 0 2 ≤ (2163 / 1000000 : ℝ) := by
  rw [xyBlkSTM_02_eq]
  have hz : (dlosCol 2 0).ofLp 0 = 0 := by simp [dlosCol2_zero, PiLp.zero_apply]
  have ha := dlosCol2_x_div4
  have hb := dlosCol2_x_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_12 :
    (12610 / 1000000 : ℝ) ≤ xyBlkSTM 1 2 ∧ xyBlkSTM 1 2 ≤ (12654 / 1000000 : ℝ) := by
  rw [xyBlkSTM_12_eq]
  have hz : (dlosCol 2 0).ofLp 1 = 0 := by simp [dlosCol2_zero, PiLp.zero_apply]
  have ha := dlosCol2_y_div4
  have hb := dlosCol2_y_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_22 :
    (655 / 1000000 : ℝ) ≤ xyBlkSTM 2 2 ∧ xyBlkSTM 2 2 ≤ (811 / 1000000 : ℝ) := by
  rw [xyBlkSTM_22_eq]
  have hz : (dlosCol 2 0).ofLp 0 = 0 := by simp [dlosCol2_zero, PiLp.zero_apply]
  have ha := dlosCol2_x_div2
  have hb := dlosCol2_x_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_32 :
    (-380 / 1000000 : ℝ) ≤ xyBlkSTM 3 2 ∧ xyBlkSTM 3 2 ≤ (-316 / 1000000 : ℝ) := by
  rw [xyBlkSTM_32_eq]
  have hz : (dlosCol 2 0).ofLp 1 = 0 := by simp [dlosCol2_zero, PiLp.zero_apply]
  have ha := dlosCol2_y_div2
  have hb := dlosCol2_y_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_03 :
    (12241 / 1000000 : ℝ) ≤ xyBlkSTM 0 3 ∧ xyBlkSTM 0 3 ≤ (12327 / 1000000 : ℝ) := by
  rw [xyBlkSTM_03_eq]
  have hz : (dlosCol 3 0).ofLp 0 = 0 := by simp [dlosCol3_zero, PiLp.zero_apply]
  have ha := dlosCol3_x_div4
  have hb := dlosCol3_x_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_13 :
    (-19392 / 1000000 : ℝ) ≤ xyBlkSTM 1 3 ∧ xyBlkSTM 1 3 ≤ (-19307 / 1000000 : ℝ) := by
  rw [xyBlkSTM_13_eq]
  have hz : (dlosCol 3 0).ofLp 1 = 0 := by simp [dlosCol3_zero, PiLp.zero_apply]
  have ha := dlosCol3_y_div4
  have hb := dlosCol3_y_div2
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_23 :
    (-3513 / 1000000 : ℝ) ≤ xyBlkSTM 2 3 ∧ xyBlkSTM 2 3 ≤ (-3399 / 1000000 : ℝ) := by
  rw [xyBlkSTM_23_eq]
  have hz : (dlosCol 3 0).ofLp 0 = 0 := by simp [dlosCol3_zero, PiLp.zero_apply]
  have ha := dlosCol3_x_div2
  have hb := dlosCol3_x_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma xyBlkSTM_33 :
    (-96284 / 1000000 : ℝ) ≤ xyBlkSTM 3 3 ∧ xyBlkSTM 3 3 ≤ (-96152 / 1000000 : ℝ) := by
  rw [xyBlkSTM_33_eq]
  have hz : (dlosCol 3 0).ofLp 1 = 0 := by simp [dlosCol3_zero, PiLp.zero_apply]
  have ha := dlosCol3_y_div2
  have hb := dlosCol3_y_one
  rw [hz]
  constructor <;> nlinarith [ha.1, ha.2, hb.1, hb.2]

lemma det_fin_four (A : Matrix (Fin 4) (Fin 4) ℝ) :
    det A =
      A 0 0 * A 1 1 * A 2 2 * A 3 3
    - A 0 0 * A 1 1 * A 2 3 * A 3 2
    - A 0 0 * A 1 2 * A 2 1 * A 3 3
    + A 0 0 * A 1 2 * A 2 3 * A 3 1
    + A 0 0 * A 1 3 * A 2 1 * A 3 2
    - A 0 0 * A 1 3 * A 2 2 * A 3 1
    - A 0 1 * A 1 0 * A 2 2 * A 3 3
    + A 0 1 * A 1 0 * A 2 3 * A 3 2
    + A 0 1 * A 1 2 * A 2 0 * A 3 3
    - A 0 1 * A 1 2 * A 2 3 * A 3 0
    - A 0 1 * A 1 3 * A 2 0 * A 3 2
    + A 0 1 * A 1 3 * A 2 2 * A 3 0
    + A 0 2 * A 1 0 * A 2 1 * A 3 3
    - A 0 2 * A 1 0 * A 2 3 * A 3 1
    - A 0 2 * A 1 1 * A 2 0 * A 3 3
    + A 0 2 * A 1 1 * A 2 3 * A 3 0
    + A 0 2 * A 1 3 * A 2 0 * A 3 1
    - A 0 2 * A 1 3 * A 2 1 * A 3 0
    - A 0 3 * A 1 0 * A 2 1 * A 3 2
    + A 0 3 * A 1 0 * A 2 2 * A 3 1
    + A 0 3 * A 1 1 * A 2 0 * A 3 2
    - A 0 3 * A 1 1 * A 2 2 * A 3 0
    - A 0 3 * A 1 2 * A 2 0 * A 3 1
    + A 0 3 * A 1 2 * A 2 1 * A 3 0 := by
  rw [Matrix.det_succ_row_zero]
  simp [Fin.sum_univ_four, Matrix.submatrix_apply, pow_zero, pow_succ]
  rw [Matrix.det_fin_three, Matrix.det_fin_three, Matrix.det_fin_three,
    Matrix.det_fin_three]
  simp [Matrix.submatrix_apply, Fin.succ_zero_eq_one, Fin.succ_one_eq_two]
  -- succAbove on Fin 4
  have h00 : (0 : Fin 4).succAbove 0 = 1 := rfl
  have h01 : (0 : Fin 4).succAbove 1 = 2 := rfl
  have h02 : (0 : Fin 4).succAbove 2 = 3 := rfl
  have h10 : (1 : Fin 4).succAbove 0 = 0 := rfl
  have h11 : (1 : Fin 4).succAbove 1 = 2 := rfl
  have h12 : (1 : Fin 4).succAbove 2 = 3 := rfl
  have h20 : (2 : Fin 4).succAbove 0 = 0 := rfl
  have h21 : (2 : Fin 4).succAbove 1 = 1 := rfl
  have h22 : (2 : Fin 4).succAbove 2 = 3 := rfl
  have h30 : (3 : Fin 4).succAbove 0 = 0 := rfl
  have h31 : (3 : Fin 4).succAbove 1 = 1 := rfl
  have h32 : (3 : Fin 4).succAbove 2 = 2 := rfl
  have hs0 : (0 : Fin 3).succ = 1 := rfl
  have hs1 : (1 : Fin 3).succ = 2 := rfl
  have hs2 : (2 : Fin 3).succ = 3 := rfl
  simp [h00, h01, h02, h10, h11, h12, h20, h21, h22, h30, h31, h32,
    hs0, hs1, hs2]
  ring

lemma xyBlkSTM_prod_0 :
    (3269559610269400 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (4166951273623656 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_33
  have p1 : (-53363394 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1) ≤ (-51914615 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-43277712534 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2) ≤ (-34004072825 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-51914615 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (3269559610269400 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (4166951273623656 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-34004072825 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_1 :
    (-71236929186360 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (-55760657337660 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_32
  have p1 : (-53363394 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1) ≤ (-51914615 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (176457776385 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3) ≤ (187465603122 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-51914615 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-71236929186360 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (-55760657337660 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (176457776385 / 1000000000000000000 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_2 :
    (168039548116228880 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (173495868698882880 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_33
  have p1 : (26190970 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2) ≤ (26990982 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-1801917958320 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1) ≤ (-1747644855190 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (26190970 / 1000000000000 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (168039548116228880 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (173495868698882880 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-1747644855190 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_3 :
    (4137526945433310 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (4411089574834086 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_31
  have p1 : (26190970 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2) ≤ (26990982 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-94819319766 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3) ≤ (-89023107030 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (26190970 / 1000000000000 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (4137526945433310 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (4411089574834086 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-89023107030 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_4 :
    (-1049333124556800 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (-845551326982748 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_32
  have p1 : (-41363136 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3) ≤ (-40100639 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (2675795338553 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1) ≤ (2761402959360 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-40100639 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-1049333124556800 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (-845551326982748 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2675795338553 / 1000000000000000000 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_5 :
    (1220761096215965 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (1560570358833216 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_00
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_31
  have p1 : (-41363136 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3) ≤ (-40100639 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2077 / 1000000 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-33545503296 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2) ≤ (-26265918545 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-40100639 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (1220761096215965 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (1560570358833216 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-26265918545 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_6 :
    (-13334559169530304 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (-10710565590692240 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_33
  have p1 : (170064154 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0) ≤ (170766896 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (111392020870 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2) ≤ (138491952656 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (170064154 / 1000000000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-13334559169530304 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (-10710565590692240 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (111392020870 / 1000000000000000000 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_7 :
    (182663186784936 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (227963560146240 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_32
  have p1 : (170064154 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0) ≤ (170766896 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-599904105648 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3) ≤ (-578048059446 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (170064154 / 1000000000000 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (182663186784936 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (227963560146240 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-578048059446 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_8 :
    (-92736416874231648 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (-89892706351899360 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_33
  have p1 : (-175055436 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2) ≤ (-174194540 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (934902096180 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0) ≤ (963155008872 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-174194540 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-92736416874231648 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (-89892706351899360 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (934902096180 / 1000000000000000000 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_9 :
    (-37618314373428228 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (-36189556372518120 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_30
  have p1 : (-175055436 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2) ≤ (-174194540 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (592087241460 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3) ≤ (614969746668 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-174194540 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-37618314373428228 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (-36189556372518120 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (592087241460 / 1000000000000000000 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_10 :
    (452327431214856 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (560885943905280 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_32
  have p1 : (266706898 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3) ≤ (268268928 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-1476015641856 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0) ≤ (-1431415921566 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (266706898 / 1000000000000 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (452327431214856 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (560885943905280 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-1431415921566 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_11 :
    (-13308735940291968 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (-10677586657809180 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_01
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_30
  have p1 : (266706898 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3) ≤ (268268928 / 1000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-13814 / 1000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (174693018190 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2) ≤ (217566100608 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (266706898 / 1000000000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-13308735940291968 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (-10677586657809180 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (174693018190 / 1000000000000000000 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_12 :
    (-171625922538228480 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (-165713823186004912 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_33
  have p1 : (-26700072 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0) ≤ (-25828478 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (1723456851506 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1) ≤ (1782496806720 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-25828478 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-171625922538228480 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (-165713823186004912 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (1723456851506 / 1000000000000000000 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_13 :
    (-4363546655935656 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (-4080262154648394 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_31
  have p1 : (-26700072 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0) ≤ (-25828478 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (87790996722 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3) ≤ (93797352936 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-25828478 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-4363546655935656 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (-4080262154648394 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (87790996722 / 1000000000000000000 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_14 :
    (-28667103728950512 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (-27061292929545840 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_33
  have p1 : (-54113934 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1) ≤ (-52439510 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (281442850170 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0) ≤ (297734864868 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-52439510 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-28667103728950512 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (-27061292929545840 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (281442850170 / 1000000000000000000 : ℝ)) (by norm_num : (-96152 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_15 :
    (-11628744743436282 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (-10894501075017780 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_23
  have e3 := xyBlkSTM_30
  have p1 : (-54113934 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1) ≤ (-52439510 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (178241894490 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3) ≤ (190102250142 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-52439510 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-3399 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-11628744743436282 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (-10894501075017780 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (178241894490 / 1000000000000000000 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_16 :
    (-10736154424501632 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (-10103921493871074 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_31
  have p1 : (-41944896 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3) ≤ (-40506086 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (217396163562 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0) ≤ (230780817792 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-40506086 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-10736154424501632 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (-10103921493871074 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (217396163562 / 1000000000000000000 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_17 :
    (-171293557929500160 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (-165203573283105684 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_02
  have e1 := xyBlkSTM_13
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_30
  have p1 : (-41944896 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3) ≤ (-40506086 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2098 / 1000000 : ℝ)) (by norm_num : (-19307 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (2702849600522 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1) ≤ (2800241256960 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-40506086 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-171293557929500160 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (-165203573283105684 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (2702849600522 / 1000000000000000000 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_18 :
    (-3860230463174400 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (-3177597693467132 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_32
  have p1 : (-152164488 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0) ≤ (-150698951 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (10055688903377 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1) ≤ (10158501218880 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-150698951 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-3860230463174400 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (-3177597693467132 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (10055688903377 / 1000000000000000000 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_19 :
    (4587643020385685 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (5740942602607128 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_10
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_31
  have p1 : (-152164488 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0) ≤ (-150698951 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (-12311 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-123405399768 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2) ≤ (-98707812905 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-150698951 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (4587643020385685 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (5740942602607128 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-98707812905 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_20 :
    (-644783873373360 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (-518906029333740 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_32
  have p1 : (-308396886 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1) ≤ (-305963795 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (1642107687765 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0) ≤ (1696799666772 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-305963795 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (-644783873373360 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (-518906029333740 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (1642107687765 / 1000000000000000000 : ℝ)) (by norm_num : (-316 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_21 :
    (12249232996083450 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (15299471135853366 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_11
  have e2 := xyBlkSTM_22
  have e3 := xyBlkSTM_30
  have p1 : (-308396886 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1) ≤ (-305963795 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (-24995 / 1000000 : ℝ) ≤ (0 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-250109874546 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2) ≤ (-200406285725 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonneg_bounds (by norm_num : (-305963795 / 1000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (0 : ℝ) ≤ (655 / 1000000 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (12249232996083450 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (15299471135853366 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-200406285725 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_22 :
    (38503629279601590 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (39925912786299036 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_20
  have e3 := xyBlkSTM_31
  have p1 : (154359010 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2) ≤ (155985858 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-858234190716 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0) ≤ (-828444806670 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (154359010 / 1000000000000 : ℝ)) (by norm_num : (-5367 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (38503629279601590 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (39925912786299036 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-828444806670 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-46477 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_prod_23 :
    (629551322743022940 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (637011297000373680 / 1000000000000000000000000 : ℝ) := by
  have e0 := xyBlkSTM_03
  have e1 := xyBlkSTM_12
  have e2 := xyBlkSTM_21
  have e3 := xyBlkSTM_30
  have p1 : (154359010 / 1000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2) ≤ (155985858 / 1000000000000 : ℝ) := by
    have hm := mul_nonneg_bounds (by norm_num : (0 : ℝ) ≤ (12241 / 1000000 : ℝ)) (by norm_num : (0 : ℝ) ≤ (12610 / 1000000 : ℝ)) e0.1 e0.2 e1.1 e1.2
    convert hm using 1 <;> norm_num
  have p2 : (-10413615880080 / 1000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1) ≤ (-10299913660270 / 1000000000000000000 : ℝ) := by
    have hm := mul_nonneg_nonpos_bounds (by norm_num : (0 : ℝ) ≤ (154359010 / 1000000000000 : ℝ)) (by norm_num : (-66727 / 1000000 : ℝ) ≤ (0 : ℝ)) p1.1 p1.2 e2.1 e2.2
    convert hm using 1 <;> norm_num
  have p3 : (629551322743022940 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧
      (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (637011297000373680 / 1000000000000000000000000 : ℝ) := by
    have hm := mul_nonpos_nonpos_bounds (by norm_num : (-10299913660270 / 1000000000000000000 : ℝ) ≤ (0 : ℝ)) (by norm_num : (-61122 / 1000000 : ℝ) ≤ (0 : ℝ)) p2.1 p2.2 e3.1 e3.2
    convert hm using 1 <;> norm_num
  exact p3

lemma xyBlkSTM_term_0 :
    (3269559610269400 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧ (xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (4166951273623656 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_0

lemma xyBlkSTM_term_1 :
    (55760657337660 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧ -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (71236929186360 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_1
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_2 :
    (-173495868698882880 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧ -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (-168039548116228880 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_2
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_3 :
    (4137526945433310 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧ (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (4411089574834086 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_3

lemma xyBlkSTM_term_4 :
    (-1049333124556800 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧ (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (-845551326982748 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_4

lemma xyBlkSTM_term_5 :
    (-1560570358833216 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧ -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (-1220761096215965 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_5
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_6 :
    (10710565590692240 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ∧ -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) ≤ (13334559169530304 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_6
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_7 :
    (182663186784936 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ∧ (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) ≤ (227963560146240 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_7

lemma xyBlkSTM_term_8 :
    (-92736416874231648 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧ (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (-89892706351899360 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_8

lemma xyBlkSTM_term_9 :
    (36189556372518120 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧ -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (37618314373428228 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_9
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_10 :
    (-560885943905280 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧ -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (-452327431214856 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_10
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_11 :
    (-13308735940291968 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧ (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (-10677586657809180 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_11

lemma xyBlkSTM_term_12 :
    (-171625922538228480 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ∧ (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) ≤ (-165713823186004912 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_12

lemma xyBlkSTM_term_13 :
    (4080262154648394 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ∧ -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) ≤ (4363546655935656 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_13
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_14 :
    (27061292929545840 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ∧ -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) ≤ (28667103728950512 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_14
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_15 :
    (-11628744743436282 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ∧ (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) ≤ (-10894501075017780 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_15

lemma xyBlkSTM_term_16 :
    (-10736154424501632 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧ (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (-10103921493871074 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_16

lemma xyBlkSTM_term_17 :
    (165203573283105684 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧ -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (171293557929500160 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_17
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_18 :
    (3177597693467132 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ∧ -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) ≤ (3860230463174400 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_18
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_19 :
    (4587643020385685 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ∧ (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) ≤ (5740942602607128 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_19

lemma xyBlkSTM_term_20 :
    (-644783873373360 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ∧ (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) ≤ (-518906029333740 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_20

lemma xyBlkSTM_term_21 :
    (-15299471135853366 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ∧ -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) ≤ (-12249232996083450 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_21
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_22 :
    (-39925912786299036 / 1000000000000000000000000 : ℝ) ≤ -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ∧ -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) ≤ (-38503629279601590 / 1000000000000000000000000 : ℝ) := by
  have h := xyBlkSTM_prod_22
  constructor <;> linarith [h.1, h.2]

lemma xyBlkSTM_term_23 :
    (629551322743022940 / 1000000000000000000000000 : ℝ) ≤ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ∧ (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0) ≤ (637011297000373680 / 1000000000000000000000000 : ℝ) :=
  xyBlkSTM_prod_23

lemma xyBlkSTM_det_bounds :
    (355 / 1000000000 : ℝ) ≤ xyBlkSTM.det ∧
      xyBlkSTM.det ≤ (402 / 1000000000 : ℝ) := by
  rw [det_fin_four]
  have t0 := xyBlkSTM_term_0
  have t1 := xyBlkSTM_term_1
  have t2 := xyBlkSTM_term_2
  have t3 := xyBlkSTM_term_3
  have t4 := xyBlkSTM_term_4
  have t5 := xyBlkSTM_term_5
  have t6 := xyBlkSTM_term_6
  have t7 := xyBlkSTM_term_7
  have t8 := xyBlkSTM_term_8
  have t9 := xyBlkSTM_term_9
  have t10 := xyBlkSTM_term_10
  have t11 := xyBlkSTM_term_11
  have t12 := xyBlkSTM_term_12
  have t13 := xyBlkSTM_term_13
  have t14 := xyBlkSTM_term_14
  have t15 := xyBlkSTM_term_15
  have t16 := xyBlkSTM_term_16
  have t17 := xyBlkSTM_term_17
  have t18 := xyBlkSTM_term_18
  have t19 := xyBlkSTM_term_19
  have t20 := xyBlkSTM_term_20
  have t21 := xyBlkSTM_term_21
  have t22 := xyBlkSTM_term_22
  have t23 := xyBlkSTM_term_23
  have s0 := t0
  have s1 : (3325320267607060 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2)) ≤ (4238188202810016 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s0.1 s0.2 t1.1 t1.2
    convert hm using 1 <;> first | ring | norm_num
  have s2 : (-170170548431275820 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3)) ≤ (-163801359913418864 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s1.1 s1.2 t2.1 t2.2
    convert hm using 1 <;> first | ring | norm_num
  have s3 : (-166033021485842510 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1)) ≤ (-159390270338584778 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s2.1 s2.2 t3.1 t3.2
    convert hm using 1 <;> first | ring | norm_num
  have s4 : (-167082354610399310 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2)) ≤ (-160235821665567526 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s3.1 s3.2 t4.1 t4.2
    convert hm using 1 <;> first | ring | norm_num
  have s5 : (-168642924969232526 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1)) ≤ (-161456582761783491 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s4.1 s4.2 t5.1 t5.2
    convert hm using 1 <;> first | ring | norm_num
  have s6 : (-157932359378540286 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3)) ≤ (-148122023592253187 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s5.1 s5.2 t6.1 t6.2
    convert hm using 1 <;> first | ring | norm_num
  have s7 : (-157749696191755350 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2)) ≤ (-147894060032106947 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s6.1 s6.2 t7.1 t7.2
    convert hm using 1 <;> first | ring | norm_num
  have s8 : (-250486113065986998 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3)) ≤ (-237786766384006307 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s7.1 s7.2 t8.1 t8.2
    convert hm using 1 <;> first | ring | norm_num
  have s9 : (-214296556693468878 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0)) ≤ (-200168452010578079 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s8.1 s8.2 t9.1 t9.2
    convert hm using 1 <;> first | ring | norm_num
  have s10 : (-214857442637374158 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2)) ≤ (-200620779441792935 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s9.1 s9.2 t10.1 t10.2
    convert hm using 1 <;> first | ring | norm_num
  have s11 : (-228166178577666126 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0)) ≤ (-211298366099602115 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s10.1 s10.2 t11.1 t11.2
    convert hm using 1 <;> first | ring | norm_num
  have s12 : (-399792101115894606 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3)) ≤ (-377012189285607027 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s11.1 s11.2 t12.1 t12.2
    convert hm using 1 <;> first | ring | norm_num
  have s13 : (-395711838961246212 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1)) ≤ (-372648642629671371 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s12.1 s12.2 t13.1 t13.2
    convert hm using 1 <;> first | ring | norm_num
  have s14 : (-368650546031700372 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3)) ≤ (-343981538900720859 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s13.1 s13.2 t14.1 t14.2
    convert hm using 1 <;> first | ring | norm_num
  have s15 : (-380279290775136654 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0)) ≤ (-354876039975738639 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s14.1 s14.2 t15.1 t15.2
    convert hm using 1 <;> first | ring | norm_num
  have s16 : (-391015445199638286 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1)) ≤ (-364979961469609713 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s15.1 s15.2 t16.1 t16.2
    convert hm using 1 <;> first | ring | norm_num
  have s17 : (-225811871916532602 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0)) ≤ (-193686403540109553 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s16.1 s16.2 t17.1 t17.2
    convert hm using 1 <;> first | ring | norm_num
  have s18 : (-222634274223065470 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2)) ≤ (-189826173076935153 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s17.1 s17.2 t18.1 t18.2
    convert hm using 1 <;> first | ring | norm_num
  have s19 : (-218046631202679785 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1)) ≤ (-184085230474328025 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s18.1 s18.2 t19.1 t19.2
    convert hm using 1 <;> first | ring | norm_num
  have s20 : (-218691415076053145 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2)) ≤ (-184604136503661765 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s19.1 s19.2 t20.1 t20.2
    convert hm using 1 <;> first | ring | norm_num
  have s21 : (-233990886211906511 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0)) ≤ (-196853369499745215 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s20.1 s20.2 t21.1 t21.2
    convert hm using 1 <;> first | ring | norm_num
  have s22 : (-273916798998205547 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1)) ≤ (-235356998779346805 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s21.1 s21.2 t22.1 t22.2
    convert hm using 1 <;> first | ring | norm_num
  have s23 : (355634523744817393 / 1000000000000000000000000 : ℝ) ≤ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0)) ∧ ((xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + -(xyBlkSTM 0 0 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + (xyBlkSTM 0 0 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + (xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + -(xyBlkSTM 0 0 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + -(xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 3) + (xyBlkSTM 0 1 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + -(xyBlkSTM 0 1 * xyBlkSTM 1 2 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + -(xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + (xyBlkSTM 0 1 * xyBlkSTM 1 3 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 3) + -(xyBlkSTM 0 2 * xyBlkSTM 1 0 * xyBlkSTM 2 3 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 3) + (xyBlkSTM 0 2 * xyBlkSTM 1 1 * xyBlkSTM 2 3 * xyBlkSTM 3 0) + (xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + -(xyBlkSTM 0 2 * xyBlkSTM 1 3 * xyBlkSTM 2 1 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 1 * xyBlkSTM 3 2) + (xyBlkSTM 0 3 * xyBlkSTM 1 0 * xyBlkSTM 2 2 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 0 * xyBlkSTM 3 2) + -(xyBlkSTM 0 3 * xyBlkSTM 1 1 * xyBlkSTM 2 2 * xyBlkSTM 3 0) + -(xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 0 * xyBlkSTM 3 1) + (xyBlkSTM 0 3 * xyBlkSTM 1 2 * xyBlkSTM 2 1 * xyBlkSTM 3 0)) ≤ (401654298221026875 / 1000000000000000000000000 : ℝ) := by
    have hm := add_bounds s22.1 s22.2 t23.1 t23.2
    convert hm using 1 <;> first | ring | norm_num
  have hlo : (355 / 1000000000 : ℝ) ≤ (355634523744817393 / 1000000000000000000000000 : ℝ) := by norm_num
  have hhi : (401654298221026875 / 1000000000000000000000000 : ℝ) ≤ (402 / 1000000000 : ℝ) := by norm_num
  constructor
  · linarith [hlo, s23.1]
  · linarith [hhi, s23.2]

lemma xyBlkSTM_det_pos : (0 : ℝ) < xyBlkSTM.det := by
  have h := xyBlkSTM_det_bounds
  have : (0 : ℝ) < 355 / 1000000000 := by norm_num
  exact this.trans_le h.1

lemma xyBlkSTM_det_ne : xyBlkSTM.det ≠ 0 := xyBlkSTM_det_pos.ne'

lemma xyBlk_det_ne : xyBlk.det ≠ 0 := by
  rw [xyBlk_eq_xyBlkSTM]; exact xyBlkSTM_det_ne

lemma erOf_ofLp2 (t : ℝ) : (erOf t).ofLp 2 = 0 := by
  simp [erOf, ofLp_ofCoords]

lemma ethOf_ofLp2 (t : ℝ) : (ethOf t).ofLp 2 = 0 := by
  simp [ethOf, ofLp_ofCoords]

lemma stmInertial_ofLp2 (t dx dy dvx dvy : ℝ) :
    (stmInertial t dx dy dvx dvy).ofLp 2 = 0 := by
  simp [stmInertial, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul,
    erOf_ofLp2, ethOf_ofLp2]

lemma stmCol_ofLp2 (j : Fin 4) (t : ℝ) : (stmCol j t).ofLp 2 = 0 := by
  fin_cases j <;> simp [stmCol, stmInertial_ofLp2]

lemma dlosSTM_ofLp2 (t : ℝ) (dr : Vec) (hz : dr.ofLp 2 = 0) :
    (dlosSTM t dr).ofLp 2 = 0 := by
  simp [dlosSTM, PiLp.smul_apply, PiLp.sub_apply, smul_eq_mul, uStar_ofLp2, hz]

lemma dlosCol_ofLp2 (j : Fin 4) (t : ℝ) : (dlosCol j t).ofLp 2 = 0 :=
  dlosSTM_ofLp2 t (stmCol j t) (stmCol_ofLp2 j t)

lemma secondDiff_dlosCol_ofLp2 (j : Fin 4) (h : ℝ) :
    (secondDiff (fun t => dlosCol j t) h).ofLp 2 = 0 := by
  simp [secondDiff, PiLp.sub_apply, PiLp.add_apply, PiLp.smul_apply, smul_eq_mul,
    dlosCol_ofLp2]

lemma fderiv_sdCart_inPlane_z (j : Fin 4) :
    fderiv ℝ sdCart sStar (Pi.single (inPlane j) 1) 2 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single (inPlane j) 1) 5 = 0 := by
  rw [fderiv_sdCart_inPlane]
  constructor
  · change (secondDiff (fun t => dlosCol j t) hSD1).ofLp 2 = 0
    exact secondDiff_dlosCol_ofLp2 j hSD1
  · change (secondDiff (fun t => dlosCol j t) hSD2).ofLp 2 = 0
    exact secondDiff_dlosCol_ofLp2 j hSD2

def zOut : Fin 2 → Fin 6 := ![2, 5]

def zIn : Fin 2 → Fin 6 := ![2, 5]

lemma fderiv_sdCart_zIn (j : Fin 2) :
    fderiv ℝ sdCart sStar (Pi.single (zIn j) 1)
      = match j with
        | ⟨0, _⟩ => ![0, 0, deltaPhi phiZ hSD1, 0, 0, deltaPhi phiZ hSD2]
        | ⟨1, _⟩ => ![0, 0, deltaPhi phiVz hSD1, 0, 0, deltaPhi phiVz hSD2] := by
  fin_cases j
  · simpa [zIn] using fderiv_sdCart_ez'
  · simpa [zIn] using fderiv_sdCart_evz'

lemma fderiv_sdCart_ez_xy :
    fderiv ℝ sdCart sStar (Pi.single 2 1) 0 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 2 1) 1 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 2 1) 3 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 2 1) 4 = 0 := by
  simp [fderiv_sdCart_ez']

lemma fderiv_sdCart_evz_xy :
    fderiv ℝ sdCart sStar (Pi.single 5 1) 0 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 5 1) 1 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 5 1) 3 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single 5 1) 4 = 0 := by
  simp [fderiv_sdCart_evz']

lemma fderiv_sdCart_z_xy (j : Fin 2) :
    fderiv ℝ sdCart sStar (Pi.single (zIn j) 1) 0 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single (zIn j) 1) 1 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single (zIn j) 1) 3 = 0 ∧
      fderiv ℝ sdCart sStar (Pi.single (zIn j) 1) 4 = 0 := by
  rcases j with ⟨n, hn⟩
  interval_cases n
  · simpa [zIn] using fderiv_sdCart_ez_xy
  · simpa [zIn] using fderiv_sdCart_evz_xy

lemma fderiv_sdCart_apply_eq_sum (v : Fin 6 → ℝ) :
    fderiv ℝ sdCart sStar v =
      v 0 • fderiv ℝ sdCart sStar (Pi.single 0 1)
        + v 1 • fderiv ℝ sdCart sStar (Pi.single 1 1)
        + v 2 • fderiv ℝ sdCart sStar (Pi.single 2 1)
        + v 3 • fderiv ℝ sdCart sStar (Pi.single 3 1)
        + v 4 • fderiv ℝ sdCart sStar (Pi.single 4 1)
        + v 5 • fderiv ℝ sdCart sStar (Pi.single 5 1) := by
  conv_lhs => rw [eq_sum_single v]
  simp only [map_sum, map_smul]
  simp [Fin.sum_univ_six]

lemma fderiv_sdCart_ez_inPlaneOut (i : Fin 4) :
    fderiv ℝ sdCart sStar (Pi.single 2 1) (inPlaneOut i) = 0 := by
  rcases i with ⟨n, hn⟩
  interval_cases n <;> simp [inPlaneOut, fderiv_sdCart_ez_xy]

lemma fderiv_sdCart_evz_inPlaneOut (i : Fin 4) :
    fderiv ℝ sdCart sStar (Pi.single 5 1) (inPlaneOut i) = 0 := by
  rcases i with ⟨n, hn⟩
  interval_cases n <;> simp [inPlaneOut, fderiv_sdCart_evz_xy]

lemma fderiv_sdCart_inPlaneOut_eq_xy (v : Fin 6 → ℝ) (i : Fin 4) :
    fderiv ℝ sdCart sStar v (inPlaneOut i)
      = (xyBlk *ᵥ ![v 0, v 1, v 3, v 4]) i := by
  have hz0' := fderiv_sdCart_ez_inPlaneOut i
  have hz1' := fderiv_sdCart_evz_inPlaneOut i
  rw [fderiv_sdCart_apply_eq_sum]
  simp only [Pi.add_apply, Pi.smul_apply, smul_eq_mul, hz0', hz1',
    mul_zero, add_zero, zero_add]
  rcases i with ⟨n, hn⟩
  interval_cases n <;>
    simp [xyBlk, Matrix.mulVec, dotProduct, Fin.sum_univ_four, inPlane, inPlaneOut,
      Matrix.of_apply] <;> ring

lemma fderiv_sdCart_inPlane_zOut (j : Fin 4) (i : Fin 2) :
    fderiv ℝ sdCart sStar (Pi.single (inPlane j) 1) (zOut i) = 0 := by
  have hp := fderiv_sdCart_inPlane_z j
  rcases i with ⟨n, hn⟩
  interval_cases n <;> simp [zOut, hp]

lemma zBlk_mulVec (v2 v5 : ℝ) :
    zBlk *ᵥ ![v2, v5] =
      ![v2 * deltaPhi phiZ hSD1 + v5 * deltaPhi phiVz hSD1,
        v2 * deltaPhi phiZ hSD2 + v5 * deltaPhi phiVz hSD2] := by
  ext i
  rcases i with ⟨n, hn⟩
  interval_cases n <;>
    (simp [zBlk, Matrix.mulVec, dotProduct, Fin.sum_univ_two]; ring)

lemma fderiv_sdCart_coord2 (v : Fin 6 → ℝ) :
    fderiv ℝ sdCart sStar v 2 =
      v 2 * deltaPhi phiZ hSD1 + v 5 * deltaPhi phiVz hSD1 := by
  have e0 : fderiv ℝ sdCart sStar (Pi.single 0 1) 2 = 0 :=
    (fderiv_sdCart_inPlane_z 0).1
  have e1 : fderiv ℝ sdCart sStar (Pi.single 1 1) 2 = 0 :=
    (fderiv_sdCart_inPlane_z 1).1
  have e2 : fderiv ℝ sdCart sStar (Pi.single 3 1) 2 = 0 :=
    (fderiv_sdCart_inPlane_z 2).1
  have e3 : fderiv ℝ sdCart sStar (Pi.single 4 1) 2 = 0 :=
    (fderiv_sdCart_inPlane_z 3).1
  have ez : fderiv ℝ sdCart sStar (Pi.single 2 1) 2 = deltaPhi phiZ hSD1 := by
    simp [fderiv_sdCart_ez']
  have evz : fderiv ℝ sdCart sStar (Pi.single 5 1) 2 = deltaPhi phiVz hSD1 := by
    simp [fderiv_sdCart_evz']
  rw [fderiv_sdCart_apply_eq_sum]
  simp only [Pi.add_apply, Pi.smul_apply, smul_eq_mul, e0, e1, e2, e3, ez, evz]
  ring

lemma fderiv_sdCart_coord5 (v : Fin 6 → ℝ) :
    fderiv ℝ sdCart sStar v 5 =
      v 2 * deltaPhi phiZ hSD2 + v 5 * deltaPhi phiVz hSD2 := by
  have e0 : fderiv ℝ sdCart sStar (Pi.single 0 1) 5 = 0 :=
    (fderiv_sdCart_inPlane_z 0).2
  have e1 : fderiv ℝ sdCart sStar (Pi.single 1 1) 5 = 0 :=
    (fderiv_sdCart_inPlane_z 1).2
  have e2 : fderiv ℝ sdCart sStar (Pi.single 3 1) 5 = 0 :=
    (fderiv_sdCart_inPlane_z 2).2
  have e3 : fderiv ℝ sdCart sStar (Pi.single 4 1) 5 = 0 :=
    (fderiv_sdCart_inPlane_z 3).2
  have ez : fderiv ℝ sdCart sStar (Pi.single 2 1) 5 = deltaPhi phiZ hSD2 := by
    simp [fderiv_sdCart_ez']
  have evz : fderiv ℝ sdCart sStar (Pi.single 5 1) 5 = deltaPhi phiVz hSD2 := by
    simp [fderiv_sdCart_evz']
  rw [fderiv_sdCart_apply_eq_sum]
  simp only [Pi.add_apply, Pi.smul_apply, smul_eq_mul, e0, e1, e2, e3, ez, evz]
  ring

lemma fderiv_sdCart_zOut_eq_z (v : Fin 6 → ℝ) (i : Fin 2) :
    fderiv ℝ sdCart sStar v (zOut i)
      = (zBlk *ᵥ ![v 2, v 5]) i := by
  rw [zBlk_mulVec]
  rcases i with ⟨n, hn⟩
  interval_cases n
  · simpa [zOut] using fderiv_sdCart_coord2 v
  · simpa [zOut] using fderiv_sdCart_coord5 v

lemma xyBlk_mulVec_eq_zero {v : Fin 4 → ℝ} (h : xyBlk *ᵥ v = 0) : v = 0 :=
  Matrix.eq_zero_of_mulVec_eq_zero xyBlk_det_ne h

lemma zBlk_mulVec_eq_zero {v : Fin 2 → ℝ} (h : zBlk *ᵥ v = 0) : v = 0 :=
  Matrix.eq_zero_of_mulVec_eq_zero zBlk_det_ne h

lemma fderiv_sdCart_injective :
    Function.Injective (fderiv ℝ sdCart sStar) := by
  intro v w hvw
  have hdiff : fderiv ℝ sdCart sStar (v - w) = 0 := by
    simpa [map_sub] using sub_eq_zero.mpr hvw
  have hxy : xyBlk *ᵥ ![(v - w) 0, (v - w) 1, (v - w) 3, (v - w) 4] = 0 := by
    ext i
    have hi := fderiv_sdCart_inPlaneOut_eq_xy (v - w) i
    have hz : fderiv ℝ sdCart sStar (v - w) (inPlaneOut i) = 0 := by
      simp [hdiff]
    exact hi.symm.trans hz
  have hz : zBlk *ᵥ ![(v - w) 2, (v - w) 5] = 0 := by
    ext i
    have hi := fderiv_sdCart_zOut_eq_z (v - w) i
    have h0 : fderiv ℝ sdCart sStar (v - w) (zOut i) = 0 := by
      simp [hdiff]
    exact hi.symm.trans h0
  have hxy0 := xyBlk_mulVec_eq_zero hxy
  have hz0 := zBlk_mulVec_eq_zero hz
  have hvw' : v - w = 0 := by
    ext i
    fin_cases i
    · simpa using congrArg (fun f : Fin 4 → ℝ => f 0) hxy0
    · simpa using congrArg (fun f : Fin 4 → ℝ => f 1) hxy0
    · simpa using congrArg (fun f : Fin 2 → ℝ => f 0) hz0
    · simpa using congrArg (fun f : Fin 4 → ℝ => f 2) hxy0
    · simpa using congrArg (fun f : Fin 4 → ℝ => f 3) hxy0
    · simpa using congrArg (fun f : Fin 2 → ℝ => f 1) hz0
  exact sub_eq_zero.mp hvw'

lemma exists_sigma_sdCart :
    ∃ σ : ℝ, 0 < σ ∧ ∀ v : Fin 6 → ℝ, σ * ‖v‖ ≤ ‖fderiv ℝ sdCart sStar v‖ := by
  classical
  let S : Set (Fin 6 → ℝ) := Metric.sphere 0 1
  have hK : IsCompact S := isCompact_sphere (0 : Fin 6 → ℝ) 1
  have hne : (Metric.sphere (0 : Fin 6 → ℝ) 1).Nonempty :=
    NormedSpace.sphere_nonempty.mpr (by norm_num : (0 : ℝ) ≤ 1)
  have hcont : Continuous fun v : Fin 6 → ℝ => ‖fderiv ℝ sdCart sStar v‖ := by
    fun_prop
  obtain ⟨v0, hv0S, hmin⟩ := hK.exists_isMinOn hne hcont.continuousOn
  have hv01 : ‖v0‖ = 1 := mem_sphere_zero_iff_norm.mp hv0S
  have hσpos : 0 < ‖fderiv ℝ sdCart sStar v0‖ := by
    refine norm_pos_iff.mpr ?_
    intro hz
    have : v0 = 0 := fderiv_sdCart_injective (by simpa using hz)
    have : (0 : ℝ) = 1 := by rw [← hv01, this, norm_zero]
    exact (by norm_num : (0 : ℝ) ≠ 1) this
  refine ⟨‖fderiv ℝ sdCart sStar v0‖, hσpos, ?_⟩
  intro v
  rcases eq_or_ne v 0 with hv | hv
  · simp [hv]
  · have hun : ‖(‖v‖)⁻¹ • v‖ = 1 := by
      rw [norm_smul, norm_inv, norm_norm]
      field_simp [norm_ne_zero_iff.mpr hv]
    have huS : (‖v‖)⁻¹ • v ∈ S := mem_sphere_zero_iff_norm.mpr hun
    have hmin' : ‖fderiv ℝ sdCart sStar v0‖
        ≤ ‖fderiv ℝ sdCart sStar ((‖v‖)⁻¹ • v)‖ := hmin huS
    have hsc : fderiv ℝ sdCart sStar ((‖v‖)⁻¹ • v)
        = (‖v‖)⁻¹ • fderiv ℝ sdCart sStar v := by
      simp
    rw [hsc, norm_smul, norm_inv, norm_norm] at hmin'
    have hvpos : 0 < ‖v‖ := norm_pos_iff.mpr hv
    have : ‖fderiv ℝ sdCart sStar v0‖ * ‖v‖ ≤ ‖fderiv ℝ sdCart sStar v‖ := by
      have := mul_le_mul_of_nonneg_right hmin' hvpos.le
      field_simp [hvpos.ne'] at this
      exact this
    simpa [mul_comm] using this

lemma contDiffAt_fderiv_sdCart :
    ContDiffAt ℝ 1 (fderiv ℝ sdCart) sStar :=
  contDiffAt_sdCart.fderiv_right (by decide)

lemma exists_lipschitz_fderiv_sdCart :
    ∃ K : NNReal, ∃ t ∈ 𝓝 sStar, LipschitzOnWith K (fderiv ℝ sdCart) t :=
  contDiffAt_fderiv_sdCart.exists_lipschitzOnWith

lemma exists_sdCart_remainder :
    ∃ σ K r : ℝ, 0 < σ ∧ 0 < r ∧
      ∀ x y : Fin 6 → ℝ, ‖x - sStar‖ < r → ‖y - sStar‖ < r →
        σ * ‖y - x‖ - K * ‖y - x‖ ^ 2 ≤ ‖sdCart y - sdCart x‖ := by
  obtain ⟨σ0, hσ0, hσ⟩ := exists_sigma_sdCart
  obtain ⟨K0, t, ht, hLip⟩ := exists_lipschitz_fderiv_sdCart
  have hC2 : ∀ᶠ z in 𝓝 sStar, ContDiffAt ℝ 2 sdCart z :=
    contDiffAt_sdCart.eventually (by simp)
  have hDfclose : ∀ᶠ z in 𝓝 sStar,
      ‖fderiv ℝ sdCart z - fderiv ℝ sdCart sStar‖ < σ0 / 2 := by
    have hc := contDiffAt_fderiv_sdCart.continuousAt
    simpa [dist_eq_norm] using (Metric.tendsto_nhds.mp hc.tendsto _ (half_pos hσ0))
  have hnhds : ∀ᶠ z in 𝓝 sStar,
      z ∈ t ∧ ContDiffAt ℝ 2 sdCart z ∧
        ‖fderiv ℝ sdCart z - fderiv ℝ sdCart sStar‖ < σ0 / 2 :=
    ((eventually_of_mem ht fun _ hz => hz).and hC2).and hDfclose |>.mono
      fun z hz => ⟨hz.1.1, hz.1.2, hz.2⟩
  obtain ⟨r, hr, hball⟩ := Metric.mem_nhds_iff.mp hnhds
  have hσhalf : 0 < σ0 / 2 := half_pos hσ0
  refine ⟨σ0 / 2, (K0 : ℝ), r, hσhalf, hr, ?_⟩
  intro x y hx hy
  have hxB : x ∈ Metric.ball sStar r := Metric.mem_ball.2 (by rwa [dist_eq_norm])
  have hyB : y ∈ Metric.ball sStar r := Metric.mem_ball.2 (by rwa [dist_eq_norm])
  have hx' := hball hxB
  have hy' := hball hyB
  have hsegB : segment ℝ x y ⊆ Metric.ball sStar r :=
    (convex_ball (sStar : Fin 6 → ℝ) r).segment_subset hxB hyB
  have hσx : ∀ v, (σ0 / 2) * ‖v‖ ≤ ‖fderiv ℝ sdCart x v‖ := by
    intro v
    have hA : σ0 * ‖v‖ ≤ ‖fderiv ℝ sdCart sStar v‖ := hσ v
    have hop : ‖(fderiv ℝ sdCart x - fderiv ℝ sdCart sStar) v‖
        ≤ ‖fderiv ℝ sdCart x - fderiv ℝ sdCart sStar‖ * ‖v‖ :=
      ContinuousLinearMap.le_opNorm _ _
    have htri : ‖fderiv ℝ sdCart sStar v‖
        ≤ ‖fderiv ℝ sdCart x v‖
          + ‖(fderiv ℝ sdCart x - fderiv ℝ sdCart sStar) v‖ := by
      have : fderiv ℝ sdCart sStar v
          = fderiv ℝ sdCart x v
            - (fderiv ℝ sdCart x - fderiv ℝ sdCart sStar) v := by simp
      rw [this]; exact norm_sub_le _ _
    have hop' : ‖(fderiv ℝ sdCart x - fderiv ℝ sdCart sStar) v‖
        ≤ (σ0 / 2) * ‖v‖ :=
      hop.trans (mul_le_mul_of_nonneg_right hx'.2.2.le (norm_nonneg _))
    linarith [hA, hop', htri]
  have hdiff : ∀ z ∈ segment ℝ x y,
      HasFDerivWithinAt
        (fun w => sdCart w - fderiv ℝ sdCart x (w - x))
        (fderiv ℝ sdCart z - fderiv ℝ sdCart x) (segment ℝ x y) z := by
    intro z hz
    have hzB := hsegB hz
    have hz' := hball hzB
    have hF : HasFDerivAt sdCart (fderiv ℝ sdCart z) z :=
      (hz'.2.1.differentiableAt (by decide)).hasFDerivAt
    have hA : HasFDerivAt (fun w : Fin 6 → ℝ => fderiv ℝ sdCart x (w - x))
        (fderiv ℝ sdCart x) z := by
      have hsub : HasFDerivAt (fun w : Fin 6 → ℝ => w - x)
          (ContinuousLinearMap.id ℝ (Fin 6 → ℝ)) z :=
        (hasFDerivAt_id z).sub_const x
      exact (fderiv ℝ sdCart x).hasFDerivAt.comp z hsub
    exact (hF.sub hA).hasFDerivWithinAt
  have hC : ∀ z ∈ segment ℝ x y,
      ‖(fderiv ℝ sdCart z - fderiv ℝ sdCart x : (Fin 6 → ℝ) →L[ℝ] (Fin 6 → ℝ))‖
        ≤ (K0 : ℝ) * ‖y - x‖ := by
    intro z hz
    have hzB := hsegB hz
    have hz' := hball hzB
    have h1 : ‖fderiv ℝ sdCart z - fderiv ℝ sdCart x‖ ≤ K0 * ‖z - x‖ :=
      hLip.norm_sub_le hz'.1 hx'.1
    have h2 : ‖z - x‖ ≤ ‖y - x‖ := by
      have hs : z ∈ Metric.closedBall x ‖y - x‖ := by
        -- segment ⊆ Metric.closedBall x ‖y-x‖
        exact (convex_closedBall x ‖y - x‖).segment_subset
          (Metric.mem_closedBall_self (norm_nonneg _))
          (by rw [Metric.mem_closedBall, dist_eq_norm]) hz
      simpa [Metric.mem_closedBall, dist_eq_norm] using hs
    exact h1.trans (mul_le_mul_of_nonneg_left h2 K0.coe_nonneg)
  have hmvt :=
    (convex_segment x y).norm_image_sub_le_of_norm_hasFDerivWithin_le
      (f := fun w => sdCart w - fderiv ℝ sdCart x (w - x))
      (f' := fun z => fderiv ℝ sdCart z - fderiv ℝ sdCart x)
      hdiff hC (left_mem_segment ℝ x y) (right_mem_segment ℝ x y)
  have hrem : ‖sdCart y - sdCart x - fderiv ℝ sdCart x (y - x)‖
      ≤ (K0 : ℝ) * ‖y - x‖ ^ 2 := by
    have hgyx :
        (fun w => sdCart w - fderiv ℝ sdCart x (w - x)) y
          - (fun w => sdCart w - fderiv ℝ sdCart x (w - x)) x
          = sdCart y - sdCart x - fderiv ℝ sdCart x (y - x) := by
      simp only [map_sub]
      abel
    rw [← hgyx]
    have hpow : (K0 : ℝ) * ‖y - x‖ ^ 2 = (K0 : ℝ) * ‖y - x‖ * ‖y - x‖ := by
      ring
    rw [hpow]
    exact hmvt
  exact remainder_lower_bound hσx hrem

lemma isTarget_keplerIC_sStar (T : ℝ) :
    IsTarget (1 : ℝ) 2 3 T (keplerIC sStar) := by
  convert isTarget_circular_fiveHalves T
  funext t
  exact keplerIC_sStar t

lemma sdPairCoord_sub (a b c d : Vec) :
    sdPairCoord a b - sdPairCoord c d = sdPairCoord (a - c) (b - d) := by
  funext i
  fin_cases i <;> simp [sdPairCoord, Pi.sub_apply, PiLp.sub_apply]

lemma sdCart_sub (x y : Fin 6 → ℝ) :
    sdCart y - sdCart x =
      sdPairCoord
        (secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD1)
        (secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD2) := by
  simp only [sdCart, sdPairCoord_sub, secondDiff_sub]

lemma secondDiff_los_large_of_sdCart {x y : Fin 6 → ℝ} {ε : ℝ}
    (hε : 0 ≤ ε) (h : 8 * ε < ‖sdCart y - sdCart x‖) :
    8 * ε < ‖secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD1‖ ∨
      8 * ε < ‖secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD2‖ := by
  rw [sdCart_sub] at h
  set w1 := secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD1
  set w2 := secondDiff (fun t => los obs (keplerIC y) t - los obs (keplerIC x) t) hSD2
  have hmax : ∃ i, 8 * ε < |sdPairCoord w1 w2 i| := by
    by_contra hnone
    push_neg at hnone
    have : ‖sdPairCoord w1 w2‖ ≤ 8 * ε :=
      (pi_norm_le_iff_of_nonneg (by positivity)).2 fun i => by
        simpa [Real.norm_eq_abs] using hnone i
    exact (h.trans_le this).false
  obtain ⟨i, hi⟩ := hmax
  fin_cases i
  · left; exact hi.trans_le (coord_le_euclidean w1 0)
  · left; exact hi.trans_le (coord_le_euclidean w1 1)
  · left; exact hi.trans_le (coord_le_euclidean w1 2)
  · right; exact hi.trans_le (coord_le_euclidean w2 0)
  · right; exact hi.trans_le (coord_le_euclidean w2 1)
  · right; exact hi.trans_le (coord_le_euclidean w2 2)

lemma not_both_recovered_sdCart {ε : ℝ} {ξ : ℝ → Vec} {x y : Fin 6 → ℝ}
    (hε : 0 ≤ ε) (hsep : 8 * ε < ‖sdCart y - sdCart x‖)
    (hx : RecoveredBy obs ε 1 ξ (keplerIC x))
    (hy : RecoveredBy obs ε 1 ξ (keplerIC y)) : False := by
  rcases secondDiff_los_large_of_sdCart hε hsep with h1 | h2
  · exact not_both_recovered hSD1_window h1 hy hx
  · exact not_both_recovered hSD2_window h2 hy hx

lemma exists_sdCart_linear :
    ∃ σ r : ℝ, 0 < σ ∧ 0 < r ∧
      ∀ x y : Fin 6 → ℝ, ‖x - sStar‖ < r → ‖y - sStar‖ < r →
        σ * ‖y - x‖ ≤ ‖sdCart y - sdCart x‖ := by
  obtain ⟨σ, K, r0, hσ, hr0, hrem⟩ := exists_sdCart_remainder
  let r : ℝ := min r0 (σ / (4 * (|K| + 1)))
  have hr : 0 < r :=
    lt_min hr0 (div_pos hσ (by positivity))
  refine ⟨σ / 2, r, half_pos hσ, hr, ?_⟩
  intro x y hx hy
  have hx0 : ‖x - sStar‖ < r0 := hx.trans_le (min_le_left _ _)
  have hy0 : ‖y - sStar‖ < r0 := hy.trans_le (min_le_left _ _)
  have hlow := hrem x y hx0 hy0
  have hΔ : ‖y - x‖ < 2 * r := by
    have htri : ‖(y - sStar) + (sStar - x)‖ ≤ ‖y - sStar‖ + ‖sStar - x‖ :=
      norm_add_le _ _
    have hyx : y - x = (y - sStar) + (sStar - x) := by abel
    rw [hyx]
    have hrev : ‖sStar - x‖ = ‖x - sStar‖ := norm_sub_rev _ _
    have hsum : ‖y - sStar‖ + ‖x - sStar‖ < r + r := add_lt_add hy hx
    have hrr : r + r = 2 * r := by ring
    exact (htri.trans_eq (by rw [hrev])).trans_lt (hsum.trans_eq hrr)
  have hK : K * ‖y - x‖ ^ 2 ≤ |K| * ‖y - x‖ * (2 * r) := by
    have h1 : K * ‖y - x‖ ^ 2 ≤ |K| * ‖y - x‖ ^ 2 :=
      mul_le_mul_of_nonneg_right (le_abs_self K) (sq_nonneg _)
    have h2 : |K| * ‖y - x‖ ^ 2 = (|K| * ‖y - x‖) * ‖y - x‖ := by ring
    have h3 : (|K| * ‖y - x‖) * ‖y - x‖ ≤ (|K| * ‖y - x‖) * (2 * r) :=
      mul_le_mul_of_nonneg_left hΔ.le (mul_nonneg (abs_nonneg _) (norm_nonneg _))
    linarith
  have hKσ : |K| * (2 * r) ≤ σ / 2 := by
    have hrle : r ≤ σ / (4 * (|K| + 1)) := min_le_right _ _
    have hstep : |K| * (2 * r) ≤ |K| * (2 * (σ / (4 * (|K| + 1)))) :=
      mul_le_mul_of_nonneg_left (by nlinarith) (abs_nonneg _)
    have hfrac : |K| * (2 * (σ / (4 * (|K| + 1)))) ≤ σ / 2 := by
      have hden : (0 : ℝ) < 4 * (|K| + 1) := by positivity
      field_simp
      nlinarith [abs_nonneg K, hσ]
    exact hstep.trans hfrac
  have hK2 : |K| * ‖y - x‖ * (2 * r) ≤ (σ / 2) * ‖y - x‖ := by
    calc
      |K| * ‖y - x‖ * (2 * r) = |K| * (2 * r) * ‖y - x‖ := by ring
      _ ≤ (σ / 2) * ‖y - x‖ :=
        mul_le_mul_of_nonneg_right hKσ (norm_nonneg _)
  have hlin : (σ / 2) * ‖y - x‖ ≤ σ * ‖y - x‖ - K * ‖y - x‖ ^ 2 := by linarith
  exact hlin.trans hlow

def cartPt (n : ℕ) (δ : ℝ) (u : Fin 6 → Fin n) : Fin 6 → ℝ :=
  fun i => sStar i + δ * (((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2)

lemma cartPt_injective {n : ℕ} {δ : ℝ} (hδ : 0 < δ) {u v : Fin 6 → Fin n}
    (h : cartPt n δ u = cartPt n δ v) : u = v := by
  funext i
  have hcongr := congrArg (fun f : Fin 6 → ℝ => f i) h
  simp only [cartPt] at hcongr
  have : ((u i : ℕ) : ℝ) = ((v i : ℕ) : ℝ) := by
    apply_fun (fun z => z - sStar i) at hcongr
    simp only [add_sub_cancel_left] at hcongr
    have : ((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2 =
        ((v i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2 :=
      mul_left_cancel₀ hδ.ne' hcongr
    linarith
  exact Fin.ext (Nat.cast_injective this)

lemma cartPt_coord_abs {n : ℕ} {δ : ℝ} (hn : 0 < n) (hδ : 0 ≤ δ)
    (u : Fin 6 → Fin n) (i : Fin 6) :
    |cartPt n δ u i - sStar i| ≤ δ * ((n : ℝ) - 1) / 2 := by
  simp only [cartPt, add_sub_cancel_left, abs_mul, abs_of_nonneg hδ]
  have hidx : |((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2| ≤ ((n : ℝ) - 1) / 2 := by
    have hu : (u i : ℕ) < n := (u i).isLt
    have hun : ((u i : ℕ) : ℝ) ≤ (n : ℝ) - 1 := by
      have : (u i : ℕ) ≤ n - 1 := Nat.le_pred_of_lt hu
      cases n with
      | zero => exact (lt_irrefl _ hn).elim
      | succ n => exact (Nat.cast_le.mpr this).trans_eq (by simp [Nat.cast_succ])
    have hhalf : 0 ≤ ((n : ℝ) - 1) / 2 := by
      have : (1 : ℝ) ≤ n := Nat.one_le_cast.mpr (Nat.succ_le_of_lt hn)
      linarith
    have hu0 : (0 : ℝ) ≤ (u i : ℕ) := Nat.cast_nonneg _
    exact abs_sub_le_iff.2 ⟨by linarith, by linarith⟩
  have : δ * |((u i : ℕ) : ℝ) - ((n : ℝ) - 1) / 2| ≤ δ * (((n : ℝ) - 1) / 2) := by
    gcongr
  linarith

lemma cartPt_mem_ball {n : ℕ} {δ r : ℝ} (hn : 0 < n) (hδ : 0 ≤ δ)
    (hbd : δ * ((n : ℝ) - 1) / 2 < r) (u : Fin 6 → Fin n) :
    ‖cartPt n δ u - sStar‖ < r := by
  have hn1 : (1 : ℝ) ≤ n := Nat.one_le_cast.mpr (Nat.succ_le_of_lt hn)
  have hnn : 0 ≤ δ * ((n : ℝ) - 1) / 2 := by
    have : 0 ≤ (n : ℝ) - 1 := by linarith
    positivity
  have hle : ‖cartPt n δ u - sStar‖ ≤ δ * ((n : ℝ) - 1) / 2 :=
    (pi_norm_le_iff_of_nonneg hnn).2 fun i => by
      simpa [Real.norm_eq_abs, Pi.sub_apply] using cartPt_coord_abs hn hδ u i
  exact hle.trans_lt hbd

lemma cartPt_sep {n : ℕ} {δ : ℝ} (hδ : 0 < δ) {u v : Fin 6 → Fin n}
    (hne : u ≠ v) : δ ≤ ‖cartPt n δ u - cartPt n δ v‖ := by
  obtain ⟨i, hi⟩ := Function.ne_iff.mp hne
  have hun : (u i : ℕ) ≠ (v i : ℕ) := mt (fun h => Fin.ext h) hi
  have hcoord :
      |cartPt n δ u i - cartPt n δ v i| ≤ ‖cartPt n δ u - cartPt n δ v‖ := by
    simpa [Real.norm_eq_abs, Pi.sub_apply] using
      norm_le_pi_norm (cartPt n δ u - cartPt n δ v) i
  have hdiff : cartPt n δ u i - cartPt n δ v i =
      δ * (((u i : ℕ) : ℝ) - ((v i : ℕ) : ℝ)) := by
    simp [cartPt]; ring
  have habs : |cartPt n δ u i - cartPt n δ v i| =
      δ * |((u i : ℕ) : ℝ) - ((v i : ℕ) : ℝ)| := by
    rw [hdiff, abs_mul, abs_of_pos hδ]
  have h1 : (1 : ℝ) ≤ |((u i : ℕ) : ℝ) - ((v i : ℕ) : ℝ)| := by
    have : (1 : ℤ) ≤ |((u i : ℕ) : ℤ) - ((v i : ℕ) : ℤ)| :=
      Int.one_le_abs (sub_ne_zero.mpr (by exact_mod_cast hun))
    exact_mod_cast this
  calc
    δ = δ * 1 := by ring
    _ ≤ δ * |((u i : ℕ) : ℝ) - ((v i : ℕ) : ℝ)| :=
      mul_le_mul_of_nonneg_left h1 hδ.le
    _ = |cartPt n δ u i - cartPt n δ v i| := habs.symm
    _ ≤ ‖cartPt n δ u - cartPt n δ v‖ := hcoord

lemma exhaustive_ncard_ge_sdCart
    {ε : ℝ} {P : Set (Fin 6 → ℝ)} {S : Set (ℝ → Vec)}
    (hε : 0 ≤ ε) (hSfin : S.Finite)
    (hP : ∀ s ∈ P, IsTarget (1 : ℝ) 2 3 1 (keplerIC s))
    (hsep : ∀ x ∈ P, ∀ y ∈ P, x ≠ y → 8 * ε < ‖sdCart y - sdCart x‖)
    (hcov : IsExhaustiveCover (1 : ℝ) 2 3 1 ε obs S) :
    P.ncard ≤ S.ncard := by
  classical
  obtain ⟨_, hrec⟩ := hcov
  let f : (Fin 6 → ℝ) → (ℝ → Vec) := fun s =>
    if hs : s ∈ P then Classical.choose (hrec (keplerIC s) (hP s hs)) else obs
  have hfmem : ∀ s ∈ P, f s ∈ S := by
    intro s hs
    simpa [f, dif_pos hs] using (Classical.choose_spec (hrec (keplerIC s) (hP s hs))).1
  have hfrec : ∀ s ∈ P, RecoveredBy obs ε 1 (f s) (keplerIC s) := by
    intro s hs
    simpa [f, dif_pos hs] using (Classical.choose_spec (hrec (keplerIC s) (hP s hs))).2
  refine Set.ncard_le_ncard_of_injOn f hfmem ?_ hSfin
  intro x hx y hy hxy
  by_contra hne
  exact not_both_recovered_sdCart hε (hsep x hx y hy hne)
    (hfrec x hx) (hxy ▸ hfrec y hy)

lemma circular_norm_fiveHalves (t : ℝ) :
    ‖keplerIC sStar t‖ = (5 / 2 : ℝ) := by
  rw [keplerIC_sStar, circular_norm _ _ _ _ (by norm_num)]

lemma cartPt_sdCart_sep {n : ℕ} {δ σ r : ℝ}
    (hσ : 0 < σ) (hδ : 0 < δ) (hr : 0 < r) (hn : 0 < n)
    (hlin : ∀ x y : Fin 6 → ℝ, ‖x - sStar‖ < r → ‖y - sStar‖ < r →
      σ * ‖y - x‖ ≤ ‖sdCart y - sdCart x‖)
    (hbd : δ * ((n : ℝ) - 1) / 2 < r)
    {u v : Fin 6 → Fin n} (hne : u ≠ v) :
    σ * δ ≤ ‖sdCart (cartPt n δ v) - sdCart (cartPt n δ u)‖ := by
  have hu := cartPt_mem_ball hn hδ.le hbd u
  have hv := cartPt_mem_ball hn hδ.le hbd v
  have hsep := cartPt_sep hδ hne
  have hlin' := hlin (cartPt n δ u) (cartPt n δ v) hu hv
  have hrev : ‖cartPt n δ v - cartPt n δ u‖ = ‖cartPt n δ u - cartPt n δ v‖ :=
    norm_sub_rev _ _
  exact (mul_le_mul_of_nonneg_left hsep hσ.le).trans (hrev ▸ hlin')


/-! Joint-in-time Kepler anomaly `chiProd` (level-set inverse of `univF`). -/

lemma hasStrictFDerivAt_uncurry_univF (chi0 : ℝ) :
    HasStrictFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (sStar, chi0)) (sStar, chi0) :=
  (contDiffAt_uncurry_univF chi0).hasStrictFDerivAt (by decide)

lemma univF_partial_chi_invertible_chi (chi0 : ℝ) :
    (fderiv ℝ (Function.uncurry univF) (sStar, chi0) ∘L
        ContinuousLinearMap.inr ℝ (Fin 6 → ℝ) ℝ).IsInvertible := by
  rw [fderiv_univF_comp_inr]
  exact ContinuousLinearMap.IsInvertible.of_inverse
    (g := ContinuousLinearMap.toSpanSingleton ℝ (2 / 5))
    (by ext; simp) (by ext; simp)

noncomputable def chiData (t0 : ℝ) :
    ImplicitFunctionData ℝ ((Fin 6 → ℝ) × ℝ) ℝ (Fin 6 → ℝ) :=
  (hasStrictFDerivAt_uncurry_univF (2 * t0 / 5)).implicitFunctionDataOfProdDomain
    (univF_partial_chi_invertible_chi (2 * t0 / 5))

noncomputable def chiProd (t0 : ℝ) (t : ℝ) (s : Fin 6 → ℝ) : ℝ :=
  (chiData t0 |>.implicitFunction t s).2

/-! Algebraic elliptic f,g identities used by the two-body ODE. -/

lemma fg_f_ell_id {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    fg_f s χ = 1 - (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) /
      (alphaOf s * rnorm s) :=
  fg_f_ell hα

lemma fg_g_of_kepler {s : Fin 6 → ℝ} {t χ : ℝ}
    (hα : 0 < alphaOf s) (ht : univF s χ = t) :
    fg_g s t χ =
      sigmaOf s * (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s
        + rnorm s * Real.sin (Real.sqrt (alphaOf s) * χ)
          / Real.sqrt (alphaOf s) := by
  have hg := fg_g_ell (s := s) (t := t) (chi := χ) hα
  have hu := univF_eq_ell (s := s) (χ := χ) hα
  rw [hg]
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have ht' : t = univF_ell (alphaOf s) (sigmaOf s) (rnorm s) χ := by
    rw [← hu, ht]
  rw [ht']
  simp [univF_ell]
  field_simp [hα0, hω0]
  ring


lemma chiData_pt (t0 : ℝ) : (chiData t0).pt = (sStar, 2 * t0 / 5) := rfl

lemma chiData_leftFun (t0 : ℝ) :
    (chiData t0).leftFun = Function.uncurry univF := rfl

lemma chiData_rightFun (t0 : ℝ) :
    (chiData t0).rightFun = Prod.fst := rfl

lemma chiData_prodFun_pt (t0 : ℝ) :
    (chiData t0).prodFun (chiData t0).pt = (t0, sStar) := by
  change (Function.uncurry univF (sStar, 2 * t0 / 5), sStar) = (t0, sStar)
  simp [Function.uncurry, univF_sStar]

lemma eventually_prodFun_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      (chiData t0).prodFun ((chiData t0).implicitFunction p.1 p.2) = p := by
  have h := (chiData t0).prodFun_implicitFunction
  rwa [chiData_prodFun_pt t0] at h

lemma eventually_univF_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      univF p.2 (chiProd t0 p.1 p.2) = p.1 := by
  filter_upwards [eventually_prodFun_chiProd t0] with p hp
  have hF : Function.uncurry univF ((chiData t0).implicitFunction p.1 p.2) = p.1 := by
    simpa [ImplicitFunctionData.prodFun, chiData_leftFun] using congrArg Prod.fst hp
  have hs : ((chiData t0).implicitFunction p.1 p.2).1 = p.2 := by
    simpa [ImplicitFunctionData.prodFun, chiData_rightFun] using congrArg Prod.snd hp
  have : Function.uncurry univF ((chiData t0).implicitFunction p.1 p.2) =
      univF p.2 (chiProd t0 p.1 p.2) := by
    simp [Function.uncurry, chiProd, hs]
  exact this.symm.trans hF

lemma eventually_univF_chiProd_sStar (t0 : ℝ) :
    ∀ᶠ t in 𝓝 t0, univF sStar (chiProd t0 t sStar) = t := by
  have hpath : Tendsto (fun t : ℝ => (t, sStar)) (𝓝 t0) (𝓝 (t0, sStar)) :=
    tendsto_id.prodMk_nhds tendsto_const_nhds
  exact hpath.eventually (eventually_univF_chiProd t0)

lemma chiProd_center (t0 : ℝ) : chiProd t0 t0 sStar = 2 * t0 / 5 := by
  have h := (chiData t0).implicitFunction_apply_image.self_of_nhds
  have hpt : (chiData t0).implicitFunction t0 sStar = (sStar, 2 * t0 / 5) := by
    simpa [chiData_pt, chiData_leftFun, chiData_rightFun, Function.uncurry, univF_sStar] using h
  simpa [chiProd] using congrArg Prod.snd hpt

lemma eventually_chiProd_sStar (t0 : ℝ) :
    ∀ᶠ t in 𝓝 t0, chiProd t0 t sStar = 2 * t / 5 := by
  filter_upwards [eventually_univF_chiProd_sStar t0] with t ht
  have : (5 / 2) * chiProd t0 t sStar = t := by
    rw [← univF_sStar, ht]
  linarith

lemma chiData_target_mem (t0 : ℝ) :
    (t0, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have h := (chiData t0).map_pt_mem_toOpenPartialHomeomorph_target
  -- `map_pt` is `(leftFun pt, rightFun pt) = prodFun pt`
  change (chiData t0).prodFun (chiData t0).pt ∈ _ at h
  rwa [chiData_prodFun_pt t0] at h

lemma continuousAt_chiProd (t0 : ℝ) :
    ContinuousAt (fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2) (t0, sStar) := by
  have hsym := (chiData t0).toOpenPartialHomeomorph.continuousAt_symm (chiData_target_mem t0)
  exact continuousAt_snd.comp hsym

lemma continuousAt_chiProd_sStar (t0 : ℝ) :
    ContinuousAt (fun t : ℝ => chiProd t0 t sStar) t0 := by
  have hp : ContinuousAt (fun t : ℝ => (t, sStar)) t0 :=
    continuousAt_id.prodMk continuousAt_const
  change ContinuousAt
      ((fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2) ∘ fun t : ℝ => (t, sStar)) t0
  exact ContinuousAt.comp (continuousAt_chiProd t0) hp

lemma hasDerivAt_chiProd_sStar (t0 : ℝ) :
    HasDerivAt (fun t => chiProd t0 t sStar) (2 / 5) t0 := by
  have hf : HasDerivAt (univF sStar) (5 / 2) (chiProd t0 t0 sStar) := by
    simpa [chiProd_center t0] using hasDerivAt_univF_sStar (2 * t0 / 5)
  have hinv := HasDerivAt.of_local_left_inverse (continuousAt_chiProd_sStar t0) hf
    (by norm_num : (5 / 2 : ℝ) ≠ 0)
    (eventually_univF_chiProd_sStar t0)
  exact hinv.congr_deriv (by norm_num)

lemma hasDerivAt_fg_f_ell_chi {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s)
    (hr : rnorm s ≠ 0) :
    HasDerivAt (fg_f s)
      (-Real.sin (Real.sqrt (alphaOf s) * χ) /
        (Real.sqrt (alphaOf s) * rnorm s)) χ := by
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt (alphaOf s) * u)
      (Real.sqrt (alphaOf s)) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt (alphaOf s))
  have h1 : HasDerivAt (fun u => 1 - Real.cos (Real.sqrt (alphaOf s) * u))
      (Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ := by
    refine ((hasDerivAt_const χ (1 : ℝ)).sub hωu.cos).congr_deriv ?_
    ring
  have hdiv : HasDerivAt
      (fun u => (1 - Real.cos (Real.sqrt (alphaOf s) * u)) / (alphaOf s * rnorm s))
      (Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s) /
        (alphaOf s * rnorm s)) χ :=
    h1.div_const (alphaOf s * rnorm s)
  have hell : HasDerivAt
      (fun u => 1 - (1 - Real.cos (Real.sqrt (alphaOf s) * u)) / (alphaOf s * rnorm s))
      (-(Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) /
        (alphaOf s * rnorm s)) χ :=
    ((hasDerivAt_const χ (1 : ℝ)).sub hdiv).congr_deriv (by ring)
  have hfun : fg_f s = fun u =>
      1 - (1 - Real.cos (Real.sqrt (alphaOf s) * u)) / (alphaOf s * rnorm s) :=
    funext fun u => fg_f_ell (s := s) (chi := u) hα
  rw [hfun]
  refine hell.congr_deriv ?_
  have hsq : Real.sqrt (alphaOf s) * Real.sqrt (alphaOf s) = alphaOf s :=
    Real.mul_self_sqrt hα.le
  field_simp [hα0, hω0, hr]
  simp [pow_two, hsq]
  ring

lemma hasDerivAt_fg_g_ell_chi {s : Fin 6 → ℝ} {t χ : ℝ} (hα : 0 < alphaOf s) :
    HasDerivAt (fun ξ => fg_g s t ξ)
      ((Real.cos (Real.sqrt (alphaOf s) * χ) - 1) / alphaOf s) χ := by
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt (alphaOf s) * u)
      (Real.sqrt (alphaOf s)) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt (alphaOf s))
  have hidα : HasDerivAt (fun u => u / alphaOf s) (1 / alphaOf s) χ :=
    (hasDerivAt_id χ).div_const (alphaOf s)
  have hsin : HasDerivAt (fun u => Real.sin (Real.sqrt (alphaOf s) * u))
      (Real.cos (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ :=
    hωu.sin
  have hsinα : HasDerivAt
      (fun u => Real.sin (Real.sqrt (alphaOf s) * u) /
        (alphaOf s * Real.sqrt (alphaOf s)))
      (Real.cos (Real.sqrt (alphaOf s) * χ) / alphaOf s) χ := by
    refine (hsin.div_const (alphaOf s * Real.sqrt (alphaOf s))).congr_deriv ?_
    field_simp [hα0, hω0]
  have hinner := hidα.sub hsinα
  have hell : HasDerivAt
      (fun u => t - (u / alphaOf s -
        Real.sin (Real.sqrt (alphaOf s) * u) / (alphaOf s * Real.sqrt (alphaOf s))))
      (-(1 / alphaOf s - Real.cos (Real.sqrt (alphaOf s) * χ) / alphaOf s)) χ :=
    ((hasDerivAt_const χ t).sub hinner).congr_deriv (by ring)
  have hfun : (fun ξ => fg_g s t ξ) = fun u =>
      t - (u / alphaOf s -
        Real.sin (Real.sqrt (alphaOf s) * u) / (alphaOf s * Real.sqrt (alphaOf s))) :=
    funext fun u => fg_g_ell (s := s) (t := t) (chi := u) hα
  rw [hfun]
  refine hell.congr_deriv ?_
  field_simp [hα0]
  ring

lemma hasDerivAt_fg_f_ell_chi2 {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s)
    (hr : rnorm s ≠ 0) :
    HasDerivAt (fun u =>
        -Real.sin (Real.sqrt (alphaOf s) * u) /
          (Real.sqrt (alphaOf s) * rnorm s))
      (-Real.cos (Real.sqrt (alphaOf s) * χ) / rnorm s) χ := by
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt (alphaOf s) * u)
      (Real.sqrt (alphaOf s)) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt (alphaOf s))
  have hsin : HasDerivAt (fun u => Real.sin (Real.sqrt (alphaOf s) * u))
      (Real.cos (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ :=
    hωu.sin
  have hdiv := hsin.div_const (Real.sqrt (alphaOf s) * rnorm s)
  have hneg := hdiv.neg
  have hfun : (fun u => -Real.sin (Real.sqrt (alphaOf s) * u) /
        (Real.sqrt (alphaOf s) * rnorm s)) =
      fun u => -(Real.sin (Real.sqrt (alphaOf s) * u) /
        (Real.sqrt (alphaOf s) * rnorm s)) := by
    funext u; ring
  rw [hfun]
  refine hneg.congr_deriv ?_
  field_simp [hω0, hr]

lemma hasDerivAt_fg_g_ell_chi2 {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    HasDerivAt (fun u =>
        (Real.cos (Real.sqrt (alphaOf s) * u) - 1) / alphaOf s)
      (-Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)) χ := by
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt (alphaOf s) * u)
      (Real.sqrt (alphaOf s)) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt (alphaOf s))
  have hnum : HasDerivAt (fun u => Real.cos (Real.sqrt (alphaOf s) * u) - 1)
      (-Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ := by
    refine (hωu.cos.sub_const (1 : ℝ)).congr_deriv ?_
    ring
  refine (hnum.div_const (alphaOf s)).congr_deriv ?_
  have hsq : Real.sqrt (alphaOf s) * Real.sqrt (alphaOf s) = alphaOf s :=
    Real.mul_self_sqrt hα.le
  field_simp [hα0, hω0]
  simp [pow_two, hsq]
  ring

lemma rho_ell_eq (s : Fin 6 → ℝ) (χ : ℝ) (hα : 0 < alphaOf s) :
    univF_dchi s χ =
      rnorm s * Real.cos (Real.sqrt (alphaOf s) * χ)
        + sigmaOf s * Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)
        + (1 - Real.cos (Real.sqrt (alphaOf s) * χ)) / alphaOf s := by
  rw [univF_dchi_eq_ell hα]
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  field_simp [hα0]
  ring

lemma rnorm_ne_of_alpha_pos {s : Fin 6 → ℝ} (hα : 0 < alphaOf s) : rnorm s ≠ 0 := by
  intro hr
  have hαeq : alphaOf s = -‖stateVel s‖ ^ 2 := by
    unfold alphaOf
    rw [hr, div_zero]
    ring
  have : alphaOf s ≤ 0 := by
    rw [hαeq]; nlinarith [sq_nonneg (‖stateVel s‖)]
  exact (not_le_of_gt hα) this

lemma eventually_rnorm_pos :
    ∀ᶠ s in 𝓝 sStar, 0 < rnorm s := by
  have : Tendsto rnorm (𝓝 sStar) (𝓝 (rnorm sStar)) :=
    (contDiffAt_rnorm rnorm_sStar_ne).continuousAt.tendsto
  exact this.eventually (Ioi_mem_nhds rnorm_sStar_pos)

lemma hasDerivAt_chiOf_time_sStar (t : ℝ) :
    HasDerivAt (fun τ => chiOf sStar τ) (2 / 5) t :=
  (hasDerivAt_chiOf_sStar t).congr_deriv (by field_simp)

lemma ncard_cartPt {n : ℕ} {δ : ℝ} (hδ : 0 < δ) :
    (Set.range (cartPt n δ)).ncard = n ^ 6 := by
  have hinj : Function.Injective (cartPt n δ) :=
    fun _ _ h => cartPt_injective hδ h
  rw [Set.ncard_range_of_injective hinj, ← ncard_grid, Set.ncard_univ]

lemma packing_cartPt_ncard {n : ℕ} {δ : ℝ} (hδ : 0 < δ) :
    ((Set.range (cartPt n δ)).ncard : ℝ) = (n : ℝ) ^ 6 := by
  rw [ncard_cartPt hδ]
  norm_cast

/-! χ' = 1/ρ off `sStar`, f''/g'' = -f/g / ρ³, Kepler/InShell for `keplerIC`. -/

lemma chiData_open_target (t0 : ℝ) :
    IsOpen (chiData t0).toOpenPartialHomeomorph.target :=
  (chiData t0).toOpenPartialHomeomorph.open_target

lemma chiData_right_inv (t0 t : ℝ) (s : Fin 6 → ℝ)
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    univF s (chiProd t0 t s) = t ∧
      ((chiData t0).implicitFunction t s).1 = s := by
  have himp : (chiData t0).implicitFunction t s =
      (chiData t0).toOpenPartialHomeomorph.symm (t, s) := rfl
  have hr := (chiData t0).toOpenPartialHomeomorph.right_inv h
  have hprod : (chiData t0).prodFun ((chiData t0).implicitFunction t s) = (t, s) := by
    simpa [himp, ImplicitFunctionData.prodFun] using hr
  have hF : Function.uncurry univF ((chiData t0).implicitFunction t s) = t :=
    congrArg Prod.fst hprod
  have hs : ((chiData t0).implicitFunction t s).1 = s := by
    simpa [ImplicitFunctionData.prodFun, chiData_rightFun] using congrArg Prod.snd hprod
  refine ⟨?_, hs⟩
  simpa [Function.uncurry, chiProd, hs] using hF

lemma continuousAt_chiProd_slice (t0 t : ℝ) (s : Fin 6 → ℝ)
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ContinuousAt (fun τ => chiProd t0 τ s) t := by
  have hsym := (chiData t0).toOpenPartialHomeomorph.continuousAt_symm h
  have hp : ContinuousAt (fun τ : ℝ => (τ, s)) t :=
    continuousAt_id.prodMk continuousAt_const
  change ContinuousAt
      ((fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2) ∘ fun τ : ℝ => (τ, s)) t
  exact ContinuousAt.comp (continuousAt_snd.comp hsym) hp

lemma eventually_univF_chiProd_slice (t0 t : ℝ) (s : Fin 6 → ℝ)
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ∀ᶠ τ in 𝓝 t, univF s (chiProd t0 τ s) = τ := by
  have hnhds := (chiData_open_target t0).mem_nhds h
  have hslice : {τ : ℝ | (τ, s) ∈ (chiData t0).toOpenPartialHomeomorph.target} ∈ 𝓝 t :=
    (continuous_id.prodMk continuous_const).continuousAt.preimage_mem_nhds hnhds
  refine Filter.eventually_of_mem hslice ?_
  intro τ hτ
  exact (chiData_right_inv t0 τ s hτ).1

lemma eventually_univF_dchi_pos (chi0 : ℝ) :
    ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, chi0), 0 < univF_dchi v.1 v.2 := by
  have hpos : 0 < univF_dchi sStar chi0 := by
    rw [univF_dchi_sStar]; norm_num
  exact (continuousAt_univF_dchi chi0).preimage_mem_nhds (Ioi_mem_nhds hpos)

lemma eventually_chiProd_dchi_pos (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      0 < univF_dchi p.2 (chiProd t0 p.1 p.2) := by
  have hρ := eventually_univF_dchi_pos (2 * t0 / 5)
  have hcont : Tendsto (fun p : ℝ × (Fin 6 → ℝ) =>
      (p.2, chiProd t0 p.1 p.2)) (𝓝 (t0, sStar))
      (𝓝 (sStar, 2 * t0 / 5)) := by
    have hs : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => p.2) (𝓝 (t0, sStar)) (𝓝 sStar) :=
      continuous_snd.continuousAt
    have hχ : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2)
        (𝓝 (t0, sStar)) (𝓝 (2 * t0 / 5)) := by
      simpa [chiProd_center t0] using (continuousAt_chiProd t0).tendsto
    exact hs.prodMk_nhds hχ
  exact hcont.eventually hρ

lemma eventually_hasDerivAt_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      0 < alphaOf p.2 ∧
        0 < univF_dchi p.2 (chiProd t0 p.1 p.2) ∧
          HasDerivAt (fun τ => chiProd t0 τ p.2)
            (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹ p.1 := by
  have hα : ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar), 0 < alphaOf p.2 := by
    have : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => alphaOf p.2)
        (𝓝 (t0, sStar)) (𝓝 (alphaOf sStar)) :=
      continuousAt_alphaOf_sStar.tendsto.comp continuous_snd.continuousAt.tendsto
    have hpos : 0 < alphaOf sStar := by rw [alphaOf_sStar]; norm_num
    exact this.eventually (Ioi_mem_nhds hpos)
  have htarget : (chiData t0).toOpenPartialHomeomorph.target ∈ 𝓝 (t0, sStar) :=
    (chiData_open_target t0).mem_nhds (chiData_target_mem t0)
  filter_upwards [hα, eventually_chiProd_dchi_pos t0,
    Filter.eventually_of_mem htarget fun _ h => h] with p hαp hρp hmem
  refine ⟨hαp, hρp, ?_⟩
  have hf : HasDerivAt (univF p.2)
      (univF_dchi p.2 (chiProd t0 p.1 p.2)) (chiProd t0 p.1 p.2) :=
    hasDerivAt_univF_of_alpha_pos hαp
  exact (HasDerivAt.of_local_left_inverse
    (continuousAt_chiProd_slice t0 p.1 p.2 hmem) hf hρp.ne'
    (eventually_univF_chiProd_slice t0 p.1 p.2 hmem)).congr_deriv
    (by field_simp [hρp.ne'])

lemma hasDerivAt_univF_dchi {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    HasDerivAt (univF_dchi s)
      (-rnorm s * Real.sqrt (alphaOf s) * Real.sin (Real.sqrt (alphaOf s) * χ)
        + sigmaOf s * Real.cos (Real.sqrt (alphaOf s) * χ)
        + Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)) χ := by
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω0 : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hωu : HasDerivAt (fun u => Real.sqrt (alphaOf s) * u)
      (Real.sqrt (alphaOf s)) χ := by
    simpa using (hasDerivAt_id χ).const_mul (Real.sqrt (alphaOf s))
  have h1 : HasDerivAt
      (fun u => rnorm s * Real.cos (Real.sqrt (alphaOf s) * u))
      (-rnorm s * Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ := by
    refine ((hasDerivAt_const χ (rnorm s)).mul hωu.cos).congr_deriv ?_
    ring
  have h2 : HasDerivAt
      (fun u => sigmaOf s * Real.sin (Real.sqrt (alphaOf s) * u)
        / Real.sqrt (alphaOf s))
      (sigmaOf s * Real.cos (Real.sqrt (alphaOf s) * χ)) χ := by
    refine (((hasDerivAt_const χ (sigmaOf s)).mul hωu.sin).div_const
      (Real.sqrt (alphaOf s))).congr_deriv ?_
    field_simp [hω0]
    ring
  have h3 : HasDerivAt
      (fun u => (1 - Real.cos (Real.sqrt (alphaOf s) * u)) / alphaOf s)
      (Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)) χ := by
    have hnum : HasDerivAt (fun u => 1 - Real.cos (Real.sqrt (alphaOf s) * u))
        (Real.sin (Real.sqrt (alphaOf s) * χ) * Real.sqrt (alphaOf s)) χ := by
      refine ((hasDerivAt_const χ (1 : ℝ)).sub hωu.cos).congr_deriv ?_
      ring
    refine (hnum.div_const (alphaOf s)).congr_deriv ?_
    have hsq : Real.sqrt (alphaOf s) * Real.sqrt (alphaOf s) = alphaOf s :=
      Real.mul_self_sqrt hα.le
    field_simp [hα0, hω0]
    simp [pow_two, hsq]
    ring
  have hell := (h1.add h2).add h3
  have hfun : univF_dchi s = fun u =>
      rnorm s * Real.cos (Real.sqrt (alphaOf s) * u)
        + sigmaOf s * Real.sin (Real.sqrt (alphaOf s) * u) / Real.sqrt (alphaOf s)
        + (1 - Real.cos (Real.sqrt (alphaOf s) * u)) / alphaOf s :=
    funext fun u => rho_ell_eq s u hα
  rw [hfun]
  refine hell.congr_deriv ?_
  ring


/-! Time derivatives of f,g along `chiProd`, then Kepler for the local propagator. -/

lemma fg_f_chi_deriv (s : Fin 6 → ℝ) (χ : ℝ) (hα : 0 < alphaOf s)
    (hr : rnorm s ≠ 0) :
    deriv (fg_f s) χ =
      -Real.sin (Real.sqrt (alphaOf s) * χ) /
        (Real.sqrt (alphaOf s) * rnorm s) :=
  (hasDerivAt_fg_f_ell_chi hα hr).deriv

lemma fg_g_chi_deriv (s : Fin 6 → ℝ) (t χ : ℝ) (hα : 0 < alphaOf s) :
    deriv (fun ξ => fg_g s t ξ) χ =
      (Real.cos (Real.sqrt (alphaOf s) * χ) - 1) / alphaOf s :=
  (hasDerivAt_fg_g_ell_chi (s := s) (t := t) (χ := χ) hα).deriv

lemma univF_dchi_chi_deriv (s : Fin 6 → ℝ) (χ : ℝ) (hα : 0 < alphaOf s) :
    deriv (univF_dchi s) χ =
      -rnorm s * Real.sqrt (alphaOf s) * Real.sin (Real.sqrt (alphaOf s) * χ)
        + sigmaOf s * Real.cos (Real.sqrt (alphaOf s) * χ)
        + Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s) :=
  (hasDerivAt_univF_dchi hα).deriv

lemma eventually_hasDerivAt_fg_f_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => fg_f p.2 (chiProd t0 τ p.2))
        (deriv (fg_f p.2) (chiProd t0 p.1 p.2) *
          (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 := by
  have hr := eventually_rnorm_pos
  have hpath : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => p.2) (𝓝 (t0, sStar)) (𝓝 sStar) :=
    continuous_snd.continuousAt
  filter_upwards [eventually_hasDerivAt_chiProd t0, hpath.eventually hr] with p hp hr0
  have hχ := hp.2.2
  have hf : HasDerivAt (fg_f p.2)
      (-Real.sin (Real.sqrt (alphaOf p.2) * chiProd t0 p.1 p.2) /
        (Real.sqrt (alphaOf p.2) * rnorm p.2))
      (chiProd t0 p.1 p.2) :=
    hasDerivAt_fg_f_ell_chi (s := p.2) (χ := chiProd t0 p.1 p.2) hp.1 hr0.ne'
  exact (hf.comp p.1 hχ).congr_deriv (by rw [← hf.deriv])

def psiOf (s : Fin 6 → ℝ) (ξ : ℝ) : ℝ :=
  ξ / alphaOf s
    - Real.sin (Real.sqrt (alphaOf s) * ξ) / (alphaOf s * Real.sqrt (alphaOf s))

lemma fg_g_ell_psi {s : Fin 6 → ℝ} {t ξ : ℝ} (hα : 0 < alphaOf s) :
    fg_g s t ξ = t - psiOf s ξ := by
  simpa [psiOf] using fg_g_ell (s := s) (t := t) (chi := ξ) hα

lemma hasDerivAt_psiOf {s : Fin 6 → ℝ} {t ξ : ℝ} (hα : 0 < alphaOf s) :
    HasDerivAt (psiOf s)
      (-deriv (fun u => fg_g s t u) ξ) ξ := by
  have hfg := hasDerivAt_fg_g_ell_chi (s := s) (t := t) (χ := ξ) hα
  have hfun : psiOf s = fun u => t - fg_g s t u := by
    funext u
    simp [psiOf, fg_g_ell_psi hα]
  rw [hfun]
  exact ((hasDerivAt_const ξ t).sub hfg).congr_deriv (by rw [hfg.deriv]; ring)

lemma eventually_hasDerivAt_fg_g_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => fg_g p.2 τ (chiProd t0 τ p.2))
        (1 + deriv (fun ξ => fg_g p.2 p.1 ξ) (chiProd t0 p.1 p.2) *
          (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 := by
  filter_upwards [eventually_hasDerivAt_chiProd t0] with p hp
  have hχ := hp.2.2
  have hfun :
      (fun τ => fg_g p.2 τ (chiProd t0 τ p.2)) =
        fun τ => τ - psiOf p.2 (chiProd t0 τ p.2) := by
    funext τ
    exact fg_g_ell_psi (s := p.2) (t := τ) (ξ := chiProd t0 τ p.2) hp.1
  have hψ0 : HasDerivAt (psiOf p.2)
      (-deriv (fun ξ => fg_g p.2 p.1 ξ) (chiProd t0 p.1 p.2))
      (chiProd t0 p.1 p.2) :=
    hasDerivAt_psiOf (s := p.2) (t := p.1) (ξ := chiProd t0 p.1 p.2) hp.1
  have hψ : HasDerivAt (psiOf p.2 ∘ fun τ => chiProd t0 τ p.2)
      (-deriv (fun ξ => fg_g p.2 p.1 ξ) (chiProd t0 p.1 p.2) *
        (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 :=
    hψ0.comp p.1 hχ
  have hsum : HasDerivAt (fun τ => τ - psiOf p.2 (chiProd t0 τ p.2))
      (1 + deriv (fun ξ => fg_g p.2 p.1 ξ) (chiProd t0 p.1 p.2) *
        (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 :=
    ((hasDerivAt_id p.1).sub hψ).congr_deriv (by ring)
  exact hfun ▸ hsum

noncomputable def fChi (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  -Real.sin (Real.sqrt (alphaOf s) * χ) / (Real.sqrt (alphaOf s) * rnorm s)

noncomputable def gChi (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  (Real.cos (Real.sqrt (alphaOf s) * χ) - 1) / alphaOf s

noncomputable def rhoChi (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  -rnorm s * Real.sqrt (alphaOf s) * Real.sin (Real.sqrt (alphaOf s) * χ)
    + sigmaOf s * Real.cos (Real.sqrt (alphaOf s) * χ)
    + Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s)

lemma fChi_eq {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) (hr : rnorm s ≠ 0) :
    fChi s χ = deriv (fg_f s) χ :=
  (fg_f_chi_deriv s χ hα hr).symm ▸ rfl

lemma gChi_eq {s : Fin 6 → ℝ} {t χ : ℝ} (hα : 0 < alphaOf s) :
    gChi s χ = deriv (fun ξ => fg_g s t ξ) χ :=
  (fg_g_chi_deriv s t χ hα).symm ▸ rfl

lemma rhoChi_eq {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    rhoChi s χ = deriv (univF_dchi s) χ :=
  (univF_dchi_chi_deriv s χ hα).symm ▸ rfl

lemma battin_f_alg (α r0 σ ω c sn : ℝ)
    (hα : α ≠ 0) (hr : r0 ≠ 0) (hω : ω ≠ 0) (hw : ω ^ 2 = α)
    (hcs : c * c + sn * sn = 1) :
    (-c / r0) * (r0 * c + σ * sn / ω + (1 - c) / α)
      - (-sn / (ω * r0)) * (-r0 * ω * sn + σ * c + sn / ω)
      = -(1 - (1 - c) / (α * r0)) := by
  subst hw
  field_simp [hr, hω]
  grind

lemma battin_g_alg (α r0 σ ω c sn : ℝ)
    (hα : α ≠ 0) (hr : r0 ≠ 0) (hω : ω ≠ 0) (hw : ω ^ 2 = α)
    (hcs : c * c + sn * sn = 1) :
    (-sn / ω) * (r0 * c + σ * sn / ω + (1 - c) / α)
      - ((c - 1) / α) * (-r0 * ω * sn + σ * c + sn / ω)
      = -(σ * (1 - c) / α + r0 * sn / ω) := by
  subst hw
  field_simp [hr, hω]
  grind

lemma battin_f {s : Fin 6 → ℝ} {χ : ℝ} (hα : 0 < alphaOf s) :
    (-Real.cos (Real.sqrt (alphaOf s) * χ) / rnorm s) * univF_dchi s χ
      - fChi s χ * rhoChi s χ = -fg_f s χ := by
  have hr : rnorm s ≠ 0 := rnorm_ne_of_alpha_pos hα
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hsq : Real.sqrt (alphaOf s) ^ 2 = alphaOf s := Real.sq_sqrt hα.le
  have hcs : Real.cos (Real.sqrt (alphaOf s) * χ)
        * Real.cos (Real.sqrt (alphaOf s) * χ)
      + Real.sin (Real.sqrt (alphaOf s) * χ)
        * Real.sin (Real.sqrt (alphaOf s) * χ) = 1 := by
    simpa [pow_two] using Real.cos_sq_add_sin_sq (Real.sqrt (alphaOf s) * χ)
  have hρ := rho_ell_eq s χ hα
  have hf := fg_f_ell (s := s) (chi := χ) hα
  simp only [fChi, rhoChi, hρ, hf]
  exact battin_f_alg (alphaOf s) (rnorm s) (sigmaOf s)
    (Real.sqrt (alphaOf s)) (Real.cos (Real.sqrt (alphaOf s) * χ))
    (Real.sin (Real.sqrt (alphaOf s) * χ)) hα0 hr hω hsq hcs

lemma battin_g {s : Fin 6 → ℝ} {t χ : ℝ} (hα : 0 < alphaOf s)
    (ht : univF s χ = t) :
    (-Real.sin (Real.sqrt (alphaOf s) * χ) / Real.sqrt (alphaOf s))
        * univF_dchi s χ
      - gChi s χ * rhoChi s χ = -fg_g s t χ := by
  have hr : rnorm s ≠ 0 := rnorm_ne_of_alpha_pos hα
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hsq : Real.sqrt (alphaOf s) ^ 2 = alphaOf s := Real.sq_sqrt hα.le
  have hcs : Real.cos (Real.sqrt (alphaOf s) * χ)
        * Real.cos (Real.sqrt (alphaOf s) * χ)
      + Real.sin (Real.sqrt (alphaOf s) * χ)
        * Real.sin (Real.sqrt (alphaOf s) * χ) = 1 := by
    simpa [pow_two] using Real.cos_sq_add_sin_sq (Real.sqrt (alphaOf s) * χ)
  have hρ := rho_ell_eq s χ hα
  have hg := fg_g_of_kepler (s := s) (t := t) (χ := χ) hα ht
  simp only [gChi, rhoChi, hρ, hg]
  exact battin_g_alg (alphaOf s) (rnorm s) (sigmaOf s)
    (Real.sqrt (alphaOf s)) (Real.cos (Real.sqrt (alphaOf s) * χ))
    (Real.sin (Real.sqrt (alphaOf s) * χ)) hα0 hr hω hsq hcs

lemma vel_norm_sq {s : Fin 6 → ℝ} (hr : rnorm s ≠ 0) :
    ‖stateVel s‖ ^ 2 = 2 / rnorm s - alphaOf s := by
  simp [alphaOf]

lemma eventually_hasDerivAt_rho_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => univF_dchi p.2 (chiProd t0 τ p.2))
        (rhoChi p.2 (chiProd t0 p.1 p.2) *
          (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 := by
  filter_upwards [eventually_hasDerivAt_chiProd t0] with p hp
  have hρ := hasDerivAt_univF_dchi (s := p.2) (χ := chiProd t0 p.1 p.2) hp.1
  refine (hρ.comp p.1 hp.2.2).congr_deriv ?_
  simp [rhoChi]

lemma eventually_hasDerivAt_chiProd2 (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => (univF_dchi p.2 (chiProd t0 τ p.2))⁻¹)
        (-rhoChi p.2 (chiProd t0 p.1 p.2) /
          (univF_dchi p.2 (chiProd t0 p.1 p.2)) ^ 3) p.1 := by
  filter_upwards [eventually_hasDerivAt_chiProd t0,
    eventually_hasDerivAt_rho_chiProd t0] with p hp hρt
  have hρ0 := hp.2.1
  have hinv := hρt.inv (ne_of_gt hρ0)
  refine hinv.congr_deriv ?_
  field_simp [hρ0.ne']

lemma eventually_hasDerivAt_fChi_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => fChi p.2 (chiProd t0 τ p.2))
        ((-Real.cos (Real.sqrt (alphaOf p.2) * chiProd t0 p.1 p.2) / rnorm p.2) *
          (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 := by
  have hr := eventually_rnorm_pos
  have hpath : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => p.2) (𝓝 (t0, sStar)) (𝓝 sStar) :=
    continuous_snd.continuousAt
  filter_upwards [eventually_hasDerivAt_chiProd t0, hpath.eventually hr] with p hp hr0
  have hf := hasDerivAt_fg_f_ell_chi2 (s := p.2) (χ := chiProd t0 p.1 p.2) hp.1 hr0.ne'
  unfold fChi
  exact hf.comp p.1 hp.2.2

lemma eventually_hasDerivAt_gChi_chiProd (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (fun τ => gChi p.2 (chiProd t0 τ p.2))
        ((-Real.sin (Real.sqrt (alphaOf p.2) * chiProd t0 p.1 p.2)
            / Real.sqrt (alphaOf p.2)) *
          (univF_dchi p.2 (chiProd t0 p.1 p.2))⁻¹) p.1 := by
  filter_upwards [eventually_hasDerivAt_chiProd t0] with p hp
  have hg := hasDerivAt_fg_g_ell_chi2 (s := p.2) (χ := chiProd t0 p.1 p.2) hp.1
  unfold gChi
  exact hg.comp p.1 hp.2.2

lemma f_ddot_alg (a b c ρ f : ℝ) (hρ : ρ ≠ 0)
    (hb : a * ρ - b * c = -f) :
    a * ρ⁻¹ * ρ⁻¹ + b * (-c / ρ ^ 3) = -f / ρ ^ 3 := by
  field_simp [hρ] at hb ⊢
  linear_combination hb

lemma eventually_hasDerivAt_f_ddot (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt
        (fun τ => fChi p.2 (chiProd t0 τ p.2) *
          (univF_dchi p.2 (chiProd t0 τ p.2))⁻¹)
        (-fg_f p.2 (chiProd t0 p.1 p.2) /
          univF_dchi p.2 (chiProd t0 p.1 p.2) ^ 3) p.1 := by
  filter_upwards [eventually_hasDerivAt_fChi_chiProd t0,
    eventually_hasDerivAt_chiProd2 t0,
    eventually_hasDerivAt_chiProd t0] with p hf hinv hp
  have hα := hp.1
  have hρpos := hp.2.1
  have hρne : univF_dchi p.2 (chiProd t0 p.1 p.2) ≠ 0 := hρpos.ne'
  have hmul := hf.mul hinv
  refine hmul.congr_deriv ?_
  have hb := battin_f (s := p.2) (χ := chiProd t0 p.1 p.2) hα
  exact f_ddot_alg _ _ _ _ _ hρne hb

lemma eventually_hasDerivAt_g_ddot (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt
        (fun τ => 1 + gChi p.2 (chiProd t0 τ p.2) *
          (univF_dchi p.2 (chiProd t0 τ p.2))⁻¹)
        (-fg_g p.2 p.1 (chiProd t0 p.1 p.2) /
          univF_dchi p.2 (chiProd t0 p.1 p.2) ^ 3) p.1 := by
  filter_upwards [eventually_hasDerivAt_gChi_chiProd t0,
    eventually_hasDerivAt_chiProd2 t0,
    eventually_hasDerivAt_chiProd t0,
    eventually_univF_chiProd t0] with p hg hinv hp ht
  have hα := hp.1
  have hρpos := hp.2.1
  have hρne : univF_dchi p.2 (chiProd t0 p.1 p.2) ≠ 0 := hρpos.ne'
  have hmul := hg.mul hinv
  have hone : HasDerivAt (fun _ : ℝ => (1 : ℝ)) 0 p.1 := hasDerivAt_const _ _
  have hsum := hone.add hmul
  refine hsum.congr_deriv ?_
  have hb := battin_g (s := p.2) (t := p.1) (χ := chiProd t0 p.1 p.2) hα ht
  have halg := f_ddot_alg _ _ _ _ _ hρne hb
  simpa using halg

lemma radius_sq_alg (α r0 σ ω c sn : ℝ)
    (hα : α ≠ 0) (hr : r0 ≠ 0) (hω : ω ≠ 0) (hw : ω ^ 2 = α)
    (hcs : c * c + sn * sn = 1) :
    (1 - (1 - c) / (α * r0)) ^ 2 * r0 ^ 2
      + 2 * (1 - (1 - c) / (α * r0)) *
        (σ * (1 - c) / α + r0 * sn / ω) * σ
      + (σ * (1 - c) / α + r0 * sn / ω) ^ 2 * (2 / r0 - α)
      = (r0 * c + σ * sn / ω + (1 - c) / α) ^ 2 := by
  subst hw
  field_simp [hr, hω]
  grind

lemma kepler_fg_norm_sq {s : Fin 6 → ℝ} {t χ : ℝ}
    (hα : 0 < alphaOf s) (ht : univF s χ = t) :
    ‖fg_f s χ • statePos s + fg_g s t χ • stateVel s‖ ^ 2
      = univF_dchi s χ ^ 2 := by
  have hr : rnorm s ≠ 0 := rnorm_ne_of_alpha_pos hα
  have hα0 : alphaOf s ≠ 0 := hα.ne'
  have hω : Real.sqrt (alphaOf s) ≠ 0 := Real.sqrt_ne_zero'.2 hα
  have hsq : Real.sqrt (alphaOf s) ^ 2 = alphaOf s := Real.sq_sqrt hα.le
  have hcs : Real.cos (Real.sqrt (alphaOf s) * χ)
        * Real.cos (Real.sqrt (alphaOf s) * χ)
      + Real.sin (Real.sqrt (alphaOf s) * χ)
        * Real.sin (Real.sqrt (alphaOf s) * χ) = 1 := by
    simpa [pow_two] using Real.cos_sq_add_sin_sq (Real.sqrt (alphaOf s) * χ)
  have hf := fg_f_ell (s := s) (chi := χ) hα
  have hg := fg_g_of_kepler (s := s) (t := t) (χ := χ) hα ht
  have hρ := rho_ell_eq s χ hα
  have hv := vel_norm_sq (s := s) hr
  have hx : ‖fg_f s χ • statePos s‖ ^ 2 = fg_f s χ ^ 2 * rnorm s ^ 2 := by
    rw [norm_smul, mul_pow, Real.norm_eq_abs, sq_abs, rnorm]
  have hy : ‖fg_g s t χ • stateVel s‖ ^ 2
      = fg_g s t χ ^ 2 * ‖stateVel s‖ ^ 2 := by
    rw [norm_smul, mul_pow, Real.norm_eq_abs, sq_abs]
  have hin : ⟪fg_f s χ • statePos s, fg_g s t χ • stateVel s⟫
      = fg_f s χ * fg_g s t χ * sigmaOf s := by
    rw [real_inner_smul_left, real_inner_smul_right, ← vecDot_eq_inner, sigmaOf]
    ring
  rw [norm_add_sq_real, hx, hy, hin, hf, hg, hρ, hv]
  convert radius_sq_alg (alphaOf s) (rnorm s) (sigmaOf s)
    (Real.sqrt (alphaOf s)) (Real.cos (Real.sqrt (alphaOf s) * χ))
    (Real.sin (Real.sqrt (alphaOf s) * χ)) hα0 hr hω hsq hcs using 1
  ring

lemma kepler_fg_norm {s : Fin 6 → ℝ} {t χ : ℝ}
    (hα : 0 < alphaOf s) (ht : univF s χ = t)
    (hρ : 0 < univF_dchi s χ) :
    ‖fg_f s χ • statePos s + fg_g s t χ • stateVel s‖
      = univF_dchi s χ := by
  have hsq := kepler_fg_norm_sq hα ht
  have hnn : 0 ≤ univF_dchi s χ := hρ.le
  exact (sq_eq_sq₀ (norm_nonneg _) hnn).mp hsq

noncomputable def fDot (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  fChi s χ * (univF_dchi s χ)⁻¹

noncomputable def gDot (s : Fin 6 → ℝ) (χ : ℝ) : ℝ :=
  1 + gChi s χ * (univF_dchi s χ)⁻¹

noncomputable def propagator (t0 : ℝ) (s : Fin 6 → ℝ) (t : ℝ) : Vec :=
  fg_f s (chiProd t0 t s) • statePos s + fg_g s t (chiProd t0 t s) • stateVel s

noncomputable def propagatorVel (t0 : ℝ) (s : Fin 6 → ℝ) (t : ℝ) : Vec :=
  fDot s (chiProd t0 t s) • statePos s + gDot s (chiProd t0 t s) • stateVel s

lemma eventually_hasDerivAt_propagator (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (propagator t0 p.2) (propagatorVel t0 p.2 p.1) p.1 := by
  filter_upwards [eventually_hasDerivAt_fg_f_chiProd t0,
    eventually_hasDerivAt_fg_g_chiProd t0,
    eventually_hasDerivAt_chiProd t0] with p hf hg hp
  have hr : rnorm p.2 ≠ 0 := rnorm_ne_of_alpha_pos hp.1
  have hf' : HasDerivAt (fun τ => fg_f p.2 (chiProd t0 τ p.2))
      (fDot p.2 (chiProd t0 p.1 p.2)) p.1 :=
    hf.congr_deriv (by simp [fDot, fChi_eq hp.1 hr])
  have hg' : HasDerivAt (fun τ => fg_g p.2 τ (chiProd t0 τ p.2))
      (gDot p.2 (chiProd t0 p.1 p.2)) p.1 :=
    hg.congr_deriv (by rw [gDot, ← gChi_eq (s := p.2) (t := p.1) hp.1])
  have h1 := hf'.smul_const (statePos p.2)
  have h2 := hg'.smul_const (stateVel p.2)
  have hsum := h1.add h2
  have hfun : propagator t0 p.2 =
      (fun y => fg_f p.2 (chiProd t0 y p.2) • statePos p.2)
        + fun y => fg_g p.2 y (chiProd t0 y p.2) • stateVel p.2 := by
    funext y; simp [propagator, Pi.add_apply]
  simpa [hfun, propagatorVel] using hsum

lemma eventually_hasDerivAt_propagator_vel (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      HasDerivAt (propagatorVel t0 p.2)
        (-(1 / univF_dchi p.2 (chiProd t0 p.1 p.2) ^ 3) •
          propagator t0 p.2 p.1) p.1 := by
  filter_upwards [eventually_hasDerivAt_f_ddot t0,
    eventually_hasDerivAt_g_ddot t0] with p hf hg
  have hf' : HasDerivAt (fun τ => fDot p.2 (chiProd t0 τ p.2))
      (-fg_f p.2 (chiProd t0 p.1 p.2) /
        univF_dchi p.2 (chiProd t0 p.1 p.2) ^ 3) p.1 := by
    simpa [fDot] using hf
  have hg' : HasDerivAt (fun τ => gDot p.2 (chiProd t0 τ p.2))
      (-fg_g p.2 p.1 (chiProd t0 p.1 p.2) /
        univF_dchi p.2 (chiProd t0 p.1 p.2) ^ 3) p.1 := by
    simpa [gDot] using hg
  have h1 := hf'.smul_const (statePos p.2)
  have h2 := hg'.smul_const (stateVel p.2)
  have hsum := h1.add h2
  have hfun : propagatorVel t0 p.2 =
      (fun y => fDot p.2 (chiProd t0 y p.2) • statePos p.2)
        + fun y => gDot p.2 (chiProd t0 y p.2) • stateVel p.2 := by
    funext y; simp [propagatorVel, Pi.add_apply]
  rw [hfun]
  refine hsum.congr_deriv ?_
  simp [propagator, smul_add, smul_smul, div_eq_mul_inv, mul_comm]

lemma eventually_propagator_kepler (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      propagator t0 p.2 p.1 ≠ 0 ∧
        HasDerivAt (propagator t0 p.2) (propagatorVel t0 p.2 p.1) p.1 ∧
        HasDerivAt (propagatorVel t0 p.2)
          (-(1 / ‖propagator t0 p.2 p.1‖ ^ 3) • propagator t0 p.2 p.1) p.1 := by
  filter_upwards [eventually_hasDerivAt_propagator t0,
    eventually_hasDerivAt_propagator_vel t0,
    eventually_hasDerivAt_chiProd t0,
    eventually_univF_chiProd t0] with p hpos hvel hp ht
  have hρ := hp.2.1
  have hnorm := kepler_fg_norm (s := p.2) (t := p.1)
    (χ := chiProd t0 p.1 p.2) hp.1 ht hρ
  have hne : propagator t0 p.2 p.1 ≠ 0 := by
    intro h0
    have : ‖propagator t0 p.2 p.1‖ = univF_dchi p.2 (chiProd t0 p.1 p.2) := by
      simpa [propagator] using hnorm
    rw [h0, norm_zero] at this
    exact hρ.ne' this.symm
  refine ⟨hne, hpos, ?_⟩
  refine hvel.congr_deriv ?_
  have : ‖propagator t0 p.2 p.1‖ = univF_dchi p.2 (chiProd t0 p.1 p.2) := by
    simpa [propagator] using hnorm
  rw [this]

lemma eventually_chiOf_eq_chiProd_diag (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, chiOf s t = chiProd t t s := by
  have hiff := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t)
  have hslice : ∀ᶠ s in 𝓝 sStar, univF s (chiProd t t s) = t := by
    have hpath : Tendsto (fun s : Fin 6 → ℝ => (t, s)) (𝓝 sStar) (𝓝 (t, sStar)) :=
      tendsto_const_nhds.prodMk_nhds tendsto_id
    exact hpath.eventually (eventually_univF_chiProd t)
  have hχ : Tendsto (fun s : Fin 6 → ℝ => chiProd t t s) (𝓝 sStar) (𝓝 (2 * t / 5)) := by
    have hc := (continuousAt_chiProd t).comp
      (continuousAt_const.prodMk (continuousAt_id : ContinuousAt (fun s : Fin 6 → ℝ => s) sStar))
    have hfun : (fun s : Fin 6 → ℝ => chiProd t t s) =
        (fun p : ℝ × (Fin 6 → ℝ) => chiProd t p.1 p.2) ∘ Prod.mk t := rfl
    rw [hfun]
    simpa [chiProd_center t] using hc.tendsto
  have htend : Tendsto (fun s : Fin 6 → ℝ => (s, chiProd t t s)) (𝓝 sStar)
      (𝓝 (sStar, 2 * t / 5)) :=
    tendsto_id.prodMk_nhds hχ
  have hiff' : ∀ᶠ s in 𝓝 sStar,
      univF s (chiProd t t s) = t ↔ chiOf s t = chiProd t t s := by
    have : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, 2 * t / 5),
        univF v.1 v.2 = t ↔ chiOf v.1 t = v.2 := by
      refine hiff.mono ?_
      intro v hv
      simpa [univF_sStar, chiOf] using hv
    exact htend.eventually this
  filter_upwards [hiff', hslice] with s hiffs hs
  exact hiffs.mp hs

lemma eventually_keplerIC_eq_propagator_diag (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, keplerIC s t = propagator t s t := by
  filter_upwards [eventually_chiOf_eq_chiProd_diag t] with s hs
  simp [keplerIC, propagator, hs]

lemma chiData_mem_source (t0 : ℝ) :
    (sStar, 2 * t0 / 5) ∈ (chiData t0).toOpenPartialHomeomorph.source :=
  (chiData t0).pt_mem_toOpenPartialHomeomorph_source

lemma chiData_left_inv {t0 : ℝ} {s : Fin 6 → ℝ} {χ : ℝ}
    (h : (s, χ) ∈ (chiData t0).toOpenPartialHomeomorph.source) :
    (chiData t0).implicitFunction (univF s χ) s = (s, χ) := by
  have hmap : (chiData t0).toOpenPartialHomeomorph (s, χ) = (univF s χ, s) := by
    rw [ImplicitFunctionData.toOpenPartialHomeomorph_coe, ImplicitFunctionData.prodFun_apply]
    simp [chiData_leftFun, chiData_rightFun, Function.uncurry]
  have hleft := (chiData t0).toOpenPartialHomeomorph.left_inv h
  simpa [ImplicitFunctionData.implicitFunction, Function.curry, hmap] using hleft

lemma chiProd_unique_of_mem_source {t0 : ℝ} {s : Fin 6 → ℝ} {χ : ℝ}
    (h : (s, χ) ∈ (chiData t0).toOpenPartialHomeomorph.source) :
    chiProd t0 (univF s χ) s = χ :=
  congrArg Prod.snd (chiData_left_inv h)

lemma continuousAt_chiProd_mem {t0 t : ℝ} {s : Fin 6 → ℝ}
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ContinuousAt (fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2) (t, s) :=
  continuousAt_snd.comp ((chiData t0).toOpenPartialHomeomorph.continuousAt_symm h)

lemma eventually_chiProd_sStar_eq (t0 : ℝ) :
    ∀ᶠ t in 𝓝 t0, chiProd t0 t sStar = 2 * t / 5 ∧
      (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have hT := (chiData_open_target t0).mem_nhds (chiData_target_mem t0)
  have hpath : Tendsto (fun t : ℝ => (t, sStar)) (𝓝 t0) (𝓝 (t0, sStar)) :=
    tendsto_id.prodMk_nhds tendsto_const_nhds
  filter_upwards [eventually_chiProd_sStar t0,
    hpath.eventually (Filter.eventually_of_mem hT fun _ h => h)] with t hχ ht
  exact ⟨hχ, ht⟩

lemma eventually_chiOf_eq_chiProd_slice_near (t0 t1 : ℝ)
    (hχ : chiProd t0 t1 sStar = 2 * t1 / 5)
    (ht : (t1, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ∀ᶠ s in 𝓝 sStar, chiOf s t1 = chiProd t0 t1 s := by
  have hiff := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t1 / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t1 / 5))
    (continuousAt_univF_f1 (2 * t1 / 5))
    (continuousAt_univF_f2 (2 * t1 / 5))
    (univF_f2_invertible t1)
  have hcont := continuousAt_chiProd_mem (t0 := t0) (t := t1) (s := sStar) ht
  have htend : Tendsto (fun s : Fin 6 → ℝ => (s, chiProd t0 t1 s)) (𝓝 sStar)
      (𝓝 (sStar, 2 * t1 / 5)) := by
    have hs : Tendsto (fun s : Fin 6 → ℝ => s) (𝓝 sStar) (𝓝 sStar) := tendsto_id
    have hχt : Tendsto (fun s : Fin 6 → ℝ => chiProd t0 t1 s) (𝓝 sStar)
        (𝓝 (2 * t1 / 5)) := by
      have hp : ContinuousAt (fun s : Fin 6 → ℝ => (t1, s)) sStar :=
        continuousAt_const.prodMk continuousAt_id
      have : Tendsto (fun s : Fin 6 → ℝ => chiProd t0 t1 s) (𝓝 sStar)
          (𝓝 (chiProd t0 t1 sStar)) :=
        (hcont.comp hp).tendsto
      simpa [hχ] using this
    exact hs.prodMk_nhds hχt
  have hF : ∀ᶠ s in 𝓝 sStar, univF s (chiProd t0 t1 s) = t1 := by
    have hpath : Tendsto (fun s : Fin 6 → ℝ => (t1, s)) (𝓝 sStar) (𝓝 (t1, sStar)) :=
      tendsto_const_nhds.prodMk_nhds tendsto_id
    have hnhds := (chiData_open_target t0).mem_nhds ht
    have hmem : ∀ᶠ s in 𝓝 sStar,
        (t1, s) ∈ (chiData t0).toOpenPartialHomeomorph.target :=
      hpath.eventually (Filter.eventually_of_mem hnhds fun _ h => h)
    filter_upwards [hmem] with s hs
    exact (chiData_right_inv t0 t1 s hs).1
  have hiff' : ∀ᶠ s in 𝓝 sStar,
      univF s (chiProd t0 t1 s) = t1 ↔ chiOf s t1 = chiProd t0 t1 s := by
    have : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, 2 * t1 / 5),
        univF v.1 v.2 = t1 ↔ chiOf v.1 t1 = v.2 := by
      refine hiff.mono ?_
      intro v hv
      simpa [univF_sStar, chiOf] using hv
    exact htend.eventually this
  filter_upwards [hiff', hF] with s hiffs hs
  exact hiffs.mp hs

lemma eventually_chiOf_eq_chiProd_near_times (t0 : ℝ) :
    ∀ᶠ t in 𝓝 t0, ∀ᶠ s in 𝓝 sStar, chiOf s t = chiProd t0 t s := by
  filter_upwards [eventually_chiProd_sStar_eq t0] with t ht
  exact eventually_chiOf_eq_chiProd_slice_near t0 t ht.1 ht.2

lemma chiData_open_source (t0 : ℝ) :
    IsOpen (chiData t0).toOpenPartialHomeomorph.source :=
  (chiData t0).toOpenPartialHomeomorph.open_source

lemma exists_ball_subset_chiData_source (t0 : ℝ) :
    ∃ r > (0 : ℝ), Metric.ball (sStar, 2 * t0 / 5) r ⊆
      (chiData t0).toOpenPartialHomeomorph.source :=
  Metric.mem_nhds_iff.mp
    ((chiData_open_source t0).mem_nhds (chiData_mem_source t0))

lemma chiOf_eq_chiProd_of_univF_mem_source {t0 t : ℝ} {s : Fin 6 → ℝ}
    (hF : univF s (chiOf s t) = t)
    (hsrc : (s, chiOf s t) ∈ (chiData t0).toOpenPartialHomeomorph.source) :
    chiOf s t = chiProd t0 t s :=
  (chiProd_unique_of_mem_source hsrc).symm.trans (by rw [hF])

lemma tendsto_chiProd_center_line (t0 : ℝ) :
    Tendsto (fun p : ℝ × (Fin 6 → ℝ) => (p.2, chiProd t0 p.1 p.2))
      (𝓝 (t0, sStar)) (𝓝 (sStar, 2 * t0 / 5)) := by
  have hs : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => p.2) (𝓝 (t0, sStar)) (𝓝 sStar) :=
    continuous_snd.continuousAt
  have hχ : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2)
      (𝓝 (t0, sStar)) (𝓝 (2 * t0 / 5)) := by
    simpa [chiProd_center t0] using (continuousAt_chiProd t0).tendsto
  exact hs.prodMk_nhds hχ

lemma tendsto_chiProd_sub_two_fifths (t0 : ℝ) :
    Tendsto (fun p : ℝ × (Fin 6 → ℝ) =>
        (p.2, chiProd t0 p.1 p.2) - (sStar, 2 * p.1 / 5))
      (𝓝 (t0, sStar)) (𝓝 0) := by
  have hγ := tendsto_chiProd_center_line t0
  have hc : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => (sStar, 2 * p.1 / 5))
      (𝓝 (t0, sStar)) (𝓝 (sStar, 2 * t0 / 5)) := by
    have h1 : Tendsto (fun _ : ℝ × (Fin 6 → ℝ) => sStar) (𝓝 (t0, sStar)) (𝓝 sStar) :=
      tendsto_const_nhds
    have h2 : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => 2 * p.1 / 5)
        (𝓝 (t0, sStar)) (𝓝 (2 * t0 / 5)) := by
      have : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => p.1) (𝓝 (t0, sStar)) (𝓝 t0) :=
        continuous_fst.continuousAt
      simpa using this.const_mul 2 |>.div_const 5
    exact h1.prodMk_nhds h2
  simpa [sub_eq_add_neg] using hγ.sub hc

lemma chiProd_mem_source {t0 t : ℝ} {s : Fin 6 → ℝ}
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    (s, chiProd t0 t s) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
  have hs := (chiData t0).toOpenPartialHomeomorph.map_target h
  have h1 : ((chiData t0).implicitFunction t s).1 = s := (chiData_right_inv t0 t s h).2
  change (chiData t0).implicitFunction t s ∈
      (chiData t0).toOpenPartialHomeomorph.source at hs
  have : (chiData t0).implicitFunction t s = (s, chiProd t0 t s) := by
    ext <;> simp [chiProd, h1]
  rwa [this] at hs

lemma eventually_chiProd_mem_source (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      (p.2, chiProd t0 p.1 p.2) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
  have hT : (chiData t0).toOpenPartialHomeomorph.target ∈ 𝓝 (t0, sStar) :=
    (chiData_open_target t0).mem_nhds (chiData_target_mem t0)
  filter_upwards [Filter.eventually_of_mem hT fun _ h => h] with p hp
  exact chiProd_mem_source hp

lemma eventually_dist_chiProd_center_line (t0 : ℝ) {r : ℝ} (hr : 0 < r) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      dist (p.2, chiProd t0 p.1 p.2) (sStar, 2 * p.1 / 5) < r := by
  have h0 := tendsto_chiProd_sub_two_fifths t0
  have hb : {q : (Fin 6 → ℝ) × ℝ | ‖q‖ < r} ∈ 𝓝 (0 : (Fin 6 → ℝ) × ℝ) := by
    simpa [Metric.ball, dist_eq_norm] using
      Metric.ball_mem_nhds (0 : (Fin 6 → ℝ) × ℝ) hr
  filter_upwards [h0.eventually hb] with p hp
  simpa [dist_eq_norm] using hp

lemma tendsto_chiOf (t : ℝ) :
    Tendsto (fun s : Fin 6 → ℝ => chiOf s t) (𝓝 sStar) (𝓝 (2 * t / 5)) := by
  have h := tendsto_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t)
  simpa [chiOf] using h

lemma tendsto_pair_chiOf (t : ℝ) :
    Tendsto (fun s : Fin 6 → ℝ => (s, chiOf s t)) (𝓝 sStar)
      (𝓝 (sStar, 2 * t / 5)) :=
  tendsto_id.prodMk_nhds (tendsto_chiOf t)

lemma eventually_pair_chiOf_mem_ball (t : ℝ) {ε : ℝ} (hε : 0 < ε) :
    ∀ᶠ s in 𝓝 sStar, dist (s, chiOf s t) (sStar, 2 * t / 5) < ε := by
  exact (tendsto_pair_chiOf t).eventually (Metric.ball_mem_nhds _ hε)

lemma dist_center_two_fifths (t0 t : ℝ) :
    dist (sStar, 2 * t / 5) (sStar, 2 * t0 / 5) = |2 * t / 5 - 2 * t0 / 5| := by
  rw [dist_prod_same_left, Real.dist_eq]

lemma exists_delta_center_in_half_ball (t0 : ℝ) {r : ℝ} (hr : 0 < r) :
    ∃ δ > (0 : ℝ), ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      dist (sStar, 2 * t / 5) (sStar, 2 * t0 / 5) < r / 2 := by
  refine ⟨r, hr, ?_⟩
  intro t ht
  have habs : |t - t0| ≤ r := abs_le.mpr ⟨by linarith [ht.1], by linarith [ht.2]⟩
  rw [dist_center_two_fifths,
    show 2 * t / 5 - 2 * t0 / 5 = (2 / 5) * (t - t0) by ring, abs_mul,
    abs_of_pos (by norm_num : (0 : ℝ) < 2 / 5)]
  nlinarith

lemma eventually_chiOf_mem_source_of_center (t0 t : ℝ) {r : ℝ}
    (hr : 0 < r)
    (hsub : Metric.ball (sStar, 2 * t0 / 5) r ⊆
      (chiData t0).toOpenPartialHomeomorph.source)
    (hctr : dist (sStar, 2 * t / 5) (sStar, 2 * t0 / 5) < r / 2) :
    ∀ᶠ s in 𝓝 sStar,
      (s, chiOf s t) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
  have hε : 0 < r / 2 := half_pos hr
  filter_upwards [eventually_pair_chiOf_mem_ball t hε] with s hs
  have hsum : dist (s, chiOf s t) (sStar, 2 * t / 5)
      + dist (sStar, 2 * t / 5) (sStar, 2 * t0 / 5) < r := by
    have : r / 2 + r / 2 = r := by ring
    linarith
  exact hsub ((dist_triangle _ (sStar, 2 * t / 5) _).trans_lt hsum)

lemma eventually_chiOf_eq_chiProd_of_source (t0 t : ℝ)
    (hmem : ∀ᶠ s in 𝓝 sStar,
      (s, chiOf s t) ∈ (chiData t0).toOpenPartialHomeomorph.source) :
    ∀ᶠ s in 𝓝 sStar, chiOf s t = chiProd t0 t s := by
  filter_upwards [eventually_univF_chiOf t, hmem] with s hF hsrc
  exact chiOf_eq_chiProd_of_univF_mem_source hF hsrc

lemma exists_Icc_chiOf_eq_chiProd_slice (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      ∀ᶠ s in 𝓝 sStar, chiOf s t = chiProd t0 t s := by
  obtain ⟨r, hr, hsub⟩ := exists_ball_subset_chiData_source t0
  obtain ⟨δ, hδ, hctr⟩ := exists_delta_center_in_half_ball t0 hr
  refine ⟨δ, hδ, ?_⟩
  intro t ht
  exact eventually_chiOf_eq_chiProd_of_source t0 t
    (eventually_chiOf_mem_source_of_center t0 t hr hsub (hctr t ht))

lemma exists_Icc_keplerIC_eq_propagator_slice (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      ∀ᶠ s in 𝓝 sStar, keplerIC s t = propagator t0 s t := by
  obtain ⟨δ, hδ, h⟩ := exists_Icc_chiOf_eq_chiProd_slice t0
  refine ⟨δ, hδ, ?_⟩
  intro t ht
  filter_upwards [h t ht] with s hs
  simp [keplerIC, propagator, hs]

lemma chiProd_sStar_of_mem_target {t0 t : ℝ}
    (ht : (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    chiProd t0 t sStar = 2 * t / 5 := by
  have hF := (chiData_right_inv t0 t sStar ht).1
  have : (5 / 2) * chiProd t0 t sStar = t := by
    rw [← univF_sStar, hF]
  linarith

lemma eventually_propagator_kepler_ball (t0 : ℝ) :
    ∃ r > (0 : ℝ), ∀ p : ℝ × (Fin 6 → ℝ),
      dist p (t0, sStar) < r →
        propagator t0 p.2 p.1 ≠ 0 ∧
          HasDerivAt (propagator t0 p.2) (propagatorVel t0 p.2 p.1) p.1 ∧
          HasDerivAt (propagatorVel t0 p.2)
            (-(1 / ‖propagator t0 p.2 p.1‖ ^ 3) • propagator t0 p.2 p.1) p.1 := by
  have h := eventually_propagator_kepler t0
  rcases Metric.mem_nhds_iff.mp h with ⟨r, hr, hsub⟩
  refine ⟨r, hr, ?_⟩
  intro p hp
  exact hsub hp

lemma eventually_propagator_kepler_prod (t0 t : ℝ) {r : ℝ}
    (hr : 0 < r)
    (hball : ∀ p : ℝ × (Fin 6 → ℝ), dist p (t0, sStar) < r →
      propagator t0 p.2 p.1 ≠ 0 ∧
        HasDerivAt (propagator t0 p.2) (propagatorVel t0 p.2 p.1) p.1 ∧
        HasDerivAt (propagatorVel t0 p.2)
          (-(1 / ‖propagator t0 p.2 p.1‖ ^ 3) • propagator t0 p.2 p.1) p.1)
    (ht : dist (t, sStar) (t0, sStar) < r) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      propagator t0 z.1 z.2 ≠ 0 ∧
        HasDerivAt (propagator t0 z.1) (propagatorVel t0 z.1 z.2) z.2 ∧
        HasDerivAt (propagatorVel t0 z.1)
          (-(1 / ‖propagator t0 z.1 z.2‖ ^ 3) • propagator t0 z.1 z.2) z.2 := by
  have hpos : 0 < r - dist (t, sStar) (t0, sStar) := sub_pos.mpr ht
  have hb : Metric.ball (t, sStar) (r - dist (t, sStar) (t0, sStar)) ∈ 𝓝 (t, sStar) :=
    Metric.ball_mem_nhds _ hpos
  have hφ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.2, z.1))
      (𝓝 (sStar, t)) (𝓝 (t, sStar)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  filter_upwards [hφ.eventually (Filter.eventually_of_mem hb fun _ hp => hp)] with z hz
  have hlt : dist (z.2, z.1) (t, sStar) < r - dist (t, sStar) (t0, sStar) :=
    Metric.mem_ball.mp hz
  have hsum : dist (z.2, z.1) (t0, sStar) < r := by
    have := dist_triangle (z.2, z.1) (t, sStar) (t0, sStar)
    linarith
  exact hball (z.2, z.1) hsum

lemma exists_Icc_propagator_kepler (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ᶠ s in 𝓝 sStar, ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      propagator t0 s t ≠ 0 ∧
        HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
        HasDerivAt (propagatorVel t0 s)
          (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t := by
  obtain ⟨r, hr, hball⟩ := eventually_propagator_kepler_ball t0
  let δ : ℝ := r / 2
  have hδ : 0 < δ := half_pos hr
  refine ⟨δ, hδ, ?_⟩
  have hK : IsCompact (Set.Icc (t0 - δ) (t0 + δ)) := isCompact_Icc
  refine hK.eventually_forall_of_forall_eventually (x₀ := sStar) ?_
  intro t ht
  have htball : dist (t, sStar) (t0, sStar) < r := by
    have habs : |t - t0| ≤ δ := abs_le.mpr ⟨by linarith [ht.1], by linarith [ht.2]⟩
    have hdist : dist (t, sStar) (t0, sStar) = |t - t0| := by
      simpa [Real.dist_eq] using dist_prod_same_right t t0 sStar
    have hδr : δ = r / 2 := rfl
    have hr2 : r / 2 < r := half_lt_self hr
    rw [hdist]
    linarith [habs, hδr, hr2]
  exact eventually_propagator_kepler_prod t0 t hr hball htball

lemma mem_chiData_target_of_center {t0 t : ℝ} {r : ℝ}
    (hsub : Metric.ball (sStar, 2 * t0 / 5) r ⊆
      (chiData t0).toOpenPartialHomeomorph.source)
    (hctr : dist (sStar, 2 * t / 5) (sStar, 2 * t0 / 5) < r) :
    (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have hsrc : (sStar, 2 * t / 5) ∈ (chiData t0).toOpenPartialHomeomorph.source :=
    hsub hctr
  have hmap := (chiData t0).toOpenPartialHomeomorph.map_source hsrc
  have hleft : (chiData t0).toOpenPartialHomeomorph (sStar, 2 * t / 5)
      = (t, sStar) := by
    rw [ImplicitFunctionData.toOpenPartialHomeomorph_coe,
      ImplicitFunctionData.prodFun_apply]
    simp [chiData_leftFun, chiData_rightFun, Function.uncurry, univF_sStar]
  rwa [hleft] at hmap

lemma eventually_chiProd_eq_two_fifths_prod (t0 t : ℝ)
    (ht : (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      univF z.1 (chiProd t0 z.2 z.1) = z.2 ∧
        (z.2, z.1) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have htarget : (chiData t0).toOpenPartialHomeomorph.target ∈ 𝓝 (t, sStar) :=
    (chiData_open_target t0).mem_nhds ht
  have hφ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.2, z.1))
      (𝓝 (sStar, t)) (𝓝 (t, sStar)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  filter_upwards [hφ.eventually (Filter.eventually_of_mem htarget fun _ h => h)]
    with z hz
  exact ⟨(chiData_right_inv t0 z.2 z.1 hz).1, hz⟩

noncomputable def keplerICVel (s : Fin 6 → ℝ) (t : ℝ) : Vec :=
  fDot s (chiOf s t) • statePos s + gDot s (chiOf s t) • stateVel s

def univFsub (p : (Fin 6 → ℝ) × ℝ) (χ : ℝ) : ℝ := univF p.1 χ - p.2

lemma univFsub_center (t : ℝ) : univFsub (sStar, t) (2 * t / 5) = 0 := by
  simp [univFsub, univF_sStar]

lemma tendsto_univFsub_stχ (t : ℝ) :
    Tendsto (fun v : ((Fin 6 → ℝ) × ℝ) × ℝ => (v.1.1, v.2))
      (𝓝 ((sStar, t), 2 * t / 5)) (𝓝 (sStar, 2 * t / 5)) :=
  (continuous_fst.continuousAt (x := ((sStar, t), 2 * t / 5))).fst.prodMk_nhds
    continuous_snd.continuousAt

lemma eventually_hasFDerivAt_univFsub_chi (t : ℝ) :
    ∀ᶠ v : ((Fin 6 → ℝ) × ℝ) × ℝ in 𝓝 ((sStar, t), 2 * t / 5),
      HasFDerivAt (fun χ => univFsub v.1 χ) (univF_f2 v.1.1 v.2) v.2 := by
  filter_upwards [tendsto_univFsub_stχ t |>.eventually
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))] with v hv
  simpa [univFsub] using hv.sub_const v.1.2

lemma eventually_hasFDerivAt_univFsub_st (t : ℝ) :
    ∀ᶠ v : ((Fin 6 → ℝ) × ℝ) × ℝ in 𝓝 ((sStar, t), 2 * t / 5),
      HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => univFsub p v.2)
        ((univF_f1 v.1.1 v.2).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
          ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ) v.1 := by
  have hcd : ContDiffAt ℝ 2 (Function.uncurry univF) (sStar, 2 * t / 5) :=
    (contDiffAt_uncurry_univF (2 * t / 5)).of_le (by exact le_top)
  have hopen : ∀ᶠ w : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, 2 * t / 5),
      ContDiffAt ℝ 2 (Function.uncurry univF) w :=
    hcd.eventually (by decide)
  filter_upwards [tendsto_univFsub_stχ t |>.eventually hopen] with v hvopen
  have hunc : HasFDerivAt (Function.uncurry univF)
      (fderiv ℝ (Function.uncurry univF) (v.1.1, v.2)) (v.1.1, v.2) :=
    (hvopen.differentiableAt (by decide)).hasFDerivAt
  have hpair : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => (p.1, v.2))
      ((ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ).prod 0) v.1 :=
    hasFDerivAt_fst.prodMk (hasFDerivAt_const _ _)
  have hF : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => univF p.1 v.2)
      ((univF_f1 v.1.1 v.2).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ)) v.1 := by
    have hcomp := hunc.comp v.1 hpair
    refine hcomp.congr_fderiv ?_
    apply ContinuousLinearMap.ext
    intro dp
    simp [univF_f1, ContinuousLinearMap.comp_apply, ContinuousLinearMap.prod_apply,
      ContinuousLinearMap.inl]
  have ht : HasFDerivAt (fun p : (Fin 6 → ℝ) × ℝ => p.2)
      (ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ) v.1 := hasFDerivAt_snd
  have hsub := hF.sub ht
  have hfun :
      (fun p : (Fin 6 → ℝ) × ℝ => univFsub p v.2) =
        (fun p => univF p.1 v.2) - fun p => p.2 := by
    funext p; rfl
  exact hfun ▸ hsub

lemma continuousAt_univFsub_f1 (t : ℝ) :
    ContinuousAt (Function.uncurry fun p χ =>
      (univF_f1 p.1 χ).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
        ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ)
      ((sStar, t), 2 * t / 5) := by
  have hf1 := continuousAt_univF_f1 (2 * t / 5)
  have hπ : ContinuousAt (fun v : ((Fin 6 → ℝ) × ℝ) × ℝ => (v.1.1, v.2))
      ((sStar, t), 2 * t / 5) :=
    (continuous_fst.continuousAt (x := ((sStar, t), 2 * t / 5))).fst.prodMk
      continuous_snd.continuousAt
  have hcomp : ContinuousAt
      ((Function.uncurry univF_f1) ∘
        fun q : ((Fin 6 → ℝ) × ℝ) × ℝ => (q.1.1, q.2))
      ((sStar, t), 2 * t / 5) :=
    ContinuousAt.comp (f := fun q : ((Fin 6 → ℝ) × ℝ) × ℝ => (q.1.1, q.2)) hf1 hπ
  have hL : Continuous
      (fun L : (Fin 6 → ℝ) →L[ℝ] ℝ =>
        L.comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
          ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ) :=
    (continuous_id.clm_comp continuous_const).sub continuous_const
  exact hL.continuousAt.comp hcomp

lemma continuousAt_univFsub_f2 (t : ℝ) :
    ContinuousAt (fun q : ((Fin 6 → ℝ) × ℝ) × ℝ => univF_f2 q.1.1 q.2)
      ((sStar, t), 2 * t / 5) := by
  have hf2 := continuousAt_univF_f2 (2 * t / 5)
  have hπ : ContinuousAt (fun v : ((Fin 6 → ℝ) × ℝ) × ℝ => (v.1.1, v.2))
      ((sStar, t), 2 * t / 5) :=
    (continuous_fst.continuousAt (x := ((sStar, t), 2 * t / 5))).fst.prodMk
      continuous_snd.continuousAt
  have : ContinuousAt
      ((Function.uncurry univF_f2) ∘
        fun q : ((Fin 6 → ℝ) × ℝ) × ℝ => (q.1.1, q.2))
      ((sStar, t), 2 * t / 5) :=
    ContinuousAt.comp (f := fun q : ((Fin 6 → ℝ) × ℝ) × ℝ => (q.1.1, q.2)) hf2 hπ
  simpa [Function.comp_def, Function.uncurry] using this

lemma univFsub_f2_invertible (t : ℝ) :
    (univF_f2 sStar (2 * t / 5)).IsInvertible :=
  univF_f2_invertible t

noncomputable def chiOfParam (t : ℝ) : (Fin 6 → ℝ) × ℝ → ℝ :=
  implicitFunctionOfBivariate
    (f := univFsub)
    (f₁ := fun p χ =>
      (univF_f1 p.1 χ).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
        ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ)
    (f₂ := fun p χ => univF_f2 p.1 χ)
    (eventually_hasFDerivAt_univFsub_st t)
    (eventually_hasFDerivAt_univFsub_chi t)
    (continuousAt_univFsub_f1 t)
    (continuousAt_univFsub_f2 t)
    (univFsub_f2_invertible t)

lemma eventually_univF_chiOfParam (t : ℝ) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      univF z.1 (chiOfParam t z) = z.2 := by
  have happly := eventually_apply_implicitFunctionOfBivariate
    (f := univFsub)
    (f₁ := fun p χ =>
      (univF_f1 p.1 χ).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
        ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ)
    (f₂ := fun p χ => univF_f2 p.1 χ)
    (eventually_hasFDerivAt_univFsub_st t)
    (eventually_hasFDerivAt_univFsub_chi t)
    (continuousAt_univFsub_f1 t)
    (continuousAt_univFsub_f2 t)
    (univFsub_f2_invertible t)
  filter_upwards [happly] with z hz
  have : univFsub z (chiOfParam t z) = univFsub (sStar, t) (2 * t / 5) := by
    simpa [chiOfParam] using hz
  have h0 : univFsub z (chiOfParam t z) = 0 := this.trans (univFsub_center t)
  exact sub_eq_zero.mp h0

lemma tendsto_chiOfParam (t : ℝ) :
    Tendsto (chiOfParam t) (𝓝 (sStar, t)) (𝓝 (2 * t / 5)) := by
  have h := tendsto_implicitFunctionOfBivariate
    (f := univFsub)
    (f₁ := fun p χ =>
      (univF_f1 p.1 χ).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
        ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ)
    (f₂ := fun p χ => univF_f2 p.1 χ)
    (eventually_hasFDerivAt_univFsub_st t)
    (eventually_hasFDerivAt_univFsub_chi t)
    (continuousAt_univFsub_f1 t)
    (continuousAt_univFsub_f2 t)
    (univFsub_f2_invertible t)
  simpa [chiOfParam] using h

lemma tendsto_pair_chiOfParam (t : ℝ) :
    Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.1, chiOfParam t z))
      (𝓝 (sStar, t)) (𝓝 (sStar, 2 * t / 5)) :=
  continuous_fst.continuousAt.prodMk_nhds (tendsto_chiOfParam t)

lemma eventually_chiOfParam_mem_source (t0 : ℝ) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t0),
      (z.1, chiOfParam t0 z) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
  have hsrc : (chiData t0).toOpenPartialHomeomorph.source ∈ 𝓝 (sStar, 2 * t0 / 5) :=
    (chiData_open_source t0).mem_nhds (chiData_mem_source t0)
  exact (tendsto_pair_chiOfParam t0).eventually
    (Filter.eventually_of_mem hsrc fun _ h => h)

lemma eventually_chiOfParam_eq_chiProd (t0 : ℝ) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t0),
      chiOfParam t0 z = chiProd t0 z.2 z.1 := by
  filter_upwards [eventually_univF_chiOfParam t0,
    eventually_chiOfParam_mem_source t0] with z hF hsrc
  exact (chiProd_unique_of_mem_source hsrc).symm.trans (by rw [hF])

lemma eventually_chiOf_eq_chiOfParam_slice (t : ℝ) :
    ∀ᶠ s in 𝓝 sStar, chiOf s t = chiOfParam t (s, t) := by
  have hiff := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (eventually_hasFDerivAt_univF_s (2 * t / 5))
    (eventually_hasFDerivAt_univF_chi (2 * t / 5))
    (continuousAt_univF_f1 (2 * t / 5))
    (continuousAt_univF_f2 (2 * t / 5))
    (univF_f2_invertible t)
  have hpath : Tendsto (fun s : Fin 6 → ℝ => (s, t)) (𝓝 sStar) (𝓝 (sStar, t)) :=
    tendsto_id.prodMk_nhds tendsto_const_nhds
  have hχ : Tendsto (fun s : Fin 6 → ℝ => (s, chiOfParam t (s, t))) (𝓝 sStar)
      (𝓝 (sStar, 2 * t / 5)) :=
    (tendsto_pair_chiOfParam t).comp hpath
  have hiff' : ∀ᶠ s in 𝓝 sStar,
      univF s (chiOfParam t (s, t)) = t ↔ chiOf s t = chiOfParam t (s, t) := by
    have : ∀ᶠ v : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, 2 * t / 5),
        univF v.1 v.2 = t ↔ chiOf v.1 t = v.2 := by
      refine hiff.mono ?_
      intro v hv
      simpa [univF_sStar, chiOf] using hv
    exact hχ.eventually this
  filter_upwards [hiff', hpath.eventually (eventually_univF_chiOfParam t)] with s hiffs hF
  exact hiffs.mp hF

lemma eventually_iff_chiOfParam (t : ℝ) :
    ∀ᶠ q : ((Fin 6 → ℝ) × ℝ) × ℝ in 𝓝 ((sStar, t), 2 * t / 5),
      univF q.1.1 q.2 = q.1.2 ↔ chiOfParam t q.1 = q.2 := by
  have h := eventually_apply_eq_iff_implicitFunctionOfBivariate
    (f := univFsub)
    (f₁ := fun p χ =>
      (univF_f1 p.1 χ).comp (ContinuousLinearMap.fst ℝ (Fin 6 → ℝ) ℝ) -
        ContinuousLinearMap.snd ℝ (Fin 6 → ℝ) ℝ)
    (f₂ := fun p χ => univF_f2 p.1 χ)
    (eventually_hasFDerivAt_univFsub_st t)
    (eventually_hasFDerivAt_univFsub_chi t)
    (continuousAt_univFsub_f1 t)
    (continuousAt_univFsub_f2 t)
    (univFsub_f2_invertible t)
  refine h.mono ?_
  intro q hq
  have hq' :
      univFsub q.1 q.2 = univFsub (sStar, t) (2 * t / 5) ↔
        chiOfParam t q.1 = q.2 := by
    simpa [chiOfParam] using hq
  have h0 : univF sStar (2 * t / 5) - t = 0 := univFsub_center t
  simpa [univFsub, h0, sub_eq_zero] using hq'

/-- Joint `univF s (chiOf s t) = t` by IFT left-inverse of `chiOfParam`,
composed with the continuous pairing `(s, t)` along `chiOfParam`
(which agrees with `chiOf` on the diagonal slice). The remaining
product identification `chiOf = chiProd` uses uniqueness on source. -/
lemma eventually_univF_chiOfParam_prod (t : ℝ) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      univF z.1 (chiOfParam t z) = z.2 :=
  eventually_univF_chiOfParam t

lemma eventually_chiOfParam_eq_chiProd_prod (t0 t : ℝ) {r : ℝ}
    (hr : 0 < r)
    (hball : ∀ p : ℝ × (Fin 6 → ℝ), dist p (t0, sStar) < r →
      chiOfParam t0 (p.2, p.1) = chiProd t0 p.1 p.2)
    (ht : dist (t, sStar) (t0, sStar) < r) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      chiOfParam t0 z = chiProd t0 z.2 z.1 := by
  have hpos : 0 < r - dist (t, sStar) (t0, sStar) := sub_pos.mpr ht
  have hb : Metric.ball (t, sStar) (r - dist (t, sStar) (t0, sStar)) ∈ 𝓝 (t, sStar) :=
    Metric.ball_mem_nhds _ hpos
  have hφ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.2, z.1))
      (𝓝 (sStar, t)) (𝓝 (t, sStar)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  filter_upwards [hφ.eventually (Filter.eventually_of_mem hb fun _ hp => hp)] with z hz
  have hlt : dist (z.2, z.1) (t, sStar) < r - dist (t, sStar) (t0, sStar) :=
    Metric.mem_ball.mp hz
  have hsum : dist (z.2, z.1) (t0, sStar) < r := by
    have := dist_triangle (z.2, z.1) (t, sStar) (t0, sStar)
    linarith
  simpa using hball (z.2, z.1) hsum

lemma eventually_chiOfParam_eq_chiProd_ball (t0 : ℝ) :
    ∃ r > (0 : ℝ), ∀ p : ℝ × (Fin 6 → ℝ),
      dist p (t0, sStar) < r →
        chiOfParam t0 (p.2, p.1) = chiProd t0 p.1 p.2 := by
  have h := eventually_chiOfParam_eq_chiProd t0
  have hφ : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => (p.2, p.1))
      (𝓝 (t0, sStar)) (𝓝 (sStar, t0)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  have h' : ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      chiOfParam t0 (p.2, p.1) = chiProd t0 p.1 p.2 :=
    hφ.eventually h
  rcases Metric.mem_nhds_iff.mp h' with ⟨r, hr, hsub⟩
  refine ⟨r, hr, ?_⟩
  intro p hp
  exact hsub hp

lemma exists_Icc_chiOfParam_eq_chiProd (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ᶠ s in 𝓝 sStar, ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      chiOfParam t0 (s, t) = chiProd t0 t s := by
  obtain ⟨r, hr, hball⟩ := eventually_chiOfParam_eq_chiProd_ball t0
  let δ : ℝ := r / 2
  have hδ : 0 < δ := half_pos hr
  refine ⟨δ, hδ, ?_⟩
  have hK : IsCompact (Set.Icc (t0 - δ) (t0 + δ)) := isCompact_Icc
  refine hK.eventually_forall_of_forall_eventually (x₀ := sStar) ?_
  intro t ht
  have htball : dist (t, sStar) (t0, sStar) < r := by
    have habs : |t - t0| ≤ δ := abs_le.mpr ⟨by linarith [ht.1], by linarith [ht.2]⟩
    have hdist : dist (t, sStar) (t0, sStar) = |t - t0| := by
      simpa [Real.dist_eq] using dist_prod_same_right t t0 sStar
    have hr2 : r / 2 < r := half_lt_self hr
    have hδr : δ = r / 2 := rfl
    rw [hdist]
    linarith [habs, hδr, hr2]
  exact eventually_chiOfParam_eq_chiProd_prod t0 t hr hball htball

/-! `keplerFlow`: local IFT propagator glued across finitely many `t0` charts. -/

lemma eventually_propagator_norm_eq (t0 : ℝ) :
    ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      ‖propagator t0 p.2 p.1‖ = univF_dchi p.2 (chiProd t0 p.1 p.2) := by
  filter_upwards [eventually_hasDerivAt_chiProd t0, eventually_univF_chiProd t0]
    with p hp ht
  simpa [propagator] using kepler_fg_norm (s := p.2) (t := p.1)
    (χ := chiProd t0 p.1 p.2) hp.1 ht hp.2.1

lemma tendsto_propagator_norm (t0 : ℝ) :
    Tendsto (fun p : ℝ × (Fin 6 → ℝ) => ‖propagator t0 p.2 p.1‖)
      (𝓝 (t0, sStar)) (𝓝 (5 / 2 : ℝ)) := by
  have hρ : Tendsto (fun p : ℝ × (Fin 6 → ℝ) =>
      univF_dchi p.2 (chiProd t0 p.1 p.2)) (𝓝 (t0, sStar)) (𝓝 (5 / 2)) := by
    have hpair : Tendsto (fun p : ℝ × (Fin 6 → ℝ) => (p.2, chiProd t0 p.1 p.2))
        (𝓝 (t0, sStar)) (𝓝 (sStar, 2 * t0 / 5)) :=
      continuous_snd.continuousAt.prodMk_nhds
        (by simpa [chiProd_center t0] using (continuousAt_chiProd t0).tendsto)
    simpa [Function.comp_def, univF_dchi_sStar] using
      (continuousAt_univF_dchi (2 * t0 / 5)).tendsto.comp hpair
  have heq :
      (fun p : ℝ × (Fin 6 → ℝ) => univF_dchi p.2 (chiProd t0 p.1 p.2)) =ᶠ[𝓝 (t0, sStar)]
        fun p => ‖propagator t0 p.2 p.1‖ :=
    (eventually_propagator_norm_eq t0).mono fun _ h => h.symm
  exact Tendsto.congr' heq hρ

lemma eventually_propagator_inShell_ball (t0 : ℝ) :
    ∃ r > (0 : ℝ), ∀ p : ℝ × (Fin 6 → ℝ),
      dist p (t0, sStar) < r → ‖propagator t0 p.2 p.1‖ ∈ Set.Icc (2 : ℝ) 3 := by
  have h : ∀ᶠ p : ℝ × (Fin 6 → ℝ) in 𝓝 (t0, sStar),
      ‖propagator t0 p.2 p.1‖ ∈ Set.Ioo (9 / 4 : ℝ) (11 / 4) :=
    (tendsto_propagator_norm t0).eventually
      (isOpen_Ioo.mem_nhds (by constructor <;> norm_num))
  rcases Metric.mem_nhds_iff.mp h with ⟨r, hr, hsub⟩
  refine ⟨r, hr, ?_⟩
  intro p hp
  have hioo : ‖propagator t0 p.2 p.1‖ ∈ Set.Ioo (9 / 4 : ℝ) (11 / 4) := hsub hp
  exactby linarith [hioo.1], by linarith [hioo.2]⟩

lemma eventually_propagator_inShell_prod (t0 t : ℝ) {r : ℝ}
    (hr : 0 < r)
    (hball : ∀ p : ℝ × (Fin 6 → ℝ), dist p (t0, sStar) < r →
      ‖propagator t0 p.2 p.1‖ ∈ Set.Icc (2 : ℝ) 3)
    (ht : dist (t, sStar) (t0, sStar) < r) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      ‖propagator t0 z.1 z.2‖ ∈ Set.Icc (2 : ℝ) 3 := by
  have hpos : 0 < r - dist (t, sStar) (t0, sStar) := sub_pos.mpr ht
  have hb : Metric.ball (t, sStar) (r - dist (t, sStar) (t0, sStar)) ∈ 𝓝 (t, sStar) :=
    Metric.ball_mem_nhds _ hpos
  have hφ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.2, z.1))
      (𝓝 (sStar, t)) (𝓝 (t, sStar)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  filter_upwards [hφ.eventually (Filter.eventually_of_mem hb fun _ hp => hp)] with z hz
  have hlt : dist (z.2, z.1) (t, sStar) < r - dist (t, sStar) (t0, sStar) :=
    Metric.mem_ball.mp hz
  have hsum : dist (z.2, z.1) (t0, sStar) < r := by
    have := dist_triangle (z.2, z.1) (t, sStar) (t0, sStar)
    linarith
  exact hball (z.2, z.1) hsum

lemma exists_Icc_propagator_inShell (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ᶠ s in 𝓝 sStar, ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3 := by
  obtain ⟨r, hr, hball⟩ := eventually_propagator_inShell_ball t0
  let δ : ℝ := r / 2
  have hδ : 0 < δ := half_pos hr
  refine ⟨δ, hδ, ?_⟩
  have hK : IsCompact (Set.Icc (t0 - δ) (t0 + δ)) := isCompact_Icc
  refine hK.eventually_forall_of_forall_eventually (x₀ := sStar) ?_
  intro t ht
  have htball : dist (t, sStar) (t0, sStar) < r := by
    have habs : |t - t0| ≤ δ := abs_le.mpr ⟨by linarith [ht.1], by linarith [ht.2]⟩
    have hdist : dist (t, sStar) (t0, sStar) = |t - t0| := by
      simpa [Real.dist_eq] using dist_prod_same_right t t0 sStar
    have hδr : δ = r / 2 := rfl
    have hr2 : r / 2 < r := half_lt_self hr
    rw [hdist]
    linarith [habs, hδr, hr2]
  exact eventually_propagator_inShell_prod t0 t hr hball htball

lemma exists_Icc_mem_chiData_target (t0 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ),
      (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have hT : (chiData t0).toOpenPartialHomeomorph.target ∈ 𝓝 (t0, sStar) :=
    (chiData_open_target t0).mem_nhds (chiData_target_mem t0)
  rcases Metric.mem_nhds_iff.mp hT with ⟨r, hr, hsub⟩
  refine ⟨r / 2, half_pos hr, ?_⟩
  intro t ht
  have habs : |t - t0| ≤ r / 2 := abs_le.mpr ⟨by linarith [ht.1], by linarith [ht.2]⟩
  have hdist : dist (t, sStar) (t0, sStar) = |t - t0| := by
    simpa [Real.dist_eq] using dist_prod_same_right t t0 sStar
  have : dist (t, sStar) (t0, sStar) < r := by
    rw [hdist]; linarith [habs, half_lt_self hr]
  exact hsub this

noncomputable def keplerChartRadius (t0 : ℝ) : ℝ :=
  min (Classical.choose (exists_Icc_propagator_kepler t0))
    (min (Classical.choose (exists_Icc_propagator_inShell t0))
      (Classical.choose (exists_Icc_mem_chiData_target t0)))

lemma keplerChartRadius_pos (t0 : ℝ) : 0 < keplerChartRadius t0 :=
  lt_min (Classical.choose_spec (exists_Icc_propagator_kepler t0)).1
    (lt_min (Classical.choose_spec (exists_Icc_propagator_inShell t0)).1
      (Classical.choose_spec (exists_Icc_mem_chiData_target t0)).1)

lemma eventually_keplerChart (t0 : ℝ) :
    ∀ᶠ s in 𝓝 sStar, ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0)
      (t0 + keplerChartRadius t0),
      propagator t0 s t ≠ 0 ∧
        HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
        HasDerivAt (propagatorVel t0 s)
          (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t ∧
        ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3 := by
  have hk := (Classical.choose_spec (exists_Icc_propagator_kepler t0)).2
  have hs := (Classical.choose_spec (exists_Icc_propagator_inShell t0)).2
  filter_upwards [hk, hs] with s hK hS t ht
  have htK : t ∈ Set.Icc (t0 - Classical.choose (exists_Icc_propagator_kepler t0))
      (t0 + Classical.choose (exists_Icc_propagator_kepler t0)) := by
    have : keplerChartRadius t0 ≤ Classical.choose (exists_Icc_propagator_kepler t0) :=
      min_le_left _ _
    refine ⟨?_, ?_⟩
    · linarith [ht.1, this]
    · linarith [ht.2, this]
  have htS : t ∈ Set.Icc (t0 - Classical.choose (exists_Icc_propagator_inShell t0))
      (t0 + Classical.choose (exists_Icc_propagator_inShell t0)) := by
    have : keplerChartRadius t0 ≤ Classical.choose (exists_Icc_propagator_inShell t0) :=
      (min_le_right _ _).trans (min_le_left _ _)
    refine ⟨?_, ?_⟩
    · linarith [ht.1, this]
    · linarith [ht.2, this]
  exact ⟨(hK t htK).1, (hK t htK).2.1, (hK t htK).2.2, hS t htS⟩

lemma continuousAt_chiProd_of_mem_target {t0 t : ℝ} {s : Fin 6 → ℝ}
    (h : (t, s) ∈ (chiData t0).toOpenPartialHomeomorph.target) :
    ContinuousAt (fun p : ℝ × (Fin 6 → ℝ) => chiProd t0 p.1 p.2) (t, s) :=
  continuousAt_snd.comp
    ((chiData t0).toOpenPartialHomeomorph.continuousAt_symm h)

lemma eventually_chiProd_agree_slice (t0 t1 t : ℝ)
    (ht0 : (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target)
    (ht1 : (t, sStar) ∈ (chiData t1).toOpenPartialHomeomorph.target) :
    ∀ᶠ s in 𝓝 sStar, chiProd t0 t s = chiProd t1 t s := by
  have hF1 : ∀ᶠ s in 𝓝 sStar, univF s (chiProd t1 t s) = t := by
    have hpath : Tendsto (fun s : Fin 6 → ℝ => (t, s)) (𝓝 sStar) (𝓝 (t, sStar)) :=
      tendsto_const_nhds.prodMk_nhds tendsto_id
    have hT : (chiData t1).toOpenPartialHomeomorph.target ∈ 𝓝 (t, sStar) :=
      (chiData_open_target t1).mem_nhds ht1
    exact hpath.eventually (Filter.eventually_of_mem hT fun p hp =>
      (chiData_right_inv t1 p.1 p.2 hp).1)
  have hsrc : (sStar, 2 * t / 5) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
    have := chiProd_mem_source ht0
    rwa [chiProd_sStar_of_mem_target ht0] at this
  have hsrcN : (chiData t0).toOpenPartialHomeomorph.source ∈
      𝓝 (sStar, 2 * t / 5) :=
    (chiData_open_source t0).mem_nhds hsrc
  have hχ : Tendsto (fun s : Fin 6 → ℝ => (s, chiProd t1 t s)) (𝓝 sStar)
      (𝓝 (sStar, 2 * t / 5)) := by
    have hval : Tendsto (fun s : Fin 6 → ℝ => chiProd t1 t s) (𝓝 sStar)
        (𝓝 (2 * t / 5)) := by
      have hc := continuousAt_chiProd_of_mem_target ht1
      have hp : Tendsto (fun s : Fin 6 → ℝ => (t, s)) (𝓝 sStar) (𝓝 (t, sStar)) :=
        tendsto_const_nhds.prodMk_nhds tendsto_id
      simpa [Function.comp_def, chiProd_sStar_of_mem_target ht1] using
        hc.tendsto.comp hp
    exact tendsto_id.prodMk_nhds hval
  filter_upwards [hF1, hχ.eventually (Filter.eventually_of_mem hsrcN fun _ h => h)]
    with s hF hsrcs
  have huniq := chiProd_unique_of_mem_source hsrcs
  rw [hF] at huniq
  exact huniq

lemma eventually_chiProd_agree_prod (t0 t1 t : ℝ)
    (ht0 : (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target)
    (ht1 : (t, sStar) ∈ (chiData t1).toOpenPartialHomeomorph.target) :
    ∀ᶠ z : (Fin 6 → ℝ) × ℝ in 𝓝 (sStar, t),
      chiProd t0 z.2 z.1 = chiProd t1 z.2 z.1 := by
  have hφ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.2, z.1))
      (𝓝 (sStar, t)) (𝓝 (t, sStar)) :=
    continuous_snd.continuousAt.prodMk_nhds continuous_fst.continuousAt
  have hT1 : (chiData t1).toOpenPartialHomeomorph.target ∈ 𝓝 (t, sStar) :=
    (chiData_open_target t1).mem_nhds ht1
  have hsrc : (sStar, 2 * t / 5) ∈ (chiData t0).toOpenPartialHomeomorph.source := by
    have := chiProd_mem_source ht0
    rwa [chiProd_sStar_of_mem_target ht0] at this
  have hsrcN : (chiData t0).toOpenPartialHomeomorph.source ∈ 𝓝 (sStar, 2 * t / 5) :=
    (chiData_open_source t0).mem_nhds hsrc
  have hχ : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => (z.1, chiProd t1 z.2 z.1))
      (𝓝 (sStar, t)) (𝓝 (sStar, 2 * t / 5)) := by
    have hc := continuousAt_chiProd_of_mem_target ht1
    have hval : Tendsto (fun z : (Fin 6 → ℝ) × ℝ => chiProd t1 z.2 z.1)
        (𝓝 (sStar, t)) (𝓝 (2 * t / 5)) := by
      simpa [Function.comp_def, chiProd_sStar_of_mem_target ht1] using
        hc.tendsto.comp hφ
    exact continuous_fst.continuousAt.prodMk_nhds hval
  filter_upwards [hφ.eventually (Filter.eventually_of_mem hT1 fun p hp =>
      (chiData_right_inv t1 p.1 p.2 hp).1),
    hχ.eventually (Filter.eventually_of_mem hsrcN fun _ h => h)] with z hF hsrcz
  have := chiProd_unique_of_mem_source (t0 := t0) hsrcz
  rw [hF] at this
  exact this

lemma exists_Icc_chiProd_agree (t0 t1 : ℝ) :
    ∃ δ > (0 : ℝ), ∀ᶠ s in 𝓝 sStar,
      ∀ t ∈ Set.Icc (t0 - δ) (t0 + δ) ∩ Set.Icc (t1 - δ) (t1 + δ),
        chiProd t0 t s = chiProd t1 t s := by
  obtain ⟨δ0, hδ0, ht0⟩ := exists_Icc_mem_chiData_target t0
  obtain ⟨δ1, hδ1, ht1⟩ := exists_Icc_mem_chiData_target t1
  let δ : ℝ := min δ0 δ1
  have hδ : 0 < δ := lt_min hδ0 hδ1
  refine ⟨δ, hδ, ?_⟩
  have hK : IsCompact
      (Set.Icc (t0 - δ) (t0 + δ) ∩ Set.Icc (t1 - δ) (t1 + δ)) :=
    isCompact_Icc.inter isCompact_Icc
  refine hK.eventually_forall_of_forall_eventually (x₀ := sStar) ?_
  intro t ht
  have h0 : t ∈ Set.Icc (t0 - δ0) (t0 + δ0) := by
    have := min_le_left δ0 δ1
    exactby linarith [ht.1.1], by linarith [ht.1.2]⟩
  have h1 : t ∈ Set.Icc (t1 - δ1) (t1 + δ1) := by
    have := min_le_right δ0 δ1
    exactby linarith [ht.2.1], by linarith [ht.2.2]⟩
  exact eventually_chiProd_agree_prod t0 t1 t (ht0 t h0) (ht1 t h1)

lemma exists_finite_chart_cover :
    ∃ F : Finset ℝ,
      Set.Icc (0 : ℝ) 1 ⊆ ⋃ t0 ∈ F,
        Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) := by
  let U : ℝ → Set ℝ := fun t0 =>
    Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0)
  have hopen : ∀ t0, IsOpen (U t0) := fun _ => isOpen_Ioo
  have hcov : Set.Icc (0 : ℝ) 1 ⊆ ⋃ t0, U t0 := by
    intro t ht
    refine Set.mem_iUnion.2 ⟨t, ?_⟩
    have hδ := keplerChartRadius_pos t
    exact Set.mem_Ioo.2 ⟨sub_lt_self _ hδ, lt_add_of_pos_right _ hδ⟩
  obtain ⟨F, hF⟩ := isCompact_Icc.elim_finite_subcover U hopen hcov
  exact ⟨F, hF⟩

noncomputable def packCover : Finset ℝ :=
  Classical.choose exists_finite_chart_cover

lemma packCover_covers :
    Set.Icc (0 : ℝ) 1 ⊆ ⋃ t0 ∈ packCover,
      Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) :=
  Classical.choose_spec exists_finite_chart_cover

noncomputable def pickChart (t : ℝ) : ℝ :=
  if h : ∃ t0 ∈ packCover, t ∈ Set.Ioo (t0 - keplerChartRadius t0)
      (t0 + keplerChartRadius t0) then
    Classical.choose h
  else
    0

lemma pickChart_spec {t : ℝ}
    (h : ∃ t0 ∈ packCover, t ∈ Set.Ioo (t0 - keplerChartRadius t0)
      (t0 + keplerChartRadius t0)) :
    pickChart t ∈ packCover ∧
      t ∈ Set.Ioo (pickChart t - keplerChartRadius (pickChart t))
        (pickChart t + keplerChartRadius (pickChart t)) := by
  simp only [pickChart, dif_pos h]
  exact Classical.choose_spec h

lemma pickChart_spec_of_Icc {t : ℝ} (ht : t ∈ Set.Icc (0 : ℝ) 1) :
    pickChart t ∈ packCover ∧
      t ∈ Set.Ioo (pickChart t - keplerChartRadius (pickChart t))
        (pickChart t + keplerChartRadius (pickChart t)) := by
  have h := packCover_covers ht
  rw [Set.mem_iUnion₂] at h
  rcases h with ⟨t0, ht0, htoo⟩
  exact pickChart_spec ⟨t0, ht0, htoo⟩

noncomputable def keplerFlow (s : Fin 6 → ℝ) (t : ℝ) : Vec :=
  propagator (pickChart t) s t

noncomputable def keplerFlowVel (s : Fin 6 → ℝ) (t : ℝ) : Vec :=
  propagatorVel (pickChart t) s t

lemma eventually_forall_finset {α β : Type*} {l : Filter α} {s : Finset β}
    {p : β → α → Prop} (h : ∀ i ∈ s, ∀ᶠ x in l, p i x) :
    ∀ᶠ x in l, ∀ i ∈ s, p i x := by
  classical
  have := (Filter.eventually_all (ι := s)).2 fun i => h i.1 i.2
  filter_upwards [this] with x hx i hi
  exact hx ⟨i, hi⟩

lemma eventually_packCover_kepler :
    ∀ᶠ s in 𝓝 sStar, ∀ t0 ∈ packCover,
      ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0),
        propagator t0 s t ≠ 0 ∧
          HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
          HasDerivAt (propagatorVel t0 s)
            (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t ∧
          ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3 :=
  eventually_forall_finset fun t0 _ => eventually_keplerChart t0

lemma mem_target_of_keplerIcc {t0 t : ℝ}
    (ht : t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0)) :
    (t, sStar) ∈ (chiData t0).toOpenPartialHomeomorph.target := by
  have hδ := (Classical.choose_spec (exists_Icc_mem_chiData_target t0)).2
  have hle : keplerChartRadius t0 ≤
      Classical.choose (exists_Icc_mem_chiData_target t0) :=
    (min_le_right _ _).trans (min_le_right _ _)
  have ht' : t ∈ Set.Icc (t0 - Classical.choose (exists_Icc_mem_chiData_target t0))
      (t0 + Classical.choose (exists_Icc_mem_chiData_target t0)) :=
    ⟨by linarith [ht.1, hle], by linarith [ht.2, hle]⟩
  exact hδ t ht'

lemma eventually_packCover_chiProd_agree :
    ∀ᶠ s in 𝓝 sStar, ∀ t0 ∈ packCover, ∀ t1 ∈ packCover,
      ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
          Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
        chiProd t0 t s = chiProd t1 t s := by
  have h : ∀ t0 ∈ packCover, ∀ t1 ∈ packCover,
      ∀ᶠ s in 𝓝 sStar,
        ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
            Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
          chiProd t0 t s = chiProd t1 t s := by
    intro t0 _ t1 _
    have hK : IsCompact
        (Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
          Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1)) :=
      isCompact_Icc.inter isCompact_Icc
    refine hK.eventually_forall_of_forall_eventually (x₀ := sStar) ?_
    intro t ht
    exact eventually_chiProd_agree_prod t0 t1 t
      (mem_target_of_keplerIcc ht.1) (mem_target_of_keplerIcc ht.2)
  exact eventually_forall_finset fun t0 ht0 =>
    eventually_forall_finset fun t1 ht1 => h t0 ht0 t1 ht1

lemma Ioo_subset_Icc_chart (t0 : ℝ) :
    Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ⊆
      Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) :=
  Set.Ioo_subset_Icc_self

lemma propagator_eq_of_chiProd {t0 t1 t : ℝ} {s : Fin 6 → ℝ}
    (h : chiProd t0 t s = chiProd t1 t s) :
    propagator t0 s t = propagator t1 s t := by
  simp [propagator, h]

lemma eventually_pack_ball :
    ∀ᶠ s in 𝓝 sStar,
      (∀ t0 ∈ packCover, ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0)
          (t0 + keplerChartRadius t0),
        propagator t0 s t ≠ 0 ∧
          HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
          HasDerivAt (propagatorVel t0 s)
            (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t ∧
          ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3) ∧
      (∀ t0 ∈ packCover, ∀ t1 ∈ packCover,
        ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
            Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
          chiProd t0 t s = chiProd t1 t s) :=
  eventually_packCover_kepler.and eventually_packCover_chiProd_agree

lemma exists_keplerFlow_ball :
    ∃ r > (0 : ℝ), ∀ s : Fin 6 → ℝ, ‖s - sStar‖ < r →
      (∀ t0 ∈ packCover, ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0)
          (t0 + keplerChartRadius t0),
        propagator t0 s t ≠ 0 ∧
          HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
          HasDerivAt (propagatorVel t0 s)
            (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t ∧
          ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3) ∧
      (∀ t0 ∈ packCover, ∀ t1 ∈ packCover,
        ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
            Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
          chiProd t0 t s = chiProd t1 t s) := by
  have h := eventually_pack_ball
  rcases Metric.mem_nhds_iff.mp h with ⟨r, hr, hsub⟩
  refine ⟨r, hr, ?_⟩
  intro s hs
  have : dist s sStar < r := by rwa [dist_eq_norm]
  exact hsub this

lemma keplerFlow_eq_propagator_of {s : Fin 6 → ℝ} {t t0 : ℝ}
    (hcov : t0 ∈ packCover)
    (htoo : t ∈ Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0))
    (hag : ∀ t1 ∈ packCover,
      ∀ τ ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
          Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
        chiProd t0 τ s = chiProd t1 τ s) :
    keplerFlow s t = propagator t0 s t := by
  have hex : ∃ t1 ∈ packCover,
      t ∈ Set.Ioo (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1) :=
    ⟨t0, hcov, htoo⟩
  have hpick := pickChart_spec hex
  have htI : t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
      Set.Icc (pickChart t - keplerChartRadius (pickChart t))
        (pickChart t + keplerChartRadius (pickChart t)) :=
    ⟨Set.Ioo_subset_Icc_self htoo, Set.Ioo_subset_Icc_self hpick.2⟩
  have hχ := hag (pickChart t) hpick.1 t htI
  simpa [keplerFlow] using propagator_eq_of_chiProd hχ.symm

lemma eventuallyEq_keplerFlow_propagator {s : Fin 6 → ℝ} {t t0 : ℝ}
    (hcov : t0 ∈ packCover)
    (htoo : t ∈ Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0))
    (hag : ∀ t1 ∈ packCover,
      ∀ τ ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
          Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
        chiProd t0 τ s = chiProd t1 τ s) :
    keplerFlow s =ᶠ[𝓝 t] propagator t0 s := by
  have hN : Set.Ioo (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∈ 𝓝 t :=
    Ioo_mem_nhds htoo.1 htoo.2
  refine Filter.eventually_of_mem hN ?_
  intro τ hτ
  exact keplerFlow_eq_propagator_of hcov hτ hag

lemma isTarget_keplerFlow_of {s : Fin 6 → ℝ} {r : ℝ}
    (hr : ∀ t0 ∈ packCover, ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0)
        (t0 + keplerChartRadius t0),
      propagator t0 s t ≠ 0 ∧
        HasDerivAt (propagator t0 s) (propagatorVel t0 s t) t ∧
        HasDerivAt (propagatorVel t0 s)
          (-(1 / ‖propagator t0 s t‖ ^ 3) • propagator t0 s t) t ∧
        ‖propagator t0 s t‖ ∈ Set.Icc (2 : ℝ) 3)
    (hag : ∀ t0 ∈ packCover, ∀ t1 ∈ packCover,
      ∀ t ∈ Set.Icc (t0 - keplerChartRadius t0) (t0 + keplerChartRadius t0) ∩
          Set.Icc (t1 - keplerChartRadius t1) (t1 + keplerChartRadius t1),
        chiProd t0 t s = chiProd t1 t s) :
    IsTarget (1 : ℝ) 2 3 1 (keplerFlow s) := by
  refine ⟨?_, ?_⟩
  · refine ⟨keplerFlowVel s, ?_, ?_, ?_⟩
    · intro t ht
      have hpc := pickChart_spec_of_Icc ht
      have hI := Set.Ioo_subset_Icc_self hpc.2
      have hne := (hr (pickChart t) hpc.1 t hI).1
      have heq := keplerFlow_eq_propagator_of hpc.1 hpc.2 (hag (pickChart t) hpc.1)
      simpa [heq]
    · intro t ht
      have hpc := pickChart_spec_of_Icc ht
      have hI := Set.Ioo_subset_Icc_self hpc.2
      have hder := (hr (pickChart t) hpc.1 t hI).2.1
      have hev := eventuallyEq_keplerFlow_propagator hpc.1 hpc.2
        (hag (pickChart t) hpc.1)
      have hval := keplerFlow_eq_propagator_of hpc.1 hpc.2 (hag (pickChart t) hpc.1)
      have : keplerFlowVel s t = propagatorVel (pickChart t) s t := rfl
      exact (hder.congr_of_eventuallyEq hev).congr_deriv (by simp [keplerFlowVel, hval])
    · intro t ht
      have hpc := pickChart_spec_of_Icc ht
      have hI := Set.Ioo_subset_Icc_self hpc.2
      have hder := (hr (pickChart t) hpc.1 t hI).2.2.1
      have hne := (hr (pickChart t) hpc.1 t hI).1
      have heq := keplerFlow_eq_propagator_of hpc.1 hpc.2 (hag (pickChart t) hpc.1)
      have hev : keplerFlowVel s =ᶠ[𝓝 t] propagatorVel (pickChart t) s := by
        have hN : Set.Ioo (pickChart t - keplerChartRadius (pickChart t))
            (pickChart t + keplerChartRadius (pickChart t)) ∈ 𝓝 t :=
          Ioo_mem_nhds hpc.2.1 hpc.2.2
        refine Filter.eventually_of_mem hN ?_
        intro τ hτ
        have hpcτ := pickChart_spec ⟨pickChart t, hpc.1, hτ⟩
        have hχ := hag (pickChart t) hpc.1 (pickChart τ) hpcτ.1 τ
          ⟨Set.Ioo_subset_Icc_self hτ, Set.Ioo_subset_Icc_self hpcτ.2⟩
        simp [keplerFlowVel, propagatorVel, hχ]
      refine (hder.congr_of_eventuallyEq hev).congr_deriv ?_
      simp [heq]
  · intro t ht
    have hpc := pickChart_spec_of_Icc ht
    have hI := Set.Ioo_subset_Icc_self hpc.2
    have hsh := (hr (pickChart t) hpc.1 t hI).2.2.2
    have heq := keplerFlow_eq_propagator_of hpc.1 hpc.2 (hag (pickChart t) hpc.1)
    simpa [heq] using hsh

lemma eventually_keplerFlow_eq_keplerIC_at (t : ℝ) (ht : t ∈ Set.Icc (0 : ℝ) 1) :
    ∀ᶠ s in 𝓝 sStar, keplerFlow s t = keplerIC s t := by
  have hpc := pickChart_spec_of_Icc ht
  have hI := Set.Ioo_subset_Icc_self hpc.2
  filter_upwards [eventually_keplerIC_eq_propagator_diag t,
    eventually_chiProd_agree_slice (pickChart t) t t
      (mem_target_of_keplerIcc hI) (chiData_target_mem t),
    eventually_pack_ball] with s hdiag hχ hp
  have heq := keplerFlow_eq_propagator_of hpc.1 hpc.2 (hp.2 (pickChart t) hpc.1)
  have hprop : propagator (pickChart t) s t = propagator t s t :=
    propagator_eq_of_chiProd hχ
  exact heq.trans (hprop.trans hdiag.symm)

lemma eventually_sample_keplerIC_eq_flow :
    ∀ᶠ s in 𝓝 sStar,
      keplerFlow s 0 = keplerIC s 0 ∧
      keplerFlow s (1 / 4 : ℝ) = keplerIC s (1 / 4) ∧
      keplerFlow s (1 / 2 : ℝ) = keplerIC s (1 / 2) ∧
      keplerFlow s 1 = keplerIC s 1 := by
  filter_upwards [
    eventually_keplerFlow_eq_keplerIC_at 0 (by constructor <;> norm_num),
    eventually_keplerFlow_eq_keplerIC_at (1 / 4) (by constructor <;> norm_num),
    eventually_keplerFlow_eq_keplerIC_at (1 / 2) (by constructor <;> norm_num),
    eventually_keplerFlow_eq_keplerIC_at 1 (by constructor <;> norm_num)] with s a b c d
  exact ⟨a, b, c, d⟩

lemma secondDiff_eq_of {f g : ℝ → Vec} {h : ℝ}
    (h0 : f 0 = g 0) (hh : f h = g h) (h2 : f (2 * h) = g (2 * h)) :
    secondDiff f h = secondDiff g h := by
  unfold secondDiff
  rw [h0, hh, h2]

lemma sdCart_eq_flow {s : Fin 6 → ℝ}
    (h : keplerFlow s 0 = keplerIC s 0 ∧
      keplerFlow s (1 / 4 : ℝ) = keplerIC s (1 / 4) ∧
      keplerFlow s (1 / 2 : ℝ) = keplerIC s (1 / 2) ∧
      keplerFlow s 1 = keplerIC s 1) :
    sdCart s =
      sdPairCoord
        (secondDiff (fun t => los obs (keplerFlow s) t) hSD1)
        (secondDiff (fun t => los obs (keplerFlow s) t) hSD2) := by
  have L : ∀ t, keplerIC s t = keplerFlow s t →
      los obs (keplerIC s) t = los obs (keplerFlow s) t := by
    intro t ht; unfold los; rw [ht]
  have t14 : hSD1 = (1 / 4 : ℝ) := by unfold hSD1; norm_num
  have t12 : hSD2 = (1 / 2 : ℝ) := by unfold hSD2; norm_num
  have t2s : 2 * hSD1 = (1 / 2 : ℝ) := by unfold hSD1; norm_num
  have t21 : 2 * hSD2 = (1 : ℝ) := by unfold hSD2; norm_num
  have e1 := secondDiff_eq_of
    (L 0 h.1.symm)
    (L hSD1 (t14 ▸ h.2.1.symm))
    (L (2 * hSD1) (t2s ▸ h.2.2.1.symm))
  have e2 := secondDiff_eq_of
    (L 0 h.1.symm)
    (L hSD2 (t12 ▸ h.2.2.1.symm))
    (L (2 * hSD2) (t21 ▸ h.2.2.2.symm))
  exact congrArg₂ sdPairCoord e1 e2

lemma not_both_recovered_flow {ε : ℝ} {ξ : ℝ → Vec} {x y : Fin 6 → ℝ}
    (hxeq : keplerFlow x 0 = keplerIC x 0 ∧
      keplerFlow x (1 / 4 : ℝ) = keplerIC x (1 / 4) ∧
      keplerFlow x (1 / 2 : ℝ) = keplerIC x (1 / 2) ∧
      keplerFlow x 1 = keplerIC x 1)
    (hyeq : keplerFlow y 0 = keplerIC y 0 ∧
      keplerFlow y (1 / 4 : ℝ) = keplerIC y (1 / 4) ∧
      keplerFlow y (1 / 2 : ℝ) = keplerIC y (1 / 2) ∧
      keplerFlow y 1 = keplerIC y 1)
    (hε : 0 ≤ ε) (hsep : 8 * ε < ‖sdCart y - sdCart x‖)
    (hx : RecoveredBy obs ε 1 ξ (keplerFlow x))
    (hy : RecoveredBy obs ε 1 ξ (keplerFlow y)) : False := by
  have hx' := sdCart_eq_flow hxeq
  have hy' := sdCart_eq_flow hyeq
  have hdiff : sdCart y - sdCart x =
      sdPairCoord
        (secondDiff (fun t => los obs (keplerFlow y) t - los obs (keplerFlow x) t) hSD1)
        (secondDiff (fun t => los obs (keplerFlow y) t - los obs (keplerFlow x) t) hSD2) := by
    rw [hx', hy']
    simp [sdPairCoord_sub, secondDiff_sub]
  rw [hdiff] at hsep
  set w1 := secondDiff (fun t => los obs (keplerFlow y) t - los obs (keplerFlow x) t) hSD1
  set w2 := secondDiff (fun t => los obs (keplerFlow y) t - los obs (keplerFlow x) t) hSD2
  have hmax : ∃ i, 8 * ε < |sdPairCoord w1 w2 i| := by
    by_contra hnone
    push_neg at hnone
    have : ‖sdPairCoord w1 w2‖ ≤ 8 * ε :=
      (pi_norm_le_iff_of_nonneg (by positivity)).2 fun i => by
        simpa [Real.norm_eq_abs] using hnone i
    exact (hsep.trans_le this).false
  obtain ⟨i, hi⟩ := hmax
  fin_cases i
  · exact not_both_recovered hSD1_window (hi.trans_le (coord_le_euclidean w1 0)) hy hx
  · exact not_both_recovered hSD1_window (hi.trans_le (coord_le_euclidean w1 1)) hy hx
  · exact not_both_recovered hSD1_window (hi.trans_le (coord_le_euclidean w1 2)) hy hx
  · exact not_both_recovered hSD2_window (hi.trans_le (coord_le_euclidean w2 0)) hy hx
  · exact not_both_recovered hSD2_window (hi.trans_le (coord_le_euclidean w2 1)) hy hx
  · exact not_both_recovered hSD2_window (hi.trans_le (coord_le_euclidean w2 2)) hy hx

lemma exists_pack_radius :
    ∃ σ r : ℝ, 0 < σ ∧ 0 < r ∧
      (∀ s : Fin 6 → ℝ, ‖s - sStar‖ < r → IsTarget (1 : ℝ) 2 3 1 (keplerFlow s)) ∧
      (∀ s : Fin 6 → ℝ, ‖s - sStar‖ < r →
        keplerFlow s 0 = keplerIC s 0 ∧
          keplerFlow s (1 / 4 : ℝ) = keplerIC s (1 / 4) ∧
          keplerFlow s (1 / 2 : ℝ) = keplerIC s (1 / 2) ∧
          keplerFlow s 1 = keplerIC s 1) ∧
      (∀ x y : Fin 6 → ℝ, ‖x - sStar‖ < r → ‖y - sStar‖ < r →
        σ * ‖y - x‖ ≤ ‖sdCart y - sdCart x‖) := by
  obtain ⟨σ, r1, hσ, hr1, hlin⟩ := exists_sdCart_linear
  obtain ⟨r2, hr2, hflow⟩ := exists_keplerFlow_ball
  obtain ⟨r3, hr3, hsamp⟩ := Metric.mem_nhds_iff.mp eventually_sample_keplerIC_eq_flow
  let r : ℝ := min r1 (min r2 r3)
  have hr : 0 < r := lt_min hr1 (lt_min hr2 hr3)
  refine ⟨σ, r, hσ, hr, ?_, ?_, ?_⟩
  · intro s hs
    have hs2 : ‖s - sStar‖ < r2 :=
      hs.trans_le ((min_le_right r1 (min r2 r3)).trans (min_le_left r2 r3))
    have hf := hflow s hs2
    exact isTarget_keplerFlow_of (r := r2) hf.1 hf.2
  · intro s hs
    have hs3 : dist s sStar < r3 := by
      have : ‖s - sStar‖ < r3 :=
        hs.trans_le ((min_le_right r1 (min r2 r3)).trans (min_le_right r2 r3))
      rwa [dist_eq_norm]
    exact hsamp (Metric.mem_ball.mpr hs3)
  · intro x y hx hy
    exact hlin x y (hx.trans_le (min_le_left r1 _)) (hy.trans_le (min_le_left r1 _))

lemma exhaustive_ncard_ge_flow
    {ε : ℝ} {P : Set (Fin 6 → ℝ)} {S : Set (ℝ → Vec)}
    (hε : 0 ≤ ε) (hSfin : S.Finite)
    (hP : ∀ s ∈ P, IsTarget (1 : ℝ) 2 3 1 (keplerFlow s))
    (heq : ∀ s ∈ P,
      keplerFlow s 0 = keplerIC s 0 ∧
        keplerFlow s (1 / 4 : ℝ) = keplerIC s (1 / 4) ∧
        keplerFlow s (1 / 2 : ℝ) = keplerIC s (1 / 2) ∧
        keplerFlow s 1 = keplerIC s 1)
    (hsep : ∀ x ∈ P, ∀ y ∈ P, x ≠ y → 8 * ε < ‖sdCart y - sdCart x‖)
    (hcov : IsExhaustiveCover (1 : ℝ) 2 3 1 ε obs S) :
    P.ncard ≤ S.ncard := by
  classical
  obtain ⟨_, hrec⟩ := hcov
  let f : (Fin 6 → ℝ) → (ℝ → Vec) := fun s =>
    if hs : s ∈ P then Classical.choose (hrec (keplerFlow s) (hP s hs)) else obs
  have hfmem : ∀ s ∈ P, f s ∈ S := by
    intro s hs
    simpa [f, dif_pos hs] using (Classical.choose_spec (hrec (keplerFlow s) (hP s hs))).1
  have hfrec : ∀ s ∈ P, RecoveredBy obs ε 1 (f s) (keplerFlow s) := by
    intro s hs
    simpa [f, dif_pos hs] using (Classical.choose_spec (hrec (keplerFlow s) (hP s hs))).2
  refine Set.ncard_le_ncard_of_injOn f hfmem ?_ hSfin
  intro x hx y hy hxy
  by_contra hne
  exact not_both_recovered_flow (heq x hx) (heq y hy) hε (hsep x hx y hy hne)
    (hfrec x hx) (hxy ▸ hfrec y hy)

def statement : Prop :=
  ¬ (∀ μ R₁ R₂ : ℝ, 0 < μ → 1 < R₁ → R₁ < R₂ → μ ≤ R₁ ^ 3 →
    ∃ (d : ℕ) (C : ℝ), d ≤ 5 ∧ 0 < C ∧
      ∀ T ε : ℝ, 1 ≤ T → μ * T ^ 2 ≤ R₁ ^ 3 → 0 < ε → ε ≤ 1 →
        ∀ e : ℝ → Vec, IsObserver μ T e →
          ∃ S : Set (ℝ → Vec), S.Finite ∧
            (S.ncard : ℝ) * ε ^ d ≤ C ∧
            IsExhaustiveCover μ R₁ R₂ T ε e S)

theorem proof : statement := by
  intro H
  have hμ : (0 : ℝ) < 1 := by norm_num
  have hR₁ : (1 : ℝ) < 2 := by norm_num
  have hR₁₂ : (2 : ℝ) < 3 := by norm_num
  have hμR : (1 : ℝ) ≤ (2 : ℝ) ^ 3 := by norm_num
  obtain ⟨d, C, hd, hCpos, hall⟩ := H 1 2 3 hμ hR₁ hR₁₂ hμR
  obtain ⟨σ, r, hσ, hr, htarget, hsample, hlin⟩ := exists_pack_radius
  let c : ℝ := σ * r / 16
  have hc : 0 < c := by positivity
  let Pack : ℝ → Set (Fin 6 → ℝ) := fun ε =>
    Set.range (cartPt (Nat.floor (c / ε) + 1) (16 * ε / σ))
  have hlb : ∀ ε : ℝ, 0 < ε → ε ≤ 1 / 2 → ((Pack ε).ncard : ℝ) ≥ (c / ε) ^ 6 := by
    intro ε hεpos hεle
    let δ : ℝ := 16 * ε / σ
    let n : ℕ := Nat.floor (c / ε) + 1
    have hδ : 0 < δ := by positivity
    have hn : 0 < n := Nat.succ_pos _
    have hceil : (c / ε) < (n : ℝ) := by
      simpa [n] using Nat.lt_floor_add_one (c / ε)
    have hnge : c / ε ≤ (n : ℝ) := le_of_lt hceil
    have hcε : 0 ≤ c / ε := le_of_lt (div_pos hc hεpos)
    have hpow : (c / ε) ^ 6 ≤ (n : ℝ) ^ 6 :=
      pow_le_pow_left₀ hcε hnge 6
    have hncard : ((Set.range (cartPt n δ)).ncard : ℝ) = (n : ℝ) ^ 6 :=
      packing_cartPt_ncard hδ
    simpa [Pack, δ, n] using (hpow.trans_eq hncard.symm)
  refine packing_eps5_unbounded_scaled Pack hc hlb ⟨C, ?_⟩
  intro ε hεpos hεle
  have hε1 : ε ≤ 1 := hεle.trans (by norm_num)
  have hT : (1 : ℝ) ≤ 1 := le_rfl
  have hμT : (1 : ℝ) * (1 : ℝ) ^ 2 ≤ (2 : ℝ) ^ 3 := by norm_num
  obtain ⟨S, hSfin, hbound, hcov⟩ :=
    hall 1 ε hT hμT hεpos hε1 obs (isObserver_obs 1)
  let δ : ℝ := 16 * ε / σ
  let n : ℕ := Nat.floor (c / ε) + 1
  have hδ : 0 < δ := by positivity
  have hn : 0 < n := Nat.succ_pos _
  have h8 : 8 * ε < σ * δ := by
    have heqδ : σ * δ = 16 * ε := by
      simp [δ]; field_simp [hσ.ne']
    rw [heqδ]; nlinarith
  have hbd : δ * ((n : ℝ) - 1) / 2 < r := by
    have hn1 : (n : ℝ) - 1 = (Nat.floor (c / ε) : ℝ) := by
      simp [n, Nat.cast_add, Nat.cast_one]
    have hfl : (Nat.floor (c / ε) : ℝ) ≤ c / ε :=
      Nat.floor_le (le_of_lt (div_pos hc hεpos))
    have hmid : δ * ((n : ℝ) - 1) / 2 ≤ δ * (c / ε) / 2 := by
      have hx : δ * ((n : ℝ) - 1) / 2 = (δ / 2) * ((n : ℝ) - 1) := by ring
      have hy : δ * (c / ε) / 2 = (δ / 2) * (c / ε) := by ring
      rw [hx, hy, hn1]
      exact mul_le_mul_of_nonneg_left hfl (by positivity)
    have hsimp : δ * (c / ε) / 2 = r / 2 := by
      simp only [δ, c]
      field_simp [hσ.ne', hεpos.ne']
    have hhalf : δ * ((n : ℝ) - 1) / 2 ≤ r / 2 := by
      simpa [hsimp] using hmid
    linarith
  let P : Set (Fin 6 → ℝ) := Set.range (cartPt n δ)
  have hP : ∀ s ∈ P, IsTarget (1 : ℝ) 2 3 1 (keplerFlow s) := by
    intro s hs
    obtain ⟨u, rfl⟩ := hs
    exact htarget _ (cartPt_mem_ball hn hδ.le hbd u)
  have heq : ∀ s ∈ P,
      keplerFlow s 0 = keplerIC s 0 ∧
        keplerFlow s (1 / 4 : ℝ) = keplerIC s (1 / 4) ∧
        keplerFlow s (1 / 2 : ℝ) = keplerIC s (1 / 2) ∧
        keplerFlow s 1 = keplerIC s 1 := by
    intro s hs
    obtain ⟨u, rfl⟩ := hs
    exact hsample _ (cartPt_mem_ball hn hδ.le hbd u)
  have hsep : ∀ x ∈ P, ∀ y ∈ P, x ≠ y → 8 * ε < ‖sdCart y - sdCart x‖ := by
    intro x hx y hy hne
    obtain ⟨u, rfl⟩ := hx
    obtain ⟨v, rfl⟩ := hy
    have huv : u ≠ v := fun h => hne (by rw [h])
    have hge := cartPt_sdCart_sep hσ hδ hr hn hlin hbd huv
    exact h8.trans_le hge
  have hε0 : 0 ≤ ε := hεpos.le
  have hnle : P.ncard ≤ S.ncard :=
    exhaustive_ncard_ge_flow hε0 hSfin hP heq hsep hcov
  have hPpack : P = Pack ε := by simp [P, Pack, n, δ]
  have hge : ((Pack ε).ncard : ℝ) * ε ^ 5 ≤ (S.ncard : ℝ) * ε ^ 5 := by
    have : (P.ncard : ℝ) ≤ (S.ncard : ℝ) := Nat.cast_le.mpr hnle
    have hpow0 : 0 ≤ ε ^ 5 := pow_nonneg hε0 5
    simpa [hPpack] using mul_le_mul_of_nonneg_right this hpow0
  have h5 : (S.ncard : ℝ) * ε ^ 5 ≤ C := by
    have hsplit : ε ^ 5 = ε ^ d * ε ^ (5 - d) := by
      rw [← pow_add, Nat.add_sub_of_le hd]
    have hpow1 : ε ^ (5 - d) ≤ 1 :=
      pow_le_one₀ hε0 (hε1)
    have hSn : 0 ≤ (S.ncard : ℝ) := Nat.cast_nonneg _
    have hεd : 0 ≤ ε ^ d := pow_nonneg hε0 d
    calc
      (S.ncard : ℝ) * ε ^ 5
          = (S.ncard : ℝ) * (ε ^ d * ε ^ (5 - d)) := by rw [hsplit]
      _ = ((S.ncard : ℝ) * ε ^ d) * ε ^ (5 - d) := by ring
      _ ≤ C * ε ^ (5 - d) := mul_le_mul_of_nonneg_right hbound (pow_nonneg hε0 _)
      _ ≤ C * 1 := mul_le_mul_of_nonneg_left hpow1 hCpos.le
      _ = C := mul_one C
  exact hge.trans h5

end

end Submissions.TestOrbitCoverFalse.Gtokman
Gtokman.lean
StatementUserModelHarnessTime
Kernel-checked
3)V2The exhaustive test-orbit cover of a distant Kepler shell cannot be bounded by C/eps^d for any exponent d at…
@gtokman
Grok
Cursor Grok
8/24/26
Kernel-checked
2)V2Line-finder recovery is reflexive, monotone in the tolerance, and implied by rigid recovery, so any matched-f…
@woshuajolk
Opus 4.6
Cursor
8/20/26
Refuted
1)V2For a heliocentric shell outside the observer's orbit, the number of test orbits needed so that no Kepler tra…
@woshuajolk
+1
unknown
unknown
8/20/26