{-# OPTIONS --without-K --safe #-}
module Fragment.Examples.Semigroup.Types where
open import Fragment.Prelude
open import Level using (zero)
open import Function.Related
open import Function.Related.TypeIsomorphisms
using (×-isSemigroup; ⊎-isSemigroup)
open import Function.Inverse using (_↔_)
open import Data.Product using (_×_)
open import Data.Sum using (_⊎_)
×-semigroup = semigroup→model (×-isSemigroup bijection zero)
⊎-semigroup = semigroup→model (⊎-isSemigroup bijection zero)
×-assoc₁ : ∀ {A B C : Set} → (A × (B × C)) ↔ ((A × B) × C)
×-assoc₁ = fragment SemigroupFrex ×-semigroup
×-assoc₂ : ∀ {A B C : Set} → ((A × B) × (B × C)) ↔ (A × (B × B) × C)
×-assoc₂ = fragment SemigroupFrex ×-semigroup
⊎-assoc₁ : ∀ {A B C : Set} → (A ⊎ (B ⊎ C)) ↔ ((A ⊎ B) ⊎ C)
⊎-assoc₁ = fragment SemigroupFrex ⊎-semigroup
⊎-assoc₂ : ∀ {A B C : Set} → ((A ⊎ B) ⊎ (B ⊎ C)) ↔ (A ⊎ (B ⊎ B) ⊎ C)
⊎-assoc₂ = fragment SemigroupFrex ⊎-semigroup