ProCGroups.Categorical.PushoutSquares

32 Theorem | 14 Definition | 2 Abbreviation | 1 Structure | 1 Instance

This module studies pushout squares for pro cgroups. The abstract free product used as the carrier before imposing pushout relations. The relators identifying the two legs of a group cospan inside the free product.

import
Imported by

Declarations

abbrev PushoutFreeProduct (H₁ H₂ : Type u) [Group H₁] [Group H₂] :=
  Monoid.Coprod H₁ H₂

The abstract free product used as the carrier before imposing pushout relations.

def pushoutRelators (β₁ : H →* H₁) (β₂ : H →* H₂) :
    Set (PushoutFreeProduct H₁ H₂) :=
  {z | ∃ h : H,
    z = (Monoid.Coprod.inl (β₁ h) : PushoutFreeProduct H₁ H₂)⁻¹ *
      (Monoid.Coprod.inr (β₂ h) : PushoutFreeProduct H₁ H₂)}

The relators identifying the two legs of a group cospan inside the free product.

def pushoutNormalClosure (β₁ : H →* H₁) (β₂ : H →* H₂) :
    Subgroup (PushoutFreeProduct H₁ H₂) :=
  Subgroup.normalClosure (pushoutRelators β₁ β₂)

The normal subgroup generated by the cospan-identifying relators.

instance pushoutNormalClosure_normal (β₁ : H →* H₁) (β₂ : H →* H₂) :
    (pushoutNormalClosure β₁ β₂).Normal :=
  Subgroup.normalClosure_normal

The relator closure used in the concrete pushout is normal.

abbrev Carrier (β₁ : H →* H₁) (β₂ : H →* H₂) :=
  PushoutFreeProduct H₁ H₂ ⧸ pushoutNormalClosure β₁ β₂

Algebraic group pushout carrier: the free product modulo the normal closure of \(\operatorname{inl}(\beta_1 h)^{-1} * \operatorname{inr}(\beta_2 h)\).

def inl (β₁ : H →* H₁) (β₂ : H →* H₂) :
    H₁ →* Carrier β₁ β₂ :=
  (QuotientGroup.mk' (pushoutNormalClosure β₁ β₂)).comp Monoid.Coprod.inl

The left structural map into the algebraic pushout.

def inr (β₁ : H →* H₁) (β₂ : H →* H₂) :
    H₂ →* Carrier β₁ β₂ :=
  (QuotientGroup.mk' (pushoutNormalClosure β₁ β₂)).comp Monoid.Coprod.inr

The right structural map into the algebraic pushout.

theorem inl_comp_eq_inr_comp
    (β₁ : H →* H₁) (β₂ : H →* H₂) :
    (inl β₁ β₂).comp β₁ = (inr β₁ β₂).comp β₂

The algebraic pushout maps coequalize the original cospan.

Show proof
noncomputable def concretePushoutDesc
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    {K : Type u} [Group K]
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    Carrier β₁ β₂ →* K :=
  let F : PushoutFreeProduct H₁ H₂ →* K := Monoid.Coprod.lift φ₁ φ₂
  QuotientGroup.lift (pushoutNormalClosure β₁ β₂) F <| by
    refine Subgroup.normalClosure_le_normal ?_
    rintro z ⟨h, rfl⟩
    change F ((Monoid.Coprod.inl (β₁ h) : PushoutFreeProduct H₁ H₂)⁻¹ *
        (Monoid.Coprod.inr (β₂ h) : PushoutFreeProduct H₁ H₂)) = 1
    rw [map_mul, map_inv]
    have hleft :
        F (Monoid.Coprod.inl (β₁ h) : PushoutFreeProduct H₁ H₂) = φ₁ (β₁ h) :=
      DFunLike.congr_fun (Monoid.Coprod.lift_comp_inl φ₁ φ₂) (β₁ h)
    have hright :
        F (Monoid.Coprod.inr (β₂ h) : PushoutFreeProduct H₁ H₂) = φ₂ (β₂ h) :=
      DFunLike.congr_fun (Monoid.Coprod.lift_comp_inr φ₁ φ₂) (β₂ h)
    have hcomp : φ₁ (β₁ h) = φ₂ (β₂ h) := DFunLike.congr_fun hφ h
    rw [hleft, hright, hcomp]
    simp only [inv_mul_cancel]

The concrete pushout descent map is characterized by its compatibility with the two canonical inclusions.

@[simp 900] theorem concretePushoutDesc_inl
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    {K : Type u} [Group K]
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (concretePushoutDesc β₁ β₂ φ₁ φ₂ hφ).comp (inl β₁ β₂) = φ₁

The concrete pushout descent map is compatible with the left inclusion.

Show proof
@[simp 900] theorem concretePushoutDesc_inr
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    {K : Type u} [Group K]
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (concretePushoutDesc β₁ β₂ φ₁ φ₂ hφ).comp (inr β₁ β₂) = φ₂

The concrete pushout descent map is compatible with the right inclusion.

Show proof
def IsPushoutSquare (β₁ : H →* H₁) (β₂ : H →* H₂)
    (α₁ : H₁ →* G) (α₂ : H₂ →* G) : Prop :=
  α₁.comp β₁ = α₂.comp β₂ ∧
    ∀ ⦃K : Type u⦄ [Group K] (φ₁ : H₁ →* K) (φ₂ : H₂ →* K),
      φ₁.comp β₁ = φ₂.comp β₂ →
      ∃! φ : G →* K, φ.comp α₁ = φ₁ ∧ φ.comp α₂ = φ₂

Pushout squares in the category of groups.

theorem concretePushout_isPushoutSquare (β₁ : H →* H₁) (β₂ : H →* H₂) :
    IsPushoutSquare β₁ β₂ (inl β₁ β₂) (inr β₁ β₂)

The algebraic pushout carrier satisfies the ordinary group pushout universal property.

Show proof
noncomputable def pushoutDesc
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) : G →* K :=
  Classical.choose (ExistsUnique.exists (hpo.2 φ₁ φ₂ hφ))

The pushout universal property supplies the induced morphism.

theorem pushoutDesc_spec
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDesc hpo φ₁ φ₂ hφ).comp α₁ = φ₁ ∧
      (pushoutDesc hpo φ₁ φ₂ hφ).comp α₂ = φ₂

