   evaluate: (vars) -> @var.evaluate(vars) ** pow
   isZero: () -> @var.isZero()
   isOne: () -> @pow == 0
+  contains: (d) -> @var.contains(d)
   differential: (d) ->
     if @pow == 2
       (new Multiplication(new Multiplication(@var.differential(d), new Num(@pow)),@var)).simplify()
     else
       (new Multiplication(new Multiplication(@var.differential(d), new Num(@pow)),new PolynomialOp(@var, @pow - 1))).simplify()
+  integral: (d) ->
+    (new Multiplication(new VarUnderOne(new Num(@pow + 1)),new PolynomialOp(@var, @pow + 1))).simplify()
   simplify: () ->
     if @pow == 1
       @var

  evaluate: (vars) -> @exp.evaluate(vars) ** @var.evaluate(vars)
  isZero: () -> @exp.isZero()
  isOne: () -> @exp.isOne() or @var.isZero()
  differential: (d) -> (new Multiplication(new Multiplication(new Log(@exp), @var.differential(d)),new ExponentialOp(@var,@exp))).simplify()
  simplify: () ->
    newVar = @var.simplify()
    newExp = @exp.simplify()


h = y.differential("x")

fd = f.differential("x")

iOfG = g.integral("x")
