ProCGroups.ProC.Category.Pullbacks

13 Theorem | 4 Definition

This module proves the universal-property part of the construction. It packages finite-stage data into completed maps and shows the required extension and uniqueness statements.

import
Imported by

Declarations

def IsPullbackSquare
    (alpha1 : G ⟶ H1) (alpha2 : G ⟶ H2)
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H) : Prop :=
  alpha1 ≫ beta1 = alpha2 ≫ beta2 ∧
    ∀ ⦃K : ProCGrp ProC⦄ (phi1 : K ⟶ H1) (phi2 : K ⟶ H2),
      phi1 ≫ beta1 = phi2 ≫ beta2 →
        ∃! phi : K ⟶ G, phi ≫ alpha1 = phi1 ∧ phi ≫ alpha2 = phi2

A pullback square in the bundled category pro-\(C\) groups.

noncomputable def pullbackLift
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (phi1 : K ⟶ H1) (phi2 : K ⟶ H2)
    (hphi : phi1 ≫ beta1 = phi2 ≫ beta2) : K ⟶ G :=
  Classical.choose (ExistsUnique.exists (hpb.2 phi1 phi2 hphi))

The pro-\(C\) pullback universal property supplies the induced morphism.

theorem pullbackLift_spec
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (phi1 : K ⟶ H1) (phi2 : K ⟶ H2)
    (hphi : phi1 ≫ beta1 = phi2 ≫ beta2) :
    pullbackLift hpb phi1 phi2 hphi ≫ alpha1 = phi1 ∧
      pullbackLift hpb phi1 phi2 hphi ≫ alpha2 = phi2

The chosen pullback lift has the prescribed composites.

Show proof
@[simp] theorem pullbackLift_left
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (phi1 : K ⟶ H1) (phi2 : K ⟶ H2)
    (hphi : phi1 ≫ beta1 = phi2 ≫ beta2) :
    pullbackLift hpb phi1 phi2 hphi ≫ alpha1 = phi1

The pullback lift has the prescribed left projection.

Show proof
@[simp] theorem pullbackLift_right
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (phi1 : K ⟶ H1) (phi2 : K ⟶ H2)
    (hphi : phi1 ≫ beta1 = phi2 ≫ beta2) :
    pullbackLift hpb phi1 phi2 hphi ≫ alpha2 = phi2

The pullback lift has the prescribed right projection.

Show proof
theorem pullbackLift_unique
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (phi1 : K ⟶ H1) (phi2 : K ⟶ H2)
    (hphi : phi1 ≫ beta1 = phi2 ≫ beta2)
    {psi : K ⟶ G}
    (hpsi : psi ≫ alpha1 = phi1 ∧ psi ≫ alpha2 = phi2) :
    psi = pullbackLift hpb phi1 phi2 hphi

Uniqueness of the chosen pullback lift.

Show proof
@[simp] theorem pullbackLift_self
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2) :
    pullbackLift hpb alpha1 alpha2 hpb.1 = 𝟙 G

The self-lift of a pullback object is the identity morphism.

