analysis.normed.group.controlled_closure
⟷
Mathlib.Analysis.Normed.Group.ControlledClosure
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -72,7 +72,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
calc
‖u n‖ ≤ C * ‖v n‖ := hnorm_u n
_ ≤ C * b n := (mul_le_mul_of_nonneg_left (hv _ <| nat.succ_le_iff.mp hn).le hC.le)
- _ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [b, mul_div_cancel' _ hC.ne.symm]
+ _ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [b, mul_div_cancel₀ _ hC.ne.symm]
_ = ε * ‖h‖ / 2 * (1 / 2) ^ n := mul_comm _ _
-- We now show that the limit `g` of `s` is the desired preimage.
obtain ⟨g : G, hg⟩ := cauchySeq_tendsto_of_complete this
@@ -104,10 +104,10 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
have : ∑ k in range (n + 1), C * b k ≤ ε * ‖h‖ :=
calc
∑ k in range (n + 1), C * b k = (∑ k in range (n + 1), (1 / 2) ^ k) * (ε * ‖h‖ / 2) := by
- simp only [b, mul_div_cancel' _ hC.ne.symm, ← sum_mul]
+ simp only [b, mul_div_cancel₀ _ hC.ne.symm, ← sum_mul]
_ ≤ 2 * (ε * ‖h‖ / 2) :=
(mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h]))
- _ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
+ _ = ε * ‖h‖ := mul_div_cancel₀ _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
_ = ∑ k in range n, ‖u (k + 1)‖ + ‖u 0‖ := (sum_range_succ' _ _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -85,7 +85,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
/- In the above equality, the left-hand-side converges to `f g` by continuity of `f` and
definition of `g` while the right-hand-side converges to `h` by construction of `v` so
`g` is indeed a preimage of `h`. -/
- rw [← this] at lim_v
+ rw [← this] at lim_v
exact tendsto_nhds_unique ((f.continuous.tendsto g).comp hg) lim_v
· -- Then we need to estimate the norm of `g`, using our careful choice of `b`.
suffices : ∀ n, ‖s n‖ ≤ (C + ε) * ‖h‖
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 Patrick Massot. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
-/
-import Mathbin.Analysis.Normed.Group.Hom
-import Mathbin.Analysis.SpecificLimits.Normed
+import Analysis.Normed.Group.Hom
+import Analysis.SpecificLimits.Normed
#align_import analysis.normed.group.controlled_closure from "leanprover-community/mathlib"@"781cb2eed038c4caf53bdbd8d20a95e5822d77df"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Patrick Massot. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
-
-! This file was ported from Lean 3 source module analysis.normed.group.controlled_closure
-! leanprover-community/mathlib commit 781cb2eed038c4caf53bdbd8d20a95e5822d77df
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Normed.Group.Hom
import Mathbin.Analysis.SpecificLimits.Normed
+#align_import analysis.normed.group.controlled_closure from "leanprover-community/mathlib"@"781cb2eed038c4caf53bdbd8d20a95e5822d77df"
+
/-! # Extending a backward bound on a normed group homomorphism from a dense set
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -31,6 +31,7 @@ variable {G : Type _} [NormedAddCommGroup G] [CompleteSpace G]
variable {H : Type _} [NormedAddCommGroup H]
+#print controlled_closure_of_complete /-
/-- Given `f : normed_add_group_hom G H` for some complete `G` and a subgroup `K` of `H`, if every
element `x` of `K` has a preimage under `f` whose norm is at most `C*‖x‖` then the same holds for
elements of the (topological) closure of `K` with constant `C+ε` instead of `C`, for any
@@ -121,7 +122,9 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
_ = ∑ k in range (n + 1), C * b k + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
_ ≤ (C + ε) * ‖h‖ := by rw [add_comm, add_mul]; apply add_le_add_left this
#align controlled_closure_of_complete controlled_closure_of_complete
+-/
+#print controlled_closure_range_of_complete /-
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
an isometric immersion `j : normed_add_group_hom K H` has a preimage under `f` whose norm is at most
`C*‖x‖` then the same holds for elements of the (topological) closure of this image with constant
@@ -141,4 +144,5 @@ theorem controlled_closure_range_of_complete {f : NormedAddGroupHom G H} {K : Ty
exact hyp k
exact controlled_closure_of_complete hC hε hyp
#align controlled_closure_range_of_complete controlled_closure_range_of_complete
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -103,22 +103,22 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
‖u 0‖ ≤ C * ‖v 0‖ := hnorm_u 0
_ ≤ C * (‖h‖ + b 0) := (mul_le_mul_of_nonneg_left this hC.le)
_ = C * b 0 + C * ‖h‖ := by rw [add_comm, mul_add]
- have : (∑ k in range (n + 1), C * b k) ≤ ε * ‖h‖ :=
+ have : ∑ k in range (n + 1), C * b k ≤ ε * ‖h‖ :=
calc
- (∑ k in range (n + 1), C * b k) = (∑ k in range (n + 1), (1 / 2) ^ k) * (ε * ‖h‖ / 2) := by
+ ∑ k in range (n + 1), C * b k = (∑ k in range (n + 1), (1 / 2) ^ k) * (ε * ‖h‖ / 2) := by
simp only [b, mul_div_cancel' _ hC.ne.symm, ← sum_mul]
_ ≤ 2 * (ε * ‖h‖ / 2) :=
(mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h]))
_ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
- _ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
- _ ≤ (∑ k in range n, C * ‖v (k + 1)‖) + ‖u 0‖ :=
+ _ = ∑ k in range n, ‖u (k + 1)‖ + ‖u 0‖ := (sum_range_succ' _ _)
+ _ ≤ ∑ k in range n, C * ‖v (k + 1)‖ + ‖u 0‖ :=
(add_le_add_right (sum_le_sum fun _ _ => hnorm_u _) _)
- _ ≤ (∑ k in range n, C * b (k + 1)) + (C * b 0 + C * ‖h‖) :=
+ _ ≤ ∑ k in range n, C * b (k + 1) + (C * b 0 + C * ‖h‖) :=
(add_le_add (sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (hv _ k.succ_pos).le hC.le)
hnorm₀)
- _ = (∑ k in range (n + 1), C * b k) + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
+ _ = ∑ k in range (n + 1), C * b k + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
_ ≤ (C + ε) * ‖h‖ := by rw [add_comm, add_mul]; apply add_le_add_left this
#align controlled_closure_of_complete controlled_closure_of_complete
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -76,7 +76,6 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
_ ≤ C * b n := (mul_le_mul_of_nonneg_left (hv _ <| nat.succ_le_iff.mp hn).le hC.le)
_ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [b, mul_div_cancel' _ hC.ne.symm]
_ = ε * ‖h‖ / 2 * (1 / 2) ^ n := mul_comm _ _
-
-- We now show that the limit `g` of `s` is the desired preimage.
obtain ⟨g : G, hg⟩ := cauchySeq_tendsto_of_complete this
refine' ⟨g, _, _⟩
@@ -100,12 +99,10 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
calc
‖v 0‖ ≤ ‖h‖ + ‖v 0 - h‖ := norm_le_insert' _ _
_ ≤ ‖h‖ + b 0 := by apply add_le_add_left hv₀.le
-
calc
‖u 0‖ ≤ C * ‖v 0‖ := hnorm_u 0
_ ≤ C * (‖h‖ + b 0) := (mul_le_mul_of_nonneg_left this hC.le)
_ = C * b 0 + C * ‖h‖ := by rw [add_comm, mul_add]
-
have : (∑ k in range (n + 1), C * b k) ≤ ε * ‖h‖ :=
calc
(∑ k in range (n + 1), C * b k) = (∑ k in range (n + 1), (1 / 2) ^ k) * (ε * ‖h‖ / 2) := by
@@ -113,7 +110,6 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
_ ≤ 2 * (ε * ‖h‖ / 2) :=
(mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h]))
_ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
-
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
_ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
@@ -124,7 +120,6 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
hnorm₀)
_ = (∑ k in range (n + 1), C * b k) + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
_ ≤ (C + ε) * ‖h‖ := by rw [add_comm, add_mul]; apply add_le_add_left this
-
#align controlled_closure_of_complete controlled_closure_of_complete
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -88,7 +88,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
/- In the above equality, the left-hand-side converges to `f g` by continuity of `f` and
definition of `g` while the right-hand-side converges to `h` by construction of `v` so
`g` is indeed a preimage of `h`. -/
- rw [← this] at lim_v
+ rw [← this] at lim_v
exact tendsto_nhds_unique ((f.continuous.tendsto g).comp hg) lim_v
· -- Then we need to estimate the norm of `g`, using our careful choice of `b`.
suffices : ∀ n, ‖s n‖ ≤ (C + ε) * ‖h‖
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -25,7 +25,7 @@ lemmas in this file]."
open Filter Finset
-open Topology BigOperators
+open scoped Topology BigOperators
variable {G : Type _} [NormedAddCommGroup G] [CompleteSpace G]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,12 +31,6 @@ variable {G : Type _} [NormedAddCommGroup G] [CompleteSpace G]
variable {H : Type _} [NormedAddCommGroup H]
-/- warning: controlled_closure_of_complete -> controlled_closure_of_complete is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : AddSubgroup.{u2} H (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3)) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε))
-but is expected to have type
- forall {G : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} G] [_inst_2 : CompleteSpace.{u2} G (PseudoMetricSpace.toUniformSpace.{u2} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1)))] {H : Type.{u1}} [_inst_3 : NormedAddCommGroup.{u1} H] {f : NormedAddGroupHom.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)} {K : AddSubgroup.{u1} H (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f (AddSubgroup.topologicalClosure.{u1} H (UniformSpace.toTopologicalSpace.{u1} H (PseudoMetricSpace.toUniformSpace.{u1} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)))) (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3)) (SeminormedAddCommGroup.toTopologicalAddGroup.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε))
-Case conversion may be inaccurate. Consider using '#align controlled_closure_of_complete controlled_closure_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G` and a subgroup `K` of `H`, if every
element `x` of `K` has a preimage under `f` whose norm is at most `C*‖x‖` then the same holds for
elements of the (topological) closure of `K` with constant `C+ε` instead of `C`, for any
@@ -133,9 +127,6 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
#align controlled_closure_of_complete controlled_closure_of_complete
-/- warning: controlled_closure_range_of_complete -> controlled_closure_range_of_complete is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align controlled_closure_range_of_complete controlled_closure_range_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
an isometric immersion `j : normed_add_group_hom K H` has a preimage under `f` whose norm is at most
`C*‖x‖` then the same holds for elements of the (topological) closure of this image with constant
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -129,9 +129,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
(add_le_add (sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (hv _ k.succ_pos).le hC.le)
hnorm₀)
_ = (∑ k in range (n + 1), C * b k) + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
- _ ≤ (C + ε) * ‖h‖ := by
- rw [add_comm, add_mul]
- apply add_le_add_left this
+ _ ≤ (C + ε) * ‖h‖ := by rw [add_comm, add_mul]; apply add_le_add_left this
#align controlled_closure_of_complete controlled_closure_of_complete
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -136,10 +136,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
#align controlled_closure_of_complete controlled_closure_of_complete
/- warning: controlled_closure_range_of_complete -> controlled_closure_range_of_complete is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u3} K] {j : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toHasNorm.{u2} H _inst_3) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j x)) (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (k : K), Exists.{succ u1} G (fun (g : G) => And (Eq.{succ u2} H (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => G -> H) (NormedAddGroupHom.hasCoeToFun.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) f g) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j k)) (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} G (NormedAddCommGroup.toHasNorm.{u1} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε)))
-but is expected to have type
- forall {G : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u3} G] [_inst_2 : CompleteSpace.{u3} G (PseudoMetricSpace.toUniformSpace.{u3} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} K] {j : NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toNorm.{u2} H _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j x)) (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (k : K), Exists.{succ u3} G (fun (g : G) => And (Eq.{succ u2} H (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G (fun (_x : G) => H) (AddHomClass.toFunLike.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1))))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) f g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j k)) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} G (NormedAddCommGroup.toNorm.{u3} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε)))
+<too large>
Case conversion may be inaccurate. Consider using '#align controlled_closure_range_of_complete controlled_closure_range_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
an isometric immersion `j : normed_add_group_hom K H` has a preimage under `f` whose norm is at most
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -33,9 +33,9 @@ variable {H : Type _} [NormedAddCommGroup H]
/- warning: controlled_closure_of_complete -> controlled_closure_of_complete is a dubious translation:
lean 3 declaration is
- forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : AddSubgroup.{u2} H (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3)) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε))
+ forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : AddSubgroup.{u2} H (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3)) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε))
but is expected to have type
- forall {G : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} G] [_inst_2 : CompleteSpace.{u2} G (PseudoMetricSpace.toUniformSpace.{u2} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1)))] {H : Type.{u1}} [_inst_3 : NormedAddCommGroup.{u1} H] {f : NormedAddGroupHom.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)} {K : AddSubgroup.{u1} H (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f (AddSubgroup.topologicalClosure.{u1} H (UniformSpace.toTopologicalSpace.{u1} H (PseudoMetricSpace.toUniformSpace.{u1} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)))) (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3)) (SeminormedAddCommGroup.to_topologicalAddGroup.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε))
+ forall {G : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} G] [_inst_2 : CompleteSpace.{u2} G (PseudoMetricSpace.toUniformSpace.{u2} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1)))] {H : Type.{u1}} [_inst_3 : NormedAddCommGroup.{u1} H] {f : NormedAddGroupHom.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)} {K : AddSubgroup.{u1} H (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f (AddSubgroup.topologicalClosure.{u1} H (UniformSpace.toTopologicalSpace.{u1} H (PseudoMetricSpace.toUniformSpace.{u1} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)))) (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3)) (SeminormedAddCommGroup.toTopologicalAddGroup.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε))
Case conversion may be inaccurate. Consider using '#align controlled_closure_of_complete controlled_closure_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G` and a subgroup `K` of `H`, if every
element `x` of `K` has a preimage under `f` whose norm is at most `C*‖x‖` then the same holds for
@@ -137,9 +137,9 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
/- warning: controlled_closure_range_of_complete -> controlled_closure_range_of_complete is a dubious translation:
lean 3 declaration is
- forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u3} K] {j : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toHasNorm.{u2} H _inst_3) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j x)) (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (k : K), Exists.{succ u1} G (fun (g : G) => And (Eq.{succ u2} H (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => G -> H) (NormedAddGroupHom.hasCoeToFun.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) f g) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j k)) (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} G (NormedAddCommGroup.toHasNorm.{u1} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε)))
+ forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u3} K] {j : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toHasNorm.{u2} H _inst_3) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j x)) (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (k : K), Exists.{succ u1} G (fun (g : G) => And (Eq.{succ u2} H (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => G -> H) (NormedAddGroupHom.hasCoeToFun.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) f g) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j k)) (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} G (NormedAddCommGroup.toHasNorm.{u1} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε)))
but is expected to have type
- forall {G : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u3} G] [_inst_2 : CompleteSpace.{u3} G (PseudoMetricSpace.toUniformSpace.{u3} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} K] {j : NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toNorm.{u2} H _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j x)) (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (k : K), Exists.{succ u3} G (fun (g : G) => And (Eq.{succ u2} H (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G (fun (_x : G) => H) (AddHomClass.toFunLike.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1))))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) f g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j k)) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} G (NormedAddCommGroup.toNorm.{u3} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε)))
+ forall {G : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u3} G] [_inst_2 : CompleteSpace.{u3} G (PseudoMetricSpace.toUniformSpace.{u3} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} K] {j : NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toNorm.{u2} H _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j x)) (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (k : K), Exists.{succ u3} G (fun (g : G) => And (Eq.{succ u2} H (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G (fun (_x : G) => H) (AddHomClass.toFunLike.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1))))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) f g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j k)) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} G (NormedAddCommGroup.toNorm.{u3} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.toTopologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε)))
Case conversion may be inaccurate. Consider using '#align controlled_closure_range_of_complete controlled_closure_range_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
an isometric immersion `j : normed_add_group_hom K H` has a preimage under `f` whose norm is at most
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
! This file was ported from Lean 3 source module analysis.normed.group.controlled_closure
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 781cb2eed038c4caf53bdbd8d20a95e5822d77df
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Analysis.SpecificLimits.Normed
/-! # Extending a backward bound on a normed group homomorphism from a dense set
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Possible TODO (from the PR's review, https://github.com/leanprover-community/mathlib/pull/8498 ):
"This feels a lot like the second step in the proof of the Banach open mapping theorem
(`exists_preimage_norm_le`) ... wonder if it would be possible to refactor it using one of [the
mathlib commit https://github.com/leanprover-community/mathlib/commit/28b2a92f2996d28e580450863c130955de0ed398
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
! This file was ported from Lean 3 source module analysis.normed.group.controlled_closure
-! leanprover-community/mathlib commit 781cb2eed038c4caf53bdbd8d20a95e5822d77df
+! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,9 +13,6 @@ import Mathbin.Analysis.SpecificLimits.Normed
/-! # Extending a backward bound on a normed group homomorphism from a dense set
-> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
-> Any changes to this file require a corresponding PR to mathlib4.
-
Possible TODO (from the PR's review, https://github.com/leanprover-community/mathlib/pull/8498 ):
"This feels a lot like the second step in the proof of the Banach open mapping theorem
(`exists_preimage_norm_le`) ... wonder if it would be possible to refactor it using one of [the
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
! This file was ported from Lean 3 source module analysis.normed.group.controlled_closure
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 781cb2eed038c4caf53bdbd8d20a95e5822d77df
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Analysis.SpecificLimits.Normed
/-! # Extending a backward bound on a normed group homomorphism from a dense set
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Possible TODO (from the PR's review, https://github.com/leanprover-community/mathlib/pull/8498 ):
"This feels a lot like the second step in the proof of the Banach open mapping theorem
(`exists_preimage_norm_le`) ... wonder if it would be possible to refactor it using one of [the
mathlib commit https://github.com/leanprover-community/mathlib/commit/cc5dd6244981976cc9da7afc4eee5682b037a013
@@ -28,6 +28,12 @@ variable {G : Type _} [NormedAddCommGroup G] [CompleteSpace G]
variable {H : Type _} [NormedAddCommGroup H]
+/- warning: controlled_closure_of_complete -> controlled_closure_of_complete is a dubious translation:
+lean 3 declaration is
+ forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : AddSubgroup.{u2} H (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (NormedAddGroup.toAddGroup.{u2} H (NormedAddCommGroup.toNormedAddGroup.{u2} H _inst_3)) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε))
+but is expected to have type
+ forall {G : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} G] [_inst_2 : CompleteSpace.{u2} G (PseudoMetricSpace.toUniformSpace.{u2} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1)))] {H : Type.{u1}} [_inst_3 : NormedAddCommGroup.{u1} H] {f : NormedAddGroupHom.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)} {K : AddSubgroup.{u1} H (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3))} {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f K C) -> (NormedAddGroupHom.SurjectiveOnWith.{u2, u1} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3) f (AddSubgroup.topologicalClosure.{u1} H (UniformSpace.toTopologicalSpace.{u1} H (PseudoMetricSpace.toUniformSpace.{u1} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)))) (NormedAddGroup.toAddGroup.{u1} H (NormedAddCommGroup.toNormedAddGroup.{u1} H _inst_3)) (SeminormedAddCommGroup.to_topologicalAddGroup.{u1} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} H _inst_3)) K) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε))
+Case conversion may be inaccurate. Consider using '#align controlled_closure_of_complete controlled_closure_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G` and a subgroup `K` of `H`, if every
element `x` of `K` has a preimage under `f` whose norm is at most `C*‖x‖` then the same holds for
elements of the (topological) closure of `K` with constant `C+ε` instead of `C`, for any
@@ -126,6 +132,12 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
#align controlled_closure_of_complete controlled_closure_of_complete
+/- warning: controlled_closure_range_of_complete -> controlled_closure_range_of_complete is a dubious translation:
+lean 3 declaration is
+ forall {G : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} G] [_inst_2 : CompleteSpace.{u1} G (PseudoMetricSpace.toUniformSpace.{u1} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u3} K] {j : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toHasNorm.{u2} H _inst_3) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j x)) (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (k : K), Exists.{succ u1} G (fun (g : G) => And (Eq.{succ u2} H (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => G -> H) (NormedAddGroupHom.hasCoeToFun.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) f g) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (fun (_x : NormedAddGroupHom.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) => K -> H) (NormedAddGroupHom.hasCoeToFun.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) j k)) (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} G (NormedAddCommGroup.toHasNorm.{u1} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} K (SeminormedAddCommGroup.toHasNorm.{u3} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u1, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u3, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) C ε)))
+but is expected to have type
+ forall {G : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u3} G] [_inst_2 : CompleteSpace.{u3} G (PseudoMetricSpace.toUniformSpace.{u3} G (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))] {H : Type.{u2}} [_inst_3 : NormedAddCommGroup.{u2} H] {f : NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)} {K : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} K] {j : NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)}, (forall (x : K), Eq.{1} Real (Norm.norm.{u2} H (NormedAddCommGroup.toNorm.{u2} H _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j x)) (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) x)) -> (forall {C : Real} {ε : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (k : K), Exists.{succ u3} G (fun (g : G) => And (Eq.{succ u2} H (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G (fun (_x : G) => H) (AddHomClass.toFunLike.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1))))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u3 u2, u3, u2} (NormedAddGroupHom.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G (SeminormedAddGroup.toAddGroup.{u3} G (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} G (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1)))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) f g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K (fun (_x : K) => H) (AddHomClass.toFunLike.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddZeroClass.toAdd.{u1} K (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4)))))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))))))) (AddMonoidHomClass.toAddHomClass.{max u1 u2, u1, u2} (NormedAddGroupHom.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) K H (AddMonoid.toAddZeroClass.{u1} K (SubNegMonoid.toAddMonoid.{u1} K (AddGroup.toSubNegMonoid.{u1} K (SeminormedAddGroup.toAddGroup.{u1} K (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} K _inst_4))))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (AddGroup.toSubNegMonoid.{u2} H (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))))) (NormedAddGroupHom.toAddMonoidHomClass.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) j k)) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} G (NormedAddCommGroup.toNorm.{u3} G _inst_1) g) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} K (SeminormedAddCommGroup.toNorm.{u1} K _inst_4) k))))) -> (NormedAddGroupHom.SurjectiveOnWith.{u3, u2} G H (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} G _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) f (AddSubgroup.topologicalClosure.{u2} H (UniformSpace.toTopologicalSpace.{u2} H (PseudoMetricSpace.toUniformSpace.{u2} H (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)))) (SeminormedAddGroup.toAddGroup.{u2} H (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3))) (SeminormedAddCommGroup.to_topologicalAddGroup.{u2} H (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3)) (NormedAddGroupHom.range.{u1, u2} K H _inst_4 (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} H _inst_3) j)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) C ε)))
+Case conversion may be inaccurate. Consider using '#align controlled_closure_range_of_complete controlled_closure_range_of_completeₓ'. -/
/-- Given `f : normed_add_group_hom G H` for some complete `G`, if every element `x` of the image of
an isometric immersion `j : normed_add_group_hom K H` has a preimage under `f` whose norm is at most
`C*‖x‖` then the same holds for elements of the (topological) closure of this image with constant
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -70,7 +70,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
rintro n (hn : n ≥ 1)
calc
‖u n‖ ≤ C * ‖v n‖ := hnorm_u n
- _ ≤ C * b n := mul_le_mul_of_nonneg_left (hv _ <| nat.succ_le_iff.mp hn).le hC.le
+ _ ≤ C * b n := (mul_le_mul_of_nonneg_left (hv _ <| nat.succ_le_iff.mp hn).le hC.le)
_ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [b, mul_div_cancel' _ hC.ne.symm]
_ = ε * ‖h‖ / 2 * (1 / 2) ^ n := mul_comm _ _
@@ -100,7 +100,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
calc
‖u 0‖ ≤ C * ‖v 0‖ := hnorm_u 0
- _ ≤ C * (‖h‖ + b 0) := mul_le_mul_of_nonneg_left this hC.le
+ _ ≤ C * (‖h‖ + b 0) := (mul_le_mul_of_nonneg_left this hC.le)
_ = C * b 0 + C * ‖h‖ := by rw [add_comm, mul_add]
have : (∑ k in range (n + 1), C * b k) ≤ ε * ‖h‖ :=
@@ -108,17 +108,17 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
(∑ k in range (n + 1), C * b k) = (∑ k in range (n + 1), (1 / 2) ^ k) * (ε * ‖h‖ / 2) := by
simp only [b, mul_div_cancel' _ hC.ne.symm, ← sum_mul]
_ ≤ 2 * (ε * ‖h‖ / 2) :=
- mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h])
+ (mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h]))
_ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
- _ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := sum_range_succ' _ _
+ _ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
_ ≤ (∑ k in range n, C * ‖v (k + 1)‖) + ‖u 0‖ :=
- add_le_add_right (sum_le_sum fun _ _ => hnorm_u _) _
+ (add_le_add_right (sum_le_sum fun _ _ => hnorm_u _) _)
_ ≤ (∑ k in range n, C * b (k + 1)) + (C * b 0 + C * ‖h‖) :=
- add_le_add (sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (hv _ k.succ_pos).le hC.le)
- hnorm₀
+ (add_le_add (sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (hv _ k.succ_pos).le hC.le)
+ hnorm₀)
_ = (∑ k in range (n + 1), C * b k) + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
_ ≤ (C + ε) * ‖h‖ := by
rw [add_comm, add_mul]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -96,7 +96,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
_ = ε * ‖h‖ := mul_div_cancel₀ _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
- _ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
+ _ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := sum_range_succ' _ _
_ ≤ (∑ k in range n, C * ‖v (k + 1)‖) + ‖u 0‖ := by gcongr; apply hnorm_u
_ ≤ (∑ k in range n, C * b (k + 1)) + (C * b 0 + C * ‖h‖) := by
gcongr with k; exact (hv _ k.succ_pos).le
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -61,7 +61,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
calc
‖u n‖ ≤ C * ‖v n‖ := hnorm_u n
_ ≤ C * b n := by gcongr; exact (hv _ <| Nat.succ_le_iff.mp hn).le
- _ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [mul_div_cancel' _ hC.ne.symm]
+ _ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [mul_div_cancel₀ _ hC.ne.symm]
_ = ε * ‖h‖ / 2 * (1 / 2) ^ n := mul_comm _ _
-- We now show that the limit `g` of `s` is the desired preimage.
obtain ⟨g : G, hg⟩ := cauchySeq_tendsto_of_complete this
@@ -91,9 +91,9 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
have : (∑ k in range (n + 1), C * b k) ≤ ε * ‖h‖ :=
calc
(∑ k in range (n + 1), C * b k) = (∑ k in range (n + 1), (1 / 2 : ℝ) ^ k) * (ε * ‖h‖ / 2) :=
- by simp only [mul_div_cancel' _ hC.ne.symm, ← sum_mul]
+ by simp only [mul_div_cancel₀ _ hC.ne.symm, ← sum_mul]
_ ≤ 2 * (ε * ‖h‖ / 2) := by gcongr; apply sum_geometric_two_le
- _ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
+ _ = ε * ‖h‖ := mul_div_cancel₀ _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
_ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -22,7 +22,6 @@ open Filter Finset
open Topology BigOperators
variable {G : Type*} [NormedAddCommGroup G] [CompleteSpace G]
-
variable {H : Type*} [NormedAddCommGroup H]
/-- Given `f : NormedAddGroupHom G H` for some complete `G` and a subgroup `K` of `H`, if every
/
lemmas (#10634)
The new names and argument orders match the corresponding *
lemmas, which I already took care of in a previous PR.
From LeanAPAP
@@ -44,11 +44,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
of a sequence `v` of elements of `K` which starts close to `h` and then quickly goes to zero.
The sequence `b` below quantifies this. -/
set b : ℕ → ℝ := fun i => (1 / 2) ^ i * (ε * ‖h‖ / 2) / C
- have b_pos : ∀ i, 0 < b i := by
- intro i
- field_simp [b, hC]
- exact
- div_pos (mul_pos hε (norm_pos_iff.mpr hyp_h)) (mul_pos (by norm_num : (0 : ℝ) < 2 ^ i * 2) hC)
+ have b_pos (i) : 0 < b i := by field_simp [b, hC, hyp_h]
obtain
⟨v : ℕ → H, lim_v : Tendsto (fun n : ℕ => ∑ k in range (n + 1), v k) atTop (𝓝 h), v_in :
∀ n, v n ∈ K, hv₀ : ‖v 0 - h‖ < b 0, hv : ∀ n > 0, ‖v n‖ < b n⟩ :=
@@ -46,7 +46,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
set b : ℕ → ℝ := fun i => (1 / 2) ^ i * (ε * ‖h‖ / 2) / C
have b_pos : ∀ i, 0 < b i := by
intro i
- field_simp [hC]
+ field_simp [b, hC]
exact
div_pos (mul_pos hε (norm_pos_iff.mpr hyp_h)) (mul_pos (by norm_num : (0 : ℝ) < 2 ^ i * 2) hC)
obtain
@@ -74,7 +74,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
· -- We indeed get a preimage. First note:
have : f ∘ s = fun n => ∑ k in range (n + 1), v k := by
ext n
- simp [map_sum, hu]
+ simp [s, map_sum, hu]
/- In the above equality, the left-hand-side converges to `f g` by continuity of `f` and
definition of `g` while the right-hand-side converges to `h` by construction of `v` so
`g` is indeed a preimage of `h`. -/
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -81,8 +81,8 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
rw [← this] at lim_v
exact tendsto_nhds_unique ((f.continuous.tendsto g).comp hg) lim_v
· -- Then we need to estimate the norm of `g`, using our careful choice of `b`.
- suffices : ∀ n, ‖s n‖ ≤ (C + ε) * ‖h‖
- exact le_of_tendsto' (continuous_norm.continuousAt.tendsto.comp hg) this
+ suffices ∀ n, ‖s n‖ ≤ (C + ε) * ‖h‖ from
+ le_of_tendsto' (continuous_norm.continuousAt.tendsto.comp hg) this
intro n
have hnorm₀ : ‖u 0‖ ≤ C * b 0 + C * ‖h‖ := by
have :=
@@ -122,8 +122,8 @@ theorem controlled_closure_range_of_complete {f : NormedAddGroupHom G H} {K : Ty
[SeminormedAddCommGroup K] {j : NormedAddGroupHom K H} (hj : ∀ x, ‖j x‖ = ‖x‖) {C ε : ℝ}
(hC : 0 < C) (hε : 0 < ε) (hyp : ∀ k, ∃ g, f g = j k ∧ ‖g‖ ≤ C * ‖k‖) :
f.SurjectiveOnWith j.range.topologicalClosure (C + ε) := by
- replace hyp : ∀ h ∈ j.range, ∃ g, f g = h ∧ ‖g‖ ≤ C * ‖h‖
- · intro h h_in
+ replace hyp : ∀ h ∈ j.range, ∃ g, f g = h ∧ ‖g‖ ≤ C * ‖h‖ := by
+ intro h h_in
rcases (j.mem_range _).mp h_in with ⟨k, rfl⟩
rw [hj]
exact hyp k
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -124,7 +124,7 @@ theorem controlled_closure_range_of_complete {f : NormedAddGroupHom G H} {K : Ty
f.SurjectiveOnWith j.range.topologicalClosure (C + ε) := by
replace hyp : ∀ h ∈ j.range, ∃ g, f g = h ∧ ‖g‖ ≤ C * ‖h‖
· intro h h_in
- rcases(j.mem_range _).mp h_in with ⟨k, rfl⟩
+ rcases (j.mem_range _).mp h_in with ⟨k, rfl⟩
rw [hj]
exact hyp k
exact controlled_closure_of_complete hC hε hyp
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -21,9 +21,9 @@ open Filter Finset
open Topology BigOperators
-variable {G : Type _} [NormedAddCommGroup G] [CompleteSpace G]
+variable {G : Type*} [NormedAddCommGroup G] [CompleteSpace G]
-variable {H : Type _} [NormedAddCommGroup H]
+variable {H : Type*} [NormedAddCommGroup H]
/-- Given `f : NormedAddGroupHom G H` for some complete `G` and a subgroup `K` of `H`, if every
element `x` of `K` has a preimage under `f` whose norm is at most `C*‖x‖` then the same holds for
@@ -118,7 +118,7 @@ an isometric immersion `j : NormedAddGroupHom K H` has a preimage under `f` whos
This is useful in particular if `j` is the inclusion of a normed group into its completion
(in this case the closure is the full target group).
-/
-theorem controlled_closure_range_of_complete {f : NormedAddGroupHom G H} {K : Type _}
+theorem controlled_closure_range_of_complete {f : NormedAddGroupHom G H} {K : Type*}
[SeminormedAddCommGroup K] {j : NormedAddGroupHom K H} (hj : ∀ x, ‖j x‖ = ‖x‖) {C ε : ℝ}
(hC : 0 < C) (hε : 0 < ε) (hyp : ∀ k, ∃ g, f g = j k ∧ ‖g‖ ≤ C * ‖k‖) :
f.SurjectiveOnWith j.range.topologicalClosure (C + ε) := by
@@ -2,15 +2,12 @@
Copyright (c) 2021 Patrick Massot. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Patrick Massot
-
-! This file was ported from Lean 3 source module analysis.normed.group.controlled_closure
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Normed.Group.Hom
import Mathlib.Analysis.SpecificLimits.Normed
+#align_import analysis.normed.group.controlled_closure from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
/-! # Extending a backward bound on a normed group homomorphism from a dense set
Possible TODO (from the PR's review, https://github.com/leanprover-community/mathlib/pull/8498 ):
@@ -68,7 +68,7 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
rintro n (hn : n ≥ 1)
calc
‖u n‖ ≤ C * ‖v n‖ := hnorm_u n
- _ ≤ C * b n := (mul_le_mul_of_nonneg_left (hv _ <| Nat.succ_le_iff.mp hn).le hC.le)
+ _ ≤ C * b n := by gcongr; exact (hv _ <| Nat.succ_le_iff.mp hn).le
_ = (1 / 2) ^ n * (ε * ‖h‖ / 2) := by simp [mul_div_cancel' _ hC.ne.symm]
_ = ε * ‖h‖ / 2 * (1 / 2) ^ n := mul_comm _ _
-- We now show that the limit `g` of `s` is the desired preimage.
@@ -91,26 +91,23 @@ theorem controlled_closure_of_complete {f : NormedAddGroupHom G H} {K : AddSubgr
have :=
calc
‖v 0‖ ≤ ‖h‖ + ‖v 0 - h‖ := norm_le_insert' _ _
- _ ≤ ‖h‖ + b 0 := by apply add_le_add_left hv₀.le
+ _ ≤ ‖h‖ + b 0 := by gcongr
calc
‖u 0‖ ≤ C * ‖v 0‖ := hnorm_u 0
- _ ≤ C * (‖h‖ + b 0) := (mul_le_mul_of_nonneg_left this hC.le)
+ _ ≤ C * (‖h‖ + b 0) := by gcongr
_ = C * b 0 + C * ‖h‖ := by rw [add_comm, mul_add]
have : (∑ k in range (n + 1), C * b k) ≤ ε * ‖h‖ :=
calc
(∑ k in range (n + 1), C * b k) = (∑ k in range (n + 1), (1 / 2 : ℝ) ^ k) * (ε * ‖h‖ / 2) :=
by simp only [mul_div_cancel' _ hC.ne.symm, ← sum_mul]
- _ ≤ 2 * (ε * ‖h‖ / 2) :=
- (mul_le_mul_of_nonneg_right (sum_geometric_two_le _) (by nlinarith [hε, norm_nonneg h]))
+ _ ≤ 2 * (ε * ‖h‖ / 2) := by gcongr; apply sum_geometric_two_le
_ = ε * ‖h‖ := mul_div_cancel' _ two_ne_zero
calc
‖s n‖ ≤ ∑ k in range (n + 1), ‖u k‖ := norm_sum_le _ _
_ = (∑ k in range n, ‖u (k + 1)‖) + ‖u 0‖ := (sum_range_succ' _ _)
- _ ≤ (∑ k in range n, C * ‖v (k + 1)‖) + ‖u 0‖ :=
- (add_le_add_right (sum_le_sum fun _ _ => hnorm_u _) _)
- _ ≤ (∑ k in range n, C * b (k + 1)) + (C * b 0 + C * ‖h‖) :=
- (add_le_add (sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (hv _ k.succ_pos).le hC.le)
- hnorm₀)
+ _ ≤ (∑ k in range n, C * ‖v (k + 1)‖) + ‖u 0‖ := by gcongr; apply hnorm_u
+ _ ≤ (∑ k in range n, C * b (k + 1)) + (C * b 0 + C * ‖h‖) := by
+ gcongr with k; exact (hv _ k.succ_pos).le
_ = (∑ k in range (n + 1), C * b k) + C * ‖h‖ := by rw [← add_assoc, sum_range_succ']
_ ≤ (C + ε) * ‖h‖ := by
rw [add_comm, add_mul]
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file