module Интуиционистское_Исчисление_Высказываний where

{- Часть 1 | Интуиционистское исчиcление высказываний -}

open import Вспомогательные_определения

{-
Сначала определим логическую часть - позитивный фрагмент
интуиционистского исчисления высказываний.
-}

{-
Φ набирается как \GF или \Phi
Чтобы узнать как набрать символ, наведите
на него курсор и M-x describe-char
-}

{-
Определение 1.1. Множество формул Φ задается индуктивно.
                 Пусть V - некоторое бесконечное множество переменных
                 (в нашем случае множество строк String). Тогда
                 ∙ всякая переменная является формулой
                 ∙ если φ, ψ - формулы, то φ ⊃ ψ - формула.
-}

infixr 10 _⊃_

data Φ : Множество where
  ппер : Строка → Φ
  _⊃_ : Φ → Φ → Φ

{- Определение 1.2. Контекст (обозн. Γ) - Список формул -}

Контекст = Список Φ

{-
Определение 1.3. Доказательство (формулы φ в контексте Γ) в ИИВ -
                 дерево вывода, где
                 ∙ Корень - Γ ⊢ φ - то, что доказывается
                 ∙ Лист - аксиома
                 ∙ Каждый узел связан с родительским по правилу вывода
-}

{- Определение 1.4. Отношение выводимости ‌⊢ ⊆ L(Φ) × Φ
                    задается индуктивно правилами вывода. -}

{-
===================================
ПРАВИЛА ВЫВОДА ПФ ИИВ

1) Группа аксиом:

-------- (Ax)
φ, Γ ⊢ φ

2) Логическая группа:

φ, Γ ⊢ ψ
--------- (⊃I)
Γ ⊢ φ ⊃ ψ

Γ ⊢ φ ⊃ ψ     Γ ⊢ φ
------------------- (⊃E)
Γ ⊢ ψ

3) Структурная группа:

Γ ⊢ φ
--------(Ослабление)
ψ, Γ ⊢ φ

Δ, φ, ψ, Γ ⊢ σ
--------------(Обмен)
Δ, ψ, φ, Γ ⊢ σ
===================================
-}

{-
Комментарий.

Аксиома - Аксиома. Мы можем делать предположения. Не требует предусловий.

⊃В - Введение импликации (alias теорема Эрбрана,
     теорема о Дедукции). В нашей системе, в отличие от Гильбертовской,
     мы берем ее без доказательства

⊃У - Удаление импликации (alias Modus Ponens).
     Широко известное правило отделения.
-}

infix 4 _⊢_
data _⊢_ : Контекст → Φ → Множество where

  Аксиома : ∀ {Γ φ} →
  
    ---------
    φ ∷ Γ ⊢ φ
    
  ⊃В : ∀ {Γ φ ψ} →
  
    φ ∷ Γ ⊢ ψ →
    -------------
    Γ ⊢ φ ⊃ ψ
    
  ⊃У : ∀ {Γ φ ψ} →
  
    Γ ⊢ φ ⊃ ψ →      Γ ⊢ φ →
    ------------------------
               Γ ⊢ ψ

postulate
  Ослабление : ∀ {Γ φ ψ} → Γ ⊢ φ → ψ ∷ Γ ⊢ φ
  Обмен : ∀ {n Γ φ} → Γ ⊢ φ → обмен n Γ ⊢ φ

{- В качестве примера докажем φ ⊃ φ, А также певвые две аксиомы Гильберта -}

private
  Пример1 : ∀ {φ} → [] ⊢ φ ⊃ φ
  Пример1 {φ} = ⊃В Аксиома

  Пример2 : ∀{φ ψ} → [] ⊢ φ ⊃ (ψ ⊃ φ)
  Пример2 {φ} {ψ} = ⊃В (⊃В (Ослабление Аксиома))

  Пример3 : ∀{φ ψ ν} → [] ⊢ (φ ⊃ (ψ ⊃ ν)) ⊃ (φ ⊃ ψ) ⊃ (φ ⊃ ν)
  Пример3 {φ} {ψ} {ν} =
    ⊃В (⊃В (⊃В (⊃У {Γ}{ψ}{ν} (⊃У{Γ}{φ}{ψ ⊃ ν}(Обмен {3} {Γ}
    (Ослабление (Ослабление Аксиома))) Аксиома)
    (⊃У (Ослабление Аксиома) Аксиома))))
    where Γ = φ ∷ (φ ⊃ ψ) ∷ (φ ⊃ (ψ ⊃ ν)) ∷ []