open import Data.Unit open import Data.Product open import Chapter1.Logic open import Chapter2.IDesc open import Chapter5.Ornament module Chapter5.Lifting {K : Set} {X : K → Set} where private u : Σ K X → K u = proj₁ [_]^h : (D : IDesc K) → ⟦ D ⟧ X → Orn u D [ `1 ]^h tt = `1 [ `var k ]^h x = `var (inv (k , x)) [ T `× T' ]^h (t , t') = [ T ]^h t `× [ T' ]^h t' [ `σ n T ]^h (k , xs) = deleteσ k ([ T k ]^h xs) [ `Σ S T ]^h (s , xs) = deleteΣ s ([ T s ]^h xs) [ `Π S T ]^h f = `Π λ s → [ T s ]^h (f s) [_]^ : (D : func K K) → orn D proj₁ proj₁ [ D ]^ = orn.mk (λ { (k , x) → [ func.out D k ]^h x })