public OperationExpression simplify() {
		if (((PrimitiveOperator) op).isComplexIDOfLeft()) {
			return new UnaryOpExpression(new PrimitiveOperator(PrimitiveOperator.ID_OP),
			                             left);
		}

		if (((PrimitiveOperator) op).isComplexNotOfLeft()) {
			return new UnaryOpExpression(new PrimitiveOperator(PrimitiveOperator.NOT_OP),
			                             left);
		}

		if (((PrimitiveOperator) op).isComplexIDOfRight()) {
			return new UnaryOpExpression(new PrimitiveOperator(PrimitiveOperator.ID_OP),
			                             right);
		}

		if (((PrimitiveOperator) op).isComplexNotOfRight()) {
			return new UnaryOpExpression(new PrimitiveOperator(PrimitiveOperator.NOT_OP),
			                             right);
		}

		return this; //dammy
	}