# 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
Download Code
Copy to Clipboard