module Chapter11.Patch.Coherence where open import Level open import Data.Unit open import Data.Product open import Chapter2.Logic open import Chapter6.IDesc.Fixpoint open import Chapter10.Ornament open import Chapter10.Ornament.Algebra open import Chapter10.Reornament open import Chapter10.Reornament.Make open import Chapter10.Reornament.Algebra open import Chapter10.Reornament.Coherence open import Chapter11.Functions open import Chapter11.FunOrnament open import Chapter11.Patch open import Chapter11.Patch.Apply ⊢Coherence : ∀{ℓ}{T : Type ℓ} → (T⁺ : FunctionOrn T)(f : ⟦ T ⟧Type) (p : Patch f T⁺) → ⟦ T⁺ ⟧Coherence f (patch T⁺ f p) ⊢Coherence (μ⁺ o [ inv i⁺ ]→ T⁺) f f⁺ = λ x → ⊢Coherence T⁺ (f (forgetOrnament o x)) (f⁺ (forgetOrnament o x) (makeAlg o x)) ⊢Coherence (μ⁺ o [ inv i⁺ ]× T⁺) (x , xs) (x⁺ , xs⁺) = coherentOrn o x⁺ , ⊢Coherence T⁺ xs xs⁺ ⊢Coherence `⊤ (lift tt) (lift tt) = lift tt