Agda UALib โ†‘


Term Operations

This section presents the Terms.Operations module of the Agda Universal Algebra Library.

Here we define term operations which are simply terms interpreted in a particular algebra, and we prove some compatibility properties of term operations.


{-# OPTIONS --without-K --exact-split --safe #-}

open import Algebras.Signatures using (Signature; ๐“ž; ๐“ฅ)

module Terms.Operations {๐‘† : Signature ๐“ž ๐“ฅ} where

open import Terms.Basic{๐‘† = ๐‘†} renaming (generator to โ„Š) public

Notation. In the line above, we renamed for notational convenience the generator constructor of the Term type, so from now on we use โ„Š in place of generator.

When we interpret a term in an algebra we call the resulting function a term operation. Given a term ๐‘ and an algebra ๐‘จ, we denote by ๐‘ ฬ‡ ๐‘จ the interpretation of ๐‘ in ๐‘จ. This is defined inductively as follows.

  1. If ๐‘ is a variable symbol x : X and if ๐‘Ž : X โ†’ โˆฃ ๐‘จ โˆฃ is a tuple of elements of โˆฃ ๐‘จ โˆฃ, then (๐‘ ฬ‡ ๐‘จ) ๐‘Ž := ๐‘Ž x.

  2. If ๐‘ = ๐‘“ ๐‘ก, where ๐‘“ : โˆฃ ๐‘† โˆฃ is an operation symbol, if ๐‘ก : โˆฅ ๐‘† โˆฅ ๐‘“ โ†’ ๐‘ป X is a tuple of terms, and if ๐‘Ž : X โ†’ โˆฃ ๐‘จ โˆฃ is a tuple from ๐‘จ, then we define (๐‘ ฬ‡ ๐‘จ) ๐‘Ž = (๐‘“ ๐‘ก ฬ‡ ๐‘จ) ๐‘Ž := (๐‘“ ฬ‚ ๐‘จ) (ฮป i โ†’ (๐‘ก i ฬ‡ ๐‘จ) ๐‘Ž).

Thus the interpretation of a term is defined by induction on the structure of the term, and the definition is formally implemented in the UALib as follows.


module _ {๐“ค ๐“ง : Universe}{X : ๐“ง ฬ‡ }  where

 -- new notation

 _โŸฆ_โŸง : (๐‘จ : Algebra ๐“ค ๐‘†) โ†’ Term X โ†’ (X โ†’ โˆฃ ๐‘จ โˆฃ) โ†’ โˆฃ ๐‘จ โˆฃ

 ๐‘จ โŸฆ โ„Š x โŸง = ฮป ฮท โ†’ ฮท x

 ๐‘จ โŸฆ node ๐‘“ ๐‘ก โŸง = ฮป ฮท โ†’ (๐‘“ ฬ‚ ๐‘จ) (ฮป i โ†’ (๐‘จ โŸฆ ๐‘ก i โŸง) ฮท)



 -- old notation:

 _ฬ‡_ : Term X โ†’ (๐‘จ : Algebra ๐“ค ๐‘†) โ†’ (X โ†’ โˆฃ ๐‘จ โˆฃ) โ†’ โˆฃ ๐‘จ โˆฃ

 (โ„Š x ฬ‡ ๐‘จ) ๐‘Ž = ๐‘Ž x

 (node ๐‘“ ๐‘ก ฬ‡ ๐‘จ) ๐‘Ž = (๐‘“ ฬ‚ ๐‘จ) ฮป i โ†’ (๐‘ก i ฬ‡ ๐‘จ) ๐‘Ž

It turns out that the intepretation of a term is the same as the free-lift (modulo argument order and assuming function extensionality).


 free-lift-interp : dfunext ๐“ฅ ๐“ค โ†’ (๐‘จ : Algebra ๐“ค ๐‘†)(ฮท : X โ†’ โˆฃ ๐‘จ โˆฃ)(p : Term X)
  โ†’                 (๐‘จ โŸฆ p โŸง) ฮท โ‰ก (free-lift ๐‘จ ฮท) p

 free-lift-interp _ ๐‘จ ฮท (โ„Š x) = refl
 free-lift-interp fe ๐‘จ ฮท (node ๐‘“ ๐‘ก) = ap (๐‘“ ฬ‚ ๐‘จ) (fe ฮป i โ†’ free-lift-interp fe ๐‘จ ฮท (๐‘ก i))

 -- old version
 free-lift-interp' : dfunext ๐“ฅ ๐“ค โ†’ (๐‘จ : Algebra ๐“ค ๐‘†)(h : X โ†’ โˆฃ ๐‘จ โˆฃ)(p : Term X)
  โ†’                 (p ฬ‡ ๐‘จ) h โ‰ก (free-lift ๐‘จ h) p

 free-lift-interp' _ ๐‘จ h (โ„Š x) = refl
 free-lift-interp' fe ๐‘จ h (node ๐‘“ ๐‘ก) = ap (๐‘“ ฬ‚ ๐‘จ) (fe ฮป i โ†’ free-lift-interp' fe ๐‘จ h (๐‘ก i))

