To make adding functionality as easy as possible, I recommend using annotations for both providing new objective and search space building blocks.
In case of objectives we already have the Potential annotation. Based the rule system in our recent paper submission, the potential annotation has an interesting non-orthogonal character: it is also a constraint on the RT types of the arguments of the potential. This means that the transformation system needs to be able to convert the arguments to the given type. This is also possible using the deterministic factor trick Luke used. But I think there are interesting other rules that can be used to adhere the type constraints. For example, I think there are rules that lead to "Gates", such as f(if (c) r1 else r2) => if (c) f(r1) else f(r2). I think these should be discussed in future versions of the paper.
In case of search spaces we don't have anything yet. A simple idea is to annotate search space generator methods (such as vectors, maps, seqs, doubles etc.) with the RT variables they generate.
To make adding functionality as easy as possible, I recommend using annotations for both providing new objective and search space building blocks.
In case of objectives we already have the Potential annotation. Based the rule system in our recent paper submission, the potential annotation has an interesting non-orthogonal character: it is also a constraint on the RT types of the arguments of the potential. This means that the transformation system needs to be able to convert the arguments to the given type. This is also possible using the deterministic factor trick Luke used. But I think there are interesting other rules that can be used to adhere the type constraints. For example, I think there are rules that lead to "Gates", such as f(if (c) r1 else r2) => if (c) f(r1) else f(r2). I think these should be discussed in future versions of the paper.
In case of search spaces we don't have anything yet. A simple idea is to annotate search space generator methods (such as vectors, maps, seqs, doubles etc.) with the RT variables they generate.