Encyclopedia Geometry Geometry Regge Action Cubic Taylor Bound Regge Action Remainder Second Variation
ARTICLE 2 claims 2 theorems
Geometry Regge Action Cubic Taylor Bound Regge Action Remainder Second Variation
A Taylor bound that controls how much a curved space's action can deviate from its quadratic approximation, and the precise conditions under which that control holds.
The cubic remainder bound
The Regge action is a discrete way to write down the gravitational action for a triangulated space, summing over the edges of a 3D mesh a term that involves the dihedral angles. In the framework's library, the declaration reggeActionRemainderSecondVariationInput_of_flat_directionalHessian is a construction that packages together the analytic ingredients needed for a Taylor estimate of the remainder term in this action. The remainder is what is left over after subtracting the first and second order (linear and quadratic) variations of the action from its full value; the declaration assembles the inputs that let the framework prove a cubic bound on that remainder.
The key theorem, NonlinearReggeCubicTaylorTheorem, states that for a triangulation that is incidence-consistent and flat (meaning the geometry is locally Euclidean), there exist positive constants r and C such that for any small perturbation ξ of the vertex positions with norm less than r, the norm of the remainder is bounded by C times the cube of the norm of ξ. In plainer terms: if you nudge the vertices of a flat triangulation by a small amount, the error in the quadratic approximation of the action shrinks at least as fast as the cube of the nudge size. This is the standard third-order Taylor remainder estimate, specialized to the Regge action.
The declaration itself is not the theorem; it is the input assembly. It takes the flatness hypothesis, the directional Hessian theorem, and the cubic Taylor theorem, and produces the packaged input structure that the rest of the framework consumes. The chain of proofs shows that the needed smoothness, the vanishing of the quadratic Taylor term, and the third derivative bound all follow from flatness. The cubic bound then follows from a one-dimensional Taylor estimate applied along straight lines in the space of vertex potentials.
In Recognition Science, this bound is a step toward showing that the Regge action, a discrete model of gravity, behaves like a well-behaved smooth functional near flat space. The framework models the Regge action as a discrete ledger of geometric events, and this Taylor control is what lets it treat the action as a differentiable object for the purposes of variation. The bound does not say anything about the global structure of the action, nor does it apply to curved configurations; it is a local statement about the neighborhood of a flat geometry.
THEOREM NonlinearReggeCubicTaylorTheorem · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean
/-- Exact Taylor theorem needed for the nonlinear Regge remainder. This is
the finite-dimensional third-order Taylor estimate specialized to the canonical
Regge remainder. -/
def NonlinearReggeCubicTaylorTheorem
(K : Triangulation3D) (hK : IncidenceConsistent K) : Prop :=
LocalCubicRemainderBound K hK
THEOREM canonicalRemainderLineContDiff_of_flatConfiguration · canonicalRemainderLineChainRuleBound_of_flatConfiguration · canonicalRemainder_iteratedFDeriv3_local_bound_of_flatConfiguration · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean
theorem canonicalRemainderLineContDiff_of_flatConfiguration
(K : Triangulation3D) (hK : IncidenceConsistent K)
(hFlat : FlatConfiguration K hK) :
CanonicalRemainderLineContDiffTarget K hK := by
let R : VertexPotential K → ℝ :=
fun ξ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ
have hR : ContDiffAt ℝ (⊤ : ℕ∞) R (zeroPotential K) := by
simpa [R] using canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat
have hle : ((3 : ℕ∞) : WithTop ℕ∞) ≤ ((⊤ : ℕ∞) : WithTop ℕ∞) := by
exact WithTop.coe_le_coe.2 le_top
rcases hR.contDiffOn (m := (3 : ℕ∞)) hle (by intro h; simp at h) with
⟨u, hu, hRu⟩
rcases Metric.mem_nhds_iff.mp hu with ⟨eps, heps, hball⟩
refine ⟨eps, heps, ?_⟩
intro ξ hξ
have hline : ContDiffOn ℝ (3 : ℕ∞)
(fun t : ℝ => linePotential K ξ t) (Set.Icc (0 : ℝ) 1) := by
rw [contDiffOn_pi]
intro i
unfold linePotential
fun_prop
have hmaps : Set.MapsTo (fun t : ℝ => linePotential K ξ t)
(Set.Icc (0 : ℝ) 1) u := by
intro t ht
apply hball
rw [Metric.mem_ball, dist_eq_norm]
have hsub : linePotential K ξ t - zeroPotential K = linePotential K ξ t := by
funext i
simp [zeroPotential]
rw [hsub]
exact lt_of_le_of_lt (norm_linePotential_le_of_mem_Icc_zero_one K ξ ht) hξ
have hcomp := hRu.comp hline hmaps
simpa [R, Function.comp_def] using hcomp
/-- **CLOSURE: `CanonicalRemainderLineChainRuleBoundTarget` (localized).**
Within a small open ball `ball(0, ε)` around the flat point, the canonical
remainder is `ContDiffOn ℝ 3` (from `canonicalRemainder_contDiffAt_zero_of_flatConfiguration`).
For `ξ` with `‖ξ‖ < ε` and `t ∈ [0, 1]`, the point `t • ξ` lies in this ball,
the within-set chain rule
`ContinuousLinearMap.iteratedFDerivWithin_comp_right` applies, the within-set
iterated Fréchet derivatives equal the free-space ones via
`iteratedFDerivWithin_of_isOpen`, and the resulting expansion of
`iteratedDeriv 3 (R ∘ lineCLM ξ) t` as
`(iteratedFDeriv ℝ 3 R (t • ξ))(fun _ : Fin 3 => ξ)` is bounded by
`‖iteratedFDeriv ℝ 3 R (t • ξ)‖ · ‖ξ‖³` via
`ContinuousMultilinearMap.le_opNorm`. -/
theorem canonicalRemainderLineChainRuleBound_of_flatConfiguration
(K : Triangulation3D) (hK : IncidenceConsistent K)
(hFlat : FlatConfiguration K hK) :
CanonicalRemainderLineChainRuleBoundTarget K hK := by
-- Step 1: extract a smooth nbhd of zeroPotential K.
have hContR : ContDiffAt ℝ (⊤ : ℕ∞)
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K) :=
canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat
have hContR3 : ContDiffAt ℝ (3 : ℕ∞)
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K) := by
refine hContR.of_le ?_
exact (WithTop.coe_le_coe).mpr le_top
-- Get a ContDiffOn nbhd from ContDiffAt.
rcases hContR3.contDiffOn (m := (3 : ℕ∞)) (le_refl _)
(by intro h; simp at h) with ⟨u, hu_nhds, hRu⟩
-- Refine to an open ball.
rcases Metric.mem_nhds_iff.mp hu_nhds with ⟨ε, hε_pos, hball⟩
-- ContDiffOn ℝ 3 R on ball(zeroPotential K, ε).
have hRball : ContDiffOn ℝ (3 : ℕ∞)
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(Metric.ball (zeroPotential K) ε) :=
hRu.mono hball
-- Translate ball center to 0 (since zeroPotential K = 0 in VP K).
have hZP : (zeroPotential K) = (0 : VertexPotential K) := by
funext i; simp [zeroPotential]
-- Use ball at zero.
have hRball0 : ContDiffOn ℝ (3 : ℕ∞)
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(Metric.ball (0 : VertexPotential K) ε) := by
rw [hZP] at hRball
exact hRball
refine ⟨ε, hε_pos, ?_⟩
intro ξ hξ t ht
-- Step 2: `t • ξ ∈ ball 0 ε`.
have h_t_abs : |t| ≤ 1 := by
rw [abs_of_nonneg ht.1]; exact ht.2
have h_tξ_in_ball : (t • ξ) ∈ Metric.ball (0 : VertexPotential K) ε := by
rw [Metric.mem_ball, dist_zero_right, norm_smul, Real.norm_eq_abs]
calc |t| * ‖ξ‖ ≤ 1 * ‖ξ‖ :=
mul_le_mul_of_nonneg_right h_t_abs (norm_nonneg ξ)
_ = ‖ξ‖ := one_mul _
_ < ε := hξ
-- Step 3: lineCLM ξ ⁻¹' (ball 0 ε) is open in ℝ.
have h_open_pre : IsOpen (lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) :=
Metric.isOpen_ball.preimage (lineCLM K ξ).continuous
-- t ∈ preimage (since lineCLM K ξ t = t • ξ ∈ ball).
have h_t_in_pre : t ∈ lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε := by
rw [Set.mem_preimage, lineCLM_apply]; exact h_tξ_in_ball
-- UniqueDiffOn on preimage and on ball.
have h_uniq_ball : UniqueDiffOn ℝ (Metric.ball (0 : VertexPotential K) ε) :=
Metric.isOpen_ball.uniqueDiffOn
have h_uniq_pre : UniqueDiffOn ℝ
(lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) :=
h_open_pre.uniqueDiffOn
-- Step 4: chain rule via `iteratedFDerivWithin_comp_right`.
have h_chain_within :
iteratedFDerivWithin ℝ 3
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
((lineCLM K ξ) s))
(lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) t =
(iteratedFDerivWithin ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(Metric.ball (0 : VertexPotential K) ε)
(lineCLM K ξ t)).compContinuousLinearMap (fun _ : Fin 3 => lineCLM K ξ) := by
have h := (lineCLM K ξ).iteratedFDerivWithin_comp_right
(f := fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(n := (3 : ℕ∞)) hRball0 h_uniq_ball h_uniq_pre h_tξ_in_ball
(i := 3) (le_refl _)
-- Adjust the LHS to use the function form rather than ∘.
convert h using 2
-- Step 5: convert iteratedFDerivWithin to iteratedFDeriv (open sets).
have ht_in_ball : lineCLM K ξ t ∈ Metric.ball (0 : VertexPotential K) ε := by
rw [lineCLM_apply]; exact h_tξ_in_ball
have h_within_eq_R :
iteratedFDerivWithin ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(Metric.ball (0 : VertexPotential K) ε)
(lineCLM K ξ t) =
iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(lineCLM K ξ t) :=
iteratedFDerivWithin_of_isOpen 3 Metric.isOpen_ball ht_in_ball
have h_within_eq_comp :
iteratedFDerivWithin ℝ 3
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
((lineCLM K ξ) s))
(lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) t =
iteratedFDeriv ℝ 3
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
((lineCLM K ξ) s)) t :=
iteratedFDerivWithin_of_isOpen 3 h_open_pre h_t_in_pre
-- Combine: free-space iteratedFDeriv chain-rule formula.
have h_chain_free :
iteratedFDeriv ℝ 3
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
((lineCLM K ξ) s)) t =
(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(lineCLM K ξ t)).compContinuousLinearMap (fun _ : Fin 3 => lineCLM K ξ) := by
rw [← h_within_eq_comp, h_chain_within, h_within_eq_R]
-- Step 6: rewrite the line-restricted remainder via `lineCLM`.
have h_eq_line :
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
(linePotential K ξ s)) =
(fun s : ℝ =>
reggeActionRemainder K hK (canonicalReggeHessian K hK)
((lineCLM K ξ) s)) := by
funext s
rw [lineCLM_eq_linePotential]
-- Step 7: bound `|iteratedDeriv 3 R_line t|` using the chain-rule formula.
rw [h_eq_line]
-- iteratedDeriv 3 f t = (iteratedFDeriv ℝ 3 f t)(fun _ => 1).
rw [iteratedDeriv]
rw [h_chain_free]
-- Now: |((iteratedFDeriv 3 R (lineCLM ξ t)).compCLM (fun _ => lineCLM ξ))(fun _ => 1)|
-- = |(iteratedFDeriv 3 R (t • ξ))(fun _ => lineCLM ξ 1)|
-- = |(iteratedFDeriv 3 R (t • ξ))(fun _ => ξ)|
rw [ContinuousMultilinearMap.compContinuousLinearMap_apply]
rw [lineCLM_apply]
-- Goal: |(iteratedFDeriv 3 R (t • ξ))(fun _ => lineCLM ξ 1)| ≤ ‖...‖ · ‖ξ‖^3
-- Use lineCLM_one to simplify (fun _ => lineCLM K ξ 1) = (fun _ => ξ).
have h_lcm1 : (fun _ : Fin 3 => lineCLM K ξ 1) = (fun _ : Fin 3 => ξ) := by
funext i; exact lineCLM_one K ξ
rw [h_lcm1]
-- Bound by `ContinuousMultilinearMap.le_opNorm`.
have h_op := ContinuousMultilinearMap.le_opNorm
(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ))
(fun _ : Fin 3 => ξ)
-- h_op : ‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖
-- For m = const ξ on Fin 3, ∏ i, ‖ξ‖ = ‖ξ‖^3.
have h_prod : (∏ _i : Fin 3, ‖ξ‖) = ‖ξ‖ ^ (3 : ℕ) := by
rw [Finset.prod_const, Finset.card_univ, Fintype.card_fin]
-- Convert ‖_‖ to |_| for the real-valued LHS via `abs_eq_norm` on ℝ.
have h_abs_eq : |(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ))
(fun _ : Fin 3 => ξ)| =
‖(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ))
(fun _ : Fin 3 => ξ)‖ := by
rfl
rw [h_abs_eq]
calc ‖(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ))
(fun _ : Fin 3 => ξ)‖
≤ ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ)‖ * (∏ _i : Fin 3, ‖ξ‖) := h_op
_ = ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(t • ξ)‖ * ‖ξ‖ ^ (3 : ℕ) := by rw [h_prod]
/-- **CLOSURE: `CanonicalRemainderIteratedFDerivLocalBoundTarget`.**
The third Fréchet derivative of the canonical remainder is locally bounded
at the flat point: by `ContDiffAt` and `ContDiffAt.continuousAt_iteratedFDeriv`,
`iteratedFDeriv ℝ 3 R` is continuous at `0`, so `‖iteratedFDeriv ℝ 3 R z‖ < ‖0‖ + 1`
for `z` close to `0`. We take `M := ‖iteratedFDeriv ℝ 3 R 0‖ + 1` and `δ` from
the continuity δ-ε statement. -/
theorem canonicalRemainder_iteratedFDeriv3_local_bound_of_flatConfiguration
(K : Triangulation3D) (hK : IncidenceConsistent K)
(hFlat : FlatConfiguration K hK) :
CanonicalRemainderIteratedFDerivLocalBoundTarget K hK := by
-- ContDiffAt of R at zeroPotential at order ⊤.
have hContR : ContDiffAt ℝ (⊤ : ℕ∞)
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K) :=
canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat
-- iteratedFDeriv 3 R is continuous at zeroPotential K.
have hContAt :
ContinuousAt
(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ'))
(zeroPotential K) := by
refine hContR.continuousAt_iteratedFDeriv (k := 3) ?_
exact (WithTop.coe_le_coe).mpr le_top
-- Set the bound `M := ‖iteratedFDeriv 3 R 0‖ + 1`.
set M : ℝ := ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K)‖ + 1 with hM_def
have hM_nonneg : 0 ≤ M := by
have hpos : 0 ≤ ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K)‖ := norm_nonneg _
linarith
-- Continuity at zeroPotential K with tolerance 1.
rw [Metric.continuousAt_iff] at hContAt
obtain ⟨δ, hδ_pos, hδ⟩ := hContAt 1 (by norm_num : (0 : ℝ) < 1)
refine ⟨δ, M, hδ_pos, hM_nonneg, ?_⟩
intro z hz
-- ‖z - zeroPotential K‖ = ‖z‖ since zeroPotential K is the zero element.
have hz_dist : dist z (zeroPotential K) < δ := by
rw [dist_eq_norm]
have h_zp : (zeroPotential K) = (0 : VertexPotential K) := by
funext i; simp [zeroPotential]
rw [h_zp]
simpa using hz
-- Apply continuity bound.
have h_dist := hδ hz_dist
-- h_dist : dist (iteratedFDeriv 3 R z) (iteratedFDeriv 3 R 0) < 1
rw [dist_eq_norm] at h_dist
-- ‖A - B‖ < 1 implies ‖A‖ ≤ ‖B‖ + 1 = M.
have h_le : ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') z‖
≤ ‖iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K)‖ + 1 := by
have h_tri := norm_sub_norm_le
(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') z)
(iteratedFDeriv ℝ 3
(fun ξ' : VertexPotential K =>
reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')
(zeroPotential K))
linarith
exact h_le
What this page does not claim
The declaration does not establish the bound for curved or non-flat triangulations. It does not provide explicit numerical values for the constants r and C. It does not claim the remainder is identically zero; it only bounds its magnitude.
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- What global properties of the Regge action follow from this local cubic bound?
- How does the bound change when the flatness condition is relaxed to a small curvature?
- What role does the remainder bound play in the framework's derivation of the Einstein equations?
- Can the cubic estimate be sharpened to a fourth-order bound under stronger regularity assumptions?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM NonlinearReggeCubicTaylorTheorem · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean
/-- Exact Taylor theorem needed for the nonlinear Regge remainder. This is the finite-dimensional third-order Taylor estimate specialized to the canonical Regge remainder. -/ def NonlinearReggeCubicTaylorTheorem (K : Triangulation3D) (hK : IncidenceConsistent K) : Prop := LocalCubicRemainderBound K hKthe norm of the remainder is bounded by C times the cube of the norm of ξ NonlinearReggeCubicTaylorTheorem · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.leanTHEOREM canonicalRemainderLineContDiff_of_flatConfiguration · canonicalRemainderLineChainRuleBound_of_flatConfiguration · canonicalRemainder_iteratedFDeriv3_local_bound_of_flatConfiguration · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean
theorem canonicalRemainderLineContDiff_of_flatConfiguration (K : Triangulation3D) (hK : IncidenceConsistent K) (hFlat : FlatConfiguration K hK) : CanonicalRemainderLineContDiffTarget K hK := by let R : VertexPotential K → ℝ := fun ξ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ have hR : ContDiffAt ℝ (⊤ : ℕ∞) R (zeroPotential K) := by simpa [R] using canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat have hle : ((3 : ℕ∞) : WithTop ℕ∞) ≤ ((⊤ : ℕ∞) : WithTop ℕ∞) := by exact WithTop.coe_le_coe.2 le_top rcases hR.contDiffOn (m := (3 : ℕ∞)) hle (by intro h; simp at h) with ⟨u, hu, hRu⟩ rcases Metric.mem_nhds_iff.mp hu with ⟨eps, heps, hball⟩ refine ⟨eps, heps, ?_⟩ intro ξ hξ have hline : ContDiffOn ℝ (3 : ℕ∞) (fun t : ℝ => linePotential K ξ t) (Set.Icc (0 : ℝ) 1) := by rw [contDiffOn_pi] intro i unfold linePotential fun_prop have hmaps : Set.MapsTo (fun t : ℝ => linePotential K ξ t) (Set.Icc (0 : ℝ) 1) u := by intro t ht apply hball rw [Metric.mem_ball, dist_eq_norm] have hsub : linePotential K ξ t - zeroPotential K = linePotential K ξ t := by funext i simp [zeroPotential] rw [hsub] exact lt_of_le_of_lt (norm_linePotential_le_of_mem_Icc_zero_one K ξ ht) hξ have hcomp := hRu.comp hline hmaps simpa [R, Function.comp_def] using hcomp/-- **CLOSURE: `CanonicalRemainderLineChainRuleBoundTarget` (localized).** Within a small open ball `ball(0, ε)` around the flat point, the canonical remainder is `ContDiffOn ℝ 3` (from `canonicalRemainder_contDiffAt_zero_of_flatConfiguration`). For `ξ` with `‖ξ‖ < ε` and `t ∈ [0, 1]`, the point `t • ξ` lies in this ball, the within-set chain rule `ContinuousLinearMap.iteratedFDerivWithin_comp_right` applies, the within-set iterated Fréchet derivatives equal the free-space ones via `iteratedFDerivWithin_of_isOpen`, and the resulting expansion of `iteratedDeriv 3 (R ∘ lineCLM ξ) t` as `(iteratedFDeriv ℝ 3 R (t • ξ))(fun _ : Fin 3 => ξ)` is bounded by `‖iteratedFDeriv ℝ 3 R (t • ξ)‖ · ‖ξ‖³` via `ContinuousMultilinearMap.le_opNorm`. -/ theorem canonicalRemainderLineChainRuleBound_of_flatConfiguration (K : Triangulation3D) (hK : IncidenceConsistent K) (hFlat : FlatConfiguration K hK) : CanonicalRemainderLineChainRuleBoundTarget K hK := by -- Step 1: extract a smooth nbhd of zeroPotential K. have hContR : ContDiffAt ℝ (⊤ : ℕ∞) (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K) := canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat have hContR3 : ContDiffAt ℝ (3 : ℕ∞) (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K) := by refine hContR.of_le ?_ exact (WithTop.coe_le_coe).mpr le_top -- Get a ContDiffOn nbhd from ContDiffAt. rcases hContR3.contDiffOn (m := (3 : ℕ∞)) (le_refl _) (by intro h; simp at h) with ⟨u, hu_nhds, hRu⟩ -- Refine to an open ball. rcases Metric.mem_nhds_iff.mp hu_nhds with ⟨ε, hε_pos, hball⟩ -- ContDiffOn ℝ 3 R on ball(zeroPotential K, ε). have hRball : ContDiffOn ℝ (3 : ℕ∞) (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (Metric.ball (zeroPotential K) ε) := hRu.mono hball -- Translate ball center to 0 (since zeroPotential K = 0 in VP K). have hZP : (zeroPotential K) = (0 : VertexPotential K) := by funext i; simp [zeroPotential] -- Use ball at zero. have hRball0 : ContDiffOn ℝ (3 : ℕ∞) (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (Metric.ball (0 : VertexPotential K) ε) := by rw [hZP] at hRball exact hRball refine ⟨ε, hε_pos, ?_⟩ intro ξ hξ t ht -- Step 2: `t • ξ ∈ ball 0 ε`. have h_t_abs : |t| ≤ 1 := by rw [abs_of_nonneg ht.1]; exact ht.2 have h_tξ_in_ball : (t • ξ) ∈ Metric.ball (0 : VertexPotential K) ε := by rw [Metric.mem_ball, dist_zero_right, norm_smul, Real.norm_eq_abs] calc |t| * ‖ξ‖ ≤ 1 * ‖ξ‖ := mul_le_mul_of_nonneg_right h_t_abs (norm_nonneg ξ) _ = ‖ξ‖ := one_mul _ _ < ε := hξ -- Step 3: lineCLM ξ ⁻¹' (ball 0 ε) is open in ℝ. have h_open_pre : IsOpen (lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) := Metric.isOpen_ball.preimage (lineCLM K ξ).continuous -- t ∈ preimage (since lineCLM K ξ t = t • ξ ∈ ball). have h_t_in_pre : t ∈ lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε := by rw [Set.mem_preimage, lineCLM_apply]; exact h_tξ_in_ball -- UniqueDiffOn on preimage and on ball. have h_uniq_ball : UniqueDiffOn ℝ (Metric.ball (0 : VertexPotential K) ε) := Metric.isOpen_ball.uniqueDiffOn have h_uniq_pre : UniqueDiffOn ℝ (lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) := h_open_pre.uniqueDiffOn -- Step 4: chain rule via `iteratedFDerivWithin_comp_right`. have h_chain_within : iteratedFDerivWithin ℝ 3 (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ((lineCLM K ξ) s)) (lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) t = (iteratedFDerivWithin ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (Metric.ball (0 : VertexPotential K) ε) (lineCLM K ξ t)).compContinuousLinearMap (fun _ : Fin 3 => lineCLM K ξ) := by have h := (lineCLM K ξ).iteratedFDerivWithin_comp_right (f := fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (n := (3 : ℕ∞)) hRball0 h_uniq_ball h_uniq_pre h_tξ_in_ball (i := 3) (le_refl _) -- Adjust the LHS to use the function form rather than ∘. convert h using 2 -- Step 5: convert iteratedFDerivWithin to iteratedFDeriv (open sets). have ht_in_ball : lineCLM K ξ t ∈ Metric.ball (0 : VertexPotential K) ε := by rw [lineCLM_apply]; exact h_tξ_in_ball have h_within_eq_R : iteratedFDerivWithin ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (Metric.ball (0 : VertexPotential K) ε) (lineCLM K ξ t) = iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (lineCLM K ξ t) := iteratedFDerivWithin_of_isOpen 3 Metric.isOpen_ball ht_in_ball have h_within_eq_comp : iteratedFDerivWithin ℝ 3 (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ((lineCLM K ξ) s)) (lineCLM K ξ ⁻¹' Metric.ball (0 : VertexPotential K) ε) t = iteratedFDeriv ℝ 3 (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ((lineCLM K ξ) s)) t := iteratedFDerivWithin_of_isOpen 3 h_open_pre h_t_in_pre -- Combine: free-space iteratedFDeriv chain-rule formula. have h_chain_free : iteratedFDeriv ℝ 3 (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ((lineCLM K ξ) s)) t = (iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (lineCLM K ξ t)).compContinuousLinearMap (fun _ : Fin 3 => lineCLM K ξ) := by rw [← h_within_eq_comp, h_chain_within, h_within_eq_R] -- Step 6: rewrite the line-restricted remainder via `lineCLM`. have h_eq_line : (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) (linePotential K ξ s)) = (fun s : ℝ => reggeActionRemainder K hK (canonicalReggeHessian K hK) ((lineCLM K ξ) s)) := by funext s rw [lineCLM_eq_linePotential] -- Step 7: bound `|iteratedDeriv 3 R_line t|` using the chain-rule formula. rw [h_eq_line] -- iteratedDeriv 3 f t = (iteratedFDeriv ℝ 3 f t)(fun _ => 1). rw [iteratedDeriv] rw [h_chain_free] -- Now: |((iteratedFDeriv 3 R (lineCLM ξ t)).compCLM (fun _ => lineCLM ξ))(fun _ => 1)| -- = |(iteratedFDeriv 3 R (t • ξ))(fun _ => lineCLM ξ 1)| -- = |(iteratedFDeriv 3 R (t • ξ))(fun _ => ξ)| rw [ContinuousMultilinearMap.compContinuousLinearMap_apply] rw [lineCLM_apply] -- Goal: |(iteratedFDeriv 3 R (t • ξ))(fun _ => lineCLM ξ 1)| ≤ ‖...‖ · ‖ξ‖^3 -- Use lineCLM_one to simplify (fun _ => lineCLM K ξ 1) = (fun _ => ξ). have h_lcm1 : (fun _ : Fin 3 => lineCLM K ξ 1) = (fun _ : Fin 3 => ξ) := by funext i; exact lineCLM_one K ξ rw [h_lcm1] -- Bound by `ContinuousMultilinearMap.le_opNorm`. have h_op := ContinuousMultilinearMap.le_opNorm (iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)) (fun _ : Fin 3 => ξ) -- h_op : ‖f m‖ ≤ ‖f‖ * ∏ i, ‖m i‖ -- For m = const ξ on Fin 3, ∏ i, ‖ξ‖ = ‖ξ‖^3. have h_prod : (∏ _i : Fin 3, ‖ξ‖) = ‖ξ‖ ^ (3 : ℕ) := by rw [Finset.prod_const, Finset.card_univ, Fintype.card_fin] -- Convert ‖_‖ to |_| for the real-valued LHS via `abs_eq_norm` on ℝ. have h_abs_eq : |(iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)) (fun _ : Fin 3 => ξ)| = ‖(iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)) (fun _ : Fin 3 => ξ)‖ := by rfl rw [h_abs_eq] calc ‖(iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)) (fun _ : Fin 3 => ξ)‖ ≤ ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)‖ * (∏ _i : Fin 3, ‖ξ‖) := h_op _ = ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (t • ξ)‖ * ‖ξ‖ ^ (3 : ℕ) := by rw [h_prod]/-- **CLOSURE: `CanonicalRemainderIteratedFDerivLocalBoundTarget`.** The third Fréchet derivative of the canonical remainder is locally bounded at the flat point: by `ContDiffAt` and `ContDiffAt.continuousAt_iteratedFDeriv`, `iteratedFDeriv ℝ 3 R` is continuous at `0`, so `‖iteratedFDeriv ℝ 3 R z‖ < ‖0‖ + 1` for `z` close to `0`. We take `M := ‖iteratedFDeriv ℝ 3 R 0‖ + 1` and `δ` from the continuity δ-ε statement. -/ theorem canonicalRemainder_iteratedFDeriv3_local_bound_of_flatConfiguration (K : Triangulation3D) (hK : IncidenceConsistent K) (hFlat : FlatConfiguration K hK) : CanonicalRemainderIteratedFDerivLocalBoundTarget K hK := by -- ContDiffAt of R at zeroPotential at order ⊤. have hContR : ContDiffAt ℝ (⊤ : ℕ∞) (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K) := canonicalRemainder_contDiffAt_zero_of_flatConfiguration K hK hFlat -- iteratedFDeriv 3 R is continuous at zeroPotential K. have hContAt : ContinuousAt (iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ')) (zeroPotential K) := by refine hContR.continuousAt_iteratedFDeriv (k := 3) ?_ exact (WithTop.coe_le_coe).mpr le_top -- Set the bound `M := ‖iteratedFDeriv 3 R 0‖ + 1`. set M : ℝ := ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K)‖ + 1 with hM_def have hM_nonneg : 0 ≤ M := by have hpos : 0 ≤ ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K)‖ := norm_nonneg _ linarith -- Continuity at zeroPotential K with tolerance 1. rw [Metric.continuousAt_iff] at hContAt obtain ⟨δ, hδ_pos, hδ⟩ := hContAt 1 (by norm_num : (0 : ℝ) < 1) refine ⟨δ, M, hδ_pos, hM_nonneg, ?_⟩ intro z hz -- ‖z - zeroPotential K‖ = ‖z‖ since zeroPotential K is the zero element. have hz_dist : dist z (zeroPotential K) < δ := by rw [dist_eq_norm] have h_zp : (zeroPotential K) = (0 : VertexPotential K) := by funext i; simp [zeroPotential] rw [h_zp] simpa using hz -- Apply continuity bound. have h_dist := hδ hz_dist -- h_dist : dist (iteratedFDeriv 3 R z) (iteratedFDeriv 3 R 0) < 1 rw [dist_eq_norm] at h_dist -- ‖A - B‖ < 1 implies ‖A‖ ≤ ‖B‖ + 1 = M. have h_le : ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') z‖ ≤ ‖iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K)‖ + 1 := by have h_tri := norm_sub_norm_le (iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') z) (iteratedFDeriv ℝ 3 (fun ξ' : VertexPotential K => reggeActionRemainder K hK (canonicalReggeHessian K hK) ξ') (zeroPotential K)) linarith exact h_lethe needed smoothness, the vanishing of the quadratic Taylor term, and the third derivative bound all follow from flatness canonicalRemainderLineContDiff_of_flatConfiguration · canonicalRemainderLineChainRuleBound_of_flatConfiguration · canonicalRemainder_iteratedFDeriv3_local_bound_of_flatConfiguration · IndisputableMonolith/Geometry/ReggeActionCubicTaylorBound.lean