open import Level 

open import Chapter6.IDesc

open import Chapter10.Ornament

module Chapter11.Lift.Fold 
         { : Level}
         {I I⁺ : Set }
         {D : func  I I}
         {u : I⁺  I}
         (o : orn D u u)
       where

open import Data.Product

open import Chapter2.Logic 

open import Chapter6.IDesc.InitialAlgebra

open import Chapter10.Reornament o

open import Chapter11.Functions
open import Chapter11.FunOrnament
open import Chapter11.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⁺⁺