{-# OPTIONS --without-K --exact-split #-}
open import Agda.Builtin.Equality
module Inductive.Constructors.DW-types
{A : Set}
{I : A → Set}
(Br : (a : A) → I a → Set)
(ar : (a : A) → (i : I a) → Br a i → A)
where
data DW : A → Set where
dsup : (a : A)
(i : I a)
(f : (b : Br a i) → DW (ar a i b))
→ DW a
El-DW : ∀ {e} → (M : (a : A) → DW a → Set e)
(d : (a : A)
(i : I a)
(h : (b : Br a i) → DW (ar a i b))
(k : (b : Br a i) → M (ar a i b) (h b))
→ M a (dsup a i h))
→ (a : A) (w : DW a)
→ M a w
El-DW M d a (dsup a i f) =
d a i f λ b → El-DW M d (ar a i b) (f b)
C-DW : ∀ {e} → (M : (a : A) → DW a → Set e)
(d : (a : A)
(i : I a)
(h : (b : Br a i) → DW (ar a i b))
(k : (b : Br a i) → M (ar a i b) (h b))
→ M a (dsup a i h))
→ (a : A) (i : I a) (f : (b : Br a i) → DW (ar a i b))
→ El-DW M d a (dsup a i f)
≡
d a i f (λ b → El-DW M d (ar a i b) (f b))
C-DW M d a i f = refl