123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- {-# OPTIONS --no-positivity-check #-}
- module IIRDg where
- import LF
- import DefinitionalEquality
- import IIRD
- open LF
- open DefinitionalEquality
- open IIRD
- mutual
- data Ug {I : Set}{D : I -> Set1}(γ : OPg I D) : I -> Set where
- introg : (a : Gu γ (Ug γ) (Tg γ)) -> Ug γ (Gi γ (Ug γ) (Tg γ) a)
- Tg : {I : Set}{D : I -> Set1}(γ : OPg I D)(i : I) -> Ug γ i -> D i
- Tg γ .(Gi γ (Ug γ) (Tg γ) a) (introg a) = Gt γ (Ug γ) (Tg γ) a
- Arg : {I : Set}{D : I -> Set1}(γ : OPg I D) -> Set
- Arg γ = Gu γ (Ug γ) (Tg γ)
- index : {I : Set}{D : I -> Set1}(γ : OPg I D) -> Arg γ -> I
- index γ a = Gi γ (Ug γ) (Tg γ) a
- IH : {I : Set}{D : I -> Set1}(γ : OPg I D)(F : (i : I) -> Ug γ i -> Set1) -> Arg γ -> Set1
- IH γ = KIH γ (Ug γ) (Tg γ)
- -- Elimination rule
- Rg : {I : Set}{D : I -> Set1}(γ : OPg I D)(F : (i : I) -> Ug γ i -> Set1) ->
- (h : (a : Arg γ) -> IH γ F a -> F (index γ a) (introg a)) ->
- (i : I)(u : Ug γ i) -> F i u
- Rg γ F h .(index γ a) (introg a) = h a (Kmap γ (Ug γ) (Tg γ) F (Rg γ F h) a)
- {-
- -- We don't have general IIRDs so we have to postulate Ug/Tg
- postulate
- Ug : {I : Set}{D : I -> Set1} -> OPg I D -> I -> Set
- Tg : {I : Set}{D : I -> Set1}(γ : OPg I D)(i : I) -> Ug γ i -> D i
- introg : {I : Set}{D : I -> Set1}(γ : OPg I D)(a : Gu γ (Ug γ) (Tg γ)) ->
- Ug γ (Gi γ (Ug γ) (Tg γ) a)
- 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
- 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-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)
- -- Helpers
- ι★g : {I : Set}(i : I) -> OPg I (\_ -> One')
- ι★g i = ι < i | ★' >'
- -- Examples
- module Martin-Löf-Identity where
- IdOP : {A : Set} -> OPg (A * A) (\_ -> One')
- IdOP {A} = σ A \a -> ι★g < a | a >
- _==_ : {A : Set}(x y : A) -> Set
- x == y = Ug IdOP < x | y >
- refl : {A : Set}(x : A) -> x == x
- refl x = introg IdOP < x | ★ >
- -- We have to work slightly harder than desired since we don't have η for × and One.
- private
- -- F C is just uncurry C but dependent and at high universes.
- F : {A : Set}(C : (x y : A) -> x == y -> Set1)(i : A * A) -> Ug IdOP i -> Set1
- F C < x | y > p = C x y p
- h' : {A : Set}(C : (x y : A) -> x == y -> Set1)
- (h : (x : A) -> C x x (refl x))
- (a : Gu IdOP (Ug IdOP) (Tg IdOP)) -> KIH IdOP (Ug IdOP) (Tg IdOP) (F C) a ->
- F C (Gi IdOP (Ug IdOP) (Tg IdOP) a) (introg IdOP a)
- h' C h < x | ★ > _ = h x
- J : {A : Set}(C : (x y : A) -> x == y -> Set1)
- (h : (x : A) -> C x x (refl x))
- (x y : A)(p : x == y) -> C x y p
- J {A} C h x y p = Rg IdOP (F C) (h' C h) < x | y > p
- J-equality : {A : Set}(C : (x y : A) -> x == y -> Set1)
- (h : (x : A) -> C x x (refl x))(x : A) ->
- J C h x x (refl x) ≡₁ h x
- J-equality {A} C h x = Rg-equality IdOP (F C) (h' C h) < x | ★ >
- module Christine-Identity where
- IdOP : {A : Set}(a : A) -> OPg A (\_ -> One')
- IdOP {A} a = ι★g a
- _==_ : {A : Set}(x y : A) -> Set
- x == y = Ug (IdOP x) y
- refl : {A : Set}(x : A) -> x == x
- refl x = introg (IdOP x) ★
- private
- h' : {A : Set}(x : A)(C : (y : A) -> x == y -> Set1)
- (h : C x (refl x))(a : Gu (IdOP x) (Ug (IdOP x)) (Tg (IdOP x))) ->
- KIH (IdOP x) (Ug (IdOP x)) (Tg (IdOP x)) C a ->
- C (Gi (IdOP x) (Ug (IdOP x)) (Tg (IdOP x)) a) (introg (IdOP x) a)
- h' x C h ★ _ = h
- H : {A : Set}(x : A)(C : (y : A) -> x == y -> Set1)
- (h : C x (refl x))
- (y : A)(p : x == y) -> C y p
- H x C h y p = Rg (IdOP x) C (h' x C h) y p
- H-equality : {A : Set}(x : A)(C : (y : A) -> x == y -> Set1)
- (h : C x (refl x)) ->
- H x C h x (refl x) ≡₁ h
- H-equality x C h = Rg-equality (IdOP x) C (h' x C h) ★
- open Christine-Identity
- -}
|