S2xS2Quotient.Topology.fiberIdentification.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) : S2xS2Quotient.Topology.FiberIdentification β C
S2xS2Quotient.Topology.evaluation_kernel_lift.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (γ : S2xS2Quotient.Topology.FreeLoop Y) (a : FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
  (ha : (S2xS2Quotient.Topology.evaluationPi γ) a = 1) :
  ∃ b, (S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.fiberInclusion (γ 0)) ⟨γ, ⋯⟩) b = a
S2xS2Quotient.Topology.evaluation_exact.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (γ : S2xS2Quotient.Topology.FreeLoop Y) (a : FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ) :
  (S2xS2Quotient.Topology.evaluationPi γ) a = 1 ↔
    ∃ b, (S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.fiberInclusion (γ 0)) ⟨γ, ⋯⟩) b = a
S2xS2Quotient.Topology.evaluation_exact_proved.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (e : S2xS2Quotient.Topology.FiberIdentification β C)
  (a : FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) (S2xS2Quotient.Topology.winding β C)) :
  (S2xS2Quotient.Topology.evaluationCoordinate β C χ) a = 1 ↔
    ∃ m, (S2xS2Quotient.Topology.sphereInclusion β C e) (Multiplicative.ofAdd m) = a
S2xS2Quotient.Topology.fiberMotion_action.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (γ : S2xS2Quotient.Topology.BasedLoop y) (p : Path ↑γ ↑γ)
  (b : FundamentalGroup (S2xS2Quotient.Topology.BasedLoop y) γ) :
  (S2xS2Quotient.Topology.fiberInclusionPi y γ) ((S2xS2Quotient.Topology.fiberMotionEquiv y γ p) b) =
    S2xS2Quotient.Topology.loopClass p * (S2xS2Quotient.Topology.fiberInclusionPi y γ) b *
      (S2xS2Quotient.Topology.loopClass p)⁻¹
S2xS2Quotient.Topology.windingMonodromy.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) :
  S2xS2Quotient.Topology.PiTwo (β 0) ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (β 0)
S2xS2Quotient.Topology.windingMonodromy_action.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  S2xS2Quotient.Topology.WaLift β C *
        (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
          (Multiplicative.ofAdd m) *
      (S2xS2Quotient.Topology.WaLift β C)⁻¹ =
    (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
      (Multiplicative.ofAdd ((S2xS2Quotient.Topology.windingMonodromy β C) m))
S2xS2Quotient.Topology.rotationLoop_central.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (γ : S2xS2Quotient.Topology.FreeLoop Y) (a : FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ) :
  S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.rotationLoop γ) * a =
    a * S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.rotationLoop γ)
S2xS2Quotient.Topology.rotationLoop_winding_class.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) :
  S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.rotationLoop (S2xS2Quotient.Topology.winding β C)) =
    S2xS2Quotient.Topology.WaLift β C ^ C
S2xS2Quotient.Topology.boundary_relations_vanish.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0))
  (hm : m ∈ S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C) :
  (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
      (Multiplicative.ofAdd m) =
    1
S2xS2Quotient.Topology.freeLoopModelMap.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) :
  S2xS2Quotient.General.Model (S2xS2Quotient.Topology.windingMonodromy β C) C →*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) (S2xS2Quotient.Topology.winding β C)
S2xS2Quotient.Topology.freeLoopModelMap_surjective.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.freeLoopModelMap β C)
S2xS2Quotient.Topology.freeLoopModelMap_injective_iff.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  Function.Injective ⇑(S2xS2Quotient.Topology.freeLoopModelMap β C) ↔
    ∀ (m : S2xS2Quotient.Topology.PiTwo (β 0)),
      (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
            (Multiplicative.ofAdd m) =
          1 →
        m ∈ S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C
S2xS2Quotient.Topology.evaluationBoundary.{u_1} {Y : Type u_1} [TopologicalSpace Y] {y : Y}
  (γ : S2xS2Quotient.Topology.BasedLoop y) :
  Multiplicative (S2xS2Quotient.Topology.PiTwo y) →* FundamentalGroup (S2xS2Quotient.Topology.BasedLoop y) γ
S2xS2Quotient.Topology.evaluation_boundary_exact.{u_1} {Y : Type u_1} [TopologicalSpace Y] {y : Y}
  (γ : S2xS2Quotient.Topology.BasedLoop y) (b : FundamentalGroup (S2xS2Quotient.Topology.BasedLoop y) γ) :
  (S2xS2Quotient.Topology.fiberInclusionPi y γ) b = 1 ↔
    ∃ m, (S2xS2Quotient.Topology.evaluationBoundary γ) (Multiplicative.ofAdd m) = b
S2xS2Quotient.Topology.boundarySphereClass.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  S2xS2Quotient.Topology.PiTwo (β 0)
S2xS2Quotient.Topology.sphereInclusion_kernel_iff_boundary.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
        (Multiplicative.ofAdd m) =
      1 ↔
    ∃ n, S2xS2Quotient.Topology.boundarySphereClass β C n = m
S2xS2Quotient.Topology.boundary_complete_iff_coordinates.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) :
  (∀ (m : S2xS2Quotient.Topology.PiTwo (β 0)),
      (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
            (Multiplicative.ofAdd m) =
          1 →
        m ∈ S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C) ↔
    ∀ (n : S2xS2Quotient.Topology.PiTwo (β 0)),
      S2xS2Quotient.Topology.boundarySphereClass β C n ∈
        S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C
S2xS2Quotient.Topology.freeLoopModelMap_injective_iff_boundary_coordinates.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  Function.Injective ⇑(S2xS2Quotient.Topology.freeLoopModelMap β C) ↔
    ∀ (n : S2xS2Quotient.Topology.PiTwo (β 0)),
      S2xS2Quotient.Topology.boundarySphereClass β C n ∈
        S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C
S2xS2Quotient.Topology.evaluationBoundary_constant.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (m : Multiplicative (S2xS2Quotient.Topology.PiTwo y)) :
  (S2xS2Quotient.Topology.evaluationBoundary (S2xS2Quotient.Topology.constantInFiber y)) m = 1
S2xS2Quotient.Topology.freeLoopModelMap_zero_injective.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  Function.Injective ⇑(S2xS2Quotient.Topology.freeLoopModelMap β 0)
S2xS2Quotient.Topology.RemainingAssumptions.ofZeroCoordinates.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1)
  (μ : S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (β 0))
  (hμ : ∀ (m : S2xS2Quotient.M), μ (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.windingMonodromy β 0) (μ m)) :
  S2xS2Quotient.Topology.RemainingAssumptions β 0
S2xS2Quotient.Topology.pathChange_independent_of_comm.{u} {X : Type u} [TopologicalSpace X] {x y : X} (p q : Path x y)
  (hc : ∀ (a b : FundamentalGroup X y), a * b = b * a) (a : FundamentalGroup X x) :
  (FundamentalGroup.fundamentalGroupMulEquivOfPath p) a = (FundamentalGroup.fundamentalGroupMulEquivOfPath q) a
S2xS2Quotient.Topology.fiberMotion_sameEvaluation.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (γ : S2xS2Quotient.Topology.BasedLoop y) (p r : Path ↑γ ↑γ)
  (h :
    (S2xS2Quotient.Topology.evaluationPi ↑γ) (S2xS2Quotient.Topology.loopClass p) =
      (S2xS2Quotient.Topology.evaluationPi ↑γ) (S2xS2Quotient.Topology.loopClass r)) :
  S2xS2Quotient.Topology.fiberMotionEquiv y γ p = S2xS2Quotient.Topology.fiberMotionEquiv y γ r
S2xS2Quotient.Topology.fiberMotion_trans.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (γ : S2xS2Quotient.Topology.BasedLoop y) (p r : Path ↑γ ↑γ) :
  S2xS2Quotient.Topology.fiberMotionEquiv y γ (p.trans r) =
    (S2xS2Quotient.Topology.fiberMotionEquiv y γ p).trans (S2xS2Quotient.Topology.fiberMotionEquiv y γ r)
S2xS2Quotient.Topology.fiberMotionRepresentation.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (γ : S2xS2Quotient.Topology.BasedLoop y) :
  FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) ↑γ →*
    MulAut (FundamentalGroup (S2xS2Quotient.Topology.BasedLoop y) γ)
S2xS2Quotient.Topology.fiberMotionRepresentation_kernel.{u_1} {Y : Type u_1} [TopologicalSpace Y] (y : Y)
  (γ : S2xS2Quotient.Topology.BasedLoop y) (g : FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) ↑γ)
  (hg : (S2xS2Quotient.Topology.evaluationPi ↑γ) g = 1) : (S2xS2Quotient.Topology.fiberMotionRepresentation y γ) g = 1
S2xS2Quotient.Topology.rotation_transport_winding_apply.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  (MulEquiv.symm (S2xS2Quotient.Topology.fiberIdentification β C))
      ((S2xS2Quotient.Topology.fiberMotionEquiv (β 0) (S2xS2Quotient.Topology.windingInFiber β C)
          (S2xS2Quotient.Topology.rotationLoop (S2xS2Quotient.Topology.winding β C)))
        ((S2xS2Quotient.Topology.fiberIdentification β C) (Multiplicative.ofAdd m))) =
    Multiplicative.ofAdd ((S2xS2Quotient.Topology.windingMonodromy β C ^ C) m)
S2xS2Quotient.Topology.intervalBoundary_difference.{u_1} {Y : Type u_1} [TopologicalSpace Y] {y : Y} (q : Path y y)
  (a : FundamentalGroup (Path y y) (Path.refl y)) :
  (S2xS2Quotient.Topology.intervalBoundary q) a =
    (S2xS2Quotient.Topology.rightTranslationHom q) a * ((S2xS2Quotient.Topology.leftTranslationHom q) a)⁻¹
S2xS2Quotient.Topology.evaluationBoundary_rotation_difference.{u_1} {Y : Type u_1} [TopologicalSpace Y] {y : Y}
  (γ : S2xS2Quotient.Topology.BasedLoop y) (m : Multiplicative (S2xS2Quotient.Topology.PiTwo y)) :
  (S2xS2Quotient.Topology.evaluationBoundary γ) m =
    (S2xS2Quotient.Topology.fiberMotionEquiv y γ (S2xS2Quotient.Topology.rotationLoop ↑γ))
        ((S2xS2Quotient.Topology.fiberLeftTranslation γ) (S2xS2Quotient.Topology.piTwoIntervalLoop m)) *
      ((S2xS2Quotient.Topology.fiberLeftTranslation γ) (S2xS2Quotient.Topology.piTwoIntervalLoop m))⁻¹
S2xS2Quotient.Topology.boundarySphereClass_difference.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  S2xS2Quotient.Topology.boundarySphereClass β C m =
    (S2xS2Quotient.Topology.windingMonodromy β C ^ C) (S2xS2Quotient.Topology.boundaryLeftSphere β C m) -
      S2xS2Quotient.Topology.boundaryLeftSphere β C m
S2xS2Quotient.Topology.boundary_coordinates_proved.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  S2xS2Quotient.Topology.boundarySphereClass β C m ∈
    S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C
S2xS2Quotient.Topology.boundary_exact_proved.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (m : S2xS2Quotient.Topology.PiTwo (β 0)) :
  (S2xS2Quotient.Topology.sphereInclusion β C (S2xS2Quotient.Topology.fiberIdentification β C))
        (Multiplicative.ofAdd m) =
      1 ↔
    m ∈ S2xS2Quotient.General.relations (S2xS2Quotient.Topology.windingMonodromy β C) C
S2xS2Quotient.Topology.freeLoopModelMap_injective.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  Function.Injective ⇑(S2xS2Quotient.Topology.freeLoopModelMap β C)
S2xS2Quotient.Topology.freeLoopGroupEquiv.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) (χ : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  S2xS2Quotient.General.Model (S2xS2Quotient.Topology.windingMonodromy β C) C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) (S2xS2Quotient.Topology.winding β C)
S2xS2Quotient.Topology.freeLoopSector_of_path_choice {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (γ : S2xS2Quotient.Topology.FreeLoop X) (k : Path (γ 0) (β 0)) :
  S2xS2Quotient.Topology.freeLoopSector β χ γ =
    Multiplicative.toAdd
      (χ
        ((FundamentalGroup.fundamentalGroupMulEquivOfPath k)
          (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.intervalLoop γ))))
S2xS2Quotient.Topology.freeLoopSector_of_path {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  {γ δ : S2xS2Quotient.Topology.FreeLoop X} (p : Path γ δ) :
  S2xS2Quotient.Topology.freeLoopSector β χ γ = S2xS2Quotient.Topology.freeLoopSector β χ δ
S2xS2Quotient.Topology.freeLoopSector_winding {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) (C : ℤ) :
  S2xS2Quotient.Topology.freeLoopSector β χ (S2xS2Quotient.Topology.winding β C) = C
S2xS2Quotient.Topology.freeLoop_path_to_winding {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1)
  (γ : S2xS2Quotient.Topology.FreeLoop X) :
  Nonempty (Path γ (S2xS2Quotient.Topology.winding β (S2xS2Quotient.Topology.freeLoopSector β χ γ)))
S2xS2Quotient.Topology.freeLoop_path_iff_sector_eq {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1)
  (γ δ : S2xS2Quotient.Topology.FreeLoop X) :
  Nonempty (Path γ δ) ↔ S2xS2Quotient.Topology.freeLoopSector β χ γ = S2xS2Quotient.Topology.freeLoopSector β χ δ
S2xS2Quotient.Topology.cyclicComponentCoverage {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  S2xS2Quotient.Topology.ComponentCoverage β
S2xS2Quotient.Topology.cyclicFreeLoopComponents {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  ZerothHomotopy (S2xS2Quotient.Topology.FreeLoop X) ≃ ℤ
S2xS2Quotient.Topology.cyclicFreeLoopGroupEquiv {X : Type} [TopologicalSpace X] [PathConnectedSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1)
  (γ : S2xS2Quotient.Topology.FreeLoop X) :
  S2xS2Quotient.General.Model (S2xS2Quotient.Topology.windingMonodromy β (S2xS2Quotient.Topology.freeLoopSector β χ γ))
      (S2xS2Quotient.Topology.freeLoopSector β χ γ) ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop X) γ
S2xS2Quotient.Topology.sphereTwoPathConnectedSpace : PathConnectedSpace S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.roundCirclePathConnectedSpace : PathConnectedSpace S2xS2Quotient.Topology.RoundCircleModel
S2xS2Quotient.Topology.RoundCircleAssumptions.coverage (a : S2xS2Quotient.Topology.RoundCircleAssumptions) :
  S2xS2Quotient.Topology.ComponentCoverage a.generator
structure S2xS2Quotient.Topology.RemainingAssumptions.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) (C : ℤ) : Type u_1
number of parameters: 4
fields:
  S2xS2Quotient.Topology.RemainingAssumptions.coordinate : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ
  S2xS2Quotient.Topology.RemainingAssumptions.coordinate_beta : self.coordinate
        (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) =
      Multiplicative.ofAdd 1
  S2xS2Quotient.Topology.RemainingAssumptions.piTwoCoordinates : S2xS2Quotient.M ≃ₗ[ℤ]
      S2xS2Quotient.Topology.PiTwo (β 0)
  S2xS2Quotient.Topology.RemainingAssumptions.equivariant : ∀ (m : S2xS2Quotient.M),
      self.piTwoCoordinates (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy β C) (self.piTwoCoordinates m)
constructor:
  S2xS2Quotient.Topology.RemainingAssumptions.mk.{u_1} {Y : Type u_1} [TopologicalSpace Y]
    {β : S2xS2Quotient.Topology.FreeLoop Y} {C : ℤ} (coordinate : FundamentalGroup Y (β 0) ≃* Multiplicative ℤ)
    (coordinate_beta :
      coordinate (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1)
    (piTwoCoordinates : S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (β 0))
    (equivariant :
      ∀ (m : S2xS2Quotient.M),
        piTwoCoordinates (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.windingMonodromy β C) (piTwoCoordinates m)) :
    S2xS2Quotient.Topology.RemainingAssumptions β C
structure S2xS2Quotient.Topology.ComponentCoverage.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  (β : S2xS2Quotient.Topology.FreeLoop Y) : Type u_1
number of parameters: 3
fields:
  S2xS2Quotient.Topology.ComponentCoverage.sector : S2xS2Quotient.Topology.FreeLoop Y → ℤ
  S2xS2Quotient.Topology.ComponentCoverage.sector_winding : ∀ (C : ℤ),
      self.sector (S2xS2Quotient.Topology.winding β C) = C
  S2xS2Quotient.Topology.ComponentCoverage.path_to_winding : ∀ (γ : S2xS2Quotient.Topology.FreeLoop Y),
      Nonempty (Path γ (S2xS2Quotient.Topology.winding β (self.sector γ)))
  S2xS2Quotient.Topology.ComponentCoverage.sector_of_path : ∀ {γ δ : S2xS2Quotient.Topology.FreeLoop Y} (a : Path γ δ),
      self.sector γ = self.sector δ
constructor:
  S2xS2Quotient.Topology.ComponentCoverage.mk.{u_1} {Y : Type u_1} [TopologicalSpace Y]
    {β : S2xS2Quotient.Topology.FreeLoop Y} (sector : S2xS2Quotient.Topology.FreeLoop Y → ℤ)
    (sector_winding : ∀ (C : ℤ), sector (S2xS2Quotient.Topology.winding β C) = C)
    (path_to_winding :
      ∀ (γ : S2xS2Quotient.Topology.FreeLoop Y), Nonempty (Path γ (S2xS2Quotient.Topology.winding β (sector γ))))
    (sector_of_path : ∀ {γ δ : S2xS2Quotient.Topology.FreeLoop Y} (a : Path γ δ), sector γ = sector δ) :
    S2xS2Quotient.Topology.ComponentCoverage β
structure S2xS2Quotient.Topology.RoundCircleAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCircleAssumptions.generator : S2xS2Quotient.Topology.FreeLoop
      S2xS2Quotient.Topology.RoundCircleModel
  S2xS2Quotient.Topology.RoundCircleAssumptions.sectors : (C : ℤ) →
      S2xS2Quotient.Topology.RemainingAssumptions self.generator C
constructor:
  S2xS2Quotient.Topology.RoundCircleAssumptions.mk
    (generator : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
    (sectors : (C : ℤ) → S2xS2Quotient.Topology.RemainingAssumptions generator C) :
    S2xS2Quotient.Topology.RoundCircleAssumptions
S2xS2Quotient.Topology.RemainingAssumptions.boundaryActionData.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  {β : S2xS2Quotient.Topology.FreeLoop Y} {C : ℤ} (_a : S2xS2Quotient.Topology.RemainingAssumptions β C) :
  S2xS2Quotient.Topology.BoundaryActionData β C (S2xS2Quotient.Topology.windingMonodromy β C)
    (S2xS2Quotient.Topology.fiberIdentification β C)
S2xS2Quotient.Topology.RemainingAssumptions.toTarget.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  {β : S2xS2Quotient.Topology.FreeLoop Y} {C : ℤ} (a : S2xS2Quotient.Topology.RemainingAssumptions β C) :
  S2xS2Quotient.Topology.SphereTwoAssumptions β C
S2xS2Quotient.Topology.SphereTwoAssumptions.commutator_Wa_Wb.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  {β : S2xS2Quotient.Topology.FreeLoop Y} {C : ℤ} (a : S2xS2Quotient.Topology.SphereTwoAssumptions β C) :
  S2xS2Quotient.commutator (S2xS2Quotient.Topology.WaLift β C) a.WbLoop = a.zetaLoop 0 ^ 2
S2xS2Quotient.Topology.SphereTwoAssumptions.conjugation_zeta.{u_1} {Y : Type u_1} [TopologicalSpace Y]
  {β : S2xS2Quotient.Topology.FreeLoop Y} {C : ℤ} (a : S2xS2Quotient.Topology.SphereTwoAssumptions β C) (i : ℤ) :
  S2xS2Quotient.Topology.WaLift β C * a.zetaLoop i * (S2xS2Quotient.Topology.WaLift β C)⁻¹ = a.zetaLoop (i + 1)
S2xS2Quotient.Topology.roundCircle_characterization (h : Nonempty S2xS2Quotient.Topology.RoundCircleAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.RoundCircleAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
structure S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.zero_winding_null : ∀
      (p : Path (S2xS2Quotient.Topology.roundCircleGenerator 0) (S2xS2Quotient.Topology.roundCircleGenerator 0)),
      S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.loopClass p) = 1 →
        p.Homotopic (Path.refl (S2xS2Quotient.Topology.roundCircleGenerator 0))
  S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.piTwoCoordinates : ℤ →
      S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0)
  S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.equivariant : ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (self.piTwoCoordinates C) (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
          ((self.piTwoCoordinates C) m)
constructor:
  S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.mk
    (zero_winding_null :
      ∀ (p : Path (S2xS2Quotient.Topology.roundCircleGenerator 0) (S2xS2Quotient.Topology.roundCircleGenerator 0)),
        S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.loopClass p) = 1 →
          p.Homotopic (Path.refl (S2xS2Quotient.Topology.roundCircleGenerator 0)))
    (piTwoCoordinates :
      ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0))
    (equivariant :
      ∀ (C : ℤ) (m : S2xS2Quotient.M),
        (piTwoCoordinates C) (S2xS2Quotient.tau m) =
          (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
            ((piTwoCoordinates C) m)) :
    S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions
S2xS2Quotient.Topology.circleReal_isCoveringMap : IsCoveringMap QuotientAddGroup.mk
S2xS2Quotient.Topology.circleFundamentalGroupEquiv :
  FundamentalGroup S2xS2Quotient.Topology.Circle 0 ≃* Multiplicative ℤ
S2xS2Quotient.Topology.circleFundamentalGroupEquiv_generator :
  S2xS2Quotient.Topology.circleFundamentalGroupEquiv
      (S2xS2Quotient.Topology.loopClass S2xS2Quotient.Topology.circlePath) =
    Multiplicative.ofAdd 1
S2xS2Quotient.Topology.roundCircleWinding_retraction :
  S2xS2Quotient.Topology.roundCircleWinding.comp S2xS2Quotient.Topology.roundCircleGenerator =
    ContinuousMap.id S2xS2Quotient.Topology.Circle
S2xS2Quotient.Topology.roundCircleInteger_surjective : Function.Surjective ⇑S2xS2Quotient.Topology.roundCircleInteger
S2xS2Quotient.Topology.roundCircleInteger_section (n : Multiplicative ℤ) :
  S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.roundCircleIntegerSection n) = n
S2xS2Quotient.Topology.roundCircleInteger_generator :
  S2xS2Quotient.Topology.roundCircleInteger
      (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator)) =
    Multiplicative.ofAdd 1
S2xS2Quotient.Topology.roundCircleGenerator_power_eq_one_iff (n : ℤ) :
  S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator) ^ n =
      1 ↔
    n = 0
S2xS2Quotient.Topology.roundCircleInteger_injective_iff :
  Function.Injective ⇑S2xS2Quotient.Topology.roundCircleInteger ↔
    ∀ (p : Path (S2xS2Quotient.Topology.roundCircleGenerator 0) (S2xS2Quotient.Topology.roundCircleGenerator 0)),
      S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.loopClass p) = 1 →
        p.Homotopic (Path.refl (S2xS2Quotient.Topology.roundCircleGenerator 0))
S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.toRemaining
  (a : S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions) (C : ℤ) :
  S2xS2Quotient.Topology.RemainingAssumptions S2xS2Quotient.Topology.roundCircleGenerator C
S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions.toRoundCircle
  (a : S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions) : S2xS2Quotient.Topology.RoundCircleAssumptions
