------------------------------------------------------------------------------ -- First-order logic base ------------------------------------------------------------------------------ {-# OPTIONS --exact-split #-} {-# OPTIONS --no-sized-types #-} {-# OPTIONS --no-universe-polymorphism #-} {-# OPTIONS --without-K #-} module FOL.Base where infix 2 ⋀ infixr 1 _⇒_ infixr 0 _⇔_ ------------------------------------------------------------------------------ -- First-order logic (without equality). open import Common.FOL.FOL public ------------------------------------------------------------------------------ -- We added extra symbols for the implication, the bicondicional and -- the universal quantification (see module Common.FOL.FOL). -- The implication data type. data _⇒_ (A B : Set) : Set where fun : (A → B) → A ⇒ B app : {A B : Set} → A ⇒ B → A → B app (fun f) a = f a -- Biconditional. _⇔_ : Set → Set → Set A ⇔ B = (A ⇒ B) ∧ (B ⇒ A) -- The universal quantifier type on D. data ⋀ (A : D → Set) : Set where dfun : ((t : D) → A t) → ⋀ A -- Sugar syntax for the universal quantifier. syntax ⋀ (λ x → e) = ⋀[ x ] e dapp : {A : D → Set}(t : D) → ⋀ A → A t dapp t (dfun f) = f t ------------------------------------------------------------------------------ -- In first-order logic it is assumed that the universe of discourse -- is nonempty. postulate D≢∅ : D ------------------------------------------------------------------------------ -- The ATPs work in classical logic, therefore we add the principle of -- the exclude middle for prove some non-intuitionistic theorems. Note -- that we do not need to add the postulate as an ATP axiom. -- The principle of the excluded middle. postulate pem : ∀ {A} → A ∨ ¬ A