Imports
/- Copyright (c) 2025 Afiq Hatta. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Afiq Hatta -/ module public import Mathlib.Topology.Algebra.Polynomial public import Mathlib.Analysis.Calculus.Deriv.Polynomial public import Mathlib.Analysis.SpecialFunctions.Trigonometric.DerivHyp public import Mathlib.Analysis.Distribution.TemperateGrowth

Properties of Tanh

We want to prove that the reflectionless potential is a Schwartz map. This means proving that pointwise multiplication of a Schwartz map with tanh is a Schwartz map. This means we need to prove that all derivatives of tanh are bounded and continuous, so that the nth derivative of a function multiplied by tanh decays faster than any polynomial.

TODO

    Add these to mathlib eventually

    Fill in the proofs for the properties of tanh

@[expose] public section

The derivative of tanh(x) is 1 - tanh(x)^2

h:deriv (sinh / cosh) = fun x => 1 - tanh x ^ 2h':tanh = sinh / coshderiv tanh = fun x => 1 - tanh x ^ 2 h:deriv (sinh / cosh) = fun x => 1 - tanh x ^ 2h':tanh = sinh / coshderiv (sinh / cosh) = fun x => 1 - tanh x ^ 2 All goals completed! 🐙

Tanh(x) is n times continuously differentiable for all n

n:hdiv:ContDiff n fun x => sinh x / cosh xContDiff (↑n) tanh n:hdiv:ContDiff n fun x => sinh x / cosh x| ContDiff (↑n) tanh n:hdiv:ContDiff n fun x => sinh x / cosh xx:| tanh x n:hdiv:ContDiff n fun x => sinh x / cosh xx:| sinh x / cosh x All goals completed! 🐙

The nth derivative of Tanh(x) is a polynomial of Tanh(x)

n:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshDifferentiableAt (sinh / cosh) x n:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshDifferentiableAt sinh xn:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshDifferentiableAt cosh xn:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshcosh x 0 n:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshDifferentiableAt sinh x All goals completed! 🐙 n:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshDifferentiableAt cosh x All goals completed! 🐙 n:P:Polynomial h'✝: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:h':tanh = sinh / coshcosh x 0 All goals completed! 🐙 case h.hh₂ n:P:Polynomial h': (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) Ph'':iteratedDeriv n tanh = fun x => Polynomial.eval (tanh x) Ph_comp:(fun x => Polynomial.eval (tanh x) P) = (fun t => Polynomial.eval t P) tanhx:DifferentiableAt (fun t => Polynomial.eval t P) (tanh x) All goals completed! 🐙

For a polynomial P, show it's bounded on any bounded interval

lemma polynomial_bounded_on_interval (P : Polynomial ) (a b : ) : M : , x : , x Set.Icc a b |P.eval x| M := P:Polynomial a:b: M, x Set.Icc a b, |Polynomial.eval x P| M -- Polynomials are continuous P:Polynomial a:b:hcont:Continuous fun x => Polynomial.eval x P M, x Set.Icc a b, |Polynomial.eval x P| M -- Closed bounded intervals are compact P:Polynomial a:b:hcont:Continuous fun x => Polynomial.eval x Phcompact:IsCompact (Set.Icc a b) M, x Set.Icc a b, |Polynomial.eval x P| M -- Continuous functions on compact sets are bounded P:Polynomial a:b:hcont:Continuous fun x => Polynomial.eval x Phcompact:IsCompact (Set.Icc a b)M:hM: x Set.Icc a b, Polynomial.eval x P M M, x Set.Icc a b, |Polynomial.eval x P| M P:Polynomial a:b:hcont:Continuous fun x => Polynomial.eval x Phcompact:IsCompact (Set.Icc a b)M:hM: x Set.Icc a b, Polynomial.eval x P M x Set.Icc a b, |Polynomial.eval x P| M All goals completed! 🐙

For a polynomial P, show that P (tanh x) is bounded on the real line