S2xS2Quotient.Topology.concrete_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
structure S2xS2Quotient.Topology.CoveredRoundCircleAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.cover_simply_connected : SimplyConnectedSpace
      S2xS2Quotient.Topology.RoundCircleCover
  S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.piTwoCoordinates : ℤ →
      S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0)
  S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.equivariant : ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (self.piTwoCoordinates C) (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
          ((self.piTwoCoordinates C) m)
constructor:
  S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.mk
    (cover_simply_connected : SimplyConnectedSpace S2xS2Quotient.Topology.RoundCircleCover)
    (piTwoCoordinates :
      ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0))
    (equivariant :
      ∀ (C : ℤ) (m : S2xS2Quotient.M),
        (piTwoCoordinates C) (S2xS2Quotient.tau m) =
          (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
            ((piTwoCoordinates C) m)) :
    S2xS2Quotient.Topology.CoveredRoundCircleAssumptions
S2xS2Quotient.Topology.integerCover_isCoveringMap.{u_1} {X : Type u_1} [TopologicalSpace X]
  (f : C(X, S2xS2Quotient.Topology.Circle)) : IsCoveringMap ⇑(S2xS2Quotient.Topology.integerCoverProjection f)
S2xS2Quotient.Topology.integerCoverDeck_free.{u_1} {X : Type u_1} [TopologicalSpace X]
  (f : C(X, S2xS2Quotient.Topology.Circle)) (n : ℤ) (z : S2xS2Quotient.Topology.IntegerCover f) :
  (S2xS2Quotient.Topology.integerCoverDeck f n) z = z ↔ n = 0
S2xS2Quotient.Topology.integerCoverDeck_fiber_transitive.{u_1} {X : Type u_1} [TopologicalSpace X]
  (f : C(X, S2xS2Quotient.Topology.Circle)) (z w : S2xS2Quotient.Topology.IntegerCover f)
  (h : (S2xS2Quotient.Topology.integerCoverProjection f) z = (S2xS2Quotient.Topology.integerCoverProjection f) w) :
  ∃! n, (S2xS2Quotient.Topology.integerCoverDeck f n) z = w
S2xS2Quotient.Topology.circlePathLift_one (p : Path 0 0) :
  (S2xS2Quotient.Topology.circlePathLift p) 1 =
    ↑(Multiplicative.toAdd (S2xS2Quotient.Topology.circleFundamentalGroupEquiv (S2xS2Quotient.Topology.loopClass p)))
S2xS2Quotient.Topology.roundCircleCover_isCoveringMap : IsCoveringMap ⇑S2xS2Quotient.Topology.roundCircleCoverProjection
S2xS2Quotient.Topology.roundCircleCoverPathConnectedSpace : PathConnectedSpace S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.roundCircleCoverPi_injective : Function.Injective ⇑S2xS2Quotient.Topology.roundCircleCoverPi
S2xS2Quotient.Topology.roundCircleCoverPi_exact
  (g : FundamentalGroup S2xS2Quotient.Topology.RoundCircleModel (S2xS2Quotient.Topology.roundCircleGenerator 0)) :
  S2xS2Quotient.Topology.roundCircleInteger g = 1 ↔ ∃ a, S2xS2Quotient.Topology.roundCircleCoverPi a = g
S2xS2Quotient.Topology.roundCircleCoverKernelEquiv :
  FundamentalGroup S2xS2Quotient.Topology.RoundCircleCover S2xS2Quotient.Topology.roundCircleCoverBase ≃*
    ↥S2xS2Quotient.Topology.roundCircleInteger.ker
S2xS2Quotient.Topology.roundCircleCover_simplyConnected_iff :
  SimplyConnectedSpace S2xS2Quotient.Topology.RoundCircleCover ↔
    ∀ (p : Path (S2xS2Quotient.Topology.roundCircleGenerator 0) (S2xS2Quotient.Topology.roundCircleGenerator 0)),
      S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.loopClass p) = 1 →
        p.Homotopic (Path.refl (S2xS2Quotient.Topology.roundCircleGenerator 0))
S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.toConcrete
  (a : S2xS2Quotient.Topology.CoveredRoundCircleAssumptions) : S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions
S2xS2Quotient.Topology.covered_assumptions_iff_concrete :
  Nonempty S2xS2Quotient.Topology.CoveredRoundCircleAssumptions ↔
    Nonempty S2xS2Quotient.Topology.ConcreteRoundCircleAssumptions
S2xS2Quotient.Topology.covered_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.CoveredRoundCircleAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.roundCircleQuotient_eq_iff
  (p q : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.roundCircleQuotient p = S2xS2Quotient.Topology.roundCircleQuotient q ↔
    S2xS2Quotient.Topology.RoundCircleEquivalent p q
S2xS2Quotient.Topology.roundCircleT2Space : T2Space S2xS2Quotient.Topology.RoundCircleModel
S2xS2Quotient.Topology.roundCircleCoverBlock_isClosedEmbedding (n : ℤ) :
  Topology.IsClosedEmbedding ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock n)
S2xS2Quotient.Topology.roundCircleCoverBlock_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock n) =
    ⇑S2xS2Quotient.Topology.roundCircleCoverHeight ⁻¹' Set.Icc (↑n) (↑n + 1)
S2xS2Quotient.Topology.roundCircleCoverBlock_intersection (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock n) ∩
      Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock (n + 1)) =
    Set.range fun x => (S2xS2Quotient.Topology.roundCircleCoverBlock n) (x, S2xS2Quotient.Topology.antipode x)
S2xS2Quotient.Topology.roundCircleCoverBlock_nonadjacent (n m : ℤ) (h : n + 1 < m) :
  Disjoint (Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock n))
    (Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock m))
S2xS2Quotient.Topology.roundCircleChainHomeomorph :
  S2xS2Quotient.Topology.RoundCircleChain ≃ₜ S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.roundCircleChainHomeomorph_block (n : ℤ)
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.roundCircleChainHomeomorph ((S2xS2Quotient.Topology.roundCircleChainBlock n) p) =
    (S2xS2Quotient.Topology.roundCircleCoverBlock n) p
S2xS2Quotient.Topology.roundCircleChainDeck_block (k n : ℤ)
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleChainDeck k) ((S2xS2Quotient.Topology.roundCircleChainBlock n) p) =
    (S2xS2Quotient.Topology.roundCircleChainBlock (n + k)) p
S2xS2Quotient.Topology.roundCircleFiniteChainSet_blocks (N : ℕ) :
  S2xS2Quotient.Topology.roundCircleFiniteChainSet N =
    ⋃ n ∈ Set.Icc (-↑N) ↑N, Set.range ⇑(S2xS2Quotient.Topology.roundCircleCoverBlock n)
S2xS2Quotient.Topology.roundCircleFiniteChainSet_isCompact (N : ℕ) :
  IsCompact (S2xS2Quotient.Topology.roundCircleFiniteChainSet N)
S2xS2Quotient.Topology.roundCircleCover_compact_family_factors.{u_1} {K : Type u_1} [TopologicalSpace K]
  [CompactSpace K] (f : C(K, S2xS2Quotient.Topology.RoundCircleCover)) :
  ∃ N g, (S2xS2Quotient.Topology.roundCircleFiniteChainInclusion N).comp g = f
S2xS2Quotient.Topology.roundCircleCover_simplyConnected_of_finite_chains
  (h : ∀ (N : ℕ), SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain N)) :
  SimplyConnectedSpace S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.finiteChain_target_characterization {Y : Type} [TopologicalSpace Y]
  (hsc : ∀ (N : ℕ), SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain N))
  (μ : ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0))
  (hμ :
    ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (μ C) (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C) ((μ C) m))
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.path_property_of_open_cover.{u_1, u_2} {X : Type u_1} [TopologicalSpace X] {ι : Type u_2}
  (U : ι → Set X) (hU : ∀ (i : ι), IsOpen (U i)) (hcover : ∀ (x : X), ∃ i, x ∈ U i) (P : {a b : X} → Path a b → Prop)
  (hrefl : ∀ (x : X), P (Path.refl x)) (hhom : ∀ {a b : X} {p q : Path a b}, p.Homotopic q → P p → P q)
  (htrans : ∀ {a b c : X} {p : Path a b} {q : Path b c}, P p → P q → P (p.trans q))
  (hsmall : ∀ (i : ι) {a b : X} (p : Path a b), (∀ (t : ↑unitInterval), p t ∈ U i) → P p) {a b : X} (p : Path a b) : P p
S2xS2Quotient.Topology.simplyConnected_of_two_open_sets.{u_1} {X : Type u_1} [TopologicalSpace X] (U V : Set X)
  (hU : IsOpen U) (hV : IsOpen V) (hcover : ∀ (x : X), x ∈ U ∨ x ∈ V) [SimplyConnectedSpace ↑U]
  [SimplyConnectedSpace ↑V] [PathConnectedSpace ↑(U ∩ V)] : SimplyConnectedSpace X
S2xS2Quotient.Topology.simplyConnected_of_homotopyEquiv.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  (e : ContinuousMap.HomotopyEquiv X Y) [SimplyConnectedSpace Y] : SimplyConnectedSpace X
S2xS2Quotient.Topology.simplyConnected_product.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] : SimplyConnectedSpace (X × Y)
S2xS2Quotient.Topology.euclideanSpherePunctureHomeomorph (p : ↑S2xS2Quotient.Topology.EuclideanSphereTwo) :
  ↑{p}ᶜ ≃ₜ EuclideanSpace ℝ (Fin 2)
S2xS2Quotient.Topology.euclideanSphereTwo_simplyConnected :
  SimplyConnectedSpace ↑S2xS2Quotient.Topology.EuclideanSphereTwo
S2xS2Quotient.Topology.sphereTwoSimplyConnectedSpace : SimplyConnectedSpace S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.sphereTwoProductSimplyConnectedSpace :
  SimplyConnectedSpace (S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.roundCircleFiniteChainZeroHomeomorph :
  S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo ≃ₜ
    ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain 0)
S2xS2Quotient.Topology.roundCircleFiniteChainZeroSimplyConnected :
  SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain 0)
S2xS2Quotient.Topology.roundCircleFiniteChainPathConnectedSpace (N : ℕ) :
  PathConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain N)
S2xS2Quotient.Topology.roundCircleCover_simplyConnected_of_positive_finite_chains
  (h : ∀ (N : ℕ), SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain (N + 1))) :
  SimplyConnectedSpace S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.positiveFiniteChain_target_characterization {Y : Type} [TopologicalSpace Y]
  (hsc : ∀ (N : ℕ), SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleFiniteChain (N + 1)))
  (μ : ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0))
  (hμ :
    ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (μ C) (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C) ((μ C) m))
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.diagonalSphereCap_height
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  p ∈ S2xS2Quotient.Topology.diagonalSphereCap ↔ S2xS2Quotient.Topology.roundCircleHeight p < 1 / 2
S2xS2Quotient.Topology.diagonalCapDeformation_section (t : ↑unitInterval) (x : S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.diagonalCapDeformation (t, S2xS2Quotient.Topology.diagonalCapSection x) =
    S2xS2Quotient.Topology.diagonalCapSection x
S2xS2Quotient.Topology.diagonalCapDeformation_projection (t : ↑unitInterval)
  (p : ↑S2xS2Quotient.Topology.DiagonalSphereCap) :
  S2xS2Quotient.Topology.diagonalCapProjection (S2xS2Quotient.Topology.diagonalCapDeformation (t, p)) =
    S2xS2Quotient.Topology.diagonalCapProjection p
S2xS2Quotient.Topology.diagonalCapHomotopyEquiv :
  ContinuousMap.HomotopyEquiv (↑S2xS2Quotient.Topology.DiagonalSphereCap) S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.antidiagonalSphereCap_height
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  p ∈ S2xS2Quotient.Topology.antidiagonalSphereCap ↔ 1 / 2 < S2xS2Quotient.Topology.roundCircleHeight p
S2xS2Quotient.Topology.antidiagonalCapDeformation_section (t : ↑unitInterval) (x : S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.antidiagonalCapDeformation (t, S2xS2Quotient.Topology.antidiagonalCapSection x) =
    S2xS2Quotient.Topology.antidiagonalCapSection x
S2xS2Quotient.Topology.antidiagonalCapHomotopyEquiv :
  ContinuousMap.HomotopyEquiv (↑S2xS2Quotient.Topology.AntidiagonalSphereCap) S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.quotientFamilyLift_apply.{u_1, u_2, u_3, u_4} {A : Type u_1} {X : Type u_2} {T : Type u_3}
  {Y : Type u_4} [TopologicalSpace A] [TopologicalSpace X] [TopologicalSpace T] [TopologicalSpace Y]
  [LocallyCompactSpace T] (f : A → X) (hf : Topology.IsQuotientMap f) (H : C(T × A, Y))
  (hH : ∀ (t : T) (a b : A), f a = f b → H (t, a) = H (t, b)) (t : T) (a : A) :
  (S2xS2Quotient.Topology.quotientFamilyLift f hf H hH) (t, f a) = H (t, a)
S2xS2Quotient.Topology.roundCircleSeamSet_isOpen (n : ℤ) : IsOpen (S2xS2Quotient.Topology.roundCircleSeamSet n)
S2xS2Quotient.Topology.roundCircleSeamUpper_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleSeamUpper n) =
    {z | ↑n ≤ (S2xS2Quotient.Topology.roundCircleSeamHeight n) z}
S2xS2Quotient.Topology.roundCircleSeamLower_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleSeamLower n) =
    {z | (S2xS2Quotient.Topology.roundCircleSeamHeight n) z ≤ ↑n}
S2xS2Quotient.Topology.roundCircleSeam_cross_eq_iff (n : ℤ) (p : ↑S2xS2Quotient.Topology.AntidiagonalSphereCap)
  (q : ↑S2xS2Quotient.Topology.DiagonalSphereCap) :
  (S2xS2Quotient.Topology.roundCircleSeamLower n) p = (S2xS2Quotient.Topology.roundCircleSeamUpper n) q ↔
    ∃ x, p = S2xS2Quotient.Topology.antidiagonalCapSection x ∧ q = S2xS2Quotient.Topology.diagonalCapSection x
S2xS2Quotient.Topology.roundCircleSeamQuotient_isQuotientMap (n : ℤ) :
  Topology.IsQuotientMap ⇑(S2xS2Quotient.Topology.roundCircleSeamQuotient n)
S2xS2Quotient.Topology.roundCircleSeamDeformation (n : ℤ) :
  C(↑unitInterval × ↑(S2xS2Quotient.Topology.RoundCircleSeam n), ↑(S2xS2Quotient.Topology.RoundCircleSeam n))
S2xS2Quotient.Topology.roundCircleSeamDeformation_zero (n : ℤ) (z : ↑(S2xS2Quotient.Topology.RoundCircleSeam n)) :
  (S2xS2Quotient.Topology.roundCircleSeamDeformation n) (0, z) = z
S2xS2Quotient.Topology.roundCircleSeamDeformation_one (n : ℤ) (z : ↑(S2xS2Quotient.Topology.RoundCircleSeam n)) :
  (S2xS2Quotient.Topology.roundCircleSeamDeformation n) (1, z) =
    (S2xS2Quotient.Topology.roundCircleSeamSection n) ((S2xS2Quotient.Topology.roundCircleSeamProjection n) z)
S2xS2Quotient.Topology.roundCircleSeamDeformation_section (n : ℤ) (t : ↑unitInterval)
  (x : S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleSeamDeformation n) (t, (S2xS2Quotient.Topology.roundCircleSeamSection n) x) =
    (S2xS2Quotient.Topology.roundCircleSeamSection n) x
S2xS2Quotient.Topology.roundCircleSeamDeformation_projection (n : ℤ) (t : ↑unitInterval)
  (z : ↑(S2xS2Quotient.Topology.RoundCircleSeam n)) :
  (S2xS2Quotient.Topology.roundCircleSeamProjection n) ((S2xS2Quotient.Topology.roundCircleSeamDeformation n) (t, z)) =
    (S2xS2Quotient.Topology.roundCircleSeamProjection n) z
S2xS2Quotient.Topology.roundCircleSeamHomotopyEquiv (n : ℤ) :
  ContinuousMap.HomotopyEquiv (↑(S2xS2Quotient.Topology.RoundCircleSeam n)) S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.roundCircleSeamSimplyConnectedSpace (n : ℤ) :
  SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleSeam n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (n : ℤ) : Set S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet_isOpen (n : ℤ) :
  IsOpen (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodHeight (n : ℤ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n), ℝ)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodProjection (n : ℤ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n), S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower (n : ℤ) :
  C(↑S2xS2Quotient.Topology.AntidiagonalSphereCap, ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle (n : ℤ) :
  C(S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo,
    ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper (n : ℤ) :
  C(↑S2xS2Quotient.Topology.DiagonalSphereCap, ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n) =
    {z | (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodHeight n) z ≤ ↑n}
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) =
    ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodHeight n) ⁻¹' Set.Icc (↑n) (↑n + 1)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper_range (n : ℤ) :
  Set.range ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) =
    {z | ↑n + 1 ≤ (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodHeight n) z}
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower_isClosedEmbedding (n : ℤ) :
  Topology.IsClosedEmbedding ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle_isClosedEmbedding (n : ℤ) :
  Topology.IsClosedEmbedding ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper_isClosedEmbedding (n : ℤ) :
  Topology.IsClosedEmbedding ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhood_lower_section (n : ℤ) (x : S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n) (S2xS2Quotient.Topology.antidiagonalCapSection x) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) (x, x)
S2xS2Quotient.Topology.roundCircleBlockNeighborhood_upper_section (n : ℤ) (x : S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) (x, S2xS2Quotient.Topology.antipode x) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) (S2xS2Quotient.Topology.diagonalCapSection x)
S2xS2Quotient.Topology.roundCircleBlockNeighborhood_lower_middle_eq_iff (n : ℤ)
  (p : ↑S2xS2Quotient.Topology.AntidiagonalSphereCap)
  (q : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n) p =
      (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) q ↔
    ∃ x, p = S2xS2Quotient.Topology.antidiagonalCapSection x ∧ q = (x, x)
S2xS2Quotient.Topology.roundCircleBlockNeighborhood_middle_upper_eq_iff (n : ℤ)
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
  (q : ↑S2xS2Quotient.Topology.DiagonalSphereCap) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) p =
      (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) q ↔
    ∃ x, p = (x, S2xS2Quotient.Topology.antipode x) ∧ q = S2xS2Quotient.Topology.diagonalCapSection x
S2xS2Quotient.Topology.roundCircleBlockNeighborhood_lower_ne_upper (n : ℤ)
  (p : ↑S2xS2Quotient.Topology.AntidiagonalSphereCap) (q : ↑S2xS2Quotient.Topology.DiagonalSphereCap) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n) p ≠
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) q
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient (n : ℤ) :
  C(S2xS2Quotient.Topology.RoundCircleBlockPieces, ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient_surjective (n : ℤ) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient_isQuotientMap (n : ℤ) :
  Topology.IsQuotientMap ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient n)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet_intersection (n : ℤ) :
  S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet n ∩
      S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (n + 1) =
    S2xS2Quotient.Topology.roundCircleSeamSet (n + 1)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet_nonadjacent (n m : ℤ) (hnm : n + 1 < m) :
  Disjoint (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet n)
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet m)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet_covers :
  ⋃ n, S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet n = Set.univ
S2xS2Quotient.Topology.roundCircleBlockDeformationBefore (n : ℤ) :
  C(↑unitInterval × S2xS2Quotient.Topology.RoundCircleBlockPieces,
    ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockDeformationBefore_respects (n : ℤ) (t : ↑unitInterval)
  (a b : S2xS2Quotient.Topology.RoundCircleBlockPieces)
  (h :
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient n) a =
      (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodQuotient n) b) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformationBefore n) (t, a) =
    (S2xS2Quotient.Topology.roundCircleBlockDeformationBefore n) (t, b)
S2xS2Quotient.Topology.roundCircleBlockDeformation (n : ℤ) :
  C(↑unitInterval × ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n),
    ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleBlockDeformation_lower (n : ℤ) (t : ↑unitInterval)
  (p : ↑S2xS2Quotient.Topology.AntidiagonalSphereCap) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n)
      (t, (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n) p) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodLower n)
      (S2xS2Quotient.Topology.antidiagonalCapDeformation (t, p))
S2xS2Quotient.Topology.roundCircleBlockDeformation_middle (n : ℤ) (t : ↑unitInterval)
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n)
      (t, (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) p) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) p
S2xS2Quotient.Topology.roundCircleBlockDeformation_upper (n : ℤ) (t : ↑unitInterval)
  (p : ↑S2xS2Quotient.Topology.DiagonalSphereCap) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n)
      (t, (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) p) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodUpper n) (S2xS2Quotient.Topology.diagonalCapDeformation (t, p))
S2xS2Quotient.Topology.roundCircleBlockDeformation_zero (n : ℤ)
  (z : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n) (0, z) = z
S2xS2Quotient.Topology.roundCircleBlockDeformation_one_mem_middle (n : ℤ)
  (z : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n) (1, z) ∈
    Set.range ⇑(S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n)
S2xS2Quotient.Topology.roundCircleBlockRetraction (n : ℤ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n),
    S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.roundCircleBlockDeformation_one (n : ℤ)
  (z : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) :
  (S2xS2Quotient.Topology.roundCircleBlockDeformation n) (1, z) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n)
      ((S2xS2Quotient.Topology.roundCircleBlockRetraction n) z)
S2xS2Quotient.Topology.roundCircleBlockRetraction_middle (n : ℤ)
  (p : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockRetraction n)
      ((S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n) p) =
    p
S2xS2Quotient.Topology.roundCircleBlockDeformation_projection (n : ℤ) (t : ↑unitInterval)
  (z : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodProjection n)
      ((S2xS2Quotient.Topology.roundCircleBlockDeformation n) (t, z)) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodProjection n) z
S2xS2Quotient.Topology.roundCircleBlockHomotopy (n : ℤ) :
  (ContinuousMap.id ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)).Homotopy
    ((S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n).comp
      (S2xS2Quotient.Topology.roundCircleBlockRetraction n))
S2xS2Quotient.Topology.roundCircleBlockHomotopyEquiv (n : ℤ) :
  ContinuousMap.HomotopyEquiv (↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
    (S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSimplyConnectedSpace (n : ℤ) :
  SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)
S2xS2Quotient.Topology.subsetPreimageHomeomorph.{u_1} {X : Type u_1} [TopologicalSpace X] {U S : Set X} (h : U ⊆ S) :
  ↑(Subtype.val ⁻¹' U) ≃ₜ ↑U
S2xS2Quotient.Topology.simplyConnected_union.{u_1} {X : Type u_1} [TopologicalSpace X] (U V : Set X) (hU : IsOpen U)
  (hV : IsOpen V) [SimplyConnectedSpace ↑U] [SimplyConnectedSpace ↑V] [PathConnectedSpace ↑(U ∩ V)] :
  SimplyConnectedSpace ↑(U ∪ V)
S2xS2Quotient.Topology.roundCircleOpenChainSet (a : ℤ) (k : ℕ) : Set S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.roundCircleOpenChainSet_isOpen (a : ℤ) (k : ℕ) :
  IsOpen (S2xS2Quotient.Topology.roundCircleOpenChainSet a k)
S2xS2Quotient.Topology.roundCircleOpenChainSet_zero (a : ℤ) :
  S2xS2Quotient.Topology.roundCircleOpenChainSet a 0 = S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet a
S2xS2Quotient.Topology.roundCircleOpenChainSet_succ (a : ℤ) (k : ℕ) :
  S2xS2Quotient.Topology.roundCircleOpenChainSet a (k + 1) =
    S2xS2Quotient.Topology.roundCircleOpenChainSet a k ∪
      S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (a + ↑k + 1)
S2xS2Quotient.Topology.roundCircleOpenChainSet_intersection (a : ℤ) (k : ℕ) :
  S2xS2Quotient.Topology.roundCircleOpenChainSet a k ∩
      S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (a + ↑k + 1) =
    S2xS2Quotient.Topology.roundCircleSeamSet (a + ↑k + 1)
S2xS2Quotient.Topology.roundCircleOpenChainSimplyConnectedSpace (a : ℤ) (k : ℕ) :
  SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)
S2xS2Quotient.Topology.roundCircleFiniteChainSet_subset_openChain (N : ℕ) :
  S2xS2Quotient.Topology.roundCircleFiniteChainSet N ⊆ S2xS2Quotient.Topology.roundCircleOpenChainSet (-↑N) (2 * N)
S2xS2Quotient.Topology.roundCircleCoverSimplyConnectedSpace :
  SimplyConnectedSpace S2xS2Quotient.Topology.RoundCircleCover
S2xS2Quotient.Topology.roundCircle_zero_winding_null
  (p : Path (S2xS2Quotient.Topology.roundCircleGenerator 0) (S2xS2Quotient.Topology.roundCircleGenerator 0)) :
  S2xS2Quotient.Topology.roundCircleInteger (S2xS2Quotient.Topology.loopClass p) = 1 →
    p.Homotopic (Path.refl (S2xS2Quotient.Topology.roundCircleGenerator 0))
S2xS2Quotient.Topology.roundCircleInteger_injective_proved :
  Function.Injective ⇑S2xS2Quotient.Topology.roundCircleInteger
S2xS2Quotient.Topology.roundCircleFundamentalGroupEquiv :
  FundamentalGroup S2xS2Quotient.Topology.RoundCircleModel (S2xS2Quotient.Topology.roundCircleGenerator 0) ≃*
    Multiplicative ℤ
S2xS2Quotient.Topology.roundCircleFundamentalGroupEquiv_apply
  (g : FundamentalGroup S2xS2Quotient.Topology.RoundCircleModel (S2xS2Quotient.Topology.roundCircleGenerator 0)) :
  S2xS2Quotient.Topology.roundCircleFundamentalGroupEquiv g = S2xS2Quotient.Topology.roundCircleInteger g
S2xS2Quotient.Topology.roundCircleFundamentalGroupEquiv_generator :
  S2xS2Quotient.Topology.roundCircleFundamentalGroupEquiv
      (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator)) =
    Multiplicative.ofAdd 1
