In SBML Level 3 as well as Level 2, rules are separated into three
subclasses for the benefit of model analysis software.  The three
subclasses are based on the following three different possible
functional forms (where x is a variable, f is some arbitrary function
returning a numerical result, V is a vector of variables that does not
include x, and W is a vector of variables that may include x):

<pre>
Algebraic:   left-hand side is zero                    0 = f(W)
Assignment:  left-hand side is a scalar                x = f(V)
Rate:        left-hand side is a rate-of-change    dx/dt = f(W)
</pre>

In their general form given above, there is little to distinguish
between assignment and algebraic rules.  They are treated as separate
cases for the following reasons:

* Assignment rules can simply be evaluated to calculate intermediate
  values for use in numerical methods. They are statements of equality
  that hold at all times. (For assignments that are only performed
  once, see InitialAssignment.)

* SBML needs to place restrictions on assignment rules, for example
  the restriction that assignment rules cannot contain algebraic
  loops.

* Some simulators do not contain numerical solvers capable of solving
  unconstrained algebraic equations, and providing more direct forms
  such as assignment rules may enable those simulators to process
  models they could not process if the same assignments were put in
  the form of general algebraic equations;

* Those simulators that can solve these algebraic equations make a
  distinction between the different categories listed above; and

* Some specialized numerical analyses of models may only be applicable
  to models that do not contain algebraic rules.

The approach taken to covering these cases in SBML is to define an
abstract Rule structure containing a subelement, 'math', to hold the
right-hand side expression, then to derive subtypes of Rule that add
attributes to distinguish the cases of algebraic, assignment and rate
rules. The 'math' subelement must contain a MathML expression defining
the mathematical formula of the rule. This MathML formula must return
a numerical value. The formula can be an arbitrary expression
referencing the variables and other entities in an SBML model.

Each of the three subclasses of Rule (AssignmentRule, AlgebraicRule,
RateRule) inherit the the 'math' subelement and other fields from
SBase. The AssignmentRule and RateRule classes add an additional
attribute, 'variable'. See the definitions of AssignmentRule,
AlgebraicRule and RateRule for details about the structure and
interpretation of each one.
