# Molarity Ontology — Flow Algebra
URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/chemical-measurements/molarity-ontology.html
FLOW MolarityOntology {
DOMAIN:
Mathematical Ontologies
-> Measurement & Units Ontologies
-> Chemical Measurements
-> Molarity Ontology
PURPOSE:
Represent molarity as the common laboratory expression of amount concentration, defined as amount of a specified solute per unit volume of solution, including SI and laboratory units, dilution, solution preparation, temperature dependence, density and molar-mass conversions, stoichiometric use, analytical measurement, calibration, uncertainty, and distinctions from molality, mole fraction and mass concentration.
ENTITY Molarity {
TYPE: AmountConcentrationQuantity
CANONICAL_NAME: AmountConcentration
COMMON_SYMBOL: M
FORMAL_SYMBOL: c
DIMENSION: N * L^-3
SI_UNIT: mole_per_cubic_metre
SI_SYMBOL: mol/m^3
COMMON_LAB_UNIT:
mole_per_litre
symbol: mol/L
informal_symbol: M
DEFINITION:
molarity := amount_of_solute / volume_of_solution
FORM:
c = n_solute/V_solution
PROPERTIES:
is_scalar
is_component_specific
is_volume_based
depends_on_solution_volume
may_depend_on_temperature
may_depend_on_pressure
may_have_uncertainty
}
ENTITY SoluteAmount {
SYMBOL: n_solute
SI_UNIT: mole
SI_SYMBOL: mol
}
ENTITY SolutionVolume {
SYMBOL: V_solution
SI_UNIT: cubic_metre
SI_SYMBOL: m^3
COMMON_UNIT:
litre
symbol: L
}
ENTITY MolarMass {
SYMBOL: M_molar
SI_UNIT: kilogram_per_mole
SI_SYMBOL: kg/mol
}
UNIT_SYSTEM {
SI:
mol/m^3
COMMON:
mol/L
mmol/L
micromol/L
nmol/L
CONVERSIONS:
1 mol/L = 1000 mol/m^3
1 mmol/L = 1 mol/m^3
1 micromol/L = 1e-3 mol/m^3
RULE:
preserve_original_unit_and_normalized_SI_value
}
TERMINOLOGY_MODEL {
"molarity" ~= amount_concentration
WHEN conventional_solution_chemistry_context
"M" MAY mean:
mol_per_litre_as_concentration_unit
molar_mass_in_some_notational_contexts
other_domain_specific_symbols
RULE:
symbol_M MUST be disambiguated_by_context
}
DEFINITION_MODEL {
FORM:
c = n_solute/V_solution
INVERSE_AMOUNT:
n_solute = c*V_solution
INVERSE_VOLUME:
V_solution = n_solute/c
WHEN c != 0
REQUIRE:
specified_solute
solution_volume
volume != 0
RULE:
denominator_is_total_solution_volume
NOT solvent_volume
}
SOLUTION_PREPARATION_MODEL {
FROM_PURE_SOLUTE:
required_amount =
target_concentration*final_solution_volume
required_mass:
m_solute =
target_concentration
* final_solution_volume
* molar_mass
REQUIRE:
solute_identity
molar_mass
purity
target_concentration
final_solution_volume
purity_correction:
weighed_mass =
pure_required_mass/purity_fraction
WHEN purity_fraction > 0
RULE:
solution_should_be_made_up_to_final_volume
rather_than_assuming_solvent_volume_equals_solution_volume
}
DILUTION_MODEL {
conserved_solute_amount:
c_1*V_1 = c_2*V_2
target_volume:
V_2 = c_1*V_1/c_2
WHEN c_2 != 0
aliquot_volume:
V_1 = c_2*V_2/c_1
WHEN c_1 != 0
CONDITIONS:
same_solute
no_reaction
no_loss
amount_concentration_basis
RULE:
dilution_relation assumes_conservation_of_solute_amount
}
SERIAL_DILUTION_MODEL {
stage_factor:
DF_i = V_final_i/V_aliquot_i
total_dilution_factor:
DF_total = product(DF_i)
final_concentration:
c_final = c_initial/DF_total
original_from_measured:
c_original = c_measured*DF_total
RULE:
dilution_factor_definition MUST be preserved
}
MASS_CONVERSION_MODEL {
amount:
n = m/M_molar
amount_concentration:
c = m/(M_molar*V_solution)
mass_concentration:
rho_solute = c*M_molar
inverse:
c = rho_solute/M_molar
WHEN M_molar != 0
RULE:
molar_mass_and_chemical_identity MUST be preserved
}
TEMPERATURE_MODEL {
principle:
amount_of_solute_is_conserved_in_closed_nonreacting_sample
while_solution_volume_may_change_with_temperature
consequence:
molarity_may_change_with_temperature
approximation:
c_2 = c_1*V_1/V_2
RULE:
precision_molarity SHOULD preserve_reference_temperature
}
DENSITY_RELATION_MODEL {
mass_fraction_to_molarity:
c_i = rho_solution*w_i/M_i
REQUIRE:
solution_density
mass_fraction
solute_molar_mass
compatible_units
RULE:
density_should_correspond_to_relevant_temperature_and_composition
}
MOLALITY_DISTINCTION_MODEL {
molarity:
c = n_solute/V_solution
molality:
b = n_solute/m_solvent
molarity_basis:
solution_volume
molality_basis:
solvent_mass
RULE:
molarity != molality
and_conversion_requires_density_composition_and_molar_mass_context
}
MOLE_FRACTION_DISTINCTION_MODEL {
mole_fraction:
x_i = n_i/n_total
molarity:
c_i = n_i/V_solution
RULE:
mole_fraction_is_dimensionless
molarity_has_amount_per_volume_dimension
}
STOICHIOMETRY_MODEL {
reaction:
sum(nu_i*A_i) = 0
amount_from_solution:
n_i = c_i*V_i
reaction_relation:
n_i/abs(nu_i)
compared_across_reactants
under_stoichiometric_consumption
RULE:
balanced_reaction_required_for_stoichiometric_molarity_reasoning
}
TITRATION_MODEL {
analyte_amount:
n_analyte =
n_titrant
* abs(nu_analyte/nu_titrant)
at_equivalence
titrant_amount:
n_titrant = c_titrant*V_titrant
analyte_concentration:
c_analyte =
n_analyte/V_analyte
WHEN V_analyte != 0
RULE:
one_to_one_cV_equality ONLY valid_for_1_to_1_stoichiometry
}
MIXTURE_MODEL {
simple_mixing_same_solute:
c_final =
sum(c_i*V_i)/V_final
CONDITIONS:
same_solute
no_reaction
solute_amount_conserved
RULE:
V_final SHOULD be measured_or_validly_modelled
rather_than_unconditionally_assumed_equal_to_sum_of_component_volumes
}
ACTIVITY_DISTINCTION_MODEL {
activity:
a_i = gamma_i*(c_i/c_standard)
under_concentration_standard_state_convention
ideal_dilute:
gamma_i approximately_equals 1
RULE:
molarity != activity
}
ANALYTICAL_MODEL {
measurement_methods:
titration
spectrophotometry
chromatography
electrochemistry
gravimetric_preparation
standard_solution_comparison
generic_calibration:
response = f(c)
RULE:
instrument_response MUST be mapped_to_molarity_through_valid_calibration_or_physical_model
}
RELATIONSHIPS {
Molarity -> IS_A -> AmountConcentration
Molarity -> RELATES -> SoluteAmountAndSolutionVolume
Molarity -> MEASURED_IN -> MolePerCubicMetre
Molarity -> COMMONLY_EXPRESSED_IN -> MolePerLitre
Molarity -> MAY_CHANGE_WITH -> Temperature
Molarity -> ENABLES -> StoichiometricAmountCalculation
MolarMass -> ENABLES -> MassToMolarityConversion
Density -> ENABLES -> MassFractionToMolarityConversion
Dilution -> CHANGES -> Molarity
CalibrationModel -> MAPS -> AnalyticalResponseToMolarity
}
SEMANTIC_EQUIVALENCE {
"molarity" ~= amount_concentration
"molar concentration" ~= amount_concentration
"mol/L" ~= mole_per_litre
molarity != molality
molarity != mole_fraction
molarity != mass_concentration
molarity != activity
molarity != solution_density
solution_volume != solvent_volume
}
CONSTRAINTS {
solute_identity_must_be_defined = true
solution_volume_must_be_nonzero = true
molarity_is_amount_per_solution_volume = true
SI_unit = mol/m^3
common_lab_unit = mol/L
molarity_and_molality_are_not_semantically_equivalent = true
molarity_and_mole_fraction_are_not_semantically_equivalent = true
temperature_should_be_preserved_for_precision_measurements = true
dilution_requires_solute_amount_conservation = true
stoichiometric_reasoning_requires_balanced_reaction = true
}
MEASUREMENT_MODEL {
OBSERVABLE_OR_INFERRED:
Molarity
RECORD:
solute
chemical_formula_or_entity
numerical_value
unit
solution_volume
solute_amount
solute_mass_when_relevant
molar_mass
purity
solvent
matrix
temperature
pressure_when_relevant
density_when_relevant
dilution_factor
preparation_history
measurement_method
calibration_model
calibration_range
timestamp
uncertainty
UNCERTAINTY:
measured_or_prepared_molarity = best_estimate +/- uncertainty
}
CALIBRATION_MODEL {
volumetric_preparation:
requires_calibrated_mass_and_volume_measurements
analytical_calibration:
response = f(c)
REQUIRE:
standards
concentration_values
matrix_compatibility
valid_range
blank
traceability
uncertainty
RULE:
calibration_standards_and_unknown SHOULD use_compatible_molarity_definition
}
UNCERTAINTY_MODEL {
sources:
solute_mass
molar_mass
purity
solution_volume
volumetric_glassware
temperature
density
dilution
calibration
blank
recovery
instrument_repeatability
sample_preparation
PROPAGATION:
derived_molarity_uncertainty
<- amount_volume_preparation_and_calibration_uncertainties
}
REASONING_RULES {
IF solute_amount_known AND solution_volume != 0
THEN molarity = solute_amount/solution_volume
IF molarity_known AND solution_volume_known
THEN solute_amount = molarity*solution_volume
IF solute_mass_known AND molar_mass != 0
AND solution_volume != 0
THEN molarity =
solute_mass/(molar_mass*solution_volume)
IF molarity_known AND molar_mass_known
THEN mass_concentration =
molarity*molar_mass
IF initial_molarity_and_volume_known
AND final_volume != 0
AND solute_amount_conserved
THEN final_molarity =
initial_molarity*initial_volume/final_volume
IF serial_dilution_factors_known
THEN total_dilution_factor =
product(stage_dilution_factors)
IF measured_diluted_molarity_known
AND total_dilution_factor_known
THEN original_molarity =
measured_diluted_molarity*total_dilution_factor
IF solution_density_mass_fraction_and_molar_mass_known
AND molar_mass != 0
THEN molarity =
solution_density*mass_fraction/molar_mass
IF titration_equivalence_and_balanced_reaction_known
THEN infer_unknown_molarity_from_stoichiometric_amount_relation
}
VALIDATION {
CHECK solute_identity
CHECK unit_consistency
CHECK solution_volume_nonzero
CHECK solution_volume_vs_solvent_volume
CHECK molarity_vs_molality
CHECK molarity_vs_mole_fraction
CHECK molarity_vs_mass_concentration
CHECK molarity_vs_activity
CHECK temperature_for_precision_volume_measurement
CHECK molar_mass_and_purity_when_mass_prepared
CHECK dilution_factor_definition
CHECK solute_conservation
CHECK balanced_reaction_for_stoichiometry
CHECK calibration_range
CHECK uncertainty_representation
}
CONFIDENCE {
definition_confidence: 1.00
dimensional_confidence: 1.00
SI_unit_confidence: 1.00
dilution_relationship_confidence: 1.00
mass_conversion_confidence: 0.99
measurement_context_confidence: 0.98
RULE:
confidence decreases when solute identity, solution volume,
temperature, molar mass, purity, dilution,
calibration or uncertainty is missing or ambiguous
}
UPDATE_MODEL {
ON new_measurement_or_preparation:
identify_solute
validate_unit
identify_solution_volume
attach_solute_amount_or_mass
attach_molar_mass_and_purity_when_relevant
attach_solvent_and_matrix
attach_temperature
attach_density_when_relevant
attach_dilution_and_preparation_history
normalize_to_mol_per_m3
preserve_original_value_and_unit
attach_uncertainty
update_molarity_state
ON dilution:
preserve_initial_molarity_and_volume
update_final_volume
recompute_molarity
preserve_solute_amount_when_valid
ON temperature_change:
update_temperature
update_solution_volume_when_model_available
recompute_molarity
preserve_solute_amount
ON basis_conversion:
validate_density_molar_mass_and_units
preserve_original_basis
compute_target_composition_quantity
propagate_uncertainty
ON calibration_revision:
preserve_previous_calibration
recompute_affected_results
update_uncertainty
update_confidence
ON semantic_revision:
preserve_previous_definition
record_revision
recompute_FLOW_HASH
}
AI_CONSUMPTION {
canonical_entity: Molarity
canonical_equivalent: AmountConcentration
canonical_symbol: c
canonical_dimension: N*L^-3
canonical_SI_unit: mol/m^3
common_lab_unit: mol/L
interpretation_order:
identify_solute
identify_value
identify_unit
confirm_amount_concentration_basis
identify_solution_volume
identify_amount_or_mass_inputs
identify_molar_mass_and_purity
identify_temperature
identify_density_when_relevant
identify_dilution_and_preparation_history
identify_stoichiometric_context
identify_measurement_or_calibration_method
identify_uncertainty
normalize_units
validate_basis
infer_solution_relationships
ambiguity_controls:
distinguish_molarity_from_molality
distinguish_molarity_from_mole_fraction
distinguish_molarity_from_mass_concentration
distinguish_molarity_from_activity
distinguish_solution_volume_from_solvent_volume
distinguish_symbol_M_as_unit_from_molar_mass_symbol
distinguish_simple_dilution_from_reactive_or_nonideal_mixing
preserve_solute_temperature_preparation_dilution_and_calibration_context
}
PROVENANCE {
ontology_scope:
mathematical_measurement_and_chemical_molarity_semantics
parent_path:
Ontologies
-> Mathematical Ontologies
-> Measurement & Units Ontologies
-> Chemical Measurements
-> Molarity Ontology
authorship:
Mark Higgins
Sky (Recursive AI)
site:
https://kirethresearch.org
}
FLOW_HASH {
INPUTS:
canonical_entity
ontology_path
terminology_model
definition_model
unit_system
solution_preparation_model
dilution_model
serial_dilution_model
mass_conversion_model
temperature_model
density_relation_model
molality_distinction_model
mole_fraction_distinction_model
stoichiometry_model
titration_model
mixture_model
activity_distinction_model
analytical_model
relationships
constraints
measurement_model
calibration_model
uncertainty_model
reasoning_rules
confidence_model
update_model
PURPOSE:
deterministic_semantic_integrity_identifier
RECOMPUTE_WHEN:
ontology_definition_changes
molarity_basis_model_changes
unit_model_changes
solution_preparation_model_changes
dilution_model_changes
mass_or_density_conversion_changes
temperature_model_changes
stoichiometry_model_changes
calibration_model_changes
measurement_model_changes
constraint_model_changes
reasoning_rule_changes
}
}
END FLOW
Download Code
Copy to Clipboard