module Chapter6.Patch.Coherence 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.Ornament.Algebra open import Chapter5.Reornament open import Chapter5.Reornament.Make open import Chapter5.Reornament.Algebra open import Chapter5.Reornament.Coherence open import Chapter6.Functions open import Chapter6.FunOrnament open import Chapter6.Patch open import Chapter6.Patch.Apply ⊢Coherence : ∀{T} → (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 `⊤ tt tt = tt