open import Chapter2.IDesc open import Chapter5.Ornament module Chapter6.Lift.Fold {I I⁺ : Set} {D : func I I} {u : I⁺ → I} (o : orn D u u) where open import Data.Product open import Chapter1.Logic open import Chapter2.IDesc.InitialAlgebra open import Chapter5.Reornament o open import Chapter6.Functions open import Chapter6.FunOrnament open import Chapter6.Patch AlgLift : ∀{T} → Alg D (λ _ → ⟦ T ⟧Type) → FunctionOrn T → Set AlgLift α T⁺ = Alg reornD (λ ix → Patch (fold D α (proj₂ ix)) T⁺) liftAlg : {i : I}{i⁺ : u ⁻¹ i} {T : Type}{T⁺ : FunctionOrn T} (α : Alg D (λ _ → ⟦ T ⟧Type)) (β : AlgLift α T⁺) → Patch (fold D α) (μ⁺ o [ i⁺ ]→ T⁺) liftAlg {i⁺ = inv i⁺} α β = λ x x⁺⁺ → fold reornD (λ {ix} ih → β {ix} ih) x⁺⁺