pushDown : Cont -> Cont If we model the idea of a container (S !> P) as a box
┌──────┐
│ s:S │
├──────┤
│ Ps │
└──────┘
then `pushDown` is interpreted as keeping the box frame in place while
pushing down the container: pruning any part of the container that goes
out of the box, and using `Unit` for anything new that appears:
┌──────┐
│ Unit │
├──────┤
│ s:S │
└──────┘
Ps
Totality: total
Visibility: public exportpushIntoContinuation : (d >< p) =%> l -> p =%> (pushDown d >@ l)- Totality: total
Visibility: public export terminal : c =%> UnitCont- Totality: total
Visibility: public export leftUnit : (Scalar >< c) =%> c- Totality: total
Visibility: public export rightUnit : (c >< Scalar) =%> c- Totality: total
Visibility: public export leftUnitInv : c =%> (Scalar >< c)- Totality: total
Visibility: public export rightUnitInv : c =%> (c >< Scalar)- Totality: total
Visibility: public export assocL : ((a >< b) >< c) =%> (a >< (b >< c))- Totality: total
Visibility: public export assocR : (a >< (b >< c)) =%> ((a >< b) >< c)- Totality: total
Visibility: public export swap : (a >< b) =%> (b >< a)- Totality: total
Visibility: public export swapMiddle : ((c1 >< c2) >< (c3 >< c4)) =%> ((c1 >< c3) >< (c2 >< c4))- Totality: total
Visibility: public export leftUnit : (Scalar >@ c) =%> c- Totality: total
Visibility: public export rightUnit : (c >@ Scalar) =%> c- Totality: total
Visibility: public export leftUnitInv : c =%> (Scalar >@ c)- Totality: total
Visibility: public export rightUnitInv : c =%> (c >@ Scalar)- Totality: total
Visibility: public export assocL : ((a >@ b) >@ c) =%> (a >@ (b >@ c))- Totality: total
Visibility: public export assocR : (a >@ (b >@ c)) =%> ((a >@ b) >@ c)- Totality: total
Visibility: public export elim : (c >+< c) =%> c- Totality: total
Visibility: public export initial : Empty =%> c- Totality: total
Visibility: public export cojoin : c =%> z -> d =%> z -> (c >+< d) =%> z- Totality: total
Visibility: public export direct : (a .Shp -> Bool) -> a =%> (a >+< a)- Totality: total
Visibility: public export duoidal : ((c >@ d) >< (e >@ f)) =%> ((c >< e) >@ (d >< f)) Interaction between composition and tensor product
Swaps the operations, and middle two containers
Not an isomorphism!
Totality: total
Visibility: public exporttensorToComp : (c >< f) =%> (c >@ f) Tensor product embeds into composition
A special case of `duoidal`
Totality: total
Visibility: public exportdistribute : (c >< e) =%> s -> (c >< (e >@ g)) =%> (s >@ g) Specific distributive law we need
Totality: total
Visibility: public exportState : Cont -> Type "State" as defined in https://arxiv.org/abs/2403.13001 and open games
┌─────────────┐
│ ├──► (x : c.Shp)
│ State │
│ ├◄── c.Pos x
└─────────────┘
Totality: total
Visibility: public exporttoState : c .Shp -> State c Given a shape of any container, state can be defined
Totality: total
Visibility: public exportfromState : State c -> c .Shp- Totality: total
Visibility: public export mapState : State c -> c =%> d -> State d- Totality: total
Visibility: public export Costate : Cont -> Type "Costate" as defined in https://arxiv.org/abs/2403.13001 and open games
┌─────────────┐
(x : c.Shp) ──►┤ │
│ Costate │
c.Pos x ◄──┤ │
└─────────────┘
Totality: total
Visibility: public exporttoCostate : ((x : c .Shp) -> c .Pos x) -> Costate c- Totality: total
Visibility: public export fromCostate : Costate c -> (x : c .Shp) -> c .Pos x- Totality: total
Visibility: public export mapCostate : Costate d -> c =%> d -> Costate c- Totality: total
Visibility: public export pairCostate : Costate c -> Costate d -> Costate (c >< d)- Totality: total
Visibility: public export fromNapCostateToState : Costate (Nap (c .Shp)) -> State c- Totality: total
Visibility: public export fromStateToNapCostate : State c -> Costate (Nap (c .Shp))- Totality: total
Visibility: public export wrapIntoVector : c =%> d -> Tensor [c] =%> Tensor [d] Wraps a dependent lens `c =%> d`
into one of type `c >@ Scalar =%> d >@ Scalar`
Needed because `c >@ Scalar` isn't automatically reduced to `c`
Totality: total
Visibility: public exportwrapIntoMatrix : (c >@ c') =%> (d >@ d') -> Tensor [c, c'] =%> Tensor [d, d']- Totality: total
Visibility: public export wrapIntoVectorHancock : c =%> d -> HancockTensor [c] =%> HancockTensor [d] Wraps a dependent lens `c =%> d`
into one of type `c >< Scalar =%> d >< Scalar`
Needed because `c >< Scalar` isn't automatically reduced to `c`
Totality: total
Visibility: public exportpick : Pick c a =%> c- Totality: total
Visibility: public export atShape : (s : c .Shp) -> At c s =%> c A lens from a container specialised to a shape to the container itself
Totality: total
Visibility: public exportvectToList1 : Vect (S k) =%> List1 A vector of positive length is a non-empty list
Totality: total
Visibility: public exporthandleEffect : Monad m => (m <!> effect) =%> Scalar -> a =%> effect -> (m <!> a) =%> Scalar- Totality: total
Visibility: public export inorderBackward : (b : BinTreeShape) -> Fin (numNodesAndLeaves b) -> BinTreePos b- Totality: total
Visibility: public export inorder : BinTree =%> List- Totality: total
Visibility: public export inorderBackward : (b : BinTreeShape) -> Fin (numNodes b) -> BinTreePosNode b- Totality: total
Visibility: public export inorder : BinTreeNode =%> List Traverses a binary tree container in order, producing a list container
Totality: total
Visibility: public exportpreorderBinTreeNode : (b : BinTreeShape) -> Fin (numNodes b) -> BinTreePosNode b- Totality: total
Visibility: public export inorderBackward : (b : BinTreeShape) -> Fin (numLeaves b) -> BinTreePosLeaf b- Totality: total
Visibility: public export inorder : BinTreeLeaf =%> List- Totality: total
Visibility: public export vectToList : Vect n =%> List- Totality: total
Visibility: public export maybeToList : Maybe =%> List- Totality: total
Visibility: public export