+/** Perform automatic symbolic evaluations on indexed expression that
+ * contains this object as the base expression. */
+ex basic::eval_indexed(const basic & i) const
+ // this function can't take a "const ex & i" because that would result
+ // in an infinite eval() loop
+{
+ // There is nothing to do for basic objects
+ return i.hold();
+}
+
+/** Add two indexed expressions. They are guaranteed to be of class indexed
+ * (or a subclass) and their indices are compatible. This function is used
+ * internally by simplify_indexed().
+ *
+ * @param self First indexed expression; it's base object is *this
+ * @param other Second indexed expression
+ * @return sum of self and other
+ * @see ex::simplify_indexed() */
+ex basic::add_indexed(const ex & self, const ex & other) const
+{
+ return self + other;
+}
+
+/** Multiply an indexed expression with a scalar. This function is used
+ * internally by simplify_indexed().
+ *
+ * @param self Indexed expression; it's base object is *this
+ * @param other Numeric value
+ * @return product of self and other
+ * @see ex::simplify_indexed() */
+ex basic::scalar_mul_indexed(const ex & self, const numeric & other) const
+{
+ return self * other;
+}
+
+/** Try to contract two indexed expressions that appear in the same product.
+ * If a contraction exists, the function overwrites one or both of the
+ * expressions and returns true. Otherwise it returns false. It is
+ * guaranteed that both expressions are of class indexed (or a subclass)
+ * and that at least one dummy index has been found. This functions is
+ * used internally by simplify_indexed().
+ *
+ * @param self Pointer to first indexed expression; it's base object is *this
+ * @param other Pointer to second indexed expression
+ * @param v The complete vector of factors
+ * @return true if the contraction was successful, false otherwise
+ * @see ex::simplify_indexed() */
+bool basic::contract_with(exvector::iterator self, exvector::iterator other, exvector & v) const
+{
+ // Do nothing
+ return false;
+}
+
+/** Substitute a set of symbols by arbitrary expressions. The ex returned
+ * will already be evaluated. */