{-# OPTIONS --safe #-}
module CCS.SemiModel where
open import Prelude hiding (P)
open import CCS.Alg
open import Algebra
record CCSSemiModel (C : Type c) : Type (βsuc c) where
field β¦ ccsAlg β¦ : CCSAlg C
open CCSAlg ccsAlg
open CCSAlg ccsAlg public
using ()
renaming (Name to MName)
field
πβ : β p β π β p β‘ p
β-assoc : β x y z β (x β y) β z β‘ x β (y β z)
β-comm : β x y β x β y β‘ y β x
β-idem : β x β x β x β‘ x
β-β₯ : β p q β p β₯ q β‘ (p β q) β (q β p)
β-assoc : β x y z β (x β y) β z β‘ x β (y β₯ z)
πβ : β p β π β p β‘ π
βπ : β p β p β π β‘ p
ββ : β p q r β (p β q) β r β‘ (p β r) β (q β r)
Ξ½π : β x β Ξ½ x - π β‘ π
Ξ½-comm : β x y p β Ξ½ x - Ξ½ y - p β‘ Ξ½ y - Ξ½ x - p
Ξ½-β : β x p q β Ξ½ x - (p β q) β‘ Ξ½ x - p β Ξ½ x - q
!-β : β p β ! p β‘ p β ! p
!-β₯ : β p β ! p β‘ p β₯ ! p
Ξ½-β-Β· : β n a p β n ββ a β Ξ½ n - a Β· p β‘ π
Ξ½-β-Β· : β n a p β n ββ a β Ξ½ n - a Β· p β‘ a Β· Ξ½ n - p
βπ : β p β p β π β‘ p
βπ p = β-comm p π β¨Ύ πβ p
β-semilattice : Semilattice C
β-semilattice = record
{ commutativeMonoid = record
{ monoid = record
{ _β_ = _β_
; Ξ΅ = π
; Ξ΅β = πβ
; βΞ΅ = βπ
; assoc = β-assoc
}
; comm = β-comm
}
; idem = β-idem
}
πβ₯ : β p β π β₯ p β‘ p
πβ₯ p = β-β₯ π p β¨Ύ congβ _β_ (πβ p) (βπ p) β¨Ύ πβ p
β₯-comm : β p q β p β₯ q β‘ q β₯ p
β₯-comm p q = β-β₯ p q β¨Ύ β-comm _ _ β¨Ύ sym (β-β₯ q p)
β₯π : β p β p β₯ π β‘ p
β₯π p = β₯-comm p π β¨Ύ πβ₯ p
β-comm : β x y z β x β y β z β‘ x β z β y
β-comm x y z =
x β y β z β‘β¨ β-assoc x y z β©
x β (y β₯ z) β‘β¨ cong (x β_) (β₯-comm y z) β©
x β (z β₯ y) β‘Λβ¨ β-assoc x z y β©
x β z β y β
β₯-assoc : β x y z β (x β₯ y) β₯ z β‘ x β₯ (y β₯ z)
β₯-assoc x y z =
(x β₯ y) β₯ z β‘β¨ β-β₯ (x β₯ y) z β©
(x β₯ y) β z β z β (x β₯ y) β‘β¨ cong (Ξ» e β e β z β z β (x β₯ y)) (β-β₯ x y) β©
(x β y β y β x) β z β z β (x β₯ y) β‘β¨ cong (_β z β (x β₯ y)) (ββ (x β y) (y β x) z) β©
(x β y β z β y β x β z) β z β (x β₯ y) β‘β¨ congβ _β_ (congβ _β_ (β-assoc x y z) (β-comm y x z)) (cong (z β_) (β₯-comm x y) β¨Ύ sym (β-assoc z y x)) β©
(x β (y β₯ z) β y β z β x) β z β y β x β‘β¨ β-assoc (x β (y β₯ z)) (y β z β x) (z β y β x) β©
x β (y β₯ z) β (y β z β x β z β y β x) β‘Λβ¨ cong (x β (y β₯ z) β_) (ββ (y β z) (z β y) x) β©
x β (y β₯ z) β (y β z β z β y) β x β‘Λβ¨ cong (Ξ» e β x β (y β₯ z) β e β x) (β-β₯ y z) β©
x β (y β₯ z) β (y β₯ z) β x β‘Λβ¨ β-β₯ x (y β₯ z) β©
x β₯ (y β₯ z) β
open import Data.List.Properties
Ξ½β-comm-β· : β x xs p β Ξ½ x - Ξ½β xs - p β‘ Ξ½β xs - Ξ½ x - p
Ξ½β-comm-β· x xs p = foldl-fusion (Ξ½ x -_) p (flip (Ξ½-comm x)) xs
Ξ½β-comm : β xs ys p β Ξ½β xs - Ξ½β ys - p β‘ Ξ½β ys - Ξ½β xs - p
Ξ½β-comm xs ys p = sym (foldl-fusion (Ξ½β ys -_) p (Ξ» p y β sym (Ξ½β-comm-β· y ys p)) xs)
Ξ½β-β : β x p q β Ξ½β x - (p β q) β‘ Ξ½β x - p β Ξ½β x - q
Ξ½β-β [] p q = refl
Ξ½β-β (x β· xs) p q = cong (Ξ½β xs -_) (Ξ½-β x p q) β¨Ύ Ξ½β-β xs (Ξ½ x - p) (Ξ½ x - q)
Ξ½β-lr : β ns p β Ξ½β ns - p β‘ Ξ½βα΅£ ns - p
Ξ½β-lr [] p = refl
Ξ½β-lr (n β· ns) p =
Ξ½β n β· ns - p β‘β¨β©
Ξ½β ns - Ξ½ n - p β‘Λβ¨ Ξ½β-comm-β· n ns p β©
Ξ½ n - Ξ½β ns - p β‘β¨ cong (Ξ½ n -_) (Ξ½β-lr ns p) β©
Ξ½ n - Ξ½βα΅£ ns - p β‘β¨β©
Ξ½βα΅£ n β· ns - p β
Ξ½β-π : β ns β Ξ½β ns - π β‘ π
Ξ½β-π [] = refl
Ξ½β-π (n β· ns) = cong (Ξ½β ns -_) (Ξ½π n) β¨Ύ Ξ½β-π ns
open import Data.Fin
module _ β¦ _ : IsDiscrete Name β¦ where
Ξ½β-β-Β· : β ns a p β ns βββ a β Ξ½β ns - a Β· p β‘ π
Ξ½β-β-Β· (n β· ns) a p (fz , nβa) = cong (Ξ½β ns -_) (Ξ½-β-Β· n a p nβa) β¨Ύ Ξ½β-π ns
Ξ½β-β-Β· (n β· ns) a p (fs i , nsβa) with n ββ? a
... | yes nβa = cong (Ξ½β ns -_) (Ξ½-β-Β· n a p nβa) β¨Ύ Ξ½β-π ns
... | no nβa = cong (Ξ½β ns -_) (Ξ½-β-Β· n a p nβa) β¨Ύ Ξ½β-β-Β· ns a (Ξ½ n - p) (i , nsβa)
Ξ½β-β-Β· : β ns a p β ns βββ a β Ξ½β ns - a Β· p β‘ a Β· Ξ½β ns - p
Ξ½β-β-Β· [] a p nsβa = refl
Ξ½β-β-Β· (n β· ns) a p nsβa = cong (Ξ½β ns -_) (Ξ½-β-Β· n a p (nsβa β (fz ,_))) β¨Ύ Ξ½β-β-Β· ns a (Ξ½ n - p) (nsβa β there {P = _ββ a} n)
Ξ½β-β : β p q ns r β Ξ½β ns - ((p β q) β r) β‘ Ξ½β ns - (p β r) β Ξ½β ns - (q β r)
Ξ½β-β p q ns r =
Ξ½β ns - ((p β q) β r) β‘β¨ cong (Ξ½β ns -_) (ββ _ _ _) β©
Ξ½β ns - (p β r β q β r) β‘β¨ Ξ½β-β ns (p β r) (q β r) β©
Ξ½β ns - (p β r) β Ξ½β ns - (q β r) β
Ξ½β-π : β ns r β Ξ½β ns - (π β r) β‘ π
Ξ½β-π ns r = cong (Ξ½β ns -_) (πβ r) β¨Ύ Ξ½β-π ns