{-# OPTIONS --without-K #-}

module container.fixpoint where

open import sum
open import level
open import container.core
open import function.core
open import function.isomorphism
open import function.overloading

record Fixpoint {li la lb}
                (c : Container li la lb)
                (lx : Level) : Set (li  la  lb  lsuc lx) where
  constructor fix

  open Container c
  field
    X : I  Set lx
    fixpoint :  i  X i  F X i

  head :  {i}  X i  A i
  head {i} = proj₁  apply (fixpoint i)

  tail :  {i}(u : X i)(b : B (head u))  X (r b)
  tail {i} = proj₂ ∘' apply (fixpoint i)