analysis.normed.group.controlled_closureMathlib.Analysis.Normed.Group.ControlledClosure

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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' _ _)
Diff
@@ -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‖
Diff
@@ -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"
 
Diff
@@ -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.
Diff
@@ -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
+-/
 
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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‖
Diff
@@ -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]
 
Diff
@@ -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
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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]

Changes in mathlib4

mathlib3
mathlib4
chore: superfluous parentheses part 2 (#12131)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -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
chore: Rename 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 | |

Diff
@@ -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' _ _)
chore(*): remove empty lines between variable statements (#11418)

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)
Diff
@@ -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
chore: Rename monotonicity of / lemmas (#10634)

The new names and argument orders match the corresponding * lemmas, which I already took care of in a previous PR.

From LeanAPAP

Diff
@@ -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⟩ :=
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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`. -/
chore: remove stream-of-consciousness uses of 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>

Diff
@@ -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
chore: missing spaces after rcases, convert and congrm (#7725)

Replace rcases( with rcases (. Same thing for convert( and congrm(. No other change.

Diff
@@ -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
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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 ):
feat: golf using gcongr throughout the library (#4702)

100 sample uses of the new tactic gcongr, added in #3965.

Diff
@@ -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]
feat: port Analysis.Normed.Group.ControlledClosure (#3880)

Dependencies 10 + 621

622 files ported (98.4%)
274112 lines ported (98.1%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file