→ Γ₁ ⊢B b1 ▹ Γ₁'
→ Γ₂ ⊢B b2 ▹ Γ₂'
------------------------------------
- → (■ Γ₁ Γ₂) ⊢B b1 ∥ b2 ▹ (■ Γ₁' Γ₂')
+ → (& Γ₁ Γ₂) ⊢B b1 ∥ b2 ▹ (& Γ₁' Γ₂')
t-seq : {Γ Γ₁ Γ₂ : Context} {b₁ b₂ : Behaviour}
→ Γ ⊢B b₁ ▹ Γ₁
→ Γ ⊢B output (o at l [ var e ]) ▹ Γ
t-assign-new : ∀ {n} {Γ : Ctx n} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
- â\86\92 â\97\86 Î\93 â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
- â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\97\86 Î\93) -- x â\88\89 Î\93
+ â\86\92 â\8b\86 Î\93 â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
+ â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\8b\86 Î\93) -- x â\88\89 Î\93
---------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B x â\89\83 e â\96¹ â\97\86 (var x Tâ\82\91 â\88· Î\93)
+ â\86\92 â\8b\86 Î\93 â\8a¢B x â\89\83 e â\96¹ â\8b\86 (var x Tâ\82\91 â\88· Î\93)
t-assign-new-left : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)) -- x â\88\89 Î\93
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)) -- x â\88\89 Î\93
-------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B x â\89\83 e â\96¹ â\96 (â\97\86 (var x Tâ\82\91 â\88· Î\93)) (â\97\86 Î\93â\82\81)
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B x â\89\83 e â\96¹ & (â\8b\86 (var x Tâ\82\91 â\88· Î\93)) (â\8b\86 Î\93â\82\81)
t-assign-new-right : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)) -- x â\88\89 Î\93
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢â\82\91 e â\88¶ Tâ\82\91 -- Î\93 â\8a¢ e : bool
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)) -- x â\88\89 Î\93
------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B x â\89\83 e â\96¹ â\96 (â\97\86 Î\93) (â\97\86 (var x Tâ\82\91 â\88· Î\93â\82\81))
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B x â\89\83 e â\96¹ & (â\8b\86 Î\93) (â\8b\86 (var x Tâ\82\91 â\88· Î\93â\82\81))
t-assign-exists : {Γ : Context} {x : Variable} {e : Expr} {Tₓ Tₑ : Type}
→ Γ ⊢ₑ e ∶ Tₑ
→ Γ ⊢B x ≃ e ▹ Γ
t-oneway-new : ∀ {n} {Γ : Ctx n} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
- â\86\92 inOneWay o Táµ¢ â\88\88 â\97\86 Î\93
- â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\97\86 Î\93)
+ â\86\92 inOneWay o Táµ¢ â\88\88 â\8b\86 Î\93
+ â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\8b\86 Î\93)
-------------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B input (o [ x ]) â\96¹ â\97\86 (var x Táµ¢ â\88· Î\93)
+ â\86\92 â\8b\86 Î\93 â\8a¢B input (o [ x ]) â\96¹ â\8b\86 (var x Táµ¢ â\88· Î\93)
t-oneway-new-left : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
- → inOneWay o Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → inOneWay o Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
-----------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B input (o [ x ]) â\96¹ â\96 (â\97\86 (var x Táµ¢ â\88· Î\93)) (â\97\86 Î\93â\82\81)
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B input (o [ x ]) â\96¹ & (â\8b\86 (var x Táµ¢ â\88· Î\93)) (â\8b\86 Î\93â\82\81)
t-oneway-new-right : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
- → inOneWay o Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → inOneWay o Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
-----------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B input (o [ x ]) â\96¹ â\96 (â\97\86 Î\93) (â\97\86 (var x Táµ¢ â\88· Î\93â\82\81))
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B input (o [ x ]) â\96¹ & (â\8b\86 Î\93) (â\8b\86 (var x Táµ¢ â\88· Î\93â\82\81))
t-oneway-exists : {Γ : Context} {Tₓ Tᵢ : Type} {o : Operation} {x : Variable}
→ inOneWay o Tᵢ ∈ Γ
→ Γ ⊢B input (o [ x ]) ▹ Γ
t-solresp-new : ∀ {n} {Γ : Ctx n} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
- â\86\92 outSolRes o l Tâ\82\92 Táµ¢ â\88\88 â\97\86 Î\93
+ â\86\92 outSolRes o l Tâ\82\92 Táµ¢ â\88\88 â\8b\86 Î\93
→ Tₑ ⊆ Tₒ
- â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\97\86 Î\93)
+ â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\8b\86 Î\93)
------------------------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B output (o at l [ e ][ x ]) â\96¹ â\97\86 (var x Táµ¢ â\88· Î\93)
+ â\86\92 â\8b\86 Î\93 â\8a¢B output (o at l [ e ][ x ]) â\96¹ â\8b\86 (var x Táµ¢ â\88· Î\93)
t-solresp-new-left : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
+ → outSolRes o l Tₒ Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
→ Tₑ ⊆ Tₒ
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
----------------------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B output (o at l [ e ][ x ]) â\96¹ â\96 (â\97\86 (var x Táµ¢ â\88· Î\93)) (â\97\86 Î\93â\82\81)
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B output (o at l [ e ][ x ]) â\96¹ & (â\8b\86 (var x Táµ¢ â\88· Î\93)) (â\8b\86 Î\93â\82\81)
t-solresp-new-right : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {l : Location} {Tₒ Tᵢ Tₑ Tₓ : Type} {e : Expr} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
+ → outSolRes o l Tₒ Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
→ Tₑ ⊆ Tₒ
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
----------------------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B output (o at l [ e ][ x ]) â\96¹ â\96 (â\97\86 Î\93) (â\97\86 (var x Táµ¢ â\88· Î\93â\82\81))
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B output (o at l [ e ][ x ]) â\96¹ & (â\8b\86 Î\93) (â\8b\86 (var x Táµ¢ â\88· Î\93â\82\81))
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 : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {x a : Variable} {b : Behaviour}
- â\86\92 inReqRes o Táµ¢ Tâ\82\92 â\88\88 â\97\86 Î\93
- â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\97\86 Î\93)
- â\86\92 â\97\86 (var x Tâ\82\93 â\88· Î\93) â\8a¢B b â\96¹ â\97\86 Î\93â\82\81
- â\86\92 var a Tâ\82\90 â\88\88 â\97\86 Î\93â\82\81
+ â\86\92 inReqRes o Táµ¢ Tâ\82\92 â\88\88 â\8b\86 Î\93
+ â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\8b\86 Î\93)
+ â\86\92 â\8b\86 (var x Tâ\82\93 â\88· Î\93) â\8a¢B b â\96¹ â\8b\86 Î\93â\82\81
+ â\86\92 var a Tâ\82\90 â\88\88 â\8b\86 Î\93â\82\81
→ Tₐ ⊆ Tₒ
--------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ â\97\86 Î\93â\82\81
+ â\86\92 â\8b\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ â\8b\86 Î\93â\82\81
t-reqresp-new-left : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {Γ₂ : Context} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {x a : Variable} {b : Behaviour}
- → inReqRes o Tᵢ Tₒ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
- → â\96 (â\97\86 (var x Tâ\82\93 â\88· Î\93)) (â\97\86 Î\93â\82\81) â\8a¢B b â\96¹ Î\93â\82\82
+ → inReqRes o Tᵢ Tₒ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
+ → & (â\8b\86 (var x Tâ\82\93 â\88· Î\93)) (â\8b\86 Î\93â\82\81) â\8a¢B b â\96¹ Î\93â\82\82
→ var a Tₐ ∈ Γ₂
→ Tₐ ⊆ Tₒ
------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ Î\93â\82\82
+ â\86\92 â\8b\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ Î\93â\82\82
t-reqresp-new-right : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {Γ₂ : Context} {o : Operation} {Tᵢ Tₒ Tₓ Tₐ : Type} {x a : Variable} {b : Behaviour}
- → inReqRes o Tᵢ Tₒ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
- → â\96 (â\97\86 Î\93) (â\97\86 (var x Tâ\82\93 â\88· Î\93â\82\81)) â\8a¢B b â\96¹ Î\93â\82\82
+ → inReqRes o Tᵢ Tₒ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
+ → & (â\8b\86 Î\93) (â\8b\86 (var x Tâ\82\93 â\88· Î\93â\82\81)) â\8a¢B b â\96¹ Î\93â\82\82
→ var a Tₐ ∈ Γ₂
→ Tₐ ⊆ Tₒ
------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ Î\93â\82\82
+ â\86\92 â\8b\86 Î\93 â\8a¢B input (o [ x ][ a ] b) â\96¹ Î\93â\82\82
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 : ∀ {n} {Γ : Ctx n} {o : Operation} {Tₒ Tᵢ Tₓ : Type} {l : Location} {r : Channel} {x : Variable}
- â\86\92 outSolRes o l Tâ\82\92 Táµ¢ â\88\88 â\97\86 Î\93
- â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\97\86 Î\93)
+ â\86\92 outSolRes o l Tâ\82\92 Táµ¢ â\88\88 â\8b\86 Î\93
+ â\86\92 ¬ (var x Tâ\82\93 â\88\88 â\8b\86 Î\93)
----------------------------------------
- â\86\92 â\97\86 Î\93 â\8a¢B wait r o l x â\96¹ â\97\86 (var x Táµ¢ â\88· Î\93)
+ â\86\92 â\8b\86 Î\93 â\8a¢B wait r o l x â\96¹ â\8b\86 (var x Táµ¢ â\88· Î\93)
t-wait-new-left : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {Tₒ Tᵢ Tₓ : Type} {l : Location} {r : Channel} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → outSolRes o l Tₒ Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
--------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B wait r o l x â\96¹ â\96 (â\97\86 (var x Táµ¢ â\88· Î\93)) (â\97\86 Î\93â\82\81)
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B wait r o l x â\96¹ & (â\8b\86 (var x Táµ¢ â\88· Î\93)) (â\8b\86 Î\93â\82\81)
t-wait-new-right : ∀ {n m} {Γ : Ctx n} {Γ₁ : Ctx m} {o : Operation} {Tₒ Tᵢ Tₓ : Type} {l : Location} {r : Channel} {x : Variable}
- → outSolRes o l Tₒ Tᵢ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81)
- → ¬ (var x Tₓ ∈ â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81))
+ → outSolRes o l Tₒ Tᵢ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81)
+ → ¬ (var x Tₓ ∈ & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81))
--------------------------------------------------------------
- → â\96 (â\97\86 Î\93) (â\97\86 Î\93â\82\81) â\8a¢B wait r o l x â\96¹ â\96 (â\97\86 Î\93) (â\97\86 (var x Táµ¢ â\88· Î\93â\82\81))
+ → & (â\8b\86 Î\93) (â\8b\86 Î\93â\82\81) â\8a¢B wait r o l x â\96¹ & (â\8b\86 Î\93) (â\8b\86 (var x Táµ¢ â\88· Î\93â\82\81))
t-wait-exists : {Γ : Context} {Tₒ Tᵢ Tₓ : Type} {o : Operation} {l : Location} {r : Channel} {x : Variable}
→ outSolRes o l Tₒ Tᵢ ∈ Γ
→ Γ ⊢B b₂ ▹ Γ₁
struct-congruence t refl = t
+struct-cong-seq-nil : {Γ Γ₁ : Context} {b : Behaviour}
+ → Γ ⊢B nil ∶ b ▹ Γ₁
+ → Γ ⊢B b ▹ Γ₁
+struct-cong-seq-nil (t-seq t-nil x) = x
+
struct-cong-par-nil : {Γ₁ Γ₂ Γ₁' Γ₂' : Context} {b : Behaviour}
- → ■ Γ₁ Γ₂ ⊢B (b ∥ nil) ▹ ■ Γ₁' Γ₂'
+ → & Γ₁ Γ₂ ⊢B (b ∥ nil) ▹ & Γ₁' Γ₂'
→ Γ₁ ⊢B b ▹ Γ₁'
struct-cong-par-nil (t-par x _) = x
struct-cong-par-sym : {Γ₁ Γ₂ Γ₁' Γ₂' : Context} {b₁ b₂ : Behaviour}
- → ■ Γ₁ Γ₂ ⊢B (b₁ ∥ b₂) ▹ ■ Γ₁' Γ₂'
- → ■ Γ₂ Γ₁ ⊢B (b₂ ∥ b₁) ▹ ■ Γ₂' Γ₁'
+ → & Γ₁ Γ₂ ⊢B (b₁ ∥ b₂) ▹ & Γ₁' Γ₂'
+ → & Γ₂ Γ₁ ⊢B (b₂ ∥ b₁) ▹ & Γ₂' Γ₁'
struct-cong-par-sym (t-par t₁ t₂) = t-par t₂ t₁
+
+struct-cong-par-assoc : {Γ₁ Γ₂ Γ₃ Γ₁' Γ₂' Γ₃' : Context} {b₁ b₂ b₃ : Behaviour}
+ → & (& Γ₁ Γ₂) Γ₃ ⊢B (b₁ ∥ b₂) ∥ b₃ ▹ & (& Γ₁' Γ₂') Γ₃'
+ → & Γ₁ (& Γ₂ Γ₃) ⊢B b₁ ∥ (b₂ ∥ b₃) ▹ & Γ₁' (& Γ₂' Γ₃')
+struct-cong-par-assoc (t-par (t-par t1 t2) t3) = t-par t1 (t-par t2 t3)