Documentation

TauCeti.AlgebraicTopology.Sphere.CubeQuotient

The cube modulo its boundary is a sphere #

Mathlib's homotopy groups π_ n X x are built from generalized loops, maps I^n → X sending the boundary of the cube to x. The classical description of πₙ(X, x) is by pointed maps (Sⁿ, s₀) → (X, x) from the sphere, and the two are related by the homeomorphism Iⁿ / ∂Iⁿ ≅ Sⁿ. This file constructs that homeomorphism, for the unit sphere of EuclideanSpace ℝ (Fin (n + 1)) pointed at its north pole e_last, and transfers generalized loops, their homotopies and their homotopy classes to pointed maps out of the sphere.

The map from the Euclidean closed unit ball of ℝⁿ to the unit sphere of ℝⁿ⁺¹ is x ↦ (2 √(1 - ‖x‖²) x, 2 ‖x‖² - 1), the last coordinate being the height (TauCeti.closedBallToSphere). It sends the centre to the south pole -e_last, collapses the boundary sphere to the north pole e_last, and is injective on the open ball. The cube map TauCeti.cubeToSphere precomposes it with the homeomorphism TauCeti.diskHomeomorphCube of the disk onto the cube, the one through which TauCeti.cubeBoundaryPair and the Hurewicz maps are compared with the disk. In positive dimension it is surjective, hence a quotient map since the cube is compact, and it induces the homeomorphism TauCeti.cubeQuotientHomeomorphSphere : Iⁿ / ∂Iⁿ ≃ₜ Sⁿ, where Iⁿ / ∂Iⁿ is the quotient by the relation TauCeti.cubeBoundarySetoid identifying all boundary points.

A generalized loop p therefore descends to a pointed map GenLoop.toSphere p out of the sphere, and GenLoop.sphereEquiv identifies generalized loops with pointed maps. Two generalized loops are homotopic relative to the boundary of the cube exactly when the corresponding maps are homotopic relative to the north pole (GenLoop.homotopic_iff_toSphere), so πₙ(X, x) is the set of pointed homotopy classes of maps (Sⁿ, e_last) → (X, x) (HomotopyGroup.sphereEquiv). The identification is natural in based maps (GenLoop.toSphere_map). A class is trivial exactly when its map out of the sphere is null-homotopic, by a free homotopy that need not fix the north pole (HomotopyGroup.mk_eq_one_iff_nullhomotopic_toSphere).

Main declarations #

References #

noncomputable def TauCeti.sphereNorthPole (n : ℕ) :
↑(Metric.sphere 0 1)

The north pole e_last of the unit sphere of EuclideanSpace ℝ (Fin (n + 1)): the last standard basis vector.

