@Override
	public boolean mutate(Mutation.Type type) {
		switch (type) {
		case REMOVE:
			// parent needs replacement Expression, but NumberLiteral has no
			// children to replace it
		case SWAP:
		case REPLICATE:
			return false;
		case COPY_TREE:
			return Mutation.copyExprTree(this);
		case COPY:
			// does not use Mutation.copy since we can copy same values due to
			// randomization
			NumberLiteral numLit = alike(Categories.ByStructure);
			if (numLit == null) {
				return false;
			}
			val = numLit.val + Integer.MAX_VALUE / Utils.RNG.nextInt();
			return true;
		case CREATE_PARENT:
			Mutation.createExprParent(this);
			return true;
		default:
			throw new AssertionError();
		}
	}