Added Agda new version, some progress

This commit is contained in:
Mysaa 2023-07-14 16:22:05 +02:00
parent 3c5be4ffb4
commit a897865253
Signed by: Mysaa
GPG Key ID: 7054D5D6A90F084F
4 changed files with 149 additions and 57 deletions

View File

@ -1,4 +1,4 @@
{-# OPTIONS --prop #-} {-# OPTIONS --prop --rewriting #-}
open import PropUtil open import PropUtil
@ -129,6 +129,9 @@ module FFOLInitial where
σ-idr : {α : Subt Δₜ Γₜ} α ∘ₜ idₜ α σ-idr : {α : Subt Δₜ Γₜ} α ∘ₜ idₜ α
σ-idr {α = εₜ} = refl σ-idr {α = εₜ} = refl
σ-idr {α = α ,ₜ x} = cong₂ _,ₜ_ σ-idr []t-id σ-idr {α = α ,ₜ x} = cong₂ _,ₜ_ σ-idr []t-id
∘ₜ-ass : {Γₜ Δₜ Ξₜ Ψₜ : Cont}{α : Subt Γₜ Δₜ}{β : Subt Δₜ Ξₜ}{γ : Subt Ξₜ Ψₜ} (γ ∘ₜ β) ∘ₜ α γ ∘ₜ (β ∘ₜ α)
∘ₜ-ass {α = α} {β} {εₜ} = refl
∘ₜ-ass {α = α} {β} {γ ,ₜ x} = cong₂ _,ₜ_ ∘ₜ-ass (≡sym ([]t-∘ {t = x}))
[]f-∀∀ : {A : For (Γₜ ▹t⁰)} {σₜ : Subt Δₜ Γₜ} ( A) [ σₜ ]f ( (A [ (σₜ ∘ₜ πₜ¹ idₜ) ,ₜ πₜ² idₜ ]f)) []f-∀∀ : {A : For (Γₜ ▹t⁰)} {σₜ : Subt Δₜ Γₜ} ( A) [ σₜ ]f ( (A [ (σₜ ∘ₜ πₜ¹ idₜ) ,ₜ πₜ² idₜ ]f))
[]f-∀∀ {A = A} = cong (cong (_[_]f A) (cong₂ _,ₜ_ (≡tran (cong wkₜσt (≡sym σ-idr)) (≡sym lem3)) refl)) []f-∀∀ {A = A} = cong (cong (_[_]f A) (cong₂ _,ₜ_ (≡tran (cong wkₜσt (≡sym σ-idr)) (≡sym lem3)) refl))
@ -299,11 +302,32 @@ module FFOLInitial where
_∘ₚ_ : {Γₚ Δₚ Ξₚ : Conp Δₜ} Subp {Δₜ} Δₚ Ξₚ Subp {Δₜ} Γₚ Δₚ Subp {Δₜ} Γₚ Ξₚ _∘ₚ_ : {Γₚ Δₚ Ξₚ : Conp Δₜ} Subp {Δₜ} Δₚ Ξₚ Subp {Δₜ} Γₚ Δₚ Subp {Δₜ} Γₚ Ξₚ
εₚ ∘ₚ β = εₚ εₚ ∘ₚ β = εₚ
(α ,ₚ pf) ∘ₚ β = (α ∘ₚ β) ,ₚ (pf [ β ]p) (α ,ₚ pf) ∘ₚ β = (α ∘ₚ β) ,ₚ (pf [ β ]p)
idlₚ : {Γₚ Δₚ : Conp Γₜ} {σₚ : Subp Γₚ Δₚ} (idₚ {Δₚ = Δₚ}) ∘ₚ σₚ σₚ
idlₚ {Δₚ = ◇p} = ?
idlₚ {Δₚ = Δₚ ▹p⁰ x} = ?
idrₚ : {Γₚ Δₚ : Conp Γₜ} {σₚ : Subp Γₚ Δₚ} σₚ ∘ₚ (idₚ {Δₚ = Γₚ}) σₚ
idrₚ = {!!}
id : Sub Γ Γ id : Sub Γ Γ
id {Γ} = sub idₜ (subst (Subp _) (≡sym []c-id) idₚ) id {Γ} = sub idₜ (subst (Subp _) (≡sym []c-id) idₚ)
_∘_ : Sub Δ Ξ Sub Γ Δ Sub Γ Ξ _∘_ : Sub Δ Ξ Sub Γ Δ Sub Γ Ξ
sub αₜ αₚ sub βₜ βₚ = sub (αₜ ∘ₜ βₜ) (subst (Subp _) (≡sym []c-∘) (αₚ [ βₜ ]σₚ) ∘ₚ βₚ) sub αₜ αₚ sub βₜ βₚ = sub (αₜ ∘ₜ βₜ) (subst (Subp _) (≡sym []c-∘) (αₚ [ βₜ ]σₚ) ∘ₚ βₚ)
idl : {Γ Δ : Con} {σ : Sub Γ Δ} (id {Δ}) σ σ
idl {σ = sub σₜ σₚ} = cong₂' sub σ-idl {!!}
idr : {Γ Δ : Con} {σ : Sub Γ Δ} σ (id {Γ}) σ
idr {σ = sub σₜ σₚ} = cong₂' sub σ-idr {!!}
{-
∘ₚ-ass :
{Γₜ Δₜ Ξₜ Ψₜ : Cont}{Γₚ : Conp Γₜ}{Δₚ : Conp Δₜ}{Ξₚ : Conp Ξₜ}{Ψₚ : Conp Ψₜ}
{αₜ : Subt Γₜ Δₜ}{βₜ : Subt Δₜ Ξₜ}{γₜ : Subt Ξₜ Ψₜ}{γₚ : Subp Ξₚ (Ψₚ [ γₜ ]c)}{βₚ : Subp Δₚ (Ξₚ [ βₜ ]c)}{αₚ : Subp Γₚ (Δₚ [ αₜ ]c)}
{eq₁ : Subp (Δₚ [ αₜ ]c) ((Ψₚ [ γₜ ∘ₜ βₜ ]c)[ αₜ ]c) Subp (Δₚ [ αₜ ]c) (Ψₚ [ (γₜ ∘ₜ βₜ) ∘ₜ αₜ ]c)}
{eq₂ : Subp (Ξₚ [ βₜ ]c) ((Ψₚ [ γₜ ]c)[ βₜ ]c) Subp (Ξₚ [ βₜ ]c) (Ψₚ [ γₜ ∘ₜ βₜ ]c)}
{eq₃ : Subp (Ξₚ [ βₜ ∘ₜ αₜ ]c) ((Ψₚ [ γₜ ]c) [ βₜ ∘ₜ αₜ ]c) {!Subp (Ξₚ [ βₜ ∘ₜ αₜ ]c) (Ψₚ [ γₜ ∘ₜ (βₜ ∘ₜ αₜ) ]c)!}}
{eq₄ : Subp (Δₚ [ αₜ ]c) ((Ξₚ [ βₜ ]c) [ αₜ ]c) Subp (Δₚ [ αₜ ]c) (Ξₚ [ βₜ ∘ₜ αₜ ]c)}
(coe eq₁ (((coe eq₂ (γₚ [ βₜ ]σₚ)) ∘ₚ βₚ) [ αₜ ]σₚ) ∘ₚ αₚ) (coe eq₃ (γₚ [ βₜ ∘ₜ αₜ ]σₚ)) ∘ₚ ((coe eq₄ (βₚ [ αₜ ]σₚ) ∘ₚ αₚ))
-}
postulate ∘-ass : {Γ Δ Ξ Ψ : Con}{α : Sub Γ Δ}{β : Sub Δ Ξ}{γ : Sub Ξ Ψ} (γ β) α γ (β α)
-- ∘-ass {Γ}{Δ}{Ξ}{Ψ}{α = sub αₜ αₚ} {β = sub βₜ βₚ} {γ = sub γₜ γₚ} = {!Subp (Con.p Ξ [ βₜ ∘ₜ αₜ ]c) (Con.p Ψ [ γₜ ∘ₜ (βₜ ∘ₜ αₜ) ]c)!}
-- SUB-ization -- SUB-ization
@ -332,15 +356,20 @@ module FFOLInitial where
--lemG eq ε= {!!} --lemG eq ε= {!!}
substf : { ' : Level}{A : Set }{P : A Set '}{Q : A Set '}{a b c d : A}{eqa : a a}{eqb : b b}{eqcd : c d}{eqdc : d c}{f : P a P b}{g : P b Q c}{x : P a} g (subst P eqb (f (subst P eqa x))) subst Q eqdc (subst Q eqcd (g (f x))) substf : { ' : Level}{A : Set }{P : A Set '}{Q : A Set '}{a b c d : A}{eqa : a a}{eqb : b b}{eqcd : c d}{eqdc : d c}{f : P a P b}{g : P b Q c}{x : P a} g (subst P eqb (f (subst P eqa x))) subst Q eqdc (subst Q eqcd (g (f x)))
substf {P = P} {Q = Q} {eqcd = refl} {f = f} {g = g} = ≡tran² (cong g (≡tran (substrefl {P = P} {e = refl}) (cong f (substrefl {P = P} {e = refl})))) (≡sym (substrefl {P = Q} {e = refl})) (≡sym (substrefl {P = Q} {e = refl})) substf {P = P} {Q = Q} {eqcd = refl} {f = f} {g = g} = ≡tran² (cong g (≡tran (substrefl {P = P} {e = refl}) (cong f (substrefl {P = P} {e = refl})))) (≡sym (substrefl {P = Q} {e = refl})) (≡sym (substrefl {P = Q} {e = refl}))
lemG : {σₜ : Subt Γₜ Ξₜ}{δₜ : Subt Δₜ Γₜ}{σₚ : Subp Γₚ (Ξₚ [ σₜ ]c)}{δₚ : Subp Δₚ (Γₚ [ δₜ ]c)}{t : Tm Γₜ}
{eq₁ : Subp (Γₚ [ δₜ ]c) (((Ξₚ ▹tp) [ σₜ ,ₜ t ]c) [ δₜ ]c) Subp (Γₚ [ δₜ ]c) ((Ξₚ ▹tp) [ (σₜ ∘ₜ δₜ) ,ₜ (t [ δₜ ]t) ]c)} ,ₜ∘* {Γ} {Δ} {Ξ} {sub σₜ σₚ} {sub δₜ δₚ} {t} = cong (sub ((σₜ ∘ₜ δₜ) ,ₜ (t [ δₜ ]t)))
{eq₂ : Subp Γₚ (Ξₚ [ σₜ ]c) Subp Γₚ ((Ξₚ ▹tp) [ σₜ ,ₜ t ]c)} (substfgpoly
{eq₃ : Subp Δₚ (Ξₚ [ σₜ ∘ₜ δₜ ]c) Subp Δₚ ((Ξₚ ▹tp) [ (σₜ ∘ₜ δₜ) ,ₜ (t [ δₜ ]t)]c)} {P = Subp {Con.t Δ} (Con.p Δ)}
{eq₄ : Subp (Γₚ [ δₜ ]c) ((Ξₚ [ σₜ ]c) [ δₜ ]c) Subp (Γₚ [ δₜ ]c) (Ξₚ [ σₜ ∘ₜ δₜ ]c)} {Q = Subp {Con.t Δ} ((Con.p Γ) [ δₜ ]c)}
(coe eq₁ ((coe eq₂ σₚ) [ δₜ ]σₚ)) ∘ₚ δₚ coe eq₃ ((coe eq₄ (σₚ [ δₜ ]σₚ)) ∘ₚ δₚ) {R = Subp {Con.t Γ} (Con.p Γ)}
lemG {σₜ = σₜ} {δₜ} {σₚ} {δₚ} {t} {eq₁} {eq₂} {eq₃} {eq₄} = {!eq₁!} {F = λ X X [ δₜ ]c}
,ₜ∘* {Γ} {Δ} {Ξ} {sub σₜ σₚ} {sub δₜ δₚ} {t} = cong (sub ((σₜ ∘ₜ δₜ) ,ₜ (t [ δₜ ]t))) lemG {eq₁ = ≡sym lemA}
{eq₂ = ≡sym []c-∘}
{eq₃ = ≡sym []c-∘}
{eq₄ = ≡sym lemA}
{g = λ σₚ σₚ ∘ₚ δₚ}
{f = λ σₚ σₚ [ δₜ ]σₚ}
{x = σₚ})
πₚ¹* : {Γ Δ : Con} {A : For (Con.t Γ)} Sub Δ (Γ ▹p A) Sub Δ Γ πₚ¹* : {Γ Δ : Con} {A : For (Con.t Γ)} Sub Δ (Γ ▹p A) Sub Δ Γ
πₚ¹* (sub σₜ (σₚ ,ₚ pf)) = sub σₜ σₚ πₚ¹* (sub σₜ (σₚ ,ₚ pf)) = sub σₜ σₚ
@ -350,10 +379,19 @@ module FFOLInitial where
sub σₜ σₚ ,ₚ* pf = sub σₜ (σₚ ,ₚ pf) sub σₜ σₚ ,ₚ* pf = sub σₜ (σₚ ,ₚ pf)
,ₚ∘πₚ : {Γ Δ : Con} {F : For (Con.t Γ)} {σ : Sub Δ (Γ ▹p F)} (πₚ¹* σ) ,ₚ* (πₚ² σ) σ ,ₚ∘πₚ : {Γ Δ : Con} {F : For (Con.t Γ)} {σ : Sub Δ (Γ ▹p F)} (πₚ¹* σ) ,ₚ* (πₚ² σ) σ
,ₚ∘πₚ {σ = sub σₜ (σₚ ,ₚ pf)} = refl ,ₚ∘πₚ {σ = sub σₜ (σₚ ,ₚ p)} = refl
,ₚ∘ : {Γ Δ Ξ : Con}{σ : Sub Γ Ξ}{δ : Sub Δ Γ}{F : For (Con.t Ξ)}{prf : Pf Γ (F [ Sub.t σ ]f)} (σ ,ₚ* prf) δ (σ δ) ,ₚ* (substP (λ F Pf Δ F) (≡sym []f-∘) ((prf [ Sub.t δ ]pₜ) [ Sub.p δ ]p)) --funlol : {Γₜ Δₜ : Cont}{Γₚ : Conp Γₜ}{Δₚ : Conp Δₜ}{Ξₚ : Conp Ξₜ}{σₜ : Subt Γₜ Ξₜ}{δₜ : Subt Δₜ Γₜ}{δₚ : Subp Δₚ (Γₚ [ δₜ ]c)}{A : For Ξₜ}{prf : Pf (con Δₜ (Γₚ [ δₜ ]c)) ((A [ σₜ ∘ₜ δₜ ]f))} Subp {Δₜ} (Γₚ [ δₜ ]c) ((Ξₚ [ σₜ ∘ₜ δₜ ]c) ▹p⁰ ((A [ σₜ ]f) [ δₜ ]f)) Subp {Δₜ} (Δₚ) ((Ξₚ [ σₜ ∘ₜ δₜ ]c) ▹p⁰ (A [ σₜ ∘ₜ δₜ ]f))
,ₚ∘ {Γ = Γ} {Δ = Δ} {σ = sub σₜ σₚ} {sub δₜ δₚ} {F = A} = cong (sub (σₜ ∘ₜ δₜ)) {!!} --funlol {Γₚ = Γₚ} {Ξₚ = Ξₚ} {σₜ = σₜ} {δₜ = δₜ} {δₚ = δₚ} {prf = prf} (ξ ,ₚ pf) = ((subst (λ X → Subp (Γₚ [ δₜ ]c) ((Ξₚ [ σₜ ∘ₜ δₜ ]c) ▹p⁰ X)) (≡sym []f-∘) ξ) ,ₚ ?) ∘ₚ δₚ
postulate ,ₚ∘ : {Γ Δ Ξ : Con}{σ : Sub Γ Ξ}{δ : Sub Δ Γ}{F : For (Con.t Ξ)}{prf : Pf Γ (F [ Sub.t σ ]f)} (σ ,ₚ* prf) δ (σ δ) ,ₚ* (substP (λ F Pf Δ F) (≡sym []f-∘) ((prf [ Sub.t δ ]pₜ) [ Sub.p δ ]p))
{-,ₚ∘ {Γ = Γ} {Δ = Δ} {σ = sub σₜ σₚ} {sub δₜ δₚ} {F = A} {prf} = cong (sub (σₜ ∘ₜ δₜ)) (cong {!funlol!}
(substfpoly
{P = λ X Subp (Con.p Γ [ δₜ ]c) (X ▹p⁰ ((A [ σₜ ]f) [ δₜ ]f))}
{R = λ X Subp (Con.p Γ [ δₜ ]c) X}
{eq = ≡sym []c-∘}
{f = λ ξ ξ ,ₚ (prf [ δₜ ]pₜ)}
{x = σₚ [ δₜ ]σₚ}
))
-}
--_,ₜ_ : {Γ Δ : Con} Sub Δ Γ Tm Δ Sub Δ (Γ ▹t) --_,ₜ_ : {Γ Δ : Con} Sub Δ Γ Tm Δ Sub Δ (Γ ▹t)
--πₜ²∘,ₜ : {Γ Δ : Con} {σ : Sub Δ Γ} {t : Tm Δ} πₜ² (σ ,ₜ t) t --πₜ²∘,ₜ : {Γ Δ : Con} {σ : Sub Δ Γ} {t : Tm Δ} πₜ² (σ ,ₜ t) t
--πₜ¹∘,ₜ : {Γ Δ : Con} {σ : Sub Δ Γ} {t : Tm Δ} πₜ¹ (σ ,ₜ t) σ --πₜ¹∘,ₜ : {Γ Δ : Con} {σ : Sub Δ Γ} {t : Tm Δ} πₜ¹ (σ ,ₜ t) σ
@ -375,9 +413,13 @@ module FFOLInitial where
{ Con = Con { Con = Con
; Sub = Sub ; Sub = Sub
; _∘_ = _∘_ ; _∘_ = _∘_
; ∘-ass = ∘-ass
; id = id ; id = id
; idl = {!!}
; idr = {!!}
; = ; =
; ε = sub εₜ εₚ ; ε = sub εₜ εₚ
; ε-u = {!!}
; Tm = λ Γ Tm (Con.t Γ) ; Tm = λ Γ Tm (Con.t Γ)
; _[_]t = λ t σ t [ Sub.t σ ]t ; _[_]t = λ t σ t [ Sub.t σ ]t
; []t-id = []t-id ; []t-id = []t-id

View File

@ -1,4 +1,4 @@
{-# OPTIONS --prop #-} {-# OPTIONS --prop --rewriting #-}
open import PropUtil open import PropUtil
@ -15,11 +15,15 @@ module FinitaryFirstOrderLogic where
infixr 5 _⊢_ infixr 5 _⊢_
field field
Con : Set ℓ¹ Con : Set ℓ¹
Sub : Con Con Set ℓ⁵ -- It makes a posetal category Sub : Con Con Set ℓ⁵ -- It makes a category
_∘_ : {Γ Δ Ξ : Con} Sub Δ Ξ Sub Γ Δ Sub Γ Ξ _∘_ : {Γ Δ Ξ : Con} Sub Δ Ξ Sub Γ Δ Sub Γ Ξ
∘-ass : {Γ Δ Ξ Ψ : Con}{α : Sub Γ Δ}{β : Sub Δ Ξ}{γ : Sub Ξ Ψ} (γ β) α γ (β α)
id : {Γ : Con} Sub Γ Γ id : {Γ : Con} Sub Γ Γ
idl : {Γ Δ : Con} {σ : Sub Γ Δ} (id {Δ}) σ σ
idr : {Γ Δ : Con} {σ : Sub Γ Δ} σ (id {Γ}) σ
: Con -- The initial object of the category : Con -- The initial object of the category
ε : {Γ : Con} Sub Γ -- The morphism from the initial to any object ε : {Γ : Con} Sub Γ -- The morphism from the initial to any object
ε-u : {Γ : Con} {σ : Sub Γ } σ ε {Γ}
-- Functor Con → Set called Tm -- Functor Con → Set called Tm
Tm : Con Set ℓ² Tm : Con Set ℓ²
@ -27,7 +31,7 @@ module FinitaryFirstOrderLogic where
[]t-id : {Γ : Con} {x : Tm Γ} x [ id {Γ} ]t x []t-id : {Γ : Con} {x : Tm Γ} x [ id {Γ} ]t x
[]t-∘ : {Γ Δ Ξ : Con} {α : Sub Ξ Δ} {β : Sub Δ Γ} {t : Tm Γ} t [ β α ]t (t [ β ]t) [ α ]t []t-∘ : {Γ Δ Ξ : Con} {α : Sub Ξ Δ} {β : Sub Δ Γ} {t : Tm Γ} t [ β α ]t (t [ β ]t) [ α ]t
-- Tm -- Tm : Set+
_▹ₜ : Con Con _▹ₜ : Con Con
πₜ¹ : {Γ Δ : Con} Sub Δ (Γ ▹ₜ) Sub Δ Γ πₜ¹ : {Γ Δ : Con} Sub Δ (Γ ▹ₜ) Sub Δ Γ
πₜ² : {Γ Δ : Con} Sub Δ (Γ ▹ₜ) Tm Δ πₜ² : {Γ Δ : Con} Sub Δ (Γ ▹ₜ) Tm Δ
@ -137,11 +141,11 @@ module FinitaryFirstOrderLogic where
f g = λ x f (g x) f g = λ x f (g x)
id : {Γ : Con} Sub Γ Γ id : {Γ : Con} Sub Γ Γ
id = λ x x id = λ x x
record : Con where ε : {Γ : Con} Sub Γ ⊤ₛ -- The morphism from the initial to any object
constructor ◇◇ ε Γ = ttₛ
ε : {Γ : Con} Sub Γ -- The morphism from the initial to any object ε-u : {Γ : Con} {σ : Sub Γ ⊤ₛ} σ ε {Γ}
ε Γ = ◇◇ ε-u = refl
-- Functor Con → Set called Tm -- Functor Con → Set called Tm
Tm : Con Set Tm : Con Set
Tm Γ = Γ TM Tm Γ = Γ TM
@ -251,9 +255,13 @@ module FinitaryFirstOrderLogic where
{ Con = Con { Con = Con
; Sub = Sub ; Sub = Sub
; _∘_ = _∘_ ; _∘_ = _∘_
; ∘-ass = refl
; id = id ; id = id
; = ; idl = refl
; idr = refl
; = ⊤ₛ
; ε = ε ; ε = ε
; ε-u = refl
; Tm = Tm ; Tm = Tm
; _[_]t = _[_]t ; _[_]t = _[_]t
; []t-id = []t-id ; []t-id = []t-id
@ -294,49 +302,47 @@ module FinitaryFirstOrderLogic where
-- (∀ x ∀ y . A(x,y)) ⇒ ∀ y ∀ x . A(y,x) -- (∀ x ∀ y . A(x,y)) ⇒ ∀ y ∀ x . A(y,x)
-- both sides are ∀ ∀ A (0,1) -- both sides are ∀ ∀ A (0,1)
ex1 : {A : For ( ▹ₜ ▹ₜ)} (( ( A)) ( ( A))) ex1 : {A : For (⊤ₛ ▹ₜ ▹ₜ)} ⊤ₛ (( ( A)) ( ( A)))
ex1 _ hyp = hyp ex1 _ hyp = hyp
-- (A ⇒ ∀ x . B(x)) ⇒ ∀ x . A ⇒ B(x) -- (A ⇒ ∀ x . B(x)) ⇒ ∀ x . A ⇒ B(x)
ex2 : {A : For } {B : For ( ▹ₜ)} ((A ( B)) ( ((A [ πₜ¹ id ]f) B))) ex2 : {A : For ⊤ₛ} {B : For (⊤ₛ ▹ₜ)} ⊤ₛ ((A ( B)) ( ((A [ πₜ¹ id ]f) B)))
ex2 _ h t h' = h h' t ex2 _ h t h' = h h' t
-- ∀ x y . A(x,y) ⇒ ∀ x . A(x,x) -- ∀ x y . A(x,y) ⇒ ∀ x . A(x,x)
-- For simplicity, I swiched positions of parameters of A (somehow...) -- For simplicity, I swiched positions of parameters of A (somehow...)
ex3 : {A : For ( ▹ₜ ▹ₜ)} (( ( A)) ( (A [ id ,ₜ (πₜ² id) ]f))) ex3 : {A : For (⊤ₛ ▹ₜ ▹ₜ)} ⊤ₛ (( ( A)) ( (A [ id ,ₜ (πₜ² id) ]f)))
ex3 _ h t = h t t ex3 _ h t = h t t
-- ∀ x . A (x) ⇒ ∀ x y . A(x) -- ∀ x . A (x) ⇒ ∀ x y . A(x)
ex4 : {A : For ( ▹ₜ)} (( A) ( ( (A [ ε ,ₜ (πₜ² (πₜ¹ id)) ]f)))) ex4 : {A : For (⊤ₛ ▹ₜ)} ⊤ₛ (( A) ( ( (A [ ε ,ₜ (πₜ² (πₜ¹ id)) ]f))))
ex4 {A} ◇◇ x t t' = x t ex4 {A} ◇◇ x t t' = x t
-- (((∀ x . A (x)) ⇒ B)⇒ B) ⇒ ∀ x . ((A (x) ⇒ B) ⇒ B) -- (((∀ x . A (x)) ⇒ B)⇒ B) ⇒ ∀ x . ((A (x) ⇒ B) ⇒ B)
ex5 : {A : For ( ▹ₜ)} {B : For } (((( A) B) B) ( ((A (B [ πₜ¹ id ]f)) (B [ πₜ¹ id ]f)))) ex5 : {A : For (⊤ₛ ▹ₜ)} {B : For ⊤ₛ} ⊤ₛ (((( A) B) B) ( ((A (B [ πₜ¹ id ]f)) (B [ πₜ¹ id ]f))))
ex5 ◇◇ h t h' = h (λ h'' h' (h'' t)) ex5 ◇◇ h t h' = h (λ h'' h' (h'' t))
record Kripke : Set where record Kripke : Set (lsuc (ℓ¹)) where
field field
World : Set World : Set ℓ¹
_≤_ : World World Prop _≤_ : World World Prop
≤refl : {w : World} w w ≤refl : {w : World} w w
≤tran : {w w' w'' : World} w w' w' w'' w w' ≤tran : {w w' w'' : World} w w' w' w'' w w'
TM : World Set TM : World Set ℓ¹
TM≤ : {w w' : World} w w' TM w TM w' TM≤ : {w w' : World} w w' TM w TM w'
REL : (w : World) TM w TM w Prop REL : (w : World) TM w TM w Prop ℓ¹
REL≤ : {w w' : World} {t u : TM w} (eq : w w') REL w t u REL w' (TM≤ eq t) (TM≤ eq u) REL≤ : {w w' : World} {t u : TM w} (eq : w w') REL w t u REL w' (TM≤ eq t) (TM≤ eq u)
infixr 10 _∘_ infixr 10 _∘_
Con = World Set Con = World Set ℓ¹
Sub : Con Con Set Sub : Con Con Set ℓ¹
Sub Δ Γ = (w : World) Δ w Γ w Sub Δ Γ = (w : World) Δ w Γ w
_∘_ : {Γ Δ Ξ : Con} Sub Δ Ξ Sub Γ Δ Sub Γ Ξ _∘_ : {Γ Δ Ξ : Con} Sub Δ Ξ Sub Γ Δ Sub Γ Ξ
α β = λ w γ α w (β w γ) α β = λ w γ α w (β w γ)
id : {Γ : Con} Sub Γ Γ id : {Γ : Con} Sub Γ Γ
id = λ w γ γ id = λ w γ γ
record ◇⁰ : Set where
constructor ◇◇⁰
: Con -- The initial object of the category : Con -- The initial object of the category
= λ w ◇⁰ = λ w ⊤ₛ
ε : {Γ : Con} Sub Γ -- The morphism from the initial to any object ε : {Γ : Con} Sub Γ -- The morphism from the initial to any object
ε w Γ = ◇◇⁰ ε w Γ = ttₛ
-- Functor Con → Set called Tm -- Functor Con → Set called Tm
Tm : Con Set Tm : Con Set ℓ¹
Tm Γ = (w : World) (Γ w) TM w Tm Γ = (w : World) (Γ w) TM w
_[_]t : {Γ Δ : Con} Tm Γ Sub Δ Γ Tm Δ -- The functor's action on morphisms _[_]t : {Γ Δ : Con} Tm Γ Sub Δ Γ Tm Δ -- The functor's action on morphisms
t [ σ ]t = λ w λ γ t w (σ w γ) t [ σ ]t = λ w λ γ t w (σ w γ)
@ -346,7 +352,7 @@ module FinitaryFirstOrderLogic where
[]t-∘ = refl []t-∘ = refl
-- We simply define « bulk _[σ]t » (that acts on *n* terms from *Tm Γ*)
_[_]tz : {Γ Δ : Con} {n : Nat} Array (Tm Γ) n Sub Δ Γ Array (Tm Δ) n _[_]tz : {Γ Δ : Con} {n : Nat} Array (Tm Γ) n Sub Δ Γ Array (Tm Δ) n
tz [ σ ]tz = map (λ s s [ σ ]t) tz tz [ σ ]tz = map (λ s s [ σ ]t) tz
[]tz-∘ : {Γ Δ Ξ : Con} {α : Sub Ξ Δ} {β : Sub Δ Γ} {n : Nat} {tz : Array (Tm Γ) n} tz [ β α ]tz tz [ β ]tz [ α ]tz []tz-∘ : {Γ Δ Ξ : Con} {α : Sub Ξ Δ} {β : Sub Δ Γ} {n : Nat} {tz : Array (Tm Γ) n} tz [ β α ]tz tz [ β ]tz [ α ]tz
@ -375,8 +381,8 @@ module FinitaryFirstOrderLogic where
,ₜ∘ = refl ,ₜ∘ = refl
-- Functor Con → Set called For -- Functor Con → Set called For
For : Con Set For : Con Set (lsuc ℓ¹)
For Γ = (w : World) (Γ w) Prop For Γ = (w : World) (Γ w) Prop ℓ¹
_[_]f : {Γ Δ : Con} For Γ Sub Δ Γ For Δ -- The functor's action on morphisms _[_]f : {Γ Δ : Con} For Γ Sub Δ Γ For Δ -- The functor's action on morphisms
F [ σ ]f = λ w λ x F w (σ w x) F [ σ ]f = λ w λ x F w (σ w x)
[]f-id : {Γ : Con} {F : For Γ} F [ id {Γ} ]f F []f-id : {Γ : Con} {F : For Γ} F [ id {Γ} ]f F
@ -392,7 +398,7 @@ module FinitaryFirstOrderLogic where
-- Proofs -- Proofs
_⊢_ : (Γ : Con) For Γ Prop _⊢_ : (Γ : Con) For Γ Prop ℓ¹
Γ F = w (γ : Γ w) F w γ Γ F = w (γ : Γ w) F w γ
_[_]p : {Γ Δ : Con} {F : For Γ} Γ F (σ : Sub Δ Γ) Δ (F [ σ ]f) -- The functor's action on morphisms _[_]p : {Γ Δ : Con} {F : For Γ} Γ F (σ : Sub Δ Γ) Δ (F [ σ ]f) -- The functor's action on morphisms
prf [ σ ]p = λ w λ γ prf w (σ w γ) prf [ σ ]p = λ w λ γ prf w (σ w γ)
@ -450,9 +456,13 @@ module FinitaryFirstOrderLogic where
{ Con = Con { Con = Con
; Sub = Sub ; Sub = Sub
; _∘_ = _∘_ ; _∘_ = _∘_
; ∘-ass = refl
; id = id ; id = id
; idl = refl
; idr = refl
; = ; =
; ε = ε ; ε = ε
; ε-u = refl
; Tm = Tm ; Tm = Tm
; _[_]t = _[_]t ; _[_]t = _[_]t
; []t-id = []t-id ; []t-id = []t-id
@ -491,8 +501,30 @@ module FinitaryFirstOrderLogic where
} }
{-
-- Completeness proof -- Completeness proof
-- We first build our universal Kripke model -- We first build our universal Kripke model
module ComplenessProof (M : FFOL {ℓ¹} {ℓ²} {ℓ³} {ℓ⁴} {ℓ⁵}) where
-- We have a model, we construct the Universal Kripke model of this model
World : Set ℓ¹
World = FFOL.Con M
_≤_ : World World Prop
Γ Δ = {!FFOL.Sub M Δ Γ!}
UK : Kripke
UK = record
{ World = World
; _≤_ = λ Δ Γ {!FFOL.Sub M Δ Γ!}
; ≤refl = {!FFOL.id M!}
; ≤tran = {!FFOL.∘ M!}
; TM = {!!}
; TM≤ = {!!}
; REL = {!!}
; REL≤ = {!!}
}
-}

View File

@ -1,4 +1,4 @@
{-# OPTIONS --prop #-} {-# OPTIONS --prop --rewriting #-}
module ListUtil where module ListUtil where

View File

@ -2,6 +2,14 @@
module PropUtil where module PropUtil where
open import Agda.Primitive
variable ' : Level
data ⊥ₛ : Set where
record ⊤ₛ : Set where
constructor ttₛ
-- ⊥ is a data with no constructor -- ⊥ is a data with no constructor
-- is a record with one always-available constructor -- is a record with one always-available constructor
data : Prop where data : Prop where
@ -56,7 +64,6 @@ module PropUtil where
open import Agda.Primitive
postulate _≈_ : {}{A : Set }(a : A) A Set postulate _≈_ : {}{A : Set }(a : A) A Set
infix 3 _≡_ infix 3 _≡_
data _≡_ {}{A : Set }(a : A) : A Prop where data _≡_ {}{A : Set }(a : A) : A Prop where
@ -124,9 +131,22 @@ module PropUtil where
substreflrefl : { ' : Level}{A : Set }{P : A Set '}{a : A}{e : a a}{p : P a} subst P e (subst P e p) p substreflrefl : { ' : Level}{A : Set }{P : A Set '}{a : A}{e : a a}{p : P a} subst P e (subst P e p) p
substreflrefl {P = P} {a} {e} {p} = ≡tran (substrefl {P = P} {a = a} {e = e} {p = subst P e p}) (substrefl {P = P} {a = a} {e = e} {p = p}) substreflrefl {P = P} {a} {e} {p} = ≡tran (substrefl {P = P} {a = a} {e = e} {p = subst P e p}) (substrefl {P = P} {a = a} {e = e} {p = p})
cong₂' : { ' '' : Level}{A : Set }{B : A Set '}{C : Set ''} (f : (a : A) B a C) {a a' : A} {b : B a} {b' : B a'} (eq : a a') subst B eq b b' f a b f a' b'
cong₂' f {a} refl refl = cong (f a) (≡sym coerefl)
congsubst : { ' : Level}{A : Set }{P : A Set '}{a a' : A}{e : a a}{p : P a}{p' : P a} p p' subst P e p subst P e p' congsubst : { ' : Level}{A : Set }{P : A Set '}{a a' : A}{e : a a}{p : P a}{p' : P a} p p' subst P e p subst P e p'
congsubst {P = P} {e = refl} h = cong (subst P refl) h congsubst {P = P} {e = refl} h = cong (subst P refl) h
substfpoly : { ' : Level}{A : Set }{P R : A Set '}{α β : A}
{eq : α β} {f : {ξ : A} R ξ P ξ} {x : R α}
coe (cong P eq) (f {α} x) f (coe (cong R eq) x)
substfpoly {eq = refl} {f} = ≡tran coerefl (cong f (≡sym coerefl))
substfgpoly : { ' : Level}{A B : Set } {P Q : A Set '} {R : B Set '} {F : B A} {α β : A} {ε φ : B}
{eq₁ : α β} {eq₂ : F ε α} {eq₃ : F φ β} {eq₄ : ε φ}
{g : {a : A} Q a P a} {f : {b : B} R b Q (F b)} {x : R ε}
g {β} (subst Q eq₃ (f {φ} (subst R eq₄ x))) subst P eq₁ (g {α} (subst Q eq₂ (f {ε} x)))
substfgpoly {P = P} {Q} {R} {eq₁ = refl} {refl} {refl} {refl} {g} {f} = ≡tran³ (cong g (substrefl {P = Q} {e = refl})) (cong g (cong f (substrefl {P = R} {e = refl}))) (cong g (≡sym (substrefl {P = Q} {e = refl}))) (≡sym (substrefl {P = P} {e = refl}))
{-# BUILTIN EQUALITY _≡_ #-} {-# BUILTIN EQUALITY _≡_ #-}
@ -145,16 +165,14 @@ module PropUtil where
succ : Nat Nat succ : Nat Nat
{-# BUILTIN NATURAL Nat #-} {-# BUILTIN NATURAL Nat #-}
variable
' : Level
record _×_ (A : Set ) (B : Set ) : Set where record _×_ (A : Set ) (B : Set ') : Set ( ') where
constructor _,×_ constructor _,×_
field field
a : A a : A
b : B b : B
record _×'_ (A : Set ) (B : Prop ) : Set where record _×'_ (A : Set ) (B : Prop ') : Set ( ') where
constructor _,×'_ constructor _,×'_
field field
a : A a : A
@ -166,19 +184,19 @@ module PropUtil where
a : A a : A
b : B a b : B a
proj× : {A B : Set} (A × B) A proj× : { ' : Level}{A : Set }{B : Set '} (A × B) A
proj× p = _×_.a p proj× p = _×_.a p
proj× : {A B : Set} (A × B) B proj× : { ' : Level}{A : Set }{B : Set '} (A × B) B
proj× p = _×_.b p proj× p = _×_.b p
proj×'₁ : {A : Set} {B : Prop} (A ×' B) A proj×'₁ : { ' : Level}{A : Set }{B : Prop '} (A ×' B) A
proj×'₁ p = _×'_.a p proj×'₁ p = _×'_.a p
proj×'₂ : {A : Set} {B : Prop} (A ×' B) B proj×'₂ : { ' : Level}{A : Set }{B : Prop '} (A ×' B) B
proj×'₂ p = _×'_.b p proj×'₂ p = _×'_.b p
proj×''₁ : {A : Set} {B : A Prop} (A ×'' B) A proj×''₁ : { ' : Level}{A : Set }{B : A Prop '} (A ×'' B) A
proj×''₁ p = _×''_.a p proj×''₁ p = _×''_.a p
proj×''₂ : {A : Set} {B : A Prop} (p : A ×'' B) B (proj×''₁ p) proj×''₂ : { ' : Level}{A : Set }{B : A Prop '} (p : A ×'' B) B (proj×''₁ p)
proj×''₂ p = _×''_.b p proj×''₂ p = _×''_.b p