File: Mathlib/Topology/Homotopy/Product.lean

full_name: ContinuousMap.HomotopyRel.pi
code: /-- The relative product homotopy of `homotopies` between functions `f` and `g` -/
@[simps!]
def HomotopyRel.pi (homotopies : ∀ i : I, HomotopyRel (f i) (g i) S) :
    HomotopyRel (pi f) (pi g) S 
goal: (ContinuousMap.pi f).HomotopyRel (ContinuousMap.pi g) S

full_name: ContinuousMap.HomotopyRel.pi_apply
code: /-- The relative product homotopy of `homotopies` between functions `f` and `g` -/
@[simps!]
def HomotopyRel.pi (homotopies : ∀ i : I, HomotopyRel (f i) (g i) S) :
    HomotopyRel (pi f) (pi g) S 
goal: (ContinuousMap.HomotopyRel.pi homotopies) a i = (homotopies i) a

full_name: ContinuousMap.HomotopyRel.pi_toFun
code: /-- The relative product homotopy of `homotopies` between functions `f` and `g` -/
@[simps!]
def HomotopyRel.pi (homotopies : ∀ i : I, HomotopyRel (f i) (g i) S) :
    HomotopyRel (pi f) (pi g) S 
goal: (ContinuousMap.HomotopyRel.pi homotopies) a i = (homotopies i) a

full_name: ContinuousMap.Homotopy.prod_apply
code: /-- The product of homotopies `F` and `G`,
  where `F` takes `f₀` to `f₁` and `G` takes `g₀` to `g₁` -/
@[simps]
def Homotopy.prod (F : Homotopy f₀ f₁) (G : Homotopy g₀ g₁) :
    Homotopy (ContinuousMap.prodMk f₀ g₀) (ContinuousMap.prodMk f₁ g₁) 
goal: (F.prod G) t = (F t, G t)

full_name: ContinuousMap.Homotopy.prod
code: /-- The product of homotopies `F` and `G`,
  where `F` takes `f₀` to `f₁` and `G` takes `g₀` to `g₁` -/
@[simps]
def Homotopy.prod (F : Homotopy f₀ f₁) (G : Homotopy g₀ g₁) :
    Homotopy (ContinuousMap.prodMk f₀ g₀) (ContinuousMap.prodMk f₁ g₁) 
goal: (f₀.prodMk g₀).Homotopy (f₁.prodMk g₁)

full_name: ContinuousMap.HomotopyRel.prod_toFun
code: /-- The relative product of homotopies `F` and `G`,
  where `F` takes `f₀` to `f₁` and `G` takes `g₀` to `g₁` -/
@[simps!]
def HomotopyRel.prod (F : HomotopyRel f₀ f₁ S) (G : HomotopyRel g₀ g₁ S) :
    HomotopyRel (prodMk f₀ g₀) (prodMk f₁ g₁) S 
goal: (F.prod G) t = (F t, G t)

full_name: ContinuousMap.HomotopyRel.prod
code: /-- The relative product of homotopies `F` and `G`,
  where `F` takes `f₀` to `f₁` and `G` takes `g₀` to `g₁` -/
@[simps!]
def HomotopyRel.prod (F : HomotopyRel f₀ f₁ S) (G : HomotopyRel g₀ g₁ S) :
    HomotopyRel (prodMk f₀ g₀) (prodMk f₁ g₁) S 
goal: (f₀.prodMk g₀).HomotopyRel (f₁.prodMk g₁) S

full_name: ContinuousMap.HomotopyRel.prod_apply
code: /-- The relative product of homotopies `F` and `G`,
  where `F` takes `f₀` to `f₁` and `G` takes `g₀` to `g₁` -/
@[simps!]
def HomotopyRel.prod (F : HomotopyRel f₀ f₁ S) (G : HomotopyRel g₀ g₁ S) :
    HomotopyRel (prodMk f₀ g₀) (prodMk f₁ g₁) S 
goal: (F.prod G) t = (F t, G t)

full_name: Path.Homotopic._aux_Mathlib_Topology_Homotopy_Product___unexpand_Path_Homotopic_Quotient_comp_1
code: local infixl:70 " ⬝ " => Quotient.comp
goal: Lean.PrettyPrinter.Unexpander

full_name: Path.Homotopic.«_aux_Mathlib_Topology_Homotopy_Product___macroRules_Path_Homotopic_term_⬝__1»
code: local infixl:70 " ⬝ " => Quotient.comp
goal: Lean.Macro

full_name: Path.Homotopic.piHomotopy
code: /-- The product of a family of path homotopies. This is just a specialization of `HomotopyRel`. -/
def piHomotopy (γ₀ γ₁ : ∀ i, Path (as i) (bs i)) (H : ∀ i, Path.Homotopy (γ₀ i) (γ₁ i)) :
    Path.Homotopy (Path.pi γ₀) (Path.pi γ₁) 
goal: (Path.pi γ₀).Homotopy (Path.pi γ₁)

full_name: Path.Homotopic.pi
code: /-- The product of a family of path homotopy classes. -/
def pi (γ : ∀ i, Path.Homotopic.Quotient (as i) (bs i)) : Path.Homotopic.Quotient as bs 
goal: Path.Homotopic.Quotient as bs

full_name: Path.Homotopic.pi_lift
code: theorem pi_lift (γ : ∀ i, Path (as i) (bs i)) :
    (Path.Homotopic.pi fun i => ⟦γ i⟧) = ⟦Path.pi γ⟧ 
