{-# OPTIONS --without-K --exact-split --safe #-} open import Fragment.Algebra.Signature module Fragment.Algebra.Homomorphism.Definitions (Σ : Signature) where open import Fragment.Algebra.Algebra Σ open import Level using (Level; _⊔_) open import Relation.Binary using (Setoid) open import Data.Vec using (Vec; map) open import Function using (Congruent) public private variable a b ℓ₁ ℓ₂ : Level Homomorphic : (S : Algebra {a} {ℓ₁}) (T : Algebra {b} {ℓ₂}) → (∥ S ∥ → ∥ T ∥) → Set (a ⊔ ℓ₂) Homomorphic S T h = ∀ {arity} → (f : ops Σ arity) → (xs : Vec ∥ S ∥ arity) → T ⟦ f ⟧ (map h xs) =[ T ] h (S ⟦ f ⟧ xs)