6
data OP (I : Set)(E : Set) : Set1 where
8
σ : (A : Set)(γ : A -> OP I E) -> OP I E
9
δ : (A : Set)(i : A -> I)(γ : OP I E) -> OP I E
11
Args : {I : Set}{E : Set} -> OP I E ->
14
Args (σ A γ) U = A × \a -> Args (γ a) U
15
Args (δ A i γ) U = ((a : A) -> U (i a)) × \_ -> Args γ U
17
index : {I : Set}{E : Set}(γ : OP I E)(U : I -> Set) -> Args γ U -> E
19
index (σ A γ) U a = index (γ (π₀ a)) U (π₁ a)
20
index (δ A i γ) U a = index γ U (π₁ a)
22
IndArg : {I : Set}{E : Set}
23
(γ : OP I E)(U : I -> Set) ->
25
IndArg (ι e) U _ = Zero
26
IndArg (σ A γ) U a = IndArg (γ (π₀ a)) U (π₁ a)
27
IndArg (δ A i γ) U a = A + IndArg γ U (π₁ a)
29
IndIndex : {I : Set}{E : Set}
30
(γ : OP I E)(U : I -> Set) ->
31
(a : Args γ U) -> IndArg γ U a -> I
33
IndIndex (σ A γ) U arg c = IndIndex (γ (π₀ arg)) U (π₁ arg) c
34
IndIndex (δ A i γ) U arg (inl a) = i a
35
IndIndex (δ A i γ) U arg (inr a) = IndIndex γ U (π₁ arg) a
37
Ind : {I : Set}{E : Set}
38
(γ : OP I E)(U : I -> Set) ->
39
(a : Args γ U)(v : IndArg γ U a) -> U (IndIndex γ U a v)
41
Ind (σ A γ) U arg c = Ind (γ (π₀ arg)) U (π₁ arg) c
42
Ind (δ A i γ) U arg (inl a) = (π₀ arg) a
43
Ind (δ A i γ) U arg (inr a) = Ind γ U (π₁ arg) a
45
IndHyp : {I : Set}{E : Set}
46
(γ : OP I E)(U : I -> Set) ->
47
(F : (i : I) -> U i -> Set)(a : Args γ U) -> Set
48
IndHyp γ U F a = (v : IndArg γ U a) -> F (IndIndex γ U a v) (Ind γ U a v)
50
IndHyp₁ : {I : Set}{E : Set}
51
(γ : OP I E)(U : I -> Set) ->
52
(F : (i : I) -> U i -> Set1)(a : Args γ U) -> Set1
53
IndHyp₁ γ U F a = (v : IndArg γ U a) -> F (IndIndex γ U a v) (Ind γ U a v)
57
(γ : OP I E)(U : I -> Set)
58
(F : (i : I) -> U i -> Set)
59
(g : (i : I)(u : U i) -> F i u)
60
(a : Args γ U) -> IndHyp γ U F a
61
induction γ U F g a = \hyp -> g (IndIndex γ U a hyp) (Ind γ U a hyp)
65
(γ : OP I E)(U : I -> Set)
66
(F : (i : I) -> U i -> Set1)
67
(g : (i : I)(u : U i) -> F i u)
68
(a : Args γ U) -> IndHyp₁ γ U F a
69
induction₁ γ U F g a = \hyp -> g (IndIndex γ U a hyp) (Ind γ U a hyp)