S2xS2Quotient.Topology.roundCircleComponentCoverage :
  S2xS2Quotient.Topology.ComponentCoverage S2xS2Quotient.Topology.roundCircleGenerator
S2xS2Quotient.Topology.roundCircleFreeLoopComponents :
  ZerothHomotopy (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) ≃ ℤ
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.toCovered (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) :
  S2xS2Quotient.Topology.CoveredRoundCircleAssumptions
S2xS2Quotient.Topology.CoveredRoundCircleAssumptions.toPiTwo
  (a : S2xS2Quotient.Topology.CoveredRoundCircleAssumptions) : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.piTwo_assumptions_iff_covered :
  Nonempty S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions ↔
    Nonempty S2xS2Quotient.Topology.CoveredRoundCircleAssumptions
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.toRemaining (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions)
  (C : ℤ) : S2xS2Quotient.Topology.RemainingAssumptions S2xS2Quotient.Topology.roundCircleGenerator C
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.groupEquiv (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions)
  (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.groupEquiv_Wa
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) (C : ℤ) :
  (a.groupEquiv C) (S2xS2Quotient.Wa C) = S2xS2Quotient.Topology.WaLift S2xS2Quotient.Topology.roundCircleGenerator C
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.groupEquiv_Wb
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) (C : ℤ) :
  (a.groupEquiv C) (S2xS2Quotient.Wb C) = (a.toRemaining C).toTarget.WbLoop
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.groupEquiv_zeta
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) (C i : ℤ) :
  (a.groupEquiv C) (S2xS2Quotient.zeta C i) = (a.toRemaining C).toTarget.zetaLoop i
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.groupEquiv_at
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  S2xS2Quotient.G (S2xS2Quotient.Topology.roundCircleComponentCoverage.sector γ) ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ
S2xS2Quotient.Topology.piTwo_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
structure S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.piTwoCoordinates : ℤ →
      S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0)
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.equivariant : ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (self.piTwoCoordinates C) (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
          ((self.piTwoCoordinates C) m)
constructor:
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.mk
    (piTwoCoordinates :
      ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0))
    (equivariant :
      ∀ (C : ℤ) (m : S2xS2Quotient.M),
        (piTwoCoordinates C) (S2xS2Quotient.tau m) =
          (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
            ((piTwoCoordinates C) m)) :
    S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.genLoopPostcompose.{u_1, u_2, u_3} {N : Type u_1} {X : Type u_2} {Y : Type u_3}
  [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) {x : X} (p : ↑(GenLoop N X x)) : ↑(GenLoop N Y (f x))
S2xS2Quotient.Topology.genLoopPostcompose_apply.{u_1, u_2, u_3} {N : Type u_1} {X : Type u_2} {Y : Type u_3}
  [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) {x : X} (p : ↑(GenLoop N X x)) (t : N → ↑unitInterval) :
  (S2xS2Quotient.Topology.genLoopPostcompose f p) t = f (p t)
S2xS2Quotient.Topology.genLoopPostcompose_homotopic.{u_1, u_2, u_3} {N : Type u_1} {X : Type u_2} {Y : Type u_3}
  [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) {x : X} {p q : ↑(GenLoop N X x)} (h : GenLoop.Homotopic p q) :
  GenLoop.Homotopic (S2xS2Quotient.Topology.genLoopPostcompose f p) (S2xS2Quotient.Topology.genLoopPostcompose f q)
S2xS2Quotient.Topology.genLoopPostcompose_transAt.{u_1, u_2, u_3} {N : Type u_1} {X : Type u_2} {Y : Type u_3}
  [TopologicalSpace X] [TopologicalSpace Y] [DecidableEq N] (f : C(X, Y)) {x : X} (i : N) (p q : ↑(GenLoop N X x)) :
  S2xS2Quotient.Topology.genLoopPostcompose f (GenLoop.transAt i p q) =
    GenLoop.transAt i (S2xS2Quotient.Topology.genLoopPostcompose f p) (S2xS2Quotient.Topology.genLoopPostcompose f q)
S2xS2Quotient.Topology.homotopyGroupMap.{u_2, u_3, u_5} {X : Type u_2} {Y : Type u_3} [TopologicalSpace X]
  [TopologicalSpace Y] (N : Type u_5) [DecidableEq N] [Nonempty N] (f : C(X, Y)) (x : X) :
  HomotopyGroup N X x →* HomotopyGroup N Y (f x)
S2xS2Quotient.Topology.homotopyGroupMap_mk.{u_2, u_3, u_5} {X : Type u_2} {Y : Type u_3} [TopologicalSpace X]
  [TopologicalSpace Y] (N : Type u_5) [DecidableEq N] [Nonempty N] (f : C(X, Y)) (x : X) (p : ↑(GenLoop N X x)) :
  (S2xS2Quotient.Topology.homotopyGroupMap N f x) ⟦p⟧ = ⟦S2xS2Quotient.Topology.genLoopPostcompose f p⟧
S2xS2Quotient.Topology.homotopyGroupMap_id.{u_2, u_5} {X : Type u_2} [TopologicalSpace X] (N : Type u_5) [DecidableEq N]
  [Nonempty N] (x : X) (a : HomotopyGroup N X x) :
  (S2xS2Quotient.Topology.homotopyGroupMap N (ContinuousMap.id X) x) a = a
S2xS2Quotient.Topology.homotopyGroupMap_comp.{u_2, u_3, u_4, u_5} {X : Type u_2} {Y : Type u_3} {Z : Type u_4}
  [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] (N : Type u_5) [DecidableEq N] [Nonempty N]
  (f : C(X, Y)) (g : C(Y, Z)) (x : X) (a : HomotopyGroup N X x) :
  (S2xS2Quotient.Topology.homotopyGroupMap N (g.comp f) x) a =
    (S2xS2Quotient.Topology.homotopyGroupMap N g (f x)) ((S2xS2Quotient.Topology.homotopyGroupMap N f x) a)
S2xS2Quotient.Topology.cubicalSphereSquare.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (e : E) (p : ↑(GenLoop (Fin 2) X (f e))) : C(↑unitInterval × ↑unitInterval, X)
S2xS2Quotient.Topology.cubicalSphereSquare_zero.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (e : E) (p : ↑(GenLoop (Fin 2) X (f e))) (t : ↑unitInterval) :
  (S2xS2Quotient.Topology.cubicalSphereSquare f e p) (0, t) = f e
S2xS2Quotient.Topology.coveringSquareLift.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e))) :
  C(↑unitInterval × ↑unitInterval, E)
S2xS2Quotient.Topology.coveringSquareLift_lifts.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e)))
  (s t : ↑unitInterval) :
  f ((S2xS2Quotient.Topology.coveringSquareLift f cov e p) (s, t)) =
    (S2xS2Quotient.Topology.cubicalSphereSquare f e p) (s, t)
S2xS2Quotient.Topology.coveringSquareLift_zero.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e)))
  (t : ↑unitInterval) : (S2xS2Quotient.Topology.coveringSquareLift f cov e p) (0, t) = e
S2xS2Quotient.Topology.coveringSquareLift_edge.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e)))
  (s t : ↑unitInterval) (ht : t = 0 ∨ t = 1) : (S2xS2Quotient.Topology.coveringSquareLift f cov e p) (s, t) = e
S2xS2Quotient.Topology.coveringSquareLift_one.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e)))
  (t : ↑unitInterval) : (S2xS2Quotient.Topology.coveringSquareLift f cov e p) (1, t) = e
S2xS2Quotient.Topology.coveringGenLoopLift.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e))) :
  ↑(GenLoop (Fin 2) E e)
S2xS2Quotient.Topology.coveringGenLoopLift_projection.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) X (f e))) :
  S2xS2Quotient.Topology.genLoopPostcompose f (S2xS2Quotient.Topology.coveringGenLoopLift f cov e p) = p
S2xS2Quotient.Topology.coveringGenLoop_homotopic_iff.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p q : ↑(GenLoop (Fin 2) E e)) :
  GenLoop.Homotopic p q ↔
    GenLoop.Homotopic (S2xS2Quotient.Topology.genLoopPostcompose f p) (S2xS2Quotient.Topology.genLoopPostcompose f q)
S2xS2Quotient.Topology.coveringPiTwoMap_injective.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) :
  Function.Injective ⇑(S2xS2Quotient.Topology.homotopyGroupMap (Fin 2) f e)
S2xS2Quotient.Topology.coveringPiTwoMap_surjective.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.homotopyGroupMap (Fin 2) f e)
S2xS2Quotient.Topology.coveringPiTwoMulEquiv.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) :
  HomotopyGroup.Pi 2 E e ≃* HomotopyGroup.Pi 2 X (f e)
S2xS2Quotient.Topology.coveringPiTwoEquiv.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) :
  S2xS2Quotient.Topology.PiTwo e ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (f e)
S2xS2Quotient.Topology.coveringPiTwoEquiv_mk.{u_1, u_2} {E : Type u_1} {X : Type u_2} [TopologicalSpace E]
  [TopologicalSpace X] (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (p : ↑(GenLoop (Fin 2) E e)) :
  (S2xS2Quotient.Topology.coveringPiTwoEquiv f cov e) (Additive.ofMul ⟦p⟧) =
    Additive.ofMul ⟦S2xS2Quotient.Topology.genLoopPostcompose f p⟧
S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv :
  S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase ≃ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleGenerator 0)
S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv_mk
  (p : ↑(GenLoop (Fin 2) S2xS2Quotient.Topology.RoundCircleCover S2xS2Quotient.Topology.roundCircleCoverBase)) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv (Additive.ofMul ⟦p⟧) =
    Additive.ofMul ⟦S2xS2Quotient.Topology.genLoopPostcompose S2xS2Quotient.Topology.roundCircleCoverProjection p⟧
S2xS2Quotient.Topology.liftedWindingMonodromy (C : ℤ) :
  S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase ≃ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv_monodromy (C : ℤ)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv ((S2xS2Quotient.Topology.liftedWindingMonodromy C) m) =
    (S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C)
      (S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m)
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.ofCoverCoordinates
  (μ : ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase)
  (hμ :
    ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (μ C) (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.liftedWindingMonodromy C) ((μ C) m)) :
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.coverCoordinates
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) (C : ℤ) :
  S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.coverCoordinates_equivariant
  (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) (C : ℤ) (m : S2xS2Quotient.M) :
  (a.coverCoordinates C) (S2xS2Quotient.tau m) =
    (S2xS2Quotient.Topology.liftedWindingMonodromy C) ((a.coverCoordinates C) m)
S2xS2Quotient.Topology.piTwo_coordinates_on_cover_iff :
  Nonempty S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions ↔
    ∃ μ,
      ∀ (C : ℤ) (m : S2xS2Quotient.M),
        (μ C) (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.liftedWindingMonodromy C) ((μ C) m)
S2xS2Quotient.Topology.coverPiTwo_target_characterization {Y : Type} [TopologicalSpace Y]
  (μ : ℤ → S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase)
  (hμ :
    ∀ (C : ℤ) (m : S2xS2Quotient.M),
      (μ C) (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.liftedWindingMonodromy C) ((μ C) m))
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.pathSpaceHomotopyPath.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} {p q : Path a b}
  (H : p.Homotopy q) : Path p q
S2xS2Quotient.Topology.pathMapConcat.{u_1, u_2} {X : Type u_1} {Z : Type u_2} [TopologicalSpace X] [TopologicalSpace Z]
  {a b c : X} (f : C(Z, Path a b)) (g : C(Z, Path b c)) : C(Z, Path a c)
S2xS2Quotient.Topology.pathMapConcatHomotopy.{u_1, u_2} {X : Type u_1} {Z : Type u_2} [TopologicalSpace X]
  [TopologicalSpace Z] {a b c : X} {f₀ f₁ : C(Z, Path a b)} {g₀ g₁ : C(Z, Path b c)} (F : f₀.Homotopy f₁)
  (G : g₀.Homotopy g₁) :
  (S2xS2Quotient.Topology.pathMapConcat f₀ g₀).Homotopy (S2xS2Quotient.Topology.pathMapConcat f₁ g₁)
S2xS2Quotient.Topology.pathMapAssociativity.{u_1, u_2} {X : Type u_1} {Z : Type u_2} [TopologicalSpace X]
  [TopologicalSpace Z] {a b c d : X} (f : C(Z, Path a b)) (g : C(Z, Path b c)) (h : C(Z, Path c d)) :
  (S2xS2Quotient.Topology.pathMapConcat (S2xS2Quotient.Topology.pathMapConcat f g) h).Homotopy
    (S2xS2Quotient.Topology.pathMapConcat f (S2xS2Quotient.Topology.pathMapConcat g h))
S2xS2Quotient.Topology.pathConcatRight.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} (q : Path b c) :
  C(Path a b, Path a c)
S2xS2Quotient.Topology.pathConcatLeft.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} (q : Path a b) :
  C(Path b c, Path a c)
S2xS2Quotient.Topology.pathConcatRightHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} {q r : Path b c}
  (H : q.Homotopy r) : (S2xS2Quotient.Topology.pathConcatRight q).Homotopy (S2xS2Quotient.Topology.pathConcatRight r)
S2xS2Quotient.Topology.pathConcatLeftHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} {q r : Path a b}
  (H : q.Homotopy r) : (S2xS2Quotient.Topology.pathConcatLeft q).Homotopy (S2xS2Quotient.Topology.pathConcatLeft r)
S2xS2Quotient.Topology.pathConcatRightUnit.{u_1} {X : Type u_1} [TopologicalSpace X] (a b : X) :
  (S2xS2Quotient.Topology.pathConcatRight (Path.refl b)).Homotopy (ContinuousMap.id (Path a b))
S2xS2Quotient.Topology.pathConcatLeftUnit.{u_1} {X : Type u_1} [TopologicalSpace X] (a b : X) :
  (S2xS2Quotient.Topology.pathConcatLeft (Path.refl a)).Homotopy (ContinuousMap.id (Path a b))
S2xS2Quotient.Topology.pathRightAssociativity.{u_1} {X : Type u_1} [TopologicalSpace X] {b c d : X} (a : X)
  (q : Path b c) (r : Path c d) :
  ((S2xS2Quotient.Topology.pathConcatRight r).comp (S2xS2Quotient.Topology.pathConcatRight q)).Homotopy
    (S2xS2Quotient.Topology.pathConcatRight (q.trans r))
S2xS2Quotient.Topology.pathLeftAssociativity.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} (q : Path a b)
  (r : Path b c) (d : X) :
  (S2xS2Quotient.Topology.pathConcatLeft (q.trans r)).Homotopy
    ((S2xS2Quotient.Topology.pathConcatLeft q).comp (S2xS2Quotient.Topology.pathConcatLeft r))
S2xS2Quotient.Topology.pathRightTranslation.{u_1} {X : Type u_1} [TopologicalSpace X] {b c : X} (a : X) (q : Path b c) :
  ContinuousMap.HomotopyEquiv (Path a b) (Path a c)
S2xS2Quotient.Topology.pathLeftTranslation.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) (c : X) :
  ContinuousMap.HomotopyEquiv (Path b c) (Path a c)
S2xS2Quotient.Topology.loopBaseTransport.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) :
  ContinuousMap.HomotopyEquiv (Path a a) (Path b b)
S2xS2Quotient.Topology.loopBaseTransport_apply.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b)
  (p : Path a a) : (S2xS2Quotient.Topology.loopBaseTransport q).toFun p = (q.symm.trans p).trans q
S2xS2Quotient.Topology.loopBaseTransportClosing.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) :
  Path ((S2xS2Quotient.Topology.loopBaseTransport q).toFun (Path.refl a)) (Path.refl b)
S2xS2Quotient.Topology.loopBaseTransportHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} {q r : Path a b}
  (H : q.Homotopy r) :
  (S2xS2Quotient.Topology.loopBaseTransport q).toFun.Homotopy (S2xS2Quotient.Topology.loopBaseTransport r).toFun
S2xS2Quotient.Topology.loopBaseTransportComposition.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} (q : Path a b)
  (r : Path b c) :
  ((S2xS2Quotient.Topology.loopBaseTransport r).toFun.comp (S2xS2Quotient.Topology.loopBaseTransport q).toFun).Homotopy
    (S2xS2Quotient.Topology.loopBaseTransport (q.trans r)).toFun
S2xS2Quotient.Topology.loopBaseTransportUnit.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X) :
  (S2xS2Quotient.Topology.loopBaseTransport (Path.refl a)).toFun.Homotopy (ContinuousMap.id (Path a a))
S2xS2Quotient.Topology.intervalLoopBaseTransportPi.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) :
  FundamentalGroup (Path a a) (Path.refl a) ≃* FundamentalGroup (Path b b) (Path.refl b)
S2xS2Quotient.Topology.intervalLoopBaseTransportPi_apply.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X}
  (q : Path a b) (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.intervalLoopBaseTransportPi q) u =
    (S2xS2Quotient.Topology.pointedInduced (S2xS2Quotient.Topology.loopBaseTransport q).toFun (Path.refl a)
        (Path.refl b) (S2xS2Quotient.Topology.loopBaseTransportClosing q))
      u
S2xS2Quotient.Topology.intervalLoopBaseTransportPi_homotopic.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X}
  {q r : Path a b} (h : q.Homotopic r) :
  S2xS2Quotient.Topology.intervalLoopBaseTransportPi q = S2xS2Quotient.Topology.intervalLoopBaseTransportPi r
S2xS2Quotient.Topology.intervalLoopBaseTransportPi_trans.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X}
  (q : Path a b) (r : Path b c) (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.intervalLoopBaseTransportPi (q.trans r)) u =
    (S2xS2Quotient.Topology.intervalLoopBaseTransportPi r) ((S2xS2Quotient.Topology.intervalLoopBaseTransportPi q) u)
S2xS2Quotient.Topology.intervalLoopBaseTransportPi_refl.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X)
  (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.intervalLoopBaseTransportPi (Path.refl a)) u = u
S2xS2Quotient.Topology.piTwoPathMulEquiv.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) :
  HomotopyGroup.Pi 2 X a ≃* HomotopyGroup.Pi 2 X b
S2xS2Quotient.Topology.piTwoPathEquiv.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b) :
  S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.piTwoPathEquiv_homotopic.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} {q r : Path a b}
  (h : q.Homotopic r) : S2xS2Quotient.Topology.piTwoPathEquiv q = S2xS2Quotient.Topology.piTwoPathEquiv r
S2xS2Quotient.Topology.piTwoPathEquiv_trans.{u_1} {X : Type u_1} [TopologicalSpace X] {a b c : X} (q : Path a b)
  (r : Path b c) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoPathEquiv (q.trans r)) m =
    (S2xS2Quotient.Topology.piTwoPathEquiv r) ((S2xS2Quotient.Topology.piTwoPathEquiv q) m)
S2xS2Quotient.Topology.piTwoPathEquiv_refl.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X)
  (m : S2xS2Quotient.Topology.PiTwo a) : (S2xS2Quotient.Topology.piTwoPathEquiv (Path.refl a)) m = m
S2xS2Quotient.Topology.piTwoPathEquiv_symm_cancel.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (q : Path a b)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoPathEquiv q.symm) ((S2xS2Quotient.Topology.piTwoPathEquiv q) m) = m
S2xS2Quotient.Topology.piTwoPathEquiv_independent.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X}
  [SimplyConnectedSpace X] (q r : Path a b) :
  S2xS2Quotient.Topology.piTwoPathEquiv q = S2xS2Quotient.Topology.piTwoPathEquiv r
S2xS2Quotient.Topology.pathPostcompose.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  (a b : X) : C(Path a b, Path (f a) (f b))
S2xS2Quotient.Topology.pathPostcompose_refl.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  (a : X) : (S2xS2Quotient.Topology.pathPostcompose f a a) (Path.refl a) = Path.refl (f a)
S2xS2Quotient.Topology.piTwoIntervalLoop_natural.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  (f : C(X, Y)) (a : X) (m : HomotopyGroup.Pi 2 X a) :
  S2xS2Quotient.Topology.piTwoIntervalLoop ((S2xS2Quotient.Topology.homotopyGroupMap (Fin 2) f a) m) =
    (S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.pathPostcompose f a a) (Path.refl a))
      (S2xS2Quotient.Topology.piTwoIntervalLoop m)
S2xS2Quotient.Topology.piTwoMap.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) (a : X) :
  S2xS2Quotient.Topology.PiTwo a →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (f a)
S2xS2Quotient.Topology.piTwoMap_mk.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) (a : X)
  (p : ↑(GenLoop (Fin 2) X a)) :
  (S2xS2Quotient.Topology.piTwoMap f a) (Additive.ofMul ⟦p⟧) =
    Additive.ofMul ⟦S2xS2Quotient.Topology.genLoopPostcompose f p⟧
S2xS2Quotient.Topology.piTwoMap_id.{u} {X : Type u} [TopologicalSpace X] (a : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoMap (ContinuousMap.id X) a) m = m
S2xS2Quotient.Topology.piTwoMap_comp.{u} {X Y Z : Type u} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
  (f : C(X, Y)) (g : C(Y, Z)) (a : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoMap (g.comp f) a) m =
    (S2xS2Quotient.Topology.piTwoMap g (f a)) ((S2xS2Quotient.Topology.piTwoMap f a) m)
S2xS2Quotient.Topology.pointedInduced_refl.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  (a : X) (m : FundamentalGroup X a) :
  (S2xS2Quotient.Topology.pointedInduced f a (f a) (Path.refl (f a))) m = (S2xS2Quotient.Topology.induced f a) m
S2xS2Quotient.Topology.pointedInduced_congr.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] {f g : C(X, Y)}
  (h : f = g) (a : X) (b : Y) (kf : Path (f a) b) (kg : Path (g a) b)
  (hc : ∀ (u v : FundamentalGroup Y b), u * v = v * u) :
  S2xS2Quotient.Topology.pointedInduced f a b kf = S2xS2Quotient.Topology.pointedInduced g a b kg
S2xS2Quotient.Topology.loopBaseTransport_natural.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  (f : C(X, Y)) {a b : X} (q : Path a b) :
  (S2xS2Quotient.Topology.pathPostcompose f b b).comp (S2xS2Quotient.Topology.loopBaseTransport q).toFun =
    (S2xS2Quotient.Topology.loopBaseTransport (q.map ⋯)).toFun.comp (S2xS2Quotient.Topology.pathPostcompose f a a)
S2xS2Quotient.Topology.intervalLoopBaseTransportPi_natural.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  (f : C(X, Y)) {a b : X} (q : Path a b) (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.pathPostcompose f b b) (Path.refl b))
      ((S2xS2Quotient.Topology.intervalLoopBaseTransportPi q) u) =
    (S2xS2Quotient.Topology.intervalLoopBaseTransportPi (q.map ⋯))
      ((S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.pathPostcompose f a a) (Path.refl a)) u)
