open import Chapter2.Container

open import Chapter5.Container.Morphism.Cartesian

module Chapter5.Equivalence.ToOrn
          {I J K L : Set}{u : K  I}{v : L  J}
          {φ' : K  L}{φ : I  J}
       where

open import Function

open import Relation.Binary.PropositionalEquality

open import Chapter1.Logic

open import Chapter2.Equivalence.ToDesc

open import Chapter5.Ornament

toOrn : φ' ⇒c[ u  v ] φ  orn  φ ⟩⁻¹ u v
toOrn τ = orn.mk λ l  
           λ sh  
          insert (S φ' l) λ ext  
          insert (σ τ ext  sh) λ q  
           λ ps  
          `var (invView (n φ' (subst id (ρ τ) (subst (P φ) (sym q) ps))) 
                        (pf {l}{sh}{ext}{ps}{q}))
    where open _⇒c[_∣_]_ public

          invView : ∀{A B : Set}{b}{f : A  B}  
                    (a : A)  f a  b  f ⁻¹ b
          invView a refl = inv a

          postulate pf : ∀{l}  {sh : S φ (v l)}{ext : S φ' l}{ps : P φ sh}{q : σ τ ext  sh}  
                         u (n φ' (subst  x  x) (ρ τ) (subst (P φ) (sym q) ps)))   n φ ps
{-
                                (trans (simForget⊢ ψ⇒cφ ext (subst (P φ) (sym q) ps)) 
                                       (pf {I}{I⁺}{J}{J⁺}{f}{g} ψ φ j⁺ {forget ψ⇒cφ} ext sh q ps)))
-}