my fol
This commit is contained in:
parent
d3cf3cd0e6
commit
00fd305f5f
109
fol.agda
Normal file
109
fol.agda
Normal file
@ -0,0 +1,109 @@
|
||||
open import Data.Nat
|
||||
open import Relation.Binary.PropositionalEquality
|
||||
|
||||
variable m n : ℕ
|
||||
|
||||
data Term : ℕ → Set where
|
||||
zero : Term (suc n)
|
||||
suc : Term n → Term (suc n)
|
||||
|
||||
variable t u : Term n
|
||||
|
||||
data Weak : ℕ → Set where
|
||||
wk : Weak (suc n)
|
||||
suc : Weak n → Weak (suc n)
|
||||
|
||||
data Subst : ℕ → Set where
|
||||
<_> : Term n → Subst n
|
||||
suc : Subst n → Subst (suc n)
|
||||
|
||||
_[_]t : Term n → Weak n → Term (suc n)
|
||||
t [ wk ]t = suc t
|
||||
zero [ suc w ]t = zero
|
||||
suc t [ suc w ]t = suc (t [ w ]t)
|
||||
|
||||
{-
|
||||
0 -> 0
|
||||
1 -> 2
|
||||
2 -> 3
|
||||
|
||||
suc wk
|
||||
|
||||
|
||||
wk
|
||||
0 -> 1
|
||||
1 -> 2
|
||||
2 -> 3
|
||||
-}
|
||||
|
||||
_s[_]t : Term (suc n) → Subst n → Term n
|
||||
zero s[ < u > ]t = u
|
||||
suc t s[ < u > ]t = t
|
||||
zero s[ suc s ]t = zero
|
||||
suc t s[ suc s ]t = suc (t s[ s ]t)
|
||||
|
||||
{-
|
||||
x,y,z --> x,z
|
||||
0,1,2 y => x,z ⊢ t
|
||||
|
||||
x => x 0 => 0
|
||||
y => t 1 => t
|
||||
z => z 2 => 1
|
||||
|
||||
|
||||
-}
|
||||
|
||||
infix 15 _⇒_
|
||||
|
||||
data Form : ℕ → Set where
|
||||
_⇒_ : Form n → Form n → Form n
|
||||
∀F : Form (suc n) → Form n
|
||||
P : Term n → Form n
|
||||
-- R : Term n → Term n → Form n
|
||||
|
||||
_[_]F : Form n → Weak n → Form (suc n)
|
||||
(A ⇒ B) [ w ]F = (A [ w ]F) ⇒ (B [ w ]F)
|
||||
∀F A [ w ]F = ∀F (A [ suc w ]F)
|
||||
P a [ w ]F = P (a [ w ]t )
|
||||
|
||||
_s[_]F : Form (suc n) → Subst n → Form n
|
||||
(A ⇒ B) s[ s ]F = (A s[ s ]F) ⇒ (B s[ s ]F)
|
||||
∀F A s[ s ]F = ∀F (A s[ suc s ]F)
|
||||
P a s[ s ]F = P (a s[ s ]t )
|
||||
|
||||
infix 10 _▷_
|
||||
|
||||
data Con : ℕ → Set where
|
||||
• : Con n
|
||||
_▷_ : Con n → Form n → Con n
|
||||
|
||||
_[_]C : Con n → Weak n → Con (suc n)
|
||||
• [ w ]C = •
|
||||
(Γ ▷ A) [ w ]C = (Γ [ w ]C) ▷ (A [ w ]F)
|
||||
|
||||
variable Γ Δ : Con n
|
||||
variable A B C : Form n
|
||||
|
||||
infix 5 _⊢_
|
||||
|
||||
data _⊢_ : Con n → Form n → Set where
|
||||
zero : Γ ▷ A ⊢ A
|
||||
suc : Γ ⊢ A → Γ ▷ B ⊢ A
|
||||
lam : Γ ▷ A ⊢ B → Γ ⊢ A ⇒ B
|
||||
app : Γ ⊢ A ⇒ B → Γ ⊢ A → Γ ⊢ B
|
||||
Lam : Γ [ wk ]C ⊢ A → Γ ⊢ ∀F A
|
||||
App : Γ ⊢ ∀F A → (t : Term _) → Γ ⊢ A s[ < t > ]F
|
||||
|
||||
-- (A ⇒ ∀ x . P x) ⇒ ∀ x . A → P x
|
||||
|
||||
-- A ≡ A [ wk ][ < t > ]
|
||||
|
||||
wk-subst : (A [ wk ]F) s[ < t > ]F ≡ A
|
||||
wk-subst = {!!}
|
||||
|
||||
example : • ⊢ (A ⇒ (∀F (P zero))) ⇒ (∀F (A [ wk ]F) ⇒ P zero)
|
||||
example {A = A} = lam (lam (App (app (suc zero)
|
||||
(subst (λ X → (• ▷ A ⇒ ∀F (P zero)) ▷ ∀F (A [ wk ]F) ⊢ X)
|
||||
(wk-subst {A = A}) (App zero zero))) zero))
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user