added fol-subst

This commit is contained in:
Thorsten Altenkirch 2023-06-22 17:18:51 +02:00
parent 309ba6ab70
commit 7cf08241b4
2 changed files with 148 additions and 0 deletions

138
fol-subst.agda Normal file
View File

@ -0,0 +1,138 @@
open import Data.Nat
open import Relation.Binary.PropositionalEquality
variable m n l :
data Term : Set where
zero : Term (suc n)
suc : Term n Term (suc n)
variable t u : Term n
data Subst : Set where
ε : Subst n 0
_,_ : Subst m n Term m Subst m (suc n)
suc-subst : Subst m n Subst (suc m) n
suc-subst ε = ε
suc-subst (ts , t) = suc-subst ts , suc t
id : Subst m m
id {zero} = ε
id {suc m} = (suc-subst (id {m})) , zero
subst-t : Term m Subst n m Term n
subst-t zero (us , u) = u
subst-t (suc t) (us , u) = subst-t t us
wk-t1 : Term n Term (suc n)
wk-t1 t = subst-t t (suc-subst id)
subst-t1 : Term (suc n) Term n Term n
subst-t1 t u = subst-t t (id , u)
comp : Subst m l Subst n m Subst n l
comp ε us = ε
comp (ts , u) us = (comp ts us) , (subst-t u us)
{-
t [ suc vs ] suc (t [vs ])
suc-subst ts (us , t) ts us
t [ id ] t
t [ us vs ] t [ us ] [ vs ]
ts id ts
id ts ts
(ts us) vs ts (us vs)
-}
{-
wk-t : (l : ) Term (l + n) Term (suc (l + n))
wk-t zero t = suc t
wk-t (suc l) zero = zero
wk-t (suc l) (suc t) = suc (wk-t l t)
subst-t : (l : ) Term (suc (l + n)) Term n Term (l + n)
subst-t zero zero u = u
subst-t zero (suc t) u = t
subst-t (suc l) zero u = zero
subst-t (suc l) (suc t) u = suc (subst-t l t u)
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
wk-F : (l : ) Form (l + n) Form (suc (l + n))
wk-F l (A B) = wk-F l A wk-F l B
wk-F l (F A) = F (wk-F (suc l) A)
wk-F l (P t) = P (wk-t l t)
subst-F : (l : ) Form (suc (l + n)) Term n Form (l + n)
subst-F l (A B) u = subst-F l A u subst-F l B u
subst-F l (F A) u = F (subst-F (suc l) A u)
subst-F l (P t) u = P (subst-t l t u)
infix 10 _▷_
data Con : Set where
: Con n
_▷_ : Con n Form n Con n
wk-C : (l : ) Con (l + n) Con (suc (l + n))
wk-C l =
wk-C l (Γ A) = wk-C l Γ wk-F l A
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 zero Γ) A Γ F A
App : Γ F A (t : Term _) Γ subst-F zero A t
{-
-- (A ⇒ ∀ x . P x) ⇒ ∀ x . A → P x
-- A ≡ A [ wk ][ < t > ]
wk-subst : subst l (wk l A) t 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))
-- (∀ x ∀ y . A(x,y)) ⇒ ∀ y ∀ x . A(y,x)
-- (A ⇒ ∀ x . B(x)) ⇒ ∀ x . A ⇒ B(x)
-- ∀ x y . A(x,y) ⇒ ∀ x . A(x,x)
-- ∀ x . A (x) ⇒ ∀ x y . A(x)
-- (((∀ x . A (x)) ⇒ B)⇒ B) ⇒ ∀ x . ((A (x) ⇒ B) ⇒ B)
-}
--eqq : (suc (suc (l + n))) suc l + suc n
eqq : (suc (l + n)) l + suc n
eqq = {!!}
eq : {t : Term (suc (l + n))}{u : Term n}
-- subst-t {n = suc n} l (subst Term (eqq {l = l}{n = n})(wk-t {n = n} (suc l) t)) (wk-t zero u)
subst-t {n = suc n} l (subst Term (eqq {l = (suc l)}{n = n})(wk-t {n = n} (suc l) t)) (wk-t zero u)
{! subst-t l t !} -- subst-t l (wk-t (suc l) t) u ≡ subst-t l t u
eq = {!!}
-}

View File

@ -84,3 +84,13 @@ example {A = A} = lam (lam (App (app (suc zero)
-- (((∀ x . A (x)) ⇒ B)⇒ B) ⇒ ∀ x . ((A (x) ⇒ B) ⇒ B)
-}
--eqq : (suc (suc (l + n))) suc l + suc n
eqq : (suc (l + n)) l + suc n
eqq = {!!}
eq : {t : Term (suc (l + n))}{u : Term n}
-- subst-t {n = suc n} l (subst Term (eqq {l = l}{n = n})(wk-t {n = n} (suc l) t)) (wk-t zero u)
subst-t {n = suc n} l (subst Term (eqq {l = (suc l)}{n = n})(wk-t {n = n} (suc l) t)) (wk-t zero u)
{! subst-t l t !} -- subst-t l (wk-t (suc l) t) u ≡ subst-t l t u
eq = {!!}