File: Mathlib/Topology/Homotopy/Equiv.lean

full_name: ContinuousMap.HomotopyEquiv.right_inv
code: /-- A homotopy equivalence between topological spaces `X` and `Y` are a pair of functions
`toFun : C(X, Y)` and `invFun : C(Y, X)` such that `toFun.comp invFun` and `invFun.comp toFun`
are both homotopic to corresponding identity maps.
-/
@[ext]
structure HomotopyEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] where
  toFun : C(X, Y)
  invFun : C(Y, X)
  left_inv : (invFun.comp toFun).Homotopic (ContinuousMap.id X)
  right_inv : (toFun.comp invFun).Homotopic (ContinuousMap.id Y)
goal: (self.toFun.comp self.invFun).Homotopic (ContinuousMap.id Y)

full_name: ContinuousMap.HomotopyEquiv
code: /-- A homotopy equivalence between topological spaces `X` and `Y` are a pair of functions
`toFun : C(X, Y)` and `invFun : C(Y, X)` such that `toFun.comp invFun` and `invFun.comp toFun`
are both homotopic to corresponding identity maps.
-/
@[ext]
structure HomotopyEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] where
  toFun : C(X, Y)
  invFun : C(Y, X)
  left_inv : (invFun.comp toFun).Homotopic (ContinuousMap.id X)
  right_inv : (toFun.comp invFun).Homotopic (ContinuousMap.id Y)
goal: Type (max u v)

full_name: ContinuousMap.HomotopyEquiv.toFun
code: /-- A homotopy equivalence between topological spaces `X` and `Y` are a pair of functions
`toFun : C(X, Y)` and `invFun : C(Y, X)` such that `toFun.comp invFun` and `invFun.comp toFun`
are both homotopic to corresponding identity maps.
-/
@[ext]
structure HomotopyEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] where
  toFun : C(X, Y)
  invFun : C(Y, X)
  left_inv : (invFun.comp toFun).Homotopic (ContinuousMap.id X)
  right_inv : (toFun.comp invFun).Homotopic (ContinuousMap.id Y)
goal: C(X, Y)

full_name: ContinuousMap.HomotopyEquiv.invFun
code: /-- A homotopy equivalence between topological spaces `X` and `Y` are a pair of functions
`toFun : C(X, Y)` and `invFun : C(Y, X)` such that `toFun.comp invFun` and `invFun.comp toFun`
are both homotopic to corresponding identity maps.
-/
@[ext]
structure HomotopyEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] where
  toFun : C(X, Y)
  invFun : C(Y, X)
  left_inv : (invFun.comp toFun).Homotopic (ContinuousMap.id X)
  right_inv : (toFun.comp invFun).Homotopic (ContinuousMap.id Y)
goal: C(Y, X)

full_name: ContinuousMap.HomotopyEquiv.left_inv
code: /-- A homotopy equivalence between topological spaces `X` and `Y` are a pair of functions
`toFun : C(X, Y)` and `invFun : C(Y, X)` such that `toFun.comp invFun` and `invFun.comp toFun`
are both homotopic to corresponding identity maps.
-/
@[ext]
structure HomotopyEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] where
  toFun : C(X, Y)
  invFun : C(Y, X)
  left_inv : (invFun.comp toFun).Homotopic (ContinuousMap.id X)
  right_inv : (toFun.comp invFun).Homotopic (ContinuousMap.id Y)
goal: (self.invFun.comp self.toFun).Homotopic (ContinuousMap.id X)

full_name: ContinuousMap._aux_Mathlib_Topology_Homotopy_Equiv___unexpand_ContinuousMap_HomotopyEquiv_1
code: scoped infixl:25 " ≃ₕ " => ContinuousMap.HomotopyEquiv
goal: Lean.PrettyPrinter.Unexpander

full_name: ContinuousMap.«_aux_Mathlib_Topology_Homotopy_Equiv___macroRules_ContinuousMap_term_≃ₕ__1»
code: scoped infixl:25 " ≃ₕ " => ContinuousMap.HomotopyEquiv
goal: Lean.Macro

