Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 0b356b0

Browse files
committed
feat(analysis/normed_space/banach): open mapping theorem for maps between affine spaces (#9540)
Formalized as part of the Sphere Eversion project.
1 parent 5773bc6 commit 0b356b0

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/analysis/normed_space/banach.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Sébastien Gouëzel
55
-/
66
import topology.metric_space.baire
77
import analysis.normed_space.operator_norm
8+
import analysis.normed_space.affine_isometry
89

910
/-!
1011
# Banach open mapping theorem
@@ -239,6 +240,17 @@ begin
239240
exact set.mem_image_of_mem _ (hε this)
240241
end
241242

243+
lemma open_mapping_affine {P Q : Type*}
244+
[metric_space P] [normed_add_torsor E P] [metric_space Q] [normed_add_torsor F Q]
245+
{f : P →ᵃ[𝕜] Q} (hf : continuous f) (surj : surjective f) :
246+
is_open_map f :=
247+
begin
248+
rw ← affine_map.is_open_map_linear_iff,
249+
exact open_mapping
250+
{ cont := affine_map.continuous_linear_iff.mpr hf, .. f.linear }
251+
(f.surjective_iff_linear_surjective.mpr surj),
252+
end
253+
242254
/-! ### Applications of the Banach open mapping theorem -/
243255

244256
namespace continuous_linear_map

src/linear_algebra/affine_space/affine_map.lean

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,19 @@ include V2
293293
@[simp] lemma injective_iff_linear_injective (f : P1 →ᵃ[k] P2) :
294294
function.injective f.linear ↔ function.injective f :=
295295
begin
296-
split; intros hf x y hxy,
297-
{ rw [← @vsub_eq_zero_iff_eq V1, ← @submodule.mem_bot k V1, ← linear_map.ker_eq_bot.mpr hf,
298-
linear_map.mem_ker, affine_map.linear_map_vsub, hxy, vsub_self], },
299-
{ obtain ⟨p⟩ := (by apply_instance : nonempty P1),
300-
have hxy' : (f.linear x) +ᵥ f p = (f.linear y) +ᵥ f p, { rw hxy, },
301-
rw [← f.map_vadd, ← f.map_vadd] at hxy',
302-
exact (vadd_right_cancel_iff _).mp (hf hxy'), },
296+
obtain ⟨p⟩ := (infer_instance : nonempty P1),
297+
have h : ⇑f.linear = (equiv.vadd_const (f p)).symm ∘ f ∘ (equiv.vadd_const p),
298+
{ ext v, simp [f.map_vadd, vadd_vsub_assoc], },
299+
rw [h, equiv.comp_injective, equiv.injective_comp],
300+
end
301+
302+
@[simp] lemma surjective_iff_linear_surjective (f : P1 →ᵃ[k] P2) :
303+
function.surjective f.linear ↔ function.surjective f :=
304+
begin
305+
obtain ⟨p⟩ := (infer_instance : nonempty P1),
306+
have h : ⇑f.linear = (equiv.vadd_const (f p)).symm ∘ f ∘ (equiv.vadd_const p),
307+
{ ext v, simp [f.map_vadd, vadd_vsub_assoc], },
308+
rw [h, equiv.comp_surjective, equiv.surjective_comp],
303309
end
304310

305311
omit V2

0 commit comments

Comments
 (0)