I just read that document (
http://www.littleb.org/tutorial-biochem-
quickstart.html). One aspect that I found confusing is that it is not
obvious which identifiers are keywords, and which are variable names.
(I know this is not quite the right terminology for LISP, but I hope
you'll understand). For example, you write:
{[ion] @ :inner @ membrane ->> [ion] @ :outer}
In this case, ":inner" is clearly a keyword, but what about
"membrane"? Does this apply to all membranes? Or is this a specific
instance of a membrane-compartment called "membrane"? And what is
"[ion]"? Is this a randomly-chosen name for a species called "ion",
or is this a language keyword? In most cases, I (think) I was able
to figure out the answers, but it makes the examples confusing to a
newbie.
One suggestion I have that I think would help is to use different
fonts or colors to discriminate between keywords and variable names.
Anyway, I digress. Back to the specific issue...
That is very clear, and very useful. Thank you.
So... that means
(1) that any mass transfer between compartments must explicitly
involve a membrane.
(2) that, when I write a rate-function describing transport across a
membrane, the rule applies to all membranes?
If that is correct, (1) makes the model description somewhat more
verbose but seems reasonable. But (2) seems very restrictive
indeed.
Little b is allowing me to make a specific connection, m, between
compartments c1 and c2. But I cannot set rate information that is
specific to m: I can only set generic rate information that applies to
all connections between all compartments.
In some ways, I can see that this might force the user to be very
explicit about transport mechanisms. For example, the transport rate
across a membrane may be determined principally by the density of a
transporter protein. In this case, I could set different rates for
different membranes by describing the differing concentration of the
transporter. Ditto for trans-membrane channels. But how do I handle
passive diffusion through different membrane types? Membrane
composition/structure is not identical for all membrane types, and
their permeability varies significantly. It seems anomalously
restrictive to prevent the user from specifying properties that are
specific to a particular instance.
And what if, when I define a "membrane" separating two compartments, I
intend to describe not a cell membrane (or nuclear membrane etc.) but
as an abstraction of an endothelium? How would I describe
paracellular transport (which will vary dramatically according to
whether endothelium is in brain, kidney, etc.)?
It seems to me that either I misunderstood completely (very probable),
or this is a significant and seemingly unnecessary restriction on what
sorts of systems can be described in little b.
Much of the power of little b is in its ability to write rules that
apply broadly (like {X @ membrane.inner <-> X @ membrane.outer}), but
specifics are necessary too. Why can't I write {X @ c1 <-> X @ c2} or
{X @ m.inner <-> X @ m.outer}? Or perhaps even being able to write
rules that apply to all membranes with a particular label/tag (e.g.
"blood_brain_barrier", "glomerular" etc., or "cell", "nuclear" etc.)
-- Dominick