module Ornament where open import Stdlib open import Signature record COrn {I}(Σ : Sig I)(I⁺ : Set)(u : I⁺ → I) : Set₁ where open Sig Σ field extend : (i⁺ : I⁺) → Op (u i⁺) → Set refine : (i⁺ : I⁺)(op : Op (u i⁺))(ext : extend i⁺ op) → Ar op → I⁺ coh : (i⁺ : I⁺)(op : Op (u i⁺))(ext : extend i⁺ op)(ar : Ar op) → u (refine i⁺ op ext ar) ≡ Ty ar ⟦_⟧COrn : ∀{I}{Σ : Sig I}{I⁺ u} → COrn Σ I⁺ u → Sig I⁺ ⟦_⟧COrn {Σ = Σ}{I⁺}{u} τ = Op⁺ ◃ Ar⁺ / λ {i⁺}{op⁺} → Ty⁺ {i⁺}{op⁺} where open Sig Σ open COrn τ Op⁺ : I⁺ → Set Op⁺ i⁺ = Σ[ op ∈ Op (u i⁺) ] extend i⁺ op Ar⁺ : {i⁺ : I⁺} → Op⁺ i⁺ → Set Ar⁺ (op , ext) = Ar op Ty⁺ : {i⁺ : I⁺}{op⁺ : Op⁺ i⁺} → Ar⁺ op⁺ → I⁺ Ty⁺ {i⁺}{(op , ext)} ar = refine i⁺ op ext ar