public static <A> ProgramChromosome<A> of(
		final Tree<? extends Op<A>, ?> program,
		final ISeq<? extends Op<A>> operations,
		final ISeq<? extends Op<A>> terminals
	) {
		return of(
			program,
			(Predicate<? super ProgramChromosome<A>> & Serializable)ProgramChromosome::isSuperValid,
			operations,
			terminals
		);
	}
Create a new chromosome from the given operation tree (program).

@param program the operation tree
@param operations the allowed non-terminal operations
@param terminals the allowed terminal operations
@param <A> the operation type
@return a new chromosome from the given operation tree
@throws NullPointerException if one of the given arguments is {@code null}
@throws IllegalArgumentException if the given operation tree is invalid,
        which means there is at least one node where the operation arity
        and the node child count differ.
jenetics.prog/src/main/java/io/jenetics/prog/ProgramChromosome.java