Instances For
    theorem TauCeti.eq_sphereNorthPole_iff {n : ℕ} {y : ↑(Metric.sphere 0 1)} :
    y = sphereNorthPole n ↔ (↑y).ofLp (Fin.last n) = 1

    A point of the unit sphere is the north pole exactly when its height is one.

    A point of the unit sphere has height less than one exactly when it is not the north pole.

    noncomputable def TauCeti.closedBallToSphere (n : ℕ) :

    The closed unit ball modulo its boundary is the sphere. The map from the closed unit ball of ℝⁿ to the unit sphere of ℝⁿ⁺¹ sending x to (2 √(1 - ‖x‖²) x, 2 ‖x‖² - 1), the last coordinate being the height. It sends the centre to the south pole, collapses the boundary sphere to the north pole (TauCeti.closedBallToSphere_eq_sphereNorthPole_iff), is injective on the open ball (TauCeti.closedBallToSphere_eq_closedBallToSphere_iff) and is surjective in positive dimension (TauCeti.closedBallToSphere_surjective).

    Instances For
      @[simp]
      theorem TauCeti.closedBallToSphere_apply_castSucc {n : ℕ} (x : ↑(Metric.closedBall 0 1)) (i : Fin n) :
      (↑((closedBallToSphere n) x)).ofLp i.castSucc = 2 * √(1 - ‖↑x‖ ^ 2) * (↑x).ofLp i
      @[simp]
      theorem TauCeti.closedBallToSphere_apply_last {n : ℕ} (x : ↑(Metric.closedBall 0 1)) :
      (↑((closedBallToSphere n) x)).ofLp (Fin.last n) = 2 * ‖↑x‖ ^ 2 - 1

      TauCeti.closedBallToSphere sends exactly the boundary sphere to the north pole.

      TauCeti.closedBallToSphere identifies exactly the points of the boundary sphere: it is injective on the open ball, and its value there is not the north pole.

      TauCeti.closedBallToSphere is surjective in positive dimension: the north pole is the image of the boundary sphere, which is nonempty, and every other point of the sphere has an explicit preimage in the open ball.

      noncomputable def TauCeti.cubeToSphere (n : ℕ) :

      The cube modulo its boundary is the sphere. The map from the cube I^n to the unit sphere of EuclideanSpace ℝ (Fin (n + 1)) given by TauCeti.closedBallToSphere after the inverse of the homeomorphism TauCeti.diskHomeomorphCube of the Euclidean disk onto the cube. It collapses exactly the boundary of the cube, to the north pole (TauCeti.cubeToSphere_eq_sphereNorthPole_iff, TauCeti.cubeToSphere_eq_cubeToSphere_iff), and is a quotient map in positive dimension (TauCeti.isQuotientMap_cubeToSphere).

      Instances For

        TauCeti.cubeToSphere sends exactly the boundary of the cube to the north pole.

        TauCeti.cubeToSphere identifies exactly the points of the boundary of the cube.

        noncomputable def TauCeti.sphereGenLoop (n : ℕ) :
        ↑(GenLoop (Fin n) (↑(Metric.sphere 0 1)) (sphereNorthPole n))

        The tautological generalized loop of the sphere: TauCeti.cubeToSphere, which sends the boundary of the cube to the north pole, as a generalized loop at the north pole. Every generalized loop p is its image under the pointed map GenLoop.toSphere p (GenLoop.map_toSphere_sphereGenLoop).

        Instances For
          @[simp]
          theorem TauCeti.sphereGenLoop_apply {n : ℕ} (y : Fin n → ↑unitInterval) :

          TauCeti.cubeToSphere is surjective in positive dimension.

          TauCeti.cubeToSphere is a quotient map in positive dimension: it is a continuous surjection from the compact cube onto the Hausdorff sphere.

          The product of the identity of I with TauCeti.cubeToSphere is a quotient map in positive dimension, as a continuous surjection from a compact space onto a Hausdorff space.

          noncomputable def TauCeti.liftProdCubeToSphere {n : ℕ} {X : Type u_1} [TopologicalSpace X] [NeZero n] (F : C(↑unitInterval × (Fin n → ↑unitInterval), X)) (hF : ∀ (t : ↑unitInterval), ∀ y ∈ Cube.boundary (Fin n), ∀ z ∈ Cube.boundary (Fin n), F (t, y) = F (t, z)) :

          A family of maps out of the cube, parametrised by I and constant on the boundary of the cube at each time, as a family of maps out of the sphere: the map I × Sⁿ → X through which it factors along TauCeti.cubeToSphere (TauCeti.liftProdCubeToSphere_apply). It turns homotopies of generalized loops, and homotopies of them along paths, into homotopies of maps out of the sphere.

          Instances For
            @[simp]
            theorem TauCeti.liftProdCubeToSphere_apply {n : ℕ} {X : Type u_1} [TopologicalSpace X] [NeZero n] (F : C(↑unitInterval × (Fin n → ↑unitInterval), X)) (hF : ∀ (t : ↑unitInterval), ∀ y ∈ Cube.boundary (Fin n), ∀ z ∈ Cube.boundary (Fin n), F (t, y) = F (t, z)) (t : ↑unitInterval) (z : Fin n → ↑unitInterval) :

            The cube modulo its boundary is homeomorphic to the sphere, by the map induced by TauCeti.cubeToSphere. It is pointed: the class of the boundary goes to the north pole.

            Instances For

              TauCeti.cubeQuotientHomeomorphSphere is pointed: it sends the class of the boundary of the cube to the north pole.

              @[simp]

              The inverse of TauCeti.cubeQuotientHomeomorphSphere sends the north pole to the class of the boundary of the cube, represented by its corner 0.

              noncomputable def GenLoop.toSphere {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) :

              A generalized loop I^n → X, constant on the boundary of the cube, descends along TauCeti.cubeToSphere to a map out of the unit sphere of EuclideanSpace ℝ (Fin (n + 1)) (GenLoop.toSphere_cubeToSphere), sending the north pole to the base point (GenLoop.toSphere_sphereNorthPole).

              Instances For
                @[simp]
                theorem GenLoop.toSphere_cubeToSphere {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) (z : Fin n → ↑unitInterval) :
                @[simp]
                theorem GenLoop.toSphere_sphereNorthPole {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) :
                @[simp]
                theorem GenLoop.toSphere_map {n : ℕ} [NeZero n] {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {x : X} {y : Y} (f : C(X, Y)) (hf : f x = y) (p : ↑(GenLoop (Fin n) X x)) :
                toSphere (map f hf p) = f.comp (toSphere p)

                The pointed map out of the sphere of the image of a generalized loop under a based map is the composite.

                @[simp]
                theorem GenLoop.map_toSphere_sphereGenLoop {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) :

                Every generalized loop is an image of the tautological loop: p is the image of TauCeti.sphereGenLoop n under the pointed map GenLoop.toSphere p out of the sphere.

                @[simp]

                The constant generalized loop corresponds to the constant map out of the sphere.

                noncomputable def GenLoop.sphereEquiv (n : ℕ) [NeZero n] (X : Type u_1) [TopologicalSpace X] (x : X) :
                ↑(GenLoop (Fin n) X x) ≃ { f : C(↑(Metric.sphere 0 1), X) // f (TauCeti.sphereNorthPole n) = x }

                Generalized loops are pointed maps out of the sphere. The bijection between generalized loops (I^n, ∂I^n) → (X, x) and pointed maps (Sⁿ, e_last) → (X, x) out of the unit sphere of EuclideanSpace ℝ (Fin (n + 1)), given by GenLoop.toSphere and by precomposition with TauCeti.cubeToSphere.

                Instances For
                  @[simp]
                  theorem GenLoop.coe_sphereEquiv_apply {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) :
                  ↑((sphereEquiv n X x) p) = toSphere p
                  @[simp]
                  theorem GenLoop.coe_sphereEquiv_symm_apply {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (f : { f : C(↑(Metric.sphere 0 1), X) // f (TauCeti.sphereNorthPole n) = x }) :
                  ↑((sphereEquiv n X x).symm f) = (↑f).comp (TauCeti.cubeToSphere n)
                  @[simp]
                  theorem GenLoop.sphereEquiv_symm_apply_apply {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (f : { f : C(↑(Metric.sphere 0 1), X) // f (TauCeti.sphereNorthPole n) = x }) (z : Fin n → ↑unitInterval) :
                  ((sphereEquiv n X x).symm f) z = ↑f ((TauCeti.cubeToSphere n) z)

                  Homotopies of generalized loops are pointed homotopies of maps out of the sphere. Two generalized loops are homotopic relative to the boundary of the cube exactly when the corresponding maps out of the sphere are homotopic relative to the north pole.

                  theorem TauCeti.GenLoop.HomotopyAlong.homotopic_toSphere {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x y : X} {γ : Path x y} {f : ↑(GenLoop (Fin n) X x)} {g : ↑(GenLoop (Fin n) X y)} (h : HomotopyAlong γ f g) :

                  A homotopy of generalized loops along a path is a free homotopy of maps out of the sphere. If h is a homotopy from f to g whose boundary traces a path from the base point of f to that of g, then the corresponding maps out of the sphere are homotopic.

                  noncomputable def GenLoop.diskBoundaryMap {n : ℕ} [NeZero n] {X : TopCat} {x : ↑X} (p : ↑(GenLoop (Fin n) (↑X) x)) :

                  The attaching map ∂𝔻 (n + 1) ⟶ X of the (n + 1)-cell that kills the class of a generalized loop p: the pointed map Sⁿ → X corresponding to p (GenLoop.toSphere), with its source written as Mathlib's sphere TopCat.diskBoundary (n + 1).

                  Instances For
                    @[simp]
                    theorem GenLoop.diskBoundaryMap_apply {n : ℕ} [NeZero n] {X : TopCat} {x : ↑X} (p : ↑(GenLoop (Fin n) (↑X) x)) (s : ↑(TopCat.diskBoundary (n + 1))) :
                    @[simp]
                    theorem GenLoop.diskBoundaryMap_map {n : ℕ} [NeZero n] {X : TopCat} {x : ↑X} {Y : TopCat} (f : X ⟶ Y) {y : ↑Y} (hf : (CategoryTheory.ConcreteCategory.hom f) x = y) (p : ↑(GenLoop (Fin n) (↑X) x)) :

                    The attaching map of the image of a generalized loop under a based map is the attaching map of the loop followed by the map.

                    noncomputable def GenLoop.diskMap {n : ℕ} {X : TopCat} {x : ↑X} (γ : ↑(GenLoop (Fin n) (↑X) x)) :

                    A generalized loop γ of dimension n, read on the disk 𝔻 n through TauCeti.diskHomeomorphCube. When TopCat.diskBoundary n is attached at x along a constant map, this is the map onto γ of the resulting sphere.

                    Instances For
                      @[simp]
                      theorem GenLoop.diskMap_apply {n : ℕ} {X : TopCat} {x : ↑X} (γ : ↑(GenLoop (Fin n) (↑X) x)) (s : ↑(TopCat.disk n)) :
                      @[simp]

                      A generalized loop at x, read on the disk, is constant at x on the boundary sphere.

                      @[simp]

                      A generalized loop at x, read on the disk, is constant at x on the boundary sphere.

                      Homotopy groups are pointed homotopy classes of maps out of spheres. The bijection between πₙ(X, x) and the pointed homotopy classes of maps (Sⁿ, e_last) → (X, x) out of the unit sphere of EuclideanSpace ℝ (Fin (n + 1)), induced by GenLoop.sphereEquiv.

                      Instances For
                        @[simp]
                        theorem HomotopyGroup.sphereEquiv_mk {n : ℕ} [NeZero n] {X : Type u_1} [TopologicalSpace X] {x : X} (p : ↑(GenLoop (Fin n) X x)) :

                        A homotopy class is trivial exactly when its sphere map is null-homotopic. The class of a generalized loop p is the identity of πₙ(X, x) if and only if the corresponding map GenLoop.toSphere p : Sⁿ → X is freely homotopic to a constant map.

                        A homotopy class is trivial exactly when its attaching map is null-homotopic. The class of a generalized loop p is the identity of πₙ(X, x) if and only if the map GenLoop.diskBoundaryMap p : ∂𝔻 (n + 1) ⟶ X, along which a cell kills that class, is freely null-homotopic.

                        A based map kills a class exactly when it extends the attaching map over a disk. The image of the class of p under a based map f is the identity exactly when the attaching map GenLoop.diskBoundaryMap p followed by f is null-homotopic.