Count-conserving bimolecular CRNs and their mass-action jump chain (CRN-1) #
A chemical reaction network (CRN) on a finite set S of species is a finite set of reactions.
We consider the count-conserving bimolecular ones, A + B → C + D: two reactant molecules are
replaced by two product molecules. The total number n of molecules is then conserved, and the
state space is the finite set Counts S n of count vectors.
Under stochastic mass-action kinetics with a common rate constant k, reaction r fires at
rate aᵣ(x) = k · ∏ₐ C(xₐ, νₐ), where ν counts the reactants of each species: k·#A·#B for
A + B with A ≠ B and k·C(#A, 2) for A + A, that is k times the number of unordered
pairs of molecules that can react (Gillespie's combinatorial form, as in Doty, SODA 2014, §2).
The continuous-time Markov chain on counts (Anderson–Kurtz 2011) leaves x at rate
a₀(x) = ∑ᵣ aᵣ(x); its jump chain fires r with probability aᵣ(x) / a₀(x). A terminal
state (a₀(x) = 0) is made absorbing.
A count-conserving bimolecular reaction A + B → C + D (roadmap CRN-1): the unordered pair
of reactant species s(A, B) is replaced by the unordered pair of product species s(C, D).
Equal species (A = B or C = D) are allowed.
Instances For
Equations
Instances For
A count-conserving bimolecular CRN (roadmap CRN-1): a nonempty finite set of reactions, none
of which leaves the counts unchanged. All reactions share one rate constant, which is a
parameter of the kinetics (Network.jumpKernel).
The reactions.
There is at least one reaction.
No reaction is a no-op.
Instances For
Count vectors of n molecules form a finite type, enumerated by Finset.piAntidiag.
Equations
Number of reactant molecules of species a (0, 1 or 2).
Equations
- r.consumed a = Multiset.count a r.reactants.toMultiset
Instances For
Number of product molecules of species a (0, 1 or 2).
Equations
- r.produced a = Multiset.count a r.products.toMultiset
Instances For
A reaction consumes two molecules.
A reaction produces two molecules.
Stochastic mass-action propensity of r at counts x with rate constant k, in
Gillespie's combinatorial form k · ∏ₐ C(xₐ, νₐ), ν the reactant multiplicities
(propensity_of_ne, propensity_of_eq). It vanishes iff r lacks reactant molecules.
Equations
- Crn.Reaction.propensity k r x = k * ∏ a : S, ↑((↑x a).choose (r.consumed a))
Instances For
Multiplicity of the species a in the unordered pair s(A, B).
A reaction with nonzero propensity has all its reactant molecules.
Propensities are nonnegative for a nonnegative rate constant.
The counts after one firing of r: xₐ - νₐ + ν'ₐ with ν, ν' the reactant and product
multiplicities. If r lacks reactant molecules, x is returned unchanged (such a firing has
probability zero in every chain below).
Equations
Instances For
Total propensity a₀(x) = ∑ᵣ aᵣ(x), the rate at which the counts leave x.
Equations
- N.totalPropensity k x = ∑ r ∈ N.reactions, Crn.Reaction.propensity k r x
Instances For
The reaction fired by the jump chain from x: r with probability aᵣ(x) / a₀(x).
Equations
- N.nextReaction hk x h = Crn.normalize (fun (r : ↥N.reactions) => Crn.Reaction.propensity k (↑r) x) ⋯ ⋯
Instances For
The jump chain of stochastic mass-action kinetics with common rate constant k > 0
(roadmap CRN-1): from x, fire reaction r with probability aᵣ(x) / a₀(x); a terminal state
(a₀(x) = 0) is absorbing.
Equations
- N.jumpKernel k hk n x = if h : N.totalPropensity k x = 0 then Dynamics.Distribution.point x else (N.nextReaction hk x h).map fun (r : ↥N.reactions) => x.react ↑r
Instances For
The jump chain's expectation times the total propensity, valid also at terminal states:
a₀(x)·E[f] = ∑ᵣ aᵣ(x)·f(x.react r).
The jump chain really jumps: from a non-terminal state it never stays put (every reaction of the network changes the counts).