# Noncoherent H-spaces
```agda
module structured-types.noncoherent-h-spaces where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.unital-binary-operations
open import foundation.universe-levels
open import structured-types.pointed-types
```
</details>
## Idea
A **noncoherent H-space** is a [pointed type](structured-types.pointed-types.md)
`A` [equipped](foundation.structure.md) with a binary operation `μ` and
[homotopies](foundation-core.homotopies.md) `(λ x → μ point x) ~ id` and
`λ x → μ x point ~ id`. If `A` is a [connected](foundation.connected-types.md)
H-space, then `λ x → μ a x` and `λ x → μ x a` are
[equivalences](foundation-core.equivalences.md) for each `a : A`.
## Definitions
### Unital binary operations on pointed types
```agda
unit-laws-mul-Pointed-Type :
{l : Level} (A : Pointed-Type l)
(μ : (x y : type-Pointed-Type A) → type-Pointed-Type A) → UU l
unit-laws-mul-Pointed-Type A μ = unit-laws μ (point-Pointed-Type A)
unital-mul-Pointed-Type :
{l : Level} → Pointed-Type l → UU l
unital-mul-Pointed-Type A =
Σ ( type-Pointed-Type A → type-Pointed-Type A → type-Pointed-Type A)
( unit-laws-mul-Pointed-Type A)
```
### Noncoherent H-Spaces
```agda
noncoherent-h-space-structure :
{l : Level} (A : Pointed-Type l) → UU l
noncoherent-h-space-structure A =
Σ ( (x y : type-Pointed-Type A) → type-Pointed-Type A)
( λ μ → unit-laws μ (point-Pointed-Type A))
Noncoherent-H-Space : (l : Level) → UU (lsuc l)
Noncoherent-H-Space l = Σ (Pointed-Type l) (noncoherent-h-space-structure)
module _
{l : Level} (A : Noncoherent-H-Space l)
where
pointed-type-Noncoherent-H-Space : Pointed-Type l
pointed-type-Noncoherent-H-Space = pr1 A
type-Noncoherent-H-Space : UU l
type-Noncoherent-H-Space = type-Pointed-Type pointed-type-Noncoherent-H-Space
point-Noncoherent-H-Space : type-Noncoherent-H-Space
point-Noncoherent-H-Space =
point-Pointed-Type pointed-type-Noncoherent-H-Space
mul-Noncoherent-H-Space :
type-Noncoherent-H-Space →
type-Noncoherent-H-Space →
type-Noncoherent-H-Space
mul-Noncoherent-H-Space = pr1 (pr2 A)
unit-laws-mul-Noncoherent-H-Space :
unit-laws mul-Noncoherent-H-Space point-Noncoherent-H-Space
unit-laws-mul-Noncoherent-H-Space = pr2 (pr2 A)
left-unit-law-mul-Noncoherent-H-Space :
(x : type-Noncoherent-H-Space) →
mul-Noncoherent-H-Space point-Noncoherent-H-Space x = x
left-unit-law-mul-Noncoherent-H-Space = pr1 unit-laws-mul-Noncoherent-H-Space
right-unit-law-mul-Noncoherent-H-Space :
(x : type-Noncoherent-H-Space) →
mul-Noncoherent-H-Space x point-Noncoherent-H-Space = x
right-unit-law-mul-Noncoherent-H-Space = pr2 unit-laws-mul-Noncoherent-H-Space
```