topology.continuous_function.zero_at_infty
⟷
Mathlib.Topology.ContinuousFunction.ZeroAtInfty
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -247,18 +247,20 @@ section AddMonoid
variable [AddMonoid β] [ContinuousAdd β] (f g : C₀(α, β))
-#print ZeroAtInftyContinuousMap.coe_nsmulRec /-
+/- warning: zero_at_infty_continuous_map.coe_nsmul_rec clashes with zero_at_infty_continuous_map.coe_smul -> ZeroAtInftyContinuousMap.coe_smul
+Case conversion may be inaccurate. Consider using '#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_smulₓ'. -/
+#print ZeroAtInftyContinuousMap.coe_smul /-
@[simp]
-theorem coe_nsmulRec : ∀ n, ⇑(nsmulRec n f) = n • f
+theorem coe_smul : ∀ n, ⇑(nsmulRec n f) = n • f
| 0 => by rw [nsmulRec, zero_smul, coe_zero]
| n + 1 => by rw [nsmulRec, succ_nsmul', coe_add, coe_nsmul_rec]
-#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_nsmulRec
+#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_smul
-/
-#print ZeroAtInftyContinuousMap.instNatSMul /-
-instance instNatSMul : SMul ℕ C₀(α, β) :=
+#print ZeroAtInftyContinuousMap.instSMul /-
+instance instSMul : SMul ℕ C₀(α, β) :=
⟨fun n f => ⟨n • f, by simpa [coe_nsmul_rec] using zero_at_infty (nsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instNatSMul
+#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instSMul
-/
instance : AddMonoid C₀(α, β) :=
@@ -305,18 +307,22 @@ theorem sub_apply : (f - g) x = f x - g x :=
#align zero_at_infty_continuous_map.sub_apply ZeroAtInftyContinuousMap.sub_apply
-/
-#print ZeroAtInftyContinuousMap.coe_zsmulRec /-
+/- warning: zero_at_infty_continuous_map.coe_zsmul_rec clashes with zero_at_infty_continuous_map.coe_smul -> ZeroAtInftyContinuousMap.coe_smul
+Case conversion may be inaccurate. Consider using '#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_smulₓ'. -/
+#print ZeroAtInftyContinuousMap.coe_smul /-
@[simp]
-theorem coe_zsmulRec : ∀ z, ⇑(zsmulRec z f) = z • f
+theorem coe_smul : ∀ z, ⇑(zsmulRec z f) = z • f
| Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmul_rec, natCast_zsmul]
| -[n+1] => by rw [zsmulRec, negSucc_zsmul, coe_neg, coe_nsmul_rec]
-#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_zsmulRec
+#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_smul
-/
-#print ZeroAtInftyContinuousMap.instIntSMul /-
-instance instIntSMul : SMul ℤ C₀(α, β) :=
+/- warning: zero_at_infty_continuous_map.has_int_scalar clashes with zero_at_infty_continuous_map.has_nat_scalar -> ZeroAtInftyContinuousMap.instSMul
+Case conversion may be inaccurate. Consider using '#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instSMulₓ'. -/
+#print ZeroAtInftyContinuousMap.instSMul /-
+instance instSMul : SMul ℤ C₀(α, β) :=
⟨fun n f => ⟨n • f, by simpa using zero_at_infty (zsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instIntSMul
+#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instSMul
-/
instance : AddGroup C₀(α, β) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -251,7 +251,7 @@ variable [AddMonoid β] [ContinuousAdd β] (f g : C₀(α, β))
@[simp]
theorem coe_nsmulRec : ∀ n, ⇑(nsmulRec n f) = n • f
| 0 => by rw [nsmulRec, zero_smul, coe_zero]
- | n + 1 => by rw [nsmulRec, succ_nsmul, coe_add, coe_nsmul_rec]
+ | n + 1 => by rw [nsmulRec, succ_nsmul', coe_add, coe_nsmul_rec]
#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_nsmulRec
-/
@@ -308,7 +308,7 @@ theorem sub_apply : (f - g) x = f x - g x :=
#print ZeroAtInftyContinuousMap.coe_zsmulRec /-
@[simp]
theorem coe_zsmulRec : ∀ z, ⇑(zsmulRec z f) = z • f
- | Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmul_rec, coe_nat_zsmul]
+ | Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmul_rec, natCast_zsmul]
| -[n+1] => by rw [zsmulRec, negSucc_zsmul, coe_neg, coe_nsmul_rec]
#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_zsmulRec
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -515,8 +515,8 @@ theorem isometry_toBCF : Isometry (toBCF : C₀(α, β) → α →ᵇ β) := by
#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBCF
-/
-#print ZeroAtInftyContinuousMap.closed_range_toBCF /-
-theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) :=
+#print ZeroAtInftyContinuousMap.isClosed_range_toBCF /-
+theorem isClosed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) :=
by
refine' is_closed_iff_cluster_pt.mpr fun f hf => _
rw [clusterPt_principal_iff] at hf
@@ -532,14 +532,14 @@ theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ
_ < dist g.to_bcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
exact ⟨⟨f.to_continuous_map, this⟩, by ext; rfl⟩
-#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBCF
+#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.isClosed_range_toBCF
-/
/-- Continuous functions vanishing at infinity taking values in a complete space form a
complete space. -/
instance [CompleteSpace β] : CompleteSpace C₀(α, β) :=
(completeSpace_iff_isComplete_range isometry_toBCF.UniformInducing).mpr
- closed_range_toBCF.IsComplete
+ isClosed_range_toBCF.IsComplete
end Metric
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -519,7 +519,7 @@ theorem isometry_toBCF : Isometry (toBCF : C₀(α, β) → α →ᵇ β) := by
theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) :=
by
refine' is_closed_iff_cluster_pt.mpr fun f hf => _
- rw [clusterPt_principal_iff] at hf
+ rw [clusterPt_principal_iff] at hf
have : tendsto f (cocompact α) (𝓝 0) :=
by
refine' metric.tendsto_nhds.mpr fun ε hε => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -86,7 +86,7 @@ instance : ZeroAtInftyContinuousMapClass C₀(α, β) α β
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
directly. -/
instance : CoeFun C₀(α, β) fun _ => α → β :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
instance : CoeTC F C₀(α, β) :=
⟨fun f =>
@@ -104,7 +104,7 @@ theorem coe_toContinuousMap (f : C₀(α, β)) : (f.toContinuousMap : α → β)
#print ZeroAtInftyContinuousMap.ext /-
@[ext]
theorem ext {f g : C₀(α, β)} (h : ∀ x, f x = g x) : f = g :=
- FunLike.ext _ _ h
+ DFunLike.ext _ _ h
#align zero_at_infty_continuous_map.ext ZeroAtInftyContinuousMap.ext
-/
@@ -128,7 +128,7 @@ theorem coe_copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : ⇑(f.copy f
#print ZeroAtInftyContinuousMap.copy_eq /-
theorem copy_eq (f : C₀(α, β)) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
- FunLike.ext' h
+ DFunLike.ext' h
#align zero_at_infty_continuous_map.copy_eq ZeroAtInftyContinuousMap.copy_eq
-/
@@ -162,7 +162,7 @@ def zeroAtInftyContinuousMapClass.ofCompact {G : Type _} [ContinuousMapClass G
[CompactSpace α] : ZeroAtInftyContinuousMapClass G α β
where
coe g := g
- coe_injective' f g h := FunLike.coe_fn_eq.mp h
+ coe_injective' f g h := DFunLike.coe_fn_eq.mp h
map_continuous := map_continuous
zero_at_infty := by simp
#align zero_at_infty_continuous_map.zero_at_infty_continuous_map_class.of_compact ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact
@@ -219,10 +219,10 @@ theorem mul_apply [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : (f
-/
instance [MulZeroClass β] [ContinuousMul β] : MulZeroClass C₀(α, β) :=
- FunLike.coe_injective.MulZeroClass _ coe_zero coe_mul
+ DFunLike.coe_injective.MulZeroClass _ coe_zero coe_mul
instance [SemigroupWithZero β] [ContinuousMul β] : SemigroupWithZero C₀(α, β) :=
- FunLike.coe_injective.SemigroupWithZero _ coe_zero coe_mul
+ DFunLike.coe_injective.SemigroupWithZero _ coe_zero coe_mul
instance [AddZeroClass β] [ContinuousAdd β] : Add C₀(α, β) :=
⟨fun f g => ⟨f + g, by simpa only [add_zero] using (zero_at_infty f).add (zero_at_infty g)⟩⟩
@@ -241,7 +241,7 @@ theorem add_apply [AddZeroClass β] [ContinuousAdd β] (f g : C₀(α, β)) : (f
-/
instance [AddZeroClass β] [ContinuousAdd β] : AddZeroClass C₀(α, β) :=
- FunLike.coe_injective.AddZeroClass _ coe_zero coe_add
+ DFunLike.coe_injective.AddZeroClass _ coe_zero coe_add
section AddMonoid
@@ -262,12 +262,12 @@ instance instNatSMul : SMul ℕ C₀(α, β) :=
-/
instance : AddMonoid C₀(α, β) :=
- FunLike.coe_injective.AddMonoid _ coe_zero coe_add fun _ _ => rfl
+ DFunLike.coe_injective.AddMonoid _ coe_zero coe_add fun _ _ => rfl
end AddMonoid
instance [AddCommMonoid β] [ContinuousAdd β] : AddCommMonoid C₀(α, β) :=
- FunLike.coe_injective.AddCommMonoid _ coe_zero coe_add fun _ _ => rfl
+ DFunLike.coe_injective.AddCommMonoid _ coe_zero coe_add fun _ _ => rfl
section AddGroup
@@ -320,12 +320,12 @@ instance instIntSMul : SMul ℤ C₀(α, β) :=
-/
instance : AddGroup C₀(α, β) :=
- FunLike.coe_injective.AddGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
+ DFunLike.coe_injective.AddGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
end AddGroup
instance [AddCommGroup β] [TopologicalAddGroup β] : AddCommGroup C₀(α, β) :=
- FunLike.coe_injective.AddCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
+ DFunLike.coe_injective.AddCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
rfl
instance [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
@@ -353,36 +353,36 @@ instance [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [SMulWithZero Rᵐ
instance [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
SMulWithZero R C₀(α, β) :=
- Function.Injective.smulWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
+ Function.Injective.smulWithZero ⟨_, coe_zero⟩ DFunLike.coe_injective coe_smul
instance [Zero β] {R : Type _} [MonoidWithZero R] [MulActionWithZero R β]
[ContinuousConstSMul R β] : MulActionWithZero R C₀(α, β) :=
- Function.Injective.mulActionWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
+ Function.Injective.mulActionWithZero ⟨_, coe_zero⟩ DFunLike.coe_injective coe_smul
instance [AddCommMonoid β] [ContinuousAdd β] {R : Type _} [Semiring R] [Module R β]
[ContinuousConstSMul R β] : Module R C₀(α, β) :=
- Function.Injective.module R ⟨_, coe_zero, coe_add⟩ FunLike.coe_injective coe_smul
+ Function.Injective.module R ⟨_, coe_zero, coe_add⟩ DFunLike.coe_injective coe_smul
instance [NonUnitalNonAssocSemiring β] [TopologicalSemiring β] :
NonUnitalNonAssocSemiring C₀(α, β) :=
- FunLike.coe_injective.NonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.NonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance [NonUnitalSemiring β] [TopologicalSemiring β] : NonUnitalSemiring C₀(α, β) :=
- FunLike.coe_injective.NonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.NonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance [NonUnitalCommSemiring β] [TopologicalSemiring β] : NonUnitalCommSemiring C₀(α, β) :=
- FunLike.coe_injective.NonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.NonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance [NonUnitalNonAssocRing β] [TopologicalRing β] : NonUnitalNonAssocRing C₀(α, β) :=
- FunLike.coe_injective.NonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+ DFunLike.coe_injective.NonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
(fun _ _ => rfl) fun _ _ => rfl
instance [NonUnitalRing β] [TopologicalRing β] : NonUnitalRing C₀(α, β) :=
- FunLike.coe_injective.NonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ => rfl)
+ DFunLike.coe_injective.NonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ => rfl)
fun _ _ => rfl
instance [NonUnitalCommRing β] [TopologicalRing β] : NonUnitalCommRing C₀(α, β) :=
- FunLike.coe_injective.NonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+ DFunLike.coe_injective.NonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
(fun _ _ => rfl) fun _ _ => rfl
instance {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring β] [TopologicalSemiring β]
@@ -478,7 +478,7 @@ variable (α) (β)
#print ZeroAtInftyContinuousMap.toBCF_injective /-
theorem toBCF_injective : Function.Injective (toBCF : C₀(α, β) → α →ᵇ β) := fun f g h => by ext;
- simpa only using FunLike.congr_fun h x
+ simpa only using DFunLike.congr_fun h x
#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBCF_injective
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -464,22 +464,22 @@ instance (priority := 100) : BoundedContinuousMapClass F α β :=
{ ‹ZeroAtInftyContinuousMapClass F α β› with
map_bounded := fun f => ZeroAtInftyContinuousMap.bounded f }
-#print ZeroAtInftyContinuousMap.toBcf /-
+#print ZeroAtInftyContinuousMap.toBCF /-
/-- Construct a bounded continuous function from a continuous function vanishing at infinity. -/
@[simps]
-def toBcf (f : C₀(α, β)) : α →ᵇ β :=
+def toBCF (f : C₀(α, β)) : α →ᵇ β :=
⟨f, map_bounded f⟩
-#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBcf
+#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBCF
-/
section
variable (α) (β)
-#print ZeroAtInftyContinuousMap.toBcf_injective /-
-theorem toBcf_injective : Function.Injective (toBcf : C₀(α, β) → α →ᵇ β) := fun f g h => by ext;
+#print ZeroAtInftyContinuousMap.toBCF_injective /-
+theorem toBCF_injective : Function.Injective (toBCF : C₀(α, β) → α →ᵇ β) := fun f g h => by ext;
simpa only using FunLike.congr_fun h x
-#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBcf_injective
+#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBCF_injective
-/
end
@@ -489,13 +489,13 @@ variable {C : ℝ} {f g : C₀(α, β)}
/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
inclusion `zero_at_infinity_continuous_map.to_bcf`, is a metric space. -/
noncomputable instance : MetricSpace C₀(α, β) :=
- MetricSpace.induced _ (toBcf_injective α β) (by infer_instance)
+ MetricSpace.induced _ (toBCF_injective α β) (by infer_instance)
-#print ZeroAtInftyContinuousMap.dist_toBcf_eq_dist /-
+#print ZeroAtInftyContinuousMap.dist_toBCF_eq_dist /-
@[simp]
-theorem dist_toBcf_eq_dist {f g : C₀(α, β)} : dist f.toBcf g.toBcf = dist f g :=
+theorem dist_toBCF_eq_dist {f g : C₀(α, β)} : dist f.toBCF g.toBCF = dist f g :=
rfl
-#align zero_at_infty_continuous_map.dist_to_bcf_eq_dist ZeroAtInftyContinuousMap.dist_toBcf_eq_dist
+#align zero_at_infty_continuous_map.dist_to_bcf_eq_dist ZeroAtInftyContinuousMap.dist_toBCF_eq_dist
-/
open BoundedContinuousFunction
@@ -505,18 +505,18 @@ open BoundedContinuousFunction
theorem tendsto_iff_tendstoUniformly {ι : Type _} {F : ι → C₀(α, β)} {f : C₀(α, β)} {l : Filter ι} :
Tendsto F l (𝓝 f) ↔ TendstoUniformly (fun i => F i) f l := by
simpa only [Metric.tendsto_nhds] using
- @BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBcf)
+ @BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBCF)
f.to_bcf l
#align zero_at_infty_continuous_map.tendsto_iff_tendsto_uniformly ZeroAtInftyContinuousMap.tendsto_iff_tendstoUniformly
-/
-#print ZeroAtInftyContinuousMap.isometry_toBcf /-
-theorem isometry_toBcf : Isometry (toBcf : C₀(α, β) → α →ᵇ β) := by tauto
-#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBcf
+#print ZeroAtInftyContinuousMap.isometry_toBCF /-
+theorem isometry_toBCF : Isometry (toBCF : C₀(α, β) → α →ᵇ β) := by tauto
+#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBCF
-/
-#print ZeroAtInftyContinuousMap.closed_range_toBcf /-
-theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ β)) :=
+#print ZeroAtInftyContinuousMap.closed_range_toBCF /-
+theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) :=
by
refine' is_closed_iff_cluster_pt.mpr fun f hf => _
rw [clusterPt_principal_iff] at hf
@@ -532,14 +532,14 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
_ < dist g.to_bcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
exact ⟨⟨f.to_continuous_map, this⟩, by ext; rfl⟩
-#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBcf
+#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBCF
-/
/-- Continuous functions vanishing at infinity taking values in a complete space form a
complete space. -/
instance [CompleteSpace β] : CompleteSpace C₀(α, β) :=
- (completeSpace_iff_isComplete_range isometry_toBcf.UniformInducing).mpr
- closed_range_toBcf.IsComplete
+ (completeSpace_iff_isComplete_range isometry_toBCF.UniformInducing).mpr
+ closed_range_toBCF.IsComplete
end Metric
@@ -558,17 +558,17 @@ section NormedSpace
variable [NormedAddCommGroup β] {𝕜 : Type _} [NormedField 𝕜] [NormedSpace 𝕜 β]
noncomputable instance : NormedAddCommGroup C₀(α, β) :=
- NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨toBcf, rfl, fun x y => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
- (toBcf_injective α β)
+ NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨toBCF, rfl, fun x y => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
+ (toBCF_injective α β)
-#print ZeroAtInftyContinuousMap.norm_toBcf_eq_norm /-
+#print ZeroAtInftyContinuousMap.norm_toBCF_eq_norm /-
@[simp]
-theorem norm_toBcf_eq_norm {f : C₀(α, β)} : ‖f.toBcf‖ = ‖f‖ :=
+theorem norm_toBCF_eq_norm {f : C₀(α, β)} : ‖f.toBCF‖ = ‖f‖ :=
rfl
-#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBcf_eq_norm
+#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBCF_eq_norm
-/
-instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBcf : _)
+instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBCF : _)
end NormedSpace
@@ -578,7 +578,7 @@ variable [NonUnitalNormedRing β]
noncomputable instance : NonUnitalNormedRing C₀(α, β) :=
{ ZeroAtInftyContinuousMap.nonUnitalRing, ZeroAtInftyContinuousMap.normedAddCommGroup with
- norm_hMul := fun f g => norm_mul_le f.toBcf g.toBcf }
+ norm_hMul := fun f g => norm_mul_le f.toBCF g.toBCF }
end NormedRing
@@ -630,7 +630,7 @@ section NormedStar
variable [NormedAddCommGroup β] [StarAddMonoid β] [NormedStarGroup β]
-instance : NormedStarGroup C₀(α, β) where norm_star f := (norm_star f.toBcf : _)
+instance : NormedStarGroup C₀(α, β) where norm_star f := (norm_star f.toBCF : _)
end NormedStar
@@ -657,7 +657,7 @@ end StarRing
section CstarRing
instance [NonUnitalNormedRing β] [StarRing β] [CstarRing β] : CstarRing C₀(α, β)
- where norm_star_hMul_self f := @CstarRing.norm_star_hMul_self _ _ _ _ f.toBcf
+ where norm_star_hMul_self f := @CstarRing.norm_star_hMul_self _ _ _ _ f.toBCF
end CstarRing
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-/
-import Mathbin.Topology.ContinuousFunction.Bounded
-import Mathbin.Topology.ContinuousFunction.CocompactMap
+import Topology.ContinuousFunction.Bounded
+import Topology.ContinuousFunction.CocompactMap
#align_import topology.continuous_function.zero_at_infty from "leanprover-community/mathlib"@"2a0ce625dbb0ffbc7d1316597de0b25c1ec75303"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -434,7 +434,7 @@ protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x
obtain ⟨K : Set α, hK₁, hK₂⟩ :=
mem_cocompact.mp
(tendsto_def.mp (zero_at_infty (f : F)) _ (closed_ball_mem_nhds (0 : β) zero_lt_one))
- obtain ⟨C, hC⟩ := (hK₁.image (map_continuous f)).Bounded.subset_ball (0 : β)
+ obtain ⟨C, hC⟩ := (hK₁.image (map_continuous f)).Bounded.subset_closedBall (0 : β)
refine' ⟨max C 1 + max C 1, fun x y => _⟩
have : ∀ x, f x ∈ closed_ball (0 : β) (max C 1) :=
by
@@ -448,16 +448,16 @@ protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x
#align zero_at_infty_continuous_map.bounded ZeroAtInftyContinuousMap.bounded
-/
-#print ZeroAtInftyContinuousMap.bounded_range /-
-theorem bounded_range (f : C₀(α, β)) : Bounded (range f) :=
- bounded_range_iff.2 f.Bounded
-#align zero_at_infty_continuous_map.bounded_range ZeroAtInftyContinuousMap.bounded_range
+#print ZeroAtInftyContinuousMap.isBounded_range /-
+theorem isBounded_range (f : C₀(α, β)) : Bounded (range f) :=
+ isBounded_range_iff.2 f.Bounded
+#align zero_at_infty_continuous_map.bounded_range ZeroAtInftyContinuousMap.isBounded_range
-/
-#print ZeroAtInftyContinuousMap.bounded_image /-
-theorem bounded_image (f : C₀(α, β)) (s : Set α) : Bounded (f '' s) :=
- f.bounded_range.mono <| image_subset_range _ _
-#align zero_at_infty_continuous_map.bounded_image ZeroAtInftyContinuousMap.bounded_image
+#print ZeroAtInftyContinuousMap.isBounded_image /-
+theorem isBounded_image (f : C₀(α, β)) (s : Set α) : Bounded (f '' s) :=
+ f.isBounded_range.mono <| image_subset_range _ _
+#align zero_at_infty_continuous_map.bounded_image ZeroAtInftyContinuousMap.isBounded_image
-/
instance (priority := 100) : BoundedContinuousMapClass F α β :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -578,7 +578,7 @@ variable [NonUnitalNormedRing β]
noncomputable instance : NonUnitalNormedRing C₀(α, β) :=
{ ZeroAtInftyContinuousMap.nonUnitalRing, ZeroAtInftyContinuousMap.normedAddCommGroup with
- norm_mul := fun f g => norm_mul_le f.toBcf g.toBcf }
+ norm_hMul := fun f g => norm_mul_le f.toBcf g.toBcf }
end NormedRing
@@ -650,14 +650,14 @@ variable [NonUnitalSemiring β] [StarRing β] [TopologicalSpace β] [ContinuousS
instance : StarRing C₀(α, β) :=
{ ZeroAtInftyContinuousMap.starAddMonoid with
- star_mul := fun f g => ext fun x => star_mul (f x) (g x) }
+ star_hMul := fun f g => ext fun x => star_hMul (f x) (g x) }
end StarRing
section CstarRing
instance [NonUnitalNormedRing β] [StarRing β] [CstarRing β] : CstarRing C₀(α, β)
- where norm_star_mul_self f := @CstarRing.norm_star_mul_self _ _ _ _ f.toBcf
+ where norm_star_hMul_self f := @CstarRing.norm_star_hMul_self _ _ _ _ f.toBcf
end CstarRing
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-
-! This file was ported from Lean 3 source module topology.continuous_function.zero_at_infty
-! leanprover-community/mathlib commit 2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.ContinuousFunction.Bounded
import Mathbin.Topology.ContinuousFunction.CocompactMap
+#align_import topology.continuous_function.zero_at_infty from "leanprover-community/mathlib"@"2a0ce625dbb0ffbc7d1316597de0b25c1ec75303"
+
/-!
# Continuous functions vanishing at infinity
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -38,6 +38,7 @@ open scoped BoundedContinuousFunction Topology
open Filter Metric
+#print ZeroAtInftyContinuousMap /-
/-- `C₀(α, β)` is the type of continuous functions `α → β` which vanish at infinity from a
topological space to a metric space with a zero element.
@@ -49,6 +50,7 @@ structure ZeroAtInftyContinuousMap (α : Type u) (β : Type v) [TopologicalSpace
[TopologicalSpace β] extends ContinuousMap α β : Type max u v where
zero_at_infty' : Tendsto to_fun (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map ZeroAtInftyContinuousMap
+-/
scoped[ZeroAtInfty] notation (priority := 2000) "C₀(" α ", " β ")" => ZeroAtInftyContinuousMap α β
@@ -56,6 +58,7 @@ scoped[ZeroAtInfty] notation α " →C₀ " β => ZeroAtInftyContinuousMap α β
section
+#print ZeroAtInftyContinuousMapClass /-
/-- `zero_at_infty_continuous_map_class F α β` states that `F` is a type of continuous maps which
vanish at infinity.
@@ -64,6 +67,7 @@ class ZeroAtInftyContinuousMapClass (F : Type _) (α β : outParam <| Type _) [T
[Zero β] [TopologicalSpace β] extends ContinuousMapClass F α β where
zero_at_infty (f : F) : Tendsto f (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map_class ZeroAtInftyContinuousMapClass
+-/
end
@@ -93,16 +97,21 @@ instance : CoeTC F C₀(α, β) :=
continuous_toFun := map_continuous f
zero_at_infty' := zero_at_infty f }⟩
+#print ZeroAtInftyContinuousMap.coe_toContinuousMap /-
@[simp]
-theorem coe_to_continuous_fun (f : C₀(α, β)) : (f.toContinuousMap : α → β) = f :=
+theorem coe_toContinuousMap (f : C₀(α, β)) : (f.toContinuousMap : α → β) = f :=
rfl
-#align zero_at_infty_continuous_map.coe_to_continuous_fun ZeroAtInftyContinuousMap.coe_to_continuous_fun
+#align zero_at_infty_continuous_map.coe_to_continuous_fun ZeroAtInftyContinuousMap.coe_toContinuousMap
+-/
+#print ZeroAtInftyContinuousMap.ext /-
@[ext]
theorem ext {f g : C₀(α, β)} (h : ∀ x, f x = g x) : f = g :=
FunLike.ext _ _ h
#align zero_at_infty_continuous_map.ext ZeroAtInftyContinuousMap.ext
+-/
+#print ZeroAtInftyContinuousMap.copy /-
/-- Copy of a `zero_at_infinity_continuous_map` with a new `to_fun` equal to the old one. Useful
to fix definitional equalities. -/
protected def copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : C₀(α, β)
@@ -111,20 +120,28 @@ protected def copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : C₀(α,
continuous_toFun := by rw [h]; exact f.continuous_to_fun
zero_at_infty' := by simp_rw [h]; exact f.zero_at_infty'
#align zero_at_infty_continuous_map.copy ZeroAtInftyContinuousMap.copy
+-/
+#print ZeroAtInftyContinuousMap.coe_copy /-
@[simp]
theorem coe_copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
rfl
#align zero_at_infty_continuous_map.coe_copy ZeroAtInftyContinuousMap.coe_copy
+-/
+#print ZeroAtInftyContinuousMap.copy_eq /-
theorem copy_eq (f : C₀(α, β)) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
FunLike.ext' h
#align zero_at_infty_continuous_map.copy_eq ZeroAtInftyContinuousMap.copy_eq
+-/
+#print ZeroAtInftyContinuousMap.eq_of_empty /-
theorem eq_of_empty [IsEmpty α] (f g : C₀(α, β)) : f = g :=
ext <| IsEmpty.elim ‹_›
#align zero_at_infty_continuous_map.eq_of_empty ZeroAtInftyContinuousMap.eq_of_empty
+-/
+#print ZeroAtInftyContinuousMap.ContinuousMap.liftZeroAtInfty /-
/-- A continuous function on a compact space is automatically a continuous function vanishing at
infinity. -/
@[simps]
@@ -138,7 +155,9 @@ def ContinuousMap.liftZeroAtInfty [CompactSpace α] : C(α, β) ≃ C₀(α, β)
left_inv f := by ext; rfl
right_inv f := by ext; rfl
#align zero_at_infty_continuous_map.continuous_map.lift_zero_at_infty ZeroAtInftyContinuousMap.ContinuousMap.liftZeroAtInfty
+-/
+#print ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact /-
/-- A continuous function on a compact space is automatically a continuous function vanishing at
infinity. This is not an instance to avoid type class loops. -/
@[simps]
@@ -150,6 +169,7 @@ def zeroAtInftyContinuousMapClass.ofCompact {G : Type _} [ContinuousMapClass G
map_continuous := map_continuous
zero_at_infty := by simp
#align zero_at_infty_continuous_map.zero_at_infty_continuous_map_class.of_compact ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact
+-/
end Basics
@@ -171,27 +191,35 @@ instance [Zero β] : Zero C₀(α, β) :=
instance [Zero β] : Inhabited C₀(α, β) :=
⟨0⟩
+#print ZeroAtInftyContinuousMap.coe_zero /-
@[simp]
theorem coe_zero [Zero β] : ⇑(0 : C₀(α, β)) = 0 :=
rfl
#align zero_at_infty_continuous_map.coe_zero ZeroAtInftyContinuousMap.coe_zero
+-/
+#print ZeroAtInftyContinuousMap.zero_apply /-
theorem zero_apply [Zero β] : (0 : C₀(α, β)) x = 0 :=
rfl
#align zero_at_infty_continuous_map.zero_apply ZeroAtInftyContinuousMap.zero_apply
+-/
instance [MulZeroClass β] [ContinuousMul β] : Mul C₀(α, β) :=
⟨fun f g =>
⟨f * g, by simpa only [MulZeroClass.mul_zero] using (zero_at_infty f).mul (zero_at_infty g)⟩⟩
+#print ZeroAtInftyContinuousMap.coe_mul /-
@[simp]
theorem coe_mul [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : ⇑(f * g) = f * g :=
rfl
#align zero_at_infty_continuous_map.coe_mul ZeroAtInftyContinuousMap.coe_mul
+-/
+#print ZeroAtInftyContinuousMap.mul_apply /-
theorem mul_apply [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : (f * g) x = f x * g x :=
rfl
#align zero_at_infty_continuous_map.mul_apply ZeroAtInftyContinuousMap.mul_apply
+-/
instance [MulZeroClass β] [ContinuousMul β] : MulZeroClass C₀(α, β) :=
FunLike.coe_injective.MulZeroClass _ coe_zero coe_mul
@@ -202,14 +230,18 @@ instance [SemigroupWithZero β] [ContinuousMul β] : SemigroupWithZero C₀(α,
instance [AddZeroClass β] [ContinuousAdd β] : Add C₀(α, β) :=
⟨fun f g => ⟨f + g, by simpa only [add_zero] using (zero_at_infty f).add (zero_at_infty g)⟩⟩
+#print ZeroAtInftyContinuousMap.coe_add /-
@[simp]
theorem coe_add [AddZeroClass β] [ContinuousAdd β] (f g : C₀(α, β)) : ⇑(f + g) = f + g :=
rfl
#align zero_at_infty_continuous_map.coe_add ZeroAtInftyContinuousMap.coe_add
+-/
+#print ZeroAtInftyContinuousMap.add_apply /-
theorem add_apply [AddZeroClass β] [ContinuousAdd β] (f g : C₀(α, β)) : (f + g) x = f x + g x :=
rfl
#align zero_at_infty_continuous_map.add_apply ZeroAtInftyContinuousMap.add_apply
+-/
instance [AddZeroClass β] [ContinuousAdd β] : AddZeroClass C₀(α, β) :=
FunLike.coe_injective.AddZeroClass _ coe_zero coe_add
@@ -218,15 +250,19 @@ section AddMonoid
variable [AddMonoid β] [ContinuousAdd β] (f g : C₀(α, β))
+#print ZeroAtInftyContinuousMap.coe_nsmulRec /-
@[simp]
theorem coe_nsmulRec : ∀ n, ⇑(nsmulRec n f) = n • f
| 0 => by rw [nsmulRec, zero_smul, coe_zero]
| n + 1 => by rw [nsmulRec, succ_nsmul, coe_add, coe_nsmul_rec]
#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_nsmulRec
+-/
-instance hasNatScalar : SMul ℕ C₀(α, β) :=
+#print ZeroAtInftyContinuousMap.instNatSMul /-
+instance instNatSMul : SMul ℕ C₀(α, β) :=
⟨fun n f => ⟨n • f, by simpa [coe_nsmul_rec] using zero_at_infty (nsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.hasNatScalar
+#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instNatSMul
+-/
instance : AddMonoid C₀(α, β) :=
FunLike.coe_injective.AddMonoid _ coe_zero coe_add fun _ _ => rfl
@@ -243,36 +279,48 @@ variable [AddGroup β] [TopologicalAddGroup β] (f g : C₀(α, β))
instance : Neg C₀(α, β) :=
⟨fun f => ⟨-f, by simpa only [neg_zero] using (zero_at_infty f).neg⟩⟩
+#print ZeroAtInftyContinuousMap.coe_neg /-
@[simp]
theorem coe_neg : ⇑(-f) = -f :=
rfl
#align zero_at_infty_continuous_map.coe_neg ZeroAtInftyContinuousMap.coe_neg
+-/
+#print ZeroAtInftyContinuousMap.neg_apply /-
theorem neg_apply : (-f) x = -f x :=
rfl
#align zero_at_infty_continuous_map.neg_apply ZeroAtInftyContinuousMap.neg_apply
+-/
instance : Sub C₀(α, β) :=
⟨fun f g => ⟨f - g, by simpa only [sub_zero] using (zero_at_infty f).sub (zero_at_infty g)⟩⟩
+#print ZeroAtInftyContinuousMap.coe_sub /-
@[simp]
theorem coe_sub : ⇑(f - g) = f - g :=
rfl
#align zero_at_infty_continuous_map.coe_sub ZeroAtInftyContinuousMap.coe_sub
+-/
+#print ZeroAtInftyContinuousMap.sub_apply /-
theorem sub_apply : (f - g) x = f x - g x :=
rfl
#align zero_at_infty_continuous_map.sub_apply ZeroAtInftyContinuousMap.sub_apply
+-/
+#print ZeroAtInftyContinuousMap.coe_zsmulRec /-
@[simp]
theorem coe_zsmulRec : ∀ z, ⇑(zsmulRec z f) = z • f
| Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmul_rec, coe_nat_zsmul]
| -[n+1] => by rw [zsmulRec, negSucc_zsmul, coe_neg, coe_nsmul_rec]
#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_zsmulRec
+-/
-instance hasIntScalar : SMul ℤ C₀(α, β) :=
+#print ZeroAtInftyContinuousMap.instIntSMul /-
+instance instIntSMul : SMul ℤ C₀(α, β) :=
⟨fun n f => ⟨n • f, by simpa using zero_at_infty (zsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.hasIntScalar
+#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instIntSMul
+-/
instance : AddGroup C₀(α, β) :=
FunLike.coe_injective.AddGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
@@ -287,16 +335,20 @@ instance [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMu
SMul R C₀(α, β) :=
⟨fun r f => ⟨r • f, by simpa [smul_zero] using (zero_at_infty f).const_smul r⟩⟩
+#print ZeroAtInftyContinuousMap.coe_smul /-
@[simp]
theorem coe_smul [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] (r : R)
(f : C₀(α, β)) : ⇑(r • f) = r • f :=
rfl
#align zero_at_infty_continuous_map.coe_smul ZeroAtInftyContinuousMap.coe_smul
+-/
+#print ZeroAtInftyContinuousMap.smul_apply /-
theorem smul_apply [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β]
(r : R) (f : C₀(α, β)) (x : α) : (r • f) x = r • f x :=
rfl
#align zero_at_infty_continuous_map.smul_apply ZeroAtInftyContinuousMap.smul_apply
+-/
instance [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [SMulWithZero Rᵐᵒᵖ β]
[ContinuousConstSMul R β] [IsCentralScalar R β] : IsCentralScalar R C₀(α, β) :=
@@ -356,9 +408,11 @@ section Uniform
variable [UniformSpace β] [UniformSpace γ] [Zero γ] [ZeroAtInftyContinuousMapClass F β γ]
+#print ZeroAtInftyContinuousMap.uniformContinuous /-
theorem uniformContinuous (f : F) : UniformContinuous (f : β → γ) :=
(map_continuous f).uniformContinuous_of_tendsto_cocompact (zero_at_infty f)
#align zero_at_infty_continuous_map.uniform_continuous ZeroAtInftyContinuousMap.uniformContinuous
+-/
end Uniform
@@ -377,6 +431,7 @@ open Metric Set
variable [MetricSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
+#print ZeroAtInftyContinuousMap.bounded /-
protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x) (f y) ≤ C :=
by
obtain ⟨K : Set α, hK₁, hK₂⟩ :=
@@ -394,32 +449,41 @@ protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x
(dist_triangle (f x) 0 (f y)).trans
(add_le_add (mem_closed_ball.mp <| this x) (mem_closed_ball'.mp <| this y))
#align zero_at_infty_continuous_map.bounded ZeroAtInftyContinuousMap.bounded
+-/
+#print ZeroAtInftyContinuousMap.bounded_range /-
theorem bounded_range (f : C₀(α, β)) : Bounded (range f) :=
bounded_range_iff.2 f.Bounded
#align zero_at_infty_continuous_map.bounded_range ZeroAtInftyContinuousMap.bounded_range
+-/
+#print ZeroAtInftyContinuousMap.bounded_image /-
theorem bounded_image (f : C₀(α, β)) (s : Set α) : Bounded (f '' s) :=
f.bounded_range.mono <| image_subset_range _ _
#align zero_at_infty_continuous_map.bounded_image ZeroAtInftyContinuousMap.bounded_image
+-/
instance (priority := 100) : BoundedContinuousMapClass F α β :=
{ ‹ZeroAtInftyContinuousMapClass F α β› with
map_bounded := fun f => ZeroAtInftyContinuousMap.bounded f }
+#print ZeroAtInftyContinuousMap.toBcf /-
/-- Construct a bounded continuous function from a continuous function vanishing at infinity. -/
@[simps]
def toBcf (f : C₀(α, β)) : α →ᵇ β :=
⟨f, map_bounded f⟩
#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBcf
+-/
section
variable (α) (β)
+#print ZeroAtInftyContinuousMap.toBcf_injective /-
theorem toBcf_injective : Function.Injective (toBcf : C₀(α, β) → α →ᵇ β) := fun f g h => by ext;
simpa only using FunLike.congr_fun h x
#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBcf_injective
+-/
end
@@ -430,13 +494,16 @@ inclusion `zero_at_infinity_continuous_map.to_bcf`, is a metric space. -/
noncomputable instance : MetricSpace C₀(α, β) :=
MetricSpace.induced _ (toBcf_injective α β) (by infer_instance)
+#print ZeroAtInftyContinuousMap.dist_toBcf_eq_dist /-
@[simp]
theorem dist_toBcf_eq_dist {f g : C₀(α, β)} : dist f.toBcf g.toBcf = dist f g :=
rfl
#align zero_at_infty_continuous_map.dist_to_bcf_eq_dist ZeroAtInftyContinuousMap.dist_toBcf_eq_dist
+-/
open BoundedContinuousFunction
+#print ZeroAtInftyContinuousMap.tendsto_iff_tendstoUniformly /-
/-- Convergence in the metric on `C₀(α, β)` is uniform convergence. -/
theorem tendsto_iff_tendstoUniformly {ι : Type _} {F : ι → C₀(α, β)} {f : C₀(α, β)} {l : Filter ι} :
Tendsto F l (𝓝 f) ↔ TendstoUniformly (fun i => F i) f l := by
@@ -444,10 +511,14 @@ theorem tendsto_iff_tendstoUniformly {ι : Type _} {F : ι → C₀(α, β)} {f
@BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBcf)
f.to_bcf l
#align zero_at_infty_continuous_map.tendsto_iff_tendsto_uniformly ZeroAtInftyContinuousMap.tendsto_iff_tendstoUniformly
+-/
+#print ZeroAtInftyContinuousMap.isometry_toBcf /-
theorem isometry_toBcf : Isometry (toBcf : C₀(α, β) → α →ᵇ β) := by tauto
#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBcf
+-/
+#print ZeroAtInftyContinuousMap.closed_range_toBcf /-
theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ β)) :=
by
refine' is_closed_iff_cluster_pt.mpr fun f hf => _
@@ -465,6 +536,7 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
exact ⟨⟨f.to_continuous_map, this⟩, by ext; rfl⟩
#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBcf
+-/
/-- Continuous functions vanishing at infinity taking values in a complete space form a
complete space. -/
@@ -492,10 +564,12 @@ noncomputable instance : NormedAddCommGroup C₀(α, β) :=
NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨toBcf, rfl, fun x y => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
(toBcf_injective α β)
+#print ZeroAtInftyContinuousMap.norm_toBcf_eq_norm /-
@[simp]
theorem norm_toBcf_eq_norm {f : C₀(α, β)} : ‖f.toBcf‖ = ‖f‖ :=
rfl
#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBcf_eq_norm
+-/
instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBcf : _)
@@ -535,14 +609,18 @@ instance : Star C₀(α, β)
zero_at_infty' := by
simpa only [star_zero] using (continuous_star.tendsto (0 : β)).comp (zero_at_infty f) }
+#print ZeroAtInftyContinuousMap.coe_star /-
@[simp]
theorem coe_star (f : C₀(α, β)) : ⇑(star f) = star f :=
rfl
#align zero_at_infty_continuous_map.coe_star ZeroAtInftyContinuousMap.coe_star
+-/
+#print ZeroAtInftyContinuousMap.star_apply /-
theorem star_apply (f : C₀(α, β)) (x : α) : (star f) x = star (f x) :=
rfl
#align zero_at_infty_continuous_map.star_apply ZeroAtInftyContinuousMap.star_apply
+-/
instance [ContinuousAdd β] : StarAddMonoid C₀(α, β)
where
@@ -601,6 +679,7 @@ section
variable [Zero δ]
+#print ZeroAtInftyContinuousMap.comp /-
/-- Composition of a continuous function vanishing at infinity with a cocompact map yields another
continuous function vanishing at infinity. -/
def comp (f : C₀(γ, δ)) (g : β →co γ) : C₀(β, δ)
@@ -608,31 +687,41 @@ def comp (f : C₀(γ, δ)) (g : β →co γ) : C₀(β, δ)
toContinuousMap := (f : C(γ, δ)).comp g
zero_at_infty' := (zero_at_infty f).comp (cocompact_tendsto g)
#align zero_at_infty_continuous_map.comp ZeroAtInftyContinuousMap.comp
+-/
+#print ZeroAtInftyContinuousMap.coe_comp_to_continuous_fun /-
@[simp]
theorem coe_comp_to_continuous_fun (f : C₀(γ, δ)) (g : β →co γ) :
((f.comp g).toContinuousMap : β → δ) = f ∘ g :=
rfl
#align zero_at_infty_continuous_map.coe_comp_to_continuous_fun ZeroAtInftyContinuousMap.coe_comp_to_continuous_fun
+-/
+#print ZeroAtInftyContinuousMap.comp_id /-
@[simp]
theorem comp_id (f : C₀(γ, δ)) : f.comp (CocompactMap.id γ) = f :=
ext fun x => rfl
#align zero_at_infty_continuous_map.comp_id ZeroAtInftyContinuousMap.comp_id
+-/
+#print ZeroAtInftyContinuousMap.comp_assoc /-
@[simp]
theorem comp_assoc (f : C₀(γ, δ)) (g : β →co γ) (h : α →co β) :
(f.comp g).comp h = f.comp (g.comp h) :=
rfl
#align zero_at_infty_continuous_map.comp_assoc ZeroAtInftyContinuousMap.comp_assoc
+-/
+#print ZeroAtInftyContinuousMap.zero_comp /-
@[simp]
theorem zero_comp (g : β →co γ) : (0 : C₀(γ, δ)).comp g = 0 :=
rfl
#align zero_at_infty_continuous_map.zero_comp ZeroAtInftyContinuousMap.zero_comp
+-/
end
+#print ZeroAtInftyContinuousMap.compAddMonoidHom /-
/-- Composition as an additive monoid homomorphism. -/
def compAddMonoidHom [AddMonoid δ] [ContinuousAdd δ] (g : β →co γ) : C₀(γ, δ) →+ C₀(β, δ)
where
@@ -640,14 +729,18 @@ def compAddMonoidHom [AddMonoid δ] [ContinuousAdd δ] (g : β →co γ) : C₀(
map_zero' := zero_comp g
map_add' f₁ f₂ := rfl
#align zero_at_infty_continuous_map.comp_add_monoid_hom ZeroAtInftyContinuousMap.compAddMonoidHom
+-/
+#print ZeroAtInftyContinuousMap.compMulHom /-
/-- Composition as a semigroup homomorphism. -/
def compMulHom [MulZeroClass δ] [ContinuousMul δ] (g : β →co γ) : C₀(γ, δ) →ₙ* C₀(β, δ)
where
toFun f := f.comp g
map_mul' f₁ f₂ := rfl
#align zero_at_infty_continuous_map.comp_mul_hom ZeroAtInftyContinuousMap.compMulHom
+-/
+#print ZeroAtInftyContinuousMap.compLinearMap /-
/-- Composition as a linear map. -/
def compLinearMap [AddCommMonoid δ] [ContinuousAdd δ] {R : Type _} [Semiring R] [Module R δ]
[ContinuousConstSMul R δ] (g : β →co γ) : C₀(γ, δ) →ₗ[R] C₀(β, δ)
@@ -656,7 +749,9 @@ def compLinearMap [AddCommMonoid δ] [ContinuousAdd δ] {R : Type _} [Semiring R
map_add' f₁ f₂ := rfl
map_smul' r f := rfl
#align zero_at_infty_continuous_map.comp_linear_map ZeroAtInftyContinuousMap.compLinearMap
+-/
+#print ZeroAtInftyContinuousMap.compNonUnitalAlgHom /-
/-- Composition as a non-unital algebra homomorphism. -/
def compNonUnitalAlgHom {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring δ]
[TopologicalSemiring δ] [Module R δ] [ContinuousConstSMul R δ] (g : β →co γ) :
@@ -667,6 +762,7 @@ def compNonUnitalAlgHom {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring δ]
map_add' f₁ f₂ := rfl
map_mul' f₁ f₂ := rfl
#align zero_at_infty_continuous_map.comp_non_unital_alg_hom ZeroAtInftyContinuousMap.compNonUnitalAlgHom
+-/
end ZeroAtInftyContinuousMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module topology.continuous_function.zero_at_infty
-! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
+! leanprover-community/mathlib commit 2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Topology.ContinuousFunction.CocompactMap
/-!
# Continuous functions vanishing at infinity
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
The type of continuous functions vanishing at infinity. When the domain is compact
`C(α, β) ≃ C₀(α, β)` via the identity map. When the codomain is a metric space, every continuous
map which vanishes at infinity is a bounded continuous function. When the domain is a locally
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -47,10 +47,8 @@ structure ZeroAtInftyContinuousMap (α : Type u) (β : Type v) [TopologicalSpace
zero_at_infty' : Tendsto to_fun (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map ZeroAtInftyContinuousMap
--- mathport name: zero_at_infty_continuous_map
scoped[ZeroAtInfty] notation (priority := 2000) "C₀(" α ", " β ")" => ZeroAtInftyContinuousMap α β
--- mathport name: zero_at_infty_continuous_map.arrow
scoped[ZeroAtInfty] notation α " →C₀ " β => ZeroAtInftyContinuousMap α β
section
@@ -594,7 +592,6 @@ category of topological spaces with morphisms given by `cocompact_map`s.
variable {δ : Type _} [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
--- mathport name: «expr →co »
local notation α " →co " β => CocompactMap α β
section
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -462,7 +462,6 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
dist (f x) 0 ≤ dist (g.to_bcf x) (f x) + dist (g x) 0 := dist_triangle_left _ _ _
_ < dist g.to_bcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
-
exact ⟨⟨f.to_continuous_map, this⟩, by ext; rfl⟩
#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBcf
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -43,7 +43,7 @@ you should parametrize over `(F : Type*) [zero_at_infty_continuous_map_class F
When you extend this structure, make sure to extend `zero_at_infty_continuous_map_class`. -/
structure ZeroAtInftyContinuousMap (α : Type u) (β : Type v) [TopologicalSpace α] [Zero β]
- [TopologicalSpace β] extends ContinuousMap α β : Type max u v where
+ [TopologicalSpace β] extends ContinuousMap α β : Type max u v where
zero_at_infty' : Tendsto to_fun (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map ZeroAtInftyContinuousMap
@@ -60,7 +60,7 @@ vanish at infinity.
You should also extend this typeclass when you extend `zero_at_infty_continuous_map`. -/
class ZeroAtInftyContinuousMapClass (F : Type _) (α β : outParam <| Type _) [TopologicalSpace α]
- [Zero β] [TopologicalSpace β] extends ContinuousMapClass F α β where
+ [Zero β] [TopologicalSpace β] extends ContinuousMapClass F α β where
zero_at_infty (f : F) : Tendsto f (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map_class ZeroAtInftyContinuousMapClass
@@ -450,7 +450,7 @@ theorem isometry_toBcf : Isometry (toBcf : C₀(α, β) → α →ᵇ β) := by
theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ β)) :=
by
refine' is_closed_iff_cluster_pt.mpr fun f hf => _
- rw [clusterPt_principal_iff] at hf
+ rw [clusterPt_principal_iff] at hf
have : tendsto f (cocompact α) (𝓝 0) :=
by
refine' metric.tendsto_nhds.mpr fun ε hε => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,7 +31,7 @@ universe u v w
variable {F : Type _} {α : Type u} {β : Type v} {γ : Type w} [TopologicalSpace α]
-open BoundedContinuousFunction Topology
+open scoped BoundedContinuousFunction Topology
open Filter Metric
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -77,10 +77,7 @@ variable [TopologicalSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
instance : ZeroAtInftyContinuousMapClass C₀(α, β) α β
where
coe f := f.toFun
- coe_injective' f g h := by
- obtain ⟨⟨_, _⟩, _⟩ := f
- obtain ⟨⟨_, _⟩, _⟩ := g
- congr
+ coe_injective' f g h := by obtain ⟨⟨_, _⟩, _⟩ := f; obtain ⟨⟨_, _⟩, _⟩ := g; congr
map_continuous f := f.continuous_toFun
zero_at_infty f := f.zero_at_infty'
@@ -110,12 +107,8 @@ to fix definitional equalities. -/
protected def copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : C₀(α, β)
where
toFun := f'
- continuous_toFun := by
- rw [h]
- exact f.continuous_to_fun
- zero_at_infty' := by
- simp_rw [h]
- exact f.zero_at_infty'
+ continuous_toFun := by rw [h]; exact f.continuous_to_fun
+ zero_at_infty' := by simp_rw [h]; exact f.zero_at_infty'
#align zero_at_infty_continuous_map.copy ZeroAtInftyContinuousMap.copy
@[simp]
@@ -141,12 +134,8 @@ def ContinuousMap.liftZeroAtInfty [CompactSpace α] : C(α, β) ≃ C₀(α, β)
continuous_toFun := f.Continuous
zero_at_infty' := by simp }
invFun f := f
- left_inv f := by
- ext
- rfl
- right_inv f := by
- ext
- rfl
+ left_inv f := by ext; rfl
+ right_inv f := by ext; rfl
#align zero_at_infty_continuous_map.continuous_map.lift_zero_at_infty ZeroAtInftyContinuousMap.ContinuousMap.liftZeroAtInfty
/-- A continuous function on a compact space is automatically a continuous function vanishing at
@@ -427,9 +416,7 @@ section
variable (α) (β)
-theorem toBcf_injective : Function.Injective (toBcf : C₀(α, β) → α →ᵇ β) := fun f g h =>
- by
- ext
+theorem toBcf_injective : Function.Injective (toBcf : C₀(α, β) → α →ᵇ β) := fun f g h => by ext;
simpa only using FunLike.congr_fun h x
#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBcf_injective
@@ -476,10 +463,7 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
_ < dist g.to_bcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
- exact
- ⟨⟨f.to_continuous_map, this⟩, by
- ext
- rfl⟩
+ exact ⟨⟨f.to_continuous_map, this⟩, by ext; rfl⟩
#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBcf
/-- Continuous functions vanishing at infinity taking values in a complete space form a
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module topology.continuous_function.zero_at_infty
-! leanprover-community/mathlib commit d3af0609f6db8691dffdc3e1fb7feb7da72698f2
+! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -513,7 +513,7 @@ theorem norm_toBcf_eq_norm {f : C₀(α, β)} : ‖f.toBcf‖ = ‖f‖ :=
rfl
#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBcf_eq_norm
-instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := norm_smul_le k f.toBcf
+instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBcf : _)
end NormedSpace
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
! This file was ported from Lean 3 source module topology.continuous_function.zero_at_infty
-! leanprover-community/mathlib commit 735b22f8f9ff9792cf4212d7cb051c4c994bc685
+! leanprover-community/mathlib commit d3af0609f6db8691dffdc3e1fb7feb7da72698f2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -513,7 +513,7 @@ theorem norm_toBcf_eq_norm {f : C₀(α, β)} : ‖f.toBcf‖ = ‖f‖ :=
rfl
#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBcf_eq_norm
-instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul k f.toBcf).le
+instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := norm_smul_le k f.toBcf
end NormedSpace
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -191,7 +191,8 @@ theorem zero_apply [Zero β] : (0 : C₀(α, β)) x = 0 :=
#align zero_at_infty_continuous_map.zero_apply ZeroAtInftyContinuousMap.zero_apply
instance [MulZeroClass β] [ContinuousMul β] : Mul C₀(α, β) :=
- ⟨fun f g => ⟨f * g, by simpa only [mul_zero] using (zero_at_infty f).mul (zero_at_infty g)⟩⟩
+ ⟨fun f g =>
+ ⟨f * g, by simpa only [MulZeroClass.mul_zero] using (zero_at_infty f).mul (zero_at_infty g)⟩⟩
@[simp]
theorem coe_mul [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : ⇑(f * g) = f * g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -472,7 +472,7 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
(eventually_of_forall fun x hx => _)
calc
dist (f x) 0 ≤ dist (g.to_bcf x) (f x) + dist (g x) 0 := dist_triangle_left _ _ _
- _ < dist g.to_bcf f + ε / 2 := add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx
+ _ < dist g.to_bcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right hg (ε / 2)
exact
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -456,7 +456,7 @@ theorem isClosed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →
(eventually_of_forall fun x hx => _)
calc
dist (f x) 0 ≤ dist (g.toBCF x) (f x) + dist (g x) 0 := dist_triangle_left _ _ _
- _ < dist g.toBCF f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
+ _ < dist g.toBCF f + ε / 2 := add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx
_ < ε := by simpa [add_halves ε] using add_lt_add_right (mem_ball.1 hg) (ε / 2)
exact ⟨⟨f.toContinuousMap, this⟩, rfl⟩
#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.isClosed_range_toBCF
@@ -216,20 +216,30 @@ theorem add_apply [AddZeroClass β] [ContinuousAdd β] (f g : C₀(α, β)) : (f
instance instAddZeroClass [AddZeroClass β] [ContinuousAdd β] : AddZeroClass C₀(α, β) :=
DFunLike.coe_injective.addZeroClass _ coe_zero coe_add
-section AddMonoid
+instance instSMul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
+ SMul R C₀(α, β) :=
+ -- Porting note: Original version didn't have `Continuous.const_smul f.continuous r`
+ ⟨fun r f => ⟨⟨r • ⇑f, Continuous.const_smul f.continuous r⟩,
+ by simpa [smul_zero] using (zero_at_infty f).const_smul r⟩⟩
+#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instSMul
+#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instSMul
-variable [AddMonoid β] [ContinuousAdd β] (f g : C₀(α, β))
+@[simp, norm_cast]
+theorem coe_smul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] (r : R)
+ (f : C₀(α, β)) : ⇑(r • f) = r • ⇑f :=
+ rfl
+#align zero_at_infty_continuous_map.coe_smul ZeroAtInftyContinuousMap.coe_smul
+#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_smul
+#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_smul
-@[simp]
-theorem coe_nsmulRec : ∀ n, ⇑(nsmulRec n f) = n • ⇑f
- | 0 => by rw [nsmulRec, zero_smul, coe_zero]
- | n + 1 => by rw [nsmulRec, succ_nsmul, coe_add, coe_nsmulRec n]
-#align zero_at_infty_continuous_map.coe_nsmul_rec ZeroAtInftyContinuousMap.coe_nsmulRec
+theorem smul_apply [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β]
+ (r : R) (f : C₀(α, β)) (x : α) : (r • f) x = r • f x :=
+ rfl
+#align zero_at_infty_continuous_map.smul_apply ZeroAtInftyContinuousMap.smul_apply
-instance instNatSMul : SMul ℕ C₀(α, β) :=
- ⟨fun n f => ⟨n • (f : C(α, β)),
- by simpa [coe_nsmulRec] using zero_at_infty (nsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instNatSMul
+section AddMonoid
+
+variable [AddMonoid β] [ContinuousAdd β] (f g : C₀(α, β))
instance instAddMonoid : AddMonoid C₀(α, β) :=
DFunLike.coe_injective.addMonoid _ coe_zero coe_add fun _ _ => rfl
@@ -267,18 +277,6 @@ theorem sub_apply : (f - g) x = f x - g x :=
rfl
#align zero_at_infty_continuous_map.sub_apply ZeroAtInftyContinuousMap.sub_apply
-@[simp]
-theorem coe_zsmulRec : ∀ z, ⇑(zsmulRec z f) = z • ⇑f
- | Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmulRec, natCast_zsmul]
- | Int.negSucc n => by rw [zsmulRec, negSucc_zsmul, coe_neg, coe_nsmulRec]
-#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_zsmulRec
-
-instance instIntSMul : SMul ℤ C₀(α, β) :=
- -- Porting note: Original version didn't have `Continuous.const_smul f.continuous n`
- ⟨fun n f => ⟨⟨n • ⇑f, Continuous.const_smul f.continuous n⟩,
- by simpa using zero_at_infty (zsmulRec n f)⟩⟩
-#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instIntSMul
-
instance instAddGroup : AddGroup C₀(α, β) :=
DFunLike.coe_injective.addGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
@@ -288,23 +286,6 @@ instance instAddCommGroup [AddCommGroup β] [TopologicalAddGroup β] : AddCommGr
DFunLike.coe_injective.addCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
rfl
-instance instSMul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
- SMul R C₀(α, β) :=
- -- Porting note: Original version didn't have `Continuous.const_smul f.continuous r`
- ⟨fun r f => ⟨⟨r • ⇑f, Continuous.const_smul f.continuous r⟩,
- by simpa [smul_zero] using (zero_at_infty f).const_smul r⟩⟩
-
-@[simp]
-theorem coe_smul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] (r : R)
- (f : C₀(α, β)) : ⇑(r • f) = r • ⇑f :=
- rfl
-#align zero_at_infty_continuous_map.coe_smul ZeroAtInftyContinuousMap.coe_smul
-
-theorem smul_apply [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β]
- (r : R) (f : C₀(α, β)) (x : α) : (r • f) x = r • f x :=
- rfl
-#align zero_at_infty_continuous_map.smul_apply ZeroAtInftyContinuousMap.smul_apply
-
instance instIsCentralScalar [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [SMulWithZero Rᵐᵒᵖ β]
[ContinuousConstSMul R β] [IsCentralScalar R β] : IsCentralScalar R C₀(α, β) :=
⟨fun _ _ => ext fun _ => op_smul_eq_smul _ _⟩
zpow_coe_nat
to zpow_natCast
(#11528)
... and add a deprecated alias for the old name. This is mostly just me discovering the power of F2
@@ -269,7 +269,7 @@ theorem sub_apply : (f - g) x = f x - g x :=
@[simp]
theorem coe_zsmulRec : ∀ z, ⇑(zsmulRec z f) = z • ⇑f
- | Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmulRec, coe_nat_zsmul]
+ | Int.ofNat n => by rw [zsmulRec, Int.ofNat_eq_coe, coe_nsmulRec, natCast_zsmul]
| Int.negSucc n => by rw [zsmulRec, negSucc_zsmul, coe_neg, coe_nsmulRec]
#align zero_at_infty_continuous_map.coe_zsmul_rec ZeroAtInftyContinuousMap.coe_zsmulRec
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -465,7 +465,7 @@ theorem tendsto_iff_tendstoUniformly {ι : Type*} {F : ι → C₀(α, β)} {f :
theorem isometry_toBCF : Isometry (toBCF : C₀(α, β) → α →ᵇ β) := by tauto
#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBCF
-theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) := by
+theorem isClosed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) := by
refine' isClosed_iff_clusterPt.mpr fun f hf => _
rw [clusterPt_principal_iff] at hf
have : Tendsto f (cocompact α) (𝓝 0) := by
@@ -478,13 +478,15 @@ theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ
_ < dist g.toBCF f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right (mem_ball.1 hg) (ε / 2)
exact ⟨⟨f.toContinuousMap, this⟩, rfl⟩
-#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBCF
+#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.isClosed_range_toBCF
+
+@[deprecated] alias closed_range_toBCF := isClosed_range_toBCF -- 2024-03-17
/-- Continuous functions vanishing at infinity taking values in a complete space form a
complete space. -/
instance instCompleteSpace [CompleteSpace β] : CompleteSpace C₀(α, β) :=
(completeSpace_iff_isComplete_range isometry_toBCF.uniformInducing).mpr
- closed_range_toBCF.isComplete
+ isClosed_range_toBCF.isComplete
end Metric
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -60,7 +60,7 @@ vanish at infinity.
You should also extend this typeclass when you extend `ZeroAtInftyContinuousMap`. -/
class ZeroAtInftyContinuousMapClass (F : Type*) (α β : outParam <| Type*) [TopologicalSpace α]
- [Zero β] [TopologicalSpace β] extends ContinuousMapClass F α β where
+ [Zero β] [TopologicalSpace β] [FunLike F α β] extends ContinuousMapClass F α β : Prop where
/-- Each member of the class tends to zero along the `cocompact` filter. -/
zero_at_infty (f : F) : Tendsto f (cocompact α) (𝓝 0)
#align zero_at_infty_continuous_map_class ZeroAtInftyContinuousMapClass
@@ -73,22 +73,19 @@ namespace ZeroAtInftyContinuousMap
section Basics
-variable [TopologicalSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
+variable [TopologicalSpace β] [Zero β] [FunLike F α β] [ZeroAtInftyContinuousMapClass F α β]
-instance instZeroAtInftyContinuousMapClass : ZeroAtInftyContinuousMapClass C₀(α, β) α β where
+instance instFunLike : FunLike C₀(α, β) α β where
coe f := f.toFun
coe_injective' f g h := by
obtain ⟨⟨_, _⟩, _⟩ := f
obtain ⟨⟨_, _⟩, _⟩ := g
congr
+
+instance instZeroAtInftyContinuousMapClass : ZeroAtInftyContinuousMapClass C₀(α, β) α β where
map_continuous f := f.continuous_toFun
zero_at_infty f := f.zero_at_infty'
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
-directly. -/
-instance instCoeFun : CoeFun C₀(α, β) fun _ => α → β :=
- DFunLike.hasCoeToFun
-
instance instCoeTC : CoeTC F C₀(α, β) :=
⟨fun f =>
{ toFun := f
@@ -149,10 +146,8 @@ def ContinuousMap.liftZeroAtInfty [CompactSpace α] : C(α, β) ≃ C₀(α, β)
/-- A continuous function on a compact space is automatically a continuous function vanishing at
infinity. This is not an instance to avoid type class loops. -/
-def zeroAtInftyContinuousMapClass.ofCompact {G : Type*} [ContinuousMapClass G α β]
- [CompactSpace α] : ZeroAtInftyContinuousMapClass G α β where
- coe g := g
- coe_injective' f g h := DFunLike.coe_fn_eq.mp h
+lemma zeroAtInftyContinuousMapClass.ofCompact {G : Type*} [FunLike G α β]
+ [ContinuousMapClass G α β] [CompactSpace α] : ZeroAtInftyContinuousMapClass G α β where
map_continuous := map_continuous
zero_at_infty := by simp
#align zero_at_infty_continuous_map.zero_at_infty_continuous_map_class.of_compact ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact
@@ -372,7 +367,8 @@ end AlgebraicStructure
section Uniform
-variable [UniformSpace β] [UniformSpace γ] [Zero γ] [ZeroAtInftyContinuousMapClass F β γ]
+variable [UniformSpace β] [UniformSpace γ] [Zero γ]
+variable [FunLike F β γ] [ZeroAtInftyContinuousMapClass F β γ]
theorem uniformContinuous (f : F) : UniformContinuous (f : β → γ) :=
(map_continuous f).uniformContinuous_of_tendsto_cocompact (zero_at_infty f)
@@ -393,7 +389,7 @@ section Metric
open Metric Set
-variable [PseudoMetricSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
+variable [PseudoMetricSpace β] [Zero β] [FunLike F α β] [ZeroAtInftyContinuousMapClass F α β]
protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x) (f y) ≤ C := by
obtain ⟨K : Set α, hK₁, hK₂⟩ := mem_cocompact.mp
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -84,10 +84,10 @@ instance instZeroAtInftyContinuousMapClass : ZeroAtInftyContinuousMapClass C₀(
map_continuous f := f.continuous_toFun
zero_at_infty f := f.zero_at_infty'
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
directly. -/
instance instCoeFun : CoeFun C₀(α, β) fun _ => α → β :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
instance instCoeTC : CoeTC F C₀(α, β) :=
⟨fun f =>
@@ -102,7 +102,7 @@ theorem coe_toContinuousMap (f : C₀(α, β)) : (f.toContinuousMap : α → β)
@[ext]
theorem ext {f g : C₀(α, β)} (h : ∀ x, f x = g x) : f = g :=
- FunLike.ext _ _ h
+ DFunLike.ext _ _ h
#align zero_at_infty_continuous_map.ext ZeroAtInftyContinuousMap.ext
/-- Copy of a `ZeroAtInftyContinuousMap` with a new `toFun` equal to the old one. Useful
@@ -123,7 +123,7 @@ theorem coe_copy (f : C₀(α, β)) (f' : α → β) (h : f' = f) : ⇑(f.copy f
#align zero_at_infty_continuous_map.coe_copy ZeroAtInftyContinuousMap.coe_copy
theorem copy_eq (f : C₀(α, β)) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
- FunLike.ext' h
+ DFunLike.ext' h
#align zero_at_infty_continuous_map.copy_eq ZeroAtInftyContinuousMap.copy_eq
theorem eq_of_empty [IsEmpty α] (f g : C₀(α, β)) : f = g :=
@@ -152,7 +152,7 @@ infinity. This is not an instance to avoid type class loops. -/
def zeroAtInftyContinuousMapClass.ofCompact {G : Type*} [ContinuousMapClass G α β]
[CompactSpace α] : ZeroAtInftyContinuousMapClass G α β where
coe g := g
- coe_injective' f g h := FunLike.coe_fn_eq.mp h
+ coe_injective' f g h := DFunLike.coe_fn_eq.mp h
map_continuous := map_continuous
zero_at_infty := by simp
#align zero_at_infty_continuous_map.zero_at_infty_continuous_map_class.of_compact ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact
@@ -200,11 +200,11 @@ theorem mul_apply [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : (f
#align zero_at_infty_continuous_map.mul_apply ZeroAtInftyContinuousMap.mul_apply
instance instMulZeroClass [MulZeroClass β] [ContinuousMul β] : MulZeroClass C₀(α, β) :=
- FunLike.coe_injective.mulZeroClass _ coe_zero coe_mul
+ DFunLike.coe_injective.mulZeroClass _ coe_zero coe_mul
instance instSemigroupWithZero [SemigroupWithZero β] [ContinuousMul β] :
SemigroupWithZero C₀(α, β) :=
- FunLike.coe_injective.semigroupWithZero _ coe_zero coe_mul
+ DFunLike.coe_injective.semigroupWithZero _ coe_zero coe_mul
instance instAdd [AddZeroClass β] [ContinuousAdd β] : Add C₀(α, β) :=
⟨fun f g => ⟨f + g, by simpa only [add_zero] using (zero_at_infty f).add (zero_at_infty g)⟩⟩
@@ -219,7 +219,7 @@ theorem add_apply [AddZeroClass β] [ContinuousAdd β] (f g : C₀(α, β)) : (f
#align zero_at_infty_continuous_map.add_apply ZeroAtInftyContinuousMap.add_apply
instance instAddZeroClass [AddZeroClass β] [ContinuousAdd β] : AddZeroClass C₀(α, β) :=
- FunLike.coe_injective.addZeroClass _ coe_zero coe_add
+ DFunLike.coe_injective.addZeroClass _ coe_zero coe_add
section AddMonoid
@@ -237,12 +237,12 @@ instance instNatSMul : SMul ℕ C₀(α, β) :=
#align zero_at_infty_continuous_map.has_nat_scalar ZeroAtInftyContinuousMap.instNatSMul
instance instAddMonoid : AddMonoid C₀(α, β) :=
- FunLike.coe_injective.addMonoid _ coe_zero coe_add fun _ _ => rfl
+ DFunLike.coe_injective.addMonoid _ coe_zero coe_add fun _ _ => rfl
end AddMonoid
instance instAddCommMonoid [AddCommMonoid β] [ContinuousAdd β] : AddCommMonoid C₀(α, β) :=
- FunLike.coe_injective.addCommMonoid _ coe_zero coe_add fun _ _ => rfl
+ DFunLike.coe_injective.addCommMonoid _ coe_zero coe_add fun _ _ => rfl
section AddGroup
@@ -285,12 +285,12 @@ instance instIntSMul : SMul ℤ C₀(α, β) :=
#align zero_at_infty_continuous_map.has_int_scalar ZeroAtInftyContinuousMap.instIntSMul
instance instAddGroup : AddGroup C₀(α, β) :=
- FunLike.coe_injective.addGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
+ DFunLike.coe_injective.addGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ => rfl
end AddGroup
instance instAddCommGroup [AddCommGroup β] [TopologicalAddGroup β] : AddCommGroup C₀(α, β) :=
- FunLike.coe_injective.addCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
+ DFunLike.coe_injective.addCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
rfl
instance instSMul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
@@ -316,40 +316,40 @@ instance instIsCentralScalar [Zero β] {R : Type*} [Zero R] [SMulWithZero R β]
instance instSMulWithZero [Zero β] {R : Type*} [Zero R] [SMulWithZero R β]
[ContinuousConstSMul R β] : SMulWithZero R C₀(α, β) :=
- Function.Injective.smulWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
+ Function.Injective.smulWithZero ⟨_, coe_zero⟩ DFunLike.coe_injective coe_smul
instance instMulActionWithZero [Zero β] {R : Type*} [MonoidWithZero R] [MulActionWithZero R β]
[ContinuousConstSMul R β] : MulActionWithZero R C₀(α, β) :=
- Function.Injective.mulActionWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
+ Function.Injective.mulActionWithZero ⟨_, coe_zero⟩ DFunLike.coe_injective coe_smul
instance instModule [AddCommMonoid β] [ContinuousAdd β] {R : Type*} [Semiring R] [Module R β]
[ContinuousConstSMul R β] : Module R C₀(α, β) :=
- Function.Injective.module R ⟨⟨_, coe_zero⟩, coe_add⟩ FunLike.coe_injective coe_smul
+ Function.Injective.module R ⟨⟨_, coe_zero⟩, coe_add⟩ DFunLike.coe_injective coe_smul
instance instNonUnitalNonAssocSemiring [NonUnitalNonAssocSemiring β] [TopologicalSemiring β] :
NonUnitalNonAssocSemiring C₀(α, β) :=
- FunLike.coe_injective.nonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.nonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance instNonUnitalSemiring [NonUnitalSemiring β] [TopologicalSemiring β] :
NonUnitalSemiring C₀(α, β) :=
- FunLike.coe_injective.nonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.nonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance instNonUnitalCommSemiring [NonUnitalCommSemiring β] [TopologicalSemiring β] :
NonUnitalCommSemiring C₀(α, β) :=
- FunLike.coe_injective.nonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
+ DFunLike.coe_injective.nonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ => rfl
instance instNonUnitalNonAssocRing [NonUnitalNonAssocRing β] [TopologicalRing β] :
NonUnitalNonAssocRing C₀(α, β) :=
- FunLike.coe_injective.nonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+ DFunLike.coe_injective.nonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
(fun _ _ => rfl) fun _ _ => rfl
instance instNonUnitalRing [NonUnitalRing β] [TopologicalRing β] : NonUnitalRing C₀(α, β) :=
- FunLike.coe_injective.nonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ => rfl)
+ DFunLike.coe_injective.nonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ => rfl)
fun _ _ => rfl
instance instNonUnitalCommRing [NonUnitalCommRing β] [TopologicalRing β] :
NonUnitalCommRing C₀(α, β) :=
- FunLike.coe_injective.nonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+ DFunLike.coe_injective.nonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
(fun _ _ => rfl) fun _ _ => rfl
instance instIsScalarTower {R : Type*} [Semiring R] [NonUnitalNonAssocSemiring β]
@@ -433,7 +433,7 @@ variable (α) (β)
theorem toBCF_injective : Function.Injective (toBCF : C₀(α, β) → α →ᵇ β) := fun f g h => by
ext x
- simpa only using FunLike.congr_fun h x
+ simpa only using DFunLike.congr_fun h x
#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBCF_injective
end
NonUnital(Semi)NormedCommRing
(#8665)
adds instances for the new NonUnital(Semi)NormedCommRing
classes, and also adds some missing instances to Analysis.Normed.Field.Basic
.
This gives us our first example of an actually non-unital commutative C⋆-algebra: C₀(X, ℂ)
where X
is a locally compact, noncompact Hausdorff space.
@@ -393,7 +393,7 @@ section Metric
open Metric Set
-variable [MetricSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
+variable [PseudoMetricSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x) (f y) ≤ C := by
obtain ⟨K : Set α, hK₁, hK₂⟩ := mem_cocompact.mp
@@ -440,9 +440,15 @@ end
variable {C : ℝ} {f g : C₀(α, β)}
+/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
+inclusion `ZeroAtInftyContinuousMap.toBCF`, is a pseudo-metric space. -/
+noncomputable instance instPseudoMetricSpace : PseudoMetricSpace C₀(α, β) :=
+ PseudoMetricSpace.induced toBCF inferInstance
+
/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
inclusion `ZeroAtInftyContinuousMap.toBCF`, is a metric space. -/
-noncomputable instance instMetricSpace : MetricSpace C₀(α, β) :=
+noncomputable instance instMetricSpace {β : Type*} [MetricSpace β] [Zero β] :
+ MetricSpace C₀(α, β) :=
MetricSpace.induced _ (toBCF_injective α β) inferInstance
@[simp]
@@ -498,12 +504,17 @@ field `𝕜` whenever `β` is as well.
section NormedSpace
-variable [NormedAddCommGroup β] {𝕜 : Type*} [NormedField 𝕜] [NormedSpace 𝕜 β]
+noncomputable instance instSeminormedAddCommGroup [SeminormedAddCommGroup β] :
+ SeminormedAddCommGroup C₀(α, β) :=
+ SeminormedAddCommGroup.induced _ _ (⟨⟨toBCF, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
-noncomputable instance instNormedAddCommGroup : NormedAddCommGroup C₀(α, β) :=
- NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨⟨toBCF, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
+noncomputable instance instNormedAddCommGroup [NormedAddCommGroup β] :
+ NormedAddCommGroup C₀(α, β) :=
+ NormedAddCommGroup.induced _ _ (⟨⟨toBCF, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
(toBCF_injective α β)
+variable [SeminormedAddCommGroup β] {𝕜 : Type*} [NormedField 𝕜] [NormedSpace 𝕜 β]
+
@[simp]
theorem norm_toBCF_eq_norm {f : C₀(α, β)} : ‖f.toBCF‖ = ‖f‖ :=
rfl
@@ -515,12 +526,24 @@ end NormedSpace
section NormedRing
-variable [NonUnitalNormedRing β]
+noncomputable instance instNonUnitalSeminormedRing [NonUnitalSeminormedRing β] :
+ NonUnitalSeminormedRing C₀(α, β) :=
+ { instNonUnitalRing, instSeminormedAddCommGroup with
+ norm_mul := fun f g => norm_mul_le f.toBCF g.toBCF }
-noncomputable instance instNonUnitalNormedRing : NonUnitalNormedRing C₀(α, β) :=
- { ZeroAtInftyContinuousMap.instNonUnitalRing, ZeroAtInftyContinuousMap.instNormedAddCommGroup with
+noncomputable instance instNonUnitalNormedRing [NonUnitalNormedRing β] :
+ NonUnitalNormedRing C₀(α, β) :=
+ { instNonUnitalRing, instNormedAddCommGroup with
norm_mul := fun f g => norm_mul_le f.toBCF g.toBCF }
+noncomputable instance instNonUnitalSeminormedCommRing [NonUnitalSeminormedCommRing β] :
+ NonUnitalSeminormedCommRing C₀(α, β) :=
+ { instNonUnitalSeminormedRing, instNonUnitalCommRing with }
+
+noncomputable instance instNonUnitalNormedCommRing [NonUnitalNormedCommRing β] :
+ NonUnitalNormedCommRing C₀(α, β) :=
+ { instNonUnitalNormedRing, instNonUnitalCommRing with }
+
end NormedRing
end Norm
@@ -383,7 +383,7 @@ end Uniform
/-! ### Metric structure
When `β` is a metric space, then every element of `C₀(α, β)` is bounded, and so there is a natural
-inclusion map `ZeroAtInftyContinuousMap.toBcf : C₀(α, β) → (α →ᵇ β)`. Via this map `C₀(α, β)`
+inclusion map `ZeroAtInftyContinuousMap.toBCF : C₀(α, β) → (α →ᵇ β)`. Via this map `C₀(α, β)`
inherits a metric as the pullback of the metric on `α →ᵇ β`. Moreover, this map has closed range
in `α →ᵇ β` and consequently `C₀(α, β)` is a complete space whenever `β` is complete.
-/
@@ -423,32 +423,32 @@ instance (priority := 100) instBoundedContinuousMapClass : BoundedContinuousMapC
/-- Construct a bounded continuous function from a continuous function vanishing at infinity. -/
@[simps!]
-def toBcf (f : C₀(α, β)) : α →ᵇ β :=
+def toBCF (f : C₀(α, β)) : α →ᵇ β :=
⟨f, map_bounded f⟩
-#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBcf
+#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBCF
section
variable (α) (β)
-theorem toBcf_injective : Function.Injective (toBcf : C₀(α, β) → α →ᵇ β) := fun f g h => by
+theorem toBCF_injective : Function.Injective (toBCF : C₀(α, β) → α →ᵇ β) := fun f g h => by
ext x
simpa only using FunLike.congr_fun h x
-#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBcf_injective
+#align zero_at_infty_continuous_map.to_bcf_injective ZeroAtInftyContinuousMap.toBCF_injective
end
variable {C : ℝ} {f g : C₀(α, β)}
/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
-inclusion `ZeroAtInftyContinuousMap.toBcf`, is a metric space. -/
+inclusion `ZeroAtInftyContinuousMap.toBCF`, is a metric space. -/
noncomputable instance instMetricSpace : MetricSpace C₀(α, β) :=
- MetricSpace.induced _ (toBcf_injective α β) inferInstance
+ MetricSpace.induced _ (toBCF_injective α β) inferInstance
@[simp]
-theorem dist_toBcf_eq_dist {f g : C₀(α, β)} : dist f.toBcf g.toBcf = dist f g :=
+theorem dist_toBCF_eq_dist {f g : C₀(α, β)} : dist f.toBCF g.toBCF = dist f g :=
rfl
-#align zero_at_infty_continuous_map.dist_to_bcf_eq_dist ZeroAtInftyContinuousMap.dist_toBcf_eq_dist
+#align zero_at_infty_continuous_map.dist_to_bcf_eq_dist ZeroAtInftyContinuousMap.dist_toBCF_eq_dist
open BoundedContinuousFunction
@@ -456,14 +456,14 @@ open BoundedContinuousFunction
theorem tendsto_iff_tendstoUniformly {ι : Type*} {F : ι → C₀(α, β)} {f : C₀(α, β)} {l : Filter ι} :
Tendsto F l (𝓝 f) ↔ TendstoUniformly (fun i => F i) f l := by
simpa only [Metric.tendsto_nhds] using
- @BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBcf)
- f.toBcf l
+ @BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBCF)
+ f.toBCF l
#align zero_at_infty_continuous_map.tendsto_iff_tendsto_uniformly ZeroAtInftyContinuousMap.tendsto_iff_tendstoUniformly
-theorem isometry_toBcf : Isometry (toBcf : C₀(α, β) → α →ᵇ β) := by tauto
-#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBcf
+theorem isometry_toBCF : Isometry (toBCF : C₀(α, β) → α →ᵇ β) := by tauto
+#align zero_at_infty_continuous_map.isometry_to_bcf ZeroAtInftyContinuousMap.isometry_toBCF
-theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ β)) := by
+theorem closed_range_toBCF : IsClosed (range (toBCF : C₀(α, β) → α →ᵇ β)) := by
refine' isClosed_iff_clusterPt.mpr fun f hf => _
rw [clusterPt_principal_iff] at hf
have : Tendsto f (cocompact α) (𝓝 0) := by
@@ -472,17 +472,17 @@ theorem closed_range_toBcf : IsClosed (range (toBcf : C₀(α, β) → α →ᵇ
refine' (Metric.tendsto_nhds.mp (zero_at_infty g) (ε / 2) (half_pos hε)).mp
(eventually_of_forall fun x hx => _)
calc
- dist (f x) 0 ≤ dist (g.toBcf x) (f x) + dist (g x) 0 := dist_triangle_left _ _ _
- _ < dist g.toBcf f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
+ dist (f x) 0 ≤ dist (g.toBCF x) (f x) + dist (g x) 0 := dist_triangle_left _ _ _
+ _ < dist g.toBCF f + ε / 2 := (add_lt_add_of_le_of_lt (dist_coe_le_dist x) hx)
_ < ε := by simpa [add_halves ε] using add_lt_add_right (mem_ball.1 hg) (ε / 2)
exact ⟨⟨f.toContinuousMap, this⟩, rfl⟩
-#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBcf
+#align zero_at_infty_continuous_map.closed_range_to_bcf ZeroAtInftyContinuousMap.closed_range_toBCF
/-- Continuous functions vanishing at infinity taking values in a complete space form a
complete space. -/
instance instCompleteSpace [CompleteSpace β] : CompleteSpace C₀(α, β) :=
- (completeSpace_iff_isComplete_range isometry_toBcf.uniformInducing).mpr
- closed_range_toBcf.isComplete
+ (completeSpace_iff_isComplete_range isometry_toBCF.uniformInducing).mpr
+ closed_range_toBCF.isComplete
end Metric
@@ -490,7 +490,7 @@ section Norm
/-! ### Normed space
-The norm structure on `C₀(α, β)` is the one induced by the inclusion `toBcf : C₀(α, β) → (α →ᵇ b)`,
+The norm structure on `C₀(α, β)` is the one induced by the inclusion `toBCF : C₀(α, β) → (α →ᵇ b)`,
viewed as an additive monoid homomorphism. Then `C₀(α, β)` is naturally a normed space over a normed
field `𝕜` whenever `β` is as well.
-/
@@ -501,15 +501,15 @@ section NormedSpace
variable [NormedAddCommGroup β] {𝕜 : Type*} [NormedField 𝕜] [NormedSpace 𝕜 β]
noncomputable instance instNormedAddCommGroup : NormedAddCommGroup C₀(α, β) :=
- NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨⟨toBcf, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
- (toBcf_injective α β)
+ NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨⟨toBCF, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
+ (toBCF_injective α β)
@[simp]
-theorem norm_toBcf_eq_norm {f : C₀(α, β)} : ‖f.toBcf‖ = ‖f‖ :=
+theorem norm_toBCF_eq_norm {f : C₀(α, β)} : ‖f.toBCF‖ = ‖f‖ :=
rfl
-#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBcf_eq_norm
+#align zero_at_infty_continuous_map.norm_to_bcf_eq_norm ZeroAtInftyContinuousMap.norm_toBCF_eq_norm
-instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBcf : _)
+instance : NormedSpace 𝕜 C₀(α, β) where norm_smul_le k f := (norm_smul_le k f.toBCF : _)
end NormedSpace
@@ -519,7 +519,7 @@ variable [NonUnitalNormedRing β]
noncomputable instance instNonUnitalNormedRing : NonUnitalNormedRing C₀(α, β) :=
{ ZeroAtInftyContinuousMap.instNonUnitalRing, ZeroAtInftyContinuousMap.instNormedAddCommGroup with
- norm_mul := fun f g => norm_mul_le f.toBcf g.toBcf }
+ norm_mul := fun f g => norm_mul_le f.toBCF g.toBCF }
end NormedRing
@@ -567,7 +567,7 @@ section NormedStar
variable [NormedAddCommGroup β] [StarAddMonoid β] [NormedStarGroup β]
instance instNormedStarGroup : NormedStarGroup C₀(α, β) where
- norm_star f := (norm_star f.toBcf : _)
+ norm_star f := (norm_star f.toBCF : _)
end NormedStar
@@ -595,7 +595,7 @@ end StarRing
section CstarRing
instance instCstarRing [NonUnitalNormedRing β] [StarRing β] [CstarRing β] : CstarRing C₀(α, β) where
- norm_star_mul_self {f} := CstarRing.norm_star_mul_self (x := f.toBcf)
+ norm_star_mul_self {f} := CstarRing.norm_star_mul_self (x := f.toBCF)
end CstarRing
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -28,7 +28,7 @@ universe u v w
variable {F : Type*} {α : Type u} {β : Type v} {γ : Type w} [TopologicalSpace α]
-open BoundedContinuousFunction Topology
+open BoundedContinuousFunction Topology Bornology
open Filter Metric
@@ -398,7 +398,7 @@ variable [MetricSpace β] [Zero β] [ZeroAtInftyContinuousMapClass F α β]
protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x) (f y) ≤ C := by
obtain ⟨K : Set α, hK₁, hK₂⟩ := mem_cocompact.mp
(tendsto_def.mp (zero_at_infty (f : F)) _ (closedBall_mem_nhds (0 : β) zero_lt_one))
- obtain ⟨C, hC⟩ := (hK₁.image (map_continuous f)).bounded.subset_ball (0 : β)
+ obtain ⟨C, hC⟩ := (hK₁.image (map_continuous f)).isBounded.subset_closedBall (0 : β)
refine' ⟨max C 1 + max C 1, fun x y => _⟩
have : ∀ x, f x ∈ closedBall (0 : β) (max C 1) := by
intro x
@@ -409,13 +409,13 @@ protected theorem bounded (f : F) : ∃ C, ∀ x y : α, dist ((f : α → β) x
(add_le_add (mem_closedBall.mp <| this x) (mem_closedBall'.mp <| this y))
#align zero_at_infty_continuous_map.bounded ZeroAtInftyContinuousMap.bounded
-theorem bounded_range (f : C₀(α, β)) : Bounded (range f) :=
- bounded_range_iff.2 (ZeroAtInftyContinuousMap.bounded f)
-#align zero_at_infty_continuous_map.bounded_range ZeroAtInftyContinuousMap.bounded_range
+theorem isBounded_range (f : C₀(α, β)) : IsBounded (range f) :=
+ isBounded_range_iff.2 (ZeroAtInftyContinuousMap.bounded f)
+#align zero_at_infty_continuous_map.bounded_range ZeroAtInftyContinuousMap.isBounded_range
-theorem bounded_image (f : C₀(α, β)) (s : Set α) : Bounded (f '' s) :=
- f.bounded_range.mono <| image_subset_range _ _
-#align zero_at_infty_continuous_map.bounded_image ZeroAtInftyContinuousMap.bounded_image
+theorem isBounded_image (f : C₀(α, β)) (s : Set α) : IsBounded (f '' s) :=
+ f.isBounded_range.subset <| image_subset_range _ _
+#align zero_at_infty_continuous_map.bounded_image ZeroAtInftyContinuousMap.isBounded_image
instance (priority := 100) instBoundedContinuousMapClass : BoundedContinuousMapClass F α β :=
{ ‹ZeroAtInftyContinuousMapClass F α β› with
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -188,7 +188,7 @@ theorem zero_apply [Zero β] : (0 : C₀(α, β)) x = 0 :=
instance instMul [MulZeroClass β] [ContinuousMul β] : Mul C₀(α, β) :=
⟨fun f g =>
- ⟨f * g, by simpa only [MulZeroClass.mul_zero] using (zero_at_infty f).mul (zero_at_infty g)⟩⟩
+ ⟨f * g, by simpa only [mul_zero] using (zero_at_infty f).mul (zero_at_infty g)⟩⟩
@[simp]
theorem coe_mul [MulZeroClass β] [ContinuousMul β] (f g : C₀(α, β)) : ⇑(f * g) = f * g :=
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -26,7 +26,7 @@ compact space, this type has nice properties.
universe u v w
-variable {F : Type _} {α : Type u} {β : Type v} {γ : Type w} [TopologicalSpace α]
+variable {F : Type*} {α : Type u} {β : Type v} {γ : Type w} [TopologicalSpace α]
open BoundedContinuousFunction Topology
@@ -36,7 +36,7 @@ open Filter Metric
topological space to a metric space with a zero element.
When possible, instead of parametrizing results over `(f : C₀(α, β))`,
-you should parametrize over `(F : Type _) [ZeroAtInftyContinuousMapClass F α β] (f : F)`.
+you should parametrize over `(F : Type*) [ZeroAtInftyContinuousMapClass F α β] (f : F)`.
When you extend this structure, make sure to extend `ZeroAtInftyContinuousMapClass`. -/
structure ZeroAtInftyContinuousMap (α : Type u) (β : Type v) [TopologicalSpace α] [Zero β]
@@ -59,7 +59,7 @@ section
vanish at infinity.
You should also extend this typeclass when you extend `ZeroAtInftyContinuousMap`. -/
-class ZeroAtInftyContinuousMapClass (F : Type _) (α β : outParam <| Type _) [TopologicalSpace α]
+class ZeroAtInftyContinuousMapClass (F : Type*) (α β : outParam <| Type*) [TopologicalSpace α]
[Zero β] [TopologicalSpace β] extends ContinuousMapClass F α β where
/-- Each member of the class tends to zero along the `cocompact` filter. -/
zero_at_infty (f : F) : Tendsto f (cocompact α) (𝓝 0)
@@ -149,7 +149,7 @@ def ContinuousMap.liftZeroAtInfty [CompactSpace α] : C(α, β) ≃ C₀(α, β)
/-- A continuous function on a compact space is automatically a continuous function vanishing at
infinity. This is not an instance to avoid type class loops. -/
-def zeroAtInftyContinuousMapClass.ofCompact {G : Type _} [ContinuousMapClass G α β]
+def zeroAtInftyContinuousMapClass.ofCompact {G : Type*} [ContinuousMapClass G α β]
[CompactSpace α] : ZeroAtInftyContinuousMapClass G α β where
coe g := g
coe_injective' f g h := FunLike.coe_fn_eq.mp h
@@ -293,36 +293,36 @@ instance instAddCommGroup [AddCommGroup β] [TopologicalAddGroup β] : AddCommGr
FunLike.coe_injective.addCommGroup _ coe_zero coe_add coe_neg coe_sub (fun _ _ => rfl) fun _ _ =>
rfl
-instance instSMul [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
+instance instSMul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] :
SMul R C₀(α, β) :=
-- Porting note: Original version didn't have `Continuous.const_smul f.continuous r`
⟨fun r f => ⟨⟨r • ⇑f, Continuous.const_smul f.continuous r⟩,
by simpa [smul_zero] using (zero_at_infty f).const_smul r⟩⟩
@[simp]
-theorem coe_smul [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] (r : R)
+theorem coe_smul [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β] (r : R)
(f : C₀(α, β)) : ⇑(r • f) = r • ⇑f :=
rfl
#align zero_at_infty_continuous_map.coe_smul ZeroAtInftyContinuousMap.coe_smul
-theorem smul_apply [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β]
+theorem smul_apply [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [ContinuousConstSMul R β]
(r : R) (f : C₀(α, β)) (x : α) : (r • f) x = r • f x :=
rfl
#align zero_at_infty_continuous_map.smul_apply ZeroAtInftyContinuousMap.smul_apply
-instance instIsCentralScalar [Zero β] {R : Type _} [Zero R] [SMulWithZero R β] [SMulWithZero Rᵐᵒᵖ β]
+instance instIsCentralScalar [Zero β] {R : Type*} [Zero R] [SMulWithZero R β] [SMulWithZero Rᵐᵒᵖ β]
[ContinuousConstSMul R β] [IsCentralScalar R β] : IsCentralScalar R C₀(α, β) :=
⟨fun _ _ => ext fun _ => op_smul_eq_smul _ _⟩
-instance instSMulWithZero [Zero β] {R : Type _} [Zero R] [SMulWithZero R β]
+instance instSMulWithZero [Zero β] {R : Type*} [Zero R] [SMulWithZero R β]
[ContinuousConstSMul R β] : SMulWithZero R C₀(α, β) :=
Function.Injective.smulWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
-instance instMulActionWithZero [Zero β] {R : Type _} [MonoidWithZero R] [MulActionWithZero R β]
+instance instMulActionWithZero [Zero β] {R : Type*} [MonoidWithZero R] [MulActionWithZero R β]
[ContinuousConstSMul R β] : MulActionWithZero R C₀(α, β) :=
Function.Injective.mulActionWithZero ⟨_, coe_zero⟩ FunLike.coe_injective coe_smul
-instance instModule [AddCommMonoid β] [ContinuousAdd β] {R : Type _} [Semiring R] [Module R β]
+instance instModule [AddCommMonoid β] [ContinuousAdd β] {R : Type*} [Semiring R] [Module R β]
[ContinuousConstSMul R β] : Module R C₀(α, β) :=
Function.Injective.module R ⟨⟨_, coe_zero⟩, coe_add⟩ FunLike.coe_injective coe_smul
@@ -352,7 +352,7 @@ instance instNonUnitalCommRing [NonUnitalCommRing β] [TopologicalRing β] :
FunLike.coe_injective.nonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
(fun _ _ => rfl) fun _ _ => rfl
-instance instIsScalarTower {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring β]
+instance instIsScalarTower {R : Type*} [Semiring R] [NonUnitalNonAssocSemiring β]
[TopologicalSemiring β] [Module R β] [ContinuousConstSMul R β] [IsScalarTower R β β] :
IsScalarTower R C₀(α, β) C₀(α, β) where
smul_assoc r f g := by
@@ -360,7 +360,7 @@ instance instIsScalarTower {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring
simp only [smul_eq_mul, coe_mul, coe_smul, Pi.mul_apply, Pi.smul_apply]
rw [← smul_eq_mul, ← smul_eq_mul, smul_assoc]
-instance instSMulCommClass {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring β]
+instance instSMulCommClass {R : Type*} [Semiring R] [NonUnitalNonAssocSemiring β]
[TopologicalSemiring β] [Module R β] [ContinuousConstSMul R β] [SMulCommClass R β β] :
SMulCommClass R C₀(α, β) C₀(α, β) where
smul_comm r f g := by
@@ -453,7 +453,7 @@ theorem dist_toBcf_eq_dist {f g : C₀(α, β)} : dist f.toBcf g.toBcf = dist f
open BoundedContinuousFunction
/-- Convergence in the metric on `C₀(α, β)` is uniform convergence. -/
-theorem tendsto_iff_tendstoUniformly {ι : Type _} {F : ι → C₀(α, β)} {f : C₀(α, β)} {l : Filter ι} :
+theorem tendsto_iff_tendstoUniformly {ι : Type*} {F : ι → C₀(α, β)} {f : C₀(α, β)} {l : Filter ι} :
Tendsto F l (𝓝 f) ↔ TendstoUniformly (fun i => F i) f l := by
simpa only [Metric.tendsto_nhds] using
@BoundedContinuousFunction.tendsto_iff_tendstoUniformly _ _ _ _ _ (fun i => (F i).toBcf)
@@ -498,7 +498,7 @@ field `𝕜` whenever `β` is as well.
section NormedSpace
-variable [NormedAddCommGroup β] {𝕜 : Type _} [NormedField 𝕜] [NormedSpace 𝕜 β]
+variable [NormedAddCommGroup β] {𝕜 : Type*} [NormedField 𝕜] [NormedSpace 𝕜 β]
noncomputable instance instNormedAddCommGroup : NormedAddCommGroup C₀(α, β) :=
NormedAddCommGroup.induced C₀(α, β) (α →ᵇ β) (⟨⟨toBcf, rfl⟩, fun _ _ => rfl⟩ : C₀(α, β) →+ α →ᵇ β)
@@ -573,7 +573,7 @@ end NormedStar
section StarModule
-variable {𝕜 : Type _} [Zero 𝕜] [Star 𝕜] [AddMonoid β] [StarAddMonoid β] [TopologicalSpace β]
+variable {𝕜 : Type*} [Zero 𝕜] [Star 𝕜] [AddMonoid β] [StarAddMonoid β] [TopologicalSpace β]
[ContinuousStar β] [SMulWithZero 𝕜 β] [ContinuousConstSMul 𝕜 β] [StarModule 𝕜 β]
instance instStarModule : StarModule 𝕜 C₀(α, β) where
@@ -606,7 +606,7 @@ category of topological spaces with morphisms given by `CocompactMap`s.
-/
-variable {δ : Type _} [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
+variable {δ : Type*} [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
local notation α " →co " β => CocompactMap α β
@@ -658,7 +658,7 @@ def compMulHom [MulZeroClass δ] [ContinuousMul δ] (g : β →co γ) : C₀(γ,
#align zero_at_infty_continuous_map.comp_mul_hom ZeroAtInftyContinuousMap.compMulHom
/-- Composition as a linear map. -/
-def compLinearMap [AddCommMonoid δ] [ContinuousAdd δ] {R : Type _} [Semiring R] [Module R δ]
+def compLinearMap [AddCommMonoid δ] [ContinuousAdd δ] {R : Type*} [Semiring R] [Module R δ]
[ContinuousConstSMul R δ] (g : β →co γ) : C₀(γ, δ) →ₗ[R] C₀(β, δ) where
toFun f := f.comp g
map_add' _ _ := rfl
@@ -666,7 +666,7 @@ def compLinearMap [AddCommMonoid δ] [ContinuousAdd δ] {R : Type _} [Semiring R
#align zero_at_infty_continuous_map.comp_linear_map ZeroAtInftyContinuousMap.compLinearMap
/-- Composition as a non-unital algebra homomorphism. -/
-def compNonUnitalAlgHom {R : Type _} [Semiring R] [NonUnitalNonAssocSemiring δ]
+def compNonUnitalAlgHom {R : Type*} [Semiring R] [NonUnitalNonAssocSemiring δ]
[TopologicalSemiring δ] [Module R δ] [ContinuousConstSMul R δ] (g : β →co γ) :
C₀(γ, δ) →ₙₐ[R] C₀(β, δ) where
toFun f := f.comp g
@@ -2,15 +2,12 @@
Copyright (c) 2022 Jireh Loreaux. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jireh Loreaux
-
-! This file was ported from Lean 3 source module topology.continuous_function.zero_at_infty
-! leanprover-community/mathlib commit ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.ContinuousFunction.Bounded
import Mathlib.Topology.ContinuousFunction.CocompactMap
+#align_import topology.continuous_function.zero_at_infty from "leanprover-community/mathlib"@"ba5ff5ad5d120fb0ef094ad2994967e9bfaf5112"
+
/-!
# Continuous functions vanishing at infinity
@@ -425,7 +425,7 @@ instance (priority := 100) instBoundedContinuousMapClass : BoundedContinuousMapC
map_bounded := fun f => ZeroAtInftyContinuousMap.bounded f }
/-- Construct a bounded continuous function from a continuous function vanishing at infinity. -/
-@[simps]
+@[simps!]
def toBcf (f : C₀(α, β)) : α →ᵇ β :=
⟨f, map_bounded f⟩
#align zero_at_infty_continuous_map.to_bcf ZeroAtInftyContinuousMap.toBcf
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file