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

syntax GroupAction | GA

type
  * : 0-ary
  X : 0-ary

term
  unit : * | ε 
  add  : *  *  ->  * | _⊕_ l20
  neg  : *  ->  * | ⊖_ r40
  act  : *  X  ->  X | _⊙_ r30

theory
  (εU⊕ᴸ) a |> add (unit, a) = a
  (εU⊕ᴿ) a |> add (a, unit) = a
  (⊕A) a b c |> add (add(a, b), c) = add (a, add(b, c))
  (⊖N⊕ᴸ) a |> add (neg (a), a) = unit
  (⊖N⊕ᴿ) a |> add (a, neg (a)) = unit
  (εU⊙)      x : X |> act (unit,      x) = x
  (⊕A⊙) g h  x : X |> act (add(g, h), x) = act (g, act(h, x))
-}

module GroupAction.Signature where

open import SOAS.Context

-- Type declaration
data GAT : Set where
  * : GAT
  X : GAT



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

-- Operator symbols
data GAₒ : Set where
  unitₒ addₒ negₒ actₒ : GAₒ

-- Term signature
GA:Sig : Signature GAₒ
GA:Sig = sig λ
  {  unitₒ   ⟼₀ *
  ;  addₒ    (⊢₀ *) , (⊢₀ *) ⟼₂ *
  ;  negₒ    (⊢₀ *) ⟼₁ *
  ;  actₒ    (⊢₀ *) , (⊢₀ X) ⟼₂ X
  }

open Signature GA:Sig public