{-
This second-order signature was created from the following second-order syntax description:
syntax Lens | L
type
S : 0-ary
A : 0-ary
term
get : S -> A
put : S A -> S
theory
(PG) s : S a : A |> get (put (s, a)) = a
(GP) s : S |> put (s, get(s)) = s
(PP) s : S a b : A |> put (put(s, a), b) = put (s, a)
-}
module Lens.Signature where
open import SOAS.Context
-- Type declaration
data LT : Set where
S : LT
A : LT
open import SOAS.Syntax.Signature LT public
open import SOAS.Syntax.Build LT public
-- Operator symbols
data Lₒ : Set where
getₒ putₒ : Lₒ
-- Term signature
L:Sig : Signature Lₒ
L:Sig = sig λ
{ getₒ → (⊢₀ S) ⟼₁ A
; putₒ → (⊢₀ S) , (⊢₀ A) ⟼₂ S
}
open Signature L:Sig public