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 Γ = φ  (φ  ψ)  (φ  (ψ  ν))  []