+ ex eval_ncmul(const exvector & v) const { return hold_ncmul(v); }
+public:
+ ex eval_indexed(const basic & i) const { return i.hold(); }
+
+ // printing
+ void print(const print_context & c, unsigned level = 0) const { inherited::print(c, level); }
+ unsigned precedence() const { return 70; }
+
+ // info
+ bool info(unsigned inf) const { return false; }
+
+ // operand access
+ size_t nops() const { return 0; }
+ ex op(size_t i) const { return inherited::op(i); }
+ ex operator[](const ex & index) const { return inherited::operator[](index); }
+ ex operator[](size_t i) const { return inherited::operator[](i); }
+ ex & let_op(size_t i) { return inherited::let_op(i); }
+ ex & operator[](const ex & index) { return inherited::operator[](index); }
+ ex & operator[](size_t i) { return inherited::operator[](i); }
+
+ // pattern matching
+ bool has(const ex & other, unsigned options = 0) const { return inherited::has(other, options); }
+ bool match(const ex & pattern, exmap& repl_lst) const { return inherited::match(pattern, repl_lst); }
+protected:
+ bool match_same_type(const basic & other) const { return true; }
+public:
+
+ // substitutions
+ ex subs(const exmap & m, unsigned options = 0) const { return inherited::subs(m, options); }
+
+ // function mapping
+ ex map(map_function & f) const { return inherited::map(f); }
+
+ // degree/coeff
+ int degree(const ex & s) const { return inherited::degree(s); }
+ int ldegree(const ex & s) const { return inherited::ldegree(s); }
+ ex coeff(const ex & s, int n = 1) const { return inherited::coeff(s, n); }
+
+ // expand/collect
+ ex expand(unsigned options = 0) const { return inherited::expand(options); }
+ ex collect(const ex & s, bool distributed = false) const { return inherited::collect(s, distributed); }
+
+ // differentiation and series expansion