Current section
Files
Jump to
Current section
Files
priv/inductive.ctt
module lam where
data s = a
listCategory (A: U) (o: listObject A): U = undefined
histo (A:U) (F: U -> U) (X: functor F) (f: F (cofree F A) -> A) (z: fix F): A
= extract A F ((cata (cofree F A) F X (\(x: F (cofree F A)) ->
CoFree (Fix (CoBindF (f x) ((X.1 (cofree F A) (fix (cofreeF F A)) (uncofree A F) x)))))) z) where
extract (A: U) (F: U -> U): cofree F A -> A = split
| CoFree f -> unpack_fix f where
unpack_fix: fix (cofreeF F A) -> A = split
| Fix f -> unpack_cofree f where
unpack_cofree: cofreeF F A (fix (cofreeF F A)) -> A = split
| CoBindF a -> a
futu (A: U) (F: U -> U) (X: functor F) (f: A -> F (free F A)) (a: A): fix F
= Fix (X.1 (free F A) (fix F) (\(z: free F A) -> w z) (f a)) where
w: free F A -> fix F = split
| Free x -> unpack x where
unpack_free: freeF F A (fix (freeF F A)) -> fix F = split
| ReturnF x -> futu A F X f x
| BindF g -> Fix (X.1 (fix (freeF F A)) (fix F) (\(x: fix (freeF F A)) -> w (Free x)) g) where
unpack: fix (freeF F A) -> fix F = split
| Fix x -> unpack_free x
chrono (A B: U) (F: U -> U) (X: functor F)
(f: F (cofree F B) -> B)
(g: A -> F (free F A))
(a: A): B = histo B F X f (futu A F X g a)
listAlg (A : U) : U
= (X: U)
* (nil: X)
* (cons: A -> X -> X)
* Unit
listMor (A: U) (x1 x2: listAlg A) : U
= (map: x1.1 -> x2.1)
* (mapNil: Path x2.1 (map (x1.2.1)) (x2.2.1))
* (mapCons: (a:A) (x: x1.1) -> Path x2.1 (map (x1.2.2.1 a x)) (x2.2.2.1 a (map x)))
* Unit
listObject (A: U) : U
= (point: (x: listAlg A) -> x.1)
* (map: (x1 x2: listAlg A)
(m: listMor A x1 x2) ->
Path x2.1 (m.1 (point x1)) (point x2))
* Unit