Show proof
theorem pullback_hom_ext
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    {K : ProCGrp ProC}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    {psi psi' : K ⟶ G}
    (h1 : psi ≫ alpha1 = psi' ≫ alpha1)
    (h2 : psi ≫ alpha2 = psi' ≫ alpha2) :
    psi = psi'

Extensionality of morphisms into a pro-\(C\) pullback object.

Show proof
noncomputable def pullbackMapOfIsPullback
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    G' ⟶ G :=
  pullbackLift hpb alpha1' alpha2' hpb'.1

The canonical comparison map from one pro-\(C\) pullback object to another.

@[simp] theorem pullbackMapOfIsPullback_self
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2) :
    pullbackMapOfIsPullback beta1 beta2 hpb hpb = 𝟙 G

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

Show proof
@[simp] theorem pullbackMapOfIsPullback_left
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫ alpha1 = alpha1'

The comparison map between pullback objects respects the left projection.

Show proof
@[simp] theorem pullbackMapOfIsPullback_right
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫ alpha2 = alpha2'

The comparison map between pullback objects respects the right projection.

Show proof
noncomputable def pullbackIsoOfIsPullback
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    G ≅ G' where
  hom := pullbackMapOfIsPullback beta1 beta2 hpb' hpb
  inv := pullbackMapOfIsPullback beta1 beta2 hpb hpb'
  hom_inv_id := by
    apply pullback_hom_ext hpb
    · calc
        (pullbackMapOfIsPullback beta1 beta2 hpb' hpb ≫
            pullbackMapOfIsPullback beta1 beta2 hpb hpb') ≫ alpha1 =
              pullbackMapOfIsPullback beta1 beta2 hpb' hpb ≫ alpha1' := by
          rw [Category.assoc, pullbackMapOfIsPullback_left]
        _ = alpha1 := pullbackMapOfIsPullback_left beta1 beta2 hpb' hpb
    · calc
        (pullbackMapOfIsPullback beta1 beta2 hpb' hpb ≫
            pullbackMapOfIsPullback beta1 beta2 hpb hpb') ≫ alpha2 =
              pullbackMapOfIsPullback beta1 beta2 hpb' hpb ≫ alpha2' := by
          rw [Category.assoc, pullbackMapOfIsPullback_right]
        _ = alpha2 := pullbackMapOfIsPullback_right beta1 beta2 hpb' hpb
  inv_hom_id := by
    apply pullback_hom_ext hpb'
    · calc
        (pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫
            pullbackMapOfIsPullback beta1 beta2 hpb' hpb) ≫ alpha1' =
              pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫ alpha1 := by
          rw [Category.assoc, pullbackMapOfIsPullback_left]
        _ = alpha1' := pullbackMapOfIsPullback_left beta1 beta2 hpb hpb'
    · calc
        (pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫
            pullbackMapOfIsPullback beta1 beta2 hpb' hpb) ≫ alpha2' =
              pullbackMapOfIsPullback beta1 beta2 hpb hpb' ≫ alpha2 := by
          rw [Category.assoc, pullbackMapOfIsPullback_right]
        _ = alpha2' := pullbackMapOfIsPullback_right beta1 beta2 hpb hpb'

Any two pro-\(C\) pullback objects of the same cospan are canonically isomorphic.

@[simp] theorem pullbackIsoOfIsPullback_hom_left
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    (pullbackIsoOfIsPullback beta1 beta2 hpb hpb').hom ≫ alpha1' = alpha1

The canonical pullback isomorphism respects the left projection.

Show proof
@[simp] theorem pullbackIsoOfIsPullback_hom_right
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {alpha1' : G' ⟶ H1} {alpha2' : G' ⟶ H2}
    (beta1 : H1 ⟶ H) (beta2 : H2 ⟶ H)
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2)
    (hpb' : IsPullbackSquare alpha1' alpha2' beta1 beta2) :
    (pullbackIsoOfIsPullback beta1 beta2 hpb hpb').hom ≫ alpha2' = alpha2

The canonical pullback isomorphism respects the right projection.

Show proof
theorem isPullbackSquare_of_hasProfiniteTestPullbackProperty
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    (hpb : ProCGroups.Categorical.HasProfiniteTestPullbackProperty
      alpha1.hom alpha2.hom beta1.hom beta2.hom) :
    IsPullbackSquare alpha1 alpha2 beta1 beta2

A concrete continuous profinite pullback square is a pullback in ProCGrp.

Show proof
theorem hasProfiniteTestPullbackProperty_of_isPullbackSquare_allFinite
    {G H H1 H2 : ProCGrp ProCGroups.ProC.allFiniteProC}
    {alpha1 : G ⟶ H1} {alpha2 : G ⟶ H2}
    {beta1 : H1 ⟶ H} {beta2 : H2 ⟶ H}
    (hpb : IsPullbackSquare alpha1 alpha2 beta1 beta2) :
    ProCGroups.Categorical.HasProfiniteTestPullbackProperty
      alpha1.hom alpha2.hom beta1.hom beta2.hom

For the all-finite predicate, the bundled ProCGrp pullback property is equivalent to the concrete profinite pullback property.

Show proof