S2xS2Quotient.Topology.piTwoIntervalLoop_transport.{u} {X : Type u} [TopologicalSpace X] {a b : X} (q : Path a b)
  (m : HomotopyGroup.Pi 2 X a) :
  S2xS2Quotient.Topology.piTwoIntervalLoop ((S2xS2Quotient.Topology.piTwoPathMulEquiv q) m) =
    (S2xS2Quotient.Topology.intervalLoopBaseTransportPi q) (S2xS2Quotient.Topology.piTwoIntervalLoop m)
S2xS2Quotient.Topology.piTwoMap_pathEquiv.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  {a b : X} (q : Path a b) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoMap f b) ((S2xS2Quotient.Topology.piTwoPathEquiv q) m) =
    (S2xS2Quotient.Topology.piTwoPathEquiv (q.map ⋯)) ((S2xS2Quotient.Topology.piTwoMap f a) m)
S2xS2Quotient.Topology.piTwoPointedMap.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  (a : X) (b : Y) (k : Path (f a) b) : S2xS2Quotient.Topology.PiTwo a →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.piTwoPointedMap_independent.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) (k l : Path (f a) b) :
  S2xS2Quotient.Topology.piTwoPointedMap f a b k = S2xS2Quotient.Topology.piTwoPointedMap f a b l
S2xS2Quotient.Topology.piTwoPointedMap_comp.{u} {X Y Z : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [TopologicalSpace Z] (f : C(X, Y)) (g : C(Y, Z)) (a : X) (b : Y) (c : Z) (kf : Path (f a) b) (kg : Path (g b) c)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoPointedMap (g.comp f) a c ((kf.map ⋯).trans kg)) m =
    (S2xS2Quotient.Topology.piTwoPointedMap g b c kg) ((S2xS2Quotient.Topology.piTwoPointedMap f a b kf) m)
S2xS2Quotient.Topology.piTwoPointedMap_refl.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y))
  (a : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoPointedMap f a (f a) (Path.refl (f a))) m = (S2xS2Quotient.Topology.piTwoMap f a) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) :
  S2xS2Quotient.Topology.PiTwo a →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_path.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) (k : Path (f a) b) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m =
    (S2xS2Quotient.Topology.piTwoPathEquiv k) ((S2xS2Quotient.Topology.piTwoMap f a) m)
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_comp.{u} {X Y Z : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [TopologicalSpace Z] [SimplyConnectedSpace Y] [SimplyConnectedSpace Z] (f : C(X, Y)) (g : C(Y, Z)) (a : X) (b : Y)
  (c : Z) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (g.comp f) a c) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap g b c) ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m)
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_id.{u} {X : Type u} [TopologicalSpace X] [SimplyConnectedSpace X] (a : X)
  (m : S2xS2Quotient.Topology.PiTwo a) : (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (ContinuousMap.id X) a a) m = m
S2xS2Quotient.Topology.simplyConnectedPiTwoHomeomorph.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (h : X ≃ₜ Y) (a : X) (b : Y) :
  S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.simplyConnectedPiTwoHomeomorph_apply.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (h : X ≃ₜ Y) (a : X) (b : Y) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoHomeomorph h a b) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap h.toHomotopyEquiv.toFun a b) m
S2xS2Quotient.Topology.piTwoMonodromyOfClass.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X)
  (g : FundamentalGroup X a) : S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a
S2xS2Quotient.Topology.piTwoMonodromyOfClass_loopClass.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X)
  (q : Path a a) :
  S2xS2Quotient.Topology.piTwoMonodromyOfClass a (S2xS2Quotient.Topology.loopClass q) =
    S2xS2Quotient.Topology.piTwoPathEquiv q
S2xS2Quotient.Topology.piTwoMonodromy.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X) :
  FundamentalGroup X a →* S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a
S2xS2Quotient.Topology.piTwoMonodromy_loopClass.{u_1} {X : Type u_1} [TopologicalSpace X] (a : X) (q : Path a a) :
  (S2xS2Quotient.Topology.piTwoMonodromy a) (S2xS2Quotient.Topology.loopClass q) =
    S2xS2Quotient.Topology.piTwoPathEquiv q
S2xS2Quotient.Topology.loopClass_symm.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X} (q : Path a a) :
  S2xS2Quotient.Topology.loopClass q.symm = (S2xS2Quotient.Topology.loopClass q)⁻¹
S2xS2Quotient.Topology.piTwoMonodromy_winding.{u_1} {X : Type u_1} [TopologicalSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (n : ℤ) :
  S2xS2Quotient.Topology.piTwoPathEquiv ((S2xS2Quotient.Topology.windingCirclePath n).map ⋯) =
    S2xS2Quotient.Topology.piTwoPathEquiv (S2xS2Quotient.Topology.betaLoop β) ^ n
S2xS2Quotient.Topology.piTwoMonodromy_trivial.{u_1} {X : Type u_1} [TopologicalSpace X] [SimplyConnectedSpace X] (a : X)
  (g : FundamentalGroup X a) : (S2xS2Quotient.Topology.piTwoMonodromy a) g = 1
S2xS2Quotient.Topology.piTwoMonodromy_natural.{u} {Y Z : Type u} [TopologicalSpace Y] [TopologicalSpace Z] (f : C(Y, Z))
  (a : Y) (g : FundamentalGroup Y a) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoMap f a) (((S2xS2Quotient.Topology.piTwoMonodromy a) g) m) =
    ((S2xS2Quotient.Topology.piTwoMonodromy (f a)) ((S2xS2Quotient.Topology.induced f a) g))
      ((S2xS2Quotient.Topology.piTwoMap f a) m)
S2xS2Quotient.Topology.roundCircleDeckPiTwo (n : ℤ) :
  S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase ≃ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleDeckPiTwo_path (n : ℤ)
  (k :
    Path ((S2xS2Quotient.Topology.roundCircleCoverDeck n) S2xS2Quotient.Topology.roundCircleCoverBase)
      S2xS2Quotient.Topology.roundCircleCoverBase)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo n) m =
    (S2xS2Quotient.Topology.piTwoPathEquiv k)
      ((S2xS2Quotient.Topology.piTwoMap
          (S2xS2Quotient.Topology.integerCoverTranslate S2xS2Quotient.Topology.roundCircleWinding n)
          S2xS2Quotient.Topology.roundCircleCoverBase)
        m)
S2xS2Quotient.Topology.roundCircleDeckPiTwo_meridian (n : ℤ)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo n) m =
    (S2xS2Quotient.Topology.piTwoPathEquiv (S2xS2Quotient.Topology.roundCircleCoverMeridian n).symm)
      ((S2xS2Quotient.Topology.piTwoMap
          (S2xS2Quotient.Topology.integerCoverTranslate S2xS2Quotient.Topology.roundCircleWinding n)
          S2xS2Quotient.Topology.roundCircleCoverBase)
        m)
S2xS2Quotient.Topology.roundCircleDeckPiTwo_zero
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo 0) m = m
S2xS2Quotient.Topology.roundCircleDeckPiTwo_add (n r : ℤ)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo (n + r)) m =
    (S2xS2Quotient.Topology.roundCircleDeckPiTwo n) ((S2xS2Quotient.Topology.roundCircleDeckPiTwo r) m)
S2xS2Quotient.Topology.roundCircleDeckPiTwoRepresentation :
  Multiplicative ℤ →*
    S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase ≃ₗ[ℤ]
      S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleDeckPiTwo_neg (n : ℤ) :
  S2xS2Quotient.Topology.roundCircleDeckPiTwo (-n) = (S2xS2Quotient.Topology.roundCircleDeckPiTwo n).symm
S2xS2Quotient.Topology.coveringPiTwoEquiv_apply.{u} {E X : Type u} [TopologicalSpace E] [TopologicalSpace X]
  (f : C(E, X)) (cov : IsCoveringMap ⇑f) (e : E) (m : S2xS2Quotient.Topology.PiTwo e) :
  (S2xS2Quotient.Topology.coveringPiTwoEquiv f cov e) m = (S2xS2Quotient.Topology.piTwoMap f e) m
S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv_apply
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m =
    (S2xS2Quotient.Topology.piTwoMap S2xS2Quotient.Topology.roundCircleCoverProjection
        S2xS2Quotient.Topology.roundCircleCoverBase)
      m
S2xS2Quotient.Topology.roundCircleDeckPiTwo_projection (n : ℤ)
  (k :
    Path ((S2xS2Quotient.Topology.roundCircleCoverDeck n) S2xS2Quotient.Topology.roundCircleCoverBase)
      S2xS2Quotient.Topology.roundCircleCoverBase)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv ((S2xS2Quotient.Topology.roundCircleDeckPiTwo n) m) =
    (S2xS2Quotient.Topology.piTwoPathEquiv (k.map ⋯)) (S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m)
S2xS2Quotient.Topology.roundCircleCoverMeridian_projection (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleCoverMeridian n).map ⋯ = (S2xS2Quotient.Topology.windingCirclePath n).map ⋯
S2xS2Quotient.Topology.roundCircleCoverMeridian_one_projection :
  (S2xS2Quotient.Topology.roundCircleCoverMeridian 1).map ⋯ =
    S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator
S2xS2Quotient.Topology.roundCircleDeckPiTwo_one_projection
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv ((S2xS2Quotient.Topology.roundCircleDeckPiTwo 1) m) =
    (S2xS2Quotient.Topology.piTwoPathEquiv
        (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator).symm)
      (S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m)
S2xS2Quotient.Topology.roundCircleDeckPiTwo_winding_projection (n : ℤ)
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv ((S2xS2Quotient.Topology.roundCircleDeckPiTwo n) m) =
    (S2xS2Quotient.Topology.piTwoPathEquiv
          (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator) ^
        (-n))
      (S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m)
S2xS2Quotient.Topology.roundCircleDeckPiTwo_neg_one_projection
  (m : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv ((S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) m) =
    (S2xS2Quotient.Topology.piTwoPathEquiv
        (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator))
      (S2xS2Quotient.Topology.roundCircleCoverPiTwoEquiv m)
S2xS2Quotient.Topology.liftedWindingMonodromy_eq_deck_iff (C : ℤ) :
  S2xS2Quotient.Topology.liftedWindingMonodromy C = S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1) ↔
    S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C =
      S2xS2Quotient.Topology.piTwoPathEquiv
        (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator)
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.ofGeometricDeckCoordinates
  (μ : S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase)
  (hμ : ∀ (m : S2xS2Quotient.M), μ (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (μ m))
  (hcmp :
    ∀ (C : ℤ),
      S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C =
        S2xS2Quotient.Topology.piTwoPathEquiv
          (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator)) :
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.geometricDeck_target_characterization {Y : Type} [TopologicalSpace Y]
  (μ : S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase)
  (hμ : ∀ (m : S2xS2Quotient.M), μ (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (μ m))
  (hcmp :
    ∀ (C : ℤ),
      S2xS2Quotient.Topology.windingMonodromy S2xS2Quotient.Topology.roundCircleGenerator C =
        S2xS2Quotient.Topology.piTwoPathEquiv
          (S2xS2Quotient.Topology.betaLoop S2xS2Quotient.Topology.roundCircleGenerator))
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.pathSpacePathHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} {p q : Path a b}
  (k : Path p q) : p.Homotopy q
S2xS2Quotient.Topology.constantPathHomotopy.{u_1, u_2} {X : Type u_1} {Z : Type u_2} [TopologicalSpace X]
  [TopologicalSpace Z] {a b : X} {p q : Path a b} (H : p.Homotopy q) :
  (ContinuousMap.const Z p).Homotopy (ContinuousMap.const Z q)
S2xS2Quotient.Topology.commutationFromConjugationClosing.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (q γ : Path a a) (k : Path ((S2xS2Quotient.Topology.conjugationEquiv q).toFun γ) γ) : (γ.trans q).Homotopy (q.trans γ)
S2xS2Quotient.Topology.conjugationRightTranslationHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (q γ : Path a a) (k : Path ((S2xS2Quotient.Topology.conjugationEquiv q).toFun γ) γ) :
  ((S2xS2Quotient.Topology.conjugationEquiv q).toFun.comp (S2xS2Quotient.Topology.rightConcat γ)).Homotopy
    ((S2xS2Quotient.Topology.rightConcat γ).comp (S2xS2Quotient.Topology.conjugationEquiv q).toFun)
S2xS2Quotient.Topology.fiberConjugationRightTranslationHomotopy.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (q : Path a a) (γ : S2xS2Quotient.Topology.BasedLoop a)
  (k : Path ((S2xS2Quotient.Topology.fiberConjugationEquiv q).toFun γ) γ) :
  ((S2xS2Quotient.Topology.fiberConjugationEquiv q).toFun.comp (S2xS2Quotient.Topology.fiberRightMap γ)).Homotopy
    ((S2xS2Quotient.Topology.fiberRightMap γ).comp (S2xS2Quotient.Topology.loopBaseTransport q).toFun)
S2xS2Quotient.Topology.closedFiberConjugation_rightTranslation.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (q : Path a a) (γ : S2xS2Quotient.Topology.BasedLoop a)
  (k : Path ((S2xS2Quotient.Topology.fiberConjugationEquiv q).toFun γ) γ)
  (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.closedFiberConjugation q γ k) ((S2xS2Quotient.Topology.fiberRightTranslation γ) u) =
    (S2xS2Quotient.Topology.fiberRightTranslation γ) ((S2xS2Quotient.Topology.intervalLoopBaseTransportPi q) u)
S2xS2Quotient.Topology.pathChange_constantCast.{u_1} {X : Type u_1} [TopologicalSpace X] {a b : X} (h : a = b)
  (u : FundamentalGroup X a) :
  (FundamentalGroup.fundamentalGroupMulEquivOfPath ((Path.refl b).cast h ⋯)) u =
    (S2xS2Quotient.Topology.basepointEquiv h) u
S2xS2Quotient.Topology.closeFiberHom_eq_homeomorphPi.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (γ : S2xS2Quotient.Topology.BasedLoop a)
  (u : FundamentalGroup (Path a a) (S2xS2Quotient.Topology.basedLoopToPath γ)) :
  (S2xS2Quotient.Topology.closeFiberHom γ) u =
    (S2xS2Quotient.Topology.homeomorphPi (S2xS2Quotient.Topology.basedLoopHomeomorph a) γ).symm u
S2xS2Quotient.Topology.fiberIdentification_rightTranslation.{u_1} {X : Type u_1} [TopologicalSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (C : ℤ) (m : Multiplicative (S2xS2Quotient.Topology.PiTwo (β 0))) :
  (S2xS2Quotient.Topology.fiberIdentification β C) m =
    (S2xS2Quotient.Topology.fiberRightTranslation (S2xS2Quotient.Topology.windingInFiber β C))
      (S2xS2Quotient.Topology.piTwoIntervalLoop m)
S2xS2Quotient.Topology.fiberMotion_rightTranslation.{u_1} {X : Type u_1} [TopologicalSpace X] {a : X}
  (γ : S2xS2Quotient.Topology.BasedLoop a) (p : Path ↑γ ↑γ) (u : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.fiberMotionEquiv a γ p) ((S2xS2Quotient.Topology.fiberRightTranslation γ) u) =
    (S2xS2Quotient.Topology.fiberRightTranslation γ)
      ((S2xS2Quotient.Topology.intervalLoopBaseTransportPi ((p.map ⋯).cast ⋯ ⋯)) u)
S2xS2Quotient.Topology.windingMonodromy_eq_pathEquiv.{u_1} {X : Type u_1} [TopologicalSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (C : ℤ) :
  S2xS2Quotient.Topology.windingMonodromy β C =
    S2xS2Quotient.Topology.piTwoPathEquiv (S2xS2Quotient.Topology.betaLoop β)
S2xS2Quotient.Topology.windingMonodromy_independent.{u_1} {X : Type u_1} [TopologicalSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (C D : ℤ) :
  S2xS2Quotient.Topology.windingMonodromy β C = S2xS2Quotient.Topology.windingMonodromy β D
S2xS2Quotient.Topology.liftedWindingMonodromy_eq_deck (C : ℤ) :
  S2xS2Quotient.Topology.liftedWindingMonodromy C = S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.toPiTwo (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions) :
  S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions.toDeck (a : S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions) :
  S2xS2Quotient.Topology.RoundCircleDeckAssumptions
S2xS2Quotient.Topology.deck_assumptions_iff_piTwo :
  Nonempty S2xS2Quotient.Topology.RoundCircleDeckAssumptions ↔
    Nonempty S2xS2Quotient.Topology.RoundCirclePiTwoAssumptions
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.groupEquiv (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.groupEquiv_Wa (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (C : ℤ) :
  (a.groupEquiv C) (S2xS2Quotient.Wa C) = S2xS2Quotient.Topology.WaLift S2xS2Quotient.Topology.roundCircleGenerator C
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.WbLoop (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (C : ℤ) :
  FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
    (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.zetaLoop (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (C i : ℤ) :
  FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
    (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.groupEquiv_Wb (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (C : ℤ) : (a.groupEquiv C) (S2xS2Quotient.Wb C) = a.WbLoop C
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.groupEquiv_zeta
  (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions) (C i : ℤ) :
  (a.groupEquiv C) (S2xS2Quotient.zeta C i) = a.zetaLoop C i
S2xS2Quotient.Topology.RoundCircleDeckAssumptions.groupEquiv_at (a : S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  S2xS2Quotient.G (S2xS2Quotient.Topology.roundCircleComponentCoverage.sector γ) ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ
S2xS2Quotient.Topology.deck_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.RoundCircleDeckAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.standardFreeLoopGroupEquiv.{u_1} {X : Type u_1} [TopologicalSpace X]
  (β : S2xS2Quotient.Topology.FreeLoop X) (C : ℤ) (χ : FundamentalGroup X (β 0) ≃* Multiplicative ℤ)
  (hχ : χ (S2xS2Quotient.Topology.loopClass (S2xS2Quotient.Topology.betaLoop β)) = Multiplicative.ofAdd 1) :
  S2xS2Quotient.General.Model (S2xS2Quotient.Topology.piTwoPathEquiv (S2xS2Quotient.Topology.betaLoop β)) C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop X) (S2xS2Quotient.Topology.winding β C)
structure S2xS2Quotient.Topology.RoundCircleDeckAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCircleDeckAssumptions.piTwoCoordinates : S2xS2Quotient.M ≃ₗ[ℤ]
      S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
  S2xS2Quotient.Topology.RoundCircleDeckAssumptions.equivariant : ∀ (m : S2xS2Quotient.M),
      self.piTwoCoordinates (S2xS2Quotient.tau m) =
        (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (self.piTwoCoordinates m)
constructor:
  S2xS2Quotient.Topology.RoundCircleDeckAssumptions.mk
    (piTwoCoordinates : S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase)
    (equivariant :
      ∀ (m : S2xS2Quotient.M),
        piTwoCoordinates (S2xS2Quotient.tau m) =
          (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (piTwoCoordinates m)) :
    S2xS2Quotient.Topology.RoundCircleDeckAssumptions
S2xS2Quotient.Blocks.A (n : ℤ) : S2xS2Quotient.Blocks.Raw
S2xS2Quotient.Blocks.B (n : ℤ) : S2xS2Quotient.Blocks.Raw
S2xS2Quotient.Blocks.relation (n : ℤ) : S2xS2Quotient.Blocks.Raw
S2xS2Quotient.Blocks.relations : Submodule ℤ S2xS2Quotient.Blocks.Raw
S2xS2Quotient.Blocks.quotient : S2xS2Quotient.Blocks.Raw →ₗ[ℤ] S2xS2Quotient.Blocks.Presentation
S2xS2Quotient.Blocks.tau_zpow_z (n i : ℤ) : (S2xS2Quotient.tau ^ n) (S2xS2Quotient.z i) = S2xS2Quotient.z (i + n)
S2xS2Quotient.Blocks.diagonalCoordinate (n : ℤ) : S2xS2Quotient.M
S2xS2Quotient.Blocks.secondCoordinate (n : ℤ) : S2xS2Quotient.M
S2xS2Quotient.Blocks.diagonalCoordinate_succ (n : ℤ) :
  S2xS2Quotient.Blocks.diagonalCoordinate (n + 1) =
    S2xS2Quotient.Blocks.diagonalCoordinate n - 2 • S2xS2Quotient.Blocks.secondCoordinate n
S2xS2Quotient.Blocks.coordinates : S2xS2Quotient.Blocks.Raw →ₗ[ℤ] S2xS2Quotient.M
S2xS2Quotient.Blocks.coordinates_A (n : ℤ) :
  S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.A n) =
    S2xS2Quotient.Blocks.diagonalCoordinate n - S2xS2Quotient.Blocks.secondCoordinate n
S2xS2Quotient.Blocks.coordinates_B (n : ℤ) :
  S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.B n) = S2xS2Quotient.Blocks.secondCoordinate n
S2xS2Quotient.Blocks.coordinates_relation (n : ℤ) :
  S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.relation n) = 0
S2xS2Quotient.Blocks.relations_le_coordinates_ker :
  S2xS2Quotient.Blocks.relations ≤ S2xS2Quotient.Blocks.coordinates.ker
S2xS2Quotient.Blocks.quotientCoordinates : S2xS2Quotient.Blocks.Presentation →ₗ[ℤ] S2xS2Quotient.M
S2xS2Quotient.Blocks.quotientCoordinates_quotient (r : S2xS2Quotient.Blocks.Raw) :
  S2xS2Quotient.Blocks.quotientCoordinates (S2xS2Quotient.Blocks.quotient r) = S2xS2Quotient.Blocks.coordinates r
S2xS2Quotient.Blocks.quotient_relation (n : ℤ) :
  S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.A n) - S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B n) =
    S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.A (n + 1)) +
      S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B (n + 1))
S2xS2Quotient.Blocks.fromCoordinates : S2xS2Quotient.M →ₗ[ℤ] S2xS2Quotient.Blocks.Presentation
S2xS2Quotient.Blocks.fromCoordinates_alpha :
  S2xS2Quotient.Blocks.fromCoordinates S2xS2Quotient.alpha =
    S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.A 0) + S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B 0)
S2xS2Quotient.Blocks.fromCoordinates_z (i : ℤ) :
  S2xS2Quotient.Blocks.fromCoordinates (S2xS2Quotient.z i) =
    S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B (-i - 1))
S2xS2Quotient.Blocks.fromCoordinates_second (n : ℤ) :
  S2xS2Quotient.Blocks.fromCoordinates (S2xS2Quotient.Blocks.secondCoordinate n) =
    S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B n)
S2xS2Quotient.Blocks.fromCoordinates_diagonal (n : ℤ) :
  S2xS2Quotient.Blocks.fromCoordinates (S2xS2Quotient.Blocks.diagonalCoordinate n) =
    S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.A n) + S2xS2Quotient.Blocks.quotient (S2xS2Quotient.Blocks.B n)
S2xS2Quotient.Blocks.quotientCoordinates_fromCoordinates :
  S2xS2Quotient.Blocks.quotientCoordinates ∘ₗ S2xS2Quotient.Blocks.fromCoordinates = LinearMap.id
S2xS2Quotient.Blocks.fromCoordinates_coordinates (r : S2xS2Quotient.Blocks.Raw) :
  S2xS2Quotient.Blocks.fromCoordinates (S2xS2Quotient.Blocks.coordinates r) = S2xS2Quotient.Blocks.quotient r
S2xS2Quotient.Blocks.basisEquiv : S2xS2Quotient.Blocks.Presentation ≃ₗ[ℤ] S2xS2Quotient.M
S2xS2Quotient.Blocks.coordinates_ker : S2xS2Quotient.Blocks.coordinates.ker = S2xS2Quotient.Blocks.relations
S2xS2Quotient.Blocks.evaluate.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V) : S2xS2Quotient.Blocks.Raw →ₗ[ℤ] V
S2xS2Quotient.Blocks.evaluate_A.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V) (n : ℤ) :
  (S2xS2Quotient.Blocks.evaluate a b) (S2xS2Quotient.Blocks.A n) = a n
