data Context : Set where
◆ : ∀ {n} → Ctx n → Context
- ■ : ∀ {n m} → Ctx n → Ctx m → Context
+ ■ : Context → Context → Context
infix 4 _∈_
data _∈_ : TypeDecl → Context → Set where
here-◆ : ∀ {n} {x} {xs : Ctx n} → x ∈ ◆ (x ∷-Vec xs)
there-◆ : ∀ {n} {x y} {xs : Ctx n} (x∈xs : x ∈ ◆ xs) → x ∈ ◆ (y ∷-Vec xs)
- here-left-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} → x ∈ ■ (x ∷-Vec xs) ys
- here-right-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} → x ∈ ■ xs (x ∷-Vec ys)
- there-left-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} (x∈xs : x ∈ ■ xs ys) → x ∈ ■ (x ∷-Vec xs) ys
- there-right-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} (x∈xs : x ∈ ■ xs ys) → x ∈ ■ xs (x ∷-Vec ys)
-
-_∷_ : TypeDecl → Context → Context
-t ∷ ◆ xs = ◆ (t ∷-Vec xs)
-x ∷ ■ xs ys = ■ (x ∷-Vec xs) ys
+ here-left-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} → x ∈ ■ (◆ (x ∷-Vec xs)) (◆ ys)
+ here-right-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} → x ∈ ■ (◆ xs) (◆ (x ∷-Vec ys))
+ there-left-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} (x∈xs : x ∈ ■ (◆ xs) (◆ ys)) → x ∈ ■ (◆ (x ∷-Vec xs)) (◆ ys)
+ there-right-■ : ∀ {n m} {x} {xs : Ctx n} {ys : Ctx m} (x∈xs : x ∈ ■ (◆ xs) (◆ ys)) → x ∈ ■ (◆ xs) (◆ (x ∷-Vec ys))
+
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
open import Data.Nat using (ℕ)
open import Data.List using (List)
-open import Data.Vec using ([]; _++_)
+open import Data.Vec using ([]; _++_; _∷_)
open import Data.Product using (_,_; _×_)
open import Function
open import Expr
-----------------------------------
→ Γ ⊢B inputchoice choices ▹ Γ₁
- t-par : ∀ {k k₁ p p₁} {Γ₁ : Ctx k} {Γ₂ : Ctx p} {Γ₁' : Ctx k₁} {Γ₂' : Ctx p₁} {b1 b2 : Behaviour}
- → ◆ Γ₁ ⊢B b1 ▹ ◆ Γ₁'
- → ◆ Γ₂ ⊢B b2 ▹ ◆ Γ₂'
+ t-par : {Γ₁ Γ₂ Γ₁' Γ₂' : Context} {b1 b2 : Behaviour}
+ → Γ₁ ⊢B b1 ▹ Γ₁'
+ → Γ₂ ⊢B b2 ▹ Γ₂'
------------------------------------
→ (■ Γ₁ Γ₂) ⊢B b1 ∥ b2 ▹ (■ Γ₁' Γ₂')
------------------------------------------------
→ Γ ⊢B output (o at l [ var e ]) ▹ Γ
- t-assign-new : {Γ : Context} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
- → Γ ⊢ₑ e ∶ Tₑ -- Γ ⊢ e : bool
- → ¬ (var x Tₓ ∈ Γ) -- x ∉ Γ
+ t-assign-new : ∀ {n} {Γ : Ctx n} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
+ → ◆ Γ ⊢ₑ e ∶ Tₑ -- Γ ⊢ e : bool
+ → ¬ (var x Tₓ ∈ ◆ Γ) -- x ∉ Γ
--------------------------------------
- → Γ ⊢B x ≃ e ▹ (var x Tₑ ∷ Γ)
+ → ◆ Γ ⊢B x ≃ e ▹ ◆ (var x Tₑ ∷ Γ)
t-assign-exists : {Γ : Context} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
→ Γ ⊢ₑ e ∶ Tₑ
-------------------------
→ Γ ⊢B x ≃ e ▹ Γ
- t-oneway-new : {Γ : Context} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
- → inOneWay o Tᵢ ∈ Γ
- → ¬ (var x Tₓ ∈ Γ)
+ t-oneway-new : ∀ {n} {Γ : Ctx n} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
+ → inOneWay o Tᵢ ∈ ◆ Γ
+ → ¬ (var x Tₓ ∈ ◆ Γ)
---------------------------------------
- → Γ ⊢B input (o [ x ]) ▹ (var x Tᵢ ∷ Γ)
+ → ◆ Γ ⊢B input (o [ x ]) ▹ ◆ (var x Tᵢ ∷ Γ)
t-oneway-exists : {Γ : Context} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
→ inOneWay o Tᵢ ∈ Γ
--------------------------
→ Γ ⊢B input (o [ x ]) ▹ Γ
- t-solresp-new : {Γ : Context} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ Γ
+ t-solresp-new : ∀ {n} {Γ : Ctx n} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
+ → outSolRes o l Tₒ Tᵢ ∈ ◆ Γ
→ Tₑ ⊆ Tₒ
- → ¬ (var x Tₓ ∈ Γ)
+ → ¬ (var x Tₓ ∈ ◆ Γ)
--------------------------------------------------
- → Γ ⊢B output (o at l [ e ][ x ]) ▹ (var x Tᵢ ∷ Γ)
+ → ◆ Γ ⊢B output (o at l [ e ][ x ]) ▹ ◆ (var x Tᵢ ∷ Γ)
t-solresp-exists : {Γ : Context} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
→ outSolRes o l Tₒ Tᵢ ∈ Γ
-------------------------------------
→ Γ ⊢B output (o at l [ e ][ x ]) ▹ Γ
- t-reqresp-new : {Γ Γ₁ : Context} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {x a : Variable} {b : Behaviour}
- → inReqRes o Tᵢ Tₒ ∈ Γ
- → ¬ (var x Tₓ ∈ Γ)
- → (var x Tₓ ∷ Γ) ⊢B b ▹ Γ₁
- → var a Tₐ ∈ Γ₁
+ t-reqresp-new : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {x a : Variable} {b : Behaviour}
+ → inReqRes o Tᵢ Tₒ ∈ ◆ Γ
+ → ¬ (var x Tₓ ∈ ◆ Γ)
+ → ◆ (var x Tₓ ∷ Γ) ⊢B b ▹ ◆ Γ₁
+ → var a Tₐ ∈ ◆ Γ₁
→ Tₐ ⊆ Tₒ
----------------------------------
- → Γ ⊢B input (o [ x ][ a ] b) ▹ Γ₁
+ → ◆ Γ ⊢B input (o [ x ][ a ] b) ▹ ◆ Γ₁
t-reqresp-exists : {Γ Γ₁ : Context} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {b : Behaviour} {x a : Variable}
→ (inReqRes o Tᵢ Tₒ) ∈ Γ
----------------------------------
→ Γ ⊢B input (o [ x ][ a ] b) ▹ Γ₁
- t-wait-new : {Γ : Context} {o : Operation} {Tₒ Tᵢ Tₓ : Type} {l : Location} {r : Channel} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ Γ
- → ¬ (var x Tₓ ∈ Γ)
+ t-wait-new : ∀ {n} {Γ : Ctx n} {o : Operation} {Tₒ Tᵢ Tₓ : Type} {l : Location} {r : Channel} {x : Variable}
+ → outSolRes o l Tₒ Tᵢ ∈ ◆ Γ
+ → ¬ (var x Tₓ ∈ ◆ Γ)
------------------------------------
- → Γ ⊢B wait r o l x ▹ (var x Tᵢ ∷ Γ)
+ → ◆ Γ ⊢B wait r o l x ▹ ◆ (var x Tᵢ ∷ Γ)
t-wait-exists : {Γ : Context} {Tₒ Tᵢ Tₓ : Type} {o : Operation} {l : Location} {r : Channel} {x : Variable}
→ outSolRes o l Tₒ Tᵢ ∈ Γ
struct-congruence t refl = t
struct-cong-par-nil : ∀ {k k₁ p p₁} {Γ₁ : Ctx k} {Γ₂ : Ctx p} {Γ₁' : Ctx k₁} {Γ₂' : Ctx p₁} {b : Behaviour}
- → ■ Γ₁ Γ₂ ⊢B (b ∥ nil) ▹ ■ Γ₁' Γ₂'
+ → ■ (◆ Γ₁) (◆ Γ₂) ⊢B (b ∥ nil) ▹ ■ (◆ Γ₁') (◆ Γ₂')
→ ◆ Γ₁ ⊢B b ▹ ◆ Γ₁'
struct-cong-par-nil (t-par x _) = x
---struct-cong-par-sym : ∀ {k k₁ p p₁} {Γ₁ : Ctx k} {Γ₂ : Ctx p} {Γ₁' : Ctx k₁} {Γ₂' : Ctx p₁} {b₁ b₂ : Behaviour}
--- → Γ₁ ++ Γ₂ ⊢B (b₁ ∥ b₂) ▹ Γ₁' ++ Γ₂'
--- → Γ₂ ++ Γ₁ ⊢B (b₂ ∥ b₁) ▹ Γ₂' ++ Γ₁'
---struct-cong-par-sym (t-par t₁ t₂) = t-par t₂ t₁
+struct-cong-par-sym : {Γ₁ Γ₂ Γ₁' Γ₂' : Context} {b₁ b₂ : Behaviour}
+ → ■ Γ₁ Γ₂ ⊢B (b₁ ∥ b₂) ▹ ■ Γ₁' Γ₂'
+ → ■ Γ₂ Γ₁ ⊢B (b₂ ∥ b₁) ▹ ■ Γ₂' Γ₁'
+struct-cong-par-sym (t-par t₁ t₂) = t-par t₂ t₁
module TypingNetwork where
open import Relation.Nullary using (¬_)
-open import Data.Vec using (_∈_; fromList)
+open import Data.Vec using (fromList) renaming (_∈_ to _∈-Vec_)
open import Data.Product using (_,_)
open import TypingService
open import Service
t-deployment : ∀ {n m} {Γ : Ctx n} {b : Behaviour} {l : Location} {o : Operation} {p : Process} {d : Deployment m} {Tₒ : Type}
→ Γ ⊢S (b ▹ d - p)
- → ¬ (outNotify o l Tₒ ∈ Γ)
+ → ¬ (outNotify o l Tₒ ∈ ◆ Γ)
--------------------------
→ ◆ Γ ⊢N ([ b ▹ d - p ] l)
→ ◆ Γ₁ ⊢N N₁
→ ◆ Γ₂ ⊢N N₂
-- → , ¬ (l ∈ fromList (locs N₁))
- → ¬ (l ∈ fromList (locs N₂))
+ → ¬ (l ∈-Vec fromList (locs N₂))
----------------------
- → ■ Γ₁ Γ₂ ⊢N (N₁ ∥ N₂)
+ → ■ (◆ Γ₁) (◆ Γ₂) ⊢N (N₁ ∥ N₂)
t-restriction : ∀ {n} {Γ : Ctx n} {n : Network}
→ ◆ Γ ⊢N n
open import Relation.Binary.PropositionalEquality using (_≢_)
open import Relation.Nullary using (¬_)
open import Data.List.All using (All)
-open import Data.Vec using (Vec; toList; concat; _∈_)
+open import Data.Vec using (Vec; toList; concat) renaming (_∈_ to _∈-Vec)
open import Data.List using (List; zip)
open import Data.Product using (_×_; _,_)
open import TypingBehaviour using (_⊢B_▹_)
t-bsl-choice : ∀ {n m k} {Γ : Ctx n} {contexts : Vec (Ctx m) k} {choices : List (η × Behaviour)} {Tₐ Tₓ : Type} {x : Variable}
→ All (λ { (Γ₁ , (η , b)) → ◆ Γ ⊢B input η ∶ b ▹ ◆ Γ₁ }) (zip (toList contexts) choices)
- → ¬ (var x Tₓ ∈ concat contexts)
- → ¬ (var x Tₐ ∈ concat contexts)
+ → ¬ (var x Tₓ ∈ ◆ (concat contexts))
+ → ¬ (var x Tₐ ∈ ◆ (concat contexts))
→ Tₓ ≢ Tₐ
----------------------------------------------
→ Γ ⊢BSL inputchoice choices ▹ concat contexts