Skip to content

Commit a5ef0d5

Browse files
committed
chore: also try dsimp for proving continuity in the Homeomorph fields (#35697)
1 parent 4609a29 commit a5ef0d5

File tree

10 files changed

+11
-79
lines changed

10 files changed

+11
-79
lines changed

Mathlib/Analysis/Normed/Lp/PiLp.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,6 @@ theorem continuous_toLp [∀ i, TopologicalSpace (β i)] : Continuous (@toLp p (
546546
/-- `WithLp.equiv` as a homeomorphism. -/
547547
def homeomorph [∀ i, TopologicalSpace (β i)] : PiLp p β ≃ₜ (Π i, β i) where
548548
toEquiv := WithLp.equiv p (Π i, β i)
549-
continuous_toFun := continuous_ofLp p β
550-
continuous_invFun := continuous_toLp p β
551549

552550
@[simp]
553551
lemma toEquiv_homeomorph [∀ i, TopologicalSpace (β i)] :

Mathlib/Analysis/Normed/Lp/ProdLp.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,8 +486,6 @@ lemma prod_continuous_ofLp : Continuous (@ofLp p (α × β)) := continuous_induc
486486
/-- `WithLp.equiv` as a homeomorphism. -/
487487
def homeomorphProd : WithLp p (α × β) ≃ₜ α × β where
488488
toEquiv := WithLp.equiv p (α × β)
489-
continuous_toFun := prod_continuous_ofLp p α β
490-
continuous_invFun := prod_continuous_toLp p α β
491489

492490
@[simp]
493491
lemma toEquiv_homeomorphProd : (homeomorphProd p α β).toEquiv = WithLp.equiv p (α × β) := rfl

Mathlib/Topology/Algebra/ConstMulAction.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,6 @@ theorem continuous_const_smul_iff (c : G) : (Continuous fun x => c • f x) ↔
229229
@[to_additive (attr := simps!)]
230230
def Homeomorph.smul (γ : G) : α ≃ₜ α where
231231
toEquiv := MulAction.toPerm γ
232-
continuous_toFun := continuous_const_smul γ
233-
continuous_invFun := continuous_const_smul γ⁻¹
234232

235233
/-- The homeomorphism given by affine-addition by an element of an additive group `Γ` acting on
236234
`T` is a homeomorphism from `T` to itself. -/

Mathlib/Topology/Algebra/Constructions.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ theorem continuous_op : Continuous (op : M → Mᵐᵒᵖ) :=
4949
@[to_additive (attr := simps!) /-- `AddOpposite.op` as a homeomorphism. -/]
5050
def opHomeomorph : M ≃ₜ Mᵐᵒᵖ where
5151
toEquiv := opEquiv
52-
continuous_toFun := continuous_op
53-
continuous_invFun := continuous_unop
5452

5553
@[to_additive]
5654
instance instT2Space [T2Space M] : T2Space Mᵐᵒᵖ := opHomeomorph.t2Space

Mathlib/Topology/Algebra/Constructions/DomMulAct.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ theorem continuous_mk_symm : Continuous (@mk M).symm := continuous_induced_dom
4444
@[to_additive (attr := simps toEquiv) /-- `DomAddAct.mk` as a homeomorphism. -/]
4545
def mkHomeomorph : M ≃ₜ Mᵈᵐᵃ where
4646
toEquiv := mk
47-
continuous_toFun := by dsimp; fun_prop
48-
continuous_invFun := by dsimp; fun_prop
4947

5048
@[to_additive (attr := simp)] theorem coe_mkHomeomorph : ⇑(mkHomeomorph : M ≃ₜ Mᵈᵐᵃ) = mk := rfl
5149

Mathlib/Topology/Algebra/Group/Basic.lean

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,7 @@ variable (G)
319319
@[to_additive /-- Negation in a topological group as a homeomorphism. -/]
320320
protected def Homeomorph.inv (G : Type*) [TopologicalSpace G] [InvolutiveInv G]
321321
[ContinuousInv G] : G ≃ₜ G :=
322-
{ Equiv.inv G with
323-
continuous_toFun := continuous_inv
324-
continuous_invFun := continuous_inv }
322+
{ Equiv.inv G with }
325323

326324
@[to_additive (attr := simp)]
327325
lemma Homeomorph.symm_inv {G : Type*} [TopologicalSpace G] [InvolutiveInv G] [ContinuousInv G] :
@@ -632,9 +630,7 @@ theorem inv_mem_nhds_one {S : Set G} (hS : S ∈ (𝓝 1 : Filter G)) : S⁻¹
632630
/-- The map `(x, y) ↦ (x, x * y)` as a homeomorphism. This is a shear mapping. -/
633631
@[to_additive /-- The map `(x, y) ↦ (x, x + y)` as a homeomorphism. This is a shear mapping. -/]
634632
protected def Homeomorph.shearMulRight : G × G ≃ₜ G × G :=
635-
{ Equiv.prodShear (Equiv.refl _) Equiv.mulLeft with
636-
continuous_toFun := by dsimp; fun_prop
637-
continuous_invFun := by dsimp; fun_prop }
633+
{ Equiv.prodShear (Equiv.refl _) Equiv.mulLeft with }
638634

639635
@[to_additive (attr := simp)]
640636
theorem Homeomorph.shearMulRight_coe :
@@ -1302,7 +1298,6 @@ its additive units. -/]
13021298
def toUnits_homeomorph [Group G] [TopologicalSpace G] [ContinuousInv G] : G ≃ₜ Gˣ where
13031299
toEquiv := toUnits.toEquiv
13041300
continuous_toFun := Units.continuous_iff.2 ⟨continuous_id, continuous_inv⟩
1305-
continuous_invFun := Units.continuous_val
13061301

13071302
@[to_additive] theorem Units.isEmbedding_val [Group G] [TopologicalSpace G] [ContinuousInv G] :
13081303
IsEmbedding (val : Gˣ → G) :=

Mathlib/Topology/Constructions.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,7 @@ theorem ContinuousAt.finCons {f : X → A 0} {g : X → ∀ j : Fin n, A (Fin.su
919919
ContinuousAt (fun a => Fin.cons (f a) (g a)) x :=
920920
hf.tendsto.finCons hg
921921

922+
@[fun_prop]
922923
theorem Continuous.finCons {f : X → A 0} {g : X → ∀ j : Fin n, A (Fin.succ j)}
923924
(hf : Continuous f) (hg : Continuous g) : Continuous fun a => Fin.cons (f a) (g a) :=
924925
continuous_iff_continuousAt.2 fun _ => hf.continuousAt.finCons hg.continuousAt

Mathlib/Topology/Constructions/SumProd.lean

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ theorem Filter.Eventually.prodMk_nhds {px : X → Prop} {x} (hx : ∀ᶠ x in
216216
{y} (hy : ∀ᶠ y in 𝓝 y, py y) : ∀ᶠ p in 𝓝 (x, y), px (p : X × Y).1 ∧ py p.2 :=
217217
(hx.prod_inl_nhds y).and (hy.prod_inr_nhds x)
218218

219+
@[fun_prop]
219220
theorem continuous_swap : Continuous (Prod.swap : X × Y → Y × X) :=
220221
continuous_snd.prodMk continuous_fst
221222

@@ -620,8 +621,6 @@ variable {X' Y' : Type*} [TopologicalSpace X'] [TopologicalSpace Y']
620621
/-- Product of two homeomorphisms. -/
621622
def prodCongr (h₁ : X ≃ₜ X') (h₂ : Y ≃ₜ Y') : X × Y ≃ₜ X' × Y' where
622623
toEquiv := h₁.toEquiv.prodCongr h₂.toEquiv
623-
continuous_toFun := by dsimp; fun_prop
624-
continuous_invFun := by dsimp; fun_prop
625624

626625
@[simp]
627626
theorem prodCongr_symm (h₁ : X ≃ₜ X') (h₂ : Y ≃ₜ Y') :
@@ -636,8 +635,6 @@ variable (W X Y Z)
636635

637636
/-- `X × Y` is homeomorphic to `Y × X`. -/
638637
def prodComm : X × Y ≃ₜ Y × X where
639-
continuous_toFun := continuous_snd.prodMk continuous_fst
640-
continuous_invFun := continuous_snd.prodMk continuous_fst
641638
toEquiv := Equiv.prodComm X Y
642639

643640
@[simp]
@@ -650,8 +647,6 @@ theorem coe_prodComm : ⇑(prodComm X Y) = Prod.swap :=
650647

651648
/-- `(X × Y) × Z` is homeomorphic to `X × (Y × Z)`. -/
652649
def prodAssoc : (X × Y) × Z ≃ₜ X × Y × Z where
653-
continuous_toFun := continuous_fst.fst.prodMk (continuous_fst.snd.prodMk continuous_snd)
654-
continuous_invFun := (continuous_fst.prodMk continuous_snd.fst).prodMk continuous_snd.snd
655650
toEquiv := Equiv.prodAssoc X Y Z
656651

657652
@[simp]
@@ -660,14 +655,6 @@ lemma prodAssoc_toEquiv : (prodAssoc X Y Z).toEquiv = Equiv.prodAssoc X Y Z := r
660655
/-- Four-way commutativity of `prod`. The name matches `mul_mul_mul_comm`. -/
661656
def prodProdProdComm : (X × Y) × W × Z ≃ₜ (X × W) × Y × Z where
662657
toEquiv := Equiv.prodProdProdComm X Y W Z
663-
continuous_toFun := by
664-
unfold Equiv.prodProdProdComm
665-
dsimp only
666-
fun_prop
667-
continuous_invFun := by
668-
unfold Equiv.prodProdProdComm
669-
dsimp only
670-
fun_prop
671658

672659
@[simp]
673660
theorem prodProdProdComm_symm : (prodProdProdComm X Y W Z).symm = prodProdProdComm X W Y Z :=
@@ -677,8 +664,6 @@ theorem prodProdProdComm_symm : (prodProdProdComm X Y W Z).symm = prodProdProdCo
677664
@[simps! -fullyApplied apply]
678665
def prodPUnit : X × PUnit ≃ₜ X where
679666
toEquiv := Equiv.prodPUnit X
680-
continuous_toFun := continuous_fst
681-
continuous_invFun := .prodMk_left _
682667

683668
/-- `{*} × X` is homeomorphic to `X`. -/
684669
def punitProd : PUnit × X ≃ₜ X :=
@@ -852,8 +837,6 @@ variable {X' Y' : Type*} [TopologicalSpace X'] [TopologicalSpace Y']
852837

853838
/-- Sum of two homeomorphisms. -/
854839
def sumCongr (h₁ : X ≃ₜ X') (h₂ : Y ≃ₜ Y') : X ⊕ Y ≃ₜ X' ⊕ Y' where
855-
continuous_toFun := h₁.continuous.sumMap h₂.continuous
856-
continuous_invFun := h₁.symm.continuous.sumMap h₂.symm.continuous
857840
toEquiv := h₁.toEquiv.sumCongr h₂.toEquiv
858841

859842
@[simp]
@@ -877,8 +860,6 @@ variable (W X Y Z)
877860
/-- `X ⊕ Y` is homeomorphic to `Y ⊕ X`. -/
878861
def sumComm : X ⊕ Y ≃ₜ Y ⊕ X where
879862
toEquiv := Equiv.sumComm X Y
880-
continuous_toFun := continuous_sum_swap
881-
continuous_invFun := continuous_sum_swap
882863

883864
@[simp]
884865
theorem sumComm_symm : (sumComm X Y).symm = sumComm Y X :=
@@ -899,22 +880,13 @@ lemma continuous_sumAssoc_symm : Continuous (Equiv.sumAssoc X Y Z).symm :=
899880
/-- `(X ⊕ Y) ⊕ Z` is homeomorphic to `X ⊕ (Y ⊕ Z)`. -/
900881
def sumAssoc : (X ⊕ Y) ⊕ Z ≃ₜ X ⊕ Y ⊕ Z where
901882
toEquiv := Equiv.sumAssoc X Y Z
902-
continuous_toFun := continuous_sumAssoc X Y Z
903-
continuous_invFun := continuous_sumAssoc_symm X Y Z
904883

905884
@[simp]
906885
lemma sumAssoc_toEquiv : (sumAssoc X Y Z).toEquiv = Equiv.sumAssoc X Y Z := rfl
907886

908887
/-- Four-way commutativity of the disjoint union. The name matches `add_add_add_comm`. -/
909888
def sumSumSumComm : (X ⊕ Y) ⊕ W ⊕ Z ≃ₜ (X ⊕ W) ⊕ Y ⊕ Z where
910889
toEquiv := Equiv.sumSumSumComm X Y W Z
911-
continuous_toFun := by
912-
have : Continuous (Sum.map (Sum.map (@id X) ⇑(Homeomorph.sumComm Y W)) (@id Z)) := by fun_prop
913-
fun_prop
914-
continuous_invFun := by
915-
have : Continuous (Sum.map (Sum.map (@id X) (Homeomorph.sumComm Y W).symm) (@id Z)) := by
916-
fun_prop
917-
fun_prop
918890

919891
@[simp]
920892
lemma sumSumSumComm_toEquiv : (sumSumSumComm W X Y Z).toEquiv = (Equiv.sumSumSumComm W X Y Z) := rfl
@@ -926,8 +898,6 @@ lemma sumSumSumComm_symm : (sumSumSumComm X Y W Z).symm = (sumSumSumComm X W Y Z
926898
@[simps! -fullyApplied apply]
927899
def sumEmpty [IsEmpty Y] : X ⊕ Y ≃ₜ X where
928900
toEquiv := Equiv.sumEmpty X Y
929-
continuous_toFun := Continuous.sumElim continuous_id (by fun_prop)
930-
continuous_invFun := continuous_inl
931901

932902
/-- The sum of `X` with any empty topological space is homeomorphic to `X`. -/
933903
def emptySum [IsEmpty Y] : Y ⊕ X ≃ₜ X := (sumComm Y X).trans (sumEmpty X Y)

Mathlib/Topology/Homeomorph/Defs.lean

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ variable {X Y W Z : Type*}
4343
structure Homeomorph (X : Type*) (Y : Type*) [TopologicalSpace X] [TopologicalSpace Y]
4444
extends X ≃ Y where
4545
/-- The forward map of a homeomorphism is a continuous function. -/
46-
continuous_toFun : Continuous toFun := by fun_prop
46+
continuous_toFun : Continuous toFun := by
47+
first | fun_prop | eta_expand; dsimp -failIfUnchanged; fun_prop
4748
/-- The inverse map of a homeomorphism is a continuous function. -/
48-
continuous_invFun : Continuous invFun := by fun_prop
49+
continuous_invFun : Continuous invFun := by
50+
first | fun_prop | eta_expand; dsimp -failIfUnchanged; fun_prop
4951

5052
@[inherit_doc]
5153
infixl:25 " ≃ₜ " => Homeomorph
@@ -105,8 +107,6 @@ theorem ext {h h' : X ≃ₜ Y} (H : ∀ x, h x = h' x) : h = h' :=
105107
/-- Identity map as a homeomorphism. -/
106108
@[simps! -fullyApplied apply]
107109
protected def refl (X : Type*) [TopologicalSpace X] : X ≃ₜ X where
108-
continuous_toFun := continuous_id
109-
continuous_invFun := continuous_id
110110
toEquiv := Equiv.refl X
111111

112112
/-- Composition of two homeomorphisms. -/
@@ -327,9 +327,7 @@ variable (X Y) in
327327
/-- If both `X` and `Y` have a unique element, then `X ≃ₜ Y`. -/
328328
@[simps!]
329329
def homeomorphOfUnique [Unique X] [Unique Y] : X ≃ₜ Y :=
330-
{ Equiv.ofUnique X Y with
331-
continuous_toFun := continuous_const
332-
continuous_invFun := continuous_const }
330+
{ Equiv.ofUnique X Y with }
333331

334332
@[simp]
335333
theorem map_nhds_eq (h : X ≃ₜ Y) (x : X) : map h (𝓝 x) = 𝓝 (h x) :=

Mathlib/Topology/Homeomorph/Lemmas.lean

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,6 @@ predicates `p : X → Prop` and `q : Y → Prop` so long as `p = q ∘ h`. -/
158158
@[simps!]
159159
def subtype {p : X → Prop} {q : Y → Prop} (h : X ≃ₜ Y) (h_iff : ∀ x, p x ↔ q (h x)) :
160160
{x // p x} ≃ₜ {y // q y} where
161-
continuous_toFun := by simpa [Equiv.coe_subtypeEquiv_eq_map] using h.continuous.subtype_map _
162-
continuous_invFun := by simpa [Equiv.coe_subtypeEquiv_eq_map] using
163-
h.symm.continuous.subtype_map _
164161
__ := h.subtypeEquiv h_iff
165162

166163
@[simp]
@@ -175,8 +172,6 @@ abbrev sets {s : Set X} {t : Set Y} (h : X ≃ₜ Y) (h_eq : s = h ⁻¹' t) : s
175172

176173
/-- If two sets are equal, then they are homeomorphic. -/
177174
def setCongr {s t : Set X} (h : s = t) : s ≃ₜ t where
178-
continuous_toFun := continuous_inclusion h.subset
179-
continuous_invFun := continuous_inclusion h.symm.subset
180175
toEquiv := Equiv.setCongr h
181176

182177
section prod
@@ -188,8 +183,6 @@ variable (X Y W Z)
188183
def prodUnique [Unique Y] :
189184
X × Y ≃ₜ X where
190185
toEquiv := Equiv.prodUnique X Y
191-
continuous_toFun := continuous_fst
192-
continuous_invFun := continuous_id.prodMk continuous_const
193186

194187
@[simp] theorem coe_prodUnique [Unique Y] : ⇑(prodUnique X Y) = Prod.fst := rfl
195188

@@ -210,7 +203,6 @@ def sumPiEquivProdPi (S T : Type*) (A : S ⊕ T → Type*)
210203
[∀ st, TopologicalSpace (A st)] :
211204
(Π (st : S ⊕ T), A st) ≃ₜ (Π (s : S), A (.inl s)) × (Π (t : T), A (.inr t)) where
212205
__ := Equiv.sumPiEquivProdPi _
213-
continuous_toFun := .prodMk (by fun_prop) (by fun_prop)
214206
continuous_invFun := continuous_pi <| by rintro (s | t) <;> dsimp <;> fun_prop
215207

216208
/-- The product `Π t : α, f t` of a family of topological spaces is homeomorphic to the
@@ -255,8 +247,6 @@ lemma piCongrLeft_apply_apply {ι ι' : Type*} {Y : ι' → Type*} [∀ j, Topol
255247
@[simps! apply toEquiv]
256248
def piCongrRight {ι : Type*} {Y₁ Y₂ : ι → Type*} [∀ i, TopologicalSpace (Y₁ i)]
257249
[∀ i, TopologicalSpace (Y₂ i)] (F : ∀ i, Y₁ i ≃ₜ Y₂ i) : (∀ i, Y₁ i) ≃ₜ ∀ i, Y₂ i where
258-
continuous_toFun := Pi.continuous_postcomp' fun i ↦ (F i).continuous
259-
continuous_invFun := Pi.continuous_postcomp' fun i ↦ (F i).symm.continuous
260250
toEquiv := Equiv.piCongrRight fun i => (F i).toEquiv
261251

262252
@[simp]
@@ -276,8 +266,6 @@ def piCongr {ι₁ ι₂ : Type*} {Y₁ : ι₁ → Type*} {Y₂ : ι₂ → Typ
276266

277267
/-- `ULift X` is homeomorphic to `X`. -/
278268
def ulift.{u, v} {X : Type v} [TopologicalSpace X] : ULift.{u, v} X ≃ₜ X where
279-
continuous_toFun := continuous_uliftDown
280-
continuous_invFun := continuous_uliftUp
281269
toEquiv := Equiv.ulift
282270

283271
/-- The natural homeomorphism `(ι ⊕ ι' → X) ≃ₜ (ι → X) × (ι' → X)`.
@@ -298,6 +286,7 @@ private theorem _root_.Fin.appendEquiv_eq_homeomorph (m n : ℕ) : Fin.appendEqu
298286
apply Equiv.symm_bijective.injective
299287
ext x i <;> simp
300288

289+
@[fun_prop]
301290
theorem _root_.Fin.continuous_append (m n : ℕ) :
302291
Continuous fun (p : (Fin m → X) × (Fin n → X)) ↦ Fin.append p.1 p.2 := by
303292
suffices Continuous (Fin.appendEquiv m n) by exact this
@@ -309,10 +298,6 @@ theorem _root_.Fin.continuous_append (m n : ℕ) :
309298
@[simps!]
310299
def _root_.Fin.appendHomeomorph (m n : ℕ) : (Fin m → X) × (Fin n → X) ≃ₜ (Fin (m + n) → X) where
311300
toEquiv := Fin.appendEquiv m n
312-
continuous_toFun := Fin.continuous_append m n
313-
continuous_invFun := by
314-
rw [Fin.appendEquiv_eq_homeomorph]
315-
exact Homeomorph.continuous_invFun _
316301

317302
@[simp]
318303
theorem _root_.Fin.appendHomeomorph_toEquiv (m n : ℕ) :
@@ -337,15 +322,11 @@ end Distrib
337322
@[simps! -fullyApplied]
338323
def funUnique (ι X : Type*) [Unique ι] [TopologicalSpace X] : (ι → X) ≃ₜ X where
339324
toEquiv := Equiv.funUnique ι X
340-
continuous_toFun := continuous_apply _
341-
continuous_invFun := continuous_pi fun _ => continuous_id
342325

343326
/-- Homeomorphism between dependent functions `Π i : Fin 2, X i` and `X 0 × X 1`. -/
344327
@[simps! -fullyApplied]
345328
def piFinTwo.{u} (X : Fin 2Type u) [∀ i, TopologicalSpace (X i)] : (∀ i, X i) ≃ₜ X 0 × X 1 where
346329
toEquiv := piFinTwoEquiv X
347-
continuous_toFun := (continuous_apply 0).prodMk (continuous_apply 1)
348-
continuous_invFun := continuous_pi <| Fin.forall_fin_two.2 ⟨continuous_fst, continuous_snd⟩
349330

350331
/-- Homeomorphism between `X² = Fin 2 → X` and `X × X`. -/
351332
@[simps! -fullyApplied]
@@ -365,7 +346,7 @@ def image (e : X ≃ₜ Y) (s : Set X) : s ≃ₜ e '' s where
365346
@[simps! -fullyApplied]
366347
def Set.univ (X : Type*) [TopologicalSpace X] : (univ : Set X) ≃ₜ X where
367348
toEquiv := Equiv.Set.univ X
368-
continuous_toFun := continuous_subtype_val
349+
-- TODO: `fun_prop` cannot apply `Continuous.subtype_mk`
369350
continuous_invFun := continuous_id.subtype_mk _
370351

371352
/-- `s ×ˢ t` is homeomorphic to `s × t`. -/
@@ -387,8 +368,6 @@ variable {ι : Type*}
387368
def piEquivPiSubtypeProd (p : ι → Prop) (Y : ι → Type*) [∀ i, TopologicalSpace (Y i)]
388369
[DecidablePred p] : (∀ i, Y i) ≃ₜ (∀ i : { x // p x }, Y i) × ∀ i : { x // ¬p x }, Y i where
389370
toEquiv := Equiv.piEquivPiSubtypeProd p Y
390-
continuous_toFun := by
391-
apply Continuous.prodMk <;> exact continuous_pi fun j => continuous_apply j.1
392371
continuous_invFun :=
393372
continuous_pi fun j => by
394373
dsimp only [Equiv.piEquivPiSubtypeProd]; split_ifs
@@ -402,7 +381,6 @@ variable [DecidableEq ι] (i : ι)
402381
def piSplitAt (Y : ι → Type*) [∀ j, TopologicalSpace (Y j)] :
403382
(∀ j, Y j) ≃ₜ Y i × ∀ j : { j // j ≠ i }, Y j where
404383
toEquiv := Equiv.piSplitAt i Y
405-
continuous_toFun := (continuous_apply i).prodMk (continuous_pi fun j => continuous_apply j.1)
406384
continuous_invFun :=
407385
continuous_pi fun j => by
408386
dsimp only [Equiv.piSplitAt]

0 commit comments

Comments
 (0)