S2xS2Quotient.Blocks.evaluate_B.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V) (n : ℤ) :
  (S2xS2Quotient.Blocks.evaluate a b) (S2xS2Quotient.Blocks.B n) = b n
S2xS2Quotient.Blocks.relations_le_evaluate_ker.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) :
  S2xS2Quotient.Blocks.relations ≤ (S2xS2Quotient.Blocks.evaluate a b).ker
S2xS2Quotient.Blocks.quotientEvaluate.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) : S2xS2Quotient.Blocks.Presentation →ₗ[ℤ] V
S2xS2Quotient.Blocks.quotientEvaluate_quotient.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (r : S2xS2Quotient.Blocks.Raw) :
  (S2xS2Quotient.Blocks.quotientEvaluate a b h) (S2xS2Quotient.Blocks.quotient r) =
    (S2xS2Quotient.Blocks.evaluate a b) r
S2xS2Quotient.Blocks.basisMap.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) : S2xS2Quotient.M →ₗ[ℤ] V
S2xS2Quotient.Blocks.basisMap_alpha.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) :
  (S2xS2Quotient.Blocks.basisMap a b h) S2xS2Quotient.alpha = a 0 + b 0
S2xS2Quotient.Blocks.basisMap_z.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (i : ℤ) :
  (S2xS2Quotient.Blocks.basisMap a b h) (S2xS2Quotient.z i) = b (-i - 1)
S2xS2Quotient.Blocks.quotientEvaluate_bijective.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (hsurj : Function.Surjective ⇑(S2xS2Quotient.Blocks.evaluate a b))
  (hker : (S2xS2Quotient.Blocks.evaluate a b).ker = S2xS2Quotient.Blocks.relations) :
  Function.Bijective ⇑(S2xS2Quotient.Blocks.quotientEvaluate a b h)
S2xS2Quotient.Blocks.basisMap_bijective.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (hsurj : Function.Surjective ⇑(S2xS2Quotient.Blocks.evaluate a b))
  (hker : (S2xS2Quotient.Blocks.evaluate a b).ker = S2xS2Quotient.Blocks.relations) :
  Function.Bijective ⇑(S2xS2Quotient.Blocks.basisMap a b h)
S2xS2Quotient.Blocks.basisEquivOfExact.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (hsurj : Function.Surjective ⇑(S2xS2Quotient.Blocks.evaluate a b))
  (hker : (S2xS2Quotient.Blocks.evaluate a b).ker = S2xS2Quotient.Blocks.relations) : S2xS2Quotient.M ≃ₗ[ℤ] V
S2xS2Quotient.Blocks.basisMap_equivariant.{u_1} {V : Type u_1} [AddCommGroup V] (a b : ℤ → V)
  (h : ∀ (n : ℤ), a n - b n = a (n + 1) + b (n + 1)) (T : V ≃ₗ[ℤ] V) (ha : ∀ (n : ℤ), T (a n) = a (n - 1))
  (hb : ∀ (n : ℤ), T (b n) = b (n - 1)) (m : S2xS2Quotient.M) :
  (S2xS2Quotient.Blocks.basisMap a b h) (S2xS2Quotient.tau m) = T ((S2xS2Quotient.Blocks.basisMap a b h) m)
S2xS2Quotient.Topology.genLoopPair.{u, u_1} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] {N : Type u_1}
  {a : X} {b : Y} (p : ↑(GenLoop N X a)) (q : ↑(GenLoop N Y b)) : ↑(GenLoop N (X × Y) (a, b))
S2xS2Quotient.Topology.genLoopPair_homotopic.{u, u_1} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {N : Type u_1} {a : X} {b : Y} {p p' : ↑(GenLoop N X a)} {q q' : ↑(GenLoop N Y b)} (hp : GenLoop.Homotopic p p')
  (hq : GenLoop.Homotopic q q') :
  GenLoop.Homotopic (S2xS2Quotient.Topology.genLoopPair p q) (S2xS2Quotient.Topology.genLoopPair p' q')
S2xS2Quotient.Topology.piTwoProductMap.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X) (b : Y) :
  S2xS2Quotient.Topology.PiTwo (a, b) →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.piTwoProductMap_injective.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X)
  (b : Y) : Function.Injective ⇑(S2xS2Quotient.Topology.piTwoProductMap a b)
S2xS2Quotient.Topology.piTwoProductMap_surjective.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X)
  (b : Y) : Function.Surjective ⇑(S2xS2Quotient.Topology.piTwoProductMap a b)
S2xS2Quotient.Topology.piTwoProductEquiv.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X) (b : Y) :
  S2xS2Quotient.Topology.PiTwo (a, b) ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.piTwoProductEquiv_fst.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X)
  (b : Y) (m : S2xS2Quotient.Topology.PiTwo (a, b)) :
  ((S2xS2Quotient.Topology.piTwoProductEquiv a b) m).1 = (S2xS2Quotient.Topology.piTwoMap ContinuousMap.fst (a, b)) m
S2xS2Quotient.Topology.piTwoProductEquiv_snd.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X)
  (b : Y) (m : S2xS2Quotient.Topology.PiTwo (a, b)) :
  ((S2xS2Quotient.Topology.piTwoProductEquiv a b) m).2 = (S2xS2Quotient.Topology.piTwoMap ContinuousMap.snd (a, b)) m
S2xS2Quotient.Topology.piTwoMap_const.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] (a : X) (b : Y)
  (m : S2xS2Quotient.Topology.PiTwo a) : (S2xS2Quotient.Topology.piTwoMap (ContinuousMap.const X b) a) m = 0
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_strict.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a (f a)) m = (S2xS2Quotient.Topology.piTwoMap f a) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_const.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (a : X) (b c : Y) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (ContinuousMap.const X b) a c) m = 0
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_pair.{u} {X Y Z : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [TopologicalSpace Z] [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (f : C(Z, X)) (g : C(Z, Y)) (c : Z) (a : X)
  (b : Y) (m : S2xS2Quotient.Topology.PiTwo c) :
  (S2xS2Quotient.Topology.piTwoProductEquiv a b)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (f.prodMk g) c (a, b)) m) =
    ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f c a) m, (S2xS2Quotient.Topology.simplyConnectedPiTwoMap g c b) m)
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_factors.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (a : X) (b : Y) (m : S2xS2Quotient.Topology.PiTwo a)
  (n : S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.piTwoProductEquiv a b).symm (m, n) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap ((ContinuousMap.id X).prodMk (ContinuousMap.const X b)) a (a, b))
        m +
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap ((ContinuousMap.const Y a).prodMk (ContinuousMap.id Y)) b (a, b))
        n
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_prodMk_comp.{u} {X Y Z : Type u} [TopologicalSpace X]
  [TopologicalSpace Y] [TopologicalSpace Z] {W : Type u} [TopologicalSpace W] [SimplyConnectedSpace X]
  [SimplyConnectedSpace Y] [SimplyConnectedSpace W] (f : C(Z, X)) (g : C(Z, Y)) (h : C(X × Y, W)) (c : Z) (a : X)
  (b : Y) (d : W) (m : S2xS2Quotient.Topology.PiTwo c) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (h.comp (f.prodMk g)) c d) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap h (a, b) d)
      ((S2xS2Quotient.Topology.piTwoProductEquiv a b).symm
        ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f c a) m,
          (S2xS2Quotient.Topology.simplyConnectedPiTwoMap g c b) m))
S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap.{u} {X Y Z : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [TopologicalSpace Z] [SimplyConnectedSpace Z] (f : C(X × Y, Z)) (a : X) (b : Y) (c : Z) :
  S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo c
S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap_comp.{u} {X Y Z : Type u} [TopologicalSpace X]
  [TopologicalSpace Y] [TopologicalSpace Z] {W : Type u} [TopologicalSpace W] [SimplyConnectedSpace Z]
  [SimplyConnectedSpace W] (f : C(X × Y, Z)) (g : C(Z, W)) (h : C(X × Y, W)) (he : g.comp f = h) (a : X) (b : Y) (c : Z)
  (d : W) (v : S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap g c d)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap f a b c) v) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap h a b d) v
S2xS2Quotient.Topology.linearMap_pair.{u_1, u_2, u_3} {V : Type u_1} {W : Type u_2} {P : Type u_3} [AddCommGroup V]
  [AddCommGroup W] [AddCommGroup P] (f : V × W →ₗ[ℤ] P) (a : V) (b : W) : f (a, b) = f (a, 0) + f (0, b)
S2xS2Quotient.Topology.linearMap_pair_components.{u_1, u_2, u_3} {V : Type u_1} {W : Type u_2} {P : Type u_3}
  [AddCommGroup V] [AddCommGroup W] [AddCommGroup P] (f : V × W →ₗ[ℤ] P) (a : V) (b : W) :
  f (a, b) = (f ∘ₗ LinearMap.inl ℤ V W) a + (f ∘ₗ LinearMap.inr ℤ V W) b
S2xS2Quotient.Topology.linearMap_first_transport.{u_1, u_2, u_3} {V : Type u_1} {W : Type u_2} {P : Type u_3}
  [AddCommGroup V] [AddCommGroup W] [AddCommGroup P] (f g : V × W →ₗ[ℤ] P) (T : P ≃ₗ[ℤ] P)
  (h : ∀ (v : V × W), T (f v) = g v) (a : V) : T ((f ∘ₗ LinearMap.inl ℤ V W) a) = (g ∘ₗ LinearMap.inl ℤ V W) a
S2xS2Quotient.Topology.linearMap_second_transport.{u_1, u_2, u_3} {V : Type u_1} {W : Type u_2} {P : Type u_3}
  [AddCommGroup V] [AddCommGroup W] [AddCommGroup P] (f g : V × W →ₗ[ℤ] P) (T : P ≃ₗ[ℤ] P)
  (h : ∀ (v : V × W), T (f v) = g v) (b : W) : T ((f ∘ₗ LinearMap.inr ℤ V W) b) = (g ∘ₗ LinearMap.inr ℤ V W) b
S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap_diagonal.{u} {X Z : Type u} [TopologicalSpace X]
  [TopologicalSpace Z] [SimplyConnectedSpace X] [SimplyConnectedSpace Z] (f : C(X × X, Z)) (a : X) (c : Z)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (f.comp ((ContinuousMap.id X).prodMk (ContinuousMap.id X))) a c) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap f a a c) (m, m)
S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap_graph.{u} {X Z : Type u} [TopologicalSpace X] [TopologicalSpace Z]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Z] (f : C(X × X, Z)) (J : C(X, X)) (a : X) (c : Z)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (f.comp ((ContinuousMap.id X).prodMk J)) a c) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap f a a c)
      (m, (S2xS2Quotient.Topology.simplyConnectedPiTwoMap J a a) m)
S2xS2Quotient.Topology.sphereAntipodeMap : C(S2xS2Quotient.Topology.SphereTwo, S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.sphereAntipodePiTwo : S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ] S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.sphereDiagonalMap :
  C(S2xS2Quotient.Topology.SphereTwo, S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.sphereAntidiagonalMap :
  C(S2xS2Quotient.Topology.SphereTwo, S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.roundCircleBlockPiTwo (n : ℤ) :
  S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlockFirst (n : ℤ) :
  S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlockSecond (n : ℤ) :
  S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlockPiTwo_pair (n : ℤ) (a b : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockPiTwo n) (a, b) =
    (S2xS2Quotient.Topology.roundCircleBlockFirst n) a + (S2xS2Quotient.Topology.roundCircleBlockSecond n) b
S2xS2Quotient.Topology.roundCircleBlockPiTwo_diagonal (n : ℤ) (a : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap
        ((S2xS2Quotient.Topology.roundCircleCoverBlock n).comp S2xS2Quotient.Topology.sphereDiagonalMap)
        S2xS2Quotient.Topology.sphereNorth S2xS2Quotient.Topology.roundCircleCoverBase)
      a =
    (S2xS2Quotient.Topology.roundCircleBlockPiTwo n) (a, a)
S2xS2Quotient.Topology.roundCircleBlockPiTwo_antidiagonal (n : ℤ) (a : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap
        ((S2xS2Quotient.Topology.roundCircleCoverBlock n).comp S2xS2Quotient.Topology.sphereAntidiagonalMap)
        S2xS2Quotient.Topology.sphereNorth S2xS2Quotient.Topology.roundCircleCoverBase)
      a =
    (S2xS2Quotient.Topology.roundCircleBlockPiTwo n) (a, S2xS2Quotient.Topology.sphereAntipodePiTwo a)
S2xS2Quotient.Topology.roundCircleBlockPiTwo_sections (n : ℤ) (a : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockFirst n) a +
      (S2xS2Quotient.Topology.roundCircleBlockSecond n) (S2xS2Quotient.Topology.sphereAntipodePiTwo a) =
    (S2xS2Quotient.Topology.roundCircleBlockFirst (n + 1)) a + (S2xS2Quotient.Topology.roundCircleBlockSecond (n + 1)) a
S2xS2Quotient.Topology.roundCircleBlockPiTwo_deck (k n : ℤ)
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo k) ((S2xS2Quotient.Topology.roundCircleBlockPiTwo n) v) =
    (S2xS2Quotient.Topology.roundCircleBlockPiTwo (n + k)) v
S2xS2Quotient.Topology.roundCircleBlockFirst_deck (k n : ℤ) (a : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo k) ((S2xS2Quotient.Topology.roundCircleBlockFirst n) a) =
    (S2xS2Quotient.Topology.roundCircleBlockFirst (n + k)) a
S2xS2Quotient.Topology.roundCircleBlockSecond_deck (k n : ℤ) (a : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo k) ((S2xS2Quotient.Topology.roundCircleBlockSecond n) a) =
    (S2xS2Quotient.Topology.roundCircleBlockSecond (n + k)) a
S2xS2Quotient.Topology.roundCircleBlockEvaluation (s : S2xS2Quotient.Topology.SpherePiTwo) :
  S2xS2Quotient.Blocks.Raw →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlock_section_relation (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleBlockFirst n) s - (S2xS2Quotient.Topology.roundCircleBlockSecond n) s =
    (S2xS2Quotient.Topology.roundCircleBlockFirst (n + 1)) s + (S2xS2Quotient.Topology.roundCircleBlockSecond (n + 1)) s
S2xS2Quotient.Topology.roundCircleBlock_relations_in_kernel (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) :
  S2xS2Quotient.Blocks.relations ≤ (S2xS2Quotient.Topology.roundCircleBlockEvaluation s).ker
S2xS2Quotient.Topology.roundCircleBlockCoordinates (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) :
  S2xS2Quotient.M →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlockCoordinates_alpha (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) :
  (S2xS2Quotient.Topology.roundCircleBlockCoordinates s hs) S2xS2Quotient.alpha =
    (S2xS2Quotient.Topology.roundCircleBlockFirst 0) s + (S2xS2Quotient.Topology.roundCircleBlockSecond 0) s
S2xS2Quotient.Topology.roundCircleBlockCoordinates_z (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) (i : ℤ) :
  (S2xS2Quotient.Topology.roundCircleBlockCoordinates s hs) (S2xS2Quotient.z i) =
    (S2xS2Quotient.Topology.roundCircleBlockSecond (-i - 1)) s
S2xS2Quotient.Topology.roundCircleBlockCoordinates_equivariant (s : S2xS2Quotient.Topology.SpherePiTwo)
  (hs : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s) (m : S2xS2Quotient.M) :
  (S2xS2Quotient.Topology.roundCircleBlockCoordinates s hs) (S2xS2Quotient.tau m) =
    (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) ((S2xS2Quotient.Topology.roundCircleBlockCoordinates s hs) m)
S2xS2Quotient.Topology.RoundCircleBlockAssumptions.toDeck (a : S2xS2Quotient.Topology.RoundCircleBlockAssumptions) :
  S2xS2Quotient.Topology.RoundCircleDeckAssumptions
S2xS2Quotient.Topology.block_model_characterization (a : Nonempty S2xS2Quotient.Topology.RoundCircleBlockAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.block_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : Nonempty S2xS2Quotient.Topology.RoundCircleBlockAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
structure S2xS2Quotient.Topology.RoundCircleBlockAssumptions : Type
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCircleBlockAssumptions.sphereClass : S2xS2Quotient.Topology.SpherePiTwo
  S2xS2Quotient.Topology.RoundCircleBlockAssumptions.antipode : S2xS2Quotient.Topology.sphereAntipodePiTwo
        self.sphereClass =
      -self.sphereClass
  S2xS2Quotient.Topology.RoundCircleBlockAssumptions.spanning : Function.Surjective
      ⇑(S2xS2Quotient.Topology.roundCircleBlockEvaluation self.sphereClass)
  S2xS2Quotient.Topology.RoundCircleBlockAssumptions.complete_relations : (S2xS2Quotient.Topology.roundCircleBlockEvaluation
          self.sphereClass).ker =
      S2xS2Quotient.Blocks.relations
constructor:
  S2xS2Quotient.Topology.RoundCircleBlockAssumptions.mk (sphereClass : S2xS2Quotient.Topology.SpherePiTwo)
    (antipode : S2xS2Quotient.Topology.sphereAntipodePiTwo sphereClass = -sphereClass)
    (spanning : Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleBlockEvaluation sphereClass))
    (complete_relations :
      (S2xS2Quotient.Topology.roundCircleBlockEvaluation sphereClass).ker = S2xS2Quotient.Blocks.relations) :
    S2xS2Quotient.Topology.RoundCircleBlockAssumptions
S2xS2Quotient.Topology.pathFinalSegment.{u} {Y : Type u} [TopologicalSpace Y] {a b : Y} (q : Path a b)
  (s : ↑unitInterval) : Path (q s) b
S2xS2Quotient.Topology.continuous_pathFinalSegment.{u} {Y : Type u} [TopologicalSpace Y] {a b : Y} (q : Path a b) :
  Continuous fun st => (S2xS2Quotient.Topology.pathFinalSegment q st.1) st.2
S2xS2Quotient.Topology.homotopyImageLoop.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] {f g : C(X, Y)}
  (H : f.Homotopy g) (a : X) (s : ↑unitInterval) (p : Path a a) : Path (H (s, a)) (H (s, a))
S2xS2Quotient.Topology.homotopyWhiskeredLoop.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {f g : C(X, Y)} (H : f.Homotopy g) (a : X) (s : ↑unitInterval) (p : Path a a) : Path (g a) (g a)
S2xS2Quotient.Topology.continuous_homotopyWhiskeredLoop.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {f g : C(X, Y)} (H : f.Homotopy g) (a : X) :
  Continuous fun w => (S2xS2Quotient.Topology.homotopyWhiskeredLoop H a w.1.1 w.1.2) w.2
S2xS2Quotient.Topology.homotopyLoopMapPadded.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {f g : C(X, Y)} (H : f.Homotopy g) (a : X) :
  ((S2xS2Quotient.Topology.loopBaseTransport (H.evalAt a)).toFun.comp
        (S2xS2Quotient.Topology.pathPostcompose f a a)).Homotopy
    ((S2xS2Quotient.Topology.loopBaseTransport (Path.refl (g a))).toFun.comp
      (S2xS2Quotient.Topology.pathPostcompose g a a))
S2xS2Quotient.Topology.homotopyLoopMap.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] {f g : C(X, Y)}
  (H : f.Homotopy g) (a : X) :
  ((S2xS2Quotient.Topology.loopBaseTransport (H.evalAt a)).toFun.comp
        (S2xS2Quotient.Topology.pathPostcompose f a a)).Homotopy
    (S2xS2Quotient.Topology.pathPostcompose g a a)
S2xS2Quotient.Topology.intervalLoopMap_homotopy.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {f g : C(X, Y)} (H : f.Homotopy g) (a : X) (m : FundamentalGroup (Path a a) (Path.refl a)) :
  (S2xS2Quotient.Topology.intervalLoopBaseTransportPi (H.evalAt a))
      ((S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.pathPostcompose f a a) (Path.refl a)) m) =
    (S2xS2Quotient.Topology.induced (S2xS2Quotient.Topology.pathPostcompose g a a) (Path.refl a)) m
S2xS2Quotient.Topology.piTwoMap_homotopy.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y] {f g : C(X, Y)}
  (H : f.Homotopy g) (a : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.piTwoPathEquiv (H.evalAt a)) ((S2xS2Quotient.Topology.piTwoMap f a) m) =
    (S2xS2Quotient.Topology.piTwoMap g a) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_homotopy.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {f g : C(X, Y)} [SimplyConnectedSpace Y] (H : f.Homotopy g) (a : X) (b : Y) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m = (S2xS2Quotient.Topology.simplyConnectedPiTwoMap g a b) m
S2xS2Quotient.Topology.genLoopPostcomposeAt.{u, u_1} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  {N : Type u_1} (f : C(X, Y)) {a : X} {b : Y} (h : f a = b) (p : ↑(GenLoop N X a)) : ↑(GenLoop N Y b)
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_class.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) (h : f a = b) (p : ↑(GenLoop (Fin 2) X a)) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) (Additive.ofMul ⟦p⟧) =
    Additive.ofMul ⟦S2xS2Quotient.Topology.genLoopPostcomposeAt f h p⟧
