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.jlthat contains functions for testing whether a network admits positive nondegenerate steady states when modeled with (generalized) mass action kinetics. - Two notebooks with examples:
IDH.ipynbfor the isocitrate dehydrogenase network in Example 4.1 of the paper.167.ipynbfor the networkBIOMD0000000167from ODEbase discussed in Example 4.10 of the paper.
- A directory
resultsthat contains the following files:investigated_models.csvwith all consistent networks in ODEbase (as of November 2, 2023) with at least one reaction with integer stoichiometric coefficients. The networks that do not satisfy this are listed inexcluded_networks.csv.nondegenerate_networks.csvwith all networks frominvestigated_models.csvthat admit a positive nondegenerate steady state.degenerate_networks.csvwith all networks frominvestigated_models.csvthat have a positive steady states, but all of them are degenerate.generic_local_acr.csvwith all networks frominvestigated_models.csvthat 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)
trueThe 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)
trueWe 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)
trueFor 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 = matrix(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)