I'm on travel (and short on time), but I wanted to chime in. Warning:
this is a bit long and probably less clear than it could or should be.
* The comma and the plus/dot (Bill)
I favor the comma over the plus/dot, because it separates "mechanism"
from "kinetics". Let me explain.
I propose a distinction between a local mechanism of action and a
mechanism for modulating the effective reaction volume. By "local
mechanism" of action I mean processes that occur within a small region
- small compared to the size of the context (typically proteins or
protein complexes) necessary for providing the resources (i.e.
specific atoms) for an interaction. By a "mechanism for modulating
the effective reaction volume" I mean something like a scaffolding
architecture whereby proteins A and B are linked together (directly or
indirectly) in a way that either enhances the frequency of encounters
between A and B (thus diminishing the effective volume of interaction)
or impeding encounters between A and B by rigidly positioning them
away from each other (thus increasing the effective volume of
interaction). In an extreme version of the former case we have only
intra-molecular interactions between A and B; in an extreme version of
the latter case we have only inter-molecular interactions. When framed
by the above distinction, the bimolecular and unimolecular cases
warrant distinct rate constants because of differences in effective
reaction volume, not because of differences in the local interaction
mechanism. Kappa makes that explicit by having a single agent
composition operator - the comma - and two rate constants (either of
which might be zero) for rules with two components on the left hand
side.
This point of view takes the stance that the dependency of the rate
constant on volume should be separated from those aspects of the rate
constant that are intrinsic to a mechanism of action. The latter
should be expressed in the rule proper, while the former should reside
in the rule's rate annotation (which is an execution directive to the
simulation engine). The plus and the dot blur this distinction by
providing notation that appears to be "mechanistic" (by showing up in
the rule expression), when it should be "kinetic" annotation. This is
simply a point of view for rationalizing the comma and the absence of
plus and dot in Kappa. This is not an unassailable truth.
There might be cases in which connectivity should be considered as
part of the *mechanism*. If it is an essential aspect of some docking
mechanism for A and B to be in the same complex prior to interaction,
then the modeler should make that aspect explicit; for example, by
stating that A and B are both docked to the same scaffold C through
such and such sites, in which case we don't need a dot because we
should represent the situation with an explicit path through the site
graph. If different connectivities warrant different rate constants,
then we should make that explicit too, even if that means writing many
more rules. Kappa's primary purpose is to represent knowledge, not to
enable "lazy" rule writing. If writing many rules by hand is tedious,
one can write them programmatically. Incidentally, this is why we view
Kappa like "assembler code" and why we advocate the development of a
variety of meta-languages or macro-constructs, which are then compiled
into Kappa. Seen from this angle, the plus and the dot of BNGL are
useful macros in certain applications.
* weirdness of A,B -> C+D
A,B means A.B or (inclusively) A+B. If upon application A,B embeds
into an instance that can be described as A.B, then some
intramolecular bond must be broken that is not broken if A,B were to
embed into an instance of A+B. Thus, in addition to whatever other
modifications the rule imparts to A,B, there is a true mechanistic
difference between the two instances that the notation A,B -> C+D
brilliantly succeeds in obscuring. I think that justifies calling such
an expression "weird".
Bill, the comma is not a silly syntactical difference between Kappa
and BNGL. It reveals a difference in view point. Writing in Kappa
requires the user to be more deliberate and thus aware of the
mechanistic knowledge s/he is expressing with a rule. BioNetGen /
BNGL appears to be designed for easy general purpose modeling. There
is nothing wrong with either objective.
The + notation in chemistry is rooted in a representation that sees
reactions as central. There is no necessity to adopt it within a
system that sees rules as central.
As far as computational costs of the +/. and the two-constants
notation goes, both are potentially costly - but in different regimes.
(This will be analyzed elsewhere.)
* Jean's notation k2 (k1)
I'm fine with the proposal. I would prefer the following notational
equivalences
A,B -> C @ k2 or
A,B -> C @ k2 (0) for only bimolecular instances,
and
A,B -> C @ (k1) or
A,B -> C @ 0 (k1) for only unimolecular instances.
This is also "backward compatible" with past models in which rules of
arity 2 and a single rate constant were meant to be bimolecular - in
part because users made sure that such rules would only trigger in a
bimolecular way.
* general
Some programmatic assistance in determining whether an "A,B ->
something" rule has ambiguous molecularity (i.e. induces both uni- and
bi-molecular reactions in a given mixture) would be highly useful. Not
the least because with a few more rules, a user might be able to
resolve such ambiguity, thereby allowing KaSim to avoid the
potentially costly two-constants mode. Jerome's old static analyzer
(complx) appears to already compute all the necessary information for
such a service, but we never deployed it. Perhaps Jerome's new static
analyzer will surprise us... :) when Jerome gets to it... :)
I hope this helps.
w