Skip to content

Instantly share code, notes, and snippets.

@noughtmare
Last active October 30, 2025 22:29
Show Gist options
  • Select an option

  • Save noughtmare/3fc0dc8b1e9f7dc4c6d0cc0804bc2f2d to your computer and use it in GitHub Desktop.

Select an option

Save noughtmare/3fc0dc8b1e9f7dc4c6d0cc0804bc2f2d to your computer and use it in GitHub Desktop.
Induction for descriptions with fixpoints
open import Level using (Level) renaming (suc to lsuc ; zero to lzero)
open import Function
open import Data.Sum using (_⊎_ ; inj₁ ; inj₂)
variable : Level
data Desc (I : Set) : Set₁ where
var : I Desc I
σ π : (A : Set) (D : A Desc I) Desc I
_×D_ : Desc I Desc I Desc I
κ : Set Desc I
μ : (J : Set) (J Desc (I ⊎ J)) J Desc I
indDesc : (P : (I : Set) Desc I Set ℓ)
((I : Set) (i : I) P I (var i))
((I : Set) (A : Set) (D : A Desc I) ((x : A) P I (D x)) P I (σ A D))
((I : Set) (A : Set) (D : A Desc I) ((x : A) P I (D x)) P I (π A D))
((I : Set) (x y : Desc I) P I x P I y P I (x ×D y))
((I : Set) (A : Set) P I (κ A))
((I J : Set) (f : J Desc (I ⊎ J)) (j : J) ((j : J) P (I ⊎ J) (f j)) P I (μ J f j))
(I : Set) (x : Desc I) P I x
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (var i) = x₀ I i
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (σ A D) = x₁ I A D (indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I ∘ D)
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (π A D) = x₂ I A D (indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I ∘ D)
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (x ×D y) = x₃ I x y (indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I x) (indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I y)
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (κ A) = x₄ I A
indDesc P x₀ x₁ x₂ x₃ x₄ x₅ I (μ J f j) = x₅ I J f j (indDesc P x₀ x₁ x₂ x₃ x₄ x₅ (I ⊎ J) ∘ f)
-- sanity check
idDesc : (I : Set) Desc I Desc I
idDesc = indDesc (λ I _ Desc I) (λ _ var) (λ _ A _ f σ A f) (λ _ A _ f π A f) (λ _ _ _ x y x ×D y) (λ _ A κ A) (λ _ J _ j f μ J f j)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment