Zulip Chat Archive
Stream: Is there code for X?
Topic: Continuous uniqueElim
Kevin Buzzard (Dec 24 2024 at 21:37):
This works:
import Mathlib
def Homeomorph.pUnitPiEquiv (f : PUnit → Type*) [∀ x, TopologicalSpace (f x)] :
    (Π t, f t) ≃ₜ f () where
  toFun a := a ()
  invFun a _t := a
  left_inv _ := rfl
  right_inv _ := rfl
  continuous_toFun := by fun_prop
  continuous_invFun := by fun_prop
But this fails:
import Mathlib
def piUnique {α : Type*} [Unique α] (f : α → Type*) [∀ x, TopologicalSpace (f x)] :
    (Π t, f t) ≃ₜ f default where
  toFun a := a default
  invFun := uniqueElim
  left_inv f := by ext i; cases Unique.eq_default i; rfl
  right_inv _ := rfl
  continuous_toFun := by fun_prop
  continuous_invFun := by fun_prop -- fails
(continuity of uniqueElim is the issue). docs#uniqueElim is data defined with a rwso this scares me even more :-/ This also fails:
import Mathlib
def piUnique {α : Type*} [Unique α] (f : α → Type*) [∀ x, TopologicalSpace (f x)] :
    (Π t, f t) ≃ₜ f default where
  __ := Equiv.piUnique _
  continuous_toFun := by fun_prop
  continuous_invFun := by fun_prop -- fails
Do we have tools to prove Continuous uniqueElim or should I just bash it out?
Kevin Buzzard (Dec 24 2024 at 21:54):
Reduced it to this:
import Mathlib
lemma surely_we_have_this {α β : Type*} [TopologicalSpace α] [TopologicalSpace β] (e : α ≃ β)
    (h : IsOpenMap e) : Continuous e.symm := by sorry
def piUnique {α : Type*} [Unique α] (f : α → Type*) [∀ x, TopologicalSpace (f x)] :
    (Π t, f t) ≃ₜ f default where
  __ := Equiv.piUnique _
  continuous_toFun := by fun_prop
  continuous_invFun := surely_we_have_this (Equiv.piUnique f) <| isOpenMap_eval default
Kevin Buzzard (Dec 24 2024 at 21:59):
Am I making a meal of this?
import Mathlib
lemma Equiv.continuous_symm_of_isOpenMap {α β : Type*} [TopologicalSpace α] [TopologicalSpace β]
    (e : α ≃ β) (h : IsOpenMap e) : Continuous e.symm := by
  rw [continuous_def]
  intro U hU
  specialize h U hU
  rwa [← Set.image_equiv_eq_preimage_symm]
def piUnique {α : Type*} [Unique α] (f : α → Type*) [∀ x, TopologicalSpace (f x)] :
    (Π t, f t) ≃ₜ f default where
  __ := Equiv.piUnique _
  continuous_toFun := by fun_prop
  continuous_invFun := Equiv.continuous_symm_of_isOpenMap (Equiv.piUnique f) <|
    isOpenMap_eval default
Kevin Buzzard (Dec 24 2024 at 22:27):
Added to #20195
Last updated: May 02 2025 at 03:31 UTC