topology.algebra.uniform_fieldMathlib.Topology.Algebra.UniformField

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
@@ -54,7 +54,7 @@ which does not have a cluster point at 0 is a Cauchy filter
 (with respect to the additive uniform structure). This ensures the completion is
 a field.
 -/
-class CompletableTopField extends SeparatedSpace K : Prop where
+class CompletableTopField extends T0Space K : Prop where
   nice : ∀ F : Filter K, Cauchy F → 𝓝 0 ⊓ F = ⊥ → Cauchy (map (fun x => x⁻¹) F)
 #align completable_top_field CompletableTopField
 -/
@@ -63,7 +63,7 @@ namespace UniformSpace
 
 namespace Completion
 
-instance (priority := 100) [SeparatedSpace K] : Nontrivial (hat K) :=
+instance (priority := 100) [T0Space K] : Nontrivial (hat K) :=
   ⟨⟨0, 1, fun h => zero_ne_one <| (uniformEmbedding_coe K).inj h⟩⟩
 
 variable {K}
@@ -82,7 +82,7 @@ theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : Co
   refine' dense_inducing_coe.continuous_at_extend _
   apply mem_of_superset (compl_singleton_mem_nhds h)
   intro y y_ne
-  rw [mem_compl_singleton_iff] at y_ne 
+  rw [mem_compl_singleton_iff] at y_ne
   apply CompleteSpace.complete
   rw [← Filter.map_map]
   apply Cauchy.map _ (completion.uniform_continuous_coe K)
@@ -151,7 +151,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
     by
     have := dense_inducing_coe.dense x
     rw [← image_univ, show (univ : Set K) = {0} ∪ {0}ᶜ from (union_compl_self _).symm,
-      image_union] at this 
+      image_union] at this
     apply mem_closure_of_mem_closure_union this
     rw [image_singleton]
     exact compl_singleton_mem_nhds x_ne
@@ -160,13 +160,13 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
     rw [image_image]
     rintro _ ⟨z, z_ne, rfl⟩
     rw [mem_singleton_iff]
-    rw [mem_compl_singleton_iff] at z_ne 
+    rw [mem_compl_singleton_iff] at z_ne
     dsimp [c, f]
     rw [hat_inv_extends z_ne]
     norm_cast
     rw [mul_inv_cancel z_ne]
   replace fxclo := closure_mono this fxclo
-  rwa [closure_singleton, mem_singleton_iff] at fxclo 
+  rwa [closure_singleton, mem_singleton_iff] at fxclo
 #align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancel
 -/
 
@@ -190,7 +190,7 @@ instance : TopologicalDivisionRing (hat K) :=
         haveI : {(0 : hat K)}ᶜ ⊆ {y : hat K | hat_inv y = y⁻¹} :=
           by
           intro y y_ne
-          rw [mem_compl_singleton_iff] at y_ne 
+          rw [mem_compl_singleton_iff] at y_ne
           dsimp [Inv.inv]
           rw [if_neg y_ne]
         mem_of_superset (compl_singleton_mem_nhds x_ne) this
@@ -204,7 +204,7 @@ variable (L : Type _) [Field L] [UniformSpace L] [CompletableTopField L]
 
 #print Subfield.completableTopField /-
 instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