The chosen pushout descent map has the prescribed left and right composites.

Show proof
@[simp] theorem pushoutDesc_left
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDesc hpo φ₁ φ₂ hφ).comp α₁ = φ₁

The left composite of the chosen pushout descent map is the prescribed left leg.

Show proof
@[simp] theorem pushoutDesc_right
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDesc hpo φ₁ φ₂ hφ).comp α₂ = φ₂

The right composite of the chosen pushout descent map is the prescribed right leg.

Show proof
theorem pushoutDesc_uniq
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (φ₁ : H₁ →* K) (φ₂ : H₂ →* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂)
    {ψ : G →* K}
    (hψ : ψ.comp α₁ = φ₁ ∧ ψ.comp α₂ = φ₂) :
    ψ = pushoutDesc hpo φ₁ φ₂ hφ

Uniqueness of the chosen pushout descent map.

Show proof
@[simp] theorem pushoutDesc_self
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂) :
    pushoutDesc hpo α₁ α₂ hpo.1 = MonoidHom.id G

The distinguished map from a pushout object to itself is the identity.

Show proof
theorem pushout_hom_ext
    {β₁ : H →* H₁} {β₂ : H →* H₂}
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {K : Type u} [Group K]
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    {ψ ψ' : G →* K}
    (h₁ : ψ.comp α₁ = ψ'.comp α₁)
    (h₂ : ψ.comp α₂ = ψ'.comp α₂) :
    ψ = ψ'

Extensionality of morphisms out of a pushout object.

Show proof
noncomputable def pushoutMapOfIsPushout
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    G →* G' :=
  pushoutDesc hpo α₁' α₂' hpo'.1

The canonical comparison map between two pushout objects of the same cospan.

@[simp 900] theorem pushoutMapOfIsPushout_self
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂) :
    pushoutMapOfIsPushout β₁ β₂ hpo hpo = MonoidHom.id G

The canonical comparison map from a pushout object to itself is the identity.

Show proof
@[simp 900] theorem pushoutMapOfIsPushout_left
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutMapOfIsPushout β₁ β₂ hpo hpo').comp α₁ = α₁'

The left composite of the canonical comparison map between pushout objects is the prescribed left leg.

Show proof
@[simp 900] theorem pushoutMapOfIsPushout_right
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutMapOfIsPushout β₁ β₂ hpo hpo').comp α₂ = α₂'

The right composite of the canonical comparison map between pushout objects is the prescribed right leg.

Show proof
theorem bijective_pushoutMapOfIsPushout
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    Function.Bijective (pushoutMapOfIsPushout β₁ β₂ hpo hpo')

Any two pushout objects of the same cospan are canonically isomorphic.

Show proof
noncomputable def pushoutEquivOfIsPushout
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    G ≃* G' :=
  MulEquiv.ofBijective
    (pushoutMapOfIsPushout β₁ β₂ hpo hpo')
    (bijective_pushoutMapOfIsPushout β₁ β₂ hpo hpo')

The canonical multiplicative equivalence between two pushout objects of the same cospan.

@[simp] theorem pushoutEquivOfIsPushout_left
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutEquivOfIsPushout β₁ β₂ hpo hpo').toMonoidHom.comp α₁ = α₁'

The left composite of the canonical pushout equivalence is the prescribed left leg.

Show proof
@[simp 900] theorem pushoutEquivOfIsPushout_right
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutEquivOfIsPushout β₁ β₂ hpo hpo').toMonoidHom.comp α₂ = α₂'

The right composite of the canonical pushout equivalence is the prescribed right leg.

Show proof
def HasTopologicalPushoutProperty (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (α₁ : H₁ →ₜ* G) (α₂ : H₂ →ₜ* G) : Prop :=
  α₁.comp β₁ = α₂.comp β₂ ∧
    ∀ ⦃K : Type u⦄ [Group K] [TopologicalSpace K] [IsTopologicalGroup K],
      ∀ (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K),
      φ₁.comp β₁ = φ₂.comp β₂ →
      ∃! φ : G →ₜ* K, φ.comp α₁ = φ₁ ∧ φ.comp α₂ = φ₂

The continuous pushout property is tested by all topological-group target objects.

def HasProfiniteTestPushoutProperty (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (α₁ : H₁ →ₜ* G) (α₂ : H₂ →ₜ* G) : Prop :=
  α₁.comp β₁ = α₂.comp β₂ ∧
    ∀ ⦃K : Type u⦄ [Group K] [TopologicalSpace K] [IsTopologicalGroup K],
      IsProfiniteGroup K →
      ∀ (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K),
      φ₁.comp β₁ = φ₂.comp β₂ →
      ∃! φ : G →ₜ* K, φ.comp α₁ = φ₁ ∧ φ.comp α₂ = φ₂

The continuous pushout property is tested by profinite target objects. The property tests the square against profinite objects without requiring the four objects of the square themselves to be profinite.

structure IsProfinitePushoutSquare (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (α₁ : H₁ →ₜ* G) (α₂ : H₂ →ₜ* G) : Prop where
  source_profinite : IsProfiniteGroup H
  left_profinite : IsProfiniteGroup H₁
  right_profinite : IsProfiniteGroup H₂
  pushout_profinite : IsProfiniteGroup G
  property : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂

A genuine profinite pushout square: all four objects are profinite, and the square has the continuous universal property tested by profinite target objects.

noncomputable def pushoutDescCont
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hK : IsProfiniteGroup K)
    (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) : G →ₜ* K :=
  Classical.choose (ExistsUnique.exists (hpo.2 (K := K) hK φ₁ φ₂ hφ))

Chosen continuous morphism induced by the profinite pushout universal property.

theorem pushoutDescCont_spec
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hK : IsProfiniteGroup K)
    (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDescCont hpo hK φ₁ φ₂ hφ).comp α₁ = φ₁ ∧
      (pushoutDescCont hpo hK φ₁ φ₂ hφ).comp α₂ = φ₂

Specification of the chosen continuous pushout descent map.

Show proof
@[simp] theorem pushoutDescCont_left
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hK : IsProfiniteGroup K)
    (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDescCont hpo hK φ₁ φ₂ hφ).comp α₁ = φ₁

The left composite of the chosen continuous pushout descent map is the prescribed left leg.

Show proof
@[simp] theorem pushoutDescCont_right
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hK : IsProfiniteGroup K)
    (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂) :
    (pushoutDescCont hpo hK φ₁ φ₂ hφ).comp α₂ = φ₂

The right composite of the chosen continuous pushout descent map is the prescribed right leg.

Show proof
theorem pushoutDescCont_uniq
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hK : IsProfiniteGroup K)
    (φ₁ : H₁ →ₜ* K) (φ₂ : H₂ →ₜ* K)
    (hφ : φ₁.comp β₁ = φ₂.comp β₂)
    {ψ : G →ₜ* K}
    (hψ : ψ.comp α₁ = φ₁ ∧ ψ.comp α₂ = φ₂) :
    ψ = pushoutDescCont hpo hK φ₁ φ₂ hφ

Uniqueness of the chosen continuous pushout descent map.

Show proof
@[simp 900] theorem pushoutDescCont_self
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hG : IsProfiniteGroup G) :
    pushoutDescCont hpo hG α₁ α₂ hpo.1 = ContinuousMonoidHom.id G

The distinguished map from a profinite pushout object to itself is the identity.

Show proof
theorem pushoutCont_hom_ext
    {β₁ : H →ₜ* H₁} {β₂ : H →ₜ* H₂}
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {K : Type u} [Group K] [TopologicalSpace K] [IsTopologicalGroup K]
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    {ψ ψ' : G →ₜ* K}
    (hK : IsProfiniteGroup K)
    (h₁ : ψ.comp α₁ = ψ'.comp α₁)
    (h₂ : ψ.comp α₂ = ψ'.comp α₂) :
    ψ = ψ'

Extensionality of continuous morphisms out of a profinite pushout object.

Show proof
noncomputable def pushoutContMapOfIsPushout
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG' : IsProfiniteGroup G') :
    G →ₜ* G' :=
  pushoutDescCont hpo hG' α₁' α₂' hpo'.1

The canonical comparison map between two profinite pushout objects of the same cospan.

@[simp 900] theorem pushoutContMapOfIsPushout_self
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hG : IsProfiniteGroup G) :
    pushoutContMapOfIsPushout β₁ β₂ hpo hpo hG = ContinuousMonoidHom.id G

The canonical comparison map from a profinite pushout object to itself is the identity.

Show proof
@[simp 900] theorem pushoutContMapOfIsPushout_left
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG' : IsProfiniteGroup G') :
    (pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG').comp α₁ = α₁'

The left composite of the canonical comparison map between profinite pushout objects is the prescribed left leg.

Show proof
@[simp 900] theorem pushoutContMapOfIsPushout_right
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG' : IsProfiniteGroup G') :
    (pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG').comp α₂ = α₂'

The right composite of the canonical comparison map between profinite pushout objects is the prescribed right leg.

Show proof
theorem bijective_pushoutContMapOfIsPushout
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    Function.Bijective (pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG')

Any two profinite pushout objects of the same cospan are canonically bijective.

Show proof
noncomputable def pushoutContEquivOfIsPushout
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    G ≃ₜ* G' := by
  letI : CompactSpace G := IsProfiniteGroup.compactSpace hG
  letI : T2Space G' := IsProfiniteGroup.t2Space hG'
  exact ContinuousMulEquiv.ofBijectiveCompactToT2
    (pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG')
    (pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG').continuous_toFun
    (bijective_pushoutContMapOfIsPushout β₁ β₂ hpo hpo' hG hG')

The canonical continuous multiplicative equivalence between two profinite pushout objects.

@[simp] theorem pushoutContEquivOfIsPushout_left
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    ((pushoutContEquivOfIsPushout β₁ β₂ hpo hpo' hG hG' : G →ₜ* G').comp α₁) = α₁'

The left composite of the canonical continuous pushout equivalence is the prescribed left leg.

Show proof
@[simp] theorem pushoutContEquivOfIsPushout_right
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    ((pushoutContEquivOfIsPushout β₁ β₂ hpo hpo' hG hG' : G →ₜ* G').comp α₂) = α₂'

The right composite of the canonical continuous pushout equivalence is the prescribed right leg.

Show proof
@[simp 900] theorem pushoutEquivOfIsPushout_symm_left
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutEquivOfIsPushout β₁ β₂ hpo hpo').symm.toMonoidHom.comp α₁' = α₁

Left-leg formula for the inverse pushout comparison equivalence.

Show proof
@[simp 900] theorem pushoutEquivOfIsPushout_symm_right
    {α₁ : H₁ →* G} {α₂ : H₂ →* G}
    {α₁' : H₁ →* G'} {α₂' : H₂ →* G'}
    (β₁ : H →* H₁) (β₂ : H →* H₂)
    (hpo : IsPushoutSquare β₁ β₂ α₁ α₂)
    (hpo' : IsPushoutSquare β₁ β₂ α₁' α₂') :
    (pushoutEquivOfIsPushout β₁ β₂ hpo hpo').symm.toMonoidHom.comp α₂' = α₂

Right-leg formula for the inverse pushout comparison equivalence.

Show proof
@[simp 900] theorem pushoutContEquivOfIsPushout_symm_left
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    (((pushoutContEquivOfIsPushout β₁ β₂ hpo hpo' hG hG').symm : G' →ₜ* G).comp α₁') = α₁

Left-leg formula for the inverse profinite pushout comparison equivalence.

Show proof
@[simp 900] theorem pushoutContEquivOfIsPushout_symm_right
    {α₁ : H₁ →ₜ* G} {α₂ : H₂ →ₜ* G}
    {α₁' : H₁ →ₜ* G'} {α₂' : H₂ →ₜ* G'}
    (β₁ : H →ₜ* H₁) (β₂ : H →ₜ* H₂)
    (hpo : HasProfiniteTestPushoutProperty β₁ β₂ α₁ α₂)
    (hpo' : HasProfiniteTestPushoutProperty β₁ β₂ α₁' α₂')
    (hG : IsProfiniteGroup G) (hG' : IsProfiniteGroup G') :
    (((pushoutContEquivOfIsPushout β₁ β₂ hpo hpo' hG hG').symm : G' →ₜ* G).comp α₂') = α₂

Right-leg formula for the inverse profinite pushout comparison equivalence.

Show proof