S2xS2Quotient.Topology.sphereSquareHeight (u v : ℝ) : ℝ
S2xS2Quotient.Topology.sphereSquareDenominator (u v : ℝ) : ℝ
S2xS2Quotient.Topology.sphereSquareDenominator_pos (u v : ℝ) : 0 < S2xS2Quotient.Topology.sphereSquareDenominator u v
S2xS2Quotient.Topology.sphereSquareMap : C(ℝ × ℝ, S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.sphereSquareMap_boundary (u v : ℝ) (h : S2xS2Quotient.Topology.sphereSquareHeight u v = 0) :
  S2xS2Quotient.Topology.sphereSquareMap (u, v) = S2xS2Quotient.Topology.sphereNorth
S2xS2Quotient.Topology.sphereCube :
  ↑(GenLoop (Fin 2) S2xS2Quotient.Topology.SphereTwo S2xS2Quotient.Topology.sphereNorth)
S2xS2Quotient.Topology.sphereCubeClass : S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.sphereFirstReflection : C(S2xS2Quotient.Topology.SphereTwo, S2xS2Quotient.Topology.SphereTwo)
S2xS2Quotient.Topology.sphereFirstReflection_north :
  S2xS2Quotient.Topology.sphereFirstReflection S2xS2Quotient.Topology.sphereNorth = S2xS2Quotient.Topology.sphereNorth
S2xS2Quotient.Topology.sphereSquareMap_reflection (u v : ℝ) :
  S2xS2Quotient.Topology.sphereFirstReflection (S2xS2Quotient.Topology.sphereSquareMap (u, v)) =
    S2xS2Quotient.Topology.sphereSquareMap (-u, v)
S2xS2Quotient.Topology.sphereCube_reflection :
  S2xS2Quotient.Topology.genLoopPostcomposeAt S2xS2Quotient.Topology.sphereFirstReflection
      S2xS2Quotient.Topology.sphereFirstReflection_north S2xS2Quotient.Topology.sphereCube =
    GenLoop.symmAt 0 S2xS2Quotient.Topology.sphereCube
S2xS2Quotient.Topology.sphereCubeClass_reflection :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap S2xS2Quotient.Topology.sphereFirstReflection
        S2xS2Quotient.Topology.sphereNorth S2xS2Quotient.Topology.sphereNorth)
      S2xS2Quotient.Topology.sphereCubeClass =
    -S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.sphereReflectionRotationPoint (t : ↑unitInterval) (x : S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.SphereTwo
S2xS2Quotient.Topology.continuous_sphereReflectionRotationPoint :
  Continuous fun tx => S2xS2Quotient.Topology.sphereReflectionRotationPoint tx.1 tx.2
S2xS2Quotient.Topology.sphereReflectionRotationPoint_zero (x : S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.sphereReflectionRotationPoint 0 x = S2xS2Quotient.Topology.sphereFirstReflection x
S2xS2Quotient.Topology.sphereReflectionRotationPoint_one (x : S2xS2Quotient.Topology.SphereTwo) :
  S2xS2Quotient.Topology.sphereReflectionRotationPoint 1 x = S2xS2Quotient.Topology.sphereAntipodeMap x
S2xS2Quotient.Topology.sphereReflectionAntipodeHomotopy :
  S2xS2Quotient.Topology.sphereFirstReflection.Homotopy S2xS2Quotient.Topology.sphereAntipodeMap
S2xS2Quotient.Topology.sphereCubeClass_antipode :
  S2xS2Quotient.Topology.sphereAntipodePiTwo S2xS2Quotient.Topology.sphereCubeClass =
    -S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.roundCircleExplicitCoordinates :
  S2xS2Quotient.M →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleExplicitCoordinates_equivariant (m : S2xS2Quotient.M) :
  S2xS2Quotient.Topology.roundCircleExplicitCoordinates (S2xS2Quotient.tau m) =
    (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (S2xS2Quotient.Topology.roundCircleExplicitCoordinates m)
S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.toBlocks
  (a : S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions) : S2xS2Quotient.Topology.RoundCircleBlockAssumptions
S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.toDeck
  (a : S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions) : S2xS2Quotient.Topology.RoundCircleDeckAssumptions
S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.groupEquiv
  (a : S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions) (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.explicit_block_model_characterization
  (a : S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.explicit_block_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
structure S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions : Prop
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.spanning : Function.Surjective
      ⇑(S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass)
  S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.complete_relations : (S2xS2Quotient.Topology.roundCircleBlockEvaluation
          S2xS2Quotient.Topology.sphereCubeClass).ker =
      S2xS2Quotient.Blocks.relations
constructor:
  S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions.mk
    (spanning :
      Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass))
    (complete_relations :
      (S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass).ker =
        S2xS2Quotient.Blocks.relations) :
    S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions
S2xS2Quotient.Topology.BasedCompactExhaustion.base.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (n : ℕ) : ↑(E.stage n)
S2xS2Quotient.Topology.BasedCompactExhaustion.inclusion.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (n : ℕ) : C(↑(E.stage n), X)
S2xS2Quotient.Topology.BasedCompactExhaustion.transition.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n m : ℕ} (h : n ≤ m) : C(↑(E.stage n), ↑(E.stage m))
S2xS2Quotient.Topology.BasedCompactExhaustion.mapToSpace.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (n : ℕ) :
  S2xS2Quotient.Topology.PiTwo (E.base n) →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a
S2xS2Quotient.Topology.BasedCompactExhaustion.transitionMap.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n m : ℕ} (h : n ≤ m) :
  S2xS2Quotient.Topology.PiTwo (E.base n) →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo (E.base m)
S2xS2Quotient.Topology.BasedCompactExhaustion.transitionMap_refl.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (n : ℕ) (v : S2xS2Quotient.Topology.PiTwo (E.base n)) :
  (E.transitionMap ⋯) v = v
S2xS2Quotient.Topology.BasedCompactExhaustion.transitionMap_trans.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n m k : ℕ} (h : n ≤ m) (j : m ≤ k)
  (v : S2xS2Quotient.Topology.PiTwo (E.base n)) : (E.transitionMap ⋯) v = (E.transitionMap j) ((E.transitionMap h) v)
S2xS2Quotient.Topology.BasedCompactExhaustion.mapToSpace_transition.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n m : ℕ} (h : n ≤ m)
  (v : S2xS2Quotient.Topology.PiTwo (E.base n)) : (E.mapToSpace m) ((E.transitionMap h) v) = (E.mapToSpace n) v
S2xS2Quotient.Topology.BasedCompactExhaustion.representative_factors.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (p : ↑(GenLoop (Fin 2) X a)) :
  ∃ n q, S2xS2Quotient.Topology.genLoopPostcompose (E.inclusion n) q = p
S2xS2Quotient.Topology.BasedCompactExhaustion.mapToSpace_jointly_surjective.{u} {X : Type u} [TopologicalSpace X]
  {a : X} (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) (v : S2xS2Quotient.Topology.PiTwo a) :
  ∃ n w, (E.mapToSpace n) w = v
S2xS2Quotient.Topology.BasedCompactExhaustion.homotopy_detected.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n : ℕ} (p q : ↑(GenLoop (Fin 2) (↑(E.stage n)) (E.base n)))
  (h :
    GenLoop.Homotopic (S2xS2Quotient.Topology.genLoopPostcompose (E.inclusion n) p)
      (S2xS2Quotient.Topology.genLoopPostcompose (E.inclusion n) q)) :
  ∃ m,
    ∃ (hm : n ≤ m),
      GenLoop.Homotopic (S2xS2Quotient.Topology.genLoopPostcompose (E.transition hm) p)
        (S2xS2Quotient.Topology.genLoopPostcompose (E.transition hm) q)
S2xS2Quotient.Topology.BasedCompactExhaustion.mapToSpace_eq_iff.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n : ℕ} (v w : S2xS2Quotient.Topology.PiTwo (E.base n)) :
  (E.mapToSpace n) v = (E.mapToSpace n) w ↔ ∃ m, ∃ (h : n ≤ m), (E.transitionMap h) v = (E.transitionMap h) w
S2xS2Quotient.Topology.BasedCompactExhaustion.mapToSpace_zero_iff.{u} {X : Type u} [TopologicalSpace X] {a : X}
  (E : S2xS2Quotient.Topology.BasedCompactExhaustion a) {n : ℕ} (v : S2xS2Quotient.Topology.PiTwo (E.base n)) :
  (E.mapToSpace n) v = 0 ↔ ∃ m, ∃ (h : n ≤ m), (E.transitionMap h) v = 0
S2xS2Quotient.Topology.roundCircleSymmetricOpenChain_monotone :
  Monotone fun N => S2xS2Quotient.Topology.roundCircleOpenChainSet (-↑N) (2 * N)
S2xS2Quotient.Topology.roundCircleCompactExhaustion :
  S2xS2Quotient.Topology.BasedCompactExhaustion S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCirclePiTwoStageSimplyConnected (N : ℕ) :
  SimplyConnectedSpace ↑(S2xS2Quotient.Topology.RoundCirclePiTwoStage N)
S2xS2Quotient.Topology.roundCirclePiTwo_finite_representation
  (v : S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase) :
  ∃ N w, (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N) w = v
S2xS2Quotient.Topology.roundCirclePiTwo_finite_equality {N : ℕ}
  (v w : S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N)) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N) v =
      (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N) w ↔
    ∃ M,
      ∃ (h : N ≤ M),
        (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h) v =
          (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h) w
S2xS2Quotient.Topology.roundCirclePiTwo_finite_nullhomotopy {N : ℕ}
  (v : S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N)) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N) v = 0 ↔
    ∃ M, ∃ (h : N ≤ M), (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h) v = 0
S2xS2Quotient.Topology.simplyConnectedPiTwoHomotopyEquiv.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (e : ContinuousMap.HomotopyEquiv X Y) (a : X) (b : Y) :
  S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.simplyConnectedPiTwoHomotopyEquiv_apply.{u} {X Y : Type u} [TopologicalSpace X]
  [TopologicalSpace Y] [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (e : ContinuousMap.HomotopyEquiv X Y) (a : X)
  (b : Y) (v : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoHomotopyEquiv e a b) v =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap e.toFun a b) v
S2xS2Quotient.Topology.simplyConnectedPiTwoHomotopyEquiv_symm_apply.{u} {X Y : Type u} [TopologicalSpace X]
  [TopologicalSpace Y] [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (e : ContinuousMap.HomotopyEquiv X Y) (a : X)
  (b : Y) (v : S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoHomotopyEquiv e a b).symm v =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap e.invFun b a) v
S2xS2Quotient.Blocks.indexBound (N : ℕ) (j : ℤ × Bool) : Prop
S2xS2Quotient.Blocks.indexBound_mono {N M : ℕ} (h : N ≤ M) {j : ℤ × Bool} (hj : S2xS2Quotient.Blocks.indexBound N j) :
  S2xS2Quotient.Blocks.indexBound M j
S2xS2Quotient.Blocks.finiteIndexTransition {N M : ℕ} (h : N ≤ M) (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  S2xS2Quotient.Blocks.FiniteIndex M
S2xS2Quotient.Blocks.finiteInclusion (N : ℕ) : S2xS2Quotient.Blocks.FiniteRaw N →ₗ[ℤ] S2xS2Quotient.Blocks.Raw
S2xS2Quotient.Blocks.finiteTransition {N M : ℕ} (h : N ≤ M) :
  S2xS2Quotient.Blocks.FiniteRaw N →ₗ[ℤ] S2xS2Quotient.Blocks.FiniteRaw M
S2xS2Quotient.Blocks.finiteInclusion_single (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N) (c : ℤ) :
  (S2xS2Quotient.Blocks.finiteInclusion N) (Finsupp.single j c) = Finsupp.single (↑j) c
S2xS2Quotient.Blocks.finiteTransition_single {N M : ℕ} (h : N ≤ M) (j : S2xS2Quotient.Blocks.FiniteIndex N) (c : ℤ) :
  (S2xS2Quotient.Blocks.finiteTransition h) (Finsupp.single j c) =
    Finsupp.single (S2xS2Quotient.Blocks.finiteIndexTransition h j) c
S2xS2Quotient.Blocks.finiteInclusion_transition {N M : ℕ} (h : N ≤ M) (r : S2xS2Quotient.Blocks.FiniteRaw N) :
  (S2xS2Quotient.Blocks.finiteInclusion M) ((S2xS2Quotient.Blocks.finiteTransition h) r) =
    (S2xS2Quotient.Blocks.finiteInclusion N) r
S2xS2Quotient.Blocks.finiteInclusion_injective (N : ℕ) : Function.Injective ⇑(S2xS2Quotient.Blocks.finiteInclusion N)
S2xS2Quotient.Blocks.raw_support_bounded (r : S2xS2Quotient.Blocks.Raw) :
  ∃ N, ∀ j ∈ r.support, S2xS2Quotient.Blocks.indexBound N j
S2xS2Quotient.Blocks.finiteInclusion_jointly_surjective (r : S2xS2Quotient.Blocks.Raw) :
  ∃ N v, (S2xS2Quotient.Blocks.finiteInclusion N) v = r
S2xS2Quotient.Topology.roundCircleStageBlock_mem (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N)
  (x : S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo) :
  (S2xS2Quotient.Topology.roundCircleCoverBlock (↑j).1) x ∈ S2xS2Quotient.Topology.RoundCirclePiTwoStage N
S2xS2Quotient.Topology.roundCircleStageBlock (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  C(S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo,
    ↑(S2xS2Quotient.Topology.RoundCirclePiTwoStage N))
S2xS2Quotient.Topology.roundCircleStageBlockPiTwo (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N)
S2xS2Quotient.Topology.roundCircleStageBlockPiTwo_projection (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N)
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N)
      ((S2xS2Quotient.Topology.roundCircleStageBlockPiTwo N j) v) =
    (S2xS2Quotient.Topology.roundCircleBlockPiTwo (↑j).1) v
S2xS2Quotient.Topology.roundCircleStageBlockPiTwo_transition {N M : ℕ} (h : N ≤ M)
  (j : S2xS2Quotient.Blocks.FiniteIndex N)
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h)
      ((S2xS2Quotient.Topology.roundCircleStageBlockPiTwo N j) v) =
    (S2xS2Quotient.Topology.roundCircleStageBlockPiTwo M (S2xS2Quotient.Blocks.finiteIndexTransition h j)) v
S2xS2Quotient.Topology.roundCircleBlockSphereVector (b : Bool) :
  S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.roundCircleStageSphere (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N)
S2xS2Quotient.Topology.roundCircleBlockSphere (j : ℤ × Bool) :
  S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleBlockEvaluation_as_linearCombination :
  S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass =
    Finsupp.linearCombination ℤ S2xS2Quotient.Topology.roundCircleBlockSphere
S2xS2Quotient.Topology.roundCircleStageSphere_projection (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N)
      (S2xS2Quotient.Topology.roundCircleStageSphere N j) =
    S2xS2Quotient.Topology.roundCircleBlockSphere ↑j
S2xS2Quotient.Topology.roundCircleStageSphere_transition {N M : ℕ} (h : N ≤ M)
  (j : S2xS2Quotient.Blocks.FiniteIndex N) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h)
      (S2xS2Quotient.Topology.roundCircleStageSphere N j) =
    S2xS2Quotient.Topology.roundCircleStageSphere M (S2xS2Quotient.Blocks.finiteIndexTransition h j)
S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation (N : ℕ) :
  S2xS2Quotient.Blocks.FiniteRaw N →ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N)
S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation_projection (N : ℕ) (r : S2xS2Quotient.Blocks.FiniteRaw N) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.mapToSpace N)
      ((S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) r) =
    (S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass)
      ((S2xS2Quotient.Blocks.finiteInclusion N) r)
S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation_transition {N M : ℕ} (h : N ≤ M)
  (r : S2xS2Quotient.Blocks.FiniteRaw N) :
  (S2xS2Quotient.Topology.roundCircleCompactExhaustion.transitionMap h)
      ((S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) r) =
    (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation M) ((S2xS2Quotient.Blocks.finiteTransition h) r)
S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.cover_spanning
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass)
S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.cover_relations
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions) :
  (S2xS2Quotient.Topology.roundCircleBlockEvaluation S2xS2Quotient.Topology.sphereCubeClass).ker =
    S2xS2Quotient.Blocks.relations
S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.toExplicit
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions) :
  S2xS2Quotient.Topology.RoundCircleExplicitBlockAssumptions
S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.groupEquiv
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions) (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.finite_block_model_characterization
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.finite_block_target_characterization {Y : Type} [TopologicalSpace Y]
  (a : S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions)
  (h : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (n : ℤ)
  (b : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) :
  S2xS2Quotient.Topology.PiTwo b ≃ₗ[ℤ] S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.roundCircleSeamPiTwo (n : ℤ) (b : ↑(S2xS2Quotient.Topology.RoundCircleSeam n)) :
  S2xS2Quotient.Topology.PiTwo b ≃ₗ[ℤ] S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo_apply (n : ℤ)
  (b : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) (v : S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo n b) v =
    (S2xS2Quotient.Topology.piTwoProductEquiv S2xS2Quotient.Topology.sphereNorth S2xS2Quotient.Topology.sphereNorth)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleBlockRetraction n) b
          (S2xS2Quotient.Topology.sphereNorth, S2xS2Quotient.Topology.sphereNorth))
        v)
S2xS2Quotient.Topology.roundCircleSeamPiTwo_symm_apply (n : ℤ) (b : ↑(S2xS2Quotient.Topology.RoundCircleSeam n))
  (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleSeamPiTwo n b).symm s =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamSection n)
        S2xS2Quotient.Topology.sphereNorth b)
      s
S2xS2Quotient.Topology.roundCircleSeamSet_subset_rightBlock (n : ℤ) :
  S2xS2Quotient.Topology.roundCircleSeamSet n ⊆ S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet n
S2xS2Quotient.Topology.roundCircleSeamSet_subset_leftBlock (n : ℤ) :
  S2xS2Quotient.Topology.roundCircleSeamSet n ⊆ S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (n - 1)
S2xS2Quotient.Topology.roundCircleSeamToRightBlock (n : ℤ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleSeam n), ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n))
S2xS2Quotient.Topology.roundCircleSeamToLeftBlock (n : ℤ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleSeam n), ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (n - 1)))
S2xS2Quotient.Topology.roundCircleSeamToRightBlock_section (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleSeamToRightBlock n).comp (S2xS2Quotient.Topology.roundCircleSeamSection n) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle n).comp S2xS2Quotient.Topology.sphereDiagonalMap
S2xS2Quotient.Topology.roundCircleSeamToLeftBlock_section (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleSeamToLeftBlock n).comp (S2xS2Quotient.Topology.roundCircleSeamSection n) =
    (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle (n - 1)).comp
      S2xS2Quotient.Topology.sphereAntidiagonalMap
S2xS2Quotient.Topology.roundCircleSeamToRightBlock_retraction (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleBlockRetraction n).comp
      ((S2xS2Quotient.Topology.roundCircleSeamToRightBlock n).comp (S2xS2Quotient.Topology.roundCircleSeamSection n)) =
    S2xS2Quotient.Topology.sphereDiagonalMap
S2xS2Quotient.Topology.roundCircleSeamToLeftBlock_retraction (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleBlockRetraction (n - 1)).comp
      ((S2xS2Quotient.Topology.roundCircleSeamToLeftBlock n).comp (S2xS2Quotient.Topology.roundCircleSeamSection n)) =
    S2xS2Quotient.Topology.sphereAntidiagonalMap
S2xS2Quotient.Topology.roundCircleSeamPiTwo_right (n : ℤ) (b : ↑(S2xS2Quotient.Topology.RoundCircleSeam n))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood n)) (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo n c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamToRightBlock n) b c)
        ((S2xS2Quotient.Topology.roundCircleSeamPiTwo n b).symm s)) =
    (s, s)
S2xS2Quotient.Topology.roundCircleSeamPiTwo_left (n : ℤ) (b : ↑(S2xS2Quotient.Topology.RoundCircleSeam n))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (n - 1))) (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (n - 1) c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamToLeftBlock n) b c)
        ((S2xS2Quotient.Topology.roundCircleSeamPiTwo n b).symm s)) =
    (s, S2xS2Quotient.Topology.sphereAntipodePiTwo s)
S2xS2Quotient.Topology.roundCircleSeamPiTwo_left_sphereClass (n : ℤ) (b : ↑(S2xS2Quotient.Topology.RoundCircleSeam n))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (n - 1))) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (n - 1) c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamToLeftBlock n) b c)
        ((S2xS2Quotient.Topology.roundCircleSeamPiTwo n b).symm S2xS2Quotient.Topology.sphereCubeClass)) =
    (S2xS2Quotient.Topology.sphereCubeClass, -S2xS2Quotient.Topology.sphereCubeClass)
structure S2xS2Quotient.Topology.BasedCompactExhaustion.{u} {X : Type u} [TopologicalSpace X] (a : X) : Type u
number of parameters: 3
fields:
  S2xS2Quotient.Topology.BasedCompactExhaustion.stage : ℕ → Set X
  S2xS2Quotient.Topology.BasedCompactExhaustion.monotone : Monotone self.stage
  S2xS2Quotient.Topology.BasedCompactExhaustion.base_mem : ∀ (n : ℕ), a ∈ self.stage n
  S2xS2Quotient.Topology.BasedCompactExhaustion.compact_contained : ∀ (K : Set X), IsCompact K → ∃ n, K ⊆ self.stage n
constructor:
  S2xS2Quotient.Topology.BasedCompactExhaustion.mk.{u} {X : Type u} [TopologicalSpace X] {a : X} (stage : ℕ → Set X)
    (monotone : Monotone stage) (base_mem : ∀ (n : ℕ), a ∈ stage n)
    (compact_contained : ∀ (K : Set X), IsCompact K → ∃ n, K ⊆ stage n) :
    S2xS2Quotient.Topology.BasedCompactExhaustion a
structure S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions : Prop
number of parameters: 0
fields:
  S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.spanning : ∀ (N : ℕ),
      Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N)
  S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.relations_complete : ∀ (N : ℕ)
      (r : S2xS2Quotient.Blocks.FiniteRaw N),
      (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) r = 0 →
        (S2xS2Quotient.Blocks.finiteInclusion N) r ∈ S2xS2Quotient.Blocks.relations
constructor:
  S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions.mk
    (spanning : ∀ (N : ℕ), Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N))
    (relations_complete :
      ∀ (N : ℕ) (r : S2xS2Quotient.Blocks.FiniteRaw N),
        (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) r = 0 →
          (S2xS2Quotient.Blocks.finiteInclusion N) r ∈ S2xS2Quotient.Blocks.relations) :
    S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions
S2xS2Quotient.Topology.simplyConnected_isOneConnected {X : Type} [TopologicalSpace X] [SimplyConnectedSpace X] :
  Submission.IsNConnected 1 X
S2xS2Quotient.Topology.simplyConnectedHurewicz {X : Type} [TopologicalSpace X] [SimplyConnectedSpace X] (a : X) :
  S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] ↑(Submission.Hgrp 2 (TopCat.of X))
S2xS2Quotient.Topology.simplyConnectedHurewicz_apply {X : Type} [TopologicalSpace X] [SimplyConnectedSpace X] (a : X)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedHurewicz a) m = (Submission.absoluteHurewiczAdd 0 a) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_eq_imported_map {X Y : Type} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) (h : f a = b) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m =
    Additive.ofMul (Submission.HomotopyGroup.map f h (Additive.toMul m))
S2xS2Quotient.Topology.simplyConnectedHurewicz_naturality {X Y : Type} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b : Y) (h : f a = b)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap 2 (TopCat.ofHom f)))
      ((S2xS2Quotient.Topology.simplyConnectedHurewicz a) m) =
    (S2xS2Quotient.Topology.simplyConnectedHurewicz b) ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m)
S2xS2Quotient.Topology.spherePiTwoIntEquiv : S2xS2Quotient.Topology.SpherePiTwo ≃ₗ[ℤ] ℤ
S2xS2Quotient.Topology.spherePiTwo_exists_generator : ∃ s, Function.Bijective fun n => n • s
Submission.IsNConnected.absoluteHurewiczAddEquiv {n : ℕ} {X : Type} [TopologicalSpace X]
  (hX : Submission.IsNConnected (n + 1) X) (x : X) :
  Additive (HomotopyGroup.Pi (n + 2) X x) ≃+ ↑(Submission.Hgrp (n + 2) (TopCat.of X))
Submission.absoluteHurewiczAdd_naturality {X : Type} [TopologicalSpace X] (n : ℕ) {Y : Type} [TopologicalSpace Y]
  {x : X} {y : Y} (f : C(X, Y)) (hf : f x = y) (z : Additive (HomotopyGroup.Pi (n + 2) X x)) :
  (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap (n + 2) (TopCat.ofHom f)))
      ((Submission.absoluteHurewiczAdd n x) z) =
    (Submission.absoluteHurewiczAdd n y) (Additive.ofMul (Submission.HomotopyGroup.map f hf (Additive.toMul z)))
Submission.hgrpSphereSelfIsoZ (n : ℕ) :
  Submission.Hgrp (n + 1) (TopCat.of (Submission.Sph (n + 1))) ≅ AddCommGrpCat.of ℤ
Submission.pi2_sphere_two_at_mulEquiv_int (x : Submission.Sph 2) :
  Nonempty (HomotopyGroup.Pi 2 (Submission.Sph 2) x ≃* Multiplicative ℤ)
Submission.mayerVietoris_exact_δ_iota {X : TopCat} (A B : Set ↑X) (h : interior A ∪ interior B = Set.univ) (n : ℕ) :
  { X₁ := Submission.Hgrp (n + 1) X, X₂ := Submission.Hgrp n (TopCat.of ↑(A ∩ B)), X₃ := Submission.mvSum A B n,
      f := Submission.mvδ A B h n, g := Submission.mvIota A B n, zero := ⋯ }.Exact
Submission.mayerVietoris_exact_iota_kappa {X : TopCat} (A B : Set ↑X) (h : interior A ∪ interior B = Set.univ) (n : ℕ) :
  { X₁ := Submission.Hgrp n (TopCat.of ↑(A ∩ B)), X₂ := Submission.mvSum A B n, X₃ := Submission.Hgrp n X,
      f := Submission.mvIota A B n, g := Submission.mvKappa A B n, zero := ⋯ }.Exact
Submission.mayerVietoris_exact_kappa_δ {X : TopCat} (A B : Set ↑X) (h : interior A ∪ interior B = Set.univ) (n : ℕ) :
  { X₁ := Submission.mvSum A B (n + 1), X₂ := Submission.Hgrp (n + 1) X, X₃ := Submission.Hgrp n (TopCat.of ↑(A ∩ B)),
      f := Submission.mvKappa A B (n + 1), g := Submission.mvδ A B h n, zero := ⋯ }.Exact
S2xS2Quotient.Topology.simplyConnected_homologyOne_subsingleton {X : Type} [TopologicalSpace X]
  [SimplyConnectedSpace X] : Subsingleton ↑(Submission.Hgrp 1 (TopCat.of X))
