module StateSizedIO.RObject where open import Data.Product open import StateSizedIO.GUI.BaseStateDependent -- open import StateSizedIO.Base public {- -- This definition was probably moved to StateSizedIO.Base -- and by accident left here. Delete this. record Interfaceˢ : Set₁ where field Stateˢ : Set Methodˢ : Stateˢ → Set Resultˢ : (s : Stateˢ) → (m : Methodˢ s) → Set nextˢ : (s : Stateˢ) → (m : Methodˢ s) → Resultˢ s m → Stateˢ open Interfaceˢ public -} --\StateSizedRObjectRInterface record RInterfaceˢ : Set₁ where field Stateˢ : Set Methodˢ : (s : Stateˢ) → Set Resultˢ : (s : Stateˢ) → (m : Methodˢ s) → Set nextˢ : (s : Stateˢ) → (m : Methodˢ s) → (r : Resultˢ s m) → Stateˢ RMethodˢ : (s : Stateˢ) → Set RResultˢ : (s : Stateˢ) → (m : RMethodˢ s) → Set open RInterfaceˢ public module _ (I : RInterfaceˢ)(let S = Stateˢ I) (let M = Methodˢ I) (let R = Resultˢ I) (let next = nextˢ I) (let RM = RMethodˢ I) (let RR = RResultˢ I) where -- A simple object just returns for a method the response -- and the object itself --\StateSizedRObjectRObject record RObjectˢ (s : S) : Set where coinductive field objectMethod : (m : M s) → Σ[ r ∈ R s m ] RObjectˢ (next s m r) readerMethod : (m : RM s) → RR s m open RObjectˢ public -- Bisimilation for Objectˢ {- module Bisim (I : Interfaceˢ) (let S = Stateˢ I) (let M = Methodˢ I) (let R = Resultˢ I) (let next = nextˢ I) (let O = Objectˢ I) where mutual record _≅_ {s : S} (o o' : O s) : Set where coinductive field bisimMethod : (m : M s) → objectMethod o m ≡×≅ objectMethod o' m data _≡×≅_ {s m} : (p p' : Σ[ r ∈ R s m ] O (next s m r)) → Set where bisim : ∀{r} (let s' = next s m r) {o o' : O s'} (p : o ≅ o') → (r , o) ≡×≅ (r , o') open _≅_ public refl≅ : ∀{s} (o : O s) → o ≅ o bisimMethod (refl≅ o) m = bisim (refl≅ (proj₂ (objectMethod o m))) -}