-- -- Mathematical Functions -- abs \$x := if isRational x then b.abs x else x neg \$x := if isRational x then b.neg x else - x exp \$x := if isFloat x then b.exp x else if isTerm x then match x as termExpr with | #0 -> 1 | #1 -> e | mult \$a #(i * pi) -> (-1) ^ a | _ -> `exp x else `exp x log \$x := if isFloat x then b.log x else match x as mathExpr with | #1 -> 0 | #e -> 1 | _ -> `log x cos \$x := if isFloat x then b.cos x else match x as mathExpr with | #0 -> 1 | term \$n [#π] -> (-1) ^ abs n | (mult _ #π) / #2 -> 0 | _ -> `cos x sin \$x := if isFloat x then b.sin x else match x as mathExpr with | #0 -> 0 | mult _ #π -> 0 | (mult \$n #π) / #2 -> (-1) ^ ((abs n - 1) / 2) | _ -> `sin x tan \$x := if isFloat x then b.tan x else match x as mathExpr with | #0 -> 0 | _ -> `tan x acos := b.acos asin := b.asin atan := b.atan cosh \$x := if isFloat x then b.cosh x else match x as mathExpr with | #0 -> 1 | _ -> `cosh x sinh \$x := if isFloat x then b.sinh x else match x as mathExpr with | #0 -> 0 | _ -> `sinh x tanh \$x := if isFloat x then b.tanh x else match x as mathExpr with | #0 -> 0 | _ -> `tanh x acosh := b.acosh asinh := b.asinh atanh := b.atanh sinc \$x := if isFloat x then if x = 0.0 then 1.0 else b.sin x / x else match x as mathExpr with | #0 -> 1 | _ -> sin x / x sigmoid \$z := 1 / (1 + exp (- z)) kroneckerDelta := cambda js -> if all (= head js) (tail js) then 1 else 0 eulerTotientFunction \$n := n * product (map (\p -> 1 - 1 / p) (unique (pF n))) ε := memoizedLambda n -> let (es, os) := evenAndOddPermutations' n in generateTensor (cambda is -> if member is es then 1 else if member is os then -1 else 0) (take n (repeat1 n)) ε' := memoizedLambda n k -> let (es, os) := evenAndOddPermutations' n in generateTensor (cambda is -> match drop k is as list integer with | _ ++ \$x :: _ ++ ?(< x) :: _ -> 0 | _ -> if member is es then 1 else if member is os then -1 else 0) (take n (repeat1 n))