123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- -- IIRDg is expressible in IIRDr + Identity
- module Proof where
- open import LF
- open import IIRD
- open import IIRDr
- open import DefinitionalEquality
- open import Identity
- open import Proof.Setup
- import Logic.ChainReasoning as Chain
- -- We can then define general IIRDs using the ε function from Proof.Setup.
- Ug : {I : Set}{D : I -> Set1} -> OPg I D -> I -> Set
- Ug γ = Ur (ε γ)
- Tg : {I : Set}{D : I -> Set1}(γ : OPg I D)(i : I) -> Ug γ i -> D i
- Tg γ = Tr (ε γ)
- introg : {I : Set}{D : I -> Set1}(γ : OPg I D)(a : Gu γ (Ug γ) (Tg γ)) ->
- Ug γ (Gi γ (Ug γ) (Tg γ) a)
- introg γ a = intror (G→H γ (Ug γ) (Tg γ) a)
- -- To prove the reduction behviour of Tg we first have to prove that the
- -- top-level reduction of the encoding behaves as it should. At bit simplified
- -- that Ht (ε γ) (Gi a) ≡ Gt γ a
- Tg-eq : {I : Set}{D : I -> Set1}(γ : OPg I D)(U : I -> Set)(T : (i : I) -> U i -> D i)
- (a : Gu γ U T) ->
- Ht (ε γ) U T (Gi γ U T a) (G→H γ U T a) ≡₁ Gt γ U T a
- Tg-eq {I}{D} (ι < i | e >') U T ★ = refl-≡₁
- Tg-eq (σ A γ) U T < a | b > = Tg-eq (γ a) U T b
- Tg-eq (δ A i γ) U T < g | b > = Tg-eq (γ (T « i × g »)) U T b
- -- The statement we're interested in is a special case of the more general
- -- lemma above.
- Tg-equality : {I : Set}{D : I -> Set1}(γ : OPg I D)(a : Gu γ (Ug γ) (Tg γ)) ->
- Tg γ (Gi γ (Ug γ) (Tg γ) a) (introg γ a) ≡₁ Gt γ (Ug γ) (Tg γ) a
- Tg-equality γ a = Tg-eq γ (Ug γ) (Tg γ) a
- -- The elimination rule for generalised IIRDs.
- -- It's basically the elimination of the encoding followed by the elimination
- -- of the proof the the index is the right one.
- Rg : {I : Set}{D : I -> Set1}(γ : OPg I D)(F : (i : I) -> Ug γ i -> Set1)
- (h : (a : Gu γ (Ug γ) (Tg γ)) -> KIH γ (Ug γ) (Tg γ) F a -> F (Gi γ (Ug γ) (Tg γ) a) (introg γ a))
- (i : I)(u : Ug γ i) -> F i u
- Rg {I}{D} γ F h = Rr (ε γ) F \i a ih ->
- G→H∘H→G-subst γ U T
- (\i a -> F i (intror a))
- i a (lem1 i a ih)
- where
- U = Ug γ
- T = Tg γ
- lem1 : (i : I)(a : Hu (ε γ) U T i) ->
- KIH (ε γ i) U T F a ->
- F (Gi γ U T (H→G γ U T i a))
- (intror (G→H γ U T (H→G γ U T i a)))
- lem1 i a ih = h (H→G γ U T i a) (\v -> εIArg-subst γ U T F i a v (ih (εIArg γ U T i a v)))
- open module Chain-≡ = Chain.Poly.Heterogenous1 _≡₁_ (\x -> refl-≡₁) trans-≡₁
- open module Chain-≡₀ = Chain.Poly.Heterogenous _≡_ (\x -> refl-≡) trans-≡
- renaming (chain>_ to chain>₀_; _===_ to _===₀_; _by_ to _by₀_)
- -- Again we have to generalise
- Rg-eq : {I : Set}{D : I -> Set1}(γ : OPg I D)(U : I -> Set)(T : (i : I) -> U i -> D i)
- (F : (i : I) -> U i -> Set1)(intro : (a : Gu γ U T) -> U (Gi γ U T a))
- (g : (i : I)(u : U i) -> F i u)
- (h : (a : Gu γ U T) -> KIH γ U T F a -> F (Gi γ U T a) (intro a))
- (a : Gu γ U T) ->
- let i = Gi γ U T a
- a' = G→H γ U T a
- in h (H→G γ U T i a')
- (\v -> εIArg-subst γ U T F i a' v
- (Kmap (ε γ i) U T F g a' (εIArg γ U T i a' v)))
- ≡₁ h a (Kmap γ U T F g a)
- Rg-eq {I}{D} γ U T F intro g h a = app-≡₁
- (cong-≡₁⁰ h (H→G∘G→H-identity γ U T a))
- (η-≡₁⁰ \x y p ->
- chain> εIArg-subst γ U T F i a' x (Kmap (ε γ i) U T F g a' (εIArg γ U T i a' x))
- === Kmap (ε γ i) U T F g a' (εIArg γ U T i a' x)
- by εIArg-identity γ U T F a x (Kmap (ε γ i) U T F g a' (εIArg γ U T i a' x))
- === Kmap γ U T F g a y
- by app-≡₁⁰
- (cong-≡₁⁰ g
- (chain>₀ KIArg→I (ε γ i) U T a' (εIArg γ U T i a' x)
- ===₀ KIArg→I γ U T (H→G γ U T i a') x by₀ εIArg→I-identity γ U T i a' x
- ===₀ KIArg→I γ U T a y by₀
- app-≡₀ (cong-≡' (KIArg→I γ U T)
- (H→G∘G→H-identity γ U T a)
- ) p
- )
- )
- (chain>₀ KIArg→U (ε γ i) U T a' (εIArg γ U T i a' x)
- ===₀ KIArg→U γ U T (H→G γ U T i a') x by₀ εIArg→U-identity γ U T i a' x
- ===₀ KIArg→U γ U T a y by₀
- app-≡₀ (cong-≡' (KIArg→U γ U T)
- (H→G∘G→H-identity γ U T a)
- ) p
- )
- )
- where
- i = Gi γ U T a
- a' = G→H γ U T a
- Rg-equality : {I : Set}{D : I -> Set1}(γ : OPg I D)(F : (i : I) -> Ug γ i -> Set1)
- (h : (a : Gu γ (Ug γ) (Tg γ)) -> KIH γ (Ug γ) (Tg γ) F a -> F (Gi γ (Ug γ) (Tg γ) a) (introg γ a))
- (a : Gu γ (Ug γ) (Tg γ)) ->
- Rg γ F h (Gi γ (Ug γ) (Tg γ) a) (introg γ a)
- ≡₁ h a (Kmap γ (Ug γ) (Tg γ) F (Rg γ F h) a)
- Rg-equality {I}{D} γ F h a =
- chain> Rg γ F h (Gi γ U T a) (introg γ a)
- === h'' i a' ih by refl-≡₁
- === G→H∘H→G-subst γ U T F' i a' (h' i a' ih)
- by refl-≡₁
- === h' i a' ih by G→H∘H→G-identity γ U T F' a (h' i a' ih)
- === h (H→G γ U T i a') (\v -> εIArg-subst γ U T F i a' v (ih (εIArg γ U T i a' v)))
- by refl-≡₁
- === h a (Kmap γ U T F (Rg γ F h) a) by Rg-eq γ U T F (introg γ) (Rg γ F h) h a
- where
- U = Ug γ
- T = Tg γ
- F' = \i a -> F i (intror a)
- i = Gi γ U T a
- a' = G→H γ U T a
- h' : (i : I)(a : Hu (ε γ) U T i) -> KIH (ε γ i) U T F a -> F _ _
- h' = \i a ih -> h (H→G γ U T i a) \v ->
- εIArg-subst γ U T F i a v
- (ih (εIArg γ U T i a v))
- h'' = \i a ih -> G→H∘H→G-subst γ U T F' i a (h' i a ih)
- ih = Kmap (ε γ i) U T F (Rg γ F h) a'
|