operations on algebraic expressions