Skip to main content

Growth Rate Ontology

Biological Measurements
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# Growth Rate Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/biological-measurements/growth-rate-ontology.html

FLOW GrowthRateOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Biological Measurements
    -> Growth Rate Ontology

  PURPOSE:
    Represent biological growth rate as the change of a defined biological quantity with respect to time, including absolute growth rate, relative and specific growth rate, exponential and logistic growth, doubling time, generation time, biomass and population growth, organismal growth, interval and instantaneous rates, environmental dependence, measurement methods, normalisation, uncertainty, and distinctions between growth amount, growth rate, specific growth rate and percentage change.

  ENTITY GrowthRate {
    TYPE: BiologicalRateQuantity
    SYMBOL: G
    GENERAL_DIMENSION:
      dimension_of_growth_quantity * T^-1

    DEFINITION:
      growth_rate :=
        change_in_defined_biological_quantity_per_unit_time

    DIFFERENTIAL_FORM:
      G = dX/dt

    FINITE_INTERVAL_FORM:
      G_avg =
        (X_2-X_1)/(t_2-t_1)
      WHEN t_2 != t_1

    PROPERTIES:
      depends_on_growth_quantity
      depends_on_time_basis
      may_be_instantaneous_or_average
      may_be_absolute_or_normalised
      may_depend_on_environment
      may_have_uncertainty
  }

  ENTITY SpecificGrowthRate {
    TYPE: RelativeBiologicalRateQuantity
    SYMBOL: mu
    DIMENSION: T^-1
    SI_UNIT: per_second
    COMMON_UNITS:
      per_hour
      per_day

    DEFINITION:
      mu = (1/X)*(dX/dt)
      WHEN X != 0
  }

  ENTITY RelativeGrowthRate {
    TYPE: RelativeBiologicalRateQuantity
    SYMBOL: RGR
    DIMENSION: T^-1

    FINITE_LOG_FORM:
      RGR =
        (ln(X_2)-ln(X_1))/(t_2-t_1)
      WHEN X_1 > 0 AND X_2 > 0
  }

  ENTITY DoublingTime {
    TYPE: TimeQuantity
    SYMBOL: t_d
    SI_UNIT: second

    EXPONENTIAL_RELATION:
      t_d = ln(2)/mu
      WHEN mu > 0
  }

  ENTITY GenerationTime {
    TYPE: TimeQuantity
    SYMBOL: g

    RULE:
      generation_time MAY correspond_to_doubling_time
      only_under_defined_population_or_cell_growth_context
  }

  UNIT_SYSTEM {
    absolute_growth_rate:
      possible_units:
        kg/s
        g/day
        cells/hour
        individuals/year
        metre/day
        square_metre/day
        cubic_metre/day

    specific_growth_rate:
      s^-1
      h^-1
      day^-1

    doubling_time:
      second
      minute
      hour
      day

    RULE:
      unit MUST preserve_numerator_growth_quantity_and_time_basis
  }

  GROWTH_QUANTITY_MODEL {
    possible_X:
      population_size
      cell_number
      biomass
      dry_mass
      wet_mass
      body_mass
      length
      area
      volume
      optical_density_as_proxy
      molecular_amount

    RULE:
      growth_rate_without_defined_X_is_semantically_incomplete
  }

  ABSOLUTE_GROWTH_MODEL {
    instantaneous:
      G = dX/dt

    interval_average:
      G_avg =
        delta_X/delta_t

    total_growth:
      delta_X = X_final-X_initial

    RULE:
      total_growth != growth_rate
  }

  SPECIFIC_GROWTH_MODEL {
    definition:
      mu = (1/X)*dX/dt

    rearranged:
      dX/dt = mu*X

    constant_mu_solution:
      X(t) = X_0*exp(mu*t)

    RULE:
      specific_growth_rate_is_normalised_by_current_quantity
      and_is_not_same_as_absolute_growth_rate
  }

  EXPONENTIAL_GROWTH_MODEL {
    differential:
      dX/dt = mu*X

    solution:
      X_t =
        X_0*exp(mu*(t-t_0))

    inference:
      mu =
        ln(X_t/X_0)/(t-t_0)
      WHEN X_t > 0 AND X_0 > 0 AND t != t_0

    doubling_time:
      t_d = ln(2)/mu
      WHEN mu > 0

    RULE:
      exponential_model_requires_approximately_constant_specific_growth_rate
  }

  LOGISTIC_GROWTH_MODEL {
    differential:
      dN/dt =
        r*N*(1-N/K)

    PARAMETERS:
      r = intrinsic_growth_parameter
      K = carrying_capacity

    per_capita_rate:
      (1/N)*dN/dt =
        r*(1-N/K)
      WHEN N != 0

    RULE:
      observed_specific_growth_rate_declines_with_N_under_logistic_model
  }

  DISCRETE_GROWTH_MODEL {
    finite_multiplier:
      lambda =
        X_(t+1)/X_t
      WHEN X_t != 0

    discrete_growth:
      X_(t+1) =
        lambda*X_t

    relation_to_continuous_rate:
      r = ln(lambda)/delta_t
      under_consistent_interval

    RULE:
      lambda_and_continuous_growth_rate_r
      MUST_NOT be treated_as_identical
  }

  PERCENT_GROWTH_MODEL {
    percent_change:
      percent_growth =
        100*(X_2-X_1)/X_1
      WHEN X_1 != 0

    RULE:
      percent_growth_over_interval != rate_per_time
      unless_time_interval_is_explicitly_incorporated
  }

  CELL_GROWTH_MODEL {
    possible_measurands:
      cell_number
      biomass
      cell_volume
      total_protein
      optical_density_proxy

    phases:
      lag
      exponential
      stationary
      decline

    RULE:
      growth_phase MUST be considered_when_interpreting_rate
  }

  MICROBIAL_GROWTH_MODEL {
    exponential_cell_count:
      N(t) = N_0*exp(mu*t)

    generation_number:
      generations =
        log2(N_t/N_0)
      WHEN counts_positive

    generation_time:
      g =
        delta_t/generations
      WHEN generations != 0

    RULE:
      viable_count_total_count_and_optical_density_may_produce_different_growth_estimates
  }

  BIOMASS_GROWTH_MODEL {
    biomass:
      X

    volumetric_biomass_concentration:
      C_X = X/V

    biomass_productivity:
      P_X =
        delta_X/(V*delta_t)
      under_constant_or_defined_volume_context

    RULE:
      biomass_growth_rate != biomass_concentration
  }

  ORGANISMAL_GROWTH_MODEL {
    possible_measures:
      mass
      length
      height
      area
      volume

    absolute_growth_rate:
      AGR =
        (X_2-X_1)/(t_2-t_1)

    relative_growth_rate:
      RGR =
        (ln(X_2)-ln(X_1))/(t_2-t_1)

    RULE:
      mass_length_area_and_volume_growth_rates
      are_different_measurands
  }

  PLANT_GROWTH_MODEL {
    common_quantities:
      biomass
      dry_mass
      leaf_area
      height
      root_length

    relative_growth_rate:
      RGR =
        (ln(W_2)-ln(W_1))/(t_2-t_1)

    RULE:
      fresh_mass_and_dry_mass_growth MUST be distinguished
  }

  POPULATION_GROWTH_MODEL {
    population_balance:
      delta_N =
        births - deaths + immigration - emigration

    net_rate:
      dN/dt

    per_capita_rate:
      r =
        (1/N)*dN/dt
      under_continuous_context

    RULE:
      population_growth_combines_demographic_processes
      and_is_not_equivalent_to_birth_rate
  }

  ENVIRONMENTAL_DEPENDENCE_MODEL {
    possible_factors:
      temperature
      nutrients
      oxygen
      pH
      salinity
      light
      moisture
      density
      toxins
      competition

    general:
      mu = f(environment, state, time)

    RULE:
      growth_rate SHOULD preserve_environmental_conditions_when_material
  }

  TEMPERATURE_RESPONSE_MODEL {
    possible_models:
      Arrhenius_like
      Q10
      cardinal_temperature
      empirical_response_curve

    Q10_relation:
      rate_2/rate_1 =
        Q10^((T_2-T_1)/10)
      under_declared_temperature_scale_interval_and_applicable_range

    RULE:
      temperature_response_model_validity_range MUST be preserved
  }

  SUBSTRATE_LIMITATION_MODEL {
    Monod_model:
      mu =
        mu_max*S/(K_s+S)

    PARAMETERS:
      S = limiting_substrate_concentration
      K_s = half_saturation_constant

    CONDITIONS:
      applicable_microbial_growth_context

    RULE:
      Monod_parameters_are_model_specific
  }

  GROWTH_YIELD_MODEL {
    biomass_yield_on_substrate:
      Y_XS =
        delta_X/(-delta_S)
      under_declared_mass_or_amount_basis

    RULE:
      growth_yield != growth_rate
  }

  MEASUREMENT_PROXY_MODEL {
    possible_proxies:
      optical_density
      fluorescence
      metabolic_signal
      image_area
      impedance

    calibrated_mapping:
      X = f(proxy_signal)

    RULE:
      proxy_signal MUST_NOT be treated_as_growth_quantity_without_calibration_or_declared_relative_semantics
  }

  SAMPLING_MODEL {
    repeated_measurements:
      X(t_1), X(t_2), ..., X(t_n)

    requirements:
      comparable_method
      consistent_quantity_definition
      known_sampling_times
      sample_representativeness

    RULE:
      rate_estimation_requires_temporally_ordered_comparable_measurements
  }

  RELATIONSHIPS {
    GrowthRate -> RATE_OF_CHANGE_OF -> BiologicalQuantity
    SpecificGrowthRate -> NORMALISES -> GrowthRateByCurrentQuantity
    RelativeGrowthRate -> RELATES -> LogarithmicChangeAndTime
    SpecificGrowthRate -> DETERMINES -> DoublingTime
    GrowthRate -> MAY_DEPEND_ON -> Environment
    PopulationGrowth -> RESULTS_FROM -> BirthDeathImmigrationEmigration
    BiomassGrowth -> RELATES_TO -> BiomassProductivity
    GrowthYield -> RELATES -> BiomassFormationAndSubstrateConsumption
    MeasurementProxy -> MAPS_TO -> GrowthQuantityThroughCalibration
    GrowthModel -> QUALIFIES -> GrowthRateInference
  }

  SEMANTIC_EQUIVALENCE {
    "specific growth rate" ~= relative_instantaneous_growth_rate_under_defined_context
    "doubling time" ~= time_for_quantity_to_double_under_defined_growth_model

    growth != growth_rate
    growth_rate != specific_growth_rate
    specific_growth_rate != doubling_time
    growth_rate != percent_change
    growth_rate != growth_yield
    biomass_growth_rate != biomass_concentration
    optical_density != biomass_without_calibration
    finite_growth_factor_lambda != continuous_rate_r
  }

  CONSTRAINTS {
    growth_quantity_must_be_defined = true
    time_basis_must_be_defined = true
    interval_rate_requires_nonzero_time_interval = true
    specific_growth_rate_requires_nonzero_growth_quantity = true
    logarithmic_rate_requires_positive_quantities = true
    doubling_time_relation_requires_positive_constant_specific_growth_rate = true
    growth_and_growth_rate_are_not_semantically_equivalent = true
    absolute_and_specific_growth_rates_are_not_semantically_equivalent = true
    model_identity_and_assumptions_must_be_preserved = true
    proxy_measurements_require_calibration_or_declared_relative_basis = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      GrowthRate
      SpecificGrowthRate
      RelativeGrowthRate
      DoublingTime

    COMMON_METHODS:
      direct_counting
      biomass_measurement
      gravimetry
      optical_density
      microscopy
      imaging
      flow_cytometry
      population_census
      repeated_length_or_mass_measurement

    RECORD:
      biological_entity
      growth_quantity
      initial_value
      final_value
      measurement_times
      numerical_growth_rate
      unit
      absolute_or_specific
      instantaneous_or_average
      growth_model
      growth_phase
      environmental_conditions
      measurement_method
      proxy_calibration_when_used
      replicate_structure
      uncertainty
      provenance

    UNCERTAINTY:
      measured_or_inferred_growth_rate = best_estimate +/- uncertainty
  }

  UNCERTAINTY_MODEL {
    sources:
      initial_measurement
      final_measurement
      timing
      sampling
      biological_variability
      proxy_calibration
      model_fit
      growth_phase_selection
      environmental_variability
      replicate_variability
      instrument_resolution

    PROPAGATION:
      derived_growth_rate_uncertainty
      <- quantity_time_sampling_calibration_and_model_uncertainties
  }

  REASONING_RULES {
    IF initial_and_final_values_known AND time_interval != 0
      THEN average_absolute_growth_rate =
        (final_value-initial_value)/time_interval

    IF initial_and_final_values_positive AND time_interval != 0
      THEN average_specific_growth_rate =
        ln(final_value/initial_value)/time_interval
      UNDER exponential_growth_assumption

    IF specific_growth_rate > 0
      THEN doubling_time =
        ln(2)/specific_growth_rate

    IF doubling_time > 0
      THEN exponential_specific_growth_rate =
        ln(2)/doubling_time

    IF constant_specific_growth_rate_known
      THEN future_quantity =
        initial_quantity*exp(specific_growth_rate*time)

    IF finite_growth_factor_known AND interval > 0
      THEN continuous_rate =
        ln(finite_growth_factor)/interval

    IF initial_and_final_population_known
      THEN population_change =
        final_population-initial_population

    IF births_deaths_immigration_emigration_known
      THEN population_change =
        births-deaths+immigration-emigration

    IF calibrated_proxy_time_series_known
      THEN transform_proxy_to_growth_quantity
      BEFORE rate_inference

    IF growth_rate_and_environmental_model_known
      THEN infer_condition_dependent_rate
      WITH model_validity_constraints
  }

  VALIDATION {
    CHECK biological_entity
    CHECK growth_quantity
    CHECK unit_consistency
    CHECK time_units
    CHECK nonzero_time_interval
    CHECK positive_values_for_logarithmic_rate
    CHECK absolute_vs_specific_rate
    CHECK instantaneous_vs_average_rate
    CHECK exponential_vs_logistic_or_other_model
    CHECK growth_phase
    CHECK population_demographic_context
    CHECK proxy_calibration
    CHECK environmental_conditions
    CHECK replicate_structure
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    growth_definition_confidence: 1.00
    absolute_rate_relationship_confidence: 1.00
    specific_rate_relationship_confidence: 1.00
    doubling_time_relationship_confidence: 1.00
    model_based_growth_confidence: 0.97
    proxy_measurement_confidence: 0.96
    measurement_context_confidence: 0.98

    RULE:
      confidence decreases when growth quantity, time interval,
      growth phase, model assumptions, proxy calibration,
      environment, replicate structure or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_timepoint:
      identify_biological_entity
      identify_growth_quantity
      validate_unit
      attach_measurement_time
      preserve_raw_measurement
      compare_with_previous_compatible_timepoint
      compute_absolute_rate
      compute_specific_rate_when_valid
      update_growth_curve
      attach_uncertainty

    ON growth_model_revision:
      preserve_raw_time_series
      preserve_previous_model
      fit_or_apply_new_growth_model
      recompute_parameters
      update_uncertainty
      update_confidence

    ON proxy_calibration_revision:
      preserve_raw_proxy_signal
      update_calibration
      recompute_growth_quantity
      recompute_growth_rate
      update_uncertainty

    ON environmental_change:
      attach_new_environmental_conditions
      preserve_previous_conditions
      reevaluate_rate_comparability
      apply_environment_response_model_when_valid

    ON growth_phase_change:
      record_phase_transition
      update_applicable_growth_model
      avoid_extrapolating_exponential_rate_outside_valid_phase

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: GrowthRate
    canonical_specific_entity: SpecificGrowthRate

    interpretation_order:
      identify_biological_entity
      identify_growth_quantity
      identify_initial_and_final_values_or_time_series
      identify_time_basis
      identify_absolute_specific_or_relative_rate
      identify_instantaneous_or_average_rate
      identify_growth_model
      identify_growth_phase
      identify_environmental_conditions
      identify_direct_or_proxy_measurement
      identify_proxy_calibration
      identify_replicate_structure
      identify_uncertainty
      validate_units_and_model
      infer_growth_relationships

    ambiguity_controls:
      distinguish_growth_from_growth_rate
      distinguish_absolute_from_specific_growth_rate
      distinguish_specific_growth_rate_from_doubling_time
      distinguish_growth_rate_from_percent_change
      distinguish_growth_rate_from_growth_yield
      distinguish_biomass_growth_from_biomass_concentration
      distinguish_proxy_signal_from_calibrated_growth_quantity
      distinguish_discrete_growth_factor_from_continuous_growth_rate
      preserve_entity_quantity_time_model_phase_environment_and_calibration_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_biological_growth_rate_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Biological Measurements
      -> Growth Rate Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      growth_quantity_model
      absolute_growth_model
      specific_growth_model
      exponential_growth_model
      logistic_growth_model
      discrete_growth_model
      percent_growth_model
      cell_growth_model
      microbial_growth_model
      biomass_growth_model
      organismal_growth_model
      plant_growth_model
      population_growth_model
      environmental_dependence_model
      temperature_response_model
      substrate_limitation_model
      growth_yield_model
      measurement_proxy_model
      sampling_model
      relationships
      constraints
      measurement_model
      uncertainty_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      growth_quantity_definition_changes
      absolute_or_specific_rate_model_changes
      growth_model_changes
      growth_phase_model_changes
      environmental_response_model_changes
      proxy_calibration_model_changes
      sampling_model_changes
      measurement_model_changes
      constraint_model_changes
      reasoning_rule_changes
      unit_model_changes
  }

}

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