full_name: ContinuousMap.HomotopyEquiv.toFun'
code: /-- Coercion of a `HomotopyEquiv` to function. While the Lean 4 way is to unfold coercions, this
auxiliary definition will make porting of Lean 3 code easier.

Porting note (#11215): TODO: drop this definition. -/
@[coe] def toFun' (e : X ≃ₕ Y) : X → Y 
goal: X → Y

full_name: ContinuousMap.HomotopyEquiv.instCoeFunForall
code: instance : CoeFun (X ≃ₕ Y) fun _ => X → Y 
goal: CoeFun (X ≃ₕ Y) fun x => X → Y

full_name: ContinuousMap.HomotopyEquiv.toFun_eq_coe
code: @[simp]
theorem toFun_eq_coe (h : HomotopyEquiv X Y) : (h.toFun : X → Y) = h 
goal: ⇑h.toFun = ↑h

full_name: ContinuousMap.HomotopyEquiv.continuous
code: @[continuity]
theorem continuous (h : HomotopyEquiv X Y) : Continuous h 
goal: Continuous ↑h

full_name: Homeomorph.toHomotopyEquiv
code: /-- Any homeomorphism is a homotopy equivalence.
-/
def toHomotopyEquiv (h : X ≃ₜ Y) : X ≃ₕ Y 
goal: X ≃ₕ Y

full_name: Homeomorph.coe_toHomotopyEquiv
code: @[simp]
theorem coe_toHomotopyEquiv (h : X ≃ₜ Y) : (h.toHomotopyEquiv : X → Y) = h 
goal: ↑h.toHomotopyEquiv = ⇑h

full_name: ContinuousMap.HomotopyEquiv.symm
code: /-- If `X` is homotopy equivalent to `Y`, then `Y` is homotopy equivalent to `X`.
-/
def symm (h : X ≃ₕ Y) : Y ≃ₕ X 
goal: Y ≃ₕ X

full_name: ContinuousMap.HomotopyEquiv.coe_invFun
code: @[simp]
theorem coe_invFun (h : HomotopyEquiv X Y) : (⇑h.invFun : Y → X) = ⇑h.symm 
goal: ⇑h.invFun = ↑h.symm

full_name: ContinuousMap.HomotopyEquiv.Simps.apply
code: /-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because it is a composition of multiple projections. -/
def Simps.apply (h : X ≃ₕ Y) : X → Y 
goal: X → Y

full_name: ContinuousMap.HomotopyEquiv.Simps.symm_apply
code: /-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because it is a composition of multiple projections. -/
def Simps.symm_apply (h : X ≃ₕ Y) : Y → X 
goal: Y → X

full_name: ContinuousMap.HomotopyEquiv.refl_apply
code: /-- Any topological space is homotopy equivalent to itself.
-/
@[simps!]
def refl (X : Type u) [TopologicalSpace X] : X ≃ₕ X 
goal: ↑(ContinuousMap.HomotopyEquiv.refl X) a = a

full_name: ContinuousMap.HomotopyEquiv.refl_symm_apply
code: /-- Any topological space is homotopy equivalent to itself.
-/
@[simps!]
def refl (X : Type u) [TopologicalSpace X] : X ≃ₕ X 
goal: ↑(ContinuousMap.HomotopyEquiv.refl X).symm a = a

full_name: ContinuousMap.HomotopyEquiv.refl
code: /-- Any topological space is homotopy equivalent to itself.
-/
@[simps!]
def refl (X : Type u) [TopologicalSpace X] : X ≃ₕ X 
goal: X ≃ₕ X

full_name: ContinuousMap.HomotopyEquiv.instInhabitedUnit
code: instance : Inhabited (HomotopyEquiv Unit Unit) 
goal: Inhabited (Unit ≃ₕ Unit)

full_name: ContinuousMap.HomotopyEquiv.trans_apply
code: /--
If `X` is homotopy equivalent to `Y`, and `Y` is homotopy equivalent to `Z`, then `X` is homotopy
equivalent to `Z`.
-/
@[simps!]
def trans (h₁ : X ≃ₕ Y) (h₂ : Y ≃ₕ Z) : X ≃ₕ Z 
goal: ∀ (a : X), ↑(h₁.trans h₂) a = ↑h₂ (↑h₁ a)

full_name: ContinuousMap.HomotopyEquiv.trans
code: /--
If `X` is homotopy equivalent to `Y`, and `Y` is homotopy equivalent to `Z`, then `X` is homotopy
equivalent to `Z`.
-/
@[simps!]
def trans (h₁ : X ≃ₕ Y) (h₂ : Y ≃ₕ Z) : X ≃ₕ Z 
goal: X ≃ₕ Z

full_name: ContinuousMap.HomotopyEquiv.trans_symm_apply
code: /--
If `X` is homotopy equivalent to `Y`, and `Y` is homotopy equivalent to `Z`, then `X` is homotopy
equivalent to `Z`.
-/
@[simps!]
def trans (h₁ : X ≃ₕ Y) (h₂ : Y ≃ₕ Z) : X ≃ₕ Z 
goal: ∀ (a : Z), ↑(h₁.trans h₂).symm a = ↑h₁.symm (↑h₂.symm a)

full_name: ContinuousMap.HomotopyEquiv.symm_trans
code: theorem symm_trans (h₁ : X ≃ₕ Y) (h₂ : Y ≃ₕ Z) : (h₁.trans h₂).symm = h₂.symm.trans h₁.symm 
goal: (h₁.trans h₂).symm = h₂.symm.trans h₁.symm

full_name: ContinuousMap.HomotopyEquiv.prodCongr
code: /-- If `X` is homotopy equivalent to `Y` and `Z` is homotopy equivalent to `Z'`, then `X × Z` is
homotopy equivalent to `Z × Z'`. -/
def prodCongr (h₁ : X ≃ₕ Y) (h₂ : Z ≃ₕ Z') : (X × Z) ≃ₕ (Y × Z') 
goal: X × Z ≃ₕ Y × Z'

full_name: ContinuousMap.HomotopyEquiv.piCongrRight
code: /-- If `X i` is homotopy equivalent to `Y i` for each `i`, then the space of functions (a.k.a. the
indexed product) `∀ i, X i` is homotopy equivalent to `∀ i, Y i`. -/
def piCongrRight {ι : Type*} {X Y : ι → Type*} [∀ i, TopologicalSpace (X i)]
    [∀ i, TopologicalSpace (Y i)] (h : ∀ i, X i ≃ₕ Y i) :
    (∀ i, X i) ≃ₕ (∀ i, Y i) 
goal: ((i : ι) → X i) ≃ₕ ((i : ι) → Y i)

full_name: Homeomorph.refl_toHomotopyEquiv
code: @[simp]
theorem refl_toHomotopyEquiv (X : Type u) [TopologicalSpace X] :
    (Homeomorph.refl X).toHomotopyEquiv = HomotopyEquiv.refl X 
goal: (Homeomorph.refl X).toHomotopyEquiv = ContinuousMap.HomotopyEquiv.refl X

full_name: Homeomorph.symm_toHomotopyEquiv
code: @[simp]
theorem symm_toHomotopyEquiv (h : X ≃ₜ Y) : h.symm.toHomotopyEquiv = h.toHomotopyEquiv.symm 
goal: h.symm.toHomotopyEquiv = h.toHomotopyEquiv.symm

full_name: Homeomorph.trans_toHomotopyEquiv
code: @[simp]
theorem trans_toHomotopyEquiv (h₀ : X ≃ₜ Y) (h₁ : Y ≃ₜ Z) :
    (h₀.trans h₁).toHomotopyEquiv = h₀.toHomotopyEquiv.trans h₁.toHomotopyEquiv 
goal: (h₀.trans h₁).toHomotopyEquiv = h₀.toHomotopyEquiv.trans h₁.toHomotopyEquiv