open import Level
open import Data.Nat
open import Data.Fin
open import Data.Product
open import Data.Sum
open import Data.Unit
open import Relation.Binary.PropositionalEquality
open import Chapter2.Logic
open import Chapter5.IDesc
open import Chapter5.IDesc.Fixpoint
open import Chapter5.IDesc.InitialAlgebra
open import Chapter5.IDesc.Induction
open import Chapter8.Ornament.Examples.Lifting
open import Chapter8.Ornament
module Chapter8.AlgebraicOrnament
{ℓ : Level}
{K : Set ℓ}
{X : K → Set ℓ} where
I : Set ℓ
I = Σ K X
u : I → K
u = proj₁
module Desc
(k : K)
(x : X k)
(D : IDesc ℓ K)
(α : ⟦ D ⟧ X → X k) where
algOrn : Orn u D
algOrn = insert (⟦ D ⟧ X) λ xs →
insert (α xs ≡ x) λ _ →
[_]^h {L = K} D xs
algOrnD : IDesc ℓ I
algOrnD = ⟦ algOrn ⟧Orn
module Func
(D : func ℓ K K)
(α : Alg D X) where
algOrn : orn D u u
algOrn = orn.mk λ { (k , xs) → Desc.algOrn k xs (func.out D k) (α {k}) }
algOrnD : func ℓ I I
algOrnD = ⟦ algOrn ⟧orn
open Func public