P:Polynomial h_range: (x : ), tanh x Set.Icc (-1) 1 C, (x : ), |Polynomial.eval (tanh x) P| C -- Apply polynomial boundedness on [-1, 1] P:Polynomial h_range: (x : ), tanh x Set.Icc (-1) 1M:hM: x Set.Icc (-1) 1, |Polynomial.eval x P| M C, (x : ), |Polynomial.eval (tanh x) P| C P:Polynomial h_range: (x : ), tanh x Set.Icc (-1) 1M:hM: x Set.Icc (-1) 1, |Polynomial.eval x P| M (x : ), |Polynomial.eval (tanh x) P| M P:Polynomial h_range: (x : ), tanh x Set.Icc (-1) 1M:hM: x Set.Icc (-1) 1, |Polynomial.eval x P| Mx:|Polynomial.eval (tanh x) P| M All goals completed! 🐙

The nth derivative of tanh is bounded on the real line

n:P:Polynomial hP: (x : ), iteratedDeriv n tanh x = Polynomial.eval (tanh x) PC:hC: (x : ), |Polynomial.eval (tanh x) P| Cx:|Polynomial.eval (tanh x) P| C All goals completed! 🐙

tanh is infinitely differentiable

(n : ), ContDiff (↑n) tanh All goals completed! 🐙

tanh has temperate growth

n:C:hC: (x : ), |iteratedDeriv n tanh x| Cx:h_equiv:iteratedFDeriv n tanh x = |iteratedDeriv n tanh x||iteratedDeriv n tanh x| C * (1 + x) ^ 0 n:C:hC: (x : ), |iteratedDeriv n tanh x| Cx:h_equiv:iteratedFDeriv n tanh x = |iteratedDeriv n tanh x||iteratedDeriv n tanh x| C All goals completed! 🐙

Iterated derivative for scaled tanh is differentiable

n:h:ContDiff (n + 1) tanhh':n < n + 1n < n + 1 All goals completed! 🐙

Norm of Iterated derivative for scaled tanh is equal to the norm of its Fderiv

All goals completed! 🐙

Iterated derivative for scaled tanh

κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:h''':(deriv fun x => κ * x) = fun x => κκ ^ n * (iteratedDeriv (n + 1) tanh (κ * x) * (fun x => κ) x) = κ ^ (n + 1) * iteratedDeriv (n + 1) tanh (κ * x)κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (iteratedDeriv n tanh) (κ * x)κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (fun x => κ * x) x κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:h''':(deriv fun x => κ * x) = fun x => κκ ^ n * κ * iteratedDeriv (n + 1) tanh (κ * x) = iteratedDeriv (n + 1) tanh (κ * x) * κ ^ (n + 1)κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (iteratedDeriv n tanh) (κ * x)κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (fun x => κ * x) x κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (iteratedDeriv n tanh) (κ * x)κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (fun x => κ * x) x κ:n:ih: (x : ), iteratedDeriv n (fun y => tanh (κ * y)) x = κ ^ n * iteratedDeriv n tanh (κ * x)h':(iteratedDeriv n fun y => tanh (κ * y)) = fun x => κ ^ n * iteratedDeriv n tanh (κ * x)h'':(fun x => iteratedDeriv n tanh (κ * x)) = iteratedDeriv n tanh fun x => κ * xx:DifferentiableAt (fun x => κ * x) x All goals completed! 🐙

tanh(κx) has temperate growth

κ:n:D:hD: (x : ), |iteratedDeriv n tanh x| Dx:|κ| ^ n * |iteratedDeriv n tanh (κ * x)| |κ| ^ n * D κ:n:D:hD: (x : ), |iteratedDeriv n tanh x| Dx:|iteratedDeriv n tanh (κ * x)| Dκ:n:D:hD: (x : ), |iteratedDeriv n tanh x| Dx:0 |κ| ^ n κ:n:D:hD: (x : ), |iteratedDeriv n tanh x| Dx:0 |κ| ^ n All goals completed! 🐙