Added IFOL algebra and initial and morphism and initiality proof
This commit is contained in:
parent
370daed594
commit
b93ce31ab3
107
IFOL2.lagda
Normal file
107
IFOL2.lagda
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
\begin{code}
|
||||||
|
{-# OPTIONS --prop --rewriting #-}
|
||||||
|
|
||||||
|
open import PropUtil
|
||||||
|
|
||||||
|
module IFOL2 where
|
||||||
|
|
||||||
|
open import Agda.Primitive
|
||||||
|
open import ListUtil
|
||||||
|
|
||||||
|
variable
|
||||||
|
ℓ¹ ℓ² ℓ³ ℓ⁴ ℓ⁵ : Level
|
||||||
|
|
||||||
|
record IFOL (TM : Set) : Set (lsuc (ℓ¹ ⊔ ℓ² ⊔ ℓ³ ⊔ ℓ⁴)) where
|
||||||
|
infixr 10 _∘_
|
||||||
|
field
|
||||||
|
|
||||||
|
-- We first make the base category with its terminal object
|
||||||
|
Con : Set ℓ¹
|
||||||
|
Sub : Con → Con → Prop ℓ² -- It makes a category
|
||||||
|
_∘_ : {Γ Δ Ξ : Con} → Sub Δ Ξ → Sub Γ Δ → Sub Γ Ξ
|
||||||
|
id : {Γ : Con} → Sub Γ Γ
|
||||||
|
◇ : Con -- The terminal object of the category
|
||||||
|
ε : {Γ : Con} → Sub Γ ◇ -- The morphism from any object to the terminal
|
||||||
|
|
||||||
|
-- Functor Con → Set called For
|
||||||
|
For : Con → Set ℓ³
|
||||||
|
_[_]f : {Γ Δ : Con} → For Γ → Sub Δ Γ → For Δ -- Action on morphisms
|
||||||
|
[]f-id : {Γ : Con} → {F : For Γ} → F [ id {Γ} ]f ≡ F
|
||||||
|
[]f-∘ : {Γ Δ Ξ : Con} → {α : Sub Ξ Δ} → {β : Sub Δ Γ} → {F : For Γ}
|
||||||
|
→ F [ β ∘ α ]f ≡ (F [ β ]f) [ α ]f
|
||||||
|
|
||||||
|
-- Functor Con × For → Prop called Pf or ⊢
|
||||||
|
Pf : (Γ : Con) → For Γ → Prop ℓ⁴
|
||||||
|
-- Action on morphisms
|
||||||
|
_[_]p : {Γ Δ : Con} → {F : For Γ} → Pf Γ F → (σ : Sub Δ Γ) → Pf Δ (F [ σ ]f)
|
||||||
|
-- Equalities below are useless because Γ ⊢ F is in prop
|
||||||
|
-- []p-id : {Γ : Con} → {F : For Γ} → {prf : Γ ⊢ F}
|
||||||
|
-- → prf [ id {Γ} ]p ≡ prf
|
||||||
|
-- []p-∘ : {Γ Δ Ξ : Con}{α : Sub Ξ Δ}{β : Sub Δ Γ}{F : For Γ}{prf : Γ ⊢ F}
|
||||||
|
-- → prf [ α ∘ β ]p ≡ (prf [ β ]p) [ α ]p
|
||||||
|
|
||||||
|
-- → Prop⁺
|
||||||
|
_▹ₚ_ : (Γ : Con) → For Γ → Con
|
||||||
|
πₚ¹ : {Γ Δ : Con}{F : For Γ} → Sub Δ (Γ ▹ₚ F) → Sub Δ Γ
|
||||||
|
πₚ² : {Γ Δ : Con}{F : For Γ} → (σ : Sub Δ (Γ ▹ₚ F)) → Pf Δ (F [ πₚ¹ σ ]f)
|
||||||
|
_,ₚ_ : {Γ Δ : Con}{F : For Γ} → (σ : Sub Δ Γ) → Pf Δ (F [ σ ]f) → Sub Δ (Γ ▹ₚ F)
|
||||||
|
-- Equality below is useless because Pf Γ F is in Prop
|
||||||
|
-- πₚ²∘,ₚ : {Γ Δ : Con}{σ : Sub Δ Γ}{F : For Γ}{prf : Pf Δ (F [ σ ]f)}
|
||||||
|
-- → πₚ² (σ ,ₚ prf) ≡ prf
|
||||||
|
|
||||||
|
|
||||||
|
{-- FORMULAE CONSTRUCTORS --}
|
||||||
|
-- Formulas with relation on terms
|
||||||
|
R : {Γ : Con} → (t u : TM) → For Γ
|
||||||
|
R[] : {Γ Δ : Con} → {σ : Sub Δ Γ} → {t u : TM}
|
||||||
|
→ (R t u) [ σ ]f ≡ R t u
|
||||||
|
|
||||||
|
-- Implication
|
||||||
|
_⇒_ : {Γ : Con} → For Γ → For Γ → For Γ
|
||||||
|
[]f-⇒ : {Γ Δ : Con} → {F G : For Γ} → {σ : Sub Δ Γ}
|
||||||
|
→ (F ⇒ G) [ σ ]f ≡ (F [ σ ]f) ⇒ (G [ σ ]f)
|
||||||
|
|
||||||
|
-- Forall
|
||||||
|
∀∀ : {Γ : Con} → (TM → For Γ) → For Γ
|
||||||
|
[]f-∀∀ : {Γ Δ : Con} → {F : TM → For Γ} → {σ : Sub Δ Γ}
|
||||||
|
→ (∀∀ F) [ σ ]f ≡ (∀∀ (λ t → (F t) [ σ ]f))
|
||||||
|
|
||||||
|
{-- PROOFS CONSTRUCTORS --}
|
||||||
|
-- Again, we don't have to write the _[_]p equalities as Proofs are in Prop
|
||||||
|
|
||||||
|
-- Lam & App
|
||||||
|
lam : {Γ : Con}{F G : For Γ} → Pf (Γ ▹ₚ F) (G [ πₚ¹ id ]f) → Pf Γ (F ⇒ G)
|
||||||
|
app : {Γ : Con}{F G : For Γ} → Pf Γ (F ⇒ G) → Pf Γ F → Pf Γ G
|
||||||
|
|
||||||
|
-- ∀i and ∀e
|
||||||
|
∀i : {Γ : Con}{A : TM → For Γ} → ((t : TM) → Pf Γ (A t)) → Pf Γ (∀∀ A)
|
||||||
|
∀e : {Γ : Con}{A : TM → For Γ} → Pf Γ (∀∀ A) → (t : TM) → Pf Γ (A t)
|
||||||
|
|
||||||
|
record Mapping (TM : Set) (S : IFOL {ℓ¹} {ℓ²} {ℓ³} {ℓ⁴} TM) (D : IFOL {ℓ¹} {ℓ²} {ℓ³} {ℓ⁴} TM) : Set (lsuc (ℓ¹ ⊔ ℓ² ⊔ ℓ³ ⊔ ℓ⁴)) where
|
||||||
|
field
|
||||||
|
|
||||||
|
-- We first make the base category with its final object
|
||||||
|
mCon : (IFOL.Con S) → (IFOL.Con D)
|
||||||
|
mSub : {Δ : (IFOL.Con S)}{Γ : (IFOL.Con S)} → (IFOL.Sub S Δ Γ) → (IFOL.Sub D (mCon Δ) (mCon Γ))
|
||||||
|
mFor : {Γ : (IFOL.Con S)} → (IFOL.For S Γ) → (IFOL.For D (mCon Γ))
|
||||||
|
mPf : {Γ : (IFOL.Con S)} {A : IFOL.For S Γ} → IFOL.Pf S Γ A → IFOL.Pf D (mCon Γ) (mFor A)
|
||||||
|
|
||||||
|
|
||||||
|
record Morphism (TM : Set)(S : IFOL {ℓ¹} {ℓ²} {ℓ³} {ℓ⁴} TM) (D : IFOL {ℓ¹} {ℓ²} {ℓ³} {ℓ⁴} TM) : Set (lsuc (ℓ¹ ⊔ ℓ² ⊔ ℓ³ ⊔ ℓ⁴)) where
|
||||||
|
field m : Mapping TM S D
|
||||||
|
mCon = Mapping.mCon m
|
||||||
|
mSub = Mapping.mSub m
|
||||||
|
mFor = Mapping.mFor m
|
||||||
|
mPf = Mapping.mPf m
|
||||||
|
field
|
||||||
|
e◇ : mCon (IFOL.◇ S) ≡ IFOL.◇ D
|
||||||
|
e[]f : {Γ Δ : IFOL.Con S}{A : IFOL.For S Γ}{σ : IFOL.Sub S Δ Γ} → mFor (IFOL._[_]f S A σ) ≡ IFOL._[_]f D (mFor A) (mSub σ)
|
||||||
|
-- Proofs are in prop, so some equations are not needed
|
||||||
|
--[]p : {Γ Δ : IFOL.Con S}{A : IFOL.For S Γ}{pf : IFOL._⊢_ S Γ A}{σ : IFOL.Sub S Δ Γ} → mPf (IFOL._[_]p S pf σ) ≡ IFOL._[_]p D (mPf pf) (mSub σ)
|
||||||
|
e▹ₚ : {Γ : IFOL.Con S}{A : IFOL.For S Γ} → mCon (IFOL._▹ₚ_ S Γ A) ≡ IFOL._▹ₚ_ D (mCon Γ) (mFor A)
|
||||||
|
--πₚ² : {Γ Δ : IFOL.Con S}{A : IFOL.For S Γ}{σ : IFOL.Sub S Δ (IFOL._▹ₚ_ S Γ A)} → mPf (IFOL.πₚ² S σ) ≡ IFOL.πₚ¹ D (subst (IFOL.Sub D (mCon Δ)) ▹ₚ (mSub σ))
|
||||||
|
eR : {Γ : IFOL.Con S}{t u : TM} → mFor {Γ} (IFOL.R S t u) ≡ IFOL.R D t u
|
||||||
|
e⇒ : {Γ : IFOL.Con S}{A B : IFOL.For S Γ} → mFor (IFOL._⇒_ S A B) ≡ IFOL._⇒_ D (mFor A) (mFor B)
|
||||||
|
e∀∀ : {Γ : IFOL.Con S}{A : TM → IFOL.For S Γ} → mFor (IFOL.∀∀ S A) ≡ IFOL.∀∀ D (λ t → (mFor (A t)))
|
||||||
|
-- No equation needed for lam, app, ∀i, ∀e as their output are in prop
|
||||||
|
\end{code}
|
||||||
196
IFOLInitial.lagda
Normal file
196
IFOLInitial.lagda
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
\begin{code}
|
||||||
|
{-# OPTIONS --prop --rewriting #-}
|
||||||
|
|
||||||
|
open import PropUtil
|
||||||
|
|
||||||
|
module IFOLInitial (TM : Set) where
|
||||||
|
|
||||||
|
open import IFOL2
|
||||||
|
open import Agda.Primitive
|
||||||
|
open import ListUtil
|
||||||
|
|
||||||
|
data For : Set where
|
||||||
|
R : TM → TM → For
|
||||||
|
_⇒_ : For → For → For
|
||||||
|
∀∀ : (TM → For) → For
|
||||||
|
|
||||||
|
data Con : Set where
|
||||||
|
◇ : Con
|
||||||
|
_▹ₚ_ : Con → For → Con
|
||||||
|
|
||||||
|
variable
|
||||||
|
Γ Δ Ξ : Con
|
||||||
|
A B : For
|
||||||
|
|
||||||
|
data PfVar : Con → For → Prop where
|
||||||
|
pvzero : PfVar (Γ ▹ₚ A) A
|
||||||
|
pvnext : PfVar Γ A → PfVar (Γ ▹ₚ B) A
|
||||||
|
data Pf : Con → For → Prop where
|
||||||
|
var : PfVar Γ A → Pf Γ A
|
||||||
|
lam : Pf (Γ ▹ₚ A) B → Pf Γ (A ⇒ B)
|
||||||
|
app : Pf Γ (A ⇒ B) → Pf Γ A → Pf Γ B
|
||||||
|
∀i : {A : TM → For} → ((t : TM) → Pf Γ (A t)) → Pf Γ (∀∀ A)
|
||||||
|
∀e : {A : TM → For} → Pf Γ (∀∀ A) → (t : TM) → Pf Γ (A t)
|
||||||
|
|
||||||
|
|
||||||
|
data Ren : Con → Con → Prop where
|
||||||
|
ε : Ren Γ ◇
|
||||||
|
_,ₚR_ : Ren Δ Γ → PfVar Δ A → Ren Δ (Γ ▹ₚ A)
|
||||||
|
|
||||||
|
rightR : Ren Δ Γ → Ren (Δ ▹ₚ A) Γ
|
||||||
|
rightR ε = ε
|
||||||
|
rightR (σ ,ₚR pv) = (rightR σ) ,ₚR (pvnext pv)
|
||||||
|
|
||||||
|
idR : Ren Γ Γ
|
||||||
|
idR {◇} = ε
|
||||||
|
idR {Γ ▹ₚ A} = (rightR (idR {Γ})) ,ₚR pvzero
|
||||||
|
|
||||||
|
data Sub : Con → Con → Prop where
|
||||||
|
ε : Sub Γ ◇
|
||||||
|
_,ₚ_ : Sub Δ Γ → Pf Δ A → Sub Δ (Γ ▹ₚ A)
|
||||||
|
|
||||||
|
πₚ¹ : Sub Δ (Γ ▹ₚ A) → Sub Δ Γ
|
||||||
|
πₚ² : Sub Δ (Γ ▹ₚ A) → Pf Δ A
|
||||||
|
πₚ¹ (σ ,ₚ pf) = σ
|
||||||
|
πₚ² (σ ,ₚ pf) = pf
|
||||||
|
|
||||||
|
SubR : Ren Γ Δ → Sub Γ Δ
|
||||||
|
SubR ε = ε
|
||||||
|
SubR (σ ,ₚR pv) = SubR σ ,ₚ var pv
|
||||||
|
|
||||||
|
id : Sub Γ Γ
|
||||||
|
id = SubR idR
|
||||||
|
|
||||||
|
_[_]pvr : PfVar Γ A → Ren Δ Γ → PfVar Δ A
|
||||||
|
pvzero [ _ ,ₚR pv ]pvr = pv
|
||||||
|
pvnext pv [ σ ,ₚR _ ]pvr = pv [ σ ]pvr
|
||||||
|
_[_]pr : Pf Γ A → Ren Δ Γ → Pf Δ A
|
||||||
|
var pv [ σ ]pr = var (pv [ σ ]pvr)
|
||||||
|
lam pf [ σ ]pr = lam (pf [ (rightR σ) ,ₚR pvzero ]pr)
|
||||||
|
app pf pf' [ σ ]pr = app (pf [ σ ]pr) (pf' [ σ ]pr)
|
||||||
|
∀i fpf [ σ ]pr = ∀i (λ t → (fpf t) [ σ ]pr)
|
||||||
|
∀e pf t [ σ ]pr = ∀e (pf [ σ ]pr) t
|
||||||
|
|
||||||
|
wkSub : Sub Δ Γ → Sub (Δ ▹ₚ A) Γ
|
||||||
|
wkSub ε = ε
|
||||||
|
wkSub (σ ,ₚ pf) = (wkSub σ) ,ₚ (pf [ rightR idR ]pr)
|
||||||
|
|
||||||
|
_[_]p : Pf Γ A → Sub Δ Γ → Pf Δ A
|
||||||
|
var pvzero [ _ ,ₚ pf ]p = pf
|
||||||
|
var (pvnext pv) [ σ ,ₚ _ ]p = var pv [ σ ]p
|
||||||
|
lam pf [ σ ]p = lam (pf [ wkSub σ ,ₚ var pvzero ]p)
|
||||||
|
app pf pf' [ σ ]p = app (pf [ σ ]p) (pf' [ σ ]p)
|
||||||
|
∀i fpf [ σ ]p = ∀i (λ t → (fpf t) [ σ ]p)
|
||||||
|
∀e pf t [ σ ]p = ∀e (pf [ σ ]p) t
|
||||||
|
|
||||||
|
_∘_ : {Γ Δ Ξ : Con} → Sub Δ Ξ → Sub Γ Δ → Sub Γ Ξ
|
||||||
|
ε ∘ β = ε
|
||||||
|
(α ,ₚ pf) ∘ β = (α ∘ β) ,ₚ (pf [ β ]p)
|
||||||
|
|
||||||
|
|
||||||
|
ifol : IFOL TM
|
||||||
|
ifol = record
|
||||||
|
{ Con = Con
|
||||||
|
; Sub = Sub
|
||||||
|
; _∘_ = _∘_
|
||||||
|
; id = id
|
||||||
|
; ◇ = ◇
|
||||||
|
; ε = ε
|
||||||
|
; For = λ Γ → For
|
||||||
|
; _[_]f = λ A σ → A
|
||||||
|
; []f-id = refl
|
||||||
|
; []f-∘ = refl
|
||||||
|
; Pf = Pf
|
||||||
|
; _[_]p = _[_]p
|
||||||
|
; _▹ₚ_ = _▹ₚ_
|
||||||
|
; πₚ¹ = πₚ¹
|
||||||
|
; πₚ² = πₚ²
|
||||||
|
; _,ₚ_ = _,ₚ_
|
||||||
|
; R = R
|
||||||
|
; _⇒_ = _⇒_
|
||||||
|
; ∀∀ = ∀∀
|
||||||
|
; R[] = refl
|
||||||
|
; []f-⇒ = refl
|
||||||
|
; []f-∀∀ = refl
|
||||||
|
; lam = lam
|
||||||
|
; app = app
|
||||||
|
; ∀i = ∀i
|
||||||
|
; ∀e = ∀e
|
||||||
|
}
|
||||||
|
|
||||||
|
module InitialMorphism (M : IFOL {lzero} {lzero} {lzero} {lzero} TM) where
|
||||||
|
|
||||||
|
mCon : Con → (IFOL.Con M)
|
||||||
|
mFor : {Γ : Con} → For → (IFOL.For M (mCon Γ))
|
||||||
|
|
||||||
|
mCon ◇ = IFOL.◇ M
|
||||||
|
mCon (Γ ▹ₚ A) = IFOL._▹ₚ_ M (mCon Γ) (mFor {Γ} A)
|
||||||
|
mFor {Γ} (R t u) = IFOL.R M t u
|
||||||
|
mFor {Γ} (A ⇒ B) = IFOL._⇒_ M (mFor {Γ} A) (mFor {Γ} B)
|
||||||
|
mFor {Γ} (∀∀ A) = IFOL.∀∀ M (λ t → mFor {Γ} (A t))
|
||||||
|
|
||||||
|
|
||||||
|
mSub : {Δ : Con}{Γ : Con} → Sub Δ Γ → (IFOL.Sub M (mCon Δ) (mCon Γ))
|
||||||
|
mPf : {Γ : Con} {A : For} → Pf Γ A → IFOL.Pf M (mCon Γ) (mFor {Γ} A)
|
||||||
|
|
||||||
|
e[]f⁰ : {Γ : Con}{A B : For} → mFor {Γ ▹ₚ B} A ≡ IFOL._[_]f M (mFor {Γ} A) (IFOL.πₚ¹ M (IFOL.id M))
|
||||||
|
e[]f⁰ {A = R t u} = ≡sym (IFOL.R[] M)
|
||||||
|
e[]f⁰ {A = A ⇒ B} = ≡sym (≡tran ( IFOL.[]f-⇒ M) (cong₂ (IFOL._⇒_ M) (≡sym (e[]f⁰ {A = A})) (≡sym (e[]f⁰ {A = B}))))
|
||||||
|
e[]f⁰ {Γ}{A = ∀∀ A} = ≡sym (≡tran (IFOL.[]f-∀∀ M {F = λ t → mFor {Γ} (A t)}) (cong (IFOL.∀∀ M) (≡fun (λ t → ≡sym (e[]f⁰ {Γ} {A = A t})))))
|
||||||
|
|
||||||
|
e[]f : {Γ Δ : Con}{A : For}{σ : Sub Δ Γ} → mFor {Δ} A ≡ IFOL._[_]f M (mFor {Γ} A) (mSub σ)
|
||||||
|
e[]f {A = R t u} {σ} = ≡sym (IFOL.R[] M)
|
||||||
|
e[]f {A = A ⇒ B} {σ} = ≡sym (≡tran ( IFOL.[]f-⇒ M) (cong₂ (IFOL._⇒_ M) (≡sym (e[]f {A = A} {σ})) (≡sym (e[]f {A = B} {σ}))))
|
||||||
|
e[]f {Γ}{A = ∀∀ A} {σ} = ≡sym (≡tran (IFOL.[]f-∀∀ M {F = λ t → mFor {Γ} (A t)}) (cong (IFOL.∀∀ M) (≡fun (λ t → ≡sym (e[]f {Γ} {A = A t} {σ})))))
|
||||||
|
|
||||||
|
mPf {A = A} (var (pvzero {Γ})) = substP (IFOL.Pf M _) (≡sym (e[]f⁰ {Γ} {A} {A})) (IFOL.πₚ² M (IFOL.id M))
|
||||||
|
mPf {A = A} (var (pvnext {Γ} {B = B} pv)) = substP (IFOL.Pf M _) (≡sym (e[]f⁰ {Γ} {A} {B})) (IFOL._[_]p M (mPf (var pv)) (IFOL.πₚ¹ M (IFOL.id M)))
|
||||||
|
mPf {Γ} (lam {A = A} {B} pf) = IFOL.lam M (substP (IFOL.Pf M _) (e[]f⁰ {Γ} {B} {A}) (mPf pf))
|
||||||
|
mPf (app pf pf') = IFOL.app M (mPf pf) (mPf pf')
|
||||||
|
mPf (∀i pf) = IFOL.∀i M (λ t → mPf (pf t))
|
||||||
|
mPf (∀e pf t) = IFOL.∀e M (mPf pf) t
|
||||||
|
|
||||||
|
mSub ε = IFOL.ε M
|
||||||
|
mSub (_,ₚ_ {Δ} {Γ = Γ} {A} σ pf) = IFOL._,ₚ_ M (mSub σ) (substP (IFOL.Pf M _) (e[]f {Γ} {Δ} {A} {σ}) (mPf pf))
|
||||||
|
|
||||||
|
mor : Morphism TM ifol M
|
||||||
|
mor = record {
|
||||||
|
m = record {
|
||||||
|
mCon = mCon
|
||||||
|
; mSub = mSub
|
||||||
|
; mFor = λ {Γ} A → mFor {Γ} A
|
||||||
|
; mPf = mPf
|
||||||
|
}
|
||||||
|
; e◇ = refl
|
||||||
|
; e▹ₚ = refl
|
||||||
|
; e[]f = λ {Γ}{Δ}{A}{σ} → e[]f {Γ}{Δ}{A}{σ}
|
||||||
|
; eR = refl
|
||||||
|
; e∀∀ = refl
|
||||||
|
; e⇒ = refl
|
||||||
|
}
|
||||||
|
|
||||||
|
module InitialMorphismUniqueness {M : IFOL {lzero} {lzero} {lzero} {lzero} TM} {m : Morphism TM ifol M} where
|
||||||
|
|
||||||
|
open InitialMorphism M
|
||||||
|
mCon≡ : {Γ : Con} → mCon Γ ≡ (Morphism.mCon m Γ)
|
||||||
|
mFor≡ : {Γ : Con} {A : For} → mFor {Γ} A ≡ subst (IFOL.For M) (≡sym mCon≡) (Morphism.mFor m {Γ} A)
|
||||||
|
|
||||||
|
mCon≡ {◇} = ≡sym (Morphism.e◇ m)
|
||||||
|
mCon≡ {Γ ▹ₚ A} = ≡sym (≡tran (Morphism.e▹ₚ m) (cong₂' (IFOL._▹ₚ_ M) (≡sym mCon≡) (≡sym mFor≡)))
|
||||||
|
mFor≡ {Γ} {A ⇒ B} = ≡sym (≡tran²
|
||||||
|
(cong (subst (IFOL.For M) (≡sym mCon≡)) (Morphism.e⇒ m))
|
||||||
|
(substppoly {eq = ≡sym (mCon≡ {Γ})} {f = λ {ξ} X Y → IFOL._⇒_ M {ξ} X Y})
|
||||||
|
(cong₂ (IFOL._⇒_ M) (≡sym (mFor≡ {Γ} {A})) (≡sym (mFor≡ {Γ} {B}))))
|
||||||
|
mFor≡ {Γ} {R t u} = ≡sym (≡tran (cong (subst (IFOL.For M) (≡sym mCon≡)) (Morphism.eR m)) (substpoly {f = λ {ξ} → IFOL.R M {ξ} t u} {eq = ≡sym mCon≡}))
|
||||||
|
mFor≡ {Γ} {∀∀ A} = ≡sym (≡tran³
|
||||||
|
(cong (subst (IFOL.For M) (≡sym mCon≡)) (Morphism.e∀∀ m))
|
||||||
|
(substfpoly {eq = ≡sym mCon≡}{f = λ {ξ} X → IFOL.∀∀ M {ξ} X}{x = λ t → Mapping.mFor (Morphism.m m) {Γ} (A t)})
|
||||||
|
(cong (IFOL.∀∀ M) (≡sym coefun'))
|
||||||
|
(cong (IFOL.∀∀ M) (≡fun λ t → ≡sym (mFor≡ {Γ} {A t}))))
|
||||||
|
|
||||||
|
|
||||||
|
-- Those two lines are not needed as those sorts are in Prop
|
||||||
|
--mSub≡ : {Δ : Con}{Γ : Con}{σ : Sub Δ Γ} → mSub {Δ} {Γ} σ ≡ Morphism.mSub m {Δ} {Γ} σ
|
||||||
|
--mPf≡ : {Γ : Con} {A : For}{p : Pf Γ A} → mPf {Γ} {A} p ≡ Morphism.mPf m {Γ} {A} p
|
||||||
|
|
||||||
|
\end{code}
|
||||||
@ -211,17 +211,14 @@ module PropUtil where
|
|||||||
{b₁ b₂ : B} {α γ : A b₁} {δ φ : A b₂}
|
{b₁ b₂ : B} {α γ : A b₁} {δ φ : A b₂}
|
||||||
{eq0 : b₁ ≡ b₂}{eqa : subst A eq0 α ≡ δ}{eqb : subst A eq0 γ ≡ φ} → {a : R b₂ δ φ}{a' : R b₁ α γ} → coe (coep∘-helper {eq0 = eq0} {eqa = eqa} {eqb = eqb}) a ≡ a
|
{eq0 : b₁ ≡ b₂}{eqa : subst A eq0 α ≡ δ}{eqb : subst A eq0 γ ≡ φ} → {a : R b₂ δ φ}{a' : R b₁ α γ} → coe (coep∘-helper {eq0 = eq0} {eqa = eqa} {eqb = eqb}) a ≡ a
|
||||||
coep∘-helper-coe {eq0 = refl}{refl}{refl} = coerefl
|
coep∘-helper-coe {eq0 = refl}{refl}{refl} = coerefl
|
||||||
{-coep∘' : {ℓ ℓ' ℓ'' : Level}{B : Set ℓ}{A : B → Set ℓ''} {R : (b : B) → A b → A b → Set ℓ'}
|
|
||||||
{b₁ b₂ : B} {α β γ : A b₁} {δ ε φ : A b₂}
|
|
||||||
{p : {b : B}{x y z : A b} → R b x y → R b z x → R b z y}{x : R b₁ β γ}{y : R b₁ α β}
|
coefun : {ℓ : Level}{A B C : Set ℓ}{f : B → C}{eq : A ≡ B}
|
||||||
{eq0 : b₁ ≡ b₂}{eq1 : subst A eq0 α ≡ δ} {eq2 : subst A eq0 β ≡ ε} {eq3 : subst A eq0 γ ≡ φ}
|
→ f ≡ coe (cong (λ X → X → C) eq) (λ (x : A) → f (coe eq x))
|
||||||
{eq4 : R b₂ δ φ ≡ R b₁ α γ}{eq5 : R b₂ ε φ ≡ R b₁ β γ}{eq6 : R b₂ δ ε ≡ R b₁ α β}
|
coefun {f = f} {eq = refl} = ≡tran (≡fun (λ x → cong f (≡sym (coerefl {eq = refl})))) (≡sym (coerefl {eq = refl}))
|
||||||
→ coe eq4
|
coefun' : {ℓ : Level}{A B C : Set ℓ}{f : A → B}{eq : B ≡ C}
|
||||||
(p {b₂} {ε} {φ} {δ} (coe (≡sym (eq5)) x) (coe (≡sym (
|
→ (λ (x : A) → coe eq (f x)) ≡ coe (cong (λ X → A → X) eq) (λ (x : A) → f x)
|
||||||
eq6
|
coefun' {f = f} {eq = refl} = ≡tran (≡fun (λ x → coerefl)) (≡sym coerefl)
|
||||||
)) y)) ≡ p {b₁} {β} {γ} {α} x y
|
|
||||||
--coep∘' {p = p} {x} {y} {eq0 = refl} {refl} {refl} {refl} {eq4} = {!!}
|
|
||||||
-}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
git s\begin{code}
|
\begin{code}
|
||||||
{-# OPTIONS --prop --rewriting #-}
|
{-# OPTIONS --prop --rewriting #-}
|
||||||
|
|
||||||
open import PropUtil
|
open import PropUtil
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
\Pf & : & \For \rightarrow \Prop^+ \\
|
\Pf & : & \For \rightarrow \Prop^+ \\
|
||||||
\lam & : & (\Pf A \rightarrow^+ \Pf B) \rightarrow \Pf (A \implies B)\\
|
\lam & : & (\Pf A \rightarrow^+ \Pf B) \rightarrow \Pf (A \implies B)\\
|
||||||
\app & : & \Pf (A \implies B) \rightarrow (\Pf A \rightarrow \Pf B)\\
|
\app & : & \Pf (A \implies B) \rightarrow (\Pf A \rightarrow \Pf B)\\
|
||||||
\foralli & : & (t : \operatorname{TM} \rightarrow A\;t) \rightarrow \Pf (\forall A)\\
|
\foralli & : & (t : \operatorname{TM} \rightarrow \Pf A\;t) \rightarrow \Pf (\forall A)\\
|
||||||
\foralle & : & \Pf (\forall A) \rightarrow (t : \operatorname{TM}) \rightarrow \Pf (A\;t)\\
|
\foralle & : & \Pf (\forall A) \rightarrow (t : \operatorname{TM}) \rightarrow \Pf (A\;t)\\
|
||||||
\end{array}
|
\end{array}
|
||||||
\]
|
\]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user