If the algebra ๐‘จ happens to be ๐‘ป X, then we expect that โˆ€ ๐‘  we have (p ฬ‡ ๐‘ป X) ๐‘  โ‰ก p ๐‘ . But what is (๐‘ ฬ‡ ๐‘ป X) ๐‘  exactly? By definition, it depends on the form of ๐‘ as follows:

Now, assume ฯ• : hom ๐‘ป ๐‘จ. Then by comm-hom-term, we have โˆฃ ฯ• โˆฃ (p ฬ‡ ๐‘ป X) ๐‘  = (p ฬ‡ ๐‘จ) โˆฃ ฯ• โˆฃ โˆ˜ ๐‘ .

We claim that for all p : Term X there exists q : Term X and ๐”ฑ : X โ†’ โˆฃ ๐‘ป X โˆฃ such that p โ‰ก (q ฬ‡ ๐‘ป X) ๐”ฑ. We prove this fact as follows.


term-interp : {๐“ง : Universe}{X : ๐“ง ฬ‡} (๐‘“ : โˆฃ ๐‘† โˆฃ){๐‘  ๐‘ก : โˆฅ ๐‘† โˆฅ ๐‘“ โ†’ Term X}
 โ†’            ๐‘  โ‰ก ๐‘ก โ†’ node ๐‘“ ๐‘  โ‰ก (๐‘“ ฬ‚ ๐‘ป X) ๐‘ก

term-interp ๐‘“ {๐‘ }{๐‘ก} st = ap (node ๐‘“) st

