This repository contains files for the manuscript "The generic geometry of steady state varieties"by Elisenda Feliu, Oskar Henriksson, and Beatriz Pascual-Escudero.
The repository contains the following files:
- A Julia file
functions.jl
that contains functions for testing whether a network admits positive nondegenerate steady states when modeled with (generalized) mass action kinetics. - Two notebooks with examples:
IDH.ipynb
for the isocitrate dehydrogenase network in Example 4.1 of the paper.167.ipynb
for the networkBIOMD0000000167
from ODEbase discussed in Example 4.10 of the paper.
- A directory
results
that contains the following files:investigated_models.csv
with all networks in ODEbase (as of November 2, 2023) with at least one reaction.nondegenerate_networks.csv
with all networks frominvestigated_models.csv
that admit a positive nondegenerate steady state.degenerate_networks.csv
with all networks frominvestigated_models.csv
that have a positive steady states, but all of them are degenerate.generic_local_acr.csv
with all networks frominvestigated_models.csv
that satisfy the following criteria:- admits nondegenerate positive steady states
- is not of full rank (after removing nonparticipating species)
- has generic local ACR in at least one speceis.
The Julia code is based on Catalyst v14.4.1 and Oscar v1.1.1. For exact dependencies, see the file Manifest.toml
.
We begin by loading the functions:
include("functions.jl");
Consider the following isocitrate dehydrogenase that appears in Shinar–Feinberg's work on absolute concentration robustness, entered in catalyst format.
rn = @reaction_network begin
k1, X1 + X2 --> X3
k2, X3 --> X1 + X2
k3, X3 --> X1 + X4
k4, X3 + X4 --> X5
k5, X5 --> X3 + X4
k6, X5 --> X2 + X3
end;
The following command returns true
, which means that the network admits positive steady states:
julia> is_consistent(rn)
true
The following command returns true
, which means that there is a nondegenerate steady state with respect to its stoichiometric compatibility classes:
julia> has_nondegenerate_steady_state(rn, use_conservation_laws=true)
true
We check for generic local ACR with respect to the first and fourth species:
julia> generic_local_acr(rn, 1)
false
julia> generic_local_acr(rn, 4)
true
For the fourth species, we get the following polynomial as a witness for ACR:
julia> local_acr_polynomial(rn, 4)
k[4]*k[6]*x[4] - k[3]*k[5] - k[3]*k[6]
We could also do these checks on the level of the matrices that describe the associated augmented vertical system:
N = matrix(QQ, netstoichmat(rn))
B = matrix(ZZ, substoichmat(rn))
L = martix(QQ, conservationlaws(rn))
has_nondegenerate_zero(N, B, L)
generic_local_acr(N, B, 1)
generic_local_acr(N, B, 4)
local_acr_polynomial(N, B, 4)