{-
This second-order signature was created from the following second-order syntax description:
syntax FOL
type
* : 0-ary
N : 0-ary
term
false : * | ⊥
or : * * -> * | _∨_ l20
true : * | ⊤
and : * * -> * | _∧_ l20
not : * -> * | ¬_ r50
eq : N N -> * | _≟_ l20
all : N.* -> * | ∀′
ex : N.* -> * | ∃′
theory
(⊥U∨ᴸ) a |> or (false, a) = a
(⊥U∨ᴿ) a |> or (a, false) = a
(∨A) a b c |> or (or(a, b), c) = or (a, or(b, c))
(∨C) a b |> or(a, b) = or(b, a)
(⊤U∧ᴸ) a |> and (true, a) = a
(⊤U∧ᴿ) a |> and (a, true) = a
(∧A) a b c |> and (and(a, b), c) = and (a, and(b, c))
(∧D∨ᴸ) a b c |> and (a, or (b, c)) = or (and(a, b), and(a, c))
(∧D∨ᴿ) a b c |> and (or (a, b), c) = or (and(a, c), and(b, c))
(⊥X∧ᴸ) a |> and (false, a) = false
(⊥X∧ᴿ) a |> and (a, false) = false
(¬N∨ᴸ) a |> or (not (a), a) = false
(¬N∨ᴿ) a |> or (a, not (a)) = false
(∧C) a b |> and(a, b) = and(b, a)
(∨I) a |> or(a, a) = a
(∧I) a |> and(a, a) = a
(¬²) a |> not(not (a)) = a
(∨D∧ᴸ) a b c |> or (a, and (b, c)) = and (or(a, b), or(a, c))
(∨D∧ᴿ) a b c |> or (and (a, b), c) = and (or(a, c), or(b, c))
(∨B∧ᴸ) a b |> or (and (a, b), a) = a
(∨B∧ᴿ) a b |> or (a, and (a, b)) = a
(∧B∨ᴸ) a b |> and (or (a, b), a) = a
(∧B∨ᴿ) a b |> and (a, or (a, b)) = a
(⊤X∨ᴸ) a |> or (true, a) = true
(⊤X∨ᴿ) a |> or (a, true) = true
(¬N∧ᴸ) a |> and (not (a), a) = false
(¬N∧ᴿ) a |> and (a, not (a)) = false
(DM∧) a b |> not (and (a, b)) = or (not(a), not(b))
(DM∨) a b |> not (or (a, b)) = and (not(a), not(b))
(DM∀) p : N.* |> not (all (x. p[x])) = ex (x. not(p[x]))
(DM∃) p : N.* |> not (ex (x. p[x])) = all (x. not(p[x]))
(∀D∧) p q : N.* |> all (x. and(p[x], q[x])) = and (all(x.p[x]), all(x.q[x]))
(∃D∨) p q : N.* |> ex (x. or(p[x], q[x])) = or (ex(x.p[x]), ex(x.q[x]))
(∧P∀ᴸ) p : * q : N.* |> and (p, all(x.q[x])) = all (x. and(p, q[x]))
(∧P∃ᴸ) p : * q : N.* |> and (p, ex (x.q[x])) = ex (x. and(p, q[x]))
(∨P∀ᴸ) p : * q : N.* |> or (p, all(x.q[x])) = all (x. or (p, q[x]))
(∨P∃ᴸ) p : * q : N.* |> or (p, ex (x.q[x])) = ex (x. or (p, q[x]))
(∧P∀ᴿ) p : N.* q : * |> and (all(x.p[x]), q) = all (x. and(p[x], q))
(∧P∃ᴿ) p : N.* q : * |> and (ex (x.p[x]), q) = ex (x. and(p[x], q))
(∨P∀ᴿ) p : N.* q : * |> or (all(x.p[x]), q) = all (x. or (p[x], q))
(∨P∃ᴿ) p : N.* q : * |> or (ex (x.p[x]), q) = ex (x. or (p[x], q))
(∀Eᴸ) p : N.* n : N |> all (x.p[x]) = and (p[n], all(x.p[x]))
(∃Eᴸ) p : N.* n : N |> ex (x.p[x]) = or (p[n], ex (x.p[x]))
(∀Eᴿ) p : N.* n : N |> all (x.p[x]) = and (all(x.p[x]), p[n])
(∃Eᴿ) p : N.* n : N |> ex (x.p[x]) = or (ex (x.p[x]), p[n])
(∃⟹) p : N.* q : * |> imp (ex (x.p[x]), q) = all (x. imp(p[x], q))
(∀⟹) p : N.* q : * |> imp (all(x.p[x]), q) = ex (x. imp(p[x], q))
-}
module FOL.Signature where
open import SOAS.Context
-- Type declaration
data FOLT : Set where
* : FOLT
N : FOLT
open import SOAS.Syntax.Signature FOLT public
open import SOAS.Syntax.Build FOLT public
-- Operator symbols
data FOLₒ : Set where
falseₒ orₒ trueₒ andₒ notₒ eqₒ allₒ exₒ : FOLₒ
-- Term signature
FOL:Sig : Signature FOLₒ
FOL:Sig = sig λ
{ falseₒ → ⟼₀ *
; orₒ → (⊢₀ *) , (⊢₀ *) ⟼₂ *
; trueₒ → ⟼₀ *
; andₒ → (⊢₀ *) , (⊢₀ *) ⟼₂ *
; notₒ → (⊢₀ *) ⟼₁ *
; eqₒ → (⊢₀ N) , (⊢₀ N) ⟼₂ *
; allₒ → (N ⊢₁ *) ⟼₁ *
; exₒ → (N ⊢₁ *) ⟼₁ *
}
open Signature FOL:Sig public