-  { Subtype.separatedSpace (K : Set L) with
+  { Subtype.t0Space (K : Set L) with
     nice := by
       intro F F_cau inf_F
       let i : K →+* L := K.subtype
@@ -218,14 +218,14 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
 
 #print completableTopField_of_complete /-
 instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L] [UniformSpace L]
-    [TopologicalDivisionRing L] [SeparatedSpace L] [CompleteSpace L] : CompletableTopField L :=
-  { ‹SeparatedSpace L› with
+    [TopologicalDivisionRing L] [T0Space L] [CompleteSpace L] : CompletableTopField L :=
+  { ‹T0Space L› with
     nice := fun F cau_F hF => by
       haveI : ne_bot F := cau_F.1
       rcases CompleteSpace.complete cau_F with ⟨x, hx⟩
       have hx' : x ≠ 0 := by
         rintro rfl
-        rw [inf_eq_right.mpr hx] at hF 
+        rw [inf_eq_right.mpr hx] at hF
         exact cau_F.1.Ne hF
       exact
         Filter.Tendsto.cauchy_map
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2019 Patrick Massot. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot
 -/
-import Mathbin.Topology.Algebra.UniformRing
-import Mathbin.Topology.Algebra.Field
-import Mathbin.FieldTheory.Subfield
+import Topology.Algebra.UniformRing
+import Topology.Algebra.Field
+import FieldTheory.Subfield
 
 #align_import topology.algebra.uniform_field from "leanprover-community/mathlib"@"19cb3751e5e9b3d97adb51023949c50c13b5fdfd"
 
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2019 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 topology.algebra.uniform_field
-! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Topology.Algebra.UniformRing
 import Mathbin.Topology.Algebra.Field
 import Mathbin.FieldTheory.Subfield
 
+#align_import topology.algebra.uniform_field from "leanprover-community/mathlib"@"19cb3751e5e9b3d97adb51023949c50c13b5fdfd"
+
 /-!
 # Completion of topological fields
 
Diff
@@ -158,7 +158,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
     apply mem_closure_of_mem_closure_union this
     rw [image_singleton]
     exact compl_singleton_mem_nhds x_ne
-  have fxclo : f x ∈ closure (f '' (c '' {0}ᶜ)) := mem_closure_image cont clo
+  have fxclo : f x ∈ closure (f '' (c '' {0}ᶜ)) := mem_closure_image Cont clo
   have : f '' (c '' {0}ᶜ) ⊆ {1} := by
     rw [image_image]
     rintro _ ⟨z, z_ne, rfl⟩
Diff
@@ -48,7 +48,6 @@ open Set UniformSpace UniformSpace.Completion Filter
 
 variable (K : Type _) [Field K] [UniformSpace K]
 
--- mathport name: exprhat
 local notation "hat" => Completion
 
 #print CompletableTopField /-
@@ -79,6 +78,7 @@ def hatInv : hat K → hat K :=
 #align uniform_space.completion.hat_inv UniformSpace.Completion.hatInv
 -/
 
+#print UniformSpace.Completion.continuous_hatInv /-
 theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : ContinuousAt hatInv x :=
   by
   haveI : T3Space (hat K) := completion.t3_space K
@@ -100,6 +100,7 @@ theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : Co
     erw [dense_inducing_coe.nhds_eq_comap (0 : K), ← Filter.comap_inf, eq_bot]
     exact comap_bot
 #align uniform_space.completion.continuous_hat_inv UniformSpace.Completion.continuous_hatInv
+-/
 
 /-
 The value of `hat_inv` at zero is not really specified, although it's probably zero.
@@ -110,12 +111,15 @@ instance : Inv (hat K) :=
 
 variable [TopologicalDivisionRing K]
 
+#print UniformSpace.Completion.hatInv_extends /-
 theorem hatInv_extends {x : K} (h : x ≠ 0) : hatInv (x : hat K) = coe (x⁻¹ : K) :=
   denseInducing_coe.extend_eq_at ((continuous_coe K).ContinuousAt.comp (continuousAt_inv₀ h))
 #align uniform_space.completion.hat_inv_extends UniformSpace.Completion.hatInv_extends
+-/
 
 variable [CompletableTopField K]
 
+#print UniformSpace.Completion.coe_inv /-
 @[norm_cast]
 theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
   by
@@ -129,9 +133,11 @@ theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
     · exact hat_inv_extends h
     · exact fun H => h (dense_embedding_coe.inj H)
 #align uniform_space.completion.coe_inv UniformSpace.Completion.coe_inv
+-/
 
 variable [UniformAddGroup K]
 
+#print UniformSpace.Completion.mul_hatInv_cancel /-
 theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
   by
   haveI : T1Space (hat K) := T2Space.t1Space
@@ -165,6 +171,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
   replace fxclo := closure_mono this fxclo
   rwa [closure_singleton, mem_singleton_iff] at fxclo 
 #align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancel
+-/
 
 instance : Field (hat K) :=
   { Completion.hasInv,
@@ -198,6 +205,7 @@ end UniformSpace
 
 variable (L : Type _) [Field L] [UniformSpace L] [CompletableTopField L]
 
+#print Subfield.completableTopField /-
 instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
   { Subtype.separatedSpace (K : Set L) with
     nice := by
@@ -209,6 +217,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       apply CompletableTopField.nice _ F_cau
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
 #align subfield.completable_top_field Subfield.completableTopField
+-/
 
 #print completableTopField_of_complete /-
 instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L] [UniformSpace L]
Diff
@@ -225,8 +225,7 @@ instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L
         Filter.Tendsto.cauchy_map
           (calc
             map (fun x => x⁻¹) F ≤ map (fun x => x⁻¹) (𝓝 x) := map_mono hx
-            _ ≤ 𝓝 x⁻¹ := continuous_at_inv₀ hx'
-            ) }
+            _ ≤ 𝓝 x⁻¹ := continuous_at_inv₀ hx') }
 #align completable_top_field_of_complete completableTopField_of_complete
 -/
 
Diff
@@ -182,8 +182,8 @@ instance : TopologicalDivisionRing (hat K) :=
   { Completion.topologicalRing with
     continuousAt_inv₀ := by
       intro x x_ne
-      have : { y | hat_inv y = y⁻¹ } ∈ 𝓝 x :=
-        haveI : {(0 : hat K)}ᶜ ⊆ { y : hat K | hat_inv y = y⁻¹ } :=
+      have : {y | hat_inv y = y⁻¹} ∈ 𝓝 x :=
+        haveI : {(0 : hat K)}ᶜ ⊆ {y : hat K | hat_inv y = y⁻¹} :=
           by
           intro y y_ne
           rw [mem_compl_singleton_iff] at y_ne 
Diff
@@ -85,7 +85,7 @@ theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : Co
   refine' dense_inducing_coe.continuous_at_extend _
   apply mem_of_superset (compl_singleton_mem_nhds h)
   intro y y_ne
-  rw [mem_compl_singleton_iff] at y_ne
+  rw [mem_compl_singleton_iff] at y_ne 
   apply CompleteSpace.complete
   rw [← Filter.map_map]
   apply Cauchy.map _ (completion.uniform_continuous_coe K)
@@ -148,7 +148,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
     by
     have := dense_inducing_coe.dense x
     rw [← image_univ, show (univ : Set K) = {0} ∪ {0}ᶜ from (union_compl_self _).symm,
-      image_union] at this
+      image_union] at this 
     apply mem_closure_of_mem_closure_union this
     rw [image_singleton]
     exact compl_singleton_mem_nhds x_ne
@@ -157,13 +157,13 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
     rw [image_image]
     rintro _ ⟨z, z_ne, rfl⟩
     rw [mem_singleton_iff]
-    rw [mem_compl_singleton_iff] at z_ne
+    rw [mem_compl_singleton_iff] at z_ne 
     dsimp [c, f]
     rw [hat_inv_extends z_ne]
     norm_cast
     rw [mul_inv_cancel z_ne]
   replace fxclo := closure_mono this fxclo
-  rwa [closure_singleton, mem_singleton_iff] at fxclo
+  rwa [closure_singleton, mem_singleton_iff] at fxclo 
 #align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancel
 
 instance : Field (hat K) :=
@@ -186,7 +186,7 @@ instance : TopologicalDivisionRing (hat K) :=
         haveI : {(0 : hat K)}ᶜ ⊆ { y : hat K | hat_inv y = y⁻¹ } :=
           by
           intro y y_ne
-          rw [mem_compl_singleton_iff] at y_ne
+          rw [mem_compl_singleton_iff] at y_ne 
           dsimp [Inv.inv]
           rw [if_neg y_ne]
         mem_of_superset (compl_singleton_mem_nhds x_ne) this
@@ -204,7 +204,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       intro F F_cau inf_F
       let i : K →+* L := K.subtype
       have hi : UniformInducing i := uniform_embedding_subtype_coe.to_uniform_inducing
-      rw [← hi.cauchy_map_iff] at F_cau⊢
+      rw [← hi.cauchy_map_iff] at F_cau ⊢
       rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
       apply CompletableTopField.nice _ F_cau
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
@@ -219,7 +219,7 @@ instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L
       rcases CompleteSpace.complete cau_F with ⟨x, hx⟩
       have hx' : x ≠ 0 := by
         rintro rfl
-        rw [inf_eq_right.mpr hx] at hF
+        rw [inf_eq_right.mpr hx] at hF 
         exact cau_F.1.Ne hF
       exact
         Filter.Tendsto.cauchy_map
Diff
@@ -42,7 +42,7 @@ type class and the main results are the instances `uniform_space.completion.fiel
 
 noncomputable section
 
-open Classical uniformity Topology
+open scoped Classical uniformity Topology
 
 open Set UniformSpace UniformSpace.Completion Filter
 
Diff
@@ -79,12 +79,6 @@ def hatInv : hat K → hat K :=
 #align uniform_space.completion.hat_inv UniformSpace.Completion.hatInv
 -/
 
-/- warning: uniform_space.completion.continuous_hat_inv -> UniformSpace.Completion.continuous_hatInv is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : CompletableTopField.{u1} K _inst_1 _inst_2] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.zero.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasZero.{u1} K _inst_2 (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))))))))) -> (ContinuousAt.{u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2) x)
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : CompletableTopField.{u1} K _inst_1 _inst_2] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.toOfNat0.{u1} (UniformSpace.Completion.{u1} K _inst_2) (instZeroCompletion.{u1} K _inst_2 (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1)))))))) -> (ContinuousAt.{u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2) x)
-Case conversion may be inaccurate. Consider using '#align uniform_space.completion.continuous_hat_inv UniformSpace.Completion.continuous_hatInvₓ'. -/
 theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : ContinuousAt hatInv x :=
   by
   haveI : T3Space (hat K) := completion.t3_space K
@@ -116,24 +110,12 @@ instance : Inv (hat K) :=
 
 variable [TopologicalDivisionRing K]
 
-/- warning: uniform_space.completion.hat_inv_extends -> UniformSpace.Completion.hatInv_extends is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] {x : K}, (Ne.{succ u1} K x (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) (Inv.inv.{u1} K (DivInvMonoid.toHasInv.{u1} K (DivisionRing.toDivInvMonoid.{u1} K (Field.toDivisionRing.{u1} K _inst_1))) x)))
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] {x : K}, (Ne.{succ u1} K x (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 (UniformSpace.Completion.coe'.{u1} K _inst_2 x)) (UniformSpace.Completion.coe'.{u1} K _inst_2 (Inv.inv.{u1} K (Field.toInv.{u1} K _inst_1) x)))
-Case conversion may be inaccurate. Consider using '#align uniform_space.completion.hat_inv_extends UniformSpace.Completion.hatInv_extendsₓ'. -/
 theorem hatInv_extends {x : K} (h : x ≠ 0) : hatInv (x : hat K) = coe (x⁻¹ : K) :=
   denseInducing_coe.extend_eq_at ((continuous_coe K).ContinuousAt.comp (continuousAt_inv₀ h))
 #align uniform_space.completion.hat_inv_extends UniformSpace.Completion.hatInv_extends
 
 variable [CompletableTopField K]
 
-/- warning: uniform_space.completion.coe_inv -> UniformSpace.Completion.coe_inv is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] (x : K), Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (Inv.inv.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasInv.{u1} K _inst_1 _inst_2) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) (Inv.inv.{u1} K (DivInvMonoid.toHasInv.{u1} K (DivisionRing.toDivInvMonoid.{u1} K (Field.toDivisionRing.{u1} K _inst_1))) x))
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] (x : K), Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (Inv.inv.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.instInvCompletion.{u1} K _inst_1 _inst_2) (UniformSpace.Completion.coe'.{u1} K _inst_2 x)) (UniformSpace.Completion.coe'.{u1} K _inst_2 (Inv.inv.{u1} K (Field.toInv.{u1} K _inst_1) x))
-Case conversion may be inaccurate. Consider using '#align uniform_space.completion.coe_inv UniformSpace.Completion.coe_invₓ'. -/
 @[norm_cast]
 theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
   by
@@ -150,12 +132,6 @@ theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
 
 variable [UniformAddGroup K]
 
-/- warning: uniform_space.completion.mul_hat_inv_cancel -> UniformSpace.Completion.mul_hatInv_cancel is a dubious translation:
-lean 3 declaration is
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] [_inst_5 : UniformAddGroup.{u1} K _inst_2 (AddGroupWithOne.toAddGroup.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.zero.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasZero.{u1} K _inst_2 (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (HMul.hMul.{u1, u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (instHMul.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasMul.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)) x (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 x)) (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (One.one.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)))))
-but is expected to have type
-  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] [_inst_5 : UniformAddGroup.{u1} K _inst_2 (AddGroupWithOne.toAddGroup.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.toOfNat0.{u1} (UniformSpace.Completion.{u1} K _inst_2) (instZeroCompletion.{u1} K _inst_2 (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1)))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (HMul.hMul.{u1, u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (instHMul.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.mul.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)) x (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 x)) (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (One.toOfNat1.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.one.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancelₓ'. -/
 theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
   by
   haveI : T1Space (hat K) := T2Space.t1Space
@@ -222,12 +198,6 @@ end UniformSpace
 
 variable (L : Type _) [Field L] [UniformSpace L] [CompletableTopField L]
 
-/- warning: subfield.completable_top_field -> Subfield.completableTopField is a dubious translation:
-lean 3 declaration is
-  forall (L : Type.{u1}) [_inst_3 : Field.{u1} L] [_inst_4 : UniformSpace.{u1} L] [_inst_5 : CompletableTopField.{u1} L _inst_3 _inst_4] (K : Subfield.{u1} L _inst_3), CompletableTopField.{u1} (coeSort.{succ u1, succ (succ u1)} (Subfield.{u1} L _inst_3) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.setLike.{u1} L _inst_3)) K) (Subfield.toField.{u1} L _inst_3 K) (Subtype.uniformSpace.{u1} L (fun (x : L) => Membership.Mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.hasMem.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.setLike.{u1} L _inst_3)) x K) _inst_4)
-but is expected to have type
-  forall (L : Type.{u1}) [_inst_3 : Field.{u1} L] [_inst_4 : UniformSpace.{u1} L] [_inst_5 : CompletableTopField.{u1} L _inst_3 _inst_4] (K : Subfield.{u1} L _inst_3), CompletableTopField.{u1} (Subtype.{succ u1} L (fun (x : L) => Membership.mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.instMembership.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.instSetLikeSubfield.{u1} L _inst_3)) x K)) (Subfield.toField.{u1} L _inst_3 K) (instUniformSpaceSubtype.{u1} L (fun (x : L) => Membership.mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.instMembership.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.instSetLikeSubfield.{u1} L _inst_3)) x K) _inst_4)
-Case conversion may be inaccurate. Consider using '#align subfield.completable_top_field Subfield.completableTopFieldₓ'. -/
 instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
   { Subtype.separatedSpace (K : Set L) with
     nice := by
Diff
@@ -235,11 +235,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       let i : K →+* L := K.subtype
       have hi : UniformInducing i := uniform_embedding_subtype_coe.to_uniform_inducing
       rw [← hi.cauchy_map_iff] at F_cau⊢
-      rw [map_comm
-          (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i
-            by
-            ext
-            rfl)]
+      rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
       apply CompletableTopField.nice _ F_cau
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
 #align subfield.completable_top_field Subfield.completableTopField
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 topology.algebra.uniform_field
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -15,6 +15,9 @@ import Mathbin.FieldTheory.Subfield
 /-!
 # Completion of topological fields
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 The goal of this file is to prove the main part of Proposition 7 of Bourbaki GT III 6.8 :
 
 The completion `hat K` of a Hausdorff topological field is a field if the image under
Diff
@@ -48,6 +48,7 @@ variable (K : Type _) [Field K] [UniformSpace K]
 -- mathport name: exprhat
 local notation "hat" => Completion
 
+#print CompletableTopField /-
 /-- A topological field is completable if it is separated and the image under
 the mapping x ↦ x⁻¹ of every Cauchy filter (with respect to the additive uniform structure)
 which does not have a cluster point at 0 is a Cauchy filter
@@ -57,6 +58,7 @@ a field.
 class CompletableTopField extends SeparatedSpace K : Prop where
   nice : ∀ F : Filter K, Cauchy F → 𝓝 0 ⊓ F = ⊥ → Cauchy (map (fun x => x⁻¹) F)
 #align completable_top_field CompletableTopField
+-/
 
 namespace UniformSpace
 
@@ -67,11 +69,19 @@ instance (priority := 100) [SeparatedSpace K] : Nontrivial (hat K) :=
 
 variable {K}
 
+#print UniformSpace.Completion.hatInv /-
 /-- extension of inversion to the completion of a field. -/
 def hatInv : hat K → hat K :=
   denseInducing_coe.extend fun x : K => (coe x⁻¹ : hat K)
 #align uniform_space.completion.hat_inv UniformSpace.Completion.hatInv
+-/
 
+/- warning: uniform_space.completion.continuous_hat_inv -> UniformSpace.Completion.continuous_hatInv is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : CompletableTopField.{u1} K _inst_1 _inst_2] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.zero.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasZero.{u1} K _inst_2 (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))))))))) -> (ContinuousAt.{u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2) x)
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : CompletableTopField.{u1} K _inst_1 _inst_2] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.toOfNat0.{u1} (UniformSpace.Completion.{u1} K _inst_2) (instZeroCompletion.{u1} K _inst_2 (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1)))))))) -> (ContinuousAt.{u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.toTopologicalSpace.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.uniformSpace.{u1} K _inst_2)) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2) x)
+Case conversion may be inaccurate. Consider using '#align uniform_space.completion.continuous_hat_inv UniformSpace.Completion.continuous_hatInvₓ'. -/
 theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : ContinuousAt hatInv x :=
   by
   haveI : T3Space (hat K) := completion.t3_space K
@@ -103,12 +113,24 @@ instance : Inv (hat K) :=
 
 variable [TopologicalDivisionRing K]
 
+/- warning: uniform_space.completion.hat_inv_extends -> UniformSpace.Completion.hatInv_extends is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] {x : K}, (Ne.{succ u1} K x (OfNat.ofNat.{u1} K 0 (OfNat.mk.{u1} K 0 (Zero.zero.{u1} K (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) (Inv.inv.{u1} K (DivInvMonoid.toHasInv.{u1} K (DivisionRing.toDivInvMonoid.{u1} K (Field.toDivisionRing.{u1} K _inst_1))) x)))
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] {x : K}, (Ne.{succ u1} K x (OfNat.ofNat.{u1} K 0 (Zero.toOfNat0.{u1} K (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 (UniformSpace.Completion.coe'.{u1} K _inst_2 x)) (UniformSpace.Completion.coe'.{u1} K _inst_2 (Inv.inv.{u1} K (Field.toInv.{u1} K _inst_1) x)))
+Case conversion may be inaccurate. Consider using '#align uniform_space.completion.hat_inv_extends UniformSpace.Completion.hatInv_extendsₓ'. -/
 theorem hatInv_extends {x : K} (h : x ≠ 0) : hatInv (x : hat K) = coe (x⁻¹ : K) :=
   denseInducing_coe.extend_eq_at ((continuous_coe K).ContinuousAt.comp (continuousAt_inv₀ h))
 #align uniform_space.completion.hat_inv_extends UniformSpace.Completion.hatInv_extends
 
 variable [CompletableTopField K]
 
+/- warning: uniform_space.completion.coe_inv -> UniformSpace.Completion.coe_inv is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] (x : K), Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (Inv.inv.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasInv.{u1} K _inst_1 _inst_2) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) K (UniformSpace.Completion.{u1} K _inst_2) (HasLiftT.mk.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (CoeTCₓ.coe.{succ u1, succ u1} K (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasCoeT.{u1} K _inst_2))) (Inv.inv.{u1} K (DivInvMonoid.toHasInv.{u1} K (DivisionRing.toDivInvMonoid.{u1} K (Field.toDivisionRing.{u1} K _inst_1))) x))
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] (x : K), Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (Inv.inv.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.instInvCompletion.{u1} K _inst_1 _inst_2) (UniformSpace.Completion.coe'.{u1} K _inst_2 x)) (UniformSpace.Completion.coe'.{u1} K _inst_2 (Inv.inv.{u1} K (Field.toInv.{u1} K _inst_1) x))
+Case conversion may be inaccurate. Consider using '#align uniform_space.completion.coe_inv UniformSpace.Completion.coe_invₓ'. -/
 @[norm_cast]
 theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
   by
@@ -125,6 +147,12 @@ theorem coe_inv (x : K) : (x : hat K)⁻¹ = ((x⁻¹ : K) : hat K) :=
 
 variable [UniformAddGroup K]
 
+/- warning: uniform_space.completion.mul_hat_inv_cancel -> UniformSpace.Completion.mul_hatInv_cancel is a dubious translation:
+lean 3 declaration is
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] [_inst_5 : UniformAddGroup.{u1} K _inst_2 (AddGroupWithOne.toAddGroup.{u1} K (AddCommGroupWithOne.toAddGroupWithOne.{u1} K (Ring.toAddCommGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.zero.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasZero.{u1} K _inst_2 (MulZeroClass.toHasZero.{u1} K (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (HMul.hMul.{u1, u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (instHMul.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasMul.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)) x (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 x)) (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (OfNat.mk.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (One.one.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.hasOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)))))
+but is expected to have type
+  forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] [_inst_2 : UniformSpace.{u1} K] [_inst_3 : TopologicalDivisionRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1) (UniformSpace.toTopologicalSpace.{u1} K _inst_2)] [_inst_4 : CompletableTopField.{u1} K _inst_1 _inst_2] [_inst_5 : UniformAddGroup.{u1} K _inst_2 (AddGroupWithOne.toAddGroup.{u1} K (Ring.toAddGroupWithOne.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))] {x : UniformSpace.Completion.{u1} K _inst_2}, (Ne.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) x (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 0 (Zero.toOfNat0.{u1} (UniformSpace.Completion.{u1} K _inst_2) (instZeroCompletion.{u1} K _inst_2 (CommMonoidWithZero.toZero.{u1} K (CommGroupWithZero.toCommMonoidWithZero.{u1} K (Semifield.toCommGroupWithZero.{u1} K (Field.toSemifield.{u1} K _inst_1)))))))) -> (Eq.{succ u1} (UniformSpace.Completion.{u1} K _inst_2) (HMul.hMul.{u1, u1, u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.{u1} K _inst_2) (instHMul.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.mul.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2)) x (UniformSpace.Completion.hatInv.{u1} K _inst_1 _inst_2 x)) (OfNat.ofNat.{u1} (UniformSpace.Completion.{u1} K _inst_2) 1 (One.toOfNat1.{u1} (UniformSpace.Completion.{u1} K _inst_2) (UniformSpace.Completion.one.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)) _inst_2))))
+Case conversion may be inaccurate. Consider using '#align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancelₓ'. -/
 theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 :=
   by
   haveI : T1Space (hat K) := T2Space.t1Space
@@ -191,6 +219,12 @@ end UniformSpace
 
 variable (L : Type _) [Field L] [UniformSpace L] [CompletableTopField L]
 
+/- warning: subfield.completable_top_field -> Subfield.completableTopField is a dubious translation:
+lean 3 declaration is
+  forall (L : Type.{u1}) [_inst_3 : Field.{u1} L] [_inst_4 : UniformSpace.{u1} L] [_inst_5 : CompletableTopField.{u1} L _inst_3 _inst_4] (K : Subfield.{u1} L _inst_3), CompletableTopField.{u1} (coeSort.{succ u1, succ (succ u1)} (Subfield.{u1} L _inst_3) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.setLike.{u1} L _inst_3)) K) (Subfield.toField.{u1} L _inst_3 K) (Subtype.uniformSpace.{u1} L (fun (x : L) => Membership.Mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.hasMem.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.setLike.{u1} L _inst_3)) x K) _inst_4)
+but is expected to have type
+  forall (L : Type.{u1}) [_inst_3 : Field.{u1} L] [_inst_4 : UniformSpace.{u1} L] [_inst_5 : CompletableTopField.{u1} L _inst_3 _inst_4] (K : Subfield.{u1} L _inst_3), CompletableTopField.{u1} (Subtype.{succ u1} L (fun (x : L) => Membership.mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.instMembership.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.instSetLikeSubfield.{u1} L _inst_3)) x K)) (Subfield.toField.{u1} L _inst_3 K) (instUniformSpaceSubtype.{u1} L (fun (x : L) => Membership.mem.{u1, u1} L (Subfield.{u1} L _inst_3) (SetLike.instMembership.{u1, u1} (Subfield.{u1} L _inst_3) L (Subfield.instSetLikeSubfield.{u1} L _inst_3)) x K) _inst_4)
+Case conversion may be inaccurate. Consider using '#align subfield.completable_top_field Subfield.completableTopFieldₓ'. -/
 instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
   { Subtype.separatedSpace (K : Set L) with
     nice := by
@@ -207,6 +241,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
 #align subfield.completable_top_field Subfield.completableTopField
 
+#print completableTopField_of_complete /-
 instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L] [UniformSpace L]
     [TopologicalDivisionRing L] [SeparatedSpace L] [CompleteSpace L] : CompletableTopField L :=
   { ‹SeparatedSpace L› with
@@ -224,4 +259,5 @@ instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L
             _ ≤ 𝓝 x⁻¹ := continuous_at_inv₀ hx'
             ) }
 #align completable_top_field_of_complete completableTopField_of_complete
+-/
 
Diff
@@ -172,7 +172,7 @@ instance : Field (hat K) :=
     inv_zero := show ((0 : K) : hat K)⁻¹ = ((0 : K) : hat K) by rw [coe_inv, inv_zero] }
 
 instance : TopologicalDivisionRing (hat K) :=
-  { Completion.top_ring_compl with
+  { Completion.topologicalRing with
     continuousAt_inv₀ := by
       intro x x_ne
       have : { y | hat_inv y = y⁻¹ } ∈ 𝓝 x :=

Changes in mathlib4

mathlib3
mathlib4
feat: NNRat.cast (#11203)

Define the canonical coercion from the nonnegative rationals to any division semiring.

From LeanAPAP

Diff
@@ -158,6 +158,7 @@ instance instField : Field (hat K) where
   mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
   inv_zero := by simp only [Inv.inv, ite_true]
   -- TODO: use a better defeq
+  nnqsmul := _
   qsmul := _
 #align uniform_space.completion.field UniformSpace.Completion.instField
 
chore: Final cleanup before NNRat.cast (#12360)

This is the parts of the diff of #11203 which don't mention NNRat.cast.

  • Use more where notation.
  • Write qsmul := _ instead of qsmul := qsmulRec _ to make the instances more robust to definition changes.
  • Delete qsmulRec.
  • Move qsmul before ratCast_def in instance declarations.
  • Name more instances.
  • Rename rat_smul to qsmul.
Diff
@@ -153,14 +153,12 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 := by
   rwa [closure_singleton, mem_singleton_iff] at fxclo
 #align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancel
 
-instance instField : Field (hat K) :=
-  { Completion.instInvCompletion,
-    (by infer_instance : CommRing (hat K)) with
-    exists_pair_ne := ⟨0, 1, fun h => zero_ne_one ((uniformEmbedding_coe K).inj h)⟩
-    mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
-    inv_zero := by simp only [Inv.inv, ite_true]
-    -- TODO: use a better defeq
-    qsmul := qsmulRec _ }
+instance instField : Field (hat K) where
+  exists_pair_ne := ⟨0, 1, fun h => zero_ne_one ((uniformEmbedding_coe K).inj h)⟩
+  mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
+  inv_zero := by simp only [Inv.inv, ite_true]
+  -- TODO: use a better defeq
+  qsmul := _
 #align uniform_space.completion.field UniformSpace.Completion.instField
 
 instance : TopologicalDivisionRing (hat K) :=
chore: remove mathport name: <expression> lines (#11928)

Quoting [@digama0](https://github.com/digama0):

These were actually never meant to go in the file, they are basically debugging information and only useful on significantly broken mathport files. You can safely remove all of them.

Diff
@@ -43,7 +43,6 @@ open Set UniformSpace UniformSpace.Completion Filter
 
 variable (K : Type*) [Field K] [UniformSpace K]
 
--- mathport name: exprhat
 local notation "hat" => Completion
 
 /-- A topological field is completable if it is separated and the image under
refactor(UniformSpace): drop separationRel (#10644)

We had duplicated API between topological spaces and uniform spaces. In this PR I mostly deduplicate it with some exceptions:

  • SeparationQuotient.lift' and SeparationQuotient.map are leftovers from the old version that are designed to work with uniform spaces;
  • probably, some theorems/instances still assume UniformSpace when TopologicalSpace would work.

Outside of UniformSpace/Separation, I mostly changed SeparatedSpace to T0Space and separationRel to Inseparable. I also rewrote a few proofs that were broken by the API change.

Fixes #2031

Diff
@@ -52,7 +52,7 @@ which does not have a cluster point at 0 is a Cauchy filter
 (with respect to the additive uniform structure). This ensures the completion is
 a field.
 -/
-class CompletableTopField extends SeparatedSpace K : Prop where
+class CompletableTopField extends T0Space K : Prop where
   nice : ∀ F : Filter K, Cauchy F → 𝓝 0 ⊓ F = ⊥ → Cauchy (map (fun x => x⁻¹) F)
 #align completable_top_field CompletableTopField
 
@@ -60,7 +60,7 @@ namespace UniformSpace
 
 namespace Completion
 
-instance (priority := 100) [SeparatedSpace K] : Nontrivial (hat K) :=
+instance (priority := 100) [T0Space K] : Nontrivial (hat K) :=
   ⟨⟨0, 1, fun h => zero_ne_one <| (uniformEmbedding_coe K).inj h⟩⟩
 
 variable {K}
@@ -72,7 +72,6 @@ def hatInv : hat K → hat K :=
 
 theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) :
     ContinuousAt hatInv x := by
-  haveI : T3Space (hat K) := Completion.t3Space K
   refine' denseInducing_coe.continuousAt_extend _
   apply mem_of_superset (compl_singleton_mem_nhds h)
   intro y y_ne
@@ -184,32 +183,27 @@ end UniformSpace
 
 variable (L : Type*) [Field L] [UniformSpace L] [CompletableTopField L]
 
-instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
-  { Subtype.separatedSpace (K : Set L) with
-    nice := by
-      intro F F_cau inf_F
-      let i : K →+* L := K.subtype
-      have hi : UniformInducing i := uniformEmbedding_subtype_val.toUniformInducing
-      rw [← hi.cauchy_map_iff] at F_cau ⊢
-      rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
-      apply CompletableTopField.nice _ F_cau
-      rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
+instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K where
+  nice F F_cau inf_F := by
+    let i : K →+* L := K.subtype
+    have hi : UniformInducing i := uniformEmbedding_subtype_val.toUniformInducing
+    rw [← hi.cauchy_map_iff] at F_cau ⊢
+    rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
+    apply CompletableTopField.nice _ F_cau
+    rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot]
 #align subfield.completable_top_field Subfield.completableTopField
 
 instance (priority := 100) completableTopField_of_complete (L : Type*) [Field L] [UniformSpace L]
-    [TopologicalDivisionRing L] [SeparatedSpace L] [CompleteSpace L] : CompletableTopField L :=
-  { ‹SeparatedSpace L› with
-    nice := fun F cau_F hF => by
-      haveI : NeBot F := cau_F.1
-      rcases CompleteSpace.complete cau_F with ⟨x, hx⟩
-      have hx' : x ≠ 0 := by
-        rintro rfl
-        rw [inf_eq_right.mpr hx] at hF
-        exact cau_F.1.ne hF
-      exact
-        Filter.Tendsto.cauchy_map
-          (calc
-            map (fun x => x⁻¹) F ≤ map (fun x => x⁻¹) (𝓝 x) := map_mono hx
-            _ ≤ 𝓝 x⁻¹ := continuousAt_inv₀ hx'
-            ) }
+    [TopologicalDivisionRing L] [T0Space L] [CompleteSpace L] : CompletableTopField L where
+  nice F cau_F hF := by
+    haveI : NeBot F := cau_F.1
+    rcases CompleteSpace.complete cau_F with ⟨x, hx⟩
+    have hx' : x ≠ 0 := by
+      rintro rfl
+      rw [inf_eq_right.mpr hx] at hF
+      exact cau_F.1.ne hF
+    exact Filter.Tendsto.cauchy_map <|
+      calc
+        map (fun x => x⁻¹) F ≤ map (fun x => x⁻¹) (𝓝 x) := map_mono hx
+        _ ≤ 𝓝 x⁻¹ := continuousAt_inv₀ hx'
 #align completable_top_field_of_complete completableTopField_of_complete
refactor: do not allow qsmul to default automatically (#11262)

Follows on from #6262. Again, this does not attempt to fix any diamonds; it only identifies where they may be.

Diff
@@ -160,7 +160,9 @@ instance instField : Field (hat K) :=
     (by infer_instance : CommRing (hat K)) with
     exists_pair_ne := ⟨0, 1, fun h => zero_ne_one ((uniformEmbedding_coe K).inj h)⟩
     mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
-    inv_zero := by simp only [Inv.inv, ite_true] }
+    inv_zero := by simp only [Inv.inv, ite_true]
+    -- TODO: use a better defeq
+    qsmul := qsmulRec _ }
 #align uniform_space.completion.field UniformSpace.Completion.instField
 
 instance : TopologicalDivisionRing (hat K) :=
chore: scope open Classical (#11199)

We remove all but one open Classicals, instead preferring to use open scoped Classical. The only real side-effect this led to is moving a couple declarations to use Exists.choose instead of Classical.choose.

The first few commits are explicitly labelled regex replaces for ease of review.

Diff
@@ -36,7 +36,8 @@ type class and the main results are the instances `UniformSpace.Completion.Field
 
 noncomputable section
 
-open Classical uniformity Topology
+open scoped Classical
+open uniformity Topology
 
 open Set UniformSpace UniformSpace.Completion Filter
 
chore: more backporting of simp changes from #10995 (#11001)

Co-authored-by: Patrick Massot <patrickmassot@free.fr> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -147,7 +147,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 := by
     rintro _ ⟨z, z_ne, rfl⟩
     rw [mem_singleton_iff]
     rw [mem_compl_singleton_iff] at z_ne
-    dsimp
+    dsimp [f]
     rw [hatInv_extends z_ne, ← coe_mul]
     rw [mul_inv_cancel z_ne, coe_one]
   replace fxclo := closure_mono this fxclo
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
@@ -40,7 +40,7 @@ open Classical uniformity Topology
 
 open Set UniformSpace UniformSpace.Completion Filter
 
-variable (K : Type _) [Field K] [UniformSpace K]
+variable (K : Type*) [Field K] [UniformSpace K]
 
 -- mathport name: exprhat
 local notation "hat" => Completion
@@ -179,7 +179,7 @@ end Completion
 
 end UniformSpace
 
-variable (L : Type _) [Field L] [UniformSpace L] [CompletableTopField L]
+variable (L : Type*) [Field L] [UniformSpace L] [CompletableTopField L]
 
 instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :=
   { Subtype.separatedSpace (K : Set L) with
@@ -193,7 +193,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
 #align subfield.completable_top_field Subfield.completableTopField
 
-instance (priority := 100) completableTopField_of_complete (L : Type _) [Field L] [UniformSpace L]
+instance (priority := 100) completableTopField_of_complete (L : Type*) [Field L] [UniformSpace L]
     [TopologicalDivisionRing L] [SeparatedSpace L] [CompleteSpace L] : CompletableTopField L :=
   { ‹SeparatedSpace L› with
     nice := fun F cau_F hF => by
chore: ensure all instances referred to directly have explicit names (#6423)

Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.

This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.

There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.

This was implemented by running Mathlib against a modified Lean that appended _ᾰ to all automatically generated names, and fixing everything.

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

Diff
@@ -98,7 +98,7 @@ theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) :
 The value of `hat_inv` at zero is not really specified, although it's probably zero.
 Here we explicitly enforce the `inv_zero` axiom.
 -/
-instance : Inv (hat K) :=
+instance instInvCompletion : Inv (hat K) :=
   ⟨fun x => if x = 0 then 0 else hatInv x⟩
 
 variable [TopologicalDivisionRing K]
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,16 +2,13 @@
 Copyright (c) 2019 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 topology.algebra.uniform_field
-! 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.Topology.Algebra.UniformRing
 import Mathlib.Topology.Algebra.Field
 import Mathlib.FieldTheory.Subfield
 
+#align_import topology.algebra.uniform_field from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
 /-!
 # Completion of topological fields
 
chore: clean up spacing around at and goals (#5387)

Changes are of the form

  • some_tactic at h⊢ -> some_tactic at h ⊢
  • some_tactic at h -> some_tactic at h
Diff
@@ -159,7 +159,7 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 := by
 
 instance instField : Field (hat K) :=
   { Completion.instInvCompletion,
-    (by infer_instance : CommRing (hat  K)) with
+    (by infer_instance : CommRing (hat K)) with
     exists_pair_ne := ⟨0, 1, fun h => zero_ne_one ((uniformEmbedding_coe K).inj h)⟩
     mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
     inv_zero := by simp only [Inv.inv, ite_true] }
@@ -190,7 +190,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       intro F F_cau inf_F
       let i : K →+* L := K.subtype
       have hi : UniformInducing i := uniformEmbedding_subtype_val.toUniformInducing
-      rw [← hi.cauchy_map_iff] at F_cau⊢
+      rw [← hi.cauchy_map_iff] at F_cau ⊢
       rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
       apply CompletableTopField.nice _ F_cau
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
feat: port RingTheory.DedekindDomain.AdicValuation (#5372)

Co-authored-by: Chris Hughes <chrishughes24@gmail.com>

Diff
@@ -157,12 +157,13 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 := by
   rwa [closure_singleton, mem_singleton_iff] at fxclo
 #align uniform_space.completion.mul_hat_inv_cancel UniformSpace.Completion.mul_hatInv_cancel
 
-instance : Field (hat K) :=
+instance instField : Field (hat K) :=
   { Completion.instInvCompletion,
     (by infer_instance : CommRing (hat  K)) with
     exists_pair_ne := ⟨0, 1, fun h => zero_ne_one ((uniformEmbedding_coe K).inj h)⟩
     mul_inv_cancel := fun x x_ne => by simp only [Inv.inv, if_neg x_ne, mul_hatInv_cancel x_ne]
     inv_zero := by simp only [Inv.inv, ite_true] }
+#align uniform_space.completion.field UniformSpace.Completion.instField
 
 instance : TopologicalDivisionRing (hat K) :=
   { Completion.topologicalRing with
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -72,8 +72,8 @@ def hatInv : hat K → hat K :=
   denseInducing_coe.extend fun x : K => (↑x⁻¹ : hat K)
 #align uniform_space.completion.hat_inv UniformSpace.Completion.hatInv
 
-theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) : ContinuousAt hatInv x :=
-  by
+theorem continuous_hatInv [CompletableTopField K] {x : hat K} (h : x ≠ 0) :
+    ContinuousAt hatInv x := by
   haveI : T3Space (hat K) := Completion.t3Space K
   refine' denseInducing_coe.continuousAt_extend _
   apply mem_of_superset (compl_singleton_mem_nhds h)
@@ -132,14 +132,12 @@ theorem mul_hatInv_cancel {x : hat K} (x_ne : x ≠ 0) : x * hatInv x = 1 := by
   let f := fun x : hat K => x * hatInv x
   let c := (fun (x : K) => (x : hat K))
   change f x = 1
-  have cont : ContinuousAt f x :=
-    by
+  have cont : ContinuousAt f x := by
     letI : TopologicalSpace (hat K × hat K) := instTopologicalSpaceProd
     have : ContinuousAt (fun y : hat K => ((y, hatInv y) : hat K × hat K)) x :=
       continuous_id.continuousAt.prod (continuous_hatInv x_ne)
     exact (_root_.continuous_mul.continuousAt.comp this : _)
-  have clo : x ∈ closure (c '' {0}ᶜ) :=
-    by
+  have clo : x ∈ closure (c '' {0}ᶜ) := by
     have := denseInducing_coe.dense x
     rw [← image_univ, show (univ : Set K) = {0} ∪ {0}ᶜ from (union_compl_self _).symm,
       image_union] at this
@@ -192,11 +190,7 @@ instance Subfield.completableTopField (K : Subfield L) : CompletableTopField K :
       let i : K →+* L := K.subtype
       have hi : UniformInducing i := uniformEmbedding_subtype_val.toUniformInducing
       rw [← hi.cauchy_map_iff] at F_cau⊢
-      rw [map_comm
-          (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i
-            by
-            ext
-            rfl)]
+      rw [map_comm (show (i ∘ fun x => x⁻¹) = (fun x => x⁻¹) ∘ i by ext; rfl)]
       apply CompletableTopField.nice _ F_cau
       rw [← Filter.push_pull', ← map_zero i, ← hi.inducing.nhds_eq_comap, inf_F, Filter.map_bot] }
 #align subfield.completable_top_field Subfield.completableTopField
feat: port Topology.Algebra.UniformField (#3049)

Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: Moritz Doll <moritz.doll@googlemail.com> Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Dependencies 9 + 483

484 files ported (98.2%)
209329 lines ported (97.6%)
Show graph

The unported dependencies are