  Contemporary genetic programming (GP) systems for general program synthesis
have been primarily concerned with evolving programs that can manipulate values
from a standard set of primitive data types and simple indexed data structures.
In contrast, human programmers do not limit themselves to a small finite set of
data types and use polymorphism to express an unbounded number of types
including nested data structures, product types, and generic functions.
Code-building Genetic Programming (CBGP) is a recently introduced method that
compiles type-safe programs from linear genomes using stack-based compilation
and a formal type system. Although prior work with CBGP has shown initial
demonstrations of polymorphism inside evolved programs, we have provided a
deeper exploration of these capabilities through the evolution of programs
which make use of generic data types such as key-value maps, tuples, and sets,
as well as higher order functions and functions with polymorphic type
signatures. In our experiments, CBGP is able to solve problems with all of
these properties, where every other GP system that we know of has restrictions
that make it unable to even consider problems with these properties. This
demonstration provides a significant step towards fully aligning the
expressiveness of GP to real world programming.