goal: (Path.Homotopic.pi fun i => ⟦γ i⟧) = ⟦Path.pi γ⟧

full_name: Path.Homotopic.comp_pi_eq_pi_comp
code: /-- Composition and products commute.
  This is `Path.trans_pi_eq_pi_trans` descended to path homotopy classes. -/
theorem comp_pi_eq_pi_comp (γ₀ : ∀ i, Path.Homotopic.Quotient (as i) (bs i))
    (γ₁ : ∀ i, Path.Homotopic.Quotient (bs i) (cs i)) : pi γ₀ ⬝ pi γ₁ = pi fun i ↦ γ₀ i ⬝ γ₁ i 
goal: (Path.Homotopic.pi γ₀).comp (Path.Homotopic.pi γ₁) = Path.Homotopic.pi fun i => (γ₀ i).comp (γ₁ i)

full_name: Path.Homotopic.proj
code: /-- Abbreviation for projection onto the ith coordinate. -/
abbrev proj (i : ι) (p : Path.Homotopic.Quotient as bs) : Path.Homotopic.Quotient (as i) (bs i) 
goal: Path.Homotopic.Quotient (as i) (bs i)

full_name: Path.Homotopic.proj_pi
code: /-- Lemmas showing projection is the inverse of pi. -/
@[simp]
theorem proj_pi (i : ι) (paths : ∀ i, Path.Homotopic.Quotient (as i) (bs i)) :
    proj i (pi paths) = paths i 
goal: Path.Homotopic.proj i (Path.Homotopic.pi paths) = paths i

full_name: Path.Homotopic.pi_proj
code: @[simp]
theorem pi_proj (p : Path.Homotopic.Quotient as bs) : (pi fun i => proj i p) = p 
goal: (Path.Homotopic.pi fun i => Path.Homotopic.proj i p) = p

full_name: Path.Homotopic.prodHomotopy
code: /-- The product of homotopies h₁ and h₂.
    This is `HomotopyRel.prod` specialized for path homotopies. -/
def prodHomotopy (h₁ : Path.Homotopy p₁ p₁') (h₂ : Path.Homotopy p₂ p₂') :
    Path.Homotopy (p₁.prod p₂) (p₁'.prod p₂') 
goal: (p₁.prod p₂).Homotopy (p₁'.prod p₂')

full_name: Path.Homotopic.prod
code: /-- The product of path classes q₁ and q₂. This is `Path.prod` descended to the quotient. -/
def prod (q₁ : Path.Homotopic.Quotient a₁ a₂) (q₂ : Path.Homotopic.Quotient b₁ b₂) :
    Path.Homotopic.Quotient (a₁, b₁) (a₂, b₂) 
goal: Path.Homotopic.Quotient (a₁, b₁) (a₂, b₂)

full_name: Path.Homotopic.prod_lift
code: theorem prod_lift : prod ⟦p₁⟧ ⟦p₂⟧ = ⟦p₁.prod p₂⟧ 
goal: Path.Homotopic.prod ⟦p₁⟧ ⟦p₂⟧ = ⟦p₁.prod p₂⟧

full_name: Path.Homotopic.comp_prod_eq_prod_comp
code: /-- Products commute with path composition.
    This is `trans_prod_eq_prod_trans` descended to the quotient. -/
theorem comp_prod_eq_prod_comp : prod q₁ q₂ ⬝ prod r₁ r₂ = prod (q₁ ⬝ r₁) (q₂ ⬝ r₂) 
goal: (Path.Homotopic.prod q₁ q₂).comp (Path.Homotopic.prod r₁ r₂) = Path.Homotopic.prod (q₁.comp r₁) (q₂.comp r₂)

full_name: Path.Homotopic.projLeft
code: /-- Abbreviation for projection onto the left coordinate of a path class. -/
abbrev projLeft (p : Path.Homotopic.Quotient c₁ c₂) : Path.Homotopic.Quotient c₁.1 c₂.1 
goal: Path.Homotopic.Quotient c₁.1 c₂.1

full_name: Path.Homotopic.projRight
code: /-- Abbreviation for projection onto the right coordinate of a path class. -/
abbrev projRight (p : Path.Homotopic.Quotient c₁ c₂) : Path.Homotopic.Quotient c₁.2 c₂.2 
goal: Path.Homotopic.Quotient c₁.2 c₂.2

full_name: Path.Homotopic.projLeft_prod
code: /-- Lemmas showing projection is the inverse of product. -/
@[simp]
theorem projLeft_prod : projLeft (prod q₁ q₂) = q₁ 
goal: Path.Homotopic.projLeft (Path.Homotopic.prod q₁ q₂) = q₁

full_name: Path.Homotopic.projRight_prod
code: @[simp]
theorem projRight_prod : projRight (prod q₁ q₂) = q₂ 
goal: Path.Homotopic.projRight (Path.Homotopic.prod q₁ q₂) = q₂

full_name: Path.Homotopic.prod_projLeft_projRight
code: @[simp]
theorem prod_projLeft_projRight (p : Path.Homotopic.Quotient (a₁, b₁) (a₂, b₂)) :
    prod (projLeft p) (projRight p) = p 
goal: Path.Homotopic.prod (Path.Homotopic.projLeft p) (Path.Homotopic.projRight p) = p