module Algebra.Group.Concrete.FinitelyComplete {β} where
Finite limits of concrete groupsπ
Since the category of concrete groups is equivalent to the category of groups, and the latter is finitely complete, then so is the former.
ConcreteGroups-finitely-complete : Finitely-complete (ConcreteGroups β) ConcreteGroups-finitely-complete = subst Finitely-complete (sym (eqvβpath ConcreteGroups-is-category Groups-is-category _ ΟβF-is-equivalence)) Groups-finitely-complete
However, the construction of binary products of concrete groups (corresponding to the direct product of groups) is natural enough to spell out explicitly: one can simply take the product of the underlying groupoids!
Direct-product-concrete : ConcreteGroup β β ConcreteGroup β β ConcreteGroup β Direct-product-concrete G H .B = B G Γβ B H Direct-product-concrete G H .has-is-connected = is-connectedβis-connectedβ $ Γ-is-n-connected 2 (is-connectedββis-connected (G .has-is-connected)) (is-connectedββis-connected (H .has-is-connected)) Direct-product-concrete G H .has-is-groupoid = Γ-is-hlevel 3 (G .has-is-groupoid) (H .has-is-groupoid) ConcreteGroups-products : (X Y : ConcreteGroup β) β Product (ConcreteGroups β) X Y ConcreteGroups-products X Y = prod where prod : Product (ConcreteGroups β) X Y prod .apex = Direct-product-concrete X Y prod .Οβ = fstβ prod .Οβ = sndβ prod .has-is-product .β¨_,_β© f g .fst x = f # x , g # x prod .has-is-product .β¨_,_β© f g .snd = f .snd ,β g .snd prod .has-is-product .Οβββ¨β© = funextβ (Ξ» _ β refl) (β-idr _) prod .has-is-product .Οβββ¨β© = funextβ (Ξ» _ β refl) (β-idr _) prod .has-is-product .unique {Q} {f} {g} {u} p1 p2 = funextβ (Ξ» x β p1 #β x ,β p2 #β x) (fix β square) where square : Square (p1 #β pt Q ,β p2 #β pt Q) ((fstβ ββ u) .snd ,β (sndβ ββ u) .snd) (f .snd ,β g .snd) refl square i = p1 i .snd ,β p2 i .snd fix : u .snd β‘ ((fstβ ββ u) .snd ,β (sndβ ββ u) .snd) fix i = β-idr (ap fst (u .snd)) (~ i) ,β β-idr (ap snd (u .snd)) (~ i)
Similarly, the terminal concrete group is just the unit type.
Terminal-concrete : ConcreteGroup β Terminal-concrete .B = Lift _ β€ , _ Terminal-concrete .has-is-connected = is-connectedβis-connectedβ (n-connected 2) Terminal-concrete .has-is-groupoid = hlevel 3