{-# 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