Hi,
I am thinking about exploring the space of high-order functions, by constructing (combine) complex fuctions using small and simple functions.
For example, I have a set of simple functions:
$f1(x, y) = x + y$
$f2(x, y) = x*y$
$f3(x) = log(x)$
$f4(x) = exp(x)$
Given 2 variables, x and y, I could create a fairly complex function
$f_{agg}(x, y) = f1( f2(f4(x) ,f3(y)) , f4(y) )$
If we plot the structure of these functions, in this specific case, it is a tree:
f1
f2 f4
f4 f3
We all know that tree is a special case of a graph.
Now here comes the problem: What if I do not know the stucture of $f_{agg}$ in the first place, and I want to enumerate all possible combinations?
In other words, we have a few nodes , and we want to find all possible graphs that can be created by connecting these nodes.
An obvious constraint is the arity of the function. Unary function takes 1 argument, so it has only 1 inbound edge in a graph, while binary functions have 2, trinary functions have 3.
Another constraint is the domain ( i am not sure if this is the right word), a function $f_{n} (x) = - |x| $ will only give non-positive result, therefore we cannot combine it wiht $f_{p} (x) = log(x) $ .
Can anyone give me some clue how to combine functions in a systematic way? Please leave comments if I haven't explain myself clearly.