Skip to main content

Stoichiometric Quantity Ontology

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

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/chemical-measurements/stoichiometric-quantity-ontology.html

FLOW StoichiometricQuantityOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Chemical Measurements
    -> Stoichiometric Quantity Ontology

  PURPOSE:
    Represent stoichiometric quantities used to describe quantitative relationships among reactants, products and reaction progress, including stoichiometric coefficients, amount of substance, reaction extent, stoichiometric ratios, limiting and excess reactants, theoretical yield, actual yield, conversion, selectivity, equivalent quantities, concentration-volume relations, mass-mole transformations, uncertainty, and strict preservation of balanced chemical reaction semantics.

  ENTITY StoichiometricCoefficient {
    TYPE: SignedDimensionlessReactionQuantity
    SYMBOL: nu_i
    DIMENSION: dimensionless

    SIGN_CONVENTION:
      reactant_nu_i < 0
      product_nu_i > 0

    PROPERTIES:
      species_specific
      reaction_specific
      dimensionless
      preserves_reaction_direction
  }

  ENTITY AmountOfSubstance {
    TYPE: SIBaseQuantity
    SYMBOL: n_i
    SI_UNIT: mole
    SI_SYMBOL: mol
  }

  ENTITY ExtentOfReaction {
    TYPE: DerivedReactionProgressQuantity
    SYMBOL: xi
    DIMENSION: N
    SI_UNIT: mole
    SI_SYMBOL: mol

    DIFFERENTIAL_RELATION:
      dn_i = nu_i*d_xi

    FINITE_RELATION:
      n_i = n_i_0 + nu_i*xi
      FOR single_reaction_with_constant_stoichiometry
  }

  ENTITY StoichiometricRatio {
    TYPE: DimensionlessReactionQuantity

    FORM:
      ratio_i_j =
        abs(nu_i)/abs(nu_j)

    INTERPRETATION:
      required_or_produced_amount_ratio
      under_balanced_reaction
  }

  ENTITY ReactionAmountChange {
    SYMBOL: delta_n_i
    SI_UNIT: mole

    RELATION:
      delta_n_i = nu_i*delta_xi
  }

  UNIT_SYSTEM {
    stoichiometric_coefficient:
      dimensionless

    stoichiometric_ratio:
      dimensionless

    extent_of_reaction:
      mole

    amount:
      mole

    mass:
      kilogram

    concentration:
      mol/m^3
      common: mol/L

    RULE:
      coefficients_and_ratios_are_dimensionless
      while_amount_and_extent_have_amount_of_substance_dimension
  }

  REACTION_REPRESENTATION_MODEL {
    GENERAL:
      sum(nu_i*A_i) = 0

    SIGNED_FORM:
      reactants_negative
      products_positive

    EXAMPLE_STRUCTURE:
      a*A + b*B -> c*C + d*D

    SIGNED_EQUIVALENT:
      -a*A - b*B + c*C + d*D = 0

    RULE:
      reaction_equation MUST be_balanced_for_elements_and_charge_when_applicable
  }

  BALANCE_MODEL {
    element_balance:
      sum(nu_i*element_count_i_k) = 0
      FOR every_conserved_element_k

    charge_balance:
      sum(nu_i*z_i) = 0
      FOR charge_conserving_reaction_representation

    RULE:
      unbalanced_reaction MUST NOT support_stoichiometric_quantity_inference
  }

  EXTENT_MODEL {
    differential:
      d_xi = dn_i/nu_i
      WHEN nu_i != 0

    finite:
      xi =
        (n_i - n_i_0)/nu_i
      WHEN nu_i != 0

    consistency:
      delta_n_i/nu_i =
        delta_n_j/nu_j =
        delta_xi

    RULE:
      all_species_changes_for_same_reaction_extent MUST be_stoichiometrically_consistent
  }

  STOICHIOMETRIC_RATIO_MODEL {
    required_amount_ratio:
      n_i_required/n_j_required =
        abs(nu_i)/abs(nu_j)

    product_reactant_relation:
      n_product_theoretical =
        n_reactant_consumed
        * abs(nu_product/nu_reactant)

    RULE:
      ratios MUST be derived_from_same_balanced_reaction
  }

  MASS_MOLE_MODEL {
    amount:
      n_i = m_i/M_i
      WHEN M_i != 0

    mass:
      m_i = n_i*M_i

    stoichiometric_mass_relation:
      m_j =
        (m_i/M_i)
        * abs(nu_j/nu_i)
        * M_j

    REQUIRE:
      chemical_identity
      molar_mass
      balanced_reaction
  }

  SOLUTION_STOICHIOMETRY_MODEL {
    amount_from_concentration:
      n_i = c_i*V_i

    stoichiometric_relation:
      c_i*V_i/abs(nu_i) =
        c_j*V_j/abs(nu_j)
      at_stoichiometric_equivalence
      under_amount_concentration_basis

    RULE:
      c_i*V_i = c_j*V_j
      ONLY for equal_stoichiometric_coefficients
  }

  LIMITING_REACTANT_MODEL {
    available_reaction_extent_from_reactant_i:
      xi_max_i =
        n_i_0/abs(nu_i)
      FOR reactant_i

    limiting_reactant:
      reactant_with_minimum_xi_max

    maximum_reaction_extent:
      xi_max =
        min_over_reactants(n_i_0/abs(nu_i))

    RULE:
      limiting_reactant MUST be determined_from_amounts_and_coefficients
      not_raw_masses_without_molar_conversion
  }

  EXCESS_REACTANT_MODEL {
    initial_amount:
      n_i_0

    consumed_at_extent:
      n_i_consumed =
        abs(nu_i)*xi

    remaining:
      n_i_final =
        n_i_0 - abs(nu_i)*xi

    percent_excess:
      percent_excess =
        100*(n_available - n_stoich_required)/n_stoich_required
      WHEN n_stoich_required != 0

    RULE:
      excess_requires_reference_to_stoichiometric_requirement
  }

  THEORETICAL_YIELD_MODEL {
    theoretical_product_amount:
      n_p_theoretical =
        nu_p*xi_max
      FOR product_nu_p > 0

    theoretical_product_mass:
      m_p_theoretical =
        n_p_theoretical*M_p

    RULE:
      theoretical_yield_assumes_stated_reaction_path_and_complete_consumption_to_limiting_extent
  }

  ACTUAL_YIELD_MODEL {
    percent_yield:
      yield_percent =
        100*actual_product_amount/theoretical_product_amount
      WHEN theoretical_product_amount != 0

    mass_basis:
      may_use_actual_mass/theoretical_mass
      when_same_product_and_purity_basis

    RULE:
      actual_and_theoretical_yield MUST use_compatible_product_and_purity_basis
  }

  CONVERSION_MODEL {
    reactant_conversion:
      X_A =
        (n_A0 - n_A)/n_A0
      WHEN n_A0 != 0

    range:
      0 <= X_A <= 1
      under_simple_nonnegative_consumption_context

    RULE:
      conversion_is_fraction_of_initial_reactant_consumed
      not_product_yield
  }

  SELECTIVITY_MODEL {
    product_selectivity:
      definition_depends_on_reaction_network_and_basis

    example_amount_basis:
      S_P =
        desired_product_formed /
        reactant_consumed_adjusted_for_stoichiometry

    REQUIRE:
      declared_selectivity_definition
      desired_product
      reference_reactant
      stoichiometric_basis

    RULE:
      selectivity_definition MUST be explicit
  }

  MULTIPLE_REACTION_MODEL {
    species_amount:
      n_i =
        n_i0 + sum_r(nu_i_r*xi_r)

    REQUIRE:
      reaction_index_r
      stoichiometric_matrix
      independent_or_defined_reaction_set

    RULE:
      single_extent_model MUST NOT replace_multi_reaction_model
      when_multiple_independent_reactions_are_material
  }

  STOICHIOMETRIC_MATRIX_MODEL {
    matrix:
      N_stoich = [nu_i_r]

    species_change_vector:
      delta_n = N_stoich * xi_vector

    conservation:
      conserved_quantity_vectors lie_in_left_null_space_of_stoichiometric_matrix

    RULE:
      species_order_and_reaction_order MUST be preserved
  }

  EQUIVALENT_QUANTITY_MODEL {
    equivalent_amount:
      depends_on_reaction_capacity_factor

    normality_like_concentration:
      equivalent_concentration =
        amount_concentration*equivalence_factor

    REQUIRE:
      defined_reaction
      acid_base_redox_or_other_equivalence_factor

    RULE:
      equivalent_quantity_is_reaction_context_dependent
      and_MUST_NOT be treated_as_intrinsic_species_quantity
  }

  PURITY_MODEL {
    pure_reactant_mass:
      m_pure = purity_fraction*m_sample

    available_amount:
      n_available =
        purity_fraction*m_sample/M
      WHEN M != 0

    RULE:
      limiting_reactant_and_yield_calculations SHOULD correct_for_purity_when_material
  }

  RELATIONSHIPS {
    StoichiometricCoefficient -> BELONGS_TO -> Reaction
    StoichiometricCoefficient -> RELATES -> Species
    ReactionExtent -> RELATES -> SpeciesAmountChanges
    StoichiometricRatio -> DERIVED_FROM -> StoichiometricCoefficients
    BalancedReaction -> ENABLES -> StoichiometricInference
    MolarMass -> MAPS -> MassToAmount
    AmountConcentration -> MAPS -> SolutionVolumeToAmount
    LimitingReactant -> DETERMINES -> MaximumReactionExtent
    MaximumReactionExtent -> DETERMINES -> TheoreticalYield
    ActualYield -> COMPARES_WITH -> TheoreticalYield
    Conversion -> DESCRIBES -> ReactantConsumption
    Selectivity -> DESCRIBES -> ProductDistribution
  }

  SEMANTIC_EQUIVALENCE {
    "stoichiometric coefficient" ~= reaction_coefficient
    "extent of reaction" ~= reaction_extent
    "stoichiometric ratio" ~= coefficient_based_amount_ratio

    stoichiometric_coefficient != amount_of_substance
    stoichiometric_ratio != concentration
    reaction_extent != reaction_rate
    limiting_reactant != lowest_mass_reactant
    conversion != yield
    selectivity != yield
    actual_yield != theoretical_yield
    equivalent_quantity != molar_quantity_without_reaction_context
  }

  CONSTRAINTS {
    reaction_must_be_balanced = true
    species_identity_must_be_defined = true
    coefficient_sign_convention_must_be_preserved = true
    stoichiometric_coefficients_are_dimensionless = true
    extent_of_reaction_has_amount_dimension = true
    limiting_reactant_requires_amount_basis = true
    theoretical_yield_requires_limiting_extent = true
    percent_yield_requires_compatible_actual_and_theoretical_basis = true
    multi_reaction_system_requires_reaction_indexing = true
    equivalent_quantities_require_reaction_context = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      species_amounts
      reaction_extent
      conversion
      yield
      selectivity

    INPUT_MEASUREMENTS:
      mass
      amount_concentration
      solution_volume
      gas_volume_with_state
      pressure
      temperature
      product_mass
      composition
      purity

    RECORD:
      reaction
      balanced_equation
      species
      stoichiometric_coefficients
      initial_amounts
      final_amounts
      masses
      molar_masses
      concentrations
      volumes
      temperature
      pressure
      purity
      reaction_extent
      limiting_reactant
      excess_reactants
      theoretical_yield
      actual_yield
      conversion
      selectivity_definition
      measurement_method
      uncertainty

    UNCERTAINTY:
      inferred_stoichiometric_quantity = best_estimate +/- uncertainty
  }

  UNCERTAINTY_MODEL {
    sources:
      mass_measurement
      molar_mass
      purity
      concentration
      volume
      temperature
      pressure
      composition
      product_recovery
      reaction_completion
      side_reactions
      analytical_calibration
      stoichiometric_model

    PROPAGATION:
      derived_stoichiometric_uncertainty
      <- measurement_composition_purity_and_reaction_model_uncertainties
  }

  REASONING_RULES {
    IF balanced_reaction_known
      THEN derive_stoichiometric_ratios_from_coefficients

    IF species_amount_change_known AND coefficient != 0
      THEN reaction_extent =
        species_amount_change/coefficient

    IF initial_species_amount_and_extent_known
      THEN final_amount =
        initial_amount + coefficient*extent

    IF reactant_amounts_and_coefficients_known
      THEN maximum_extent =
        minimum(n_i/abs(nu_i))
      over_reactants

    IF maximum_extent_known AND product_coefficient_known
      THEN theoretical_product_amount =
        product_coefficient*maximum_extent

    IF theoretical_product_amount_and_molar_mass_known
      THEN theoretical_product_mass =
        theoretical_product_amount*molar_mass

    IF actual_and_theoretical_product_amounts_known
      AND theoretical_amount != 0
      THEN percent_yield =
        100*actual_amount/theoretical_amount

    IF initial_and_final_reactant_amounts_known
      AND initial_amount != 0
      THEN conversion =
        (initial_amount-final_amount)/initial_amount

    IF mass_and_molar_mass_known AND molar_mass != 0
      THEN amount = mass/molar_mass

    IF concentration_and_solution_volume_known
      THEN amount = concentration*solution_volume

    IF sample_mass_purity_and_molar_mass_known
      AND molar_mass != 0
      THEN available_amount =
        sample_mass*purity_fraction/molar_mass
  }

  VALIDATION {
    CHECK reaction_balance
    CHECK elemental_conservation
    CHECK charge_conservation_when_applicable
    CHECK species_identity
    CHECK coefficient_signs
    CHECK coefficient_ratio
    CHECK amount_units
    CHECK molar_mass_conversion
    CHECK concentration_volume_basis
    CHECK limiting_reactant_on_amount_basis
    CHECK purity_correction
    CHECK theoretical_vs_actual_yield
    CHECK conversion_vs_yield
    CHECK selectivity_definition
    CHECK single_vs_multiple_reaction_model
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    reaction_balance_confidence: 1.00
    stoichiometric_ratio_confidence: 1.00
    reaction_extent_confidence: 1.00
    limiting_reactant_confidence: 0.99
    yield_relationship_confidence: 0.99
    measurement_context_confidence: 0.98

    RULE:
      confidence decreases when reaction balance, species identity,
      purity, side reactions, conversion, recovery,
      measurement basis or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON reaction_definition:
      identify_species
      assign_signed_coefficients
      validate_element_and_charge_balance
      construct_stoichiometric_ratios
      compute_FLOW_HASH

    ON new_initial_amounts:
      normalize_amount_units
      apply_purity_corrections
      compute_available_reaction_extents
      identify_limiting_reactant
      compute_maximum_extent
      compute_theoretical_yields

    ON reaction_progress_update:
      update_extent
      recompute_species_amounts
      recompute_conversion
      recompute_remaining_excess
      preserve_previous_state

    ON product_measurement:
      attach_actual_product_amount
      compute_yield_when_basis_compatible
      update_selectivity_when_defined
      propagate_uncertainty

    ON reaction_network_change:
      preserve_previous_reaction_set
      update_stoichiometric_matrix
      recompute_extent_vector_model
      update_conservation_relations

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_domain: StoichiometricQuantity
    canonical_coefficient: nu_i
    canonical_extent: xi

    interpretation_order:
      identify_reaction
      verify_balance
      identify_species
      identify_signed_stoichiometric_coefficients
      identify_initial_and_final_amounts
      convert_mass_or_solution_data_to_amount
      identify_purity
      determine_stoichiometric_ratios
      determine_limiting_and_excess_reactants
      determine_reaction_extent
      determine_theoretical_yield
      identify_actual_yield
      identify_conversion_and_selectivity
      identify_single_or_multiple_reaction_context
      identify_uncertainty
      validate_conservation
      infer_stoichiometric_relationships

    ambiguity_controls:
      distinguish_coefficient_from_amount
      distinguish_stoichiometric_ratio_from_concentration
      distinguish_reaction_extent_from_reaction_rate
      distinguish_limiting_reactant_from_smallest_mass
      distinguish_conversion_from_yield
      distinguish_selectivity_from_yield
      distinguish_actual_from_theoretical_yield
      distinguish_equivalent_quantity_from_amount_without_reaction_context
      preserve_reaction_species_coefficient_purity_and_measurement_basis
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_chemical_stoichiometric_quantity_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Chemical Measurements
      -> Stoichiometric Quantity Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_domain
      ontology_path
      reaction_representation_model
      balance_model
      extent_model
      stoichiometric_ratio_model
      mass_mole_model
      solution_stoichiometry_model
      limiting_reactant_model
      excess_reactant_model
      theoretical_yield_model
      actual_yield_model
      conversion_model
      selectivity_model
      multiple_reaction_model
      stoichiometric_matrix_model
      equivalent_quantity_model
      purity_model
      relationships
      constraints
      measurement_model
      uncertainty_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      reaction_definition_changes
      stoichiometric_coefficients_change
      reaction_network_changes
      quantity_definition_changes
      balance_model_changes
      yield_or_conversion_model_changes
      equivalent_quantity_model_changes
      measurement_model_changes
      constraint_model_changes
      reasoning_rule_changes
  }

}

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