[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : EquicontinuousAt (FunLike.coe ∘ F) 1
⊢ Equicontinuous (FunLike.coe ∘ F)
[PROOFSTEP]
rw [equicontinuous_iff_continuous]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : EquicontinuousAt (FunLike.coe ∘ F) 1
⊢ Continuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
rw [equicontinuousAt_iff_continuousAt] at hf 
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ Continuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
let φ : G →* (ι →ᵤ M) :=
  { toFun := swap ((↑) ∘ F)
    map_one' := by dsimp [UniformFun]; ext; exact map_one _
    map_mul' := fun a b => by dsimp [UniformFun]; ext; exact map_mul _ _ _ }
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ swap (FunLike.coe ∘ F) 1 = 1
[PROOFSTEP]
dsimp [UniformFun]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ swap (FunLike.coe ∘ F) 1 = 1
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
x✝ : ι
⊢ swap (FunLike.coe ∘ F) 1 x✝ = OfNat.ofNat 1 x✝
[PROOFSTEP]
exact map_one _
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
⊢ OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } (a * b) =
    OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } a *
      OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } b
[PROOFSTEP]
dsimp [UniformFun]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
⊢ swap (FunLike.coe ∘ F) (a * b) = swap (FunLike.coe ∘ F) a * swap (FunLike.coe ∘ F) b
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
x✝ : ι
⊢ swap (FunLike.coe ∘ F) (a * b) x✝ = (swap (FunLike.coe ∘ F) a * swap (FunLike.coe ∘ F) b) x✝
[PROOFSTEP]
exact map_mul _ _ _
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : TopologicalSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : TopologicalGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
φ : G →* ι →ᵤ M :=
  { toOneHom := { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) },
    map_mul' :=
      (_ :
        ∀ (a b : G),
          OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } (a * b) =
            OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } a *
              OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } b) }
⊢ Continuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
exact continuous_of_continuousAt_one φ hf
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : EquicontinuousAt (FunLike.coe ∘ F) 1
⊢ UniformEquicontinuous (FunLike.coe ∘ F)
[PROOFSTEP]
rw [uniformEquicontinuous_iff_uniformContinuous]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : EquicontinuousAt (FunLike.coe ∘ F) 1
⊢ UniformContinuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
rw [equicontinuousAt_iff_continuousAt] at hf 
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ UniformContinuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
let φ : G →* (ι →ᵤ M) :=
  { toFun := swap ((↑) ∘ F)
    map_one' := by dsimp [UniformFun]; ext; exact map_one _
    map_mul' := fun a b => by dsimp [UniformFun]; ext; exact map_mul _ _ _ }
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ swap (FunLike.coe ∘ F) 1 = 1
[PROOFSTEP]
dsimp [UniformFun]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
⊢ swap (FunLike.coe ∘ F) 1 = 1
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
x✝ : ι
⊢ swap (FunLike.coe ∘ F) 1 x✝ = OfNat.ofNat 1 x✝
[PROOFSTEP]
exact map_one _
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
⊢ OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } (a * b) =
    OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } a *
      OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } b
[PROOFSTEP]
dsimp [UniformFun]
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
⊢ swap (FunLike.coe ∘ F) (a * b) = swap (FunLike.coe ∘ F) a * swap (FunLike.coe ∘ F) b
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
a b : G
x✝ : ι
⊢ swap (FunLike.coe ∘ F) (a * b) x✝ = (swap (FunLike.coe ∘ F) a * swap (FunLike.coe ∘ F) b) x✝
[PROOFSTEP]
exact map_mul _ _ _
[GOAL]
ι : Type u_1
G : Type u_2
M : Type u_3
hom : Type u_4
inst✝⁶ : UniformSpace G
inst✝⁵ : UniformSpace M
inst✝⁴ : Group G
inst✝³ : Group M
inst✝² : UniformGroup G
inst✝¹ : UniformGroup M
inst✝ : MonoidHomClass hom G M
F : ι → hom
hf : ContinuousAt (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F)) 1
φ : G →* ι →ᵤ M :=
  { toOneHom := { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) },
    map_mul' :=
      (_ :
        ∀ (a b : G),
          OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } (a * b) =
            OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } a *
              OneHom.toFun { toFun := swap (FunLike.coe ∘ F), map_one' := (_ : swap (FunLike.coe ∘ F) 1 = 1) } b) }
⊢ UniformContinuous (↑UniformFun.ofFun ∘ swap (FunLike.coe ∘ F))
[PROOFSTEP]
exact uniformContinuous_of_continuousAt_one φ hf
