Imports
/- Copyright (c) 2025 Tomas Skrivan. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Tomas Skrivan, Joseph Tooby-Smith -/ module public import Physlib.Mathematics.Calculus.Divergence public import Mathlib.Topology.ContinuousMap.CompactlySupported

Test functions

Definition of test function, smooth and compactly supported function, and theorems about them.

@[expose] public section

A test function is a smooth function with compact support.

@[fun_prop] structure IsTestFunction (f : X U) where smooth : ContDiff f supp : HasCompactSupport f

A compactly supported continuous map from a test function.

def IsTestFunction.toCompactlySupportedContinuousMap {f : X U} (hf : IsTestFunction f) : CompactlySupportedContinuousMap X U where toFun := f hasCompactSupport' := hf.supp continuous_toFun := hf.smooth.continuous
lemma IsTestFunction.of_compactlySupportedContinuousMap {f : CompactlySupportedContinuousMap X U} (hf : ContDiff f) : IsTestFunction f.toFun where smooth := hf supp := f.hasCompactSupport'@[fun_prop] lemma IsTestFunction.integrable [MeasurableSpace X] [OpensMeasurableSpace X] {f : X U} (hf : IsTestFunction f) (μ : Measure X) [IsFiniteMeasureOnCompacts μ] : MeasureTheory.Integrable f μ := Continuous.integrable_of_hasCompactSupport (continuous hf.smooth) hf.supp@[fun_prop] lemma IsTestFunction.differentiable {f : X U} (hf : IsTestFunction f) : Differentiable f := hf.1.differentiable (X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction f 0 All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.contDiff {f : X U} (hf : IsTestFunction f) : ContDiff f := hf.1@[fun_prop] lemma IsTestFunction.zero : IsTestFunction (fun _ : X => (0 : U)) where smooth := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace UContDiff fun x => 0 All goals completed! 🐙 supp := HasCompactSupport.zeroX:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_3inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_2inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Vhf:IsTestFunction fg:V Uhg1:g 0 = 0hg:ContDiff gK:Set XcK:IsCompact KhK: x K, f x = 0x:Xhx:x Kg 0 = 0 All goals completed! 🐙@[fun_prop] lemma IsTestFunction.pi {ι} [Fintype ι] {φ : X ι U} ( : i, IsTestFunction (φ · i)) : IsTestFunction (fun x i => φ x i) where smooth := contDiff_pi' (fun i => ( i).smooth) supp := X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iHasCompactSupport fun x i => φ x i X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose HasCompactSupport fun x i => φ x i X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose hK: (i : ι), IsCompact (Classical.choose ) x Classical.choose , φ x i = 0HasCompactSupport fun x i => φ x i X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose hK: (i : ι), IsCompact (Classical.choose ) x Classical.choose , φ x i = 0x:Xhx:x i, K i(fun i => φ x i) = 0 X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose hK: (i : ι), IsCompact (Classical.choose ) x Classical.choose , φ x i = 0x:Xhx: (x_1 : ι), x K x_1(fun i => φ x i) = 0 conv_lhs => X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose hK: (i : ι), IsCompact (Classical.choose ) x Classical.choose , φ x i = 0x:Xhx: (x_1 : ι), x K x_1i:ι| φ x i X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iK:ι Set X := fun i => Classical.choose hK: (i : ι), IsCompact (Classical.choose ) x Classical.choose , φ x i = 0x:Xhx: (x_1 : ι), x K x_1i:ι| 0 All goals completed! 🐙X:Type u_1inst✝¹:NormedAddCommGroup Xinst✝:NormedSpace Xd:i:Fin dφ:X Space d:IsTestFunction φK:Set XcK:IsCompact KhK: x K, φ x = 0x:Xhx:x KSpace.val 0 i = 0 All goals completed! 🐙@[fun_prop] lemma IsTestFunction.prodMk {f : X U} {g : X V} (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => (f x, g x)) where smooth := X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gContDiff fun x => (f x, g x) All goals completed! 🐙 supp := X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gHasCompactSupport fun x => (f x, g x) X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gKf:Set XcKf:IsCompact KfhKf: x Kf, f x = 0HasCompactSupport fun x => (f x, g x) X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gKf:Set XcKf:IsCompact KfhKf: x Kf, f x = 0Kg:Set XcKg:IsCompact KghKg: x Kg, g x = 0HasCompactSupport fun x => (f x, g x) X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gKf:Set XcKf:IsCompact KfhKf: x Kf, f x = 0Kg:Set XcKg:IsCompact KghKg: x Kg, g x = 0x:Xhx:x Kf Kg(f x, g x) = 0 X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_2inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_3inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Ug:X Vhf:IsTestFunction fhg:IsTestFunction gKf:Set XcKf:IsCompact KfhKf: x Kf, f x = 0Kg:Set XcKg:IsCompact KghKg: x Kg, g x = 0x:Xhx:x Kf x Kg(f x, g x) = 0 All goals completed! 🐙@[fun_prop] lemma IsTestFunction.prod_fst {f : X U × V} (hf : IsTestFunction f) : IsTestFunction (fun x => (f x).1) := X:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_1inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_2inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X U × Vhf:IsTestFunction fIsTestFunction fun x => (f x).1 fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.prod_snd {f : X U × V} (hf : IsTestFunction f) : IsTestFunction (fun x => (f x).2) := X:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_1inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_2inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X U × Vhf:IsTestFunction fIsTestFunction fun x => (f x).2 fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.neg {f : X U} (hf : IsTestFunction f) : IsTestFunction (fun x => - f x) := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fIsTestFunction fun x => -f x fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.add {f g : X U} (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x + g x) := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Ug:X Uhf:IsTestFunction fhg:IsTestFunction gIsTestFunction fun x => f x + g x fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.sub {f g : X U} (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x - g x) := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Ug:X Uhf:IsTestFunction fhg:IsTestFunction gIsTestFunction fun x => f x - g x fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.mul {f g : X } (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x * g x) := X:Type u_1inst✝¹:NormedAddCommGroup Xinst✝:NormedSpace Xf:X g:X hf:IsTestFunction fhg:IsTestFunction gIsTestFunction fun x => f x * g x fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.mul_left {f g : X } (hf : ContDiff f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x * g x) where smooth := ContDiff.mul hf hg.smooth supp := HasCompactSupport.mul_left hg.supp@[fun_prop] lemma IsTestFunction.mul_right {f g : X } (hf : IsTestFunction f) (hg : ContDiff g) : IsTestFunction (fun x => f x * g x) where smooth := ContDiff.mul hf.smooth hg supp := HasCompactSupport.mul_right hf.supp@[fun_prop] lemma IsTestFunction.inner [InnerProductSpace' V] {f g : X V} (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x, g x⟫_) := X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:IsTestFunction fhg:IsTestFunction gIsTestFunction fun x => f x, g x⟫_ fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.inner_left [InnerProductSpace' V] {f : X V} {g : X V} (hf : ContDiff f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x, g x⟫_) where smooth := ContDiff.inner' hf hg.smooth supp := X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:ContDiff fhg:IsTestFunction gHasCompactSupport fun x => f x, g x⟫_ X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:ContDiff fhg:IsTestFunction gK:Set XcK:IsCompact KhK: x K, g x = 0HasCompactSupport fun x => f x, g x⟫_ exact exists_compact_iff_hasCompactSupport.mp K, cK, fun x hx => X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:ContDiff fhg:IsTestFunction gK:Set XcK:IsCompact KhK: x K, g x = 0x:Xhx:x Kf x, g x⟫_ = 0 All goals completed! 🐙 -- HasCompactSupport.inner_left hf hg.supp @[fun_prop] lemma IsTestFunction.inner_right [InnerProductSpace' V] {f : X V} {g : X V} (hf : IsTestFunction f) (hg : ContDiff g) : IsTestFunction (fun x => f x, g x⟫_) where smooth := ContDiff.inner' hf.smooth hg supp := X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:IsTestFunction fhg:ContDiff gHasCompactSupport fun x => f x, g x⟫_ X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:IsTestFunction fhg:ContDiff gK:Set XcK:IsCompact KhK: x K, f x = 0HasCompactSupport fun x => f x, g x⟫_ exact exists_compact_iff_hasCompactSupport.mp K, cK, fun x hx => X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XV:Type u_1inst✝²:NormedAddCommGroup Vinst✝¹:NormedSpace Vinst✝:InnerProductSpace' Vf:X Vg:X Vhf:IsTestFunction fhg:ContDiff gK:Set XcK:IsCompact KhK: x K, f x = 0x:Xhx:x Kf x, g x⟫_ = 0 All goals completed! 🐙 -- HasCompactSupport.inner_right hf.supp hg @[fun_prop] lemma IsTestFunction.smul {f : X } {g : X U} (hf : IsTestFunction f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x g x) := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X g:X Uhf:IsTestFunction fhg:IsTestFunction gIsTestFunction fun x => f x g x fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.smul_left {f : X } {g : X U} (hf : ContDiff f) (hg : IsTestFunction g) : IsTestFunction (fun x => f x g x) where smooth := ContDiff.smul hf hg.smooth supp := HasCompactSupport.smul_left hg.supp@[fun_prop] lemma IsTestFunction.smul_right {f : X } {g : X U} (hf : IsTestFunction f) (hg : ContDiff g) : IsTestFunction (fun x => f x g x) where smooth := ContDiff.smul hf.smooth hg supp := HasCompactSupport.smul_right hf.supp@[fun_prop] lemma IsTestFunction.sum {ι} [Fintype ι] {φ : X ι U} { : i, IsTestFunction (φ · i)} : IsTestFunction (fun x => i, φ x i) := X:Type u_2inst✝⁴:NormedAddCommGroup Xinst✝³:NormedSpace XU:Type u_3inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace Uι:Type u_1inst✝:Fintype ιφ:X ι U: (i : ι), IsTestFunction fun x => φ x iIsTestFunction fun x => i, φ x i fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.coord {φ : X Space d} ( : IsTestFunction φ) (i : Fin d) : IsTestFunction (fun x => (φ x).coord i) := X:Type u_1inst✝¹:NormedAddCommGroup Xinst✝:NormedSpace Xd:φ:X Space d:IsTestFunction φi:Fin dIsTestFunction fun x => Space.coord i (φ x) fun_prop (disch:=All goals completed! 🐙)@[fun_prop] lemma IsTestFunction.linearMap_comp {f : X V} (hf : IsTestFunction f) {g : V →ₗ[] U} (hg : ContDiff g) : IsTestFunction (fun x => g (f x)) := X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_3inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_2inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Vhf:IsTestFunction fg:V →ₗ[] Uhg:ContDiff gIsTestFunction fun x => g (f x) fun_prop (disch:=All goals completed! 🐙)X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace XU:Type u_3inst✝³:NormedAddCommGroup Uinst✝²:NormedSpace UV:Type u_2inst✝¹:NormedAddCommGroup Vinst✝:NormedSpace Vf:X Vhf:IsTestFunction fg:X V →L[] Uhg:ContDiff gK:Set XcK:IsCompact KhK: x K, f x = 0x:Xhx:x K(g x) 0 = 0 All goals completed! 🐙@[fun_prop] lemma IsTestFunction.deriv {f : U} (hf : IsTestFunction f) : IsTestFunction (fun x => deriv f x) where smooth := deriv' hf.smooth supp := HasCompactSupport.deriv hf.supp@[fun_prop] lemma IsTestFunction.of_fderiv {f : X U} (hf : IsTestFunction f) : IsTestFunction (fderiv f ·) where smooth := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fContDiff fun x => fderiv f x X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fContDiff (Function.uncurry fun x => f)X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fContDiff fun x => xX:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction f + 1 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fContDiff (Function.uncurry fun x => f) All goals completed! 🐙 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fContDiff fun x => x All goals completed! 🐙 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction f + 1 All goals completed! 🐙 supp := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fHasCompactSupport fun x => fderiv f x X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fHasCompactSupport f All goals completed! 🐙@[fun_prop] lemma IsTestFunction.fderiv_apply {f : X U} (hf : IsTestFunction f) (δx : X) : IsTestFunction (fderiv f · δx) where smooth := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff fun x => (fderiv f x) δx X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff (Function.uncurry fun x => f)X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff fun x => xX:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff fun x => δxX:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:X + 1 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff (Function.uncurry fun x => f) All goals completed! 🐙 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff fun x => x All goals completed! 🐙 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XContDiff fun x => δx All goals completed! 🐙 X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:X + 1 All goals completed! 🐙 supp := X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XHasCompactSupport fun x => (fderiv f x) δx X:Type u_1inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace XU:Type u_2inst✝¹:NormedAddCommGroup Uinst✝:NormedSpace Uf:X Uhf:IsTestFunction fδx:XHasCompactSupport f All goals completed! 🐙X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }IsTestFunction fun x => (bX.repr ((fderiv f x) (bX i))) i X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMapIsTestFunction fun x => (bX.repr ((fderiv f x) (bX i))) i X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'IsTestFunction fun x => (bX.repr ((fderiv f x) (bX i))) i X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'IsTestFunction fun x => f' ((fderiv f x) (bX i)) X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'IsTestFunction fun x => (fderiv f x) (bX i)X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'f' 0 = 0X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'ContDiff f' X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'IsTestFunction fun x => (fderiv f x) (bX i) All goals completed! 🐙 X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'f' 0 = 0 All goals completed! 🐙 X:Type u_1inst✝²:NormedAddCommGroup Xinst✝¹:NormedSpace Xf:X Xinst✝:FiniteDimensional Xhf:IsTestFunction fs:Set XbX:Basis s Xthis:Fintype si:sreprMap:X →ₗ[] := { toFun := fun x => (bX.repr x) i, map_add' := , map_smul' := }f':X →L[] := LinearMap.toContinuousLinearMap reprMaph_trace_contDiff:ContDiff f'ContDiff f' All goals completed! 🐙@[fun_prop] lemma IsTestFunction.gradient {d : } (φ : Space d ) ( : IsTestFunction φ) : IsTestFunction (gradient φ) := d:φ:Space d :IsTestFunction φIsTestFunction (_root_.gradient φ) d:φ:Space d :IsTestFunction φh: (x : Space d), _root_.gradient φ x = _root_.adjFDeriv φ x 1IsTestFunction (_root_.gradient φ) d:φ:Space d :IsTestFunction φh: (x : Space d), _root_.gradient φ x = _root_.adjFDeriv φ x 1IsTestFunction fun x => _root_.gradient (fun a => φ a) x; d:φ:Space d :IsTestFunction φh: (x : Space d), _root_.gradient φ x = _root_.adjFDeriv φ x 1IsTestFunction fun x => _root_.adjFDeriv φ x 1 All goals completed! 🐙@[fun_prop] lemma IsTestFunction.of_div {d : } (φ : Space d EuclideanSpace (Fin d)) ( : IsTestFunction φ) : IsTestFunction (Space.div φ) := d:φ:Space d EuclideanSpace (Fin d):IsTestFunction φIsTestFunction (Space.div φ) d:φ:Space d EuclideanSpace (Fin d):IsTestFunction φIsTestFunction fun x => i, (fderiv (fun x => (φ x).ofLp i) x) (Space.basis i); d:φ:Space d EuclideanSpace (Fin d):IsTestFunction φIsTestFunction fun x => i, (fderiv (fun x => (φ x).ofLp i) x) (Space.basis i); fun_prop (disch:=All goals completed! 🐙)