topology.compact_open
⟷
Mathlib.Topology.CompactOpen
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -51,62 +51,50 @@ variable {α : Type _} {β : Type _} {γ : Type _}
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
-#print ContinuousMap.CompactOpen.gen /-
/-- A generating set for the compact-open topology (when `s` is compact and `u` is open). -/
-def CompactOpen.gen (s : Set α) (u : Set β) : Set C(α, β) :=
+def compactOpen.gen (s : Set α) (u : Set β) : Set C(α, β) :=
{f | f '' s ⊆ u}
-#align continuous_map.compact_open.gen ContinuousMap.CompactOpen.gen
--/
+#align continuous_map.compact_open.gen ContinuousMap.compactOpen.gen
-#print ContinuousMap.gen_empty /-
@[simp]
-theorem gen_empty (u : Set β) : CompactOpen.gen (∅ : Set α) u = Set.univ :=
+theorem gen_empty (u : Set β) : compactOpen.gen (∅ : Set α) u = Set.univ :=
Set.ext fun f => iff_true_intro ((congr_arg (· ⊆ u) (image_empty f)).mpr u.empty_subset)
#align continuous_map.gen_empty ContinuousMap.gen_empty
--/
-#print ContinuousMap.gen_univ /-
@[simp]
-theorem gen_univ (s : Set α) : CompactOpen.gen s (Set.univ : Set β) = Set.univ :=
+theorem gen_univ (s : Set α) : compactOpen.gen s (Set.univ : Set β) = Set.univ :=
Set.ext fun f => iff_true_intro (f '' s).subset_univ
#align continuous_map.gen_univ ContinuousMap.gen_univ
--/
-#print ContinuousMap.gen_inter /-
@[simp]
theorem gen_inter (s : Set α) (u v : Set β) :
- CompactOpen.gen s (u ∩ v) = CompactOpen.gen s u ∩ CompactOpen.gen s v :=
+ compactOpen.gen s (u ∩ v) = compactOpen.gen s u ∩ compactOpen.gen s v :=
Set.ext fun f => subset_inter_iff
#align continuous_map.gen_inter ContinuousMap.gen_inter
--/
-#print ContinuousMap.gen_union /-
@[simp]
theorem gen_union (s t : Set α) (u : Set β) :
- CompactOpen.gen (s ∪ t) u = CompactOpen.gen s u ∩ CompactOpen.gen t u :=
+ compactOpen.gen (s ∪ t) u = compactOpen.gen s u ∩ compactOpen.gen t u :=
Set.ext fun f => (iff_of_eq (congr_arg (· ⊆ u) (image_union f s t))).trans union_subset_iff
#align continuous_map.gen_union ContinuousMap.gen_union
--/
-#print ContinuousMap.gen_empty_right /-
-theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set β) = ∅ :=
+theorem gen_empty_right {s : Set α} (h : s.Nonempty) : compactOpen.gen s (∅ : Set β) = ∅ :=
eq_empty_of_forall_not_mem fun f => (h.image _).not_subset_empty
#align continuous_map.gen_empty_right ContinuousMap.gen_empty_right
--/
#print ContinuousMap.compactOpen /-
-- The compact-open topology on the space of continuous maps α → β.
instance compactOpen : TopologicalSpace C(α, β) :=
TopologicalSpace.generateFrom
- {m | ∃ (s : Set α) (hs : IsCompact s) (u : Set β) (hu : IsOpen u), m = CompactOpen.gen s u}
+ {m | ∃ (s : Set α) (hs : IsCompact s) (u : Set β) (hu : IsOpen u), m = compactOpen.gen s u}
#align continuous_map.compact_open ContinuousMap.compactOpen
-/
-#print ContinuousMap.isOpen_gen /-
-protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
- IsOpen (CompactOpen.gen s u) :=
+#print ContinuousMap.isOpen_setOf_mapsTo /-
+protected theorem isOpen_setOf_mapsTo {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
+ IsOpen (compactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_set_of_eq] <;> tauto)
-#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
+#align continuous_map.is_open_gen ContinuousMap.isOpen_setOf_mapsTo
-/
section Functorial
@@ -114,7 +102,7 @@ section Functorial
variable (g : C(β, γ))
private theorem preimage_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsOpen u) :
- ContinuousMap.comp g ⁻¹' CompactOpen.gen s u = CompactOpen.gen s (g ⁻¹' u) :=
+ ContinuousMap.comp g ⁻¹' compactOpen.gen s u = compactOpen.gen s (g ⁻¹' u) :=
by
ext ⟨f, _⟩
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
@@ -124,14 +112,14 @@ private theorem preimage_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu :
/-- C(α, -) is a functor. -/
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
- rw [hm, preimage_gen g hs hu] <;> exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
+ rw [hm, preimage_gen g hs hu] <;> exact ContinuousMap.isOpen_setOf_mapsTo hs (hu.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
-/
variable (f : C(α, β))
private theorem image_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsOpen u) :
- (fun g : C(β, γ) => g.comp f) ⁻¹' CompactOpen.gen s u = CompactOpen.gen (f '' s) u :=
+ (fun g : C(β, γ) => g.comp f) ⁻¹' compactOpen.gen s u = compactOpen.gen (f '' s) u :=
by
ext ⟨g, _⟩
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
@@ -141,7 +129,7 @@ private theorem image_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsO
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by rw [hm, image_gen f hs hu];
- exact ContinuousMap.isOpen_gen (hs.image f.2) hu
+ exact ContinuousMap.isOpen_setOf_mapsTo (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
-/
@@ -165,7 +153,8 @@ theorem continuous_comp' [LocallyCompactSpace β] :
obtain ⟨L, hL, hKL, hLU⟩ := exists_compact_between (hK.image φ₀.2) (hU.preimage ψ₀.2) H
use{φ : C(α, β) | φ '' K ⊆ interior L} ×ˢ {ψ : C(β, γ) | ψ '' L ⊆ U}
use fun ⟨φ, ψ⟩ ⟨hφ, hψ⟩ => subset_trans hφ (interior_subset.trans <| image_subset_iff.mp hψ)
- use(ContinuousMap.isOpen_gen hK isOpen_interior).Prod (ContinuousMap.isOpen_gen hL hU)
+ use(ContinuousMap.isOpen_setOf_mapsTo hK isOpen_interior).Prod
+ (ContinuousMap.isOpen_setOf_mapsTo hL hU)
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-/
@@ -197,13 +186,13 @@ theorem continuous_eval [LocallyCompactSpace α] : Continuous fun p : C(α, β)
LocallyCompactSpace.local_compact_nhds x (f ⁻¹' v) (f.Continuous.Tendsto x this)
let ⟨u, us, uo, xu⟩ := mem_nhds_iff.mp hs
show (fun p : C(α, β) × α => p.1 p.2) ⁻¹' n ∈ 𝓝 (f, x) from
- let w := CompactOpen.gen s v ×ˢ u
+ let w := compactOpen.gen s v ×ˢ u
have : w ⊆ (fun p : C(α, β) × α => p.1 p.2) ⁻¹' n := fun ⟨f', x'⟩ ⟨hf', hx'⟩ =>
calc
f' x' ∈ f' '' s := mem_image_of_mem f' (us hx')
_ ⊆ v := hf'
_ ⊆ n := vn
- have : IsOpen w := (ContinuousMap.isOpen_gen sc vo).Prod uo
+ have : IsOpen w := (ContinuousMap.isOpen_setOf_mapsTo sc vo).Prod uo
have : (f, x) ∈ w := ⟨image_subset_iff.mpr sv, xu⟩
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
#align continuous_map.continuous_eval' ContinuousMap.continuous_eval
@@ -230,8 +219,8 @@ instance [T2Space β] : T2Space C(α, β) :=
obtain ⟨u, v, hu, hv, hxu, hxv, huv⟩ := t2_separation hx
refine'
⟨compact_open.gen {x} u, compact_open.gen {x} v,
- ContinuousMap.isOpen_gen isCompact_singleton hu,
- ContinuousMap.isOpen_gen isCompact_singleton hv, _, _, _⟩
+ ContinuousMap.isOpen_setOf_mapsTo isCompact_singleton hu,
+ ContinuousMap.isOpen_setOf_mapsTo isCompact_singleton hv, _, _, _⟩
· rwa [compact_open.gen, mem_set_of_eq, image_singleton, singleton_subset_iff]
· rwa [compact_open.gen, mem_set_of_eq, image_singleton, singleton_subset_iff]
·
@@ -257,11 +246,11 @@ theorem compactOpen_le_induced (s : Set α) :
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
-/
-#print ContinuousMap.compactOpen_eq_sInf_induced /-
+#print ContinuousMap.compactOpen_eq_iInf_induced /-
/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
-theorem compactOpen_eq_sInf_induced :
+theorem compactOpen_eq_iInf_induced :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) =
⨅ (s : Set α) (hs : IsCompact s),
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen :=
@@ -278,7 +267,7 @@ theorem compactOpen_eq_sInf_induced :
simp only [compact_open.gen, mem_set_of_eq, mem_preimage, ContinuousMap.coe_restrict]
rw [image_comp f (coe : s → α)]
simp
-#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
+#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_iInf_induced
-/
#print ContinuousMap.continuous_restrict /-
@@ -289,11 +278,11 @@ theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.res
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-/
-#print ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced /-
-theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
+#print ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced /-
+theorem nhds_compactOpen_eq_iInf_nhds_induced (f : C(α, β)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced]
-#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
+#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced
-/
#print ContinuousMap.tendsto_compactOpen_restrict /-
@@ -381,8 +370,8 @@ theorem continuous_coev : Continuous (coev α β) :=
rintro _ ⟨s, sc, u, uo, rfl⟩
rw [isOpen_iff_forall_mem_open]
intro y hy
- change coev α β y '' s ⊆ u at hy
- rw [image_coev s] at hy
+ change coev α β y '' s ⊆ u at hy
+ rw [image_coev s] at hy
rcases generalized_tube_lemma isCompact_singleton sc uo hy with ⟨v, w, vo, wo, yv, sw, vwu⟩
refine' ⟨v, _, vo, singleton_subset_iff.mp yv⟩
intro y' hy'
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -226,7 +226,7 @@ theorem continuous_coe [LocallyCompactSpace α] : @Continuous C(α, β) (α →
instance [T2Space β] : T2Space C(α, β) :=
⟨by
intro f₁ f₂ h
- obtain ⟨x, hx⟩ := not_forall.mp (mt (FunLike.ext f₁ f₂) h)
+ obtain ⟨x, hx⟩ := not_forall.mp (mt (DFunLike.ext f₁ f₂) h)
obtain ⟨u, v, hu, hv, hxu, hxv, huv⟩ := t2_separation hx
refine'
⟨compact_open.gen {x} u, compact_open.gen {x} v,
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -185,11 +185,11 @@ section Ev
variable {α β}
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print ContinuousMap.continuous_eval' /-
+#print ContinuousMap.continuous_eval /-
/-- The evaluation map `C(α, β) × α → β` is continuous if `α` is locally compact.
See also `continuous_map.continuous_eval` -/
-theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β) × α => p.1 p.2 :=
+theorem continuous_eval [LocallyCompactSpace α] : Continuous fun p : C(α, β) × α => p.1 p.2 :=
continuous_iff_continuousAt.mpr fun ⟨f, x⟩ n hn =>
let ⟨v, vn, vo, fxv⟩ := mem_nhds_iff.mp hn
have : v ∈ 𝓝 (f x) := IsOpen.mem_nhds vo fxv
@@ -206,13 +206,13 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
have : IsOpen w := (ContinuousMap.isOpen_gen sc vo).Prod uo
have : (f, x) ∈ w := ⟨image_subset_iff.mpr sv, xu⟩
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
-#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
+#align continuous_map.continuous_eval' ContinuousMap.continuous_eval
-/
#print ContinuousMap.continuous_eval_const /-
/-- See also `continuous_map.continuous_eval_const` -/
theorem continuous_eval_const [LocallyCompactSpace α] (a : α) : Continuous fun f : C(α, β) => f a :=
- continuous_eval'.comp (continuous_id.prod_mk continuous_const)
+ continuous_eval.comp (continuous_id.prod_mk continuous_const)
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
-/
@@ -452,7 +452,7 @@ theorem curry_apply (f : C(α × β, γ)) (a : α) (b : β) : f.curry a b = f (a
/-- The uncurried form of a continuous map `α → C(β, γ)` is a continuous map `α × β → γ`. -/
theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(β, γ))) :
Continuous (Function.uncurry fun x y => f x y) :=
- continuous_eval'.comp <| f.Continuous.Prod_map continuous_id
+ continuous_eval.comp <| f.Continuous.Prod_map continuous_id
#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuous
-/
@@ -528,7 +528,7 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
left_inv a := rfl
right_inv f := by ext; rw [Unique.eq_default a]; rfl
continuous_toFun := continuous_const'
- continuous_invFun := continuous_eval'.comp (continuous_id.prod_mk continuous_const)
+ continuous_invFun := continuous_eval.comp (continuous_id.prod_mk continuous_const)
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2018 Reid Barton. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Reid Barton
-/
-import Mathbin.Tactic.Tidy
-import Mathbin.Topology.ContinuousFunction.Basic
-import Mathbin.Topology.Homeomorph
-import Mathbin.Topology.SubsetProperties
-import Mathbin.Topology.Maps
+import Tactic.Tidy
+import Topology.ContinuousFunction.Basic
+import Topology.Homeomorph
+import Topology.SubsetProperties
+import Topology.Maps
#align_import topology.compact_open from "leanprover-community/mathlib"@"34ee86e6a59d911a8e4f89b68793ee7577ae79c7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -342,7 +342,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
have hs : ∀ x : α, ∃ (s : _) (hs : IsCompact s), s ∈ 𝓝 x :=
by
intro x
- obtain ⟨s, hs, hs'⟩ := exists_compact_mem_nhds x
+ obtain ⟨s, hs, hs'⟩ := WeaklyLocallyCompactSpace.exists_compact_mem_nhds x
exact ⟨s, hs, hs'⟩
refine' ⟨lift_cover' _ _ h hs, _⟩
rw [tendsto_compact_open_iff_forall]
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -163,9 +163,9 @@ theorem continuous_comp' [LocallyCompactSpace β] :
rw [isOpen_iff_forall_mem_open]
rintro ⟨φ₀, ψ₀⟩ H
obtain ⟨L, hL, hKL, hLU⟩ := exists_compact_between (hK.image φ₀.2) (hU.preimage ψ₀.2) H
- use {φ : C(α, β) | φ '' K ⊆ interior L} ×ˢ {ψ : C(β, γ) | ψ '' L ⊆ U}
+ use{φ : C(α, β) | φ '' K ⊆ interior L} ×ˢ {ψ : C(β, γ) | ψ '' L ⊆ U}
use fun ⟨φ, ψ⟩ ⟨hφ, hψ⟩ => subset_trans hφ (interior_subset.trans <| image_subset_iff.mp hψ)
- use (ContinuousMap.isOpen_gen hK isOpen_interior).Prod (ContinuousMap.isOpen_gen hL hU)
+ use(ContinuousMap.isOpen_gen hK isOpen_interior).Prod (ContinuousMap.isOpen_gen hL hU)
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2018 Reid Barton. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Reid Barton
-
-! This file was ported from Lean 3 source module topology.compact_open
-! leanprover-community/mathlib commit 34ee86e6a59d911a8e4f89b68793ee7577ae79c7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Tactic.Tidy
import Mathbin.Topology.ContinuousFunction.Basic
@@ -14,6 +9,8 @@ import Mathbin.Topology.Homeomorph
import Mathbin.Topology.SubsetProperties
import Mathbin.Topology.Maps
+#align_import topology.compact_open from "leanprover-community/mathlib"@"34ee86e6a59d911a8e4f89b68793ee7577ae79c7"
+
/-!
# The compact-open topology
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -212,19 +212,18 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
-/
-#print ContinuousMap.continuous_eval_const' /-
+#print ContinuousMap.continuous_eval_const /-
/-- See also `continuous_map.continuous_eval_const` -/
-theorem continuous_eval_const' [LocallyCompactSpace α] (a : α) :
- Continuous fun f : C(α, β) => f a :=
+theorem continuous_eval_const [LocallyCompactSpace α] (a : α) : Continuous fun f : C(α, β) => f a :=
continuous_eval'.comp (continuous_id.prod_mk continuous_const)
-#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const'
+#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
-/
-#print ContinuousMap.continuous_coe' /-
+#print ContinuousMap.continuous_coe /-
/-- See also `continuous_map.continuous_coe` -/
-theorem continuous_coe' [LocallyCompactSpace α] : @Continuous C(α, β) (α → β) _ _ coeFn :=
- continuous_pi continuous_eval_const'
-#align continuous_map.continuous_coe' ContinuousMap.continuous_coe'
+theorem continuous_coe [LocallyCompactSpace α] : @Continuous C(α, β) (α → β) _ _ coeFn :=
+ continuous_pi continuous_eval_const
+#align continuous_map.continuous_coe' ContinuousMap.continuous_coe
-/
instance [T2Space β] : T2Space C(α, β) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -68,26 +68,34 @@ theorem gen_empty (u : Set β) : CompactOpen.gen (∅ : Set α) u = Set.univ :=
#align continuous_map.gen_empty ContinuousMap.gen_empty
-/
+#print ContinuousMap.gen_univ /-
@[simp]
theorem gen_univ (s : Set α) : CompactOpen.gen s (Set.univ : Set β) = Set.univ :=
Set.ext fun f => iff_true_intro (f '' s).subset_univ
#align continuous_map.gen_univ ContinuousMap.gen_univ
+-/
+#print ContinuousMap.gen_inter /-
@[simp]
theorem gen_inter (s : Set α) (u v : Set β) :
CompactOpen.gen s (u ∩ v) = CompactOpen.gen s u ∩ CompactOpen.gen s v :=
Set.ext fun f => subset_inter_iff
#align continuous_map.gen_inter ContinuousMap.gen_inter
+-/
+#print ContinuousMap.gen_union /-
@[simp]
theorem gen_union (s t : Set α) (u : Set β) :
CompactOpen.gen (s ∪ t) u = CompactOpen.gen s u ∩ CompactOpen.gen t u :=
Set.ext fun f => (iff_of_eq (congr_arg (· ⊆ u) (image_union f s t))).trans union_subset_iff
#align continuous_map.gen_union ContinuousMap.gen_union
+-/
+#print ContinuousMap.gen_empty_right /-
theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set β) = ∅ :=
eq_empty_of_forall_not_mem fun f => (h.image _).not_subset_empty
#align continuous_map.gen_empty_right ContinuousMap.gen_empty_right
+-/
#print ContinuousMap.compactOpen /-
-- The compact-open topology on the space of continuous maps α → β.
@@ -97,10 +105,12 @@ instance compactOpen : TopologicalSpace C(α, β) :=
#align continuous_map.compact_open ContinuousMap.compactOpen
-/
+#print ContinuousMap.isOpen_gen /-
protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
IsOpen (CompactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_set_of_eq] <;> tauto)
#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
+-/
section Functorial
@@ -113,11 +123,13 @@ private theorem preimage_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu :
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
rw [image_comp, image_subset_iff]
+#print ContinuousMap.continuous_comp /-
/-- C(α, -) is a functor. -/
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, preimage_gen g hs hu] <;> exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
+-/
variable (f : C(α, β))
@@ -128,13 +140,16 @@ private theorem image_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsO
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
rw [Set.image_comp]
+#print ContinuousMap.continuous_comp_left /-
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by rw [hm, image_gen f hs hu];
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ContinuousMap.continuous_comp' /-
/-- Composition is a continuous map from `C(α, β) × C(β, γ)` to `C(α, γ)`, provided that `β` is
locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
theorem continuous_comp' [LocallyCompactSpace β] :
@@ -156,12 +171,15 @@ theorem continuous_comp' [LocallyCompactSpace β] :
use (ContinuousMap.isOpen_gen hK isOpen_interior).Prod (ContinuousMap.isOpen_gen hL hU)
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
+-/
+#print ContinuousMap.continuous.comp' /-
theorem continuous.comp' {X : Type _} [TopologicalSpace X] [LocallyCompactSpace β] {f : X → C(α, β)}
{g : X → C(β, γ)} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
continuous_comp'.comp (hf.prod_mk hg : Continuous fun x => (f x, g x))
#align continuous_map.continuous.comp' ContinuousMap.continuous.comp'
+-/
end Functorial
@@ -170,6 +188,7 @@ section Ev
variable {α β}
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ContinuousMap.continuous_eval' /-
/-- The evaluation map `C(α, β) × α → β` is continuous if `α` is locally compact.
See also `continuous_map.continuous_eval` -/
@@ -191,17 +210,22 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
have : (f, x) ∈ w := ⟨image_subset_iff.mpr sv, xu⟩
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
+-/
+#print ContinuousMap.continuous_eval_const' /-
/-- See also `continuous_map.continuous_eval_const` -/
theorem continuous_eval_const' [LocallyCompactSpace α] (a : α) :
Continuous fun f : C(α, β) => f a :=
continuous_eval'.comp (continuous_id.prod_mk continuous_const)
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const'
+-/
+#print ContinuousMap.continuous_coe' /-
/-- See also `continuous_map.continuous_coe` -/
theorem continuous_coe' [LocallyCompactSpace α] : @Continuous C(α, β) (α → β) _ _ coeFn :=
continuous_pi continuous_eval_const'
#align continuous_map.continuous_coe' ContinuousMap.continuous_coe'
+-/
instance [T2Space β] : T2Space C(α, β) :=
⟨by
@@ -222,6 +246,7 @@ end Ev
section InfInduced
+#print ContinuousMap.compactOpen_le_induced /-
theorem compactOpen_le_induced (s : Set α) :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) ≤
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen :=
@@ -234,7 +259,9 @@ theorem compactOpen_le_induced (s : Set α) :
simp only [compact_open.gen, mem_set_of_eq, mem_preimage, ContinuousMap.coe_restrict]
rw [image_comp f (coe : s → α)]
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
+-/
+#print ContinuousMap.compactOpen_eq_sInf_induced /-
/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
@@ -256,30 +283,40 @@ theorem compactOpen_eq_sInf_induced :
rw [image_comp f (coe : s → α)]
simp
#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
+-/
+#print ContinuousMap.continuous_restrict /-
/-- For any subset `s` of `α`, the restriction of continuous functions to `s` is continuous as a
function from `C(α, β)` to `C(s, β)` with their respective compact-open topologies. -/
theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.restrict s := by
rw [continuous_iff_le_induced]; exact compact_open_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
+-/
+#print ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced /-
theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced]
#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
+-/
+#print ContinuousMap.tendsto_compactOpen_restrict /-
theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
(hFf : Filter.Tendsto F l (𝓝 f)) (s : Set α) :
Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
(continuous_restrict s).ContinuousAt.Tendsto.comp hFf
#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrict
+-/
+#print ContinuousMap.tendsto_compactOpen_iff_forall /-
theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
by rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
+-/
+#print ContinuousMap.exists_tendsto_compactOpen_iff_forall /-
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
it converges in the compact-open topology on each compact subset of `α`. -/
theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space α] [T2Space β]
@@ -317,6 +354,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
rw [lift_cover_restrict']
exact hf s hs
#align continuous_map.exists_tendsto_compact_open_iff_forall ContinuousMap.exists_tendsto_compactOpen_iff_forall
+-/
end InfInduced
@@ -324,18 +362,23 @@ section Coev
variable (α β)
+#print ContinuousMap.coev /-
/-- The coevaluation map `β → C(α, β × α)` sending a point `x : β` to the continuous function
on `α` sending `y` to `(x, y)`. -/
def coev (b : β) : C(α, β × α) :=
⟨Prod.mk b, continuous_const.prod_mk continuous_id⟩
#align continuous_map.coev ContinuousMap.coev
+-/
variable {α β}
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ContinuousMap.image_coev /-
theorem image_coev {y : β} (s : Set α) : coev α β y '' s = ({y} : Set β) ×ˢ s := by tidy
#align continuous_map.image_coev ContinuousMap.image_coev
+-/
+#print ContinuousMap.continuous_coev /-
-- The coevaluation map β → C(α, β × α) is continuous (always).
theorem continuous_coev : Continuous (coev α β) :=
continuous_generateFrom <| by
@@ -351,36 +394,46 @@ theorem continuous_coev : Continuous (coev α β) :=
rw [image_coev s]
exact subset.trans (prod_mono (singleton_subset_iff.mpr hy') sw) vwu
#align continuous_map.continuous_coev ContinuousMap.continuous_coev
+-/
end Coev
section Curry
+#print ContinuousMap.curry' /-
/-- Auxiliary definition, see `continuous_map.curry` and `homeomorph.curry`. -/
def curry' (f : C(α × β, γ)) (a : α) : C(β, γ) :=
⟨Function.curry f a⟩
#align continuous_map.curry' ContinuousMap.curry'
+-/
+#print ContinuousMap.continuous_curry' /-
/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
theorem continuous_curry' (f : C(α × β, γ)) : Continuous (curry' f) :=
have hf : curry' f = ContinuousMap.comp f ∘ coev _ _ := by ext; rfl
hf ▸ Continuous.comp (continuous_comp f) continuous_coev
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
+-/
+#print ContinuousMap.continuous_of_continuous_uncurry /-
/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
`α × β → γ` is continuous. -/
theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
(h : Continuous (Function.uncurry fun x y => f x y)) : Continuous f := by
convert continuous_curry' ⟨_, h⟩; ext; rfl
#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurry
+-/
+#print ContinuousMap.curry /-
/-- The curried form of a continuous map `α × β → γ` as a continuous map `α → C(β, γ)`.
If `a × β` is locally compact, this is continuous. If `α` and `β` are both locally
compact, then this is a homeomorphism, see `homeomorph.curry`. -/
def curry (f : C(α × β, γ)) : C(α, C(β, γ)) :=
⟨_, continuous_curry' f⟩
#align continuous_map.curry ContinuousMap.curry
+-/
+#print ContinuousMap.continuous_curry /-
/-- The currying process is a continuous map between function spaces. -/
theorem continuous_curry [LocallyCompactSpace (α × β)] :
Continuous (curry : C(α × β, γ) → C(α, C(β, γ))) :=
@@ -390,18 +443,24 @@ theorem continuous_curry [LocallyCompactSpace (α × β)] :
rw [← Homeomorph.comp_continuous_iff' (Homeomorph.prodAssoc _ _ _).symm]
convert continuous_eval' <;> tidy
#align continuous_map.continuous_curry ContinuousMap.continuous_curry
+-/
+#print ContinuousMap.curry_apply /-
@[simp]
theorem curry_apply (f : C(α × β, γ)) (a : α) (b : β) : f.curry a b = f (a, b) :=
rfl
#align continuous_map.curry_apply ContinuousMap.curry_apply
+-/
+#print ContinuousMap.continuous_uncurry_of_continuous /-
/-- The uncurried form of a continuous map `α → C(β, γ)` is a continuous map `α × β → γ`. -/
theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(β, γ))) :
Continuous (Function.uncurry fun x y => f x y) :=
continuous_eval'.comp <| f.Continuous.Prod_map continuous_id
#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuous
+-/
+#print ContinuousMap.uncurry /-
/-- The uncurried form of a continuous map `α → C(β, γ)` as a continuous map `α × β → γ` (if `β` is
locally compact). If `α` is also locally compact, then this is a homeomorphism between the two
function spaces, see `homeomorph.curry`. -/
@@ -409,7 +468,9 @@ theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(
def uncurry [LocallyCompactSpace β] (f : C(α, C(β, γ))) : C(α × β, γ) :=
⟨_, continuous_uncurry_of_continuous f⟩
#align continuous_map.uncurry ContinuousMap.uncurry
+-/
+#print ContinuousMap.continuous_uncurry /-
/-- The uncurrying process is a continuous map between function spaces. -/
theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
Continuous (uncurry : C(α, C(β, γ)) → C(α × β, γ)) :=
@@ -419,6 +480,7 @@ theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
apply Continuous.comp continuous_eval' (Continuous.prod_map continuous_eval' continuous_id) <;>
infer_instance
#align continuous_map.continuous_uncurry ContinuousMap.continuous_uncurry
+-/
#print ContinuousMap.const' /-
/-- The family of constant maps: `β → C(α, β)` as a continuous map. -/
@@ -427,10 +489,12 @@ def const' : C(β, C(α, β)) :=
#align continuous_map.const' ContinuousMap.const'
-/
+#print ContinuousMap.coe_const' /-
@[simp]
theorem coe_const' : (const' : β → C(α, β)) = const α :=
rfl
#align continuous_map.coe_const' ContinuousMap.coe_const'
+-/
#print ContinuousMap.continuous_const' /-
theorem continuous_const' : Continuous (const α : β → C(α, β)) :=
@@ -452,10 +516,12 @@ variable {α : Type _} {β : Type _} {γ : Type _}
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+#print Homeomorph.curry /-
/-- Currying as a homeomorphism between the function spaces `C(α × β, γ)` and `C(α, C(β, γ))`. -/
def curry [LocallyCompactSpace α] [LocallyCompactSpace β] : C(α × β, γ) ≃ₜ C(α, C(β, γ)) :=
⟨⟨curry, uncurry, by tidy, by tidy⟩, continuous_curry, continuous_uncurry⟩
#align homeomorph.curry Homeomorph.curry
+-/
#print Homeomorph.continuousMapOfUnique /-
/-- If `α` has a single element, then `β` is homeomorphic to `C(α, β)`. -/
@@ -470,16 +536,20 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
-/
+#print Homeomorph.continuousMapOfUnique_apply /-
@[simp]
theorem continuousMapOfUnique_apply [Unique α] (b : β) (a : α) : continuousMapOfUnique b a = b :=
rfl
#align homeomorph.continuous_map_of_unique_apply Homeomorph.continuousMapOfUnique_apply
+-/
+#print Homeomorph.continuousMapOfUnique_symm_apply /-
@[simp]
theorem continuousMapOfUnique_symm_apply [Unique α] (f : C(α, β)) :
continuousMapOfUnique.symm f = f default :=
rfl
#align homeomorph.continuous_map_of_unique_symm_apply Homeomorph.continuousMapOfUnique_symm_apply
+-/
end Homeomorph
@@ -488,6 +558,7 @@ section QuotientMap
variable {X₀ X Y Z : Type _} [TopologicalSpace X₀] [TopologicalSpace X] [TopologicalSpace Y]
[TopologicalSpace Z] [LocallyCompactSpace Y] {f : X₀ → X}
+#print QuotientMap.continuous_lift_prod_left /-
theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y → Z}
(hg : Continuous fun p : X₀ × Y => g (f p.1, p.2)) : Continuous g :=
by
@@ -506,7 +577,9 @@ theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y
cases x
rfl
#align quotient_map.continuous_lift_prod_left QuotientMap.continuous_lift_prod_left
+-/
+#print QuotientMap.continuous_lift_prod_right /-
theorem QuotientMap.continuous_lift_prod_right (hf : QuotientMap f) {g : Y × X → Z}
(hg : Continuous fun p : Y × X₀ => g (p.1, f p.2)) : Continuous g :=
by
@@ -517,6 +590,7 @@ theorem QuotientMap.continuous_lift_prod_right (hf : QuotientMap f) {g : Y × X
ext x
simp
#align quotient_map.continuous_lift_prod_right QuotientMap.continuous_lift_prod_right
+-/
end QuotientMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -187,7 +187,6 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
f' x' ∈ f' '' s := mem_image_of_mem f' (us hx')
_ ⊆ v := hf'
_ ⊆ n := vn
-
have : IsOpen w := (ContinuousMap.isOpen_gen sc vo).Prod uo
have : (f, x) ∈ w := ⟨image_subset_iff.mpr sv, xu⟩
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -57,7 +57,7 @@ variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
#print ContinuousMap.CompactOpen.gen /-
/-- A generating set for the compact-open topology (when `s` is compact and `u` is open). -/
def CompactOpen.gen (s : Set α) (u : Set β) : Set C(α, β) :=
- { f | f '' s ⊆ u }
+ {f | f '' s ⊆ u}
#align continuous_map.compact_open.gen ContinuousMap.CompactOpen.gen
-/
@@ -93,7 +93,7 @@ theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ :
-- The compact-open topology on the space of continuous maps α → β.
instance compactOpen : TopologicalSpace C(α, β) :=
TopologicalSpace.generateFrom
- { m | ∃ (s : Set α) (hs : IsCompact s) (u : Set β) (hu : IsOpen u), m = CompactOpen.gen s u }
+ {m | ∃ (s : Set α) (hs : IsCompact s) (u : Set β) (hu : IsOpen u), m = CompactOpen.gen s u}
#align continuous_map.compact_open ContinuousMap.compactOpen
-/
@@ -151,7 +151,7 @@ theorem continuous_comp' [LocallyCompactSpace β] :
rw [isOpen_iff_forall_mem_open]
rintro ⟨φ₀, ψ₀⟩ H
obtain ⟨L, hL, hKL, hLU⟩ := exists_compact_between (hK.image φ₀.2) (hU.preimage ψ₀.2) H
- use { φ : C(α, β) | φ '' K ⊆ interior L } ×ˢ { ψ : C(β, γ) | ψ '' L ⊆ U }
+ use {φ : C(α, β) | φ '' K ⊆ interior L} ×ˢ {ψ : C(β, γ) | ψ '' L ⊆ U}
use fun ⟨φ, ψ⟩ ⟨hφ, hψ⟩ => subset_trans hφ (interior_subset.trans <| image_subset_iff.mp hψ)
use (ContinuousMap.isOpen_gen hK isOpen_interior).Prod (ContinuousMap.isOpen_gen hL hU)
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
@@ -514,7 +514,7 @@ theorem QuotientMap.continuous_lift_prod_right (hf : QuotientMap f) {g : Y × X
have : Continuous fun p : X₀ × Y => g ((Prod.swap p).1, f (Prod.swap p).2) :=
hg.comp continuous_swap
have : Continuous fun p : X₀ × Y => (g ∘ Prod.swap) (f p.1, p.2) := this
- convert(hf.continuous_lift_prod_left this).comp continuous_swap
+ convert (hf.continuous_lift_prod_left this).comp continuous_swap
ext x
simp
#align quotient_map.continuous_lift_prod_right QuotientMap.continuous_lift_prod_right
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -93,7 +93,7 @@ theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ :
-- The compact-open topology on the space of continuous maps α → β.
instance compactOpen : TopologicalSpace C(α, β) :=
TopologicalSpace.generateFrom
- { m | ∃ (s : Set α)(hs : IsCompact s)(u : Set β)(hu : IsOpen u), m = CompactOpen.gen s u }
+ { m | ∃ (s : Set α) (hs : IsCompact s) (u : Set β) (hu : IsOpen u), m = CompactOpen.gen s u }
#align continuous_map.compact_open ContinuousMap.compactOpen
-/
@@ -307,7 +307,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
exact tendsto_nhds_unique h₁ h₂
-- So glue the `f s hs` together and prove that this glued function `f₀` is a limit on each
-- compact set `s`
- have hs : ∀ x : α, ∃ (s : _)(hs : IsCompact s), s ∈ 𝓝 x :=
+ have hs : ∀ x : α, ∃ (s : _) (hs : IsCompact s), s ∈ 𝓝 x :=
by
intro x
obtain ⟨s, hs, hs'⟩ := exists_compact_mem_nhds x
@@ -343,8 +343,8 @@ theorem continuous_coev : Continuous (coev α β) :=
rintro _ ⟨s, sc, u, uo, rfl⟩
rw [isOpen_iff_forall_mem_open]
intro y hy
- change coev α β y '' s ⊆ u at hy
- rw [image_coev s] at hy
+ change coev α β y '' s ⊆ u at hy
+ rw [image_coev s] at hy
rcases generalized_tube_lemma isCompact_singleton sc uo hy with ⟨v, w, vo, wo, yv, sw, vwu⟩
refine' ⟨v, _, vo, singleton_subset_iff.mp yv⟩
intro y' hy'
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -44,7 +44,7 @@ compact-open, curry, function space
open Set
-open Topology
+open scoped Topology
namespace ContinuousMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -68,47 +68,23 @@ theorem gen_empty (u : Set β) : CompactOpen.gen (∅ : Set α) u = Set.univ :=
#align continuous_map.gen_empty ContinuousMap.gen_empty
-/
-/- warning: continuous_map.gen_univ -> ContinuousMap.gen_univ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α), Eq.{succ (max u1 u2)} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s (Set.univ.{u2} β)) (Set.univ.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s (Set.univ.{u1} β)) (Set.univ.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2))
-Case conversion may be inaccurate. Consider using '#align continuous_map.gen_univ ContinuousMap.gen_univₓ'. -/
@[simp]
theorem gen_univ (s : Set α) : CompactOpen.gen s (Set.univ : Set β) = Set.univ :=
Set.ext fun f => iff_true_intro (f '' s).subset_univ
#align continuous_map.gen_univ ContinuousMap.gen_univ
-/- warning: continuous_map.gen_inter -> ContinuousMap.gen_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α) (u : Set.{u2} β) (v : Set.{u2} β), Eq.{succ (max u1 u2)} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) u v)) (Inter.inter.{max u1 u2} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Set.hasInter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s u) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s v))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α) (u : Set.{u1} β) (v : Set.{u1} β), Eq.{max (succ u2) (succ u1)} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) u v)) (Inter.inter.{max u1 u2} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Set.instInterSet.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s u) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s v))
-Case conversion may be inaccurate. Consider using '#align continuous_map.gen_inter ContinuousMap.gen_interₓ'. -/
@[simp]
theorem gen_inter (s : Set α) (u v : Set β) :
CompactOpen.gen s (u ∩ v) = CompactOpen.gen s u ∩ CompactOpen.gen s v :=
Set.ext fun f => subset_inter_iff
#align continuous_map.gen_inter ContinuousMap.gen_inter
-/- warning: continuous_map.gen_union -> ContinuousMap.gen_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α) (t : Set.{u1} α) (u : Set.{u2} β), Eq.{succ (max u1 u2)} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) u) (Inter.inter.{max u1 u2} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Set.hasInter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s u) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 t u))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α) (t : Set.{u2} α) (u : Set.{u1} β), Eq.{max (succ u2) (succ u1)} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s t) u) (Inter.inter.{max u1 u2} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Set.instInterSet.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s u) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 t u))
-Case conversion may be inaccurate. Consider using '#align continuous_map.gen_union ContinuousMap.gen_unionₓ'. -/
@[simp]
theorem gen_union (s t : Set α) (u : Set β) :
CompactOpen.gen (s ∪ t) u = CompactOpen.gen s u ∩ CompactOpen.gen t u :=
Set.ext fun f => (iff_of_eq (congr_arg (· ⊆ u) (image_union f s t))).trans union_subset_iff
#align continuous_map.gen_union ContinuousMap.gen_union
-/- warning: continuous_map.gen_empty_right -> ContinuousMap.gen_empty_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Eq.{succ (max u1 u2)} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s (EmptyCollection.emptyCollection.{u2} (Set.{u2} β) (Set.hasEmptyc.{u2} β))) (EmptyCollection.emptyCollection.{max u1 u2} (Set.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Set.hasEmptyc.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {s : Set.{u2} α}, (Set.Nonempty.{u2} α s) -> (Eq.{max (succ u2) (succ u1)} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} β) (Set.instEmptyCollectionSet.{u1} β))) (EmptyCollection.emptyCollection.{max u2 u1} (Set.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Set.instEmptyCollectionSet.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.gen_empty_right ContinuousMap.gen_empty_rightₓ'. -/
theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set β) = ∅ :=
eq_empty_of_forall_not_mem fun f => (h.image _).not_subset_empty
#align continuous_map.gen_empty_right ContinuousMap.gen_empty_right
@@ -121,12 +97,6 @@ instance compactOpen : TopologicalSpace C(α, β) :=
#align continuous_map.compact_open ContinuousMap.compactOpen
-/
-/- warning: continuous_map.is_open_gen -> ContinuousMap.isOpen_gen is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {s : Set.{u1} α}, (IsCompact.{u1} α _inst_1 s) -> (forall {u : Set.{u2} β}, (IsOpen.{u2} β _inst_2 u) -> (IsOpen.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.CompactOpen.gen.{u1, u2} α β _inst_1 _inst_2 s u)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {s : Set.{u2} α}, (IsCompact.{u2} α _inst_1 s) -> (forall {u : Set.{u1} β}, (IsOpen.{u1} β _inst_2 u) -> (IsOpen.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.CompactOpen.gen.{u2, u1} α β _inst_1 _inst_2 s u)))
-Case conversion may be inaccurate. Consider using '#align continuous_map.is_open_gen ContinuousMap.isOpen_genₓ'. -/
protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
IsOpen (CompactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_set_of_eq] <;> tauto)
@@ -143,12 +113,6 @@ private theorem preimage_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu :
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
rw [image_comp, image_subset_iff]
-/- warning: continuous_map.continuous_comp -> ContinuousMap.continuous_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (g : ContinuousMap.{u2, u3} β γ _inst_2 _inst_3), Continuous.{max u1 u2, max u1 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u3} α γ _inst_1 _inst_3) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u3} α γ _inst_1 _inst_3) (ContinuousMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g)
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] (g : ContinuousMap.{u2, u1} β γ _inst_2 _inst_3), Continuous.{max u3 u2, max u3 u1} (ContinuousMap.{u3, u2} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} α γ _inst_1 _inst_3) (ContinuousMap.compactOpen.{u3, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u3, u1} α γ _inst_1 _inst_3) (ContinuousMap.comp.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 g)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_comp ContinuousMap.continuous_compₓ'. -/
/-- C(α, -) is a functor. -/
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
@@ -164,24 +128,12 @@ private theorem image_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsO
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
rw [Set.image_comp]
-/- warning: continuous_map.continuous_comp_left -> ContinuousMap.continuous_comp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Continuous.{max u2 u3, max u1 u3} (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) (ContinuousMap.{u1, u3} α γ _inst_1 _inst_3) (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3) (ContinuousMap.compactOpen.{u1, u3} α γ _inst_1 _inst_3) (fun (g : ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) => ContinuousMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : ContinuousMap.{u1, u3} α β _inst_1 _inst_2), Continuous.{max u3 u2, max u1 u2} (ContinuousMap.{u3, u2} β γ _inst_2 _inst_3) (ContinuousMap.{u1, u2} α γ _inst_1 _inst_3) (ContinuousMap.compactOpen.{u3, u2} β γ _inst_2 _inst_3) (ContinuousMap.compactOpen.{u1, u2} α γ _inst_1 _inst_3) (fun (g : ContinuousMap.{u3, u2} β γ _inst_2 _inst_3) => ContinuousMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_leftₓ'. -/
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by rw [hm, image_gen f hs hu];
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
-/- warning: continuous_map.continuous_comp' -> ContinuousMap.continuous_comp' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u2} β _inst_2], Continuous.{max (max u1 u2) u2 u3, max u1 u3} (Prod.{max u1 u2, max u2 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{max u1 u2, max u2 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{u1, u3} α γ _inst_1 _inst_3) (fun (x : Prod.{max u1 u2, max u2 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)) => ContinuousMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 (Prod.snd.{max u1 u2, max u2 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) x) (Prod.fst.{max u1 u2, max u2 u3} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] [_inst_4 : LocallyCompactSpace.{u3} β _inst_2], Continuous.{max (max u2 u3) u1, max u1 u2} (Prod.{max u3 u2, max u1 u3} (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3)) (ContinuousMap.{u2, u1} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{max u2 u3, max u3 u1} (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) (ContinuousMap.compactOpen.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{u2, u1} α γ _inst_1 _inst_3) (fun (x : Prod.{max u3 u2, max u1 u3} (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3)) => ContinuousMap.comp.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3 (Prod.snd.{max u2 u3, max u3 u1} (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) x) (Prod.fst.{max u2 u3, max u3 u1} (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) x))
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'ₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- Composition is a continuous map from `C(α, β) × C(β, γ)` to `C(α, γ)`, provided that `β` is
locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
@@ -205,12 +157,6 @@ theorem continuous_comp' [LocallyCompactSpace β] :
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-/- warning: continuous_map.continuous.comp' -> ContinuousMap.continuous.comp' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {X : Type.{u4}} [_inst_4 : TopologicalSpace.{u4} X] [_inst_5 : LocallyCompactSpace.{u2} β _inst_2] {f : X -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)} {g : X -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)}, (Continuous.{u4, max u1 u2} X (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_4 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f) -> (Continuous.{u4, max u2 u3} X (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_4 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3) g) -> (Continuous.{u4, max u1 u3} X (ContinuousMap.{u1, u3} α γ _inst_1 _inst_3) _inst_4 (ContinuousMap.compactOpen.{u1, u3} α γ _inst_1 _inst_3) (fun (x : X) => ContinuousMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 (g x) (f x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] {X : Type.{u4}} [_inst_4 : TopologicalSpace.{u4} X] [_inst_5 : LocallyCompactSpace.{u3} β _inst_2] {f : X -> (ContinuousMap.{u2, u3} α β _inst_1 _inst_2)} {g : X -> (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3)}, (Continuous.{u4, max u2 u3} X (ContinuousMap.{u2, u3} α β _inst_1 _inst_2) _inst_4 (ContinuousMap.compactOpen.{u2, u3} α β _inst_1 _inst_2) f) -> (Continuous.{u4, max u3 u1} X (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_4 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3) g) -> (Continuous.{u4, max u1 u2} X (ContinuousMap.{u2, u1} α γ _inst_1 _inst_3) _inst_4 (ContinuousMap.compactOpen.{u2, u1} α γ _inst_1 _inst_3) (fun (x : X) => ContinuousMap.comp.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3 (g x) (f x)))
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous.comp' ContinuousMap.continuous.comp'ₓ'. -/
theorem continuous.comp' {X : Type _} [TopologicalSpace X] [LocallyCompactSpace β] {f : X → C(α, β)}
{g : X → C(β, γ)} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
@@ -223,12 +169,6 @@ section Ev
variable {α β}
-/- warning: continuous_map.continuous_eval' -> ContinuousMap.continuous_eval' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1], Continuous.{max u1 u2, u2} (Prod.{max u1 u2, u1} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) α) β (Prod.topologicalSpace.{max u1 u2, u1} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) α (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_1) _inst_2 (fun (p : Prod.{max u1 u2, u1} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) α) => coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (Prod.fst.{max u1 u2, u1} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) α p) (Prod.snd.{max u1 u2, u1} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) α p))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : LocallyCompactSpace.{u2} α _inst_1], Continuous.{max u2 u1, u1} (Prod.{max u1 u2, u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α) β (instTopologicalSpaceProd.{max u2 u1, u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_1) _inst_2 (fun (p : Prod.{max u1 u2, u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α) => FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Prod.fst.{max u2 u1, u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α p) (Prod.snd.{max u2 u1, u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α p))
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'ₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- The evaluation map `C(α, β) × α → β` is continuous if `α` is locally compact.
@@ -253,24 +193,12 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
-/- warning: continuous_map.continuous_eval_const' -> ContinuousMap.continuous_eval_const' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1] (a : α), Continuous.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2 (fun (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f a)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : LocallyCompactSpace.{u2} α _inst_1] (a : α), Continuous.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) a) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2 (fun (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) f a)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const'ₓ'. -/
/-- See also `continuous_map.continuous_eval_const` -/
theorem continuous_eval_const' [LocallyCompactSpace α] (a : α) :
Continuous fun f : C(α, β) => f a :=
continuous_eval'.comp (continuous_id.prod_mk continuous_const)
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const'
-/- warning: continuous_map.continuous_coe' -> ContinuousMap.continuous_coe' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1], Continuous.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (α -> β) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (Pi.topologicalSpace.{u1, u2} α (fun (ᾰ : α) => β) (fun (a : α) => _inst_2)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (ᾰ : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : LocallyCompactSpace.{u2} α _inst_1], Continuous.{max u1 u2, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (α -> β) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (Pi.topologicalSpace.{u2, u1} α (fun (ᾰ : α) => β) (fun (a : α) => _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (ᾰ : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) ᾰ) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_coe' ContinuousMap.continuous_coe'ₓ'. -/
/-- See also `continuous_map.continuous_coe` -/
theorem continuous_coe' [LocallyCompactSpace α] : @Continuous C(α, β) (α → β) _ _ coeFn :=
continuous_pi continuous_eval_const'
@@ -295,12 +223,6 @@ end Ev
section InfInduced
-/- warning: continuous_map.compact_open_le_induced -> ContinuousMap.compactOpen_le_induced is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α), LE.le.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.partialOrder.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α), LE.le.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instPartialOrderTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (TopologicalSpace.induced.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2))
-Case conversion may be inaccurate. Consider using '#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_inducedₓ'. -/
theorem compactOpen_le_induced (s : Set α) :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) ≤
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen :=
@@ -314,12 +236,6 @@ theorem compactOpen_le_induced (s : Set α) :
rw [image_comp f (coe : s → α)]
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
-/- warning: continuous_map.compact_open_eq_Inf_induced -> ContinuousMap.compactOpen_eq_sInf_induced is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Eq.{succ (max u1 u2)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (iInf.{max u1 u2, succ u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{max u1 u2, 0} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β], Eq.{max (succ u2) (succ u1)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (iInf.{max u2 u1, succ u2} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => iInf.{max u2 u1, 0} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => TopologicalSpace.induced.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_inducedₓ'. -/
/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
@@ -342,59 +258,29 @@ theorem compactOpen_eq_sInf_induced :
simp
#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
-/- warning: continuous_map.continuous_restrict -> ContinuousMap.continuous_restrict is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α), Continuous.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (fun (F : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s F)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α), Continuous.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (fun (F : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s F)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_restrict ContinuousMap.continuous_restrictₓ'. -/
/-- For any subset `s` of `α`, the restriction of continuous functions to `s` is continuous as a
function from `C(α, β)` to `C(s, β)` with their respective compact-open topologies. -/
theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.restrict s := by
rw [continuous_iff_le_induced]; exact compact_open_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-/- warning: continuous_map.nhds_compact_open_eq_Inf_nhds_induced -> ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f) (iInf.{max u1 u2, succ u1} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{max u1 u2, 0} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => Filter.comap.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s f)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f) (iInf.{max u2 u1, succ u2} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => iInf.{max u2 u1, 0} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => Filter.comap.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f)))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_inducedₓ'. -/
theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced]
#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
-/- warning: continuous_map.tendsto_compact_open_restrict -> ContinuousMap.tendsto_compactOpen_restrict is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {ι : Type.{u3}} {l : Filter.{u3} ι} {F : ι -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)} {f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2}, (Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) F l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f)) -> (forall (s : Set.{u1} α), Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s f)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {ι : Type.{u3}} {l : Filter.{u3} ι} {F : ι -> (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)} {f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2}, (Filter.Tendsto.{u3, max u2 u1} ι (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) F l (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f)) -> (forall (s : Set.{u2} α), Filter.Tendsto.{u3, max u2 u1} ι (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f)))
-Case conversion may be inaccurate. Consider using '#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrictₓ'. -/
theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
(hFf : Filter.Tendsto F l (𝓝 f)) (s : Set α) :
Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
(continuous_restrict s).ContinuousAt.Tendsto.comp hFf
#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrict
-/- warning: continuous_map.tendsto_compact_open_iff_forall -> ContinuousMap.tendsto_compactOpen_iff_forall is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {ι : Type.{u3}} {l : Filter.{u3} ι} (F : ι -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Iff (Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) F l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f)) (forall (s : Set.{u1} α), (IsCompact.{u1} α _inst_1 s) -> (Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s f))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {ι : Type.{u3}} {l : Filter.{u3} ι} (F : ι -> (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Iff (Filter.Tendsto.{u3, max u2 u1} ι (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) F l (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f)) (forall (s : Set.{u2} α), (IsCompact.{u2} α _inst_1 s) -> (Filter.Tendsto.{u3, max u2 u1} ι (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forallₓ'. -/
theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
by rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
-/- warning: continuous_map.exists_tendsto_compact_open_iff_forall -> ContinuousMap.exists_tendsto_compactOpen_iff_forall is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1] [_inst_5 : T2Space.{u1} α _inst_1] [_inst_6 : T2Space.{u2} β _inst_2] {ι : Type.{u3}} {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] (F : ι -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)), Iff (Exists.{max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) F l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f))) (forall (s : Set.{u1} α), (IsCompact.{u1} α _inst_1 s) -> (Exists.{max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (fun (f : ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) => Filter.Tendsto.{u3, max u1 u2} ι (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) f))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : LocallyCompactSpace.{u3} α _inst_1] [_inst_5 : T2Space.{u3} α _inst_1] [_inst_6 : T2Space.{u2} β _inst_2] {ι : Type.{u1}} {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] (F : ι -> (ContinuousMap.{u3, u2} α β _inst_1 _inst_2)), Iff (Exists.{max (succ u3) (succ u2)} (ContinuousMap.{u3, u2} α β _inst_1 _inst_2) (fun (f : ContinuousMap.{u3, u2} α β _inst_1 _inst_2) => Filter.Tendsto.{u1, max u3 u2} ι (ContinuousMap.{u3, u2} α β _inst_1 _inst_2) F l (nhds.{max u3 u2} (ContinuousMap.{u3, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u3, u2} α β _inst_1 _inst_2) f))) (forall (s : Set.{u3} α), (IsCompact.{u3} α _inst_1 s) -> (Exists.{max (succ u3) (succ u2)} (ContinuousMap.{u3, u2} (Set.Elem.{u3} α s) β (instTopologicalSpaceSubtype.{u3} α (fun (x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) _inst_1) _inst_2) (fun (f : ContinuousMap.{u3, u2} (Set.Elem.{u3} α s) β (instTopologicalSpaceSubtype.{u3} α (fun (x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) _inst_1) _inst_2) => Filter.Tendsto.{u1, max u3 u2} ι (ContinuousMap.{u3, u2} (Set.Elem.{u3} α s) β (instTopologicalSpaceSubtype.{u3} α (fun (x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) _inst_1) _inst_2) (fun (i : ι) => ContinuousMap.restrict.{u3, u2} α β _inst_1 _inst_2 s (F i)) l (nhds.{max u3 u2} (ContinuousMap.{u3, u2} (Set.Elem.{u3} α s) β (instTopologicalSpaceSubtype.{u3} α (fun (x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u3, u2} (Set.Elem.{u3} α s) β (instTopologicalSpaceSubtype.{u3} α (fun (x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) _inst_1) _inst_2) f))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.exists_tendsto_compact_open_iff_forall ContinuousMap.exists_tendsto_compactOpen_iff_forallₓ'. -/
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
it converges in the compact-open topology on each compact subset of `α`. -/
theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space α] [T2Space β]
@@ -439,12 +325,6 @@ section Coev
variable (α β)
-/- warning: continuous_map.coev -> ContinuousMap.coev is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) (β : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], β -> (ContinuousMap.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1))
-but is expected to have type
- forall (α : Type.{u1}) (β : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], β -> (ContinuousMap.{u1, max u1 u2} α (Prod.{u2, u1} β α) _inst_1 (instTopologicalSpaceProd.{u2, u1} β α _inst_2 _inst_1))
-Case conversion may be inaccurate. Consider using '#align continuous_map.coev ContinuousMap.coevₓ'. -/
/-- The coevaluation map `β → C(α, β × α)` sending a point `x : β` to the continuous function
on `α` sending `y` to `(x, y)`. -/
def coev (b : β) : C(α, β × α) :=
@@ -453,22 +333,10 @@ def coev (b : β) : C(α, β × α) :=
variable {α β}
-/- warning: continuous_map.image_coev -> ContinuousMap.image_coev is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {y : β} (s : Set.{u1} α), Eq.{succ (max u2 u1)} (Set.{max u2 u1} (Prod.{u2, u1} β α)) (Set.image.{u1, max u2 u1} α (Prod.{u2, u1} β α) (coeFn.{max (succ u1) (succ (max u2 u1)), max (succ u1) (succ (max u2 u1))} (ContinuousMap.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1)) (fun (_x : ContinuousMap.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1)) => α -> (Prod.{u2, u1} β α)) (ContinuousMap.hasCoeToFun.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1)) (ContinuousMap.coev.{u1, u2} α β _inst_1 _inst_2 y)) s) (Set.prod.{u2, u1} β α (Singleton.singleton.{u2, u2} β (Set.{u2} β) (Set.hasSingleton.{u2} β) y) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {y : β} (s : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (Set.{max u2 u1} (Prod.{u1, u2} β α)) (Set.image.{u2, max u2 u1} α (Prod.{u1, u2} β α) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (ContinuousMap.{u2, max u2 u1} α (Prod.{u1, u2} β α) _inst_1 (instTopologicalSpaceProd.{u1, u2} β α _inst_2 _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => Prod.{u1, u2} β α) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, max u2 u1} (ContinuousMap.{u2, max u2 u1} α (Prod.{u1, u2} β α) _inst_1 (instTopologicalSpaceProd.{u1, u2} β α _inst_2 _inst_1)) α (Prod.{u1, u2} β α) _inst_1 (instTopologicalSpaceProd.{u1, u2} β α _inst_2 _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, max u2 u1} α (Prod.{u1, u2} β α) _inst_1 (instTopologicalSpaceProd.{u1, u2} β α _inst_2 _inst_1))) (ContinuousMap.coev.{u2, u1} α β _inst_1 _inst_2 y)) s) (Set.prod.{u1, u2} β α (Singleton.singleton.{u1, u1} β (Set.{u1} β) (Set.instSingletonSet.{u1} β) y) s)
-Case conversion may be inaccurate. Consider using '#align continuous_map.image_coev ContinuousMap.image_coevₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem image_coev {y : β} (s : Set α) : coev α β y '' s = ({y} : Set β) ×ˢ s := by tidy
#align continuous_map.image_coev ContinuousMap.image_coev
-/- warning: continuous_map.continuous_coev -> ContinuousMap.continuous_coev is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Continuous.{u2, max u2 u1} β (ContinuousMap.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1)) _inst_2 (ContinuousMap.compactOpen.{u1, max u2 u1} α (Prod.{u2, u1} β α) _inst_1 (Prod.topologicalSpace.{u2, u1} β α _inst_2 _inst_1)) (ContinuousMap.coev.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Continuous.{u2, max u1 u2} β (ContinuousMap.{u1, max u1 u2} α (Prod.{u2, u1} β α) _inst_1 (instTopologicalSpaceProd.{u2, u1} β α _inst_2 _inst_1)) _inst_2 (ContinuousMap.compactOpen.{u1, max u1 u2} α (Prod.{u2, u1} β α) _inst_1 (instTopologicalSpaceProd.{u2, u1} β α _inst_2 _inst_1)) (ContinuousMap.coev.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_coev ContinuousMap.continuous_coevₓ'. -/
-- The coevaluation map β → C(α, β × α) is continuous (always).
theorem continuous_coev : Continuous (coev α β) :=
continuous_generateFrom <| by
@@ -489,35 +357,17 @@ end Coev
section Curry
-/- warning: continuous_map.curry' -> ContinuousMap.curry' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ], (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) -> α -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ], (ContinuousMap.{max u2 u1, u3} (Prod.{u1, u2} α β) γ (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) _inst_3) -> α -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)
-Case conversion may be inaccurate. Consider using '#align continuous_map.curry' ContinuousMap.curry'ₓ'. -/
/-- Auxiliary definition, see `continuous_map.curry` and `homeomorph.curry`. -/
def curry' (f : C(α × β, γ)) (a : α) : C(β, γ) :=
⟨Function.curry f a⟩
#align continuous_map.curry' ContinuousMap.curry'
-/- warning: continuous_map.continuous_curry' -> ContinuousMap.continuous_curry' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3), Continuous.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3) (ContinuousMap.curry'.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (f : ContinuousMap.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3), Continuous.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3) (ContinuousMap.curry'.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3 f)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'ₓ'. -/
/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
theorem continuous_curry' (f : C(α × β, γ)) : Continuous (curry' f) :=
have hf : curry' f = ContinuousMap.comp f ∘ coev _ _ := by ext; rfl
hf ▸ Continuous.comp (continuous_comp f) continuous_coev
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
-/- warning: continuous_map.continuous_of_continuous_uncurry -> ContinuousMap.continuous_of_continuous_uncurry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : α -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)), (Continuous.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} α β γ (fun (x : α) (y : β) => coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) (f x) y))) -> (Continuous.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3) f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : α -> (ContinuousMap.{u3, u2} β γ _inst_2 _inst_3)), (Continuous.{max u3 u1, u2} (Prod.{u1, u3} α β) γ (instTopologicalSpaceProd.{u1, u3} α β _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u3, u2} α β γ (fun (x : α) (y : β) => FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (ContinuousMap.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u2, u3, u2} (ContinuousMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousMap.instContinuousMapClassContinuousMap.{u3, u2} β γ _inst_2 _inst_3)) (f x) y))) -> (Continuous.{u1, max u3 u2} α (ContinuousMap.{u3, u2} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u2} β γ _inst_2 _inst_3) f)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurryₓ'. -/
/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
`α × β → γ` is continuous. -/
theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
@@ -525,12 +375,6 @@ theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
convert continuous_curry' ⟨_, h⟩; ext; rfl
#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurry
-/- warning: continuous_map.curry -> ContinuousMap.curry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ], (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) -> (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ], (ContinuousMap.{max u2 u1, u3} (Prod.{u1, u2} α β) γ (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) _inst_3) -> (ContinuousMap.{u1, max u3 u2} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3))
-Case conversion may be inaccurate. Consider using '#align continuous_map.curry ContinuousMap.curryₓ'. -/
/-- The curried form of a continuous map `α × β → γ` as a continuous map `α → C(β, γ)`.
If `a × β` is locally compact, this is continuous. If `α` and `β` are both locally
compact, then this is a homeomorphism, see `homeomorph.curry`. -/
@@ -538,12 +382,6 @@ def curry (f : C(α × β, γ)) : C(α, C(β, γ)) :=
⟨_, continuous_curry' f⟩
#align continuous_map.curry ContinuousMap.curry
-/- warning: continuous_map.continuous_curry -> ContinuousMap.continuous_curry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{max u1 u2} (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2)], Continuous.{max (max u1 u2) u3, max u1 u2 u3} (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.curry.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] [_inst_4 : LocallyCompactSpace.{max u3 u2} (Prod.{u2, u3} α β) (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2)], Continuous.{max (max u2 u3) u1, max (max u2 u3) u1} (ContinuousMap.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u2 u3, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u2, max u3 u1} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) (ContinuousMap.curry.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_curry ContinuousMap.continuous_curryₓ'. -/
/-- The currying process is a continuous map between function spaces. -/
theorem continuous_curry [LocallyCompactSpace (α × β)] :
Continuous (curry : C(α × β, γ) → C(α, C(β, γ))) :=
@@ -554,35 +392,17 @@ theorem continuous_curry [LocallyCompactSpace (α × β)] :
convert continuous_eval' <;> tidy
#align continuous_map.continuous_curry ContinuousMap.continuous_curry
-/- warning: continuous_map.curry_apply -> ContinuousMap.curry_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (a : α) (b : β), Eq.{succ u3} γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (fun (_x : ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) => α -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.hasCoeToFun.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.curry.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f) a) b) (coeFn.{max (succ (max u1 u2)) (succ u3), max (succ (max u1 u2)) (succ u3)} (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (fun (_x : ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) => (Prod.{u1, u2} α β) -> γ) (ContinuousMap.hasCoeToFun.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) f (Prod.mk.{u1, u2} α β a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (f : ContinuousMap.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3) (a : α) (b : β), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) b) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) a) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u1, u3, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) a) β γ _inst_2 _inst_3 (ContinuousMap.instContinuousMapClassContinuousMap.{u3, u1} β γ _inst_2 _inst_3)) (FunLike.coe.{max (max (succ u2) (succ u3)) (succ u1), succ u2, max (succ u3) (succ u1)} (ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _x) (ContinuousMapClass.toFunLike.{max (max u2 u3) u1, u2, max u3 u1} (ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, max u3 u1} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3))) (ContinuousMap.curry.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3 f) a) b) (FunLike.coe.{max (max (succ u2) (succ u3)) (succ u1), max (succ u2) (succ u3), succ u1} (ContinuousMap.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3) (Prod.{u2, u3} α β) (fun (_x : Prod.{u2, u3} α β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : Prod.{u2, u3} α β) => γ) _x) (ContinuousMapClass.toFunLike.{max (max u2 u3) u1, max u2 u3, u1} (ContinuousMap.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3) (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3 (ContinuousMap.instContinuousMapClassContinuousMap.{max u2 u3, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3)) f (Prod.mk.{u2, u3} α β a b))
-Case conversion may be inaccurate. Consider using '#align continuous_map.curry_apply ContinuousMap.curry_applyₓ'. -/
@[simp]
theorem curry_apply (f : C(α × β, γ)) (a : α) (b : β) : f.curry a b = f (a, b) :=
rfl
#align continuous_map.curry_apply ContinuousMap.curry_apply
-/- warning: continuous_map.continuous_uncurry_of_continuous -> ContinuousMap.continuous_uncurry_of_continuous is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u2} β _inst_2] (f : ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)), Continuous.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3 (Function.uncurry.{u1, u2, u3} α β γ (fun (x : α) (y : β) => coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) (coeFn.{max (succ u1) (succ (max u2 u3)), max (succ u1) (succ (max u2 u3))} (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (fun (_x : ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) => α -> (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.hasCoeToFun.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) f x) y))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] [_inst_4 : LocallyCompactSpace.{u3} β _inst_2] (f : ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)), Continuous.{max u3 u2, u1} (Prod.{u2, u3} α β) γ (instTopologicalSpaceProd.{u2, u3} α β _inst_1 _inst_2) _inst_3 (Function.uncurry.{u2, u3, u1} α β γ (fun (x : α) (y : β) => FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) x) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u1, u3, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) x) β γ _inst_2 _inst_3 (ContinuousMap.instContinuousMapClassContinuousMap.{u3, u1} β γ _inst_2 _inst_3)) (FunLike.coe.{max (max (succ u2) (succ u3)) (succ u1), succ u2, max (succ u3) (succ u1)} (ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _x) (ContinuousMapClass.toFunLike.{max (max u2 u3) u1, u2, max u3 u1} (ContinuousMap.{u2, max u1 u3} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3)) α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, max u3 u1} α (ContinuousMap.{u3, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u3, u1} β γ _inst_2 _inst_3))) f x) y))
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuousₓ'. -/
/-- The uncurried form of a continuous map `α → C(β, γ)` is a continuous map `α × β → γ`. -/
theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(β, γ))) :
Continuous (Function.uncurry fun x y => f x y) :=
continuous_eval'.comp <| f.Continuous.Prod_map continuous_id
#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuous
-/- warning: continuous_map.uncurry -> ContinuousMap.uncurry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u2} β _inst_2], (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) -> (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u2} β _inst_2], (ContinuousMap.{u1, max u3 u2} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) -> (ContinuousMap.{max u2 u1, u3} (Prod.{u1, u2} α β) γ (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) _inst_3)
-Case conversion may be inaccurate. Consider using '#align continuous_map.uncurry ContinuousMap.uncurryₓ'. -/
/-- The uncurried form of a continuous map `α → C(β, γ)` as a continuous map `α × β → γ` (if `β` is
locally compact). If `α` is also locally compact, then this is a homeomorphism between the two
function spaces, see `homeomorph.curry`. -/
@@ -591,12 +411,6 @@ def uncurry [LocallyCompactSpace β] (f : C(α, C(β, γ))) : C(α × β, γ) :=
⟨_, continuous_uncurry_of_continuous f⟩
#align continuous_map.uncurry ContinuousMap.uncurry
-/- warning: continuous_map.continuous_uncurry -> ContinuousMap.continuous_uncurry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1] [_inst_5 : LocallyCompactSpace.{u2} β _inst_2], Continuous.{max u1 u2 u3, max (max u1 u2) u3} (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.uncurry.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 _inst_5)
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] [_inst_4 : LocallyCompactSpace.{u3} α _inst_1] [_inst_5 : LocallyCompactSpace.{u2} β _inst_2], Continuous.{max (max u3 u2) u1, max (max u3 u2) u1} (ContinuousMap.{u3, max u1 u2} α (ContinuousMap.{u2, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u1} β γ _inst_2 _inst_3)) (ContinuousMap.{max u2 u3, u1} (Prod.{u3, u2} α β) γ (instTopologicalSpaceProd.{u3, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u3, max u2 u1} α (ContinuousMap.{u2, u1} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u1} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u3 u2, u1} (Prod.{u3, u2} α β) γ (instTopologicalSpaceProd.{u3, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.uncurry.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 _inst_5)
-Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_uncurry ContinuousMap.continuous_uncurryₓ'. -/
/-- The uncurrying process is a continuous map between function spaces. -/
theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
Continuous (uncurry : C(α, C(β, γ)) → C(α × β, γ)) :=
@@ -614,12 +428,6 @@ def const' : C(β, C(α, β)) :=
#align continuous_map.const' ContinuousMap.const'
-/
-/- warning: continuous_map.coe_const' -> ContinuousMap.coe_const' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Eq.{max (succ u1) (succ u2)} ((fun (_x : ContinuousMap.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) => β -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.const'.{u1, u2} α β _inst_1 _inst_2)) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ u2) (succ (max u1 u2))} (ContinuousMap.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (fun (_x : ContinuousMap.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) => β -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.hasCoeToFun.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.const'.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.const.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β], Eq.{max (succ u2) (succ u1)} (forall (a : β), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (ContinuousMap.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u1, max u1 u2} (ContinuousMap.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.instContinuousMapClassContinuousMap.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2))) (ContinuousMap.const'.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.const.{u2, u1} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align continuous_map.coe_const' ContinuousMap.coe_const'ₓ'. -/
@[simp]
theorem coe_const' : (const' : β → C(α, β)) = const α :=
rfl
@@ -645,12 +453,6 @@ variable {α : Type _} {β : Type _} {γ : Type _}
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
-/- warning: homeomorph.curry -> Homeomorph.curry is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1] [_inst_5 : LocallyCompactSpace.{u2} β _inst_2], Homeomorph.{max (max u1 u2) u3, max u1 u2 u3} (ContinuousMap.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (Prod.topologicalSpace.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : LocallyCompactSpace.{u1} α _inst_1] [_inst_5 : LocallyCompactSpace.{u2} β _inst_2], Homeomorph.{max u3 u2 u1, max (max u3 u2) u1} (ContinuousMap.{max u2 u1, u3} (Prod.{u1, u2} α β) γ (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.{u1, max u3 u2} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3)) (ContinuousMap.compactOpen.{max u1 u2, u3} (Prod.{u1, u2} α β) γ (instTopologicalSpaceProd.{u1, u2} α β _inst_1 _inst_2) _inst_3) (ContinuousMap.compactOpen.{u1, max u2 u3} α (ContinuousMap.{u2, u3} β γ _inst_2 _inst_3) _inst_1 (ContinuousMap.compactOpen.{u2, u3} β γ _inst_2 _inst_3))
-Case conversion may be inaccurate. Consider using '#align homeomorph.curry Homeomorph.curryₓ'. -/
/-- Currying as a homeomorphism between the function spaces `C(α × β, γ)` and `C(α, C(β, γ))`. -/
def curry [LocallyCompactSpace α] [LocallyCompactSpace β] : C(α × β, γ) ≃ₜ C(α, C(β, γ)) :=
⟨⟨curry, uncurry, by tidy, by tidy⟩, continuous_curry, continuous_uncurry⟩
@@ -669,23 +471,11 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
-/
-/- warning: homeomorph.continuous_map_of_unique_apply -> Homeomorph.continuousMapOfUnique_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : Unique.{succ u1} α] (b : β) (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ u2) (succ (max u1 u2))} (Homeomorph.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (fun (_x : Homeomorph.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) => β -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Homeomorph.hasCoeToFun.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (Homeomorph.continuousMapOfUnique.{u1, u2} α β _inst_1 _inst_2 _inst_4) b) a) b
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (b : β) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (FunLike.coe.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (fun (_x : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (EmbeddingLike.toFunLike.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (EquivLike.toEmbeddingLike.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.instEquivLikeHomeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)))) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4) b) a) b
-Case conversion may be inaccurate. Consider using '#align homeomorph.continuous_map_of_unique_apply Homeomorph.continuousMapOfUnique_applyₓ'. -/
@[simp]
theorem continuousMapOfUnique_apply [Unique α] (b : β) (a : α) : continuousMapOfUnique b a = b :=
rfl
#align homeomorph.continuous_map_of_unique_apply Homeomorph.continuousMapOfUnique_apply
-/- warning: homeomorph.continuous_map_of_unique_symm_apply -> Homeomorph.continuousMapOfUnique_symm_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : Unique.{succ u1} α] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Eq.{succ u2} β (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Homeomorph.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) (fun (_x : Homeomorph.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) => (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) -> β) (Homeomorph.hasCoeToFun.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) (Homeomorph.symm.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (Homeomorph.continuousMapOfUnique.{u1, u2} α β _inst_1 _inst_2 _inst_4)) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f (Inhabited.default.{succ u1} α (Unique.inhabited.{succ u1} α _inst_4)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u1} β (FunLike.coe.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => β) (EmbeddingLike.toFunLike.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (EquivLike.toEmbeddingLike.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (Homeomorph.instEquivLikeHomeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2))) (Homeomorph.symm.{u1, max u2 u1} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) f (Inhabited.default.{succ u2} α (Unique.instInhabited.{succ u2} α _inst_4)))
-Case conversion may be inaccurate. Consider using '#align homeomorph.continuous_map_of_unique_symm_apply Homeomorph.continuousMapOfUnique_symm_applyₓ'. -/
@[simp]
theorem continuousMapOfUnique_symm_apply [Unique α] (f : C(α, β)) :
continuousMapOfUnique.symm f = f default :=
@@ -699,12 +489,6 @@ section QuotientMap
variable {X₀ X Y Z : Type _} [TopologicalSpace X₀] [TopologicalSpace X] [TopologicalSpace Y]
[TopologicalSpace Z] [LocallyCompactSpace Y] {f : X₀ → X}
-/- warning: quotient_map.continuous_lift_prod_left -> QuotientMap.continuous_lift_prod_left is a dubious translation:
-lean 3 declaration is
- forall {X₀ : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} {Z : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} X₀] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : TopologicalSpace.{u4} Z] [_inst_5 : LocallyCompactSpace.{u3} Y _inst_3] {f : X₀ -> X}, (QuotientMap.{u1, u2} X₀ X _inst_1 _inst_2 f) -> (forall {g : (Prod.{u2, u3} X Y) -> Z}, (Continuous.{max u1 u3, u4} (Prod.{u1, u3} X₀ Y) Z (Prod.topologicalSpace.{u1, u3} X₀ Y _inst_1 _inst_3) _inst_4 (fun (p : Prod.{u1, u3} X₀ Y) => g (Prod.mk.{u2, u3} X Y (f (Prod.fst.{u1, u3} X₀ Y p)) (Prod.snd.{u1, u3} X₀ Y p)))) -> (Continuous.{max u2 u3, u4} (Prod.{u2, u3} X Y) Z (Prod.topologicalSpace.{u2, u3} X Y _inst_2 _inst_3) _inst_4 g))
-but is expected to have type
- forall {X₀ : Type.{u4}} {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} X₀] [_inst_2 : TopologicalSpace.{u3} X] [_inst_3 : TopologicalSpace.{u2} Y] [_inst_4 : TopologicalSpace.{u1} Z] [_inst_5 : LocallyCompactSpace.{u2} Y _inst_3] {f : X₀ -> X}, (QuotientMap.{u4, u3} X₀ X _inst_1 _inst_2 f) -> (forall {g : (Prod.{u3, u2} X Y) -> Z}, (Continuous.{max u4 u2, u1} (Prod.{u4, u2} X₀ Y) Z (instTopologicalSpaceProd.{u4, u2} X₀ Y _inst_1 _inst_3) _inst_4 (fun (p : Prod.{u4, u2} X₀ Y) => g (Prod.mk.{u3, u2} X Y (f (Prod.fst.{u4, u2} X₀ Y p)) (Prod.snd.{u4, u2} X₀ Y p)))) -> (Continuous.{max u3 u2, u1} (Prod.{u3, u2} X Y) Z (instTopologicalSpaceProd.{u3, u2} X Y _inst_2 _inst_3) _inst_4 g))
-Case conversion may be inaccurate. Consider using '#align quotient_map.continuous_lift_prod_left QuotientMap.continuous_lift_prod_leftₓ'. -/
theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y → Z}
(hg : Continuous fun p : X₀ × Y => g (f p.1, p.2)) : Continuous g :=
by
@@ -724,12 +508,6 @@ theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y
rfl
#align quotient_map.continuous_lift_prod_left QuotientMap.continuous_lift_prod_left
-/- warning: quotient_map.continuous_lift_prod_right -> QuotientMap.continuous_lift_prod_right is a dubious translation:
-lean 3 declaration is
- forall {X₀ : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} {Z : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} X₀] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : TopologicalSpace.{u4} Z] [_inst_5 : LocallyCompactSpace.{u3} Y _inst_3] {f : X₀ -> X}, (QuotientMap.{u1, u2} X₀ X _inst_1 _inst_2 f) -> (forall {g : (Prod.{u3, u2} Y X) -> Z}, (Continuous.{max u3 u1, u4} (Prod.{u3, u1} Y X₀) Z (Prod.topologicalSpace.{u3, u1} Y X₀ _inst_3 _inst_1) _inst_4 (fun (p : Prod.{u3, u1} Y X₀) => g (Prod.mk.{u3, u2} Y X (Prod.fst.{u3, u1} Y X₀ p) (f (Prod.snd.{u3, u1} Y X₀ p))))) -> (Continuous.{max u3 u2, u4} (Prod.{u3, u2} Y X) Z (Prod.topologicalSpace.{u3, u2} Y X _inst_3 _inst_2) _inst_4 g))
-but is expected to have type
- forall {X₀ : Type.{u4}} {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} X₀] [_inst_2 : TopologicalSpace.{u3} X] [_inst_3 : TopologicalSpace.{u2} Y] [_inst_4 : TopologicalSpace.{u1} Z] [_inst_5 : LocallyCompactSpace.{u2} Y _inst_3] {f : X₀ -> X}, (QuotientMap.{u4, u3} X₀ X _inst_1 _inst_2 f) -> (forall {g : (Prod.{u2, u3} Y X) -> Z}, (Continuous.{max u4 u2, u1} (Prod.{u2, u4} Y X₀) Z (instTopologicalSpaceProd.{u2, u4} Y X₀ _inst_3 _inst_1) _inst_4 (fun (p : Prod.{u2, u4} Y X₀) => g (Prod.mk.{u2, u3} Y X (Prod.fst.{u2, u4} Y X₀ p) (f (Prod.snd.{u2, u4} Y X₀ p))))) -> (Continuous.{max u3 u2, u1} (Prod.{u2, u3} Y X) Z (instTopologicalSpaceProd.{u2, u3} Y X _inst_3 _inst_2) _inst_4 g))
-Case conversion may be inaccurate. Consider using '#align quotient_map.continuous_lift_prod_right QuotientMap.continuous_lift_prod_rightₓ'. -/
theorem QuotientMap.continuous_lift_prod_right (hf : QuotientMap f) {g : Y × X → Z}
(hg : Continuous fun p : Y × X₀ => g (p.1, f p.2)) : Continuous g :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -172,9 +172,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_leftₓ'. -/
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
- continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ =>
- by
- rw [hm, image_gen f hs hu]
+ continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by rw [hm, image_gen f hs hu];
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
@@ -352,10 +350,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_restrict ContinuousMap.continuous_restrictₓ'. -/
/-- For any subset `s` of `α`, the restriction of continuous functions to `s` is continuous as a
function from `C(α, β)` to `C(s, β)` with their respective compact-open topologies. -/
-theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.restrict s :=
- by
- rw [continuous_iff_le_induced]
- exact compact_open_le_induced s
+theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.restrict s := by
+ rw [continuous_iff_le_induced]; exact compact_open_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
/- warning: continuous_map.nhds_compact_open_eq_Inf_nhds_induced -> ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced is a dubious translation:
@@ -365,10 +361,8 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f) (iInf.{max u2 u1, succ u2} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => iInf.{max u2 u1, 0} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => Filter.comap.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f)))))
Case conversion may be inaccurate. Consider using '#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_inducedₓ'. -/
theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
- 𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) :=
- by
- rw [compact_open_eq_Inf_induced]
- simp [nhds_iInf, nhds_induced]
+ 𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
+ rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced]
#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
/- warning: continuous_map.tendsto_compact_open_restrict -> ContinuousMap.tendsto_compactOpen_restrict is a dubious translation:
@@ -392,9 +386,7 @@ Case conversion may be inaccurate. Consider using '#align continuous_map.tendsto
theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
- by
- rw [compact_open_eq_Inf_induced]
- simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff]
+ by rw [compact_open_eq_Inf_induced]; simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
/- warning: continuous_map.exists_tendsto_compact_open_iff_forall -> ContinuousMap.exists_tendsto_compactOpen_iff_forall is a dubious translation:
@@ -516,10 +508,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'ₓ'. -/
/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
theorem continuous_curry' (f : C(α × β, γ)) : Continuous (curry' f) :=
- have hf : curry' f = ContinuousMap.comp f ∘ coev _ _ :=
- by
- ext
- rfl
+ have hf : curry' f = ContinuousMap.comp f ∘ coev _ _ := by ext; rfl
hf ▸ Continuous.comp (continuous_comp f) continuous_coev
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
@@ -532,11 +521,8 @@ Case conversion may be inaccurate. Consider using '#align continuous_map.continu
/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
`α × β → γ` is continuous. -/
theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
- (h : Continuous (Function.uncurry fun x y => f x y)) : Continuous f :=
- by
- convert continuous_curry' ⟨_, h⟩
- ext
- rfl
+ (h : Continuous (Function.uncurry fun x y => f x y)) : Continuous f := by
+ convert continuous_curry' ⟨_, h⟩; ext; rfl
#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurry
/- warning: continuous_map.curry -> ContinuousMap.curry is a dubious translation:
@@ -677,10 +663,7 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
toFun := const α
invFun f := f default
left_inv a := rfl
- right_inv f := by
- ext
- rw [Unique.eq_default a]
- rfl
+ right_inv f := by ext; rw [Unique.eq_default a]; rfl
continuous_toFun := continuous_const'
continuous_invFun := continuous_eval'.comp (continuous_id.prod_mk continuous_const)
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -142,7 +142,6 @@ private theorem preimage_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu :
ext ⟨f, _⟩
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
rw [image_comp, image_subset_iff]
-#align continuous_map.preimage_gen continuous_map.preimage_gen
/- warning: continuous_map.continuous_comp -> ContinuousMap.continuous_comp is a dubious translation:
lean 3 declaration is
@@ -164,7 +163,6 @@ private theorem image_gen {s : Set α} (hs : IsCompact s) {u : Set γ} (hu : IsO
ext ⟨g, _⟩
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
rw [Set.image_comp]
-#align continuous_map.image_gen continuous_map.image_gen
/- warning: continuous_map.continuous_comp_left -> ContinuousMap.continuous_comp_left is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -301,7 +301,7 @@ section InfInduced
/- warning: continuous_map.compact_open_le_induced -> ContinuousMap.compactOpen_le_induced is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α), LE.le.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.partialOrder.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : Set.{u1} α), LE.le.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.partialOrder.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : Set.{u2} α), LE.le.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instPartialOrderTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (TopologicalSpace.induced.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2))
Case conversion may be inaccurate. Consider using '#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_inducedₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -318,24 +318,24 @@ theorem compactOpen_le_induced (s : Set α) :
rw [image_comp f (coe : s → α)]
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
-/- warning: continuous_map.compact_open_eq_Inf_induced -> ContinuousMap.compactOpen_eq_infₛ_induced is a dubious translation:
+/- warning: continuous_map.compact_open_eq_Inf_induced -> ContinuousMap.compactOpen_eq_sInf_induced is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Eq.{succ (max u1 u2)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (infᵢ.{max u1 u2, succ u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => infᵢ.{max u1 u2, 0} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Eq.{succ (max u1 u2)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (iInf.{max u1 u2, succ u1} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{max u1 u2, 0} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (TopologicalSpace.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => TopologicalSpace.induced.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β], Eq.{max (succ u2) (succ u1)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (infᵢ.{max u2 u1, succ u2} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => infᵢ.{max u2 u1, 0} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => TopologicalSpace.induced.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_infₛ_inducedₓ'. -/
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β], Eq.{max (succ u2) (succ u1)} (TopologicalSpace.{max u1 u2} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (iInf.{max u2 u1, succ u2} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => iInf.{max u2 u1, 0} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (TopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => TopologicalSpace.induced.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2))))
+Case conversion may be inaccurate. Consider using '#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_inducedₓ'. -/
/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
-theorem compactOpen_eq_infₛ_induced :
+theorem compactOpen_eq_sInf_induced :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) =
⨅ (s : Set α) (hs : IsCompact s),
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen :=
by
refine' le_antisymm _ _
- · refine' le_infᵢ₂ _
+ · refine' le_iInf₂ _
exact fun s hs => compact_open_le_induced s
- simp only [← generateFrom_unionᵢ, induced_generateFrom_eq, ContinuousMap.compactOpen]
+ simp only [← generateFrom_iUnion, induced_generateFrom_eq, ContinuousMap.compactOpen]
apply TopologicalSpace.generateFrom_anti
rintro _ ⟨s, hs, u, hu, rfl⟩
rw [mem_Union₂]
@@ -344,7 +344,7 @@ theorem compactOpen_eq_infₛ_induced :
simp only [compact_open.gen, mem_set_of_eq, mem_preimage, ContinuousMap.coe_restrict]
rw [image_comp f (coe : s → α)]
simp
-#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_infₛ_induced
+#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
/- warning: continuous_map.continuous_restrict -> ContinuousMap.continuous_restrict is a dubious translation:
lean 3 declaration is
@@ -360,18 +360,18 @@ theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.res
exact compact_open_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-/- warning: continuous_map.nhds_compact_open_eq_Inf_nhds_induced -> ContinuousMap.nhds_compactOpen_eq_infₛ_nhds_induced is a dubious translation:
+/- warning: continuous_map.nhds_compact_open_eq_Inf_nhds_induced -> ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f) (infᵢ.{max u1 u2, succ u1} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => infᵢ.{max u1 u2, 0} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => Filter.comap.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s f)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) f) (iInf.{max u1 u2, succ u1} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{max u1 u2, 0} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toHasInf.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u1 u2} (Filter.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Filter.completeLattice.{max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)))) (IsCompact.{u1} α _inst_1 s) (fun (hs : IsCompact.{u1} α _inst_1 s) => Filter.comap.{max u1 u2, max u1 u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s) (nhds.{max u1 u2} (ContinuousMap.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u1, u2} α β _inst_1 _inst_2 s f)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f) (infᵢ.{max u2 u1, succ u2} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => infᵢ.{max u2 u1, 0} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => Filter.comap.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f)))))
-Case conversion may be inaccurate. Consider using '#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_infₛ_nhds_inducedₓ'. -/
-theorem nhds_compactOpen_eq_infₛ_nhds_induced (f : C(α, β)) :
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) f) (iInf.{max u2 u1, succ u2} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (Set.{u2} α) (fun (s : Set.{u2} α) => iInf.{max u2 u1, 0} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (ConditionallyCompleteLattice.toInfSet.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (CompleteLattice.toConditionallyCompleteLattice.{max u2 u1} (Filter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (Filter.instCompleteLatticeFilter.{max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2)))) (IsCompact.{u2} α _inst_1 s) (fun (hs : IsCompact.{u2} α _inst_1 s) => Filter.comap.{max u2 u1, max u2 u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s) (nhds.{max u2 u1} (ContinuousMap.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.compactOpen.{u2, u1} (Set.Elem.{u2} α s) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2) (ContinuousMap.restrict.{u2, u1} α β _inst_1 _inst_2 s f)))))
+Case conversion may be inaccurate. Consider using '#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_inducedₓ'. -/
+theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) :=
by
rw [compact_open_eq_Inf_induced]
- simp [nhds_infᵢ, nhds_induced]
-#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_infₛ_nhds_induced
+ simp [nhds_iInf, nhds_induced]
+#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
/- warning: continuous_map.tendsto_compact_open_restrict -> ContinuousMap.tendsto_compactOpen_restrict is a dubious translation:
lean 3 declaration is
@@ -396,7 +396,7 @@ theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι →
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
by
rw [compact_open_eq_Inf_induced]
- simp [nhds_infᵢ, nhds_induced, Filter.tendsto_comap_iff]
+ simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
/- warning: continuous_map.exists_tendsto_compact_open_iff_forall -> ContinuousMap.exists_tendsto_compactOpen_iff_forall is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -755,7 +755,7 @@ theorem QuotientMap.continuous_lift_prod_right (hf : QuotientMap f) {g : Y × X
have : Continuous fun p : X₀ × Y => g ((Prod.swap p).1, f (Prod.swap p).2) :=
hg.comp continuous_swap
have : Continuous fun p : X₀ × Y => (g ∘ Prod.swap) (f p.1, p.2) := this
- convert (hf.continuous_lift_prod_left this).comp continuous_swap
+ convert(hf.continuous_lift_prod_left this).comp continuous_swap
ext x
simp
#align quotient_map.continuous_lift_prod_right QuotientMap.continuous_lift_prod_right
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -692,7 +692,7 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : Unique.{succ u1} α] (b : β) (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ u2) (succ (max u1 u2))} (Homeomorph.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (fun (_x : Homeomorph.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) => β -> (ContinuousMap.{u1, u2} α β _inst_1 _inst_2)) (Homeomorph.hasCoeToFun.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2)) (Homeomorph.continuousMapOfUnique.{u1, u2} α β _inst_1 _inst_2 _inst_4) b) a) b
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (b : β) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) b) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) b) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (fun (_x : β) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.instEquivLikeHomeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)))) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4) b) a) b
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (b : β) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) (FunLike.coe.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (fun (_x : β) => ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (EmbeddingLike.toFunLike.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (EquivLike.toEmbeddingLike.{max (succ u1) (succ (max u1 u2)), succ u1, succ (max u1 u2)} (Homeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)) β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.instEquivLikeHomeomorph.{u1, max u1 u2} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2)))) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4) b) a) b
Case conversion may be inaccurate. Consider using '#align homeomorph.continuous_map_of_unique_apply Homeomorph.continuousMapOfUnique_applyₓ'. -/
@[simp]
theorem continuousMapOfUnique_apply [Unique α] (b : β) (a : α) : continuousMapOfUnique b a = b :=
@@ -703,7 +703,7 @@ theorem continuousMapOfUnique_apply [Unique α] (b : β) (a : α) : continuousMa
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_4 : Unique.{succ u1} α] (f : ContinuousMap.{u1, u2} α β _inst_1 _inst_2), Eq.{succ u2} β (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Homeomorph.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) (fun (_x : Homeomorph.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) => (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) -> β) (Homeomorph.hasCoeToFun.{max u1 u2, u2} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) _inst_2) (Homeomorph.symm.{u2, max u1 u2} β (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u1, u2} α β _inst_1 _inst_2) (Homeomorph.continuousMapOfUnique.{u1, u2} α β _inst_1 _inst_2 _inst_4)) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f (Inhabited.default.{succ u1} α (Unique.inhabited.{succ u1} α _inst_4)))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => β) f) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (Homeomorph.instEquivLikeHomeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2))) (Homeomorph.symm.{u1, max u2 u1} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) f (Inhabited.default.{succ u2} α (Unique.instInhabited.{succ u2} α _inst_4)))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_4 : Unique.{succ u2} α] (f : ContinuousMap.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u1} β (FunLike.coe.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) (fun (_x : ContinuousMap.{u2, u1} α β _inst_1 _inst_2) => β) (EmbeddingLike.toFunLike.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (EquivLike.toEmbeddingLike.{max (succ (max u2 u1)) (succ u1), succ (max u2 u1), succ u1} (Homeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2) (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (Homeomorph.instEquivLikeHomeomorph.{max u2 u1, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) β (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) _inst_2))) (Homeomorph.symm.{u1, max u2 u1} β (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) _inst_2 (ContinuousMap.compactOpen.{u2, u1} α β _inst_1 _inst_2) (Homeomorph.continuousMapOfUnique.{u2, u1} α β _inst_1 _inst_2 _inst_4)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} α β _inst_1 _inst_2)) f (Inhabited.default.{succ u2} α (Unique.instInhabited.{succ u2} α _inst_4)))
Case conversion may be inaccurate. Consider using '#align homeomorph.continuous_map_of_unique_symm_apply Homeomorph.continuousMapOfUnique_symm_applyₓ'. -/
@[simp]
theorem continuousMapOfUnique_symm_apply [Unique α] (f : C(α, β)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
deprecated
attributeWhy these changes?
@@ -150,7 +150,7 @@ lemma _root_.Continuous.compCM (hg : Continuous g) (hf : Continuous f) :
Continuous fun x => (g x).comp (f x) :=
continuous_comp'.comp (hf.prod_mk hg)
-@[deprecated _root_.Continuous.compCM] -- deprecated on 2024/01/30
+@[deprecated _root_.Continuous.compCM] -- deprecated on 2024-01-30
lemma continuous.comp' (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
hg.compCM hf
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -413,7 +413,6 @@ open ContinuousMap
namespace Homeomorph
variable {X : Type*} {Y : Type*} {Z : Type*}
-
variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
/-- Currying as a homeomorphism between the function spaces `C(X × Y, Z)` and `C(X, C(Y, Z))`. -/
@@ -43,61 +43,27 @@ section CompactOpen
variable {α X Y Z : Type*}
variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {K : Set X} {U : Set Y}
-/-- A generating set for the compact-open topology (when `s` is compact and `u` is open). -/
-def CompactOpen.gen (s : Set X) (u : Set Y) : Set C(X, Y) :=
- { f | f '' s ⊆ u }
-#align continuous_map.compact_open.gen ContinuousMap.CompactOpen.gen
-
-@[simp]
-theorem gen_empty (u : Set Y) : CompactOpen.gen (∅ : Set X) u = Set.univ :=
- Set.ext fun f => iff_true_intro ((congr_arg (· ⊆ u) (image_empty f)).mpr u.empty_subset)
-#align continuous_map.gen_empty ContinuousMap.gen_empty
-
-@[simp]
-theorem gen_univ (s : Set X) : CompactOpen.gen s (Set.univ : Set Y) = Set.univ :=
- Set.ext fun f => iff_true_intro (f '' s).subset_univ
-#align continuous_map.gen_univ ContinuousMap.gen_univ
-
-@[simp]
-theorem gen_inter (s : Set X) (u v : Set Y) :
- CompactOpen.gen s (u ∩ v) = CompactOpen.gen s u ∩ CompactOpen.gen s v :=
- Set.ext fun _ => subset_inter_iff
-#align continuous_map.gen_inter ContinuousMap.gen_inter
-
-@[simp]
-theorem gen_union (s t : Set X) (u : Set Y) :
- CompactOpen.gen (s ∪ t) u = CompactOpen.gen s u ∩ CompactOpen.gen t u :=
- Set.ext fun f => (iff_of_eq (congr_arg (· ⊆ u) (image_union f s t))).trans union_subset_iff
-#align continuous_map.gen_union ContinuousMap.gen_union
-
-theorem gen_empty_right {s : Set X} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set Y) = ∅ :=
- eq_empty_of_forall_not_mem fun _ => (h.image _).not_subset_empty
-#align continuous_map.gen_empty_right ContinuousMap.gen_empty_right
-
--- The compact-open topology on the space of continuous maps X → Y.
+#noalign continuous_map.compact_open.gen
+#noalign continuous_map.gen_empty
+#noalign continuous_map.gen_univ
+#noalign continuous_map.gen_inter
+#noalign continuous_map.gen_union
+#noalign continuous_map.gen_empty_right
+
+/-- The compact-open topology on the space of continuous maps `C(X, Y)`. -/
instance compactOpen : TopologicalSpace C(X, Y) :=
- TopologicalSpace.generateFrom
- { m | ∃ (s : Set X) (_ : IsCompact s) (u : Set Y) (_ : IsOpen u), m = CompactOpen.gen s u }
+ .generateFrom <| image2 (fun K U ↦ {f | MapsTo f K U}) {K | IsCompact K} {U | IsOpen U}
#align continuous_map.compact_open ContinuousMap.compactOpen
-/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2`. -/
+/-- Definition of `ContinuousMap.compactOpen`. -/
theorem compactOpen_eq : @compactOpen X Y _ _ =
- .generateFrom (Set.image2 CompactOpen.gen {s | IsCompact s} {t | IsOpen t}) :=
- congr_arg TopologicalSpace.generateFrom <| Set.ext fun _ ↦ by simp [eq_comm]
-
-/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2` and `Set.MapsTo`. -/
-theorem compactOpen_eq_mapsTo : @compactOpen X Y _ _ =
- .generateFrom (Set.image2 (fun K U ↦ {f | MapsTo f K U}) {K | IsCompact K} {U | IsOpen U}) := by
- simp only [mapsTo', compactOpen_eq]; rfl
-
-protected theorem isOpen_gen {s : Set X} (hs : IsCompact s) {u : Set Y} (hu : IsOpen u) :
- IsOpen (CompactOpen.gen s u) :=
- TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
-#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
+ .generateFrom (image2 (fun K U ↦ {f | MapsTo f K U}) {K | IsCompact K} {t | IsOpen t}) :=
+ rfl
-lemma isOpen_setOf_mapsTo (hK : IsCompact K) (hU : IsOpen U) :
- IsOpen {f : C(X, Y) | MapsTo f K U} := by
- rw [compactOpen_eq_mapsTo]; exact .basic _ (mem_image2_of_mem hK hU)
+theorem isOpen_setOf_mapsTo (hK : IsCompact K) (hU : IsOpen U) :
+ IsOpen {f : C(X, Y) | MapsTo f K U} :=
+ isOpen_generateFrom_of_mem <| mem_image2_of_mem hK hU
+#align continuous_map.is_open_gen ContinuousMap.isOpen_setOf_mapsTo
lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
∀ᶠ g : C(X, Y) in 𝓝 f, MapsTo g K U :=
@@ -106,7 +72,7 @@ lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : Ma
lemma nhds_compactOpen (f : C(X, Y)) :
𝓝 f = ⨅ (K : Set X) (_ : IsCompact K) (U : Set Y) (_ : IsOpen U) (_ : MapsTo f K U),
𝓟 {g : C(X, Y) | MapsTo g K U} := by
- simp_rw [compactOpen_eq_mapsTo, nhds_generateFrom, mem_setOf_eq, @and_comm (f ∈ _), iInf_and,
+ simp_rw [compactOpen_eq, nhds_generateFrom, mem_setOf_eq, @and_comm (f ∈ _), iInf_and,
← image_prod, iInf_image, biInf_prod, mem_setOf_eq]
lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
@@ -115,9 +81,8 @@ lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)
simp [nhds_compactOpen]
lemma continuous_compactOpen {f : X → C(Y, Z)} :
- Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
- simp_rw [compactOpen_eq, continuous_generateFrom_iff, forall_image2_iff, mapsTo',
- CompactOpen.gen, image_subset_iff, preimage_setOf_eq, mem_setOf]
+ Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} :=
+ continuous_generateFrom_iff.trans forall_image2_iff
section Functorial
@@ -130,7 +95,7 @@ theorem continuous_comp (g : C(Y, Z)) : Continuous (ContinuousMap.comp g : C(X,
then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
theorem inducing_comp (g : C(Y, Z)) (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
induced := by
- simp only [compactOpen_eq_mapsTo, induced_generateFrom_eq, image_image2, hg.setOf_isOpen,
+ simp only [compactOpen_eq, induced_generateFrom_eq, image_image2, hg.setOf_isOpen,
image2_image_right, MapsTo, mem_preimage, preimage_setOf_eq, comp_apply]
/-- If `g : C(Y, Z)` is a topological embedding,
@@ -260,44 +225,42 @@ theorem compactOpen_le_induced (s : Set X) :
(continuous_restrict s).le_induced
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
-/-- The compact-open topology on `C(X, Y)` is equal to the infimum of the compact-open topologies
-on `C(s, Y)` for `s` a compact subset of `X`. The key point of the proof is that the union of the
-compact subsets of `X` is equal to the union of compact subsets of the compact subsets of `X`. -/
-theorem compactOpen_eq_sInf_induced :
+/-- The compact-open topology on `C(X, Y)`
+is equal to the infimum of the compact-open topologies on `C(s, Y)` for `s` a compact subset of `X`.
+The key point of the proof is that for every compact set `K`,
+the universal set `Set.univ : Set K` is a compact set as well. -/
+theorem compactOpen_eq_iInf_induced :
(ContinuousMap.compactOpen : TopologicalSpace C(X, Y)) =
- ⨅ (s : Set X) (_ : IsCompact s),
- TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
- refine' le_antisymm _ _
- · refine' le_iInf₂ _
- exact fun s _ => compactOpen_le_induced s
- simp only [← generateFrom_iUnion, induced_generateFrom_eq, ContinuousMap.compactOpen]
- apply TopologicalSpace.generateFrom_anti
- rintro _ ⟨s, hs, u, hu, rfl⟩
- rw [mem_iUnion₂]
- refine' ⟨s, hs, _, ⟨univ, isCompact_iff_isCompact_univ.mp hs, u, hu, rfl⟩, _⟩
- ext f
- simp only [CompactOpen.gen, mem_setOf_eq, mem_preimage, ContinuousMap.coe_restrict]
- rw [image_comp f ((↑) : s → X)]
- simp
-#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
-
-theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(X, Y)) :
+ ⨅ (K : Set X) (_ : IsCompact K), .induced (.restrict K) ContinuousMap.compactOpen := by
+ refine le_antisymm (le_iInf₂ fun s _ ↦ compactOpen_le_induced s) ?_
+ refine le_generateFrom <| forall_image2_iff.2 fun K (hK : IsCompact K) U hU ↦ ?_
+ refine TopologicalSpace.le_def.1 (iInf₂_le K hK) _ ?_
+ convert isOpen_induced (isOpen_setOf_mapsTo (isCompact_iff_isCompact_univ.1 hK) hU)
+ simp only [mapsTo_univ_iff, Subtype.forall]
+ rfl
+#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_iInf_induced
+
+@[deprecated] alias compactOpen_eq_sInf_induced := compactOpen_eq_iInf_induced
+
+theorem nhds_compactOpen_eq_iInf_nhds_induced (f : C(X, Y)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
- rw [compactOpen_eq_sInf_induced]
- simp [nhds_iInf, nhds_induced]
-#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
+ rw [compactOpen_eq_iInf_induced]
+ simp only [nhds_iInf, nhds_induced]
+#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced
+
+@[deprecated] alias nhds_compactOpen_eq_sInf_nhds_induced := nhds_compactOpen_eq_iInf_nhds_induced
theorem tendsto_compactOpen_restrict {ι : Type*} {l : Filter ι} {F : ι → C(X, Y)} {f : C(X, Y)}
(hFf : Filter.Tendsto F l (𝓝 f)) (s : Set X) :
- Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
+ Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
(continuous_restrict s).continuousAt.tendsto.comp hFf
#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrict
theorem tendsto_compactOpen_iff_forall {ι : Type*} {l : Filter ι} (F : ι → C(X, Y)) (f : C(X, Y)) :
- Filter.Tendsto F l (𝓝 f) ↔
- ∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) := by
- rw [compactOpen_eq_sInf_induced]
- simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
+ Tendsto F l (𝓝 f) ↔
+ ∀ K, IsCompact K → Tendsto (fun i => (F i).restrict K) l (𝓝 (f.restrict K)) := by
+ rw [compactOpen_eq_iInf_induced]
+ simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
/-- A family `F` of functions in `C(X, Y)` converges in the compact-open topology, if and only if
@@ -305,7 +268,7 @@ it converges in the compact-open topology on each compact subset of `X`. -/
theorem exists_tendsto_compactOpen_iff_forall [WeaklyLocallyCompactSpace X] [T2Space Y]
{ι : Type*} {l : Filter ι} [Filter.NeBot l] (F : ι → C(X, Y)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
- ∀ (s : Set X) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
+ ∀ s : Set X, IsCompact s → ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
constructor
· rintro ⟨f, hf⟩ s _
exact ⟨f.restrict s, tendsto_compactOpen_restrict hf s⟩
@@ -339,68 +302,61 @@ variable (X Y)
/-- The coevaluation map `Y → C(X, Y × X)` sending a point `x : Y` to the continuous function
on `X` sending `y` to `(x, y)`. -/
-def coev (y : Y) : C(X, Y × X) :=
- { toFun := Prod.mk y }
+@[simps (config := .asFn)]
+def coev (b : Y) : C(X, Y × X) :=
+ { toFun := Prod.mk b }
#align continuous_map.coev ContinuousMap.coev
variable {X Y}
-theorem image_coev {y : Y} (s : Set X) : coev X Y y '' s = ({y} : Set Y) ×ˢ s := by
- aesop
+theorem image_coev {y : Y} (s : Set X) : coev X Y y '' s = {y} ×ˢ s := by simp
#align continuous_map.image_coev ContinuousMap.image_coev
--- The coevaluation map Y → C(X, Y × X) is continuous (always).
-theorem continuous_coev : Continuous (coev X Y) :=
- continuous_generateFrom_iff.2 <| by
- rintro _ ⟨s, sc, u, uo, rfl⟩
- rw [isOpen_iff_forall_mem_open]
- intro y hy
- have hy' : (↑(coev X Y y) '' s ⊆ u) := hy
- -- Porting note: was below
- --change coev X Y y '' s ⊆ u at hy
- rw [image_coev s] at hy'
- rcases generalized_tube_lemma isCompact_singleton sc uo hy' with ⟨v, w, vo, _, yv, sw, vwu⟩
- refine' ⟨v, _, vo, singleton_subset_iff.mp yv⟩
- intro y' hy'
- change coev X Y y' '' s ⊆ u
- rw [image_coev s]
- exact (prod_mono (singleton_subset_iff.mpr hy') sw).trans vwu
+/-- The coevaluation map `Y → C(X, Y × X)` is continuous (always). -/
+theorem continuous_coev : Continuous (coev X Y) := by
+ have : ∀ {a K U}, MapsTo (coev X Y a) K U ↔ {a} ×ˢ K ⊆ U := by simp [mapsTo']
+ simp only [continuous_iff_continuousAt, ContinuousAt, tendsto_nhds_compactOpen, this]
+ intro x K hK U hU hKU
+ rcases generalized_tube_lemma isCompact_singleton hK hU hKU with ⟨V, W, hV, -, hxV, hKW, hVWU⟩
+ filter_upwards [hV.mem_nhds (hxV rfl)] with a ha
+ exact (prod_mono (singleton_subset_iff.mpr ha) hKW).trans hVWU
#align continuous_map.continuous_coev ContinuousMap.continuous_coev
end Coev
section Curry
+/-- The curried form of a continuous map `α × β → γ` as a continuous map `α → C(β, γ)`.
+ If `a × β` is locally compact, this is continuous. If `α` and `β` are both locally
+ compact, then this is a homeomorphism, see `Homeomorph.curry`. -/
+def curry (f : C(X × Y, Z)) : C(X, C(Y, Z)) where
+ toFun a := ⟨Function.curry f a, f.continuous.comp <| by continuity⟩
+ continuous_toFun := (continuous_comp f).comp continuous_coev
+#align continuous_map.curry ContinuousMap.curry
+
+@[simp]
+theorem curry_apply (f : C(X × Y, Z)) (a : X) (b : Y) : f.curry a b = f (a, b) :=
+ rfl
+#align continuous_map.curry_apply ContinuousMap.curry_apply
+
/-- Auxiliary definition, see `ContinuousMap.curry` and `Homeomorph.curry`. -/
-def curry' (f : C(X × Y, Z)) (x : X) : C(Y, Z) :=
- ⟨Function.curry f x, Continuous.comp f.2 (continuous_const.prod_mk continuous_id)⟩
- -- Porting note: proof was `by continuity`
+@[deprecated ContinuousMap.curry]
+def curry' (f : C(X × Y, Z)) (a : X) : C(Y, Z) := curry f a
#align continuous_map.curry' ContinuousMap.curry'
-/-- If a map `X × Y → Z` is continuous, then its curried form `X → C(Y, Z)` is continuous. -/
-theorem continuous_curry' (f : C(X × Y, Z)) : Continuous (curry' f) :=
- Continuous.comp (continuous_comp f) continuous_coev
+set_option linter.deprecated false in
+/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
+@[deprecated ContinuousMap.curry]
+theorem continuous_curry' (f : C(X × Y, Z)) : Continuous (curry' f) := (curry f).continuous
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
-/-- To show continuity of a map `X → C(Y, Z)`, it suffices to show that its uncurried form
- `X × Y → Z` is continuous. -/
+/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
+ `α × β → γ` is continuous. -/
theorem continuous_of_continuous_uncurry (f : X → C(Y, Z))
(h : Continuous (Function.uncurry fun x y => f x y)) : Continuous f :=
- continuous_curry' ⟨_, h⟩
+ (curry ⟨_, h⟩).2
#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurry
-/-- The curried form of a continuous map `X × Y → Z` as a continuous map `X → C(Y, Z)`.
- If `X × Y` is locally compact, this is continuous. If `X` and `Y` are both locally
- compact, then this is a homeomorphism, see `Homeomorph.curry`. -/
-def curry (f : C(X × Y, Z)) : C(X, C(Y, Z)) :=
- ⟨_, continuous_curry' f⟩
-#align continuous_map.curry ContinuousMap.curry
-
-@[simp]
-theorem curry_apply (f : C(X × Y, Z)) (x : X) (y : Y) : f.curry x y = f (x, y) :=
- rfl
-#align continuous_map.curry_apply ContinuousMap.curry_apply
-
/-- The currying process is a continuous map between function spaces. -/
theorem continuous_curry [LocallyCompactSpace (X × Y)] :
Continuous (curry : C(X × Y, Z) → C(X, C(Y, Z))) := by
@@ -103,11 +103,16 @@ lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : Ma
∀ᶠ g : C(X, Y) in 𝓝 f, MapsTo g K U :=
(isOpen_setOf_mapsTo hK hU).mem_nhds h
+lemma nhds_compactOpen (f : C(X, Y)) :
+ 𝓝 f = ⨅ (K : Set X) (_ : IsCompact K) (U : Set Y) (_ : IsOpen U) (_ : MapsTo f K U),
+ 𝓟 {g : C(X, Y) | MapsTo g K U} := by
+ simp_rw [compactOpen_eq_mapsTo, nhds_generateFrom, mem_setOf_eq, @and_comm (f ∈ _), iInf_and,
+ ← image_prod, iInf_image, biInf_prod, mem_setOf_eq]
+
lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
Tendsto f l (𝓝 g) ↔
∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
- simp_rw [compactOpen_eq_mapsTo, tendsto_nhds_generateFrom_iff, forall_image2_iff,
- mem_setOf, preimage_setOf_eq, eventually_iff]
+ simp [nhds_compactOpen]
lemma continuous_compactOpen {f : X → C(Y, Z)} :
Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
@@ -351,7 +351,7 @@ theorem continuous_coev : Continuous (coev X Y) :=
rw [isOpen_iff_forall_mem_open]
intro y hy
have hy' : (↑(coev X Y y) '' s ⊆ u) := hy
- -- porting notes: was below
+ -- Porting note: was below
--change coev X Y y '' s ⊆ u at hy
rw [image_coev s] at hy'
rcases generalized_tube_lemma isCompact_singleton sc uo hy' with ⟨v, w, vo, _, yv, sw, vwu⟩
@@ -106,11 +106,13 @@ lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : Ma
lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
Tendsto f l (𝓝 g) ↔
∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
- simp_rw [compactOpen_eq_mapsTo, tendsto_nhds_generateFrom_iff, forall_image2_iff]; rfl
+ simp_rw [compactOpen_eq_mapsTo, tendsto_nhds_generateFrom_iff, forall_image2_iff,
+ mem_setOf, preimage_setOf_eq, eventually_iff]
lemma continuous_compactOpen {f : X → C(Y, Z)} :
Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
- simp_rw [compactOpen_eq, continuous_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
+ simp_rw [compactOpen_eq, continuous_generateFrom_iff, forall_image2_iff, mapsTo',
+ CompactOpen.gen, image_subset_iff, preimage_setOf_eq, mem_setOf]
section Functorial
@@ -122,8 +124,9 @@ theorem continuous_comp (g : C(Y, Z)) : Continuous (ContinuousMap.comp g : C(X,
/-- If `g : C(Y, Z)` is a topology inducing map,
then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
theorem inducing_comp (g : C(Y, Z)) (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
- induced := by simp only [compactOpen_eq_mapsTo, induced_generateFrom_eq, image_image2,
- hg.setOf_isOpen, image2_image_right]; rfl
+ induced := by
+ simp only [compactOpen_eq_mapsTo, induced_generateFrom_eq, image_image2, hg.setOf_isOpen,
+ image2_image_right, MapsTo, mem_preimage, preimage_setOf_eq, comp_apply]
/-- If `g : C(Y, Z)` is a topological embedding,
then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is an embedding too. -/
Tendsto.compCM
etc (#9882)
(g : C(Y, Z))
argument instead of variable
.
This way only implicit arguments are not visible right there in the source.@@ -114,22 +114,20 @@ lemma continuous_compactOpen {f : X → C(Y, Z)} :
section Functorial
-variable (g : C(Y, Z))
-
/-- `C(X, ·)` is a functor. -/
-theorem continuous_comp : Continuous (g.comp : C(X, Y) → C(X, Z)) :=
+theorem continuous_comp (g : C(Y, Z)) : Continuous (ContinuousMap.comp g : C(X, Y) → C(X, Z)) :=
continuous_compactOpen.2 fun _K hK _U hU ↦ isOpen_setOf_mapsTo hK (hU.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
/-- If `g : C(Y, Z)` is a topology inducing map,
then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
-theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
+theorem inducing_comp (g : C(Y, Z)) (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
induced := by simp only [compactOpen_eq_mapsTo, induced_generateFrom_eq, image_image2,
hg.setOf_isOpen, image2_image_right]; rfl
-/-- If `g : C(Y, Z)` is a topological embedding, then the composition
-`ContinuousMap.comp g : C(X, Y) → C(X, Z)` is an embedding too. -/
-theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(X, Y) → C(X, Z)) :=
+/-- If `g : C(Y, Z)` is a topological embedding,
+then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is an embedding too. -/
+theorem embedding_comp (g : C(Y, Z)) (hg : Embedding g) : Embedding (g.comp : C(X, Y) → C(X, Z)) :=
⟨inducing_comp g hg.1, fun _ _ ↦ (cancel_left hg.2).1⟩
/-- `C(·, Z)` is a functor. -/
@@ -138,10 +136,12 @@ theorem continuous_comp_left (f : C(X, Y)) : Continuous (fun g => g.comp f : C(Y
simpa only [mapsTo_image_iff] using isOpen_setOf_mapsTo (hK.image f.2) hU
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
-/-- Composition is a continuous map from `C(X, Y) × C(Y, Z)` to `C(X, Z)`, provided that `Y` is
- locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
-theorem continuous_comp' [LocallyCompactPair Y Z] :
- Continuous fun x : C(X, Y) × C(Y, Z) => x.2.comp x.1 := by
+variable [LocallyCompactPair Y Z]
+
+/-- Composition is a continuous map from `C(X, Y) × C(Y, Z)` to `C(X, Z)`,
+provided that `Y` is locally compact.
+This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
+theorem continuous_comp' : Continuous fun x : C(X, Y) × C(Y, Z) => x.2.comp x.1 := by
simp_rw [continuous_iff_continuousAt, ContinuousAt, tendsto_nhds_compactOpen]
intro ⟨f, g⟩ K hK U hU (hKU : MapsTo (g ∘ f) K U)
obtain ⟨L, hKL, hLc, hLU⟩ : ∃ L ∈ 𝓝ˢ (f '' K), IsCompact L ∧ MapsTo g L U :=
@@ -153,10 +153,34 @@ theorem continuous_comp' [LocallyCompactPair Y Z] :
hg'.comp <| hf'.mono_right interior_subset
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactPair Y Z] {f : X → C(X, Y)}
- {g : X → C(Y, Z)} (hf : Continuous f) (hg : Continuous g) :
+lemma _root_.Filter.Tendsto.compCM {α : Type*} {l : Filter α} {g : α → C(Y, Z)} {g₀ : C(Y, Z)}
+ {f : α → C(X, Y)} {f₀ : C(X, Y)} (hg : Tendsto g l (𝓝 g₀)) (hf : Tendsto f l (𝓝 f₀)) :
+ Tendsto (fun a ↦ (g a).comp (f a)) l (𝓝 (g₀.comp f₀)) :=
+ (continuous_comp'.tendsto (f₀, g₀)).comp (hf.prod_mk_nhds hg)
+
+variable {X' : Type*} [TopologicalSpace X'] {a : X'} {g : X' → C(Y, Z)} {f : X' → C(X, Y)}
+ {s : Set X'}
+
+nonrec lemma _root_.ContinuousAt.compCM (hg : ContinuousAt g a) (hf : ContinuousAt f a) :
+ ContinuousAt (fun x ↦ (g x).comp (f x)) a :=
+ hg.compCM hf
+
+nonrec lemma _root_.ContinuousWithinAt.compCM (hg : ContinuousWithinAt g s a)
+ (hf : ContinuousWithinAt f s a) : ContinuousWithinAt (fun x ↦ (g x).comp (f x)) s a :=
+ hg.compCM hf
+
+lemma _root_.ContinuousOn.compCM (hg : ContinuousOn g s) (hf : ContinuousOn f s) :
+ ContinuousOn (fun x ↦ (g x).comp (f x)) s := fun a ha ↦
+ (hg a ha).compCM (hf a ha)
+
+lemma _root_.Continuous.compCM (hg : Continuous g) (hf : Continuous f) :
+ Continuous fun x => (g x).comp (f x) :=
+ continuous_comp'.comp (hf.prod_mk hg)
+
+@[deprecated _root_.Continuous.compCM] -- deprecated on 2024/01/30
+lemma continuous.comp' (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
- continuous_comp'.comp (hf.prod_mk hg : Continuous fun x => (f x, g x))
+ hg.compCM hf
#align continuous_map.continuous.comp' ContinuousMap.continuous.comp'
end Functorial
@@ -201,7 +201,7 @@ lemma isClosed_setOf_mapsTo {t : Set Y} (ht : IsClosed t) (s : Set X) :
lemma isClopen_setOf_mapsTo (hK : IsCompact K) (hU : IsClopen U) :
IsClopen {f : C(X, Y) | MapsTo f K U} :=
- ⟨isOpen_setOf_mapsTo hK hU.isOpen, isClosed_setOf_mapsTo hU.isClosed K⟩
+ ⟨isClosed_setOf_mapsTo hU.isClosed K, isOpen_setOf_mapsTo hK hU.isOpen⟩
instance [T0Space Y] : T0Space C(X, Y) :=
t0Space_of_injective_of_continuous DFunLike.coe_injective continuous_coe
ContinuousMap.compactOpen_eq_mapsTo
.
I'm going to redefine compactOpen
this way in a subsequent PR.@@ -85,6 +85,11 @@ theorem compactOpen_eq : @compactOpen X Y _ _ =
.generateFrom (Set.image2 CompactOpen.gen {s | IsCompact s} {t | IsOpen t}) :=
congr_arg TopologicalSpace.generateFrom <| Set.ext fun _ ↦ by simp [eq_comm]
+/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2` and `Set.MapsTo`. -/
+theorem compactOpen_eq_mapsTo : @compactOpen X Y _ _ =
+ .generateFrom (Set.image2 (fun K U ↦ {f | MapsTo f K U}) {K | IsCompact K} {U | IsOpen U}) := by
+ simp only [mapsTo', compactOpen_eq]; rfl
+
protected theorem isOpen_gen {s : Set X} (hs : IsCompact s) {u : Set Y} (hu : IsOpen u) :
IsOpen (CompactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
@@ -92,7 +97,7 @@ protected theorem isOpen_gen {s : Set X} (hs : IsCompact s) {u : Set Y} (hu : Is
lemma isOpen_setOf_mapsTo (hK : IsCompact K) (hU : IsOpen U) :
IsOpen {f : C(X, Y) | MapsTo f K U} := by
- simpa only [mapsTo'] using ContinuousMap.isOpen_gen hK hU
+ rw [compactOpen_eq_mapsTo]; exact .basic _ (mem_image2_of_mem hK hU)
lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
∀ᶠ g : C(X, Y) in 𝓝 f, MapsTo g K U :=
@@ -101,7 +106,7 @@ lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : Ma
lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
Tendsto f l (𝓝 g) ↔
∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
- simp_rw [compactOpen_eq, tendsto_nhds_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
+ simp_rw [compactOpen_eq_mapsTo, tendsto_nhds_generateFrom_iff, forall_image2_iff]; rfl
lemma continuous_compactOpen {f : X → C(Y, Z)} :
Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
@@ -111,43 +116,26 @@ section Functorial
variable (g : C(Y, Z))
-private theorem preimage_gen {s : Set X} {u : Set Z} :
- ContinuousMap.comp g ⁻¹' CompactOpen.gen s u = CompactOpen.gen s (g ⁻¹' u) := by
- ext ⟨f, _⟩
- change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
- rw [image_comp, image_subset_iff]
-
-/-- C(X, -) is a functor. -/
-theorem continuous_comp : Continuous (ContinuousMap.comp g : C(X, Y) → C(X, Z)) :=
- continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
- rw [hm, preimage_gen g]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
+/-- `C(X, ·)` is a functor. -/
+theorem continuous_comp : Continuous (g.comp : C(X, Y) → C(X, Z)) :=
+ continuous_compactOpen.2 fun _K hK _U hU ↦ isOpen_setOf_mapsTo hK (hU.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
-/-- If `g : C(Y, Z)` is a topology inducing map, then the composition
-`ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
+/-- If `g : C(Y, Z)` is a topology inducing map,
+then the composition `ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
- induced := by
- simp only [compactOpen_eq, induced_generateFrom_eq, image_image2, preimage_gen,
- hg.setOf_isOpen, image2_image_right]
+ induced := by simp only [compactOpen_eq_mapsTo, induced_generateFrom_eq, image_image2,
+ hg.setOf_isOpen, image2_image_right]; rfl
/-- If `g : C(Y, Z)` is a topological embedding, then the composition
`ContinuousMap.comp g : C(X, Y) → C(X, Z)` is an embedding too. -/
theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(X, Y) → C(X, Z)) :=
⟨inducing_comp g hg.1, fun _ _ ↦ (cancel_left hg.2).1⟩
-variable (f : C(X, Y))
-
-private theorem image_gen {s : Set X} (_ : IsCompact s) {u : Set Z} (_ : IsOpen u) :
- (fun g : C(Y, Z) => g.comp f) ⁻¹' CompactOpen.gen s u = CompactOpen.gen (f '' s) u := by
- ext ⟨g, _⟩
- change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
- rw [Set.image_comp]
-
-/-- C(-, Z) is a functor. -/
-theorem continuous_comp_left : Continuous (fun g => g.comp f : C(Y, Z) → C(X, Z)) :=
- continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
- rw [hm, image_gen f hs hu]
- exact ContinuousMap.isOpen_gen (hs.image f.2) hu
+/-- `C(·, Z)` is a functor. -/
+theorem continuous_comp_left (f : C(X, Y)) : Continuous (fun g => g.comp f : C(Y, Z) → C(X, Z)) :=
+ continuous_compactOpen.2 fun K hK U hU ↦ by
+ simpa only [mapsTo_image_iff] using isOpen_setOf_mapsTo (hK.image f.2) hU
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
/-- Composition is a continuous map from `C(X, Y) × C(Y, Z)` to `C(X, Z)`, provided that `Y` is
@@ -193,11 +181,8 @@ theorem continuous_eval [LocallyCompactPair X Y] : Continuous fun p : C(X, Y) ×
Porting note: merged `continuous_eval_const` with `continuous_eval_const'` removing unneeded
assumptions. -/
@[continuity]
-theorem continuous_eval_const (x : X) :
- Continuous fun f : C(X, Y) => f x := by
- refine continuous_def.2 fun U hU ↦ ?_
- convert ContinuousMap.isOpen_gen (isCompact_singleton (x := x)) hU using 1
- ext; simp [CompactOpen.gen]
+theorem continuous_eval_const (a : X) : Continuous fun f : C(X, Y) => f a :=
+ continuous_def.2 fun U hU ↦ by simpa using isOpen_setOf_mapsTo (isCompact_singleton (x := a)) hU
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
#align continuous_map.continuous_eval_const ContinuousMap.continuous_eval_const
@@ -231,16 +216,16 @@ end Ev
section InfInduced
+/-- For any subset `s` of `X`, the restriction of continuous functions to `s` is continuous
+as a function from `C(X, Y)` to `C(s, Y)` with their respective compact-open topologies. -/
+theorem continuous_restrict (s : Set X) : Continuous fun F : C(X, Y) => F.restrict s :=
+ continuous_comp_left <| restrict s <| .id X
+#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
+
theorem compactOpen_le_induced (s : Set X) :
(ContinuousMap.compactOpen : TopologicalSpace C(X, Y)) ≤
- TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
- simp only [induced_generateFrom_eq, ContinuousMap.compactOpen]
- apply TopologicalSpace.generateFrom_anti
- rintro b ⟨a, ⟨c, hc, u, hu, rfl⟩, rfl⟩
- refine' ⟨(↑) '' c, hc.image continuous_subtype_val, u, hu, _⟩
- ext f
- simp only [CompactOpen.gen, mem_setOf_eq, mem_preimage, ContinuousMap.coe_restrict]
- rw [image_comp f ((↑) : s → X)]
+ .induced (restrict s) ContinuousMap.compactOpen :=
+ (continuous_restrict s).le_induced
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
/-- The compact-open topology on `C(X, Y)` is equal to the infimum of the compact-open topologies
@@ -264,13 +249,6 @@ theorem compactOpen_eq_sInf_induced :
simp
#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
-/-- For any subset `s` of `X`, the restriction of continuous functions to `s` is continuous as a
-function from `C(X, Y)` to `C(s, Y)` with their respective compact-open topologies. -/
-theorem continuous_restrict (s : Set X) : Continuous fun F : C(X, Y) => F.restrict s := by
- rw [continuous_iff_le_induced]
- exact compactOpen_le_induced s
-#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-
theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(X, Y)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
rw [compactOpen_eq_sInf_induced]
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>
@@ -219,13 +219,13 @@ lemma isClopen_setOf_mapsTo (hK : IsCompact K) (hU : IsClopen U) :
⟨isOpen_setOf_mapsTo hK hU.isOpen, isClosed_setOf_mapsTo hU.isClosed K⟩
instance [T0Space Y] : T0Space C(X, Y) :=
- t0Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
+ t0Space_of_injective_of_continuous DFunLike.coe_injective continuous_coe
instance [T1Space Y] : T1Space C(X, Y) :=
- t1Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
+ t1Space_of_injective_of_continuous DFunLike.coe_injective continuous_coe
instance [T2Space Y] : T2Space C(X, Y) :=
- .of_injective_continuous FunLike.coe_injective continuous_coe
+ .of_injective_continuous DFunLike.coe_injective continuous_coe
end Ev
@@ -15,7 +15,8 @@ topological spaces.
## Main definitions
-* `CompactOpen` is the compact-open topology on `C(X, Y)`. It is declared as an instance.
+* `ContinuousMap.compactOpen` is the compact-open topology on `C(X, Y)`.
+ It is declared as an instance.
* `ContinuousMap.coev` is the coevaluation map `Y → C(X, Y × X)`. It is always continuous.
* `ContinuousMap.curry` is the currying map `C(X × Y, Z) → C(X, C(Y, Z))`. This map always exists
and it is continuous as long as `X × Y` is locally compact.
@@ -39,9 +40,8 @@ namespace ContinuousMap
section CompactOpen
-variable {X : Type*} {Y : Type*} {Z : Type*}
-
-variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
+variable {α X Y Z : Type*}
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {K : Set X} {U : Set Y}
/-- A generating set for the compact-open topology (when `s` is compact and `u` is open). -/
def CompactOpen.gen (s : Set X) (u : Set Y) : Set C(X, Y) :=
@@ -90,15 +90,15 @@ protected theorem isOpen_gen {s : Set X} (hs : IsCompact s) {u : Set Y} (hu : Is
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
-lemma isOpen_setOf_mapsTo {K : Set X} (hK : IsCompact K) {U : Set Y} (hU : IsOpen U) :
+lemma isOpen_setOf_mapsTo (hK : IsCompact K) (hU : IsOpen U) :
IsOpen {f : C(X, Y) | MapsTo f K U} := by
simpa only [mapsTo'] using ContinuousMap.isOpen_gen hK hU
-lemma eventually_mapsTo {f : C(X, Y)} {K U} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
+lemma eventually_mapsTo {f : C(X, Y)} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
∀ᶠ g : C(X, Y) in 𝓝 f, MapsTo g K U :=
(isOpen_setOf_mapsTo hK hU).mem_nhds h
-lemma tendsto_nhds_compactOpen {α : Type*} {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
+lemma tendsto_nhds_compactOpen {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
Tendsto f l (𝓝 g) ↔
∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
simp_rw [compactOpen_eq, tendsto_nhds_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
@@ -214,7 +214,7 @@ lemma isClosed_setOf_mapsTo {t : Set Y} (ht : IsClosed t) (s : Set X) :
IsClosed {f : C(X, Y) | MapsTo f s t} :=
ht.setOf_mapsTo fun _ _ ↦ continuous_eval_const _
-lemma isClopen_setOf_mapsTo {K : Set X} (hK : IsCompact K) {U : Set Y} (hU : IsClopen U) :
+lemma isClopen_setOf_mapsTo (hK : IsCompact K) (hU : IsClopen U) :
IsClopen {f : C(X, Y) | MapsTo f K U} :=
⟨isOpen_setOf_mapsTo hK hU.isOpen, isClosed_setOf_mapsTo hU.isClosed K⟩
Use X
, Y
, Z
instead of α
, β
, γ
for topological spaces.
@@ -15,15 +15,15 @@ topological spaces.
## Main definitions
-* `CompactOpen` is the compact-open topology on `C(α, β)`. It is declared as an instance.
-* `ContinuousMap.coev` is the coevaluation map `β → C(α, β × α)`. It is always continuous.
-* `ContinuousMap.curry` is the currying map `C(α × β, γ) → C(α, C(β, γ))`. This map always exists
- and it is continuous as long as `α × β` is locally compact.
-* `ContinuousMap.uncurry` is the uncurrying map `C(α, C(β, γ)) → C(α × β, γ)`. For this map to
- exist, we need `β` to be locally compact. If `α` is also locally compact, then this map is
+* `CompactOpen` is the compact-open topology on `C(X, Y)`. It is declared as an instance.
+* `ContinuousMap.coev` is the coevaluation map `Y → C(X, Y × X)`. It is always continuous.
+* `ContinuousMap.curry` is the currying map `C(X × Y, Z) → C(X, C(Y, Z))`. This map always exists
+ and it is continuous as long as `X × Y` is locally compact.
+* `ContinuousMap.uncurry` is the uncurrying map `C(X, C(Y, Z)) → C(X × Y, Z)`. For this map to
+ exist, we need `Y` to be locally compact. If `X` is also locally compact, then this map is
continuous.
* `Homeomorph.curry` combines the currying and uncurrying operations into a homeomorphism
- `C(α × β, γ) ≃ₜ C(α, C(β, γ))`. This homeomorphism exists if `α` and `β` are locally compact.
+ `C(X × Y, Z) ≃ₜ C(X, C(Y, Z))`. This homeomorphism exists if `X` and `Y` are locally compact.
## Tags
@@ -39,121 +39,121 @@ namespace ContinuousMap
section CompactOpen
-variable {α : Type*} {β : Type*} {γ : Type*}
+variable {X : Type*} {Y : Type*} {Z : Type*}
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
/-- A generating set for the compact-open topology (when `s` is compact and `u` is open). -/
-def CompactOpen.gen (s : Set α) (u : Set β) : Set C(α, β) :=
+def CompactOpen.gen (s : Set X) (u : Set Y) : Set C(X, Y) :=
{ f | f '' s ⊆ u }
#align continuous_map.compact_open.gen ContinuousMap.CompactOpen.gen
@[simp]
-theorem gen_empty (u : Set β) : CompactOpen.gen (∅ : Set α) u = Set.univ :=
+theorem gen_empty (u : Set Y) : CompactOpen.gen (∅ : Set X) u = Set.univ :=
Set.ext fun f => iff_true_intro ((congr_arg (· ⊆ u) (image_empty f)).mpr u.empty_subset)
#align continuous_map.gen_empty ContinuousMap.gen_empty
@[simp]
-theorem gen_univ (s : Set α) : CompactOpen.gen s (Set.univ : Set β) = Set.univ :=
+theorem gen_univ (s : Set X) : CompactOpen.gen s (Set.univ : Set Y) = Set.univ :=
Set.ext fun f => iff_true_intro (f '' s).subset_univ
#align continuous_map.gen_univ ContinuousMap.gen_univ
@[simp]
-theorem gen_inter (s : Set α) (u v : Set β) :
+theorem gen_inter (s : Set X) (u v : Set Y) :
CompactOpen.gen s (u ∩ v) = CompactOpen.gen s u ∩ CompactOpen.gen s v :=
Set.ext fun _ => subset_inter_iff
#align continuous_map.gen_inter ContinuousMap.gen_inter
@[simp]
-theorem gen_union (s t : Set α) (u : Set β) :
+theorem gen_union (s t : Set X) (u : Set Y) :
CompactOpen.gen (s ∪ t) u = CompactOpen.gen s u ∩ CompactOpen.gen t u :=
Set.ext fun f => (iff_of_eq (congr_arg (· ⊆ u) (image_union f s t))).trans union_subset_iff
#align continuous_map.gen_union ContinuousMap.gen_union
-theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set β) = ∅ :=
+theorem gen_empty_right {s : Set X} (h : s.Nonempty) : CompactOpen.gen s (∅ : Set Y) = ∅ :=
eq_empty_of_forall_not_mem fun _ => (h.image _).not_subset_empty
#align continuous_map.gen_empty_right ContinuousMap.gen_empty_right
--- The compact-open topology on the space of continuous maps α → β.
-instance compactOpen : TopologicalSpace C(α, β) :=
+-- The compact-open topology on the space of continuous maps X → Y.
+instance compactOpen : TopologicalSpace C(X, Y) :=
TopologicalSpace.generateFrom
- { m | ∃ (s : Set α) (_ : IsCompact s) (u : Set β) (_ : IsOpen u), m = CompactOpen.gen s u }
+ { m | ∃ (s : Set X) (_ : IsCompact s) (u : Set Y) (_ : IsOpen u), m = CompactOpen.gen s u }
#align continuous_map.compact_open ContinuousMap.compactOpen
/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2`. -/
-theorem compactOpen_eq : @compactOpen α β _ _ =
+theorem compactOpen_eq : @compactOpen X Y _ _ =
.generateFrom (Set.image2 CompactOpen.gen {s | IsCompact s} {t | IsOpen t}) :=
congr_arg TopologicalSpace.generateFrom <| Set.ext fun _ ↦ by simp [eq_comm]
-protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
+protected theorem isOpen_gen {s : Set X} (hs : IsCompact s) {u : Set Y} (hu : IsOpen u) :
IsOpen (CompactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
-lemma isOpen_setOf_mapsTo {K : Set α} (hK : IsCompact K) {U : Set β} (hU : IsOpen U) :
- IsOpen {f : C(α, β) | MapsTo f K U} := by
+lemma isOpen_setOf_mapsTo {K : Set X} (hK : IsCompact K) {U : Set Y} (hU : IsOpen U) :
+ IsOpen {f : C(X, Y) | MapsTo f K U} := by
simpa only [mapsTo'] using ContinuousMap.isOpen_gen hK hU
-lemma eventually_mapsTo {f : C(α, β)} {K U} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
- ∀ᶠ g : C(α, β) in 𝓝 f, MapsTo g K U :=
+lemma eventually_mapsTo {f : C(X, Y)} {K U} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
+ ∀ᶠ g : C(X, Y) in 𝓝 f, MapsTo g K U :=
(isOpen_setOf_mapsTo hK hU).mem_nhds h
-lemma tendsto_nhds_compactOpen {α : Type*} {l : Filter α} {f : α → C(β, γ)} {g : C(β, γ)} :
+lemma tendsto_nhds_compactOpen {α : Type*} {l : Filter α} {f : α → C(Y, Z)} {g : C(Y, Z)} :
Tendsto f l (𝓝 g) ↔
∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
simp_rw [compactOpen_eq, tendsto_nhds_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
-lemma continuous_compactOpen {f : α → C(β, γ)} :
+lemma continuous_compactOpen {f : X → C(Y, Z)} :
Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
simp_rw [compactOpen_eq, continuous_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
section Functorial
-variable (g : C(β, γ))
+variable (g : C(Y, Z))
-private theorem preimage_gen {s : Set α} {u : Set γ} :
+private theorem preimage_gen {s : Set X} {u : Set Z} :
ContinuousMap.comp g ⁻¹' CompactOpen.gen s u = CompactOpen.gen s (g ⁻¹' u) := by
ext ⟨f, _⟩
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
rw [image_comp, image_subset_iff]
-/-- C(α, -) is a functor. -/
-theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
+/-- C(X, -) is a functor. -/
+theorem continuous_comp : Continuous (ContinuousMap.comp g : C(X, Y) → C(X, Z)) :=
continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, preimage_gen g]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
-/-- If `g : C(β, γ)` is a topology inducing map, then the composition
-`ContinuousMap.comp g : C(α, β) → C(α, γ)` is a topology inducing map too. -/
-theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(α, β) → C(α, γ)) where
+/-- If `g : C(Y, Z)` is a topology inducing map, then the composition
+`ContinuousMap.comp g : C(X, Y) → C(X, Z)` is a topology inducing map too. -/
+theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(X, Y) → C(X, Z)) where
induced := by
simp only [compactOpen_eq, induced_generateFrom_eq, image_image2, preimage_gen,
hg.setOf_isOpen, image2_image_right]
-/-- If `g : C(β, γ)` is a topological embedding, then the composition
-`ContinuousMap.comp g : C(α, β) → C(α, γ)` is an embedding too. -/
-theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(α, β) → C(α, γ)) :=
+/-- If `g : C(Y, Z)` is a topological embedding, then the composition
+`ContinuousMap.comp g : C(X, Y) → C(X, Z)` is an embedding too. -/
+theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(X, Y) → C(X, Z)) :=
⟨inducing_comp g hg.1, fun _ _ ↦ (cancel_left hg.2).1⟩
-variable (f : C(α, β))
+variable (f : C(X, Y))
-private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpen u) :
- (fun g : C(β, γ) => g.comp f) ⁻¹' CompactOpen.gen s u = CompactOpen.gen (f '' s) u := by
+private theorem image_gen {s : Set X} (_ : IsCompact s) {u : Set Z} (_ : IsOpen u) :
+ (fun g : C(Y, Z) => g.comp f) ⁻¹' CompactOpen.gen s u = CompactOpen.gen (f '' s) u := by
ext ⟨g, _⟩
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
rw [Set.image_comp]
-/-- C(-, γ) is a functor. -/
-theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
+/-- C(-, Z) is a functor. -/
+theorem continuous_comp_left : Continuous (fun g => g.comp f : C(Y, Z) → C(X, Z)) :=
continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, image_gen f hs hu]
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
-/-- Composition is a continuous map from `C(α, β) × C(β, γ)` to `C(α, γ)`, provided that `β` is
+/-- Composition is a continuous map from `C(X, Y) × C(Y, Z)` to `C(X, Z)`, provided that `Y` is
locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
-theorem continuous_comp' [LocallyCompactPair β γ] :
- Continuous fun x : C(α, β) × C(β, γ) => x.2.comp x.1 := by
+theorem continuous_comp' [LocallyCompactPair Y Z] :
+ Continuous fun x : C(X, Y) × C(Y, Z) => x.2.comp x.1 := by
simp_rw [continuous_iff_continuousAt, ContinuousAt, tendsto_nhds_compactOpen]
intro ⟨f, g⟩ K hK U hU (hKU : MapsTo (g ∘ f) K U)
obtain ⟨L, hKL, hLc, hLU⟩ : ∃ L ∈ 𝓝ˢ (f '' K), IsCompact L ∧ MapsTo g L U :=
@@ -165,8 +165,8 @@ theorem continuous_comp' [LocallyCompactPair β γ] :
hg'.comp <| hf'.mono_right interior_subset
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactPair β γ] {f : X → C(α, β)}
- {g : X → C(β, γ)} (hf : Continuous f) (hg : Continuous g) :
+theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactPair Y Z] {f : X → C(X, Y)}
+ {g : X → C(Y, Z)} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
continuous_comp'.comp (hf.prod_mk hg : Continuous fun x => (f x, g x))
#align continuous_map.continuous.comp' ContinuousMap.continuous.comp'
@@ -175,10 +175,10 @@ end Functorial
section Ev
-/-- The evaluation map `C(α, β) × α → β` is continuous
-if `α, β` is a locally compact pair of spaces. -/
+/-- The evaluation map `C(X, Y) × X → Y` is continuous
+if `X, Y` is a locally compact pair of spaces. -/
@[continuity]
-theorem continuous_eval [LocallyCompactPair α β] : Continuous fun p : C(α, β) × α => p.1 p.2 := by
+theorem continuous_eval [LocallyCompactPair X Y] : Continuous fun p : C(X, Y) × X => p.1 p.2 := by
simp_rw [continuous_iff_continuousAt, ContinuousAt, (nhds_basis_opens _).tendsto_right_iff]
rintro ⟨f, x⟩ U ⟨hx : f x ∈ U, hU : IsOpen U⟩
rcases exists_mem_nhds_isCompact_mapsTo f.continuous (hU.mem_nhds hx) with ⟨K, hxK, hK, hKU⟩
@@ -188,51 +188,51 @@ theorem continuous_eval [LocallyCompactPair α β] : Continuous fun p : C(α, β
@[deprecated] alias continuous_eval' := continuous_eval
-/-- Evaluation of a continuous map `f` at a point `a` is continuous in `f`.
+/-- Evaluation of a continuous map `f` at a point `x` is continuous in `f`.
Porting note: merged `continuous_eval_const` with `continuous_eval_const'` removing unneeded
assumptions. -/
@[continuity]
-theorem continuous_eval_const (a : α) :
- Continuous fun f : C(α, β) => f a := by
+theorem continuous_eval_const (x : X) :
+ Continuous fun f : C(X, Y) => f x := by
refine continuous_def.2 fun U hU ↦ ?_
- convert ContinuousMap.isOpen_gen (isCompact_singleton (x := a)) hU using 1
+ convert ContinuousMap.isOpen_gen (isCompact_singleton (x := x)) hU using 1
ext; simp [CompactOpen.gen]
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
#align continuous_map.continuous_eval_const ContinuousMap.continuous_eval_const
-/-- Coercion from `C(α, β)` with compact-open topology to `α → β` with pointwise convergence
+/-- Coercion from `C(X, Y)` with compact-open topology to `X → Y` with pointwise convergence
topology is a continuous map.
Porting note: merged `continuous_coe` with `continuous_coe'` removing unneeded assumptions. -/
-theorem continuous_coe : Continuous ((⇑) : C(α, β) → (α → β)) :=
+theorem continuous_coe : Continuous ((⇑) : C(X, Y) → (X → Y)) :=
continuous_pi continuous_eval_const
#align continuous_map.continuous_coe' ContinuousMap.continuous_coe
#align continuous_map.continuous_coe ContinuousMap.continuous_coe
-lemma isClosed_setOf_mapsTo {t : Set β} (ht : IsClosed t) (s : Set α) :
- IsClosed {f : C(α, β) | MapsTo f s t} :=
+lemma isClosed_setOf_mapsTo {t : Set Y} (ht : IsClosed t) (s : Set X) :
+ IsClosed {f : C(X, Y) | MapsTo f s t} :=
ht.setOf_mapsTo fun _ _ ↦ continuous_eval_const _
-lemma isClopen_setOf_mapsTo {K : Set α} (hK : IsCompact K) {U : Set β} (hU : IsClopen U) :
- IsClopen {f : C(α, β) | MapsTo f K U} :=
+lemma isClopen_setOf_mapsTo {K : Set X} (hK : IsCompact K) {U : Set Y} (hU : IsClopen U) :
+ IsClopen {f : C(X, Y) | MapsTo f K U} :=
⟨isOpen_setOf_mapsTo hK hU.isOpen, isClosed_setOf_mapsTo hU.isClosed K⟩
-instance [T0Space β] : T0Space C(α, β) :=
+instance [T0Space Y] : T0Space C(X, Y) :=
t0Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
-instance [T1Space β] : T1Space C(α, β) :=
+instance [T1Space Y] : T1Space C(X, Y) :=
t1Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
-instance [T2Space β] : T2Space C(α, β) :=
+instance [T2Space Y] : T2Space C(X, Y) :=
.of_injective_continuous FunLike.coe_injective continuous_coe
end Ev
section InfInduced
-theorem compactOpen_le_induced (s : Set α) :
- (ContinuousMap.compactOpen : TopologicalSpace C(α, β)) ≤
+theorem compactOpen_le_induced (s : Set X) :
+ (ContinuousMap.compactOpen : TopologicalSpace C(X, Y)) ≤
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
simp only [induced_generateFrom_eq, ContinuousMap.compactOpen]
apply TopologicalSpace.generateFrom_anti
@@ -240,15 +240,15 @@ theorem compactOpen_le_induced (s : Set α) :
refine' ⟨(↑) '' c, hc.image continuous_subtype_val, u, hu, _⟩
ext f
simp only [CompactOpen.gen, mem_setOf_eq, mem_preimage, ContinuousMap.coe_restrict]
- rw [image_comp f ((↑) : s → α)]
+ rw [image_comp f ((↑) : s → X)]
#align continuous_map.compact_open_le_induced ContinuousMap.compactOpen_le_induced
-/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
-on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
-compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
+/-- The compact-open topology on `C(X, Y)` is equal to the infimum of the compact-open topologies
+on `C(s, Y)` for `s` a compact subset of `X`. The key point of the proof is that the union of the
+compact subsets of `X` is equal to the union of compact subsets of the compact subsets of `X`. -/
theorem compactOpen_eq_sInf_induced :
- (ContinuousMap.compactOpen : TopologicalSpace C(α, β)) =
- ⨅ (s : Set α) (_ : IsCompact s),
+ (ContinuousMap.compactOpen : TopologicalSpace C(X, Y)) =
+ ⨅ (s : Set X) (_ : IsCompact s),
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
refine' le_antisymm _ _
· refine' le_iInf₂ _
@@ -260,42 +260,42 @@ theorem compactOpen_eq_sInf_induced :
refine' ⟨s, hs, _, ⟨univ, isCompact_iff_isCompact_univ.mp hs, u, hu, rfl⟩, _⟩
ext f
simp only [CompactOpen.gen, mem_setOf_eq, mem_preimage, ContinuousMap.coe_restrict]
- rw [image_comp f ((↑) : s → α)]
+ rw [image_comp f ((↑) : s → X)]
simp
#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
-/-- For any subset `s` of `α`, the restriction of continuous functions to `s` is continuous as a
-function from `C(α, β)` to `C(s, β)` with their respective compact-open topologies. -/
-theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.restrict s := by
+/-- For any subset `s` of `X`, the restriction of continuous functions to `s` is continuous as a
+function from `C(X, Y)` to `C(s, Y)` with their respective compact-open topologies. -/
+theorem continuous_restrict (s : Set X) : Continuous fun F : C(X, Y) => F.restrict s := by
rw [continuous_iff_le_induced]
exact compactOpen_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
+theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(X, Y)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
rw [compactOpen_eq_sInf_induced]
simp [nhds_iInf, nhds_induced]
#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
-theorem tendsto_compactOpen_restrict {ι : Type*} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
- (hFf : Filter.Tendsto F l (𝓝 f)) (s : Set α) :
+theorem tendsto_compactOpen_restrict {ι : Type*} {l : Filter ι} {F : ι → C(X, Y)} {f : C(X, Y)}
+ (hFf : Filter.Tendsto F l (𝓝 f)) (s : Set X) :
Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
(continuous_restrict s).continuousAt.tendsto.comp hFf
#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrict
-theorem tendsto_compactOpen_iff_forall {ι : Type*} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
+theorem tendsto_compactOpen_iff_forall {ι : Type*} {l : Filter ι} (F : ι → C(X, Y)) (f : C(X, Y)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) := by
rw [compactOpen_eq_sInf_induced]
simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
-/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
-it converges in the compact-open topology on each compact subset of `α`. -/
-theorem exists_tendsto_compactOpen_iff_forall [WeaklyLocallyCompactSpace α] [T2Space β]
- {ι : Type*} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
+/-- A family `F` of functions in `C(X, Y)` converges in the compact-open topology, if and only if
+it converges in the compact-open topology on each compact subset of `X`. -/
+theorem exists_tendsto_compactOpen_iff_forall [WeaklyLocallyCompactSpace X] [T2Space Y]
+ {ι : Type*} {l : Filter ι} [Filter.NeBot l] (F : ι → C(X, Y)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
- ∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
+ ∀ (s : Set X) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
constructor
· rintro ⟨f, hf⟩ s _
exact ⟨f.restrict s, tendsto_compactOpen_restrict hf s⟩
@@ -304,7 +304,7 @@ theorem exists_tendsto_compactOpen_iff_forall [WeaklyLocallyCompactSpace α] [T2
-- By uniqueness of limits in a `T2Space`, since `fun i ↦ F i x` tends to both `f s₁ hs₁ x` and
-- `f s₂ hs₂ x`, we have `f s₁ hs₁ x = f s₂ hs₂ x`
have h :
- ∀ (s₁) (hs₁ : IsCompact s₁) (s₂) (hs₂ : IsCompact s₂) (x : α) (hxs₁ : x ∈ s₁) (hxs₂ : x ∈ s₂),
+ ∀ (s₁) (hs₁ : IsCompact s₁) (s₂) (hs₂ : IsCompact s₂) (x : X) (hxs₁ : x ∈ s₁) (hxs₂ : x ∈ s₂),
f s₁ hs₁ ⟨x, hxs₁⟩ = f s₂ hs₂ ⟨x, hxs₂⟩ := by
rintro s₁ hs₁ s₂ hs₂ x hxs₁ hxs₂
haveI := isCompact_iff_compactSpace.mp hs₁
@@ -325,34 +325,34 @@ end InfInduced
section Coev
-variable (α β)
+variable (X Y)
-/-- The coevaluation map `β → C(α, β × α)` sending a point `x : β` to the continuous function
-on `α` sending `y` to `(x, y)`. -/
-def coev (b : β) : C(α, β × α) :=
- { toFun := Prod.mk b }
+/-- The coevaluation map `Y → C(X, Y × X)` sending a point `x : Y` to the continuous function
+on `X` sending `y` to `(x, y)`. -/
+def coev (y : Y) : C(X, Y × X) :=
+ { toFun := Prod.mk y }
#align continuous_map.coev ContinuousMap.coev
-variable {α β}
+variable {X Y}
-theorem image_coev {y : β} (s : Set α) : coev α β y '' s = ({y} : Set β) ×ˢ s := by
+theorem image_coev {y : Y} (s : Set X) : coev X Y y '' s = ({y} : Set Y) ×ˢ s := by
aesop
#align continuous_map.image_coev ContinuousMap.image_coev
--- The coevaluation map β → C(α, β × α) is continuous (always).
-theorem continuous_coev : Continuous (coev α β) :=
+-- The coevaluation map Y → C(X, Y × X) is continuous (always).
+theorem continuous_coev : Continuous (coev X Y) :=
continuous_generateFrom_iff.2 <| by
rintro _ ⟨s, sc, u, uo, rfl⟩
rw [isOpen_iff_forall_mem_open]
intro y hy
- have hy' : (↑(coev α β y) '' s ⊆ u) := hy
+ have hy' : (↑(coev X Y y) '' s ⊆ u) := hy
-- porting notes: was below
- --change coev α β y '' s ⊆ u at hy
+ --change coev X Y y '' s ⊆ u at hy
rw [image_coev s] at hy'
rcases generalized_tube_lemma isCompact_singleton sc uo hy' with ⟨v, w, vo, _, yv, sw, vwu⟩
refine' ⟨v, _, vo, singleton_subset_iff.mp yv⟩
intro y' hy'
- change coev α β y' '' s ⊆ u
+ change coev X Y y' '' s ⊆ u
rw [image_coev s]
exact (prod_mono (singleton_subset_iff.mpr hy') sw).trans vwu
#align continuous_map.continuous_coev ContinuousMap.continuous_coev
@@ -362,77 +362,77 @@ end Coev
section Curry
/-- Auxiliary definition, see `ContinuousMap.curry` and `Homeomorph.curry`. -/
-def curry' (f : C(α × β, γ)) (a : α) : C(β, γ) :=
- ⟨Function.curry f a, Continuous.comp f.2 (continuous_const.prod_mk continuous_id)⟩
+def curry' (f : C(X × Y, Z)) (x : X) : C(Y, Z) :=
+ ⟨Function.curry f x, Continuous.comp f.2 (continuous_const.prod_mk continuous_id)⟩
-- Porting note: proof was `by continuity`
#align continuous_map.curry' ContinuousMap.curry'
-/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
-theorem continuous_curry' (f : C(α × β, γ)) : Continuous (curry' f) :=
+/-- If a map `X × Y → Z` is continuous, then its curried form `X → C(Y, Z)` is continuous. -/
+theorem continuous_curry' (f : C(X × Y, Z)) : Continuous (curry' f) :=
Continuous.comp (continuous_comp f) continuous_coev
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
-/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
- `α × β → γ` is continuous. -/
-theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
+/-- To show continuity of a map `X → C(Y, Z)`, it suffices to show that its uncurried form
+ `X × Y → Z` is continuous. -/
+theorem continuous_of_continuous_uncurry (f : X → C(Y, Z))
(h : Continuous (Function.uncurry fun x y => f x y)) : Continuous f :=
continuous_curry' ⟨_, h⟩
#align continuous_map.continuous_of_continuous_uncurry ContinuousMap.continuous_of_continuous_uncurry
-/-- The curried form of a continuous map `α × β → γ` as a continuous map `α → C(β, γ)`.
- If `a × β` is locally compact, this is continuous. If `α` and `β` are both locally
+/-- The curried form of a continuous map `X × Y → Z` as a continuous map `X → C(Y, Z)`.
+ If `X × Y` is locally compact, this is continuous. If `X` and `Y` are both locally
compact, then this is a homeomorphism, see `Homeomorph.curry`. -/
-def curry (f : C(α × β, γ)) : C(α, C(β, γ)) :=
+def curry (f : C(X × Y, Z)) : C(X, C(Y, Z)) :=
⟨_, continuous_curry' f⟩
#align continuous_map.curry ContinuousMap.curry
@[simp]
-theorem curry_apply (f : C(α × β, γ)) (a : α) (b : β) : f.curry a b = f (a, b) :=
+theorem curry_apply (f : C(X × Y, Z)) (x : X) (y : Y) : f.curry x y = f (x, y) :=
rfl
#align continuous_map.curry_apply ContinuousMap.curry_apply
/-- The currying process is a continuous map between function spaces. -/
-theorem continuous_curry [LocallyCompactSpace (α × β)] :
- Continuous (curry : C(α × β, γ) → C(α, C(β, γ))) := by
+theorem continuous_curry [LocallyCompactSpace (X × Y)] :
+ Continuous (curry : C(X × Y, Z) → C(X, C(Y, Z))) := by
apply continuous_of_continuous_uncurry
apply continuous_of_continuous_uncurry
rw [← (Homeomorph.prodAssoc _ _ _).symm.comp_continuous_iff']
exact continuous_eval
#align continuous_map.continuous_curry ContinuousMap.continuous_curry
-/-- The uncurried form of a continuous map `α → C(β, γ)` is a continuous map `α × β → γ`. -/
-theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(β, γ))) :
+/-- The uncurried form of a continuous map `X → C(Y, Z)` is a continuous map `X × Y → Z`. -/
+theorem continuous_uncurry_of_continuous [LocallyCompactSpace Y] (f : C(X, C(Y, Z))) :
Continuous (Function.uncurry fun x y => f x y) :=
continuous_eval.comp <| f.continuous.prod_map continuous_id
#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuous
-/-- The uncurried form of a continuous map `α → C(β, γ)` as a continuous map `α × β → γ` (if `β` is
- locally compact). If `α` is also locally compact, then this is a homeomorphism between the two
+/-- The uncurried form of a continuous map `X → C(Y, Z)` as a continuous map `X × Y → Z` (if `Y` is
+ locally compact). If `X` is also locally compact, then this is a homeomorphism between the two
function spaces, see `Homeomorph.curry`. -/
@[simps]
-def uncurry [LocallyCompactSpace β] (f : C(α, C(β, γ))) : C(α × β, γ) :=
+def uncurry [LocallyCompactSpace Y] (f : C(X, C(Y, Z))) : C(X × Y, Z) :=
⟨_, continuous_uncurry_of_continuous f⟩
#align continuous_map.uncurry ContinuousMap.uncurry
/-- The uncurrying process is a continuous map between function spaces. -/
-theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
- Continuous (uncurry : C(α, C(β, γ)) → C(α × β, γ)) := by
+theorem continuous_uncurry [LocallyCompactSpace X] [LocallyCompactSpace Y] :
+ Continuous (uncurry : C(X, C(Y, Z)) → C(X × Y, Z)) := by
apply continuous_of_continuous_uncurry
rw [← (Homeomorph.prodAssoc _ _ _).comp_continuous_iff']
apply continuous_eval.comp (continuous_eval.prod_map continuous_id)
#align continuous_map.continuous_uncurry ContinuousMap.continuous_uncurry
-/-- The family of constant maps: `β → C(α, β)` as a continuous map. -/
-def const' : C(β, C(α, β)) :=
+/-- The family of constant maps: `Y → C(X, Y)` as a continuous map. -/
+def const' : C(Y, C(X, Y)) :=
curry ContinuousMap.fst
#align continuous_map.const' ContinuousMap.const'
@[simp]
-theorem coe_const' : (const' : β → C(α, β)) = const α :=
+theorem coe_const' : (const' : Y → C(X, Y)) = const X :=
rfl
#align continuous_map.coe_const' ContinuousMap.coe_const'
-theorem continuous_const' : Continuous (const α : β → C(α, β)) :=
+theorem continuous_const' : Continuous (const X : Y → C(X, Y)) :=
const'.continuous
#align continuous_map.continuous_const' ContinuousMap.continuous_const'
@@ -446,36 +446,36 @@ open ContinuousMap
namespace Homeomorph
-variable {α : Type*} {β : Type*} {γ : Type*}
+variable {X : Type*} {Y : Type*} {Z : Type*}
-variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
+variable [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
-/-- Currying as a homeomorphism between the function spaces `C(α × β, γ)` and `C(α, C(β, γ))`. -/
-def curry [LocallyCompactSpace α] [LocallyCompactSpace β] : C(α × β, γ) ≃ₜ C(α, C(β, γ)) :=
+/-- Currying as a homeomorphism between the function spaces `C(X × Y, Z)` and `C(X, C(Y, Z))`. -/
+def curry [LocallyCompactSpace X] [LocallyCompactSpace Y] : C(X × Y, Z) ≃ₜ C(X, C(Y, Z)) :=
⟨⟨ContinuousMap.curry, uncurry, by intro; ext; rfl, by intro; ext; rfl⟩,
continuous_curry, continuous_uncurry⟩
#align homeomorph.curry Homeomorph.curry
-/-- If `α` has a single element, then `β` is homeomorphic to `C(α, β)`. -/
-def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β) where
- toFun := const α
+/-- If `X` has a single element, then `Y` is homeomorphic to `C(X, Y)`. -/
+def continuousMapOfUnique [Unique X] : Y ≃ₜ C(X, Y) where
+ toFun := const X
invFun f := f default
- left_inv a := rfl
+ left_inv _ := rfl
right_inv f := by
- ext a
- rw [Unique.eq_default a]
+ ext x
+ rw [Unique.eq_default x]
rfl
continuous_toFun := continuous_const'
continuous_invFun := continuous_eval_const _
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
@[simp]
-theorem continuousMapOfUnique_apply [Unique α] (b : β) (a : α) : continuousMapOfUnique b a = b :=
+theorem continuousMapOfUnique_apply [Unique X] (y : Y) (x : X) : continuousMapOfUnique y x = y :=
rfl
#align homeomorph.continuous_map_of_unique_apply Homeomorph.continuousMapOfUnique_apply
@[simp]
-theorem continuousMapOfUnique_symm_apply [Unique α] (f : C(α, β)) :
+theorem continuousMapOfUnique_symm_apply [Unique X] (f : C(X, Y)) :
continuousMapOfUnique.symm f = f default :=
rfl
#align homeomorph.continuous_map_of_unique_symm_apply Homeomorph.continuousMapOfUnique_symm_apply
@@ -210,6 +210,14 @@ theorem continuous_coe : Continuous ((⇑) : C(α, β) → (α → β)) :=
#align continuous_map.continuous_coe' ContinuousMap.continuous_coe
#align continuous_map.continuous_coe ContinuousMap.continuous_coe
+lemma isClosed_setOf_mapsTo {t : Set β} (ht : IsClosed t) (s : Set α) :
+ IsClosed {f : C(α, β) | MapsTo f s t} :=
+ ht.setOf_mapsTo fun _ _ ↦ continuous_eval_const _
+
+lemma isClopen_setOf_mapsTo {K : Set α} (hK : IsCompact K) {U : Set β} (hU : IsClopen U) :
+ IsClopen {f : C(α, β) | MapsTo f K U} :=
+ ⟨isOpen_setOf_mapsTo hK hU.isOpen, isClosed_setOf_mapsTo hU.isClosed K⟩
+
instance [T0Space β] : T0Space C(α, β) :=
t0Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
@@ -361,8 +369,7 @@ def curry' (f : C(α × β, γ)) (a : α) : C(β, γ) :=
/-- If a map `α × β → γ` is continuous, then its curried form `α → C(β, γ)` is continuous. -/
theorem continuous_curry' (f : C(α × β, γ)) : Continuous (curry' f) :=
- have hf : curry' f = ContinuousMap.comp f ∘ coev _ _ := by ext; rfl
- hf ▸ Continuous.comp (continuous_comp f) continuous_coev
+ Continuous.comp (continuous_comp f) continuous_coev
#align continuous_map.continuous_curry' ContinuousMap.continuous_curry'
/-- To show continuity of a map `α → C(β, γ)`, it suffices to show that its uncurried form
continuous_eval
lemmas (#9264)
Introduce a typeclass LocallyCompactPair
that allows us to unify different versions of ContinuousMap.continuous_eval
and similar lemmas.
@@ -32,9 +32,8 @@ compact-open, curry, function space
-/
-open Set
-
-open Topology
+open Set Filter TopologicalSpace
+open scoped Topology
namespace ContinuousMap
@@ -91,6 +90,23 @@ protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu :
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
#align continuous_map.is_open_gen ContinuousMap.isOpen_gen
+lemma isOpen_setOf_mapsTo {K : Set α} (hK : IsCompact K) {U : Set β} (hU : IsOpen U) :
+ IsOpen {f : C(α, β) | MapsTo f K U} := by
+ simpa only [mapsTo'] using ContinuousMap.isOpen_gen hK hU
+
+lemma eventually_mapsTo {f : C(α, β)} {K U} (hK : IsCompact K) (hU : IsOpen U) (h : MapsTo f K U) :
+ ∀ᶠ g : C(α, β) in 𝓝 f, MapsTo g K U :=
+ (isOpen_setOf_mapsTo hK hU).mem_nhds h
+
+lemma tendsto_nhds_compactOpen {α : Type*} {l : Filter α} {f : α → C(β, γ)} {g : C(β, γ)} :
+ Tendsto f l (𝓝 g) ↔
+ ∀ K, IsCompact K → ∀ U, IsOpen U → MapsTo g K U → ∀ᶠ a in l, MapsTo (f a) K U := by
+ simp_rw [compactOpen_eq, tendsto_nhds_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
+
+lemma continuous_compactOpen {f : α → C(β, γ)} :
+ Continuous f ↔ ∀ K, IsCompact K → ∀ U, IsOpen U → IsOpen {x | MapsTo (f x) K U} := by
+ simp_rw [compactOpen_eq, continuous_generateFrom_iff, forall_image2_iff, mapsTo']; rfl
+
section Functorial
variable (g : C(β, γ))
@@ -136,29 +152,20 @@ theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(
/-- Composition is a continuous map from `C(α, β) × C(β, γ)` to `C(α, γ)`, provided that `β` is
locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
-theorem continuous_comp' [LocallyCompactSpace β] :
- Continuous fun x : C(α, β) × C(β, γ) => x.2.comp x.1 :=
- continuous_generateFrom_iff.2
- (by
- rintro M ⟨K, hK, U, hU, rfl⟩
- conv =>
- congr
- rw [CompactOpen.gen, preimage_setOf_eq]
- --congr
- ext; dsimp [setOf]
- rw [image_comp, image_subset_iff]
- rw [isOpen_iff_forall_mem_open]
- rintro ⟨φ₀, ψ₀⟩ H
- obtain ⟨L, hL, hKL, hLU⟩ := exists_compact_between (hK.image φ₀.2) (hU.preimage ψ₀.2) H
- use { φ : C(α, β) | φ '' K ⊆ interior L } ×ˢ { ψ : C(β, γ) | ψ '' L ⊆ U }
- -- porting note: typing hint `: φ '' K ⊆ interior L` wasn't previously required
- use fun ⟨φ, ψ⟩ ⟨(hφ : φ '' K ⊆ interior L), hψ⟩ =>
- subset_trans hφ (interior_subset.trans <| image_subset_iff.mp hψ)
- use (ContinuousMap.isOpen_gen hK isOpen_interior).prod (ContinuousMap.isOpen_gen hL hU)
- exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
+theorem continuous_comp' [LocallyCompactPair β γ] :
+ Continuous fun x : C(α, β) × C(β, γ) => x.2.comp x.1 := by
+ simp_rw [continuous_iff_continuousAt, ContinuousAt, tendsto_nhds_compactOpen]
+ intro ⟨f, g⟩ K hK U hU (hKU : MapsTo (g ∘ f) K U)
+ obtain ⟨L, hKL, hLc, hLU⟩ : ∃ L ∈ 𝓝ˢ (f '' K), IsCompact L ∧ MapsTo g L U :=
+ exists_mem_nhdsSet_isCompact_mapsTo g.continuous (hK.image f.continuous) hU
+ (mapsTo_image_iff.2 hKU)
+ rw [← subset_interior_iff_mem_nhdsSet, ← mapsTo'] at hKL
+ exact ((eventually_mapsTo hK isOpen_interior hKL).prod_nhds
+ (eventually_mapsTo hLc hU hLU)).mono fun ⟨f', g'⟩ ⟨hf', hg'⟩ ↦
+ hg'.comp <| hf'.mono_right interior_subset
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactSpace β] {f : X → C(α, β)}
+theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactPair β γ] {f : X → C(α, β)}
{g : X → C(β, γ)} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
continuous_comp'.comp (hf.prod_mk hg : Continuous fun x => (f x, g x))
@@ -168,30 +175,18 @@ end Functorial
section Ev
-/-- The evaluation map `C(α, β) × α → β` is continuous if `α` is locally compact.
-
-See also `ContinuousMap.continuous_eval` -/
-theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β) × α => p.1 p.2 :=
- continuous_iff_continuousAt.mpr fun ⟨f, x⟩ n hn =>
- let ⟨v, vn, vo, fxv⟩ := mem_nhds_iff.mp hn
- have : v ∈ 𝓝 (f x) := IsOpen.mem_nhds vo fxv
- let ⟨s, hs, sv, sc⟩ :=
- LocallyCompactSpace.local_compact_nhds x (f ⁻¹' v) (f.continuous.tendsto x this)
- let ⟨u, us, uo, xu⟩ := mem_nhds_iff.mp hs
- show (fun p : C(α, β) × α => p.1 p.2) ⁻¹' n ∈ 𝓝 (f, x) from
- let w := CompactOpen.gen s v ×ˢ u
- have : w ⊆ (fun p : C(α, β) × α => p.1 p.2) ⁻¹' n := fun ⟨f', x'⟩ ⟨hf', hx'⟩ =>
- vn <| hf' <| mem_image_of_mem f' (us hx')
- --Porting note: The following `calc` block fails here.
- --calc
- -- f' x' ∈ f' '' s := mem_image_of_mem f' (us hx')
- -- _ ⊆ v := hf'
- -- _ ⊆ n := vn
-
- have : IsOpen w := (ContinuousMap.isOpen_gen sc vo).prod uo
- have : (f, x) ∈ w := ⟨image_subset_iff.mpr sv, xu⟩
- mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
-#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
+/-- The evaluation map `C(α, β) × α → β` is continuous
+if `α, β` is a locally compact pair of spaces. -/
+@[continuity]
+theorem continuous_eval [LocallyCompactPair α β] : Continuous fun p : C(α, β) × α => p.1 p.2 := by
+ simp_rw [continuous_iff_continuousAt, ContinuousAt, (nhds_basis_opens _).tendsto_right_iff]
+ rintro ⟨f, x⟩ U ⟨hx : f x ∈ U, hU : IsOpen U⟩
+ rcases exists_mem_nhds_isCompact_mapsTo f.continuous (hU.mem_nhds hx) with ⟨K, hxK, hK, hKU⟩
+ filter_upwards [prod_mem_nhds (eventually_mapsTo hK hU hKU) hxK] using fun _ h ↦ h.1 h.2
+#align continuous_map.continuous_eval' ContinuousMap.continuous_eval
+#align continuous_map.continuous_eval ContinuousMap.continuous_eval
+
+@[deprecated] alias continuous_eval' := continuous_eval
/-- Evaluation of a continuous map `f` at a point `a` is continuous in `f`.
@@ -395,13 +390,13 @@ theorem continuous_curry [LocallyCompactSpace (α × β)] :
apply continuous_of_continuous_uncurry
apply continuous_of_continuous_uncurry
rw [← (Homeomorph.prodAssoc _ _ _).symm.comp_continuous_iff']
- exact continuous_eval'
+ exact continuous_eval
#align continuous_map.continuous_curry ContinuousMap.continuous_curry
/-- The uncurried form of a continuous map `α → C(β, γ)` is a continuous map `α × β → γ`. -/
theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(β, γ))) :
Continuous (Function.uncurry fun x y => f x y) :=
- continuous_eval'.comp <| f.continuous.prod_map continuous_id
+ continuous_eval.comp <| f.continuous.prod_map continuous_id
#align continuous_map.continuous_uncurry_of_continuous ContinuousMap.continuous_uncurry_of_continuous
/-- The uncurried form of a continuous map `α → C(β, γ)` as a continuous map `α × β → γ` (if `β` is
@@ -417,7 +412,7 @@ theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
Continuous (uncurry : C(α, C(β, γ)) → C(α × β, γ)) := by
apply continuous_of_continuous_uncurry
rw [← (Homeomorph.prodAssoc _ _ _).comp_continuous_iff']
- apply continuous_eval'.comp (continuous_eval'.prod_map continuous_id)
+ apply continuous_eval.comp (continuous_eval.prod_map continuous_id)
#align continuous_map.continuous_uncurry ContinuousMap.continuous_uncurry
/-- The family of constant maps: `β → C(α, β)` as a continuous map. -/
continuous_generateFrom
to an iff
(#9259)
Similarly, upgrade tendsto_nhds_generateFrom
, IsTopologicalBasis.continuous
, Topology.IsLower.continuous_of_Ici
, and Topology.IsUpper.continuous_iff_Iic
.
The old lemmas are now deprecated, and the new ones have _iff
in their names.
Once we remove the old lemmas, we can drop the _iff
suffixes.
@@ -103,7 +103,7 @@ private theorem preimage_gen {s : Set α} {u : Set γ} :
/-- C(α, -) is a functor. -/
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
- continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
+ continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, preimage_gen g]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
@@ -129,7 +129,7 @@ private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpe
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
- continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
+ continuous_generateFrom_iff.2 fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, image_gen f hs hu]
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
@@ -138,7 +138,7 @@ theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(
locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*. -/
theorem continuous_comp' [LocallyCompactSpace β] :
Continuous fun x : C(α, β) × C(β, γ) => x.2.comp x.1 :=
- continuous_generateFrom
+ continuous_generateFrom_iff.2
(by
rintro M ⟨K, hK, U, hU, rfl⟩
conv =>
@@ -338,7 +338,7 @@ theorem image_coev {y : β} (s : Set α) : coev α β y '' s = ({y} : Set β) ×
-- The coevaluation map β → C(α, β × α) is continuous (always).
theorem continuous_coev : Continuous (coev α β) :=
- continuous_generateFrom <| by
+ continuous_generateFrom_iff.2 <| by
rintro _ ⟨s, sc, u, uo, rfl⟩
rw [isOpen_iff_forall_mem_open]
intro y hy
X, Y, Z are standard mathematical names for topological spaces. As discussed on zulip, let us rename them.
As a drive-by commit, re-use the declared variables $\iota$, $s$ and $t$ (more) when stating theorems.
Co-authored-by: grunweg <grunweg@posteo.de>
@@ -201,7 +201,7 @@ assumptions. -/
theorem continuous_eval_const (a : α) :
Continuous fun f : C(α, β) => f a := by
refine continuous_def.2 fun U hU ↦ ?_
- convert ContinuousMap.isOpen_gen (isCompact_singleton (a := a)) hU using 1
+ convert ContinuousMap.isOpen_gen (isCompact_singleton (x := a)) hU using 1
ext; simp [CompactOpen.gen]
#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
#align continuous_map.continuous_eval_const ContinuousMap.continuous_eval_const
For faster build times and clearer dependencies. No attempt at being exhaustive.
The new import in Clopen.lean
had been transitively imported before.
@@ -4,9 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Reid Barton
-/
import Mathlib.Topology.ContinuousFunction.Basic
-import Mathlib.Topology.Homeomorph
-import Mathlib.Topology.Compactness.Compact
-import Mathlib.Topology.Maps
#align_import topology.compact_open from "leanprover-community/mathlib"@"4c19a16e4b705bf135cf9a80ac18fcc99c438514"
Split up the 2000-line Topology/SubsetProperties.lean
into several smaller files. Not only is it too huge, but the name is very unhelpful, since actually about 90% of the file is about compactness; I've moved this material into various files inside a new subdirectory Topology/Compactness/
.
@@ -5,7 +5,7 @@ Authors: Reid Barton
-/
import Mathlib.Topology.ContinuousFunction.Basic
import Mathlib.Topology.Homeomorph
-import Mathlib.Topology.SubsetProperties
+import Mathlib.Topology.Compactness.Compact
import Mathlib.Topology.Maps
#align_import topology.compact_open from "leanprover-community/mathlib"@"4c19a16e4b705bf135cf9a80ac18fcc99c438514"
@@ -292,7 +292,7 @@ theorem tendsto_compactOpen_iff_forall {ι : Type*} {l : Filter ι} (F : ι →
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
it converges in the compact-open topology on each compact subset of `α`. -/
-theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space β]
+theorem exists_tendsto_compactOpen_iff_forall [WeaklyLocallyCompactSpace α] [T2Space β]
{ι : Type*} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
@@ -314,11 +314,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
exact tendsto_nhds_unique h₁ h₂
-- So glue the `f s hs` together and prove that this glued function `f₀` is a limit on each
-- compact set `s`
- have hs : ∀ x : α, ∃ (s : _), IsCompact s ∧ s ∈ 𝓝 x := by
- intro x
- obtain ⟨s, hs, hs'⟩ := exists_compact_mem_nhds x
- exact ⟨s, hs, hs'⟩
- refine ⟨liftCover' _ _ h hs, ?_⟩
+ refine ⟨liftCover' _ _ h exists_compact_mem_nhds, ?_⟩
rw [tendsto_compactOpen_iff_forall]
intro s hs
rw [liftCover_restrict']
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -43,7 +43,7 @@ namespace ContinuousMap
section CompactOpen
-variable {α : Type _} {β : Type _} {γ : Type _}
+variable {α : Type*} {β : Type*} {γ : Type*}
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
@@ -161,7 +161,7 @@ theorem continuous_comp' [LocallyCompactSpace β] :
exact mem_prod.mpr ⟨hKL, image_subset_iff.mpr hLU⟩)
#align continuous_map.continuous_comp' ContinuousMap.continuous_comp'
-theorem continuous.comp' {X : Type _} [TopologicalSpace X] [LocallyCompactSpace β] {f : X → C(α, β)}
+theorem continuous.comp' {X : Type*} [TopologicalSpace X] [LocallyCompactSpace β] {f : X → C(α, β)}
{g : X → C(β, γ)} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => (g x).comp (f x) :=
continuous_comp'.comp (hf.prod_mk hg : Continuous fun x => (f x, g x))
@@ -277,13 +277,13 @@ theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
simp [nhds_iInf, nhds_induced]
#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
-theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
+theorem tendsto_compactOpen_restrict {ι : Type*} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
(hFf : Filter.Tendsto F l (𝓝 f)) (s : Set α) :
Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
(continuous_restrict s).continuousAt.tendsto.comp hFf
#align continuous_map.tendsto_compact_open_restrict ContinuousMap.tendsto_compactOpen_restrict
-theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
+theorem tendsto_compactOpen_iff_forall {ι : Type*} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) := by
rw [compactOpen_eq_sInf_induced]
@@ -293,7 +293,7 @@ theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι →
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
it converges in the compact-open topology on each compact subset of `α`. -/
theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space β]
- {ι : Type _} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
+ {ι : Type*} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
constructor
@@ -451,7 +451,7 @@ open ContinuousMap
namespace Homeomorph
-variable {α : Type _} {β : Type _} {γ : Type _}
+variable {α : Type*} {β : Type*} {γ : Type*}
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
@@ -489,7 +489,7 @@ end Homeomorph
section QuotientMap
-variable {X₀ X Y Z : Type _} [TopologicalSpace X₀] [TopologicalSpace X] [TopologicalSpace Y]
+variable {X₀ X Y Z : Type*} [TopologicalSpace X₀] [TopologicalSpace X] [TopologicalSpace Y]
[TopologicalSpace Z] [LocallyCompactSpace Y] {f : X₀ → X}
theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y → Z}
@@ -2,17 +2,14 @@
Copyright (c) 2018 Reid Barton. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Reid Barton
-
-! This file was ported from Lean 3 source module topology.compact_open
-! leanprover-community/mathlib commit 4c19a16e4b705bf135cf9a80ac18fcc99c438514
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.ContinuousFunction.Basic
import Mathlib.Topology.Homeomorph
import Mathlib.Topology.SubsetProperties
import Mathlib.Topology.Maps
+#align_import topology.compact_open from "leanprover-community/mathlib"@"4c19a16e4b705bf135cf9a80ac18fcc99c438514"
+
/-!
# The compact-open topology
@@ -132,7 +132,6 @@ private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpe
ext ⟨g, _⟩
change g ∘ f '' s ⊆ u ↔ g '' (f '' s) ⊆ u
rw [Set.image_comp]
---#align continuous_map.image_gen continuous_map.image_gen
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
ContinuousMap
s is inducing (#5652)
If g : C(β, γ)
is inducing, then fun f : C(α, β) ↦ g.comp f
is inducing.
@@ -87,6 +87,11 @@ instance compactOpen : TopologicalSpace C(α, β) :=
{ m | ∃ (s : Set α) (_ : IsCompact s) (u : Set β) (_ : IsOpen u), m = CompactOpen.gen s u }
#align continuous_map.compact_open ContinuousMap.compactOpen
+/-- Definition of `ContinuousMap.compactOpen` in terms of `Set.image2`. -/
+theorem compactOpen_eq : @compactOpen α β _ _ =
+ .generateFrom (Set.image2 CompactOpen.gen {s | IsCompact s} {t | IsOpen t}) :=
+ congr_arg TopologicalSpace.generateFrom <| Set.ext fun _ ↦ by simp [eq_comm]
+
protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
IsOpen (CompactOpen.gen s u) :=
TopologicalSpace.GenerateOpen.basic _ (by dsimp [mem_setOf_eq]; tauto)
@@ -96,19 +101,30 @@ section Functorial
variable (g : C(β, γ))
-private theorem preimage_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpen u) :
+private theorem preimage_gen {s : Set α} {u : Set γ} :
ContinuousMap.comp g ⁻¹' CompactOpen.gen s u = CompactOpen.gen s (g ⁻¹' u) := by
ext ⟨f, _⟩
change g ∘ f '' s ⊆ u ↔ f '' s ⊆ g ⁻¹' u
rw [image_comp, image_subset_iff]
---#align continuous_map.preimage_gen ContinuousMap.preimage_gen
/-- C(α, -) is a functor. -/
theorem continuous_comp : Continuous (ContinuousMap.comp g : C(α, β) → C(α, γ)) :=
continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
- rw [hm, preimage_gen g hs hu]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
+ rw [hm, preimage_gen g]; exact ContinuousMap.isOpen_gen hs (hu.preimage g.2)
#align continuous_map.continuous_comp ContinuousMap.continuous_comp
+/-- If `g : C(β, γ)` is a topology inducing map, then the composition
+`ContinuousMap.comp g : C(α, β) → C(α, γ)` is a topology inducing map too. -/
+theorem inducing_comp (hg : Inducing g) : Inducing (g.comp : C(α, β) → C(α, γ)) where
+ induced := by
+ simp only [compactOpen_eq, induced_generateFrom_eq, image_image2, preimage_gen,
+ hg.setOf_isOpen, image2_image_right]
+
+/-- If `g : C(β, γ)` is a topological embedding, then the composition
+`ContinuousMap.comp g : C(α, β) → C(α, γ)` is an embedding too. -/
+theorem embedding_comp (hg : Embedding g) : Embedding (g.comp : C(α, β) → C(α, γ)) :=
+ ⟨inducing_comp g hg.1, fun _ _ ↦ (cancel_left hg.2).1⟩
+
variable (f : C(α, β))
private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpen u) :
ContinuousMap.continuous_eval_const{,'}
(#5649)
We had continuity of fun f : C(X, Y) ↦ f a
in two cases:
X
is a locally compact space;X
is a compact space and Y
is a metric space.In fact, it is true in general topological spaces.
@@ -184,30 +184,36 @@ theorem continuous_eval' [LocallyCompactSpace α] : Continuous fun p : C(α, β)
mem_nhds_iff.mpr ⟨w, by assumption, by assumption, by assumption⟩
#align continuous_map.continuous_eval' ContinuousMap.continuous_eval'
-/-- See also `ContinuousMap.continuous_eval_const` -/
-theorem continuous_eval_const' [LocallyCompactSpace α] (a : α) :
- Continuous fun f : C(α, β) => f a :=
- continuous_eval'.comp (continuous_id.prod_mk continuous_const)
-#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const'
-
-/-- See also `ContinuousMap.continuous_coe` -/
-theorem continuous_coe' [LocallyCompactSpace α] : @Continuous C(α, β) (α → β) _ _ (↑) :=
- continuous_pi continuous_eval_const'
-#align continuous_map.continuous_coe' ContinuousMap.continuous_coe'
+/-- Evaluation of a continuous map `f` at a point `a` is continuous in `f`.
+
+Porting note: merged `continuous_eval_const` with `continuous_eval_const'` removing unneeded
+assumptions. -/
+@[continuity]
+theorem continuous_eval_const (a : α) :
+ Continuous fun f : C(α, β) => f a := by
+ refine continuous_def.2 fun U hU ↦ ?_
+ convert ContinuousMap.isOpen_gen (isCompact_singleton (a := a)) hU using 1
+ ext; simp [CompactOpen.gen]
+#align continuous_map.continuous_eval_const' ContinuousMap.continuous_eval_const
+#align continuous_map.continuous_eval_const ContinuousMap.continuous_eval_const
+
+/-- Coercion from `C(α, β)` with compact-open topology to `α → β` with pointwise convergence
+topology is a continuous map.
+
+Porting note: merged `continuous_coe` with `continuous_coe'` removing unneeded assumptions. -/
+theorem continuous_coe : Continuous ((⇑) : C(α, β) → (α → β)) :=
+ continuous_pi continuous_eval_const
+#align continuous_map.continuous_coe' ContinuousMap.continuous_coe
+#align continuous_map.continuous_coe ContinuousMap.continuous_coe
+
+instance [T0Space β] : T0Space C(α, β) :=
+ t0Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
+
+instance [T1Space β] : T1Space C(α, β) :=
+ t1Space_of_injective_of_continuous FunLike.coe_injective continuous_coe
instance [T2Space β] : T2Space C(α, β) :=
- ⟨by
- intro f₁ f₂ h
- obtain ⟨x, hx⟩ := not_forall.mp (mt (FunLike.ext f₁ f₂) h)
- obtain ⟨u, v, hu, hv, hxu, hxv, huv⟩ := t2_separation hx
- refine'
- ⟨CompactOpen.gen {x} u, CompactOpen.gen {x} v,
- ContinuousMap.isOpen_gen isCompact_singleton hu,
- ContinuousMap.isOpen_gen isCompact_singleton hv, _, _, _⟩
- · rwa [CompactOpen.gen, mem_setOf_eq, image_singleton, singleton_subset_iff]
- · rwa [CompactOpen.gen, mem_setOf_eq, image_singleton, singleton_subset_iff]
- · rw [disjoint_iff_inter_eq_empty, ← gen_inter, huv.inter_eq,
- gen_empty_right (singleton_nonempty _)]⟩
+ .of_injective_continuous FunLike.coe_injective continuous_coe
end Ev
@@ -274,7 +280,7 @@ theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι →
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
it converges in the compact-open topology on each compact subset of `α`. -/
-theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space α] [T2Space β]
+theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space β]
{ι : Type _} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
@@ -291,8 +297,8 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
rintro s₁ hs₁ s₂ hs₂ x hxs₁ hxs₂
haveI := isCompact_iff_compactSpace.mp hs₁
haveI := isCompact_iff_compactSpace.mp hs₂
- have h₁ := (continuous_eval_const' (⟨x, hxs₁⟩ : s₁)).continuousAt.tendsto.comp (hf s₁ hs₁)
- have h₂ := (continuous_eval_const' (⟨x, hxs₂⟩ : s₂)).continuousAt.tendsto.comp (hf s₂ hs₂)
+ have h₁ := (continuous_eval_const (⟨x, hxs₁⟩ : s₁)).continuousAt.tendsto.comp (hf s₁ hs₁)
+ have h₂ := (continuous_eval_const (⟨x, hxs₂⟩ : s₂)).continuousAt.tendsto.comp (hf s₂ hs₂)
exact tendsto_nhds_unique h₁ h₂
-- So glue the `f s hs` together and prove that this glued function `f₀` is a limit on each
-- compact set `s`
@@ -411,7 +417,7 @@ theorem continuous_uncurry [LocallyCompactSpace α] [LocallyCompactSpace β] :
/-- The family of constant maps: `β → C(α, β)` as a continuous map. -/
def const' : C(β, C(α, β)) :=
- curry ⟨Prod.fst, continuous_fst⟩
+ curry ContinuousMap.fst
#align continuous_map.const' ContinuousMap.const'
@[simp]
@@ -444,8 +450,7 @@ def curry [LocallyCompactSpace α] [LocallyCompactSpace β] : C(α × β, γ)
#align homeomorph.curry Homeomorph.curry
/-- If `α` has a single element, then `β` is homeomorphic to `C(α, β)`. -/
-def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
- where
+def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β) where
toFun := const α
invFun f := f default
left_inv a := rfl
@@ -454,7 +459,7 @@ def continuousMapOfUnique [Unique α] : β ≃ₜ C(α, β)
rw [Unique.eq_default a]
rfl
continuous_toFun := continuous_const'
- continuous_invFun := continuous_eval'.comp (continuous_id.prod_mk continuous_const)
+ continuous_invFun := continuous_eval_const _
#align homeomorph.continuous_map_of_unique Homeomorph.continuousMapOfUnique
@[simp]
@@ -84,7 +84,7 @@ theorem gen_empty_right {s : Set α} (h : s.Nonempty) : CompactOpen.gen s (∅ :
-- The compact-open topology on the space of continuous maps α → β.
instance compactOpen : TopologicalSpace C(α, β) :=
TopologicalSpace.generateFrom
- { m | ∃ (s : Set α)(_ : IsCompact s)(u : Set β)(_ : IsOpen u), m = CompactOpen.gen s u }
+ { m | ∃ (s : Set α) (_ : IsCompact s) (u : Set β) (_ : IsOpen u), m = CompactOpen.gen s u }
#align continuous_map.compact_open ContinuousMap.compactOpen
protected theorem isOpen_gen {s : Set α} (hs : IsCompact s) {u : Set β} (hu : IsOpen u) :
@@ -230,7 +230,7 @@ on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is t
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
theorem compactOpen_eq_sInf_induced :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) =
- ⨅ (s : Set α) (_hs : IsCompact s),
+ ⨅ (s : Set α) (_ : IsCompact s),
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
refine' le_antisymm _ _
· refine' le_iInf₂ _
fix-comments.py
on all files.@@ -283,7 +283,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
exact ⟨f.restrict s, tendsto_compactOpen_restrict hf s⟩
· intro h
choose f hf using h
- -- By uniqueness of limits in a `t2_space`, since `fun i ↦ F i x` tends to both `f s₁ hs₁ x` and
+ -- By uniqueness of limits in a `T2Space`, since `fun i ↦ F i x` tends to both `f s₁ hs₁ x` and
-- `f s₂ hs₂ x`, we have `f s₁ hs₁ x = f s₂ hs₂ x`
have h :
∀ (s₁) (hs₁ : IsCompact s₁) (s₂) (hs₂ : IsCompact s₂) (x : α) (hxs₁ : x ∈ s₁) (hxs₂ : x ∈ s₂),
@@ -368,7 +368,7 @@ theorem continuous_of_continuous_uncurry (f : α → C(β, γ))
/-- The curried form of a continuous map `α × β → γ` as a continuous map `α → C(β, γ)`.
If `a × β` is locally compact, this is continuous. If `α` and `β` are both locally
- compact, then this is a homeomorphism, see `homeomorph.curry`. -/
+ compact, then this is a homeomorphism, see `Homeomorph.curry`. -/
def curry (f : C(α × β, γ)) : C(α, C(β, γ)) :=
⟨_, continuous_curry' f⟩
#align continuous_map.curry ContinuousMap.curry
@@ -395,7 +395,7 @@ theorem continuous_uncurry_of_continuous [LocallyCompactSpace β] (f : C(α, C(
/-- The uncurried form of a continuous map `α → C(β, γ)` as a continuous map `α × β → γ` (if `β` is
locally compact). If `α` is also locally compact, then this is a homeomorphism between the two
- function spaces, see `homeomorph.curry`. -/
+ function spaces, see `Homeomorph.curry`. -/
@[simps]
def uncurry [LocallyCompactSpace β] (f : C(α, C(β, γ))) : C(α × β, γ) :=
⟨_, continuous_uncurry_of_continuous f⟩
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -228,23 +228,23 @@ theorem compactOpen_le_induced (s : Set α) :
/-- The compact-open topology on `C(α, β)` is equal to the infimum of the compact-open topologies
on `C(s, β)` for `s` a compact subset of `α`. The key point of the proof is that the union of the
compact subsets of `α` is equal to the union of compact subsets of the compact subsets of `α`. -/
-theorem compactOpen_eq_infₛ_induced :
+theorem compactOpen_eq_sInf_induced :
(ContinuousMap.compactOpen : TopologicalSpace C(α, β)) =
⨅ (s : Set α) (_hs : IsCompact s),
TopologicalSpace.induced (ContinuousMap.restrict s) ContinuousMap.compactOpen := by
refine' le_antisymm _ _
- · refine' le_infᵢ₂ _
+ · refine' le_iInf₂ _
exact fun s _ => compactOpen_le_induced s
- simp only [← generateFrom_unionᵢ, induced_generateFrom_eq, ContinuousMap.compactOpen]
+ simp only [← generateFrom_iUnion, induced_generateFrom_eq, ContinuousMap.compactOpen]
apply TopologicalSpace.generateFrom_anti
rintro _ ⟨s, hs, u, hu, rfl⟩
- rw [mem_unionᵢ₂]
+ rw [mem_iUnion₂]
refine' ⟨s, hs, _, ⟨univ, isCompact_iff_isCompact_univ.mp hs, u, hu, rfl⟩, _⟩
ext f
simp only [CompactOpen.gen, mem_setOf_eq, mem_preimage, ContinuousMap.coe_restrict]
rw [image_comp f ((↑) : s → α)]
simp
-#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_infₛ_induced
+#align continuous_map.compact_open_eq_Inf_induced ContinuousMap.compactOpen_eq_sInf_induced
/-- For any subset `s` of `α`, the restriction of continuous functions to `s` is continuous as a
function from `C(α, β)` to `C(s, β)` with their respective compact-open topologies. -/
@@ -253,11 +253,11 @@ theorem continuous_restrict (s : Set α) : Continuous fun F : C(α, β) => F.res
exact compactOpen_le_induced s
#align continuous_map.continuous_restrict ContinuousMap.continuous_restrict
-theorem nhds_compactOpen_eq_infₛ_nhds_induced (f : C(α, β)) :
+theorem nhds_compactOpen_eq_sInf_nhds_induced (f : C(α, β)) :
𝓝 f = ⨅ (s) (hs : IsCompact s), (𝓝 (f.restrict s)).comap (ContinuousMap.restrict s) := by
- rw [compactOpen_eq_infₛ_induced]
- simp [nhds_infᵢ, nhds_induced]
-#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_infₛ_nhds_induced
+ rw [compactOpen_eq_sInf_induced]
+ simp [nhds_iInf, nhds_induced]
+#align continuous_map.nhds_compact_open_eq_Inf_nhds_induced ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced
theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C(α, β)} {f : C(α, β)}
(hFf : Filter.Tendsto F l (𝓝 f)) (s : Set α) :
@@ -268,8 +268,8 @@ theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C
theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) := by
- rw [compactOpen_eq_infₛ_induced]
- simp [nhds_infᵢ, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
+ rw [compactOpen_eq_sInf_induced]
+ simp [nhds_iInf, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
/-- A family `F` of functions in `C(α, β)` converges in the compact-open topology, if and only if
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -120,8 +120,7 @@ private theorem image_gen {s : Set α} (_ : IsCompact s) {u : Set γ} (_ : IsOpe
/-- C(-, γ) is a functor. -/
theorem continuous_comp_left : Continuous (fun g => g.comp f : C(β, γ) → C(α, γ)) :=
- continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ =>
- by
+ continuous_generateFrom fun m ⟨s, hs, u, hu, hm⟩ => by
rw [hm, image_gen f hs hu]
exact ContinuousMap.isOpen_gen (hs.image f.2) hu
#align continuous_map.continuous_comp_left ContinuousMap.continuous_comp_left
@@ -268,8 +267,7 @@ theorem tendsto_compactOpen_restrict {ι : Type _} {l : Filter ι} {F : ι → C
theorem tendsto_compactOpen_iff_forall {ι : Type _} {l : Filter ι} (F : ι → C(α, β)) (f : C(α, β)) :
Filter.Tendsto F l (𝓝 f) ↔
- ∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) :=
- by
+ ∀ (s) (hs : IsCompact s), Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 (f.restrict s)) := by
rw [compactOpen_eq_infₛ_induced]
simp [nhds_infᵢ, nhds_induced, Filter.tendsto_comap_iff, Function.comp]
#align continuous_map.tendsto_compact_open_iff_forall ContinuousMap.tendsto_compactOpen_iff_forall
@@ -279,8 +277,7 @@ it converges in the compact-open topology on each compact subset of `α`. -/
theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space α] [T2Space β]
{ι : Type _} {l : Filter ι} [Filter.NeBot l] (F : ι → C(α, β)) :
(∃ f, Filter.Tendsto F l (𝓝 f)) ↔
- ∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) :=
- by
+ ∀ (s : Set α) (hs : IsCompact s), ∃ f, Filter.Tendsto (fun i => (F i).restrict s) l (𝓝 f) := by
constructor
· rintro ⟨f, hf⟩ s _
exact ⟨f.restrict s, tendsto_compactOpen_restrict hf s⟩
@@ -290,8 +287,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
-- `f s₂ hs₂ x`, we have `f s₁ hs₁ x = f s₂ hs₂ x`
have h :
∀ (s₁) (hs₁ : IsCompact s₁) (s₂) (hs₂ : IsCompact s₂) (x : α) (hxs₁ : x ∈ s₁) (hxs₂ : x ∈ s₂),
- f s₁ hs₁ ⟨x, hxs₁⟩ = f s₂ hs₂ ⟨x, hxs₂⟩ :=
- by
+ f s₁ hs₁ ⟨x, hxs₁⟩ = f s₂ hs₂ ⟨x, hxs₂⟩ := by
rintro s₁ hs₁ s₂ hs₂ x hxs₁ hxs₂
haveI := isCompact_iff_compactSpace.mp hs₁
haveI := isCompact_iff_compactSpace.mp hs₂
@@ -300,8 +296,7 @@ theorem exists_tendsto_compactOpen_iff_forall [LocallyCompactSpace α] [T2Space
exact tendsto_nhds_unique h₁ h₂
-- So glue the `f s hs` together and prove that this glued function `f₀` is a limit on each
-- compact set `s`
- have hs : ∀ x : α, ∃ (s : _), IsCompact s ∧ s ∈ 𝓝 x :=
- by
+ have hs : ∀ x : α, ∃ (s : _), IsCompact s ∧ s ∈ 𝓝 x := by
intro x
obtain ⟨s, hs, hs'⟩ := exists_compact_mem_nhds x
exact ⟨s, hs, hs'⟩
@@ -483,8 +478,7 @@ variable {X₀ X Y Z : Type _} [TopologicalSpace X₀] [TopologicalSpace X] [Top
theorem QuotientMap.continuous_lift_prod_left (hf : QuotientMap f) {g : X × Y → Z}
(hg : Continuous fun p : X₀ × Y => g (f p.1, p.2)) : Continuous g := by
let Gf : C(X₀, C(Y, Z)) := ContinuousMap.curry ⟨_, hg⟩
- have h : ∀ x : X, Continuous fun y => g (x, y) :=
- by
+ have h : ∀ x : X, Continuous fun y => g (x, y) := by
intro x
obtain ⟨x₀, rfl⟩ := hf.surjective x
exact (Gf x₀).continuous
@@ -321,7 +321,7 @@ variable (α β)
/-- The coevaluation map `β → C(α, β × α)` sending a point `x : β` to the continuous function
on `α` sending `y` to `(x, y)`. -/
def coev (b : β) : C(α, β × α) :=
- ⟨Prod.mk b, continuous_const.prod_mk continuous_id⟩
+ { toFun := Prod.mk b }
#align continuous_map.coev ContinuousMap.coev
variable {α β}
congr
(#2595)
Switch to using congr!
instead, which is analogous to mathlib 3's congr'
.
@@ -389,12 +389,6 @@ theorem continuous_curry [LocallyCompactSpace (α × β)] :
apply continuous_of_continuous_uncurry
apply continuous_of_continuous_uncurry
rw [← (Homeomorph.prodAssoc _ _ _).symm.comp_continuous_iff']
- -- Porting note: rest of the proof was: `convert continuous_eval' <;> tidy`
- have : (Function.uncurry fun x y => (Function.uncurry (fun x y => (curry x) y) x) y) ∘
- ↑(Homeomorph.prodAssoc C(α × β, γ) α β).symm = fun p => p.fst p.snd := by
- ext ⟨f, x, y⟩
- simp [Homeomorph.prodAssoc]
- rw [this]
exact continuous_eval'
#align continuous_map.continuous_curry ContinuousMap.continuous_curry
Co-authored-by: Arien Malec <arien.malec@gmail.com> Co-authored-by: adamtopaz <github@adamtopaz.com>
The unported dependencies are