S2xS2Quotient.Topology.homologySumEquiv {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ) :
  ↑(Submission.mvSum A B n) ≃+ ↑(Submission.Hgrp n (TopCat.of ↑A)) × ↑(Submission.Hgrp n (TopCat.of ↑B))
S2xS2Quotient.Topology.homologySumEquiv_symm_fst {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.Hgrp n (TopCat.of ↑A)) × ↑(Submission.Hgrp n (TopCat.of ↑B))) :
  (CategoryTheory.ConcreteCategory.hom CategoryTheory.Limits.biprod.fst)
      ((S2xS2Quotient.Topology.homologySumEquiv A B n).symm v) =
    v.1
S2xS2Quotient.Topology.homologySumEquiv_symm_snd {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.Hgrp n (TopCat.of ↑A)) × ↑(Submission.Hgrp n (TopCat.of ↑B))) :
  (CategoryTheory.ConcreteCategory.hom CategoryTheory.Limits.biprod.snd)
      ((S2xS2Quotient.Topology.homologySumEquiv A B n).symm v) =
    v.2
S2xS2Quotient.Topology.homologySumEquiv_fst {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.mvSum A B n)) :
  ((S2xS2Quotient.Topology.homologySumEquiv A B n) v).1 =
    (CategoryTheory.ConcreteCategory.hom CategoryTheory.Limits.biprod.fst) v
S2xS2Quotient.Topology.homologySumEquiv_snd {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.mvSum A B n)) :
  ((S2xS2Quotient.Topology.homologySumEquiv A B n) v).2 =
    (CategoryTheory.ConcreteCategory.hom CategoryTheory.Limits.biprod.snd) v
S2xS2Quotient.Topology.homologySumEquiv_iota {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.Hgrp n (TopCat.of ↑(A ∩ B)))) :
  (S2xS2Quotient.Topology.homologySumEquiv A B n) ((CategoryTheory.ConcreteCategory.hom (Submission.mvIota A B n)) v) =
    ((CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.mvInclLeft A B))) v,
      (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.mvInclRight A B))) v)
S2xS2Quotient.Topology.homologyKappa_pair {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (v : ↑(Submission.Hgrp n (TopCat.of ↑A)) × ↑(Submission.Hgrp n (TopCat.of ↑B))) :
  (CategoryTheory.ConcreteCategory.hom (Submission.mvKappa A B n))
      ((S2xS2Quotient.Topology.homologySumEquiv A B n).symm v) =
    (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.subIncl A))) v.1 -
      (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.subIncl B))) v.2
S2xS2Quotient.Topology.homology_union_difference_exact {X : Type} [TopologicalSpace X] (A B : Set X) (n : ℕ)
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑(Submission.Hgrp n (TopCat.of ↑A)))
  (b : ↑(Submission.Hgrp n (TopCat.of ↑B))) :
  (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.subIncl A))) a -
        (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.subIncl B))) b =
      0 ↔
    ∃ c,
      (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.mvInclLeft A B))) c = a ∧
        (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap n (Submission.mvInclRight A B))) c = b
S2xS2Quotient.Topology.homology_union_difference_surjective {X : Type} [TopologicalSpace X] (A B : Set X)
  (hcover : interior A ∪ interior B = Set.univ) [Subsingleton ↑(Submission.Hgrp 1 (TopCat.of ↑(A ∩ B)))]
  (v : ↑(Submission.Hgrp 2 (TopCat.of X))) :
  ∃ a b,
    (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap 2 (Submission.subIncl A))) a -
        (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap 2 (Submission.subIncl B))) b =
      v
S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint.{u} {X : Type u} [TopologicalSpace X] [SimplyConnectedSpace X]
  (a b : X) : S2xS2Quotient.Topology.PiTwo a ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint_apply.{u} {X : Type u} [TopologicalSpace X]
  [SimplyConnectedSpace X] (a b : X) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint a b) m =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (ContinuousMap.id X) a b) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_changeTarget.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace Y] (f : C(X, Y)) (a : X) (b c : Y) (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint b c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a c) m
S2xS2Quotient.Topology.simplyConnectedPiTwoMap_changeSource.{u} {X Y : Type u} [TopologicalSpace X] [TopologicalSpace Y]
  [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (f : C(X, Y)) (a b : X) (c : Y)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f b c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint a b) m) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a c) m
S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint_naturality.{u} {X Y : Type u} [TopologicalSpace X]
  [TopologicalSpace Y] [SimplyConnectedSpace X] [SimplyConnectedSpace Y] (f : C(X, Y)) (a a' : X) (b b' : Y)
  (m : S2xS2Quotient.Topology.PiTwo a) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint b b')
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a b) m) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap f a' b')
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint a a') m)
S2xS2Quotient.Topology.subspaceInclusion {X : Type} [TopologicalSpace X] (A : Set X) : C(↑A, X)
S2xS2Quotient.Topology.intersectionInclusionLeft {X : Type} [TopologicalSpace X] (A B : Set X) : C(↑(A ∩ B), ↑A)
S2xS2Quotient.Topology.intersectionInclusionRight {X : Type} [TopologicalSpace X] (A B : Set X) : C(↑(A ∩ B), ↑B)
S2xS2Quotient.Topology.piTwo_union_difference_hurewicz {X : Type} [TopologicalSpace X] (A B : Set X)
  [SimplyConnectedSpace X] [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] (c : ↑(A ∩ B))
  (a : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
  (b : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c)) :
  (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap 2 (Submission.subIncl A)))
        ((S2xS2Quotient.Topology.simplyConnectedHurewicz ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
          a) -
      (CategoryTheory.ConcreteCategory.hom (Submission.HgrpMap 2 (Submission.subIncl B)))
        ((S2xS2Quotient.Topology.simplyConnectedHurewicz ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c))
          b) =
    (S2xS2Quotient.Topology.simplyConnectedHurewicz ↑c)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          a -
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          b)
S2xS2Quotient.Topology.piTwo_union_difference_exact_at {X : Type} [TopologicalSpace X] (A B : Set X)
  [SimplyConnectedSpace X] [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (c : ↑(A ∩ B))
  (a : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
  (b : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c)) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          a -
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          b =
      0 ↔
    ∃ r,
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionLeft A B) c
              ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
            r =
          a ∧
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionRight A B) c
              ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c))
            r =
          b
S2xS2Quotient.Topology.piTwo_union_difference_surjective_at {X : Type} [TopologicalSpace X] (A B : Set X)
  [SimplyConnectedSpace X] [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (c : ↑(A ∩ B)) (v : S2xS2Quotient.Topology.PiTwo ↑c) :
  ∃ a b,
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          a -
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          b =
      v
S2xS2Quotient.Topology.piTwo_union_sum_exact_at {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (c : ↑(A ∩ B))
  (a : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
  (b : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c)) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          a +
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          b =
      0 ↔
    ∃ r,
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionLeft A B) c
              ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
            r =
          a ∧
        -(S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionRight A B) c
                ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c))
              r =
          b
S2xS2Quotient.Topology.piTwo_union_sum_surjective_at {X : Type} [TopologicalSpace X] (A B : Set X)
  [SimplyConnectedSpace X] [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (c : ↑(A ∩ B)) (v : S2xS2Quotient.Topology.PiTwo ↑c) :
  ∃ a b,
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          a +
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          b =
      v
S2xS2Quotient.Topology.piTwo_union_sum_basepoint {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] (c : ↑(A ∩ B)) (a : ↑A) (b : ↑B) (x : X)
  (m : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c))
  (n : S2xS2Quotient.Topology.PiTwo ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c)) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint (↑c) x)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A)
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) ↑c)
          m +
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B)
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) ↑c)
          n) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A) a x)
        ((S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint
            ((S2xS2Quotient.Topology.intersectionInclusionLeft A B) c) a)
          m) +
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B) b x)
        ((S2xS2Quotient.Topology.simplyConnectedPiTwoBasepoint
            ((S2xS2Quotient.Topology.intersectionInclusionRight A B) c) b)
          n)
S2xS2Quotient.Topology.piTwoUnionSum {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X] (a : ↑A)
  (b : ↑B) (x : X) :
  S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo x
S2xS2Quotient.Topology.piTwoUnionRelation {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace ↑A]
  [SimplyConnectedSpace ↑B] (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) :
  S2xS2Quotient.Topology.PiTwo c →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b
S2xS2Quotient.Topology.piTwoUnionSum_surjective {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.piTwoUnionSum A B a b x)
S2xS2Quotient.Topology.piTwoUnionSum_ker {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X) :
  (S2xS2Quotient.Topology.piTwoUnionSum A B a b x).ker = (S2xS2Quotient.Topology.piTwoUnionRelation A B a b c).range
S2xS2Quotient.Topology.piTwoUnionQuotientEquiv {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X) :
  ((S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b) ⧸
      (S2xS2Quotient.Topology.piTwoUnionRelation A B a b c).range) ≃ₗ[ℤ]
    S2xS2Quotient.Topology.PiTwo x
S2xS2Quotient.Topology.piTwoUnionQuotientEquiv_mk {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X)
  (p : S2xS2Quotient.Topology.PiTwo a × S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.piTwoUnionQuotientEquiv A B hcover a b c x) (Submodule.Quotient.mk p) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A) a x) p.1 +
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B) b x) p.2
S2xS2Quotient.Topology.piTwo_union_sum_exact {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X)
  (m : S2xS2Quotient.Topology.PiTwo a) (n : S2xS2Quotient.Topology.PiTwo b) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A) a x) m +
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B) b x) n =
      0 ↔
    ∃ r,
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionLeft A B) c a) r =
          m ∧
        -(S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.intersectionInclusionRight A B) c b)
              r =
          n
S2xS2Quotient.Topology.piTwo_union_sum_surjective {X : Type} [TopologicalSpace X] (A B : Set X) [SimplyConnectedSpace X]
  [SimplyConnectedSpace ↑A] [SimplyConnectedSpace ↑B] [SimplyConnectedSpace ↑(A ∩ B)]
  (hcover : interior A ∪ interior B = Set.univ) (a : ↑A) (b : ↑B) (c : ↑(A ∩ B)) (x : X)
  (v : S2xS2Quotient.Topology.PiTwo x) :
  ∃ m n,
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion A) a x) m +
        (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.subspaceInclusion B) b x) n =
      v
S2xS2Quotient.DiagonalGluing.extensionMap.{u_1, u_2, u_4, u_5} {U : Type u_1} {V : Type u_2} {K : Type u_4}
  {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup K] [AddCommGroup W] (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W)
  (q : V ≃ₗ[ℤ] K × K) : U × K →ₗ[ℤ] W
S2xS2Quotient.DiagonalGluing.extensionMap_apply.{u_1, u_2, u_4, u_5} {U : Type u_1} {V : Type u_2} {K : Type u_4}
  {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup K] [AddCommGroup W] (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W)
  (q : V ≃ₗ[ℤ] K × K) (u : U) (k : K) :
  (S2xS2Quotient.DiagonalGluing.extensionMap f g q) (u, k) = f u + g (q.symm (0, k))
S2xS2Quotient.DiagonalGluing.gluing_relation.{u_1, u_2, u_3, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W)
  (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hexact : (f.coprod g).ker = (l.prod (-d)).range) (i : I) : f (l i) = g (d i)
S2xS2Quotient.DiagonalGluing.normalForm.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K] [AddCommGroup W]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i)) (u : U) (v : V) :
  (S2xS2Quotient.DiagonalGluing.extensionMap f g q) (u + l (e.symm (q v).1), (q v).2 - (q v).1) = f u + g v
S2xS2Quotient.DiagonalGluing.extensionMap_injective.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2}
  {I : Type u_3} {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K]
  [AddCommGroup W] (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i)) :
  Function.Injective ⇑(S2xS2Quotient.DiagonalGluing.extensionMap f g q)
S2xS2Quotient.DiagonalGluing.extensionMap_surjective.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2}
  {I : Type u_3} {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K]
  [AddCommGroup W] (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i))
  (hsurj : Function.Surjective ⇑(f.coprod g)) : Function.Surjective ⇑(S2xS2Quotient.DiagonalGluing.extensionMap f g q)
S2xS2Quotient.DiagonalGluing.extensionEquiv.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K] [AddCommGroup W]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i))
  (hsurj : Function.Surjective ⇑(f.coprod g)) : (U × K) ≃ₗ[ℤ] W
S2xS2Quotient.DiagonalGluing.extensionEquiv_apply.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K] [AddCommGroup W]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i))
  (hsurj : Function.Surjective ⇑(f.coprod g)) (u : U) (k : K) :
  (S2xS2Quotient.DiagonalGluing.extensionEquiv f g l d e q hexact hdiag hsurj) (u, k) = f u + g (q.symm (0, k))
S2xS2Quotient.DiagonalGluing.extensionEquiv_old.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K] [AddCommGroup W]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i))
  (hsurj : Function.Surjective ⇑(f.coprod g)) (u : U) :
  (S2xS2Quotient.DiagonalGluing.extensionEquiv f g l d e q hexact hdiag hsurj) (u, 0) = f u
S2xS2Quotient.DiagonalGluing.extensionEquiv_new.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {K : Type u_4} {W : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup K] [AddCommGroup W]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (e : I ≃ₗ[ℤ] K) (q : V ≃ₗ[ℤ] K × K)
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (hdiag : ∀ (i : I), q (d i) = (e i, e i))
  (hsurj : Function.Surjective ⇑(f.coprod g)) (k : K) :
  (S2xS2Quotient.DiagonalGluing.extensionEquiv f g l d e q hexact hdiag hsurj) (0, k) = g (q.symm (0, k))
S2xS2Quotient.Topology.piTwoSubspaceUnionMap {X : Type} [TopologicalSpace X] (U V S : Set X) [SimplyConnectedSpace ↑S]
  (hUS : U ⊆ S) (hVS : V ⊆ S) (u : ↑U) (v : ↑V) (s : ↑S) :
  S2xS2Quotient.Topology.PiTwo u × S2xS2Quotient.Topology.PiTwo v →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo s
S2xS2Quotient.Topology.piTwoSubspaceUnion_exact {X : Type} [TopologicalSpace X] (U V S : Set X)
  [SimplyConnectedSpace ↑U] [SimplyConnectedSpace ↑V] [SimplyConnectedSpace ↑(U ∩ V)] [SimplyConnectedSpace ↑S]
  (hU : IsOpen U) (hV : IsOpen V) (hcover : U ∪ V = S) (hUS : U ⊆ S) (hVS : V ⊆ S) (u : ↑U) (v : ↑V) (c : ↑(U ∩ V))
  (s : ↑S) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.piTwoSubspaceUnionMap U V S hUS hVS u v s) ∧
    (S2xS2Quotient.Topology.piTwoSubspaceUnionMap U V S hUS hVS u v s).ker =
      (S2xS2Quotient.Topology.piTwoUnionRelation U V u v c).range
S2xS2Quotient.Topology.piTwoSubspaceUnion_surjective {X : Type} [TopologicalSpace X] (U V S : Set X)
  [SimplyConnectedSpace ↑U] [SimplyConnectedSpace ↑V] [SimplyConnectedSpace ↑(U ∩ V)] [SimplyConnectedSpace ↑S]
  (hU : IsOpen U) (hV : IsOpen V) (hcover : U ∪ V = S) (hUS : U ⊆ S) (hVS : V ⊆ S) (u : ↑U) (v : ↑V) (c : ↑(U ∩ V))
  (s : ↑S) : Function.Surjective ⇑(S2xS2Quotient.Topology.piTwoSubspaceUnionMap U V S hUS hVS u v s)
S2xS2Quotient.Topology.piTwoSubspaceUnion_ker {X : Type} [TopologicalSpace X] (U V S : Set X) [SimplyConnectedSpace ↑U]
  [SimplyConnectedSpace ↑V] [SimplyConnectedSpace ↑(U ∩ V)] [SimplyConnectedSpace ↑S] (hU : IsOpen U) (hV : IsOpen V)
  (hcover : U ∪ V = S) (hUS : U ⊆ S) (hVS : V ⊆ S) (u : ↑U) (v : ↑V) (c : ↑(U ∩ V)) (s : ↑S) :
  (S2xS2Quotient.Topology.piTwoSubspaceUnionMap U V S hUS hVS u v s).ker =
    (S2xS2Quotient.Topology.piTwoUnionRelation U V u v c).range
S2xS2Quotient.Topology.roundCircleOpenChainSet_subset_succ (a : ℤ) (k : ℕ) :
  S2xS2Quotient.Topology.roundCircleOpenChainSet a k ⊆ S2xS2Quotient.Topology.roundCircleOpenChainSet a (k + 1)
S2xS2Quotient.Topology.roundCircleNextBlockSet_subset_succ (a : ℤ) (k : ℕ) :
  S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (a + ↑k + 1) ⊆
    S2xS2Quotient.Topology.roundCircleOpenChainSet a (k + 1)
S2xS2Quotient.Topology.roundCircleSeamSet_subset_chain (a : ℤ) (k : ℕ) :
  S2xS2Quotient.Topology.roundCircleSeamSet (a + ↑k + 1) ⊆ S2xS2Quotient.Topology.roundCircleOpenChainSet a k
S2xS2Quotient.Topology.roundCircleChainIntoNext (a : ℤ) (k : ℕ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k), ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1)))
S2xS2Quotient.Topology.roundCircleNextBlockIntoChain (a : ℤ) (k : ℕ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)),
    ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1)))
S2xS2Quotient.Topology.roundCircleSeamIntoChain (a : ℤ) (k : ℕ) :
  C(↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1)), ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
S2xS2Quotient.Topology.roundCircleChainIntersectionHomeomorph (a : ℤ) (k : ℕ) :
  ↑(S2xS2Quotient.Topology.roundCircleOpenChainSet a k ∩
        S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet (a + ↑k + 1)) ≃ₜ
    ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1))
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoGluing (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) :
  S2xS2Quotient.Topology.PiTwo u × S2xS2Quotient.Topology.PiTwo v →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo w
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoRelation (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1))) :
  S2xS2Quotient.Topology.PiTwo c →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo u × S2xS2Quotient.Topology.PiTwo v
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoGluing_exact (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1)))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleOpenChainPiTwoGluing a k u v w) ∧
    (S2xS2Quotient.Topology.roundCircleOpenChainPiTwoGluing a k u v w).ker =
      (S2xS2Quotient.Topology.roundCircleOpenChainPiTwoRelation a k u v c).range
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoGluing_diagonal (a : ℤ) (k : ℕ)
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1))) (r : S2xS2Quotient.Topology.PiTwo c) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (a + ↑k + 1) v)
      ((S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamToRightBlock (a + ↑k + 1))
          c v)
        r) =
    ((S2xS2Quotient.Topology.roundCircleSeamPiTwo (a + ↑k + 1) c) r,
      (S2xS2Quotient.Topology.roundCircleSeamPiTwo (a + ↑k + 1) c) r)
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoStepEquiv (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1)))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) :
  (S2xS2Quotient.Topology.PiTwo u × S2xS2Quotient.Topology.SpherePiTwo) ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo w
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoStepEquiv_apply (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1)))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) (p : S2xS2Quotient.Topology.PiTwo u)
  (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleOpenChainPiTwoStepEquiv a k u v c w) (p, s) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) u w) p +
      (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleNextBlockIntoChain a k) v w)
        ((S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (a + ↑k + 1) v).symm (0, s))
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoStepEquiv_old (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1)))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) (p : S2xS2Quotient.Topology.PiTwo u) :
  (S2xS2Quotient.Topology.roundCircleOpenChainPiTwoStepEquiv a k u v c w) (p, 0) =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) u w) p
S2xS2Quotient.Topology.roundCircleChainIntoNext_piTwo_injective (a : ℤ) (k : ℕ)
  (u : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (w : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) :
  Function.Injective
    ⇑(S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) u w)
S2xS2Quotient.Topology.roundCircleOpenChainSphereCoordinates (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) :
  S2xS2Quotient.Topology.PiTwo p ≃ₗ[ℤ] Fin (k + 2) → S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.roundCircleOpenChainPiTwoIntCoordinates (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) : S2xS2Quotient.Topology.PiTwo p ≃ₗ[ℤ] Fin (k + 2) → ℤ
S2xS2Quotient.Topology.roundCirclePiTwoStageIntCoordinates (N : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCirclePiTwoStage N)) : S2xS2Quotient.Topology.PiTwo p ≃ₗ[ℤ] Fin (2 * N + 2) → ℤ
S2xS2Quotient.LinearGluing.kernel_compatible.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {W : Type u_4} {T : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] [AddCommGroup T]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hexact : (f.coprod g).ker = (l.prod (-d)).range)
  (a : U →ₗ[ℤ] T) (b : V →ₗ[ℤ] T) (hcompat : ∀ (i : I), a (l i) = b (d i)) : (f.coprod g).ker ≤ (a.coprod b).ker
S2xS2Quotient.LinearGluing.descend.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3} {W : Type u_4}
  {T : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] [AddCommGroup T] (f : U →ₗ[ℤ] W)
  (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hsurj : Function.Surjective ⇑(f.coprod g))
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (a : U →ₗ[ℤ] T) (b : V →ₗ[ℤ] T)
  (hcompat : ∀ (i : I), a (l i) = b (d i)) : W →ₗ[ℤ] T
S2xS2Quotient.LinearGluing.descend_pair.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {W : Type u_4} {T : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] [AddCommGroup T]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hsurj : Function.Surjective ⇑(f.coprod g))
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (a : U →ₗ[ℤ] T) (b : V →ₗ[ℤ] T)
  (hcompat : ∀ (i : I), a (l i) = b (d i)) (u : U) (v : V) :
  (S2xS2Quotient.LinearGluing.descend f g l d hsurj hexact a b hcompat) (f u + g v) = a u + b v
S2xS2Quotient.LinearGluing.descend_left.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {W : Type u_4} {T : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] [AddCommGroup T]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hsurj : Function.Surjective ⇑(f.coprod g))
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (a : U →ₗ[ℤ] T) (b : V →ₗ[ℤ] T)
  (hcompat : ∀ (i : I), a (l i) = b (d i)) (u : U) :
  (S2xS2Quotient.LinearGluing.descend f g l d hsurj hexact a b hcompat) (f u) = a u
S2xS2Quotient.LinearGluing.descend_right.{u_1, u_2, u_3, u_4, u_5} {U : Type u_1} {V : Type u_2} {I : Type u_3}
  {W : Type u_4} {T : Type u_5} [AddCommGroup U] [AddCommGroup V] [AddCommGroup I] [AddCommGroup W] [AddCommGroup T]
  (f : U →ₗ[ℤ] W) (g : V →ₗ[ℤ] W) (l : I →ₗ[ℤ] U) (d : I →ₗ[ℤ] V) (hsurj : Function.Surjective ⇑(f.coprod g))
  (hexact : (f.coprod g).ker = (l.prod (-d)).range) (a : U →ₗ[ℤ] T) (b : V →ₗ[ℤ] T)
  (hcompat : ∀ (i : I), a (l i) = b (d i)) (v : V) :
  (S2xS2Quotient.LinearGluing.descend f g l d hsurj hexact a b hcompat) (g v) = b v
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet_subset_chain (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j)
  (hjk : j ≤ a + ↑k) :
  S2xS2Quotient.Topology.roundCircleBlockNeighborhoodSet j ⊆ S2xS2Quotient.Topology.roundCircleOpenChainSet a k
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodIntoChain (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k) :
  C(↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood j), ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
S2xS2Quotient.Topology.roundCircleOpenChainBlock (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k) :
  C(S2xS2Quotient.Topology.SphereTwo × S2xS2Quotient.Topology.SphereTwo,
    ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) :
  S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo p
