123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117-------------------------------------------------------------------------- The Agda standard library---- Order morphisms------------------------------------------------------------------------ {-# OPTIONS --cubical-compatible --safe #-} open import Relation.Binary.Core using (Rel) module Relation.Binary.Morphism.Structures {a b} {A : Set a} {B : Set b} where open import Data.Product.Base using (_,_)open import Function.Definitionsopen import Level using (Level; _⊔_)open import Relation.Binary.Morphism.Definitions A B private variable ℓ₁ ℓ₂ ℓ₃ ℓ₄ : Level -------------------------------------------------------------------------- Relations------------------------------------------------------------------------ record IsRelHomomorphism (_∼₁_ : Rel A ℓ₁) (_∼₂_ : Rel B ℓ₂) (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂) where field cong : Homomorphic₂ _∼₁_ _∼₂_ ⟦_⟧ record IsRelMonomorphism (_∼₁_ : Rel A ℓ₁) (_∼₂_ : Rel B ℓ₂) (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂) where field isHomomorphism : IsRelHomomorphism _∼₁_ _∼₂_ ⟦_⟧ injective : Injective _∼₁_ _∼₂_ ⟦_⟧ open IsRelHomomorphism isHomomorphism public record IsRelIsomorphism (_∼₁_ : Rel A ℓ₁) (_∼₂_ : Rel B ℓ₂) (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂) where field isMonomorphism : IsRelMonomorphism _∼₁_ _∼₂_ ⟦_⟧ surjective : Surjective _∼₁_ _∼₂_ ⟦_⟧ open IsRelMonomorphism isMonomorphism public bijective : Bijective _∼₁_ _∼₂_ ⟦_⟧ bijective = injective , surjective -------------------------------------------------------------------------- Orders------------------------------------------------------------------------ record IsOrderHomomorphism (_≈₁_ : Rel A ℓ₁) (_≈₂_ : Rel B ℓ₂) (_≲₁_ : Rel A ℓ₃) (_≲₂_ : Rel B ℓ₄) (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂ ⊔ ℓ₃ ⊔ ℓ₄) where field cong : Homomorphic₂ _≈₁_ _≈₂_ ⟦_⟧ mono : Homomorphic₂ _≲₁_ _≲₂_ ⟦_⟧ module Eq where isRelHomomorphism : IsRelHomomorphism _≈₁_ _≈₂_ ⟦_⟧ isRelHomomorphism = record { cong = cong } isRelHomomorphism : IsRelHomomorphism _≲₁_ _≲₂_ ⟦_⟧ isRelHomomorphism = record { cong = mono } record IsOrderMonomorphism (_≈₁_ : Rel A ℓ₁) (_≈₂_ : Rel B ℓ₂) (_≲₁_ : Rel A ℓ₃) (_≲₂_ : Rel B ℓ₄) (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂ ⊔ ℓ₃ ⊔ ℓ₄) where field isOrderHomomorphism : IsOrderHomomorphism _≈₁_ _≈₂_ _≲₁_ _≲₂_ ⟦_⟧ injective : Injective _≈₁_ _≈₂_ ⟦_⟧ cancel : Injective _≲₁_ _≲₂_ ⟦_⟧ open IsOrderHomomorphism isOrderHomomorphism public hiding (module Eq) module Eq where isRelMonomorphism : IsRelMonomorphism _≈₁_ _≈₂_ ⟦_⟧ isRelMonomorphism = record { isHomomorphism = IsOrderHomomorphism.Eq.isRelHomomorphism isOrderHomomorphism ; injective = injective } isRelMonomorphism : IsRelMonomorphism _≲₁_ _≲₂_ ⟦_⟧ isRelMonomorphism = record { isHomomorphism = isRelHomomorphism ; injective = cancel } record IsOrderIsomorphism (_≈₁_ : Rel A ℓ₁) (_≈₂_ : Rel B ℓ₂) (_≲₁_ : Rel A ℓ₃) (_≲₂_ : Rel B ℓ₄) (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂ ⊔ ℓ₃ ⊔ ℓ₄) where field isOrderMonomorphism : IsOrderMonomorphism _≈₁_ _≈₂_ _≲₁_ _≲₂_ ⟦_⟧ surjective : Surjective _≈₁_ _≈₂_ ⟦_⟧ open IsOrderMonomorphism isOrderMonomorphism public hiding (module Eq) module Eq where isRelIsomorphism : IsRelIsomorphism _≈₁_ _≈₂_ ⟦_⟧ isRelIsomorphism = record { isMonomorphism = IsOrderMonomorphism.Eq.isRelMonomorphism isOrderMonomorphism ; surjective = surjective }