Imports
/-
Copyright (c) 2026 Robert Sneiderman. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Robert Sneiderman
-/
module
public import PhyslibAlpha.SpaceAndTime.Space.Surfaces.Line
Half-plane surface in Space 3
The half-plane is the coordinate plane in Space 3 with nonnegative second
coordinate.
@[expose] public sectionA. The definition of the half-plane surface
The domain of the half-plane inside Space 2.
def halfPlaneDomain : Set (Space 2) := {x | 0 ≤ x (1 : Fin 2)}
The coordinate plane embedding used for the half-plane surface in Space 3.
lemma halfPlane_eq : halfPlane = (slice (2 : Fin 3)).symm ∘ (fun x : Space 2 => (0, x)) := rfllemma halfPlane_injective : Function.Injective halfPlane := ⊢ Function.Injective halfPlane
x:Space 2y:Space 2h:x.halfPlane = y.halfPlane⊢ x = y
x:Space 2y:Space 2h:x.halfPlane = y.halfPlaneh':(slice 2) x.halfPlane = (slice 2) y.halfPlane⊢ x = y
x:Space 2y:Space 2h:x.halfPlane = y.halfPlaneh':x = y⊢ x = y
All goals completed! 🐙⊢ Continuous (⇑(slice 2).symm ∘ fun x => (0, x))
fun_prop All goals completed! 🐙lemma halfPlane_measurableEmbedding : MeasurableEmbedding halfPlane :=
Continuous.measurableEmbedding halfPlane_continuous halfPlane_injective
@[simp]
lemma norm_halfPlane (x : Space 2) : ‖halfPlane x‖ = ‖x‖ := by x:Space 2⊢ ‖x.halfPlane‖ = ‖x‖
rw [halfPlane, x:Space 2⊢ ‖(slice 2).symm (0, x)‖ = ‖x‖ x:Space 2⊢ √(‖0‖ ^ 2 + ‖x‖ ^ 2) = ‖x‖ norm_slice_symm_eq x:Space 2⊢ √(‖0‖ ^ 2 + ‖x‖ ^ 2) = ‖x‖ x:Space 2⊢ √(‖0‖ ^ 2 + ‖x‖ ^ 2) = ‖x‖] x:Space 2⊢ √(‖0‖ ^ 2 + ‖x‖ ^ 2) = ‖x‖
simp All goals completed! 🐙B. The measure associated with the half-plane
The measure on Space 3 corresponding to integration over a half-plane.
def halfPlaneMeasure : Measure (Space 3) :=
MeasureTheory.Measure.map halfPlane (volume.restrict halfPlaneDomain)
instance halfPlaneMeasure_hasTemperateGrowth :
halfPlaneMeasure.HasTemperateGrowth := by 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ halfPlaneMeasure.HasTemperateGrowth
rw [halfPlaneMeasure 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ (Measure.map halfPlane (volume.restrict halfPlaneDomain)).HasTemperateGrowth 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ (Measure.map halfPlane (volume.restrict halfPlaneDomain)).HasTemperateGrowth] 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ (Measure.map halfPlane (volume.restrict halfPlaneDomain)).HasTemperateGrowth
refine { exists_integrable := ?_ } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ ∃ n, Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) (Measure.map halfPlane (volume.restrict halfPlaneDomain))
obtain ⟨n, hn⟩ := MeasureTheory.Measure.HasTemperateGrowth.exists_integrable
(μ := volume (α := Space 2)) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ ∃ n, Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) (Measure.map halfPlane (volume.restrict halfPlaneDomain))
use n h 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) (Measure.map halfPlane (volume.restrict halfPlaneDomain))
rw [MeasurableEmbedding.integrable_map_iff halfPlane_measurableEmbedding h 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ Integrable ((fun x => (1 + ‖x‖) ^ (-↑n)) ∘ halfPlane) (volume.restrict halfPlaneDomain) h 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ Integrable ((fun x => (1 + ‖x‖) ^ (-↑n)) ∘ halfPlane) (volume.restrict halfPlaneDomain)]h 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ Integrable ((fun x => (1 + ‖x‖) ^ (-↑n)) ∘ halfPlane) (volume.restrict halfPlaneDomain)
convert! hn.restrict using 1 e'_6 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volume⊢ (fun x => (1 + ‖x‖) ^ (-↑n)) ∘ halfPlane = fun x => (1 + ‖x‖) ^ (-↑n)
ext x e'_6 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fn:ℕhn:Integrable (fun x => (1 + ‖x‖) ^ (-↑n)) volumex:Space 2⊢ ((fun x => (1 + ‖x‖) ^ (-↑n)) ∘ halfPlane) x = (1 + ‖x‖) ^ (-↑n)
simp [norm_halfPlane] All goals completed! 🐙
instance halfPlaneMeasure_sFinite : SFinite halfPlaneMeasure := by 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ SFinite halfPlaneMeasure
rw [halfPlaneMeasure 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ SFinite (Measure.map halfPlane (volume.restrict halfPlaneDomain)) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ SFinite (Measure.map halfPlane (volume.restrict halfPlaneDomain))] 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ SFinite (Measure.map halfPlane (volume.restrict halfPlaneDomain))
exact Measure.instSFiniteMap (volume.restrict halfPlaneDomain) halfPlane All goals completed! 🐙C. The distribution associated with the half-plane
The distribution on Space 3 corresponding to integration over a half-plane.
def halfPlaneDist : (Space 3) →d[ℝ] ℝ :=
SchwartzMap.integralCLM ℝ halfPlaneMeasure
lemma halfPlaneDist_apply_eq_integral_halfPlaneMeasure (f : 𝓢(Space 3, ℝ)) :
halfPlaneDist f = ∫ x, f x ∂halfPlaneMeasure := by f:𝓢(Space, ℝ)⊢ halfPlaneDist f = ∫ (x : Space), f x ∂halfPlaneMeasure
rw [halfPlaneDist, f:𝓢(Space, ℝ)⊢ (integralCLM ℝ halfPlaneMeasure) f = ∫ (x : Space), f x ∂halfPlaneMeasure All goals completed! 🐙 SchwartzMap.integralCLM_apply f:𝓢(Space, ℝ)⊢ ∫ (x : Space), f x ∂halfPlaneMeasure = ∫ (x : Space), f x ∂halfPlaneMeasure All goals completed! 🐙] All goals completed! 🐙
lemma halfPlaneDist_apply_eq_integral_volume (f : 𝓢(Space 3, ℝ)) :
halfPlaneDist f = ∫ x, f (halfPlane x) ∂(volume.restrict halfPlaneDomain) := by f:𝓢(Space, ℝ)⊢ halfPlaneDist f = ∫ (x : Space 2) in halfPlaneDomain, f x.halfPlane
rw [halfPlaneDist_apply_eq_integral_halfPlaneMeasure, f:𝓢(Space, ℝ)⊢ ∫ (x : Space), f x ∂halfPlaneMeasure = ∫ (x : Space 2) in halfPlaneDomain, f x.halfPlane All goals completed! 🐙 halfPlaneMeasure, f:𝓢(Space, ℝ)⊢ ∫ (x : Space), f x ∂Measure.map halfPlane (volume.restrict halfPlaneDomain) =
∫ (x : Space 2) in halfPlaneDomain, f x.halfPlane All goals completed! 🐙
MeasurableEmbedding.integral_map halfPlane_measurableEmbedding f:𝓢(Space, ℝ)⊢ ∫ (x : Space 2) in halfPlaneDomain, f x.halfPlane ∂volume = ∫ (x : Space 2) in halfPlaneDomain, f x.halfPlane All goals completed! 🐙] All goals completed! 🐙D. The half-plane has ambient volume zero
The coordinate plane containing the half-plane in Space 3.
def halfPlaneSubmodule : Submodule ℝ (Space 3) where
carrier := {x | x (2 : Fin 3) = 0}
zero_mem' := by 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ F⊢ 0 ∈ {x | x.val 3 2 = 0} simp All goals completed! 🐙
add_mem' hx hy := by 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝ ∈ {x | x.val 3 2 = 0}hy:b✝ ∈ {x | x.val 3 2 = 0}⊢ a✝ + b✝ ∈ {x | x.val 3 2 = 0}
rw [Set.mem_setOf_eq 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ (a✝ + b✝).val 3 2 = 0 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ (a✝ + b✝).val 3 2 = 0] at hx hy ⊢ 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ (a✝ + b✝).val 3 2 = 0
rw [Space.add_apply, 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ a✝.val 3 2 + b✝.val 3 2 = 0 All goals completed! 🐙 hx, 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ 0 + b✝.val 3 2 = 0 All goals completed! 🐙 hy, 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ 0 + 0 = 0 All goals completed! 🐙 add_zero 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fa✝:Spaceb✝:Spacehx:a✝.val 3 2 = 0hy:b✝.val 3 2 = 0⊢ 0 = 0 All goals completed! 🐙] All goals completed! 🐙
smul_mem' c x hx := by 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x ∈ {x | x.val 3 2 = 0}⊢ c • x ∈ {x | x.val 3 2 = 0}
rw [Set.mem_setOf_eq 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ (c • x).val 3 2 = 0 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ (c • x).val 3 2 = 0] at hx ⊢ 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ (c • x).val 3 2 = 0
rw [Space.smul_apply, 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ c * x.val 3 2 = 0 All goals completed! 🐙 hx, 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ c * 0 = 0 All goals completed! 🐙 mul_zero 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace ℝ Einst✝:NormedSpace ℝ Fc:ℝx:Spacehx:x.val 3 2 = 0⊢ 0 = 0 All goals completed! 🐙] All goals completed! 🐙lemma halfPlane_mem_halfPlaneSubmodule (x : Space 2) : halfPlane x ∈ halfPlaneSubmodule := by x:Space 2⊢ x.halfPlane ∈ halfPlaneSubmodule
simp [halfPlaneSubmodule, halfPlane] All goals completed! 🐙lemma halfPlane_image_domain_subset_halfPlaneSubmodule :
halfPlane '' halfPlaneDomain ⊆ (halfPlaneSubmodule : Set (Space 3)) := by ⊢ halfPlane '' halfPlaneDomain ⊆ ↑halfPlaneSubmodule
rintro x ⟨y, _, rfl⟩ y:Space 2left✝:y ∈ halfPlaneDomain⊢ y.halfPlane ∈ ↑halfPlaneSubmodule
exact halfPlane_mem_halfPlaneSubmodule y All goals completed! 🐙
lemma halfPlaneSubmodule_ne_top : halfPlaneSubmodule ≠ ⊤ := by ⊢ halfPlaneSubmodule ≠ ⊤
intro htop htop:halfPlaneSubmodule = ⊤⊢ False
have hbasis : basis (2 : Fin 3) ∈ halfPlaneSubmodule := by ⊢ halfPlaneSubmodule ≠ ⊤ htop:halfPlaneSubmodule = ⊤hbasis:basis 2 ∈ halfPlaneSubmodule⊢ False
rw [htop htop:halfPlaneSubmodule = ⊤⊢ basis 2 ∈ ⊤ htop:halfPlaneSubmodule = ⊤⊢ basis 2 ∈ ⊤ htop:halfPlaneSubmodule = ⊤hbasis:basis 2 ∈ halfPlaneSubmodule⊢ False] htop:halfPlaneSubmodule = ⊤⊢ basis 2 ∈ ⊤ htop:halfPlaneSubmodule = ⊤hbasis:basis 2 ∈ halfPlaneSubmodule⊢ False
exact Submodule.mem_top htop:halfPlaneSubmodule = ⊤hbasis:basis 2 ∈ halfPlaneSubmodule⊢ False htop:halfPlaneSubmodule = ⊤hbasis:basis 2 ∈ halfPlaneSubmodule⊢ False
simp [halfPlaneSubmodule] at hbasis All goals completed! 🐙
lemma volume_halfPlane_image_domain :
volume (halfPlane '' halfPlaneDomain : Set (Space 3)) = 0 := by ⊢ volume (halfPlane '' halfPlaneDomain) = 0
refine measure_mono_null halfPlane_image_domain_subset_halfPlaneSubmodule ?_ ⊢ volume ↑halfPlaneSubmodule = 0
rw [volume_eq_addHaar ⊢ basis.toBasis.addHaar ↑halfPlaneSubmodule = 0 ⊢ basis.toBasis.addHaar ↑halfPlaneSubmodule = 0] ⊢ basis.toBasis.addHaar ↑halfPlaneSubmodule = 0
exact MeasureTheory.Measure.addHaar_submodule
(Space.basis.toBasis.addHaar : Measure (Space 3))
halfPlaneSubmodule halfPlaneSubmodule_ne_top All goals completed! 🐙