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 `⊤ = ⊤