# Higher groups
```agda
module higher-group-theory.higher-groups where
```
<details><summary>Imports</summary>
```agda
open import foundation.0-connected-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.full-subtypes
open import foundation.identity-types
open import foundation.images
open import foundation.mere-equality
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.unit-type
open import foundation.universe-levels
open import structured-types.h-spaces
open import structured-types.pointed-types
open import synthetic-homotopy-theory.loop-spaces
```
</details>
## Idea
An **∞-group** is just a [pointed](structured-types.pointed-types.md)
[connected](foundation.0-connected-types.md) type. Its underlying type is its
[loop space](synthetic-homotopy-theory.loop-spaces.md), and the classifying type
is the pointed connected type itself.
## Definition
```agda
∞-Group : (l : Level) → UU (lsuc l)
∞-Group l = Σ (Pointed-Type l) (λ X → is-0-connected (type-Pointed-Type X))
module _
{l : Level} (G : ∞-Group l)
where
classifying-pointed-type-∞-Group : Pointed-Type l
classifying-pointed-type-∞-Group = pr1 G
classifying-type-∞-Group : UU l
classifying-type-∞-Group =
type-Pointed-Type classifying-pointed-type-∞-Group
shape-∞-Group : classifying-type-∞-Group
shape-∞-Group =
point-Pointed-Type classifying-pointed-type-∞-Group
point-∞-Group : unit → classifying-type-∞-Group
point-∞-Group = point shape-∞-Group
abstract
is-0-connected-classifying-type-∞-Group :
is-0-connected classifying-type-∞-Group
is-0-connected-classifying-type-∞-Group = pr2 G
abstract
mere-eq-classifying-type-∞-Group :
(X Y : classifying-type-∞-Group) → mere-eq X Y
mere-eq-classifying-type-∞-Group =
mere-eq-is-0-connected
is-0-connected-classifying-type-∞-Group
abstract
is-full-subtype-im-point-∞-Group :
is-full-subtype (subtype-im point-∞-Group)
is-full-subtype-im-point-∞-Group x =
apply-universal-property-trunc-Prop
( mere-eq-classifying-type-∞-Group shape-∞-Group x)
( subtype-im point-∞-Group x)
( λ where refl → unit-trunc-Prop (star , refl))
compute-im-point-∞-Group :
im point-∞-Group ≃ classifying-type-∞-Group
compute-im-point-∞-Group =
equiv-inclusion-is-full-subtype
( subtype-im point-∞-Group)
( is-full-subtype-im-point-∞-Group)
abstract
elim-prop-classifying-type-∞-Group :
{l2 : Level} (P : classifying-type-∞-Group → Prop l2) →
type-Prop (P shape-∞-Group) →
((X : classifying-type-∞-Group) → type-Prop (P X))
elim-prop-classifying-type-∞-Group =
apply-dependent-universal-property-is-0-connected
shape-∞-Group
is-0-connected-classifying-type-∞-Group
h-space-∞-Group : H-Space l
h-space-∞-Group = Ω-H-Space classifying-pointed-type-∞-Group
pointed-type-∞-Group : Pointed-Type l
pointed-type-∞-Group = Ω classifying-pointed-type-∞-Group
type-∞-Group : UU l
type-∞-Group = type-Pointed-Type pointed-type-∞-Group
unit-∞-Group : type-∞-Group
unit-∞-Group = point-Pointed-Type pointed-type-∞-Group
mul-∞-Group : (x y : type-∞-Group) → type-∞-Group
mul-∞-Group = mul-Ω classifying-pointed-type-∞-Group
associative-mul-∞-Group :
(x y z : type-∞-Group) →
Id
( mul-∞-Group (mul-∞-Group x y) z)
( mul-∞-Group x (mul-∞-Group y z))
associative-mul-∞-Group = associative-mul-Ω classifying-pointed-type-∞-Group
left-unit-law-mul-∞-Group :
(x : type-∞-Group) → Id (mul-∞-Group unit-∞-Group x) x
left-unit-law-mul-∞-Group =
left-unit-law-mul-Ω classifying-pointed-type-∞-Group
right-unit-law-mul-∞-Group :
(y : type-∞-Group) → Id (mul-∞-Group y unit-∞-Group) y
right-unit-law-mul-∞-Group =
right-unit-law-mul-Ω classifying-pointed-type-∞-Group
coherence-unit-laws-mul-∞-Group :
left-unit-law-mul-∞-Group unit-∞-Group =
right-unit-law-mul-∞-Group unit-∞-Group
coherence-unit-laws-mul-∞-Group =
coherence-unit-laws-mul-Ω classifying-pointed-type-∞-Group
inv-∞-Group : type-∞-Group → type-∞-Group
inv-∞-Group = inv-Ω classifying-pointed-type-∞-Group
left-inverse-law-mul-∞-Group :
(x : type-∞-Group) → Id (mul-∞-Group (inv-∞-Group x) x) unit-∞-Group
left-inverse-law-mul-∞-Group =
left-inverse-law-mul-Ω classifying-pointed-type-∞-Group
right-inverse-law-mul-∞-Group :
(x : type-∞-Group) → Id (mul-∞-Group x (inv-∞-Group x)) unit-∞-Group
right-inverse-law-mul-∞-Group =
right-inverse-law-mul-Ω classifying-pointed-type-∞-Group
```