open import Data.Unit open import Data.Product open import Data.Sum open import Chapter1.Logic open import Chapter2.Desc open import Chapter2.Desc.Fixpoint module Chapter2.Desc.Lifting {X : Set} where [_]^ : (D : Desc)(P : X → Set) (xs : ⟦ D ⟧ X) → Set [ `1 ]^ P tt = ⊤ [ `var ]^ P xs = P xs [ T `× T' ]^ P (t , t') = [ T ]^ P t × [ T' ]^ P t' [ T `+ T' ]^ P (inj₁ t) = [ T ]^ P t [ T `+ T' ]^ P (inj₂ t') = [ T' ]^ P t' [ `Σ S T ]^ P (s , xs) = [ T s ]^ P xs [ `Π S T ]^ P f = (s : S) → [ T s ]^ P (f s) [_]^map : (D : Desc){P : X → Set}(p : (x : X) → P x) (xs : ⟦ D ⟧ X) → [ D ]^ P xs [ `1 ]^map p tt = tt [ `var ]^map p xs = p xs [ T `× T' ]^map p (t , t')= [ T ]^map p t , [ T' ]^map p t' [ T `+ T' ]^map p (inj₁ t) = [ T ]^map p t [ T `+ T' ]^map p (inj₂ t') = [ T' ]^map p t' [ `Σ S T ]^map p (s , xs) = [ T s ]^map p xs [ `Π S T ]^map p f = λ s → [ T s ]^map p (f s)