+ bool is_dim_symbolic() const {return !is_exactly_a<numeric>(dim);}
+
+ /** Make a new index with the same value but a different dimension. */
+ ex replace_dim(const ex & new_dim) const;
+
+ /** Return the minimum of the dimensions of this and another index.
+ * If this is undecidable, throw an exception. */
+ ex minimal_dim(const idx & other) const;
+
+protected:
+ void print_index(const print_context & c, unsigned level) const;
+ void do_print(const print_context & c, unsigned level) const;
+ void do_print_latex(const print_latex & c, unsigned level) const;
+ void do_print_tree(const print_tree & c, unsigned level) const;