code: function eq(a, b) {
  	if (a === b)
  		return true
  	if (!isTerm(a) || !isTerm(b))
  		return
  	if (a.op !== b.op)
  		return
  	if (a.variables) {
  		if (a.variables.length !== b.variables.length)
  			return
  		for (var i = 0; i < a.variables.length; i++)
  			if (a.variables[i] !== b.variables[i])
  				return
  	}
  	if (a.length !== b.length)
  		return
  	for (var i = 0; i < a.length; i++)
  		if (!eq(a[i], b[i]))
  			return
  	switch (a.op) {
  	case 'bool':
  		return a.val === b.val
  	case 'call':
  		return a.f === b.f
  	case 'distinct_obj':
  	case 'fun':
  	case 'variable':
  		return
  	case 'integer':
  	case 'rational':
  	case 'real':
  		return a.val.eq(b.val)
  	}
  	return true
  }
docs: Other