S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo_symm_apply (j : ℤ)
  (b : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood j))
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo j b).symm v =
    (S2xS2Quotient.Topology.simplyConnectedPiTwoProductMap (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodMiddle j)
        S2xS2Quotient.Topology.sphereNorth S2xS2Quotient.Topology.sphereNorth b)
      v
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo_neighborhood (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k)
  (b : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood j))
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap
        (S2xS2Quotient.Topology.roundCircleBlockNeighborhoodIntoChain a k j haj hjk) b p)
      ((S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo j b).symm v) =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a k j haj hjk p) v
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo_intoNext (a : ℤ) (k : ℕ) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k)
  (hjk' : j ≤ a + ↑(k + 1)) (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (q : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1)))
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) p q)
      ((S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a k j haj hjk p) v) =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a (k + 1) j haj hjk' q) v
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo_last (a : ℤ) (k : ℕ) (haj : a ≤ a + ↑k + 1)
  (hjk : a + ↑k + 1 ≤ a + ↑(k + 1)) (b : ↑(S2xS2Quotient.Topology.RoundCircleBlockNeighborhood (a + ↑k + 1)))
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1)))
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleNextBlockIntoChain a k) b p)
      ((S2xS2Quotient.Topology.roundCircleBlockNeighborhoodPiTwo (a + ↑k + 1) b).symm v) =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a (k + 1) (a + ↑k + 1) haj hjk p) v
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo_zero_surjective (a : ℤ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a 0)) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a 0 a ⋯ ⋯ p)
S2xS2Quotient.Topology.roundCircleChainIndex (a : ℤ) (k : ℕ) : Type
S2xS2Quotient.Topology.RoundCircleChainRaw (a : ℤ) (k : ℕ) : Type
S2xS2Quotient.Topology.roundCircleChainIndexNext (a : ℤ) (k : ℕ)
  (j : S2xS2Quotient.Topology.roundCircleChainIndex a k) : S2xS2Quotient.Topology.roundCircleChainIndex a (k + 1)
S2xS2Quotient.Topology.roundCircleChainSphere (a : ℤ) (k : ℕ) (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (j : S2xS2Quotient.Topology.roundCircleChainIndex a k) : S2xS2Quotient.Topology.PiTwo p
S2xS2Quotient.Topology.roundCircleChainEvaluation (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) :
  S2xS2Quotient.Topology.RoundCircleChainRaw a k →ₗ[ℤ] S2xS2Quotient.Topology.PiTwo p
S2xS2Quotient.Topology.roundCircleChainSphere_intoNext (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (q : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1)))
  (j : S2xS2Quotient.Topology.roundCircleChainIndex a k) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) p q)
      (S2xS2Quotient.Topology.roundCircleChainSphere a k p j) =
    S2xS2Quotient.Topology.roundCircleChainSphere a (k + 1) q (S2xS2Quotient.Topology.roundCircleChainIndexNext a k j)
S2xS2Quotient.Topology.roundCircleChainEvaluation_intoNext (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (q : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a (k + 1))) (r : S2xS2Quotient.Topology.RoundCircleChainRaw a k) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleChainIntoNext a k) p q)
      ((S2xS2Quotient.Topology.roundCircleChainEvaluation a k p) r) =
    (S2xS2Quotient.Topology.roundCircleChainEvaluation a (k + 1) q)
      ((Finsupp.lmapDomain ℤ ℤ (S2xS2Quotient.Topology.roundCircleChainIndexNext a k)) r)
S2xS2Quotient.Topology.roundCircleChainEvaluation_single (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) (j : S2xS2Quotient.Topology.roundCircleChainIndex a k)
  (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleChainEvaluation a k p) (Finsupp.single j n) =
    n • S2xS2Quotient.Topology.roundCircleChainSphere a k p j
S2xS2Quotient.Topology.roundCircleChainEvaluation_block (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k) (m n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleChainEvaluation a k p)
      (Finsupp.single ⟨(j, false), ⋯⟩ m + Finsupp.single ⟨(j, true), ⋯⟩ n) =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a k j haj hjk p)
      (m • S2xS2Quotient.Topology.sphereCubeClass, n • S2xS2Quotient.Topology.sphereCubeClass)
S2xS2Quotient.Topology.roundCircleChainEvaluation_surjective
  (hSphere : Function.Surjective fun n => n • S2xS2Quotient.Topology.sphereCubeClass) (a : ℤ) (k : ℕ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleChainEvaluation a k p)
S2xS2Quotient.Topology.roundCircleChainIndexToFinite (N : ℕ)
  (j : S2xS2Quotient.Topology.roundCircleChainIndex (-↑N) (2 * N)) : S2xS2Quotient.Blocks.FiniteIndex N
S2xS2Quotient.Topology.roundCircleChainSphere_toFinite (N : ℕ)
  (j : S2xS2Quotient.Topology.roundCircleChainIndex (-↑N) (2 * N)) :
  S2xS2Quotient.Topology.roundCircleStageSphere N (S2xS2Quotient.Topology.roundCircleChainIndexToFinite N j) =
    S2xS2Quotient.Topology.roundCircleChainSphere (-↑N) (2 * N)
      (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N) j
S2xS2Quotient.Topology.roundCircleChainEvaluation_toFinite (N : ℕ)
  (r : S2xS2Quotient.Topology.RoundCircleChainRaw (-↑N) (2 * N)) :
  (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N)
      ((Finsupp.lmapDomain ℤ ℤ (S2xS2Quotient.Topology.roundCircleChainIndexToFinite N)) r) =
    (S2xS2Quotient.Topology.roundCircleChainEvaluation (-↑N) (2 * N)
        (S2xS2Quotient.Topology.roundCircleCompactExhaustion.base N))
      r
S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation_surjective_of_sphereGeneration
  (hSphere : Function.Surjective fun n => n • S2xS2Quotient.Topology.sphereCubeClass) (N : ℕ) :
  Function.Surjective ⇑(S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N)
S2xS2Quotient.Topology.SphereClassPrimitive : Prop
S2xS2Quotient.Topology.sphereClassEquiv (h : S2xS2Quotient.Topology.SphereClassPrimitive) :
  ℤ ≃ₗ[ℤ] S2xS2Quotient.Topology.SpherePiTwo
S2xS2Quotient.Topology.sphereClassEquiv_apply (h : S2xS2Quotient.Topology.SphereClassPrimitive) (n : ℤ) :
  (S2xS2Quotient.Topology.sphereClassEquiv h) n = n • S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.sphereClassIntCoordinates (h : S2xS2Quotient.Topology.SphereClassPrimitive) :
  S2xS2Quotient.Topology.SpherePiTwo ≃ₗ[ℤ] ℤ
S2xS2Quotient.Topology.sphereClassIntCoordinates_class (h : S2xS2Quotient.Topology.SphereClassPrimitive) :
  (S2xS2Quotient.Topology.sphereClassIntCoordinates h) S2xS2Quotient.Topology.sphereCubeClass = 1
S2xS2Quotient.Topology.sphereAntipodePiTwo_eq_neg_of_generation
  (h : Function.Surjective fun n => n • S2xS2Quotient.Topology.sphereCubeClass)
  (s : S2xS2Quotient.Topology.SpherePiTwo) : S2xS2Quotient.Topology.sphereAntipodePiTwo s = -s
S2xS2Quotient.Topology.sphereBlockCoordinates (h : S2xS2Quotient.Topology.SphereClassPrimitive) (j : ℤ) :
  S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo →ₗ[ℤ] S2xS2Quotient.M
S2xS2Quotient.Topology.sphereBlockCoordinates_apply (h : S2xS2Quotient.Topology.SphereClassPrimitive) (j : ℤ)
  (s t : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.sphereBlockCoordinates h j) (s, t) =
    (S2xS2Quotient.Topology.sphereClassIntCoordinates h) s •
        S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.A j) +
      (S2xS2Quotient.Topology.sphereClassIntCoordinates h) t •
        S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.B j)
S2xS2Quotient.Topology.sphereBlockCoordinates_first (h : S2xS2Quotient.Topology.SphereClassPrimitive) (j : ℤ) :
  (S2xS2Quotient.Topology.sphereBlockCoordinates h j) (S2xS2Quotient.Topology.sphereCubeClass, 0) =
    S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.A j)
S2xS2Quotient.Topology.sphereBlockCoordinates_second (h : S2xS2Quotient.Topology.SphereClassPrimitive) (j : ℤ) :
  (S2xS2Quotient.Topology.sphereBlockCoordinates h j) (0, S2xS2Quotient.Topology.sphereCubeClass) =
    S2xS2Quotient.Blocks.coordinates (S2xS2Quotient.Blocks.B j)
S2xS2Quotient.Topology.sphereBlockCoordinates_sections (h : S2xS2Quotient.Topology.SphereClassPrimitive) (j : ℤ)
  (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.sphereBlockCoordinates h j) (s, S2xS2Quotient.Topology.sphereAntipodePiTwo s) =
    (S2xS2Quotient.Topology.sphereBlockCoordinates h (j + 1)) (s, s)
S2xS2Quotient.Topology.roundCircleChainBlockPiTwo_zero_injective (a : ℤ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a 0)) :
  Function.Injective ⇑(S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a 0 a ⋯ ⋯ p)
S2xS2Quotient.Topology.roundCircleChainBlockPiTwoZeroEquiv (a : ℤ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a 0)) :
  (S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo p
S2xS2Quotient.Topology.roundCircleChainBlockPiTwoZeroEquiv_apply (a : ℤ)
  (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a 0))
  (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.roundCircleChainBlockPiTwoZeroEquiv a p) v =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a 0 a ⋯ ⋯ p) v
S2xS2Quotient.Topology.roundCircleSeamIntoChain_section (a : ℤ) (k : ℕ) (ha : a ≤ a + ↑k) :
  (S2xS2Quotient.Topology.roundCircleSeamIntoChain a k).comp
      (S2xS2Quotient.Topology.roundCircleSeamSection (a + ↑k + 1)) =
    (S2xS2Quotient.Topology.roundCircleOpenChainBlock a k (a + ↑k) ha ⋯).comp
      S2xS2Quotient.Topology.sphereAntidiagonalMap
S2xS2Quotient.Topology.roundCircleSeamIntoChain_piTwo (a : ℤ) (k : ℕ) (ha : a ≤ a + ↑k)
  (c : ↑(S2xS2Quotient.Topology.RoundCircleSeam (a + ↑k + 1))) (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k))
  (s : S2xS2Quotient.Topology.SpherePiTwo) :
  (S2xS2Quotient.Topology.simplyConnectedPiTwoMap (S2xS2Quotient.Topology.roundCircleSeamIntoChain a k) c p)
      ((S2xS2Quotient.Topology.roundCircleSeamPiTwo (a + ↑k + 1) c).symm s) =
    (S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a k (a + ↑k) ha ⋯ p)
      (s, S2xS2Quotient.Topology.sphereAntipodePiTwo s)
S2xS2Quotient.Topology.roundCircleChainCoefficientMap_exists (hSphere : S2xS2Quotient.Topology.SphereClassPrimitive)
  (a : ℤ) (k : ℕ) (p : ↑(S2xS2Quotient.Topology.RoundCircleOpenChain a k)) :
  ∃ f,
    ∀ (j : ℤ) (haj : a ≤ j) (hjk : j ≤ a + ↑k)
      (v : S2xS2Quotient.Topology.SpherePiTwo × S2xS2Quotient.Topology.SpherePiTwo),
      f ((S2xS2Quotient.Topology.roundCircleChainBlockPiTwo a k j haj hjk p) v) =
        (S2xS2Quotient.Topology.sphereBlockCoordinates hSphere j) v
S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation_single (N : ℕ) (j : S2xS2Quotient.Blocks.FiniteIndex N)
  (n : ℤ) :
  (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) (Finsupp.single j n) =
    n • S2xS2Quotient.Topology.roundCircleStageSphere N j
S2xS2Quotient.Topology.roundCircleFiniteCoefficientMap_exists (hSphere : S2xS2Quotient.Topology.SphereClassPrimitive)
  (N : ℕ) :
  ∃ f,
    f ∘ₗ S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N =
      S2xS2Quotient.Blocks.coordinates ∘ₗ S2xS2Quotient.Blocks.finiteInclusion N
S2xS2Quotient.Topology.roundCircleFiniteBlock_relations_of_spherePrimitive
  (hSphere : S2xS2Quotient.Topology.SphereClassPrimitive) (N : ℕ) (r : S2xS2Quotient.Blocks.FiniteRaw N)
  (hr : (S2xS2Quotient.Topology.roundCircleFiniteBlockEvaluation N) r = 0) :
  (S2xS2Quotient.Blocks.finiteInclusion N) r ∈ S2xS2Quotient.Blocks.relations
S2xS2Quotient.Topology.SphereClassPrimitive.finiteBlocks (h : S2xS2Quotient.Topology.SphereClassPrimitive) :
  S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions
S2xS2Quotient.Topology.SphereClassPrimitive.coverBasis (h : S2xS2Quotient.Topology.SphereClassPrimitive) :
  S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.SphereClassPrimitive.coverBasis_apply (h : S2xS2Quotient.Topology.SphereClassPrimitive)
  (m : S2xS2Quotient.M) : h.coverBasis m = S2xS2Quotient.Topology.roundCircleExplicitCoordinates m
S2xS2Quotient.Topology.SphereClassPrimitive.coverBasis_equivariant (h : S2xS2Quotient.Topology.SphereClassPrimitive)
  (m : S2xS2Quotient.M) :
  h.coverBasis (S2xS2Quotient.tau m) = (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (h.coverBasis m)
S2xS2Quotient.Topology.SphereClassPrimitive.groupEquiv (h : S2xS2Quotient.Topology.SphereClassPrimitive) (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.sphere_primitive_model_characterization (h : S2xS2Quotient.Topology.SphereClassPrimitive)
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.sphere_primitive_target_characterization {Y : Type} [TopologicalSpace Y]
  (hSphere : S2xS2Quotient.Topology.SphereClassPrimitive)
  (hModel : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
def S2xS2Quotient.Topology.SphereClassPrimitive : Prop :=
Function.Bijective fun n => n • S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.sphereSquareHeight_antitone {u v x y : ℝ} (hxu : x ^ 2 ≤ u ^ 2) (hyv : y ^ 2 ≤ v ^ 2)
  (hu : u ^ 2 ≤ 1) (hv : v ^ 2 ≤ 1) :
  S2xS2Quotient.Topology.sphereSquareHeight u v ≤ S2xS2Quotient.Topology.sphereSquareHeight x y
S2xS2Quotient.Topology.sphereSquareScale_unique (p q r s : ℝ) (hr : 0 ≤ r) (hs : 0 ≤ s) (hrp : (r * p) ^ 2 ≤ 1)
  (hrq : (r * q) ^ 2 ≤ 1) (hsp : (s * p) ^ 2 ≤ 1) (hsq : (s * q) ^ 2 ≤ 1)
  (her : S2xS2Quotient.Topology.sphereSquareHeight (r * p) (r * q) = r)
  (hes : S2xS2Quotient.Topology.sphereSquareHeight (s * p) (s * q) = s) : r = s
S2xS2Quotient.Topology.sphereSquareScale_exists (p q : ℝ) :
  ∃ r, 0 < r ∧ |r * p| ≤ 1 ∧ |r * q| ≤ 1 ∧ S2xS2Quotient.Topology.sphereSquareHeight (r * p) (r * q) = r
S2xS2Quotient.Topology.primitive_of_endomorphism_images.{u_1} {V : Type u_1} [AddCommGroup V] (e : V ≃ₗ[ℤ] ℤ) (s : V)
  (h : ∀ (v : V), ∃ f, f s = v) : Function.Bijective fun n => n • s
S2xS2Quotient.Topology.sphereClassPrimitive_of_cubical_quotient
  (hq : Topology.IsQuotientMap ⇑↑S2xS2Quotient.Topology.sphereCube)
  (hfib :
    ∀ (x y : Fin 2 → ↑unitInterval),
      S2xS2Quotient.Topology.sphereCube x = S2xS2Quotient.Topology.sphereCube y →
        x = y ∨ x ∈ Cube.boundary (Fin 2) ∧ y ∈ Cube.boundary (Fin 2)) :
  S2xS2Quotient.Topology.SphereClassPrimitive
S2xS2Quotient.Topology.sphereSquareMap_eq_north_iff (u v : ℝ) :
  S2xS2Quotient.Topology.sphereSquareMap (u, v) = S2xS2Quotient.Topology.sphereNorth ↔
    S2xS2Quotient.Topology.sphereSquareHeight u v = 0
S2xS2Quotient.Topology.sphereSquareMap_north_coordinate_iff (u v : ℝ) :
  ↑(S2xS2Quotient.Topology.sphereSquareMap (u, v)) 2 = 1 ↔ S2xS2Quotient.Topology.sphereSquareHeight u v = 0
S2xS2Quotient.Topology.sphereSquareMap_stereographic (u v : ℝ)
  (hh : S2xS2Quotient.Topology.sphereSquareHeight u v ≠ 0) :
  u =
      S2xS2Quotient.Topology.sphereSquareHeight u v *
        (↑(S2xS2Quotient.Topology.sphereSquareMap (u, v)) 0 /
          (1 - ↑(S2xS2Quotient.Topology.sphereSquareMap (u, v)) 2)) ∧
    v =
      S2xS2Quotient.Topology.sphereSquareHeight u v *
        (↑(S2xS2Quotient.Topology.sphereSquareMap (u, v)) 1 / (1 - ↑(S2xS2Quotient.Topology.sphereSquareMap (u, v)) 2))
S2xS2Quotient.Topology.sphereSquareMap_injective_off_boundary {u v x y : ℝ} (hu : |u| ≤ 1) (hv : |v| ≤ 1) (hx : |x| ≤ 1)
  (hy : |y| ≤ 1) (hh : S2xS2Quotient.Topology.sphereSquareHeight u v ≠ 0)
  (he : S2xS2Quotient.Topology.sphereSquareMap (u, v) = S2xS2Quotient.Topology.sphereSquareMap (x, y)) : u = x ∧ v = y
S2xS2Quotient.Topology.cube_centered_coordinate_abs (t : ↑unitInterval) : |2 * ↑t - 1| ≤ 1
S2xS2Quotient.Topology.sphereCube_height_zero_iff (t : Fin 2 → ↑unitInterval) :
  S2xS2Quotient.Topology.sphereSquareHeight (2 * ↑(t 0) - 1) (2 * ↑(t 1) - 1) = 0 ↔ t ∈ Cube.boundary (Fin 2)
S2xS2Quotient.Topology.sphereCube_fibres (s t : Fin 2 → ↑unitInterval)
  (h : S2xS2Quotient.Topology.sphereCube s = S2xS2Quotient.Topology.sphereCube t) :
  s = t ∨ s ∈ Cube.boundary (Fin 2) ∧ t ∈ Cube.boundary (Fin 2)
S2xS2Quotient.Topology.sphereTwo_eq_north_of_last (z : S2xS2Quotient.Topology.SphereTwo) (hz : ↑z 2 = 1) :
  z = S2xS2Quotient.Topology.sphereNorth
S2xS2Quotient.Topology.sphereSquareMap_of_stereographic (z : S2xS2Quotient.Topology.SphereTwo) (hz : ↑z 2 ≠ 1) (r : ℝ)
  (hr : r ≠ 0)
  (hheight : S2xS2Quotient.Topology.sphereSquareHeight (r * (↑z 0 / (1 - ↑z 2))) (r * (↑z 1 / (1 - ↑z 2))) = r) :
  S2xS2Quotient.Topology.sphereSquareMap (r * (↑z 0 / (1 - ↑z 2)), r * (↑z 1 / (1 - ↑z 2))) = z
S2xS2Quotient.Topology.sphereCube_surjective : Function.Surjective ⇑S2xS2Quotient.Topology.sphereCube
S2xS2Quotient.Topology.sphereCube_isQuotientMap : Topology.IsQuotientMap ⇑↑S2xS2Quotient.Topology.sphereCube
S2xS2Quotient.Topology.sphereCubeClass_primitive : S2xS2Quotient.Topology.SphereClassPrimitive
S2xS2Quotient.Topology.roundCircleFiniteBlockAssumptions_proved :
  S2xS2Quotient.Topology.RoundCircleFiniteBlockAssumptions
S2xS2Quotient.Topology.roundCircleCoverDeckData : S2xS2Quotient.Topology.RoundCircleDeckAssumptions
S2xS2Quotient.Topology.roundCircleCoverBasis :
  S2xS2Quotient.M ≃ₗ[ℤ] S2xS2Quotient.Topology.PiTwo S2xS2Quotient.Topology.roundCircleCoverBase
S2xS2Quotient.Topology.roundCircleCoverBasis_apply (m : S2xS2Quotient.M) :
  S2xS2Quotient.Topology.roundCircleCoverBasis m = S2xS2Quotient.Topology.roundCircleExplicitCoordinates m
S2xS2Quotient.Topology.roundCircleCoverBasis_alpha :
  S2xS2Quotient.Topology.roundCircleCoverBasis S2xS2Quotient.alpha =
    (S2xS2Quotient.Topology.roundCircleBlockFirst 0) S2xS2Quotient.Topology.sphereCubeClass +
      (S2xS2Quotient.Topology.roundCircleBlockSecond 0) S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.roundCircleCoverBasis_z (i : ℤ) :
  S2xS2Quotient.Topology.roundCircleCoverBasis (S2xS2Quotient.z i) =
    (S2xS2Quotient.Topology.roundCircleBlockSecond (-i - 1)) S2xS2Quotient.Topology.sphereCubeClass
S2xS2Quotient.Topology.roundCircleCoverBasis_equivariant (m : S2xS2Quotient.M) :
  S2xS2Quotient.Topology.roundCircleCoverBasis (S2xS2Quotient.tau m) =
    (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1)) (S2xS2Quotient.Topology.roundCircleCoverBasis m)
S2xS2Quotient.Topology.roundCircleCoverBasis_deck_alpha :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1))
      (S2xS2Quotient.Topology.roundCircleCoverBasis S2xS2Quotient.alpha) =
    S2xS2Quotient.Topology.roundCircleCoverBasis S2xS2Quotient.alpha +
      2 • S2xS2Quotient.Topology.roundCircleCoverBasis (S2xS2Quotient.z 0)
S2xS2Quotient.Topology.roundCircleCoverBasis_deck_z (i : ℤ) :
  (S2xS2Quotient.Topology.roundCircleDeckPiTwo (-1))
      (S2xS2Quotient.Topology.roundCircleCoverBasis (S2xS2Quotient.z i)) =
    S2xS2Quotient.Topology.roundCircleCoverBasis (S2xS2Quotient.z (i + 1))
S2xS2Quotient.Topology.roundCircleModelGroupEquiv (C : ℤ) :
  S2xS2Quotient.G C ≃*
    FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel)
      (S2xS2Quotient.Topology.winding S2xS2Quotient.Topology.roundCircleGenerator C)
S2xS2Quotient.Topology.roundCircleModelGroupEquiv_Wa (C : ℤ) :
  (S2xS2Quotient.Topology.roundCircleModelGroupEquiv C) (S2xS2Quotient.Wa C) =
    S2xS2Quotient.Topology.WaLift S2xS2Quotient.Topology.roundCircleGenerator C
S2xS2Quotient.Topology.roundCircleModelGroupEquiv_Wb (C : ℤ) :
  (S2xS2Quotient.Topology.roundCircleModelGroupEquiv C) (S2xS2Quotient.Wb C) =
    S2xS2Quotient.Topology.roundCircleCoverDeckData.WbLoop C
S2xS2Quotient.Topology.roundCircleModelGroupEquiv_zeta (C i : ℤ) :
  (S2xS2Quotient.Topology.roundCircleModelGroupEquiv C) (S2xS2Quotient.zeta C i) =
    S2xS2Quotient.Topology.roundCircleCoverDeckData.zetaLoop C i
S2xS2Quotient.Topology.roundCircle_model_characterization
  (γ : S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) :
  ∃ C,
    Nonempty
      (S2xS2Quotient.G C ≃*
        FundamentalGroup (S2xS2Quotient.Topology.FreeLoop S2xS2Quotient.Topology.RoundCircleModel) γ)
S2xS2Quotient.Topology.roundCircle_target_characterization {Y : Type} [TopologicalSpace Y]
  (hModel : Nonempty (ContinuousMap.HomotopyEquiv S2xS2Quotient.Topology.RoundCircleModel Y))
  (γ : S2xS2Quotient.Topology.FreeLoop Y) :
  ∃ C, Nonempty (S2xS2Quotient.G C ≃* FundamentalGroup (S2xS2Quotient.Topology.FreeLoop Y) γ)
