module Chapter6.Patch where

open import Data.Unit
open import Data.Product

open import Chapter1.Logic

open import Chapter2.IDesc.Fixpoint

open import Chapter5.Ornament
open import Chapter5.Reornament

open import Chapter6.Functions
open import Chapter6.FunOrnament



Patch : ∀{T}   T ⟧Type  FunctionOrn T  Set
Patch {μ D [ ._ ]→ T} f (μ⁺ o [ inv i⁺ ]→ T⁺) = 
      (x : μ D _)  
         μ (reornD o) (i⁺ , x)  Patch (f x) T⁺
Patch {μ D [ ._  T} (x , t) (μ⁺ o [ inv i⁺  T⁺) =
      μ (reornD o) (i⁺ , x) × Patch t T⁺
Patch {`⊤} tt `⊤ =