{-# OPTIONS --without-K #-} 

open import Core.Container
open import Core.Ternary

open import Effect.Base
open import Effect.Theory.FirstOrder

open import Effect.Syntax.Free

open import Effect.Relation.Binary.FirstOrderInclusion
open import Effect.Relation.Ternary.FirstOrderSeparation

open import Data.Unit
open import Data.Product

open import Relation.Binary.PropositionalEquality

module Effect.Instance.State.Syntax (S : Set) where


data StateC (S : Set) : Set where
  `get : StateC S
  `put : S  StateC S

State : Container
State = record
  { shape    = StateC S
  ; position = λ where `get      S
                       (`put _)  
  }

get :  State  ε   Free ε S
get =  (impure  `get , pure )

get-resp-⇔≲ : (i₁ i₂ : State  ε)  i₁ ⇔≲ i₂  get  i₁   get  i₂ 
get-resp-⇔≲ _ _ eqv = ♯-resp-⇔≲ eqv (impure  `get , pure )

put :  State  ε   S  Free ε 
put s =  (impure  `put s , pure )

put-resp-⇔≲ : {s : S} (i₁ i₂ : State  ε)  i₁ ⇔≲ i₂  put  i₁  s  put  i₂  s 
put-resp-⇔≲ _ _ eqv = ♯-resp-⇔≲ eqv (impure  `put _ , pure )