module _ {๐“ง : Universe}{X : ๐“ง ฬ‡}{fe : dfunext ๐“ฅ (ov ๐“ง)} where

 term-gen : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ ฮฃ q ๊ž‰ โˆฃ ๐‘ป X โˆฃ , p โ‰ก (๐‘ป X โŸฆ q โŸง) โ„Š
 term-gen (โ„Š x) = (โ„Š x) , refl
 term-gen (node ๐‘“ ๐‘ก) = node ๐‘“ (ฮป i โ†’ โˆฃ term-gen (๐‘ก i) โˆฃ) , term-interp ๐‘“ (fe ฮป i โ†’ โˆฅ term-gen (๐‘ก i) โˆฅ)


 term-gen-agreement : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ (๐‘ป X โŸฆ p โŸง) โ„Š โ‰ก (๐‘ป X โŸฆ โˆฃ term-gen p โˆฃ โŸง) โ„Š
 term-gen-agreement (โ„Š x) = refl
 term-gen-agreement (node f ๐‘ก) = ap (f ฬ‚ ๐‘ป X) (fe ฮป x โ†’ term-gen-agreement (๐‘ก x))

 term-agreement : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ p โ‰ก  (๐‘ป X โŸฆ p โŸง) โ„Š
 term-agreement p = snd (term-gen p) โˆ™ (term-gen-agreement p)โปยน

 -- old version:
 term-gen' : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ ฮฃ q ๊ž‰ โˆฃ ๐‘ป X โˆฃ , p โ‰ก (q ฬ‡ ๐‘ป X) โ„Š
 term-gen' (โ„Š x) = (โ„Š x) , refl
 term-gen' (node ๐‘“ ๐‘ก) = node ๐‘“ (ฮป i โ†’ โˆฃ term-gen' (๐‘ก i) โˆฃ) , term-interp ๐‘“ (fe ฮป i โ†’ โˆฅ term-gen' (๐‘ก i) โˆฅ)


 term-gen-agreement' : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ (p ฬ‡ ๐‘ป X) โ„Š โ‰ก (โˆฃ term-gen' p โˆฃ ฬ‡ ๐‘ป X) โ„Š
 term-gen-agreement' (โ„Š x) = refl
 term-gen-agreement' (node f ๐‘ก) = ap (f ฬ‚ ๐‘ป X) (fe ฮป x โ†’ term-gen-agreement' (๐‘ก x))

 term-agreement' : (p : โˆฃ ๐‘ป X โˆฃ) โ†’ p โ‰ก (p ฬ‡ ๐‘ป X) โ„Š
 term-agreement' p = snd (term-gen' p) โˆ™ (term-gen-agreement' p)โปยน


Interpretation of terms in product algebras


module _ {๐“ค ๐“ฆ ๐“ง : Universe}{X : ๐“ง ฬ‡ }{I : ๐“ฆ ฬ‡} where

 interp-prod : dfunext ๐“ฅ (๐“ค โŠ” ๐“ฆ) โ†’ (p : Term X)(๐’œ : I โ†’ Algebra ๐“ค ๐‘†)(๐‘Ž : X โ†’ โˆ€ i โ†’ โˆฃ ๐’œ i โˆฃ)
  โ†’            (โจ… ๐’œ โŸฆ p โŸง) ๐‘Ž โ‰ก ฮป i โ†’  (๐’œ i โŸฆ p โŸง) (ฮป j โ†’ ๐‘Ž j i)

 interp-prod _ (โ„Š xโ‚) ๐’œ ๐‘Ž = refl

 interp-prod fe (node ๐‘“ ๐‘ก) ๐’œ ๐‘Ž = let IH = ฮป x โ†’ interp-prod fe (๐‘ก x) ๐’œ ๐‘Ž
  in
  (๐‘“ ฬ‚ โจ… ๐’œ) (ฮป x โ†’ (โจ… ๐’œ โŸฆ ๐‘ก x โŸง) ๐‘Ž)                     โ‰กโŸจ ap (๐‘“ ฬ‚ โจ… ๐’œ)(fe IH) โŸฉ
  (๐‘“ ฬ‚ โจ… ๐’œ)(ฮป x โ†’ ฮป i โ†’  (๐’œ i โŸฆ ๐‘ก x โŸง) ฮป j โ†’ ๐‘Ž j i)   โ‰กโŸจ refl โŸฉ
  (ฮป i โ†’ (๐‘“ ฬ‚ ๐’œ i) (ฮป x โ†’ (๐’œ i โŸฆ ๐‘ก x โŸง) ฮป j โ†’ ๐‘Ž j i))  โˆŽ

 -- inferred type: ๐‘ก : X โ†’ โˆฃ โจ… ๐’œ โˆฃ
 interp-prod2 : dfunext (๐“ค โŠ” ๐“ฆ โŠ” ๐“ง) (๐“ค โŠ” ๐“ฆ) โ†’ dfunext ๐“ฅ (๐“ค โŠ” ๐“ฆ) โ†’ (p : Term X)(๐’œ : I โ†’ Algebra ๐“ค ๐‘†)
  โ†’             โจ… ๐’œ โŸฆ p โŸง โ‰ก (ฮป ๐‘ก โ†’ (ฮป i โ†’ (๐’œ i โŸฆ p โŸง) ฮป x โ†’ ๐‘ก x i))

 interp-prod2 _ _ (โ„Š xโ‚) ๐’œ = refl

 interp-prod2 fe fev (node f t) ๐’œ = fe ฮป (tup : X โ†’ โˆฃ โจ… ๐’œ โˆฃ) โ†’
  let IH = ฮป x โ†’ interp-prod fev (t x) ๐’œ  in
  let tA = ฮป z โ†’  โจ… ๐’œ โŸฆ t z โŸง in
  (f ฬ‚ โจ… ๐’œ)(ฮป s โ†’ tA s tup)                          โ‰กโŸจ ap(f ฬ‚ โจ… ๐’œ)(fev ฮป x โ†’ IH x tup)โŸฉ
  (f ฬ‚ โจ… ๐’œ)(ฮป s โ†’ ฮป j โ†’ (๐’œ j โŸฆ t s โŸง) (ฮป โ„“ โ†’ tup โ„“ j))   โ‰กโŸจ refl โŸฉ
  (ฮป i โ†’ (f ฬ‚ ๐’œ i)(ฮป s โ†’  (๐’œ i โŸฆ t s โŸง) (ฮป โ„“ โ†’ tup โ„“ i))) โˆŽ

module _ {๐“ค ๐“ง : Universe}{X : ๐“ง ฬ‡ } where

 interp-prod' : {๐“ฆ : Universe} โ†’ dfunext ๐“ฅ (๐“ค โŠ” ๐“ฆ)
  โ†’             (p : Term X){I : ๐“ฆ ฬ‡}
                (๐’œ : I โ†’ Algebra ๐“ค ๐‘†)(๐‘Ž : X โ†’ โˆ€ i โ†’ โˆฃ ๐’œ i โˆฃ)
                ---------------------------------------------------
  โ†’             (p ฬ‡ (โจ… ๐’œ)) ๐‘Ž โ‰ก (ฮป i โ†’ (p ฬ‡ ๐’œ i) (ฮป j โ†’ ๐‘Ž j i))

 interp-prod' _ (โ„Š xโ‚) ๐’œ ๐‘Ž = refl

 interp-prod' fe (node ๐‘“ ๐‘ก) ๐’œ ๐‘Ž = let IH = ฮป x โ†’ interp-prod' fe (๐‘ก x) ๐’œ ๐‘Ž
  in
  (๐‘“ ฬ‚ โจ… ๐’œ)(ฮป x โ†’ (๐‘ก x ฬ‡ โจ… ๐’œ) ๐‘Ž)                      โ‰กโŸจ ap (๐‘“ ฬ‚ โจ… ๐’œ)(fe IH) โŸฉ
  (๐‘“ ฬ‚ โจ… ๐’œ)(ฮป x โ†’ (ฮป i โ†’ (๐‘ก x ฬ‡ ๐’œ i)(ฮป j โ†’ ๐‘Ž j i)))   โ‰กโŸจ refl โŸฉ
  (ฮป i โ†’ (๐‘“ ฬ‚ ๐’œ i) (ฮป x โ†’ (๐‘ก x ฬ‡ ๐’œ i)(ฮป j โ†’ ๐‘Ž j i)))  โˆŽ


 interp-prod2' : dfunext (๐“ค โŠ” ๐“ง) ๐“ค โ†’ dfunext ๐“ฅ ๐“ค
  โ†’              (p : Term X){I : ๐“ค ฬ‡ }(๐’œ : I โ†’ Algebra ๐“ค ๐‘†)
                 ------------------------------------------------------------------
  โ†’              (p ฬ‡ โจ… ๐’œ) โ‰ก ฮป(๐‘ก : X โ†’ โˆฃ โจ… ๐’œ โˆฃ) โ†’ (ฮป i โ†’ (p ฬ‡ ๐’œ i)(ฮป x โ†’ ๐‘ก x i))

 interp-prod2' _ _ (โ„Š xโ‚) ๐’œ = refl

 interp-prod2' fe fev (node f t) ๐’œ = fe ฮป (tup : X โ†’ โˆฃ โจ… ๐’œ โˆฃ) โ†’
  let IH = ฮป x โ†’ interp-prod' fev (t x) ๐’œ  in
  let tA = ฮป z โ†’ t z ฬ‡ โจ… ๐’œ in
  (f ฬ‚ โจ… ๐’œ)(ฮป s โ†’ tA s tup)                          โ‰กโŸจ ap(f ฬ‚ โจ… ๐’œ)(fev ฮป x โ†’ IH x tup)โŸฉ
  (f ฬ‚ โจ… ๐’œ)(ฮป s โ†’ ฮป j โ†’ (t s ฬ‡ ๐’œ j)(ฮป โ„“ โ†’ tup โ„“ j))   โ‰กโŸจ refl โŸฉ
  (ฮป i โ†’ (f ฬ‚ ๐’œ i)(ฮป s โ†’ (t s ฬ‡ ๐’œ i)(ฮป โ„“ โ†’ tup โ„“ i))) โˆŽ

Compatibility of terms

We now prove two important facts about term operations. The first of these, which is used very often in the sequel, asserts that every term commutes with every homomorphism.


module _ {๐“ค ๐“ฆ ๐“ง : Universe}{X : ๐“ง ฬ‡} where

 comm-hom-term : dfunext ๐“ฅ ๐“ฆ โ†’ {๐‘จ : Algebra ๐“ค ๐‘†} (๐‘ฉ : Algebra ๐“ฆ ๐‘†)
                 (h : hom ๐‘จ ๐‘ฉ) (t : Term X) (a : X โ†’ โˆฃ ๐‘จ โˆฃ)
                 -----------------------------------------
  โ†’              โˆฃ h โˆฃ ((๐‘จ โŸฆ t โŸง) a) โ‰ก (๐‘ฉ โŸฆ t โŸง) (โˆฃ h โˆฃ โˆ˜ a)

 comm-hom-term _ ๐‘ฉ h (โ„Š x) a = refl

 comm-hom-term fe {๐‘จ} ๐‘ฉ h (node ๐‘“ ๐‘ก) a = โˆฃ h โˆฃ((๐‘“ ฬ‚ ๐‘จ) ฮป i โ†’  (๐‘จ โŸฆ ๐‘ก i โŸง) a)    โ‰กโŸจ i  โŸฉ
                                     (๐‘“ ฬ‚ ๐‘ฉ)(ฮป i โ†’  โˆฃ h โˆฃ ((๐‘จ โŸฆ ๐‘ก i โŸง) a))  โ‰กโŸจ ii โŸฉ
                                     (๐‘“ ฬ‚ ๐‘ฉ)(ฮป r โ†’ (๐‘ฉ โŸฆ ๐‘ก r โŸง) (โˆฃ h โˆฃ โˆ˜ a)) โˆŽ
  where
  i  = โˆฅ h โˆฅ ๐‘“ ฮป r โ†’ (๐‘จ โŸฆ ๐‘ก r โŸง) a
  ii = ap (๐‘“ ฬ‚ ๐‘ฉ)(fe (ฮป i โ†’ comm-hom-term fe ๐‘ฉ h (๐‘ก i) a))

 comm-hom-term' : dfunext ๐“ฅ ๐“ฆ โ†’ {๐‘จ : Algebra ๐“ค ๐‘†} (๐‘ฉ : Algebra ๐“ฆ ๐‘†)
                  (h : hom ๐‘จ ๐‘ฉ) (t : Term X) (a : X โ†’ โˆฃ ๐‘จ โˆฃ)
                  -----------------------------------------
  โ†’               โˆฃ h โˆฃ ((๐‘จ โŸฆ t โŸง) a) โ‰ก (๐‘ฉ โŸฆ t โŸง) (โˆฃ h โˆฃ โˆ˜ a)

 comm-hom-term' _ ๐‘ฉ h (โ„Š x) a = refl

 comm-hom-term' fe {๐‘จ} ๐‘ฉ h (node ๐‘“ ๐‘ก) a = โˆฃ h โˆฃ ((๐‘“ ฬ‚ ๐‘จ)ฮป i โ†’ (๐‘จ โŸฆ ๐‘ก i โŸง) a)    โ‰กโŸจ i  โŸฉ
                                     (๐‘“ ฬ‚ ๐‘ฉ)(ฮป i โ†’  โˆฃ h โˆฃ ((๐‘จ โŸฆ ๐‘ก i โŸง) a))  โ‰กโŸจ ii โŸฉ
                                     (๐‘“ ฬ‚ ๐‘ฉ)(ฮป r โ†’ (๐‘ฉ โŸฆ ๐‘ก r โŸง) (โˆฃ h โˆฃ โˆ˜ a)) โˆŽ
  where
  i  = โˆฅ h โˆฅ ๐‘“ ฮป r โ†’ (๐‘จ โŸฆ ๐‘ก r โŸง) a
  ii = ap (๐‘“ ฬ‚ ๐‘ฉ)(fe (ฮป i โ†’ comm-hom-term' fe ๐‘ฉ h (๐‘ก i) a))

To conclude this module, we prove that every term is compatible with every congruence relation. That is, if t : Term X and ฮธ : Con ๐‘จ, then a ฮธ b โ†’ t(a) ฮธ t(b). (Recall, the compatibility relation |: was defined in Relations.Discrete.)



module _ {๐“ฆ ๐“ค : Universe}{X : ๐“ค ฬ‡} where

 open IsCongruence

 _โˆฃ:_ : {๐‘จ : Algebra ๐“ค ๐‘†}(t : Term X)(ฮธ : Con{๐“ฆ} ๐‘จ)
        -----------------------------------------
  โ†’     (๐‘จ โŸฆ t โŸง) |: โˆฃ ฮธ โˆฃ

 ((โ„Š x) โˆฃ: ฮธ) p = p x

 ((node ๐‘“ ๐‘ก) โˆฃ: ฮธ) p = (is-compatible โˆฅ ฮธ โˆฅ) ๐‘“ ฮป x โ†’ ((๐‘ก x) โˆฃ: ฮธ) p

For the sake of comparison, here is the analogous theorem using compatible-fun.


 compatible-term : {๐‘จ : Algebra ๐“ค ๐‘†}(t : Term X)(ฮธ : Con{๐“ฆ} ๐‘จ)
                   -----------------------------------------
  โ†’                compatible-fun (๐‘จ โŸฆ t โŸง) โˆฃ ฮธ โˆฃ

 compatible-term (โ„Š x) ฮธ p = ฮป y z โ†’ z x

 compatible-term (node ๐‘“ ๐‘ก) ฮธ u v p = (is-compatible โˆฅ ฮธ โˆฅ) ๐‘“ ฮป x โ†’ ((compatible-term (๐‘ก x) ฮธ) u v) p

 compatible-term' : {๐‘จ : Algebra ๐“ค ๐‘†}(t : Term X)(ฮธ : Con{๐“ฆ} ๐‘จ)
                   -----------------------------------------
  โ†’                compatible-fun (t ฬ‡ ๐‘จ) โˆฃ ฮธ โˆฃ

 compatible-term' (โ„Š x) ฮธ p = ฮป y z โ†’ z x

 compatible-term' (node ๐‘“ ๐‘ก) ฮธ u v p = (is-compatible โˆฅ ฮธ โˆฅ) ๐‘“ ฮป x โ†’ ((compatible-term' (๐‘ก x) ฮธ) u v) p



1We plan to resolve this before the next major release of the Agda UALib.



โ† Terms.Basic Subalgebras โ†’