Agda-2.3.2.2: examples/outdated-and-incorrect/iird/IIRDr.agda
{-# OPTIONS --no-positivity-check #-}
module IIRDr where
import LF
import IIRD
open LF
open IIRD
-- Agda2 has restricted IIRDs so we can define Ur/Tr directly
mutual
data Ur {I : Set}{D : I -> Set1}(γ : OPr I D)(i : I) : Set where
intror : Hu γ (Ur γ) (Tr γ) i -> Ur {I}{D} γ i
Tr : {I : Set}{D : I -> Set1}(γ : OPr I D)(i : I) -> Ur γ i -> D i
Tr γ i (intror a) = Ht γ (Ur γ) (Tr γ) i a
-- Elimination rule
Rr : {I : Set}{D : I -> Set1}(γ : OPr I D)(F : (i : I) -> Ur γ i -> Set1)
(h : (i : I)(a : Hu γ (Ur γ) (Tr γ) i) -> KIH (γ i) (Ur γ) (Tr γ) F a -> F i (intror a))
(i : I)(u : Ur γ i) -> F i u
Rr γ F h i (intror a) = h i a (Kmap (γ i) (Ur γ) (Tr γ) F (Rr γ F h) a)
-- Helpers
ι★r : {I : Set}{D : I -> Set1} -> OP I D One'
ι★r = ι ★'