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