--------------------------------------------------------------------
--------------------------------------------------------------------
-- Sequence auxiliary operations
--------------------------------------------------------------------
--------------------------------------------------------------------
-- Overriding
insert(<>,i,x) = <>
insert(<y>^s,n,x) = if (n==1) then <x>^s else <y>^insert(s,n-1,x)
--------------------------------------------------------------------
-- Indexing
at(<x>^s,n) = if (n==1) then x else at(s,n-1)
--------------------------------------------------------------------
-- Sequence of 0s
zeroSeq(n) = if (n==1) then <0> else <0>^zeroSeq(n-1)
--------------------------------------------------------------------
map(f,<>) = <>
map(f,<x>^xs) = <f(x)>^(map(f,xs))
e2l(x) = <x>
addHead(e,<>) = <>
addHead(e,<x>^xs) = <<e>^x>^(addHead(e,xs))
seqCons(<>,xxs) = <>
seqCons(<x>^xs,xss) = (addHead(x,xss))^(seqCons(xs,xss))
distCartProd(<>) = <>
distCartProd(<xs>) = map(e2l,xs)
distCartProd(<xs>^xxs) = seqCons(xs, distCartProd(xxs))