{-
This second-order signature was created from the following second-order syntax description:

syntax Sub | S

type
  L : 0-ary
  T : 0-ary

term
  vr : L  ->  T
  sb : L.T  T  ->  T

theory
  (C) x y : T |> sb (a. x[], y[]) = x[]
  (L) x : T |> sb (a. vr(a), x[]) = x[]
  (R) a : L  x : L.T |> sb (b. x[b], vr(a[])) = x[a[]]
  (A) x : (L,L).T  y : L.T  z : T |> sb (a. sb (b. x[a,b], y[a]), z[]) = sb (b. sb (a. x[a, b], z[]), sb (a. y[a], z[]))
-}

module Sub.Signature where

open import SOAS.Context

-- Type declaration
data ST : Set where
  L : ST
  T : ST



open import SOAS.Syntax.Signature ST public
open import SOAS.Syntax.Build ST public

-- Operator symbols
data Sₒ : Set where
  vrₒ sbₒ : Sₒ

-- Term signature
S:Sig : Signature Sₒ
S:Sig = sig λ
  {  vrₒ   (⊢₀ L) ⟼₁ T
  ;  sbₒ   (L ⊢₁ T) , (⊢₀ T) ⟼₂ T
  }

open Signature S:Sig public