{- This second-order signature was created from the following second-order syntax description: syntax Inception | IA type L : 0-ary P : 0-ary A : 0-ary term rec : L P -> A inc : L.A P.A -> A theory (S) p : P a : P.A |> inc (l. rec (l, p[]), x. a[x]) = a[p[]] (E) a : L.A |> k : L |- inc (l. a[l], x. rec(k, x)) = a[k] (W) m : A a : P.A |> inc (l. m[], x. a[x]) = m[] (A) p : (L,L).A a : (L,P).A b : P.A |> inc (l. inc (k. p[l, k], x. a[l,x]), y. b[y]) = inc (k. inc(l. p[l,k], y.b[y]), x. inc(l. a[l,x], y.b[y])) -} module Inception.Signature where open import SOAS.Context -- Type declaration data IAT : Set where L : IAT P : IAT A : IAT open import SOAS.Syntax.Signature IAT public open import SOAS.Syntax.Build IAT public -- Operator symbols data IAₒ : Set where recₒ incₒ : IAₒ -- Term signature IA:Sig : Signature IAₒ IA:Sig = sig λ { recₒ → (⊢₀ L) , (⊢₀ P) ⟼₂ A ; incₒ → (L ⊢₁ A) , (P ⊢₁ A) ⟼₂ A } open Signature IA:Sig public