{-# OPTIONS --no-termination-check #-}
open import Prelude hiding (P)
open import CCS.Alg
open import CCS.SemiModel
open import Hyper.Base
open import Algebra
module CCS.Hyp.Properties.RestrictPar {r} {Name R : Type r} (lat : Semilattice R) ⦃ disc : IsDiscrete Name ⦄ where
open CCSAlg ⦃ ... ⦄ hiding (Name)
open CCSSemiModel ⦃ ... ⦄
open import CCS.Hyp.Definition Name R
open import CCS.Hyp.SemiModel {R = R} lat {Name = Name}
private instance
_ : CCSAlg Communicator
_ = hypAlg
private instance
_ : CCSSemiModel Communicator
_ = hypMod
ν-⌊-ν : ∀ (n : Name) (p q : Communicator) → ν n - (p ⌊ ν n - q) ≡ ν n - (ν n - p ⌊ ν n - q)
ν-ν-⌊ : ∀ (n : Name) (p q : Communicator) → ν n - (ν n - p ⌊ q) ≡ ν n - (ν n - p ⌊ ν n - q)
ν-∥-ν : ∀ (n : Name) (p q : Communicator) → ν n - (p ∥ ν n - q) ≡ ν n - (ν n - p ∥ ν n - q)
ν-ν-∥ : ∀ (n : Name) (p q : Communicator) → ν n - (ν n - p ∥ q) ≡ ν n - (ν n - p ∥ ν n - q)
ν-ν-ν-∥ : ∀ (n : Name) (p q : Communicator) → ν n - p ∥ ν n - q ≡ ν n - (ν n - p ∥ ν n - q)
ν-ν-ν-⌊ : ∀ (n : Name) (p q : Communicator) → ν n - p ⌊ ν n - q ≡ ν n - (ν n - p ⌊ ν n - q)
ν-ν-ν-∥ n p q =
ν n - p ∥ ν n - q ≡⟨ ⌊-∥ _ _ ⟩
ν n - p ⌊ ν n - q ⊕ ν n - q ⌊ ν n - p ≡⟨ cong₂ _⊕_ (ν-ν-ν-⌊ n p q) (ν-ν-ν-⌊ n q p) ⟩
ν n - (ν n - p ⌊ ν n - q) ⊕ ν n - (ν n - q ⌊ ν n - p) ≡˘⟨ ν-⊕ n _ _ ⟩
ν n - (ν n - p ⌊ ν n - q ⊕ ν n - q ⌊ ν n - p) ≡˘⟨ cong (ν n -_) (⌊-∥ _ _) ⟩
ν n - (ν n - p ∥ ν n - q) ∎
ν-ν-ν-⌊ n p q = cong-ι (funExt ∘′ lemma n p q)
where
lemma : ∀ n p q r m →
ι (ν n - p ⌊ ν n - q) r m ≡ ι (ν n - (ν n - p ⌊ ν n - q)) r m
lemma n p q r m with n ∈ₘ? m
... | yes n∈m = cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈m) ⨾ sym (cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈m))
... | no n∉m =
ι (ν n - p ⌊ ν n - q) r m ≡⟨⟩
ι (ν n - p) (ν n - q ∥ r) m ≡⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι p (ν n - (ν n - q ∥ r)) m ≡⟨ cong (flip (ι p) m) (ν-ν-∥ n q r) ⟩
ι p (ν n - (ν n - q ∥ ν n - r)) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - p) (ν n - q ∥ ν n - r) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - (ν n - p ⌊ ν n - q)) r m ∎
ν-∥-ν n p q =
ν n - (p ∥ ν n - q) ≡⟨ cong (ν n -_) (⌊-∥ _ _) ⟩
ν n - (p ⌊ ν n - q ⊕ ν n - q ⌊ p) ≡⟨ ν-⊕ n _ _ ⟩
ν n - (p ⌊ ν n - q) ⊕ ν n - (ν n - q ⌊ p) ≡⟨ cong₂ _⊕_ (ν-⌊-ν n p q) (ν-ν-⌊ n q p) ⟩
ν n - (ν n - p ⌊ ν n - q) ⊕ ν n - (ν n - q ⌊ ν n - p) ≡˘⟨ ν-⊕ n _ _ ⟩
ν n - (ν n - p ⌊ ν n - q ⊕ ν n - q ⌊ ν n - p) ≡˘⟨ cong (ν n -_) (⌊-∥ _ _) ⟩
ν n - (ν n - p ∥ ν n - q) ∎
ν-ν-∥ n p q =
ν n - (ν n - p ∥ q) ≡⟨ cong (ν n -_) (⌊-∥ _ _) ⟩
ν n - (ν n - p ⌊ q ⊕ q ⌊ ν n - p) ≡⟨ ν-⊕ n _ _ ⟩
ν n - (ν n - p ⌊ q) ⊕ ν n - (q ⌊ ν n - p) ≡⟨ cong₂ _⊕_ (ν-ν-⌊ n p q) (ν-⌊-ν n q p) ⟩
ν n - (ν n - p ⌊ ν n - q) ⊕ ν n - (ν n - q ⌊ ν n - p) ≡˘⟨ ν-⊕ n _ _ ⟩
ν n - (ν n - p ⌊ ν n - q ⊕ ν n - q ⌊ ν n - p) ≡˘⟨ cong (ν n -_) (⌊-∥ _ _) ⟩
ν n - (ν n - p ∥ ν n - q) ∎
ν-⌊-ν n p q = cong-ι (funExt ∘′ lemma n p q)
where
lemma : ∀ n p q r m →
ι (ν n - (p ⌊ ν n - q)) r m ≡ ι (ν n - (ν n - p ⌊ ν n - q)) r m
lemma n p q r m with n ∈ₘ? m
... | yes n∈a = cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈a) ⨾ sym (cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈a))
... | no n∉m =
ι (ν n - (p ⌊ ν n - q)) r m ≡⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (p ⌊ ν n - q) (ν n - r) m ≡⟨⟩
ι p (ν n - q ∥ ν n - r) m ≡⟨ cong (flip (ι p) m) (ν-ν-ν-∥ n q r) ⟩
ι p (ν n - (ν n - q ∥ ν n - r)) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - p) (ν n - q ∥ ν n - r) m ≡⟨⟩
ι (ν n - p ⌊ ν n - q) (ν n - r) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - (ν n - p ⌊ ν n - q)) r m ∎
ν-ν-⌊ n p q = cong-ι (funExt ∘′ lemma n p q)
where
lemma : ∀ n p q r m →
ι (ν n - (ν n - p ⌊ q)) r m ≡ ι (ν n - (ν n - p ⌊ ν n - q)) r m
lemma n p q r m with n ∈ₘ? m
... | yes n∈a = cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈a) ⨾ sym (cong (bool′ _ _) (it-does (n ∈ₘ? m) n∈a))
... | no n∉m =
ι (ν n - (ν n - p ⌊ q)) r m ≡⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - p ⌊ q) (ν n - r) m ≡⟨⟩
ι (ν n - p) (q ∥ ν n - r) m ≡⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι p (ν n - (q ∥ ν n - r)) m ≡⟨ cong (flip (ι p) m) (ν-∥-ν n q r) ⟩
ι p (ν n - (ν n - q ∥ ν n - r)) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - p) (ν n - q ∥ ν n - r) m ≡⟨⟩
ι (ν n - p ⌊ ν n - q) (ν n - r) m ≡˘⟨ cong (bool′ _ _) (it-doesn't (n ∈ₘ? m) n∉m) ⟩
ι (ν n - (ν n - p ⌊ ν n - q)) r m ∎