Skip to main content

Unit Conversion Ontology

Measurement Mathematics
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# Unit Conversion Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/measurement-mathematics/unit-conversion-ontology.html

FLOW UnitConversionOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Measurement Mathematics
    -> Unit Conversion Ontology

  PURPOSE:
    Represent unit conversion as a mathematically valid transformation of the numerical representation of a quantity from one unit to another while preserving the underlying quantity. The ontology models linear, affine, multiplicative, reciprocal, logarithmic and context-dependent conversions; SI prefixes; coherent and non-coherent units; compound units; powers and roots; temperature scales; angular units; time, area, volume, speed, pressure, energy and other derived-unit transformations; exact and experimentally determined conversion factors; uncertainty propagation; dimensional validation; significant figures; provenance; parsing; formatting; and machine-consumable reasoning while preventing conversions between dimensionally incompatible quantities.

  ENTITY UnitConversion {
    TYPE: QuantityRepresentationTransformation

    DEFINITION:
      transformation_of_quantity_value_representation
      from_source_unit_to_target_unit
      such_that_underlying_quantity_is_preserved

    PROPERTIES:
      has_source_unit
      has_target_unit
      has_conversion_function
      preserves_quantity
      preserves_dimension
      may_change_numerical_value
      may_use_exact_factor
      may_use_offset
      may_have_context
      may_propagate_uncertainty
      has_provenance
  }

  ENTITY SourceUnit {
    TYPE: MeasurementUnit
  }

  ENTITY TargetUnit {
    TYPE: MeasurementUnit
  }

  ENTITY ConversionFactor {
    TYPE: ScaleParameter

    PROPERTIES:
      numerical_value
      exactness
      uncertainty_when_inexact
      source
  }

  ENTITY ConversionOffset {
    TYPE: AffineParameter

    PROPERTIES:
      numerical_value
      unit_context
      exactness
      uncertainty_when_inexact
  }

  QUANTITY_PRESERVATION_MODEL {
    source:
      Q =
        x_s*u_s

    target:
      Q =
        x_t*u_t

    equality:
      x_s*u_s =
        x_t*u_t

    RULE:
      conversion_changes_representation_not_underlying_quantity
  }

  DIMENSION_MODEL {
    source_dimension:
      D_s

    target_dimension:
      D_t

    REQUIRE:
      D_s =
        D_t
      for_direct_unit_conversion

    RULE:
      dimensionally_incompatible_units MUST_NOT be_directly_converted
  }

  QUANTITY_KIND_MODEL {
    same_dimension:
      does_not_always_imply_same_quantity_kind

    examples:
      torque_and_energy
      frequency_and_activity

    RULE:
      quantity_kind_semantics SHOULD be checked_in_addition_to_dimension
  }

  LINEAR_CONVERSION_MODEL {
    target_value:
      x_t =
        k*x_s

    inverse:
      x_s =
        x_t/k
      WHEN k != 0

    RULE:
      factor_direction MUST be explicit
  }

  EXACT_FACTOR_MODEL {
    factor:
      defined_exactly

    uncertainty:
      zero_from_conversion_factor_definition

    RULE:
      exact_conversion_factor_does_not_add_measurement_uncertainty
  }

  INEXACT_FACTOR_MODEL {
    factor:
      experimentally_determined_or_context_dependent

    uncertainty:
      u(k) > 0
      potentially

    RULE:
      factor_uncertainty MUST be propagated
  }

  AFFINE_CONVERSION_MODEL {
    target:
      x_t =
        a*x_s+b

    inverse:
      x_s =
        (x_t-b)/a
      WHEN a != 0

    RULE:
      affine_conversion_is_not_pure_scale_conversion
  }

  TEMPERATURE_SCALE_MODEL {
    Celsius_to_kelvin:
      T_K =
        t_C+273.15

    kelvin_to_Celsius:
      t_C =
        T_K-273.15

    Celsius_to_Fahrenheit:
      t_F =
        (9/5)*t_C+32

    Fahrenheit_to_Celsius:
      t_C =
        (5/9)*(t_F-32)

    Fahrenheit_to_kelvin:
      T_K =
        (5/9)*(t_F-32)+273.15

    RULE:
      absolute_temperature_and_temperature_difference_require_distinct_conversion_semantics
  }

  TEMPERATURE_DIFFERENCE_MODEL {
    delta_K =
      delta_Celsius

    delta_Fahrenheit =
      (9/5)*delta_Celsius

    RULE:
      additive_offsets_do_not_apply_to_temperature_differences
  }

  PREFIX_MODEL {
    SI_prefix:
      scales_unit_by_power_of_ten

    examples:
      kilo = 10^3
      mega = 10^6
      milli = 10^-3
      micro = 10^-6
      nano = 10^-9

    RULE:
      prefix_factor_applies_to_unit_before_power_handling
  }

  PREFIX_CONVERSION_MODEL {
    source_prefix_power:
      p_s

    target_prefix_power:
      p_t

    numeric:
      x_t =
        x_s*10^(p_s-p_t)

    RULE:
      quantity_and_base_unit_remain_same
  }

  BINARY_PREFIX_MODEL {
    possible:
      kibi = 2^10
      mebi = 2^20
      gibi = 2^30
      tebi = 2^40

    RULE:
      binary_prefixes MUST be distinguished_from_decimal_SI_prefixes
  }

  COMPOUND_UNIT_MODEL {
    source:
      product_and_quotient_of_units

    target:
      equivalent_compound_unit

    process:
      decompose
      convert_components
      combine_scale_factors

    RULE:
      exponent_of_each_unit_component MUST be preserved
  }

  POWERED_UNIT_MODEL {
    if:
      u_t =
        k*u_s

    then_for_power_n:
      u_t^n =
        k^n*u_s^n

    RULE:
      area_and_volume_conversion_factors_require_squared_or_cubed_scale
  }

  AREA_CONVERSION_MODEL {
    length_factor:
      k

    area_factor:
      k^2

    example:
      1_m =
        100_cm

      therefore:
        1_m^2 =
          10000_cm^2

    RULE:
      do_not_apply_linear_length_factor_directly_to_area
  }

  VOLUME_CONVERSION_MODEL {
    length_factor:
      k

    volume_factor:
      k^3

    example:
      1_m^3 =
        1000000_cm^3
  }

  RECIPROCAL_UNIT_MODEL {
    source:
      1/u_s

    if:
      u_t =
        k*u_s

    then:
      1/u_t =
        (1/k)*(1/u_s)

    RULE:
      reciprocal_units_invert_scale_factor
  }

  RATE_UNIT_MODEL {
    source:
      A_per_B

    target:
      C_per_D

    conversion:
      numerator_factor/denominator_factor

    RULE:
      numerator_and_denominator_factors MUST be applied_separately
  }

  SPEED_MODEL {
    metres_per_second_to_kilometres_per_hour:
      x_kmh =
        3.6*x_ms

    kilometres_per_hour_to_metres_per_second:
      x_ms =
        x_kmh/3.6

    RULE:
      factor_results_from_length_and_time_unit_conversions
  }

  FREQUENCY_PERIOD_MODEL {
    frequency:
      f =
        1/T

    RULE:
      conversion_between_frequency_and_period_is_quantity_transformation
      not_simple_unit_conversion
  }

  ANGLE_MODEL {
    radians_to_degrees:
      deg =
        rad*180/pi

    degrees_to_radians:
      rad =
        deg*pi/180

    RULE:
      pi_is_exact_mathematical_constant
  }

  ARC_MINUTE_SECOND_MODEL {
    1_degree =
      60_arcminutes

    1_arcminute =
      60_arcseconds

    RULE:
      angular_units_are_not_time_units_despite_shared_minute_second_terms
  }

  TIME_UNIT_MODEL {
    exact_common:
      1_minute =
        60_seconds

      1_hour =
        3600_seconds

      1_day =
        86400_seconds
      under_conventional_day_duration_context

    RULE:
      calendar_month_and_year_conversions_are_context_dependent
  }

  CALENDAR_DURATION_MODEL {
    month:
      variable_number_of_days

    year:
      may_be_365_or_366_days_in_Gregorian_calendar

    RULE:
      calendar_duration_conversion_requires_date_calendar_and_context
  }

  MASS_MODEL {
    source_and_target:
      compatible_mass_units

    RULE:
      mass_and_weight_force MUST be distinguished
  }

  MASS_FORCE_DISTINCTION_MODEL {
    mass:
      dimension_M

    force:
      dimension_M*L*T^-2

    relation:
      F =
        m*g

    RULE:
      converting_mass_to_force_requires_gravitational_model
      and_is_not_unit_conversion
  }

  PRESSURE_MODEL {
    pressure:
      force/area

    possible_units:
      Pa
      kPa
      MPa
      bar
      mbar
      psi
      atm
      torr

    RULE:
      conversion_factor_exactness_depends_on_unit_definition
  }

  ENERGY_MODEL {
    possible_units:
      joule
      kilojoule
      watt_hour
      kilowatt_hour
      electronvolt

    RULE:
      energy_and_torque_share_dimension_but_are_distinct_quantity_kinds
  }

  POWER_MODEL {
    power:
      energy/time

    possible_units:
      watt
      kilowatt
      horsepower_variant

    RULE:
      horsepower_unit_variant MUST be identified
  }

  FORCE_MODEL {
    possible:
      newton
      kilonewton
      pound_force

    RULE:
      pound_force_and_pound_mass MUST be distinguished
  }

  LENGTH_MODEL {
    possible:
      metre
      kilometre
      centimetre
      millimetre
      inch
      foot
      yard
      mile
      nautical_mile

    RULE:
      conversion_source_definition MUST be preserved
  }

  VOLUME_CAPACITY_MODEL {
    possible:
      cubic_metre
      litre
      millilitre
      cubic_centimetre
      gallon
      pint

    RULE:
      imperial_and_US_customary_volume_units MUST be disambiguated
  }

  LITRE_MODEL {
    exact:
      1_L =
        1_dm^3
        =
        10^-3_m^3

    RULE:
      litre_symbol_and_prefix_semantics MUST be preserved
  }

  DENSITY_MODEL {
    density:
      mass/volume

    conversion:
      combine_mass_and_volume_scale_factors

    RULE:
      quantity_basis_must_remain_same
  }

  CONCENTRATION_MODEL {
    possible:
      mol_per_litre
      mol_per_cubic_metre
      mass_per_volume
      amount_fraction
      mass_fraction

    RULE:
      different_concentration_kinds_are_not_interconvertible_without_composition_density_or_molar_mass_information
  }

  MOLAR_MASS_MODEL {
    relation:
      mass =
        amount_of_substance*molar_mass

    RULE:
      converting_mass_concentration_to_molar_concentration_requires_molar_mass_and_possible_density_or_volume_context
  }

  LOGARITHMIC_UNIT_MODEL {
    examples:
      decibel
      neper
      pH_related_scale

    RULE:
      logarithmic_quantity_conversion_requires_reference_and_definition
      not_simple_linear_unit_factor
  }

  DECIBEL_MODEL {
    power_level:
      L =
        10*log10(P/P_ref)

    amplitude_level:
      L =
        20*log10(A/A_ref)
      under_squared_power_relation

    RULE:
      reference_quantity_and_ratio_type MUST be defined
  }

  ABSOLUTE_LOG_LEVEL_MODEL {
    examples:
      dBm
      dBW

    RULE:
      absolute_logarithmic_level_includes_reference_power
      and_must_not_be_treated_as_dimensionless_dB_only
  }

  PH_MODEL {
    pH:
      logarithmic_measure_related_to_hydrogen_ion_activity

    RULE:
      pH_to_concentration_is_not_simple_unit_conversion
      and_requires_chemical_activity_model
  }

  DIMENSIONLESS_UNIT_MODEL {
    possible:
      percent
      ppm
      ppb
      radian
      steradian

    RULE:
      dimensionless_quantities_can_have_distinct_semantics_and_named_units
  }

  PERCENT_MODEL {
    percent_to_fraction:
      x_fraction =
        x_percent/100

    fraction_to_percent:
      x_percent =
        100*x_fraction
  }

  PPM_MODEL {
    ppm_to_fraction:
      x =
        ppm*10^-6
      under_dimensionless_fraction_context

    RULE:
      ppm_by_mass_volume_or_mole MUST be disambiguated
  }

  COUNT_UNIT_MODEL {
    counts:
      dimensionless_but_semantically_discrete

    RULE:
      count_rate_and_activity_units MUST not_be conflated
  }

  CURRENCY_DISTINCTION_MODEL {
    currency_conversion:
      uses_time_dependent_exchange_rate

    RULE:
      currency_conversion_is_not_metrological_unit_conversion_in_measurement_ontology
  }

  CONTEXT_DEPENDENT_MODEL {
    conversions:
      require_additional_parameters

    examples:
      standard_cubic_volume
      gas_flow
      mass_to_volume
      wet_to_dry_basis
      gauge_to_absolute_pressure

    RULE:
      context_parameters MUST be explicit
  }

  STANDARD_CONDITION_MODEL {
    gas_volume:
      depends_on_temperature_pressure_and_composition

    RULE:
      standard_or_normal_conditions MUST be identified
  }

  GAUGE_ABSOLUTE_PRESSURE_MODEL {
    P_absolute =
      P_gauge+P_atmospheric

    RULE:
      atmospheric_pressure_is_contextual_input
      not_unit_conversion_factor
  }

  UNIT_SYMBOL_MODEL {
    symbol:
      formal_unit_representation

    RULE:
      symbol_case_is_significant
  }

  UNIT_NAME_MODEL {
    name:
      textual_unit_name

    RULE:
      parser SHOULD distinguish_symbol_from_free_text_name
  }

  PREFIX_PARSING_MODEL {
    token:
      prefix+unit_symbol

    RULE:
      parser MUST resolve_longest_valid_unit_structure_without_ambiguous_double_prefixing
  }

  COMPOUND_PARSING_MODEL {
    possible:
      m/s
      kg*m/s^2
      W/(m*K)
      mol/L

    RULE:
      multiplication_division_parentheses_and_exponents MUST be parsed structurally
  }

  CANONICAL_UNIT_MODEL {
    quantity_kind:
      may_have_preferred_canonical_unit

    conversion:
      source -> canonical -> target
      possible_implementation

    RULE:
      chained_conversion_must_not_introduce_rounding_error_if_direct_exact_factor_available
  }

  SI_COHERENT_MODEL {
    coherent_unit:
      derived_without_additional_numerical_factor_from_base_units

    RULE:
      coherence_is_property_of_unit_system_not_measurement_accuracy
  }

  BASE_UNIT_DECOMPOSITION_MODEL {
    target:
      express_derived_unit_in_base_units

    examples:
      N =
        kg*m*s^-2

      Pa =
        kg*m^-1*s^-2

    RULE:
      derived_and_base_unit_forms_may_be_semantically_equivalent_for_same_quantity
  }

  CONVERSION_GRAPH_MODEL {
    nodes:
      units

    edges:
      conversion_functions

    properties:
      exactness
      uncertainty
      domain
      context
      source

    RULE:
      path_selection SHOULD prefer_valid_exact_low_complexity_conversion_when_equivalent
  }

  PATH_COMPOSITION_MODEL {
    A_to_B:
      f

    B_to_C:
      g

    A_to_C:
      g(f(x))

    RULE:
      composed_conversion_must_preserve_context_and_uncertainty
  }

  INVERSE_MODEL {
    forward:
      y =
        f(x)

    inverse:
      x =
        f^-1(y)

    RULE:
      conversion_should_be_invertible_over_declared_domain_for_bidirectional_unit_mapping
  }

  ROUND_TRIP_MODEL {
    source:
      x

    convert:
      source_to_target_to_source

    expectation:
      recover_original_value_within_numeric_rounding_and_inexact_factor_uncertainty

    RULE:
      round_trip_test_supports_conversion_validation
  }

  UNCERTAINTY_PROPAGATION_MODEL {
    linear_exact:
      u_y =
        abs(k)*u_x

    affine_exact:
      u_y =
        abs(a)*u_x

    uncertain_factor:
      y =
        k*x

      variance_first_order:
        u_y^2 =
          k^2*u_x^2
          +x^2*u_k^2
          +2*k*x*cov(x,k)

    RULE:
      conversion_parameter_uncertainty MUST be included_when_inexact
  }

  RELATIVE_UNCERTAINTY_MODEL {
    exact_nonzero_scale:
      relative_uncertainty_preserved

    u_y/abs(y) =
      u_x/abs(x)
      WHEN y=k*x
      AND k_exact_nonzero
      AND x_nonzero
  }

  COVARIANCE_MODEL {
    multiple_values:
      converted_by_common_uncertain_factor

    RULE:
      shared_factor_uncertainty_creates_covariance_between_converted_results
  }

  SIGNIFICANT_FIGURES_MODEL {
    exact_conversion:
      does_not_reduce_significant_information

    RULE:
      final_reporting_should_reflect_original_measurement_uncertainty_not_number_of_digits_in_exact_factor
  }

  ROUNDING_MODEL {
    internal:
      retain_sufficient_precision

    final:
      round_under_declared_reporting_policy

    RULE:
      avoid_rounding_at_each_conversion_step
  }

  SCIENTIFIC_NOTATION_MODEL {
    numeric:
      may_be_rescaled_with_unit_conversion

    RULE:
      scientific_exponent_and_unit_prefix_must_not_be_double_applied
  }

  OVERFLOW_MODEL {
    machine:
      converted_numeric_value_may_exceed_format_range

    RULE:
      use_scaled_or_arbitrary_precision_representation_when_needed
  }

  UNDERFLOW_MODEL {
    machine:
      very_small_converted_value_may_underflow

    RULE:
      underflow != physical_zero
  }

  EXACTNESS_MODEL {
    conversion_relation:
      exact
      conventional_exact
      measured
      approximate
      context_dependent

    RULE:
      exactness_status MUST be preserved
  }

  PROVENANCE_MODEL {
    conversion_factor_source:
      SI_definition
      legal_definition
      standard
      reference_database
      experimental_measurement
      user_defined

    RULE:
      nontrivial_or_inexact_conversion_source SHOULD be recorded
  }

  VERSION_MODEL {    conversion_definition:
      may_change_if_legal_or_conventional_definition_revised

    RULE:
      version_and_effective_date SHOULD be preserved
  }

  LOCALE_MODEL {
    decimal_separator:
      locale_dependent

    thousands_separator:
      locale_dependent

    RULE:
      machine_conversion_input SHOULD use_unambiguous_numeric_parsing
  }

  FORMAT_MODEL {
    output:
      numerical_value
      unit_symbol
      uncertainty
      significant_figures

    RULE:
      formatting_is_separate_from_conversion_mathematics
  }

  VALIDATION_MODEL {
    tests:
      dimension_compatibility
      quantity_kind_compatibility
      known_reference_pairs
      inverse_conversion
      round_trip
      boundary_values
      zero
      negative_values
      uncertainty_scaling

    RULE:
      conversion_library SHOULD include_automated_validation
  }

  RELATIONSHIPS {
    UnitConversion -> HAS_SOURCE -> SourceUnit
    UnitConversion -> HAS_TARGET -> TargetUnit
    UnitConversion -> USES -> ConversionFunction
    ConversionFactor -> SCALES -> NumericalValue
    ConversionOffset -> SHIFTS -> NumericalValue
    Unit -> HAS -> Dimension
    Unit -> REPRESENTS -> QuantityKind
    SIPrefix -> SCALES -> Unit
    CompoundUnit -> COMPOSED_OF -> UnitFactors
    UnitConversion -> PRESERVES -> UnderlyingQuantity
    ConversionParameterUncertainty -> CONTRIBUTES_TO -> OutputUncertainty
  }

  SEMANTIC_EQUIVALENCE {
    "unit conversion" ~= transformation_between_equivalent_quantity_unit_representations
    "conversion factor" ~= multiplicative_scale_factor WHEN linear_conversion_context

    unit_conversion != quantity_transformation
    unit_conversion != dimensional_analysis
    unit_conversion != unit_definition
    temperature_value_conversion != temperature_difference_conversion
    mass_to_force != unit_conversion
    frequency_to_period != unit_conversion
    gauge_to_absolute_pressure != pure_unit_conversion
    currency_conversion != metrological_unit_conversion
    exact_conversion_factor != measured_quantity
  }

  CONSTRAINTS {
    source_unit_must_be_defined = true
    target_unit_must_be_defined = true
    source_and_target_dimensions_must_match_for_direct_conversion = true
    quantity_kind_compatibility_should_be_validated = true
    conversion_direction_must_be_defined = true
    affine_and_linear_conversions_must_be_distinguished = true
    powered_units_must_apply_factor_exponent = true
    temperature_values_and_temperature_differences_must_be_distinguished = true
    exact_and_inexact_conversion_parameters_must_be_distinguished = true
    context_dependent_conversions_require_context_parameters = true
    conversion_must_preserve_underlying_quantity = true
    provenance_should_be_preserved_for_nontrivial_conversion_relations = true
  }

  MEASUREMENT_MODEL {
    RECORD:
      quantity_identifier
      quantity_kind
      source_value
      source_unit
      source_dimension
      target_value
      target_unit
      target_dimension
      conversion_type
      conversion_factor
      conversion_offset
      parameter_exactness
      parameter_uncertainty
      context_parameters
      source_uncertainty
      target_uncertainty
      covariance
      significant_figures
      rounding_mode
      conversion_source
      conversion_version
      original_representation
      final_representation
      provenance

    RULE:
      converted_value MUST remain_linked_to_source_value_conversion_relation_and_uncertainty
  }

  REASONING_RULES {
    IF source_and_target_dimensions_differ
      THEN reject_direct_unit_conversion

    IF dimensions_match_but_quantity_kinds_are_semantically_incompatible
      THEN require_explicit_quantity_transformation_model

    IF linear_conversion_factor_known
      THEN target_value =
        factor*source_value

    IF affine_conversion_known
      THEN target_value =
        scale*source_value+offset

    IF converting_powered_unit
      THEN raise_linear_unit_factor_to_unit_exponent

    IF converting_compound_unit
      THEN decompose_components
      apply_each_factor_with_exponent
      recombine_total_scale

    IF exact_scale_factor
      THEN target_uncertainty =
        abs(factor)*source_uncertainty
      without_new_factor_uncertainty

    IF factor_uncertain
      THEN propagate_source_and_factor_uncertainty
      including_covariance

    IF converting_temperature_difference
      THEN do_not_apply_absolute_temperature_offset

    IF SI_prefix_conversion
      THEN apply_difference_in_prefix_powers

    IF calendar_month_or_year_requested
      THEN require_calendar_and_date_context_before_exact_duration_conversion

    IF mass_to_force_requested
      THEN route_to_physical_relation_F=m*g
      rather_than_direct_unit_conversion

    IF frequency_to_period_requested
      THEN route_to_reciprocal_quantity_relation
      rather_than_direct_unit_conversion

    IF multiple_conversions_chained
      THEN preserve_full_internal_precision
      and_round_only_at_final_reporting_stage

    IF round_trip_conversion_performed
      THEN compare_returned_value_to_original_with_numeric_and_parameter_uncertainty_tolerance
  }

  VALIDATION {
    CHECK source_unit
    CHECK target_unit
    CHECK quantity_kind
    CHECK dimensions
    CHECK conversion_type
    CHECK factor_direction
    CHECK factor_exactness
    CHECK affine_offset
    CHECK powered_unit_exponents
    CHECK compound_unit_structure
    CHECK SI_and_binary_prefixes
    CHECK temperature_value_vs_difference
    CHECK context_dependent_parameters
    CHECK logarithmic_reference
    CHECK uncertainty_propagation
    CHECK covariance_from_shared_factors
    CHECK significant_figures
    CHECK rounding
    CHECK inverse_conversion
    CHECK round_trip_consistency
    CHECK provenance
  }

  CONFIDENCE {
    quantity_preservation_confidence: 1.00
    dimensional_validation_confidence: 1.00
    linear_conversion_confidence: 1.00
    affine_conversion_confidence: 1.00
    SI_prefix_confidence: 1.00
    compound_unit_confidence: 1.00
    uncertainty_propagation_confidence: 0.99
    context_dependent_conversion_confidence: 0.98

    RULE:
      confidence decreases when quantity kind, unit definition, exactness,
      context parameters, conversion source, uncertainty
      or provenance is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_conversion_request:
      identify_quantity_kind
      parse_source_value_and_unit
      identify_target_unit
      validate_dimensions
      resolve_conversion_relation
      identify_exactness_and_context
      convert_value
      propagate_uncertainty
      format_result
      preserve_provenance

    ON conversion_definition_revision:
      preserve_previous_relation
      update_factor_offset_function_source_and_effective_date
      create_new_version
      recompute_affected_results_when_policy_allows

    ON unit_definition_revision:
      preserve_historical_unit_definition
      update_conversion_graph
      validate_inverse_and_round_trip_paths
      prevent_reinterpretation_of_historical_values_without_version_context

    ON uncertainty_revision:
      preserve_converted_value_relation
      update_source_or_parameter_uncertainty
      recompute_target_uncertainty
      preserve_covariance

    ON formatting_revision:
      preserve_underlying_converted_value
      update significant_figures_rounding_or_notation
      regenerate_representation_without_recomputing_quantity

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: UnitConversion
    canonical_role: QuantityRepresentationTransformation

    interpretation_order:
      identify_quantity_kind
      identify_source_value_and_unit
      identify_source_dimension
      identify_target_unit_and_dimension
      validate_quantity_kind_compatibility
      identify_linear_affine_logarithmic_or_context_dependent_conversion
      identify_factor_offset_and_exactness
      identify_compound_or_powered_unit_structure
      identify_context_parameters
      identify_source_uncertainty_and_covariance
      identify_significant_figures_and_rounding
      identify_conversion_source_and_version
      identify_provenance
      perform_conversion
      validate_quantity_preservation

    ambiguity_controls:
      distinguish_unit_conversion_from_quantity_transformation
      distinguish_unit_conversion_from_dimensional_analysis
      distinguish_temperature_value_from_temperature_difference
      distinguish_mass_from_force
      distinguish_frequency_from_period
      distinguish_gauge_from_absolute_pressure
      distinguish_decimal_SI_prefixes_from_binary_prefixes
      distinguish_exact_conversion_factor_from_measured_parameter
      distinguish_formatting_from_conversion_mathematics
      preserve_quantity_kind_source_target_factor_exactness_context_uncertainty_version_and_provenance
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_units_measurement_mathematics_and_unit_conversion_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Measurement Mathematics
      -> Unit Conversion Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      quantity_preservation_model
      dimension_model
      quantity_kind_model
      linear_conversion_model
      exact_factor_model
      inexact_factor_model
      affine_conversion_model
      temperature_scale_model
      temperature_difference_model
      prefix_model
      prefix_conversion_model
      binary_prefix_model
      compound_unit_model
      powered_unit_model
      area_conversion_model
      volume_conversion_model
      reciprocal_unit_model
      rate_unit_model
      speed_model
      frequency_period_model
      angle_model
      arc_minute_second_model
      time_unit_model
      calendar_duration_model
      mass_model
      mass_force_distinction_model
      pressure_model
      energy_model
      power_model
      force_model
      length_model
      volume_capacity_model
      litre_model
      density_model
      concentration_model
      molar_mass_model
      logarithmic_unit_model
      decibel_model
      absolute_log_level_model
      pH_model
      dimensionless_unit_model
      percent_model
      ppm_model
      count_unit_model
      currency_distinction_model
      context_dependent_model
      standard_condition_model
      gauge_absolute_pressure_model
      unit_symbol_model
      unit_name_model
      prefix_parsing_model
      compound_parsing_model
      canonical_unit_model
      SI_coherent_model
      base_unit_decomposition_model
      conversion_graph_model
      path_composition_model
      inverse_model
      round_trip_model
      uncertainty_propagation_model
      relative_uncertainty_model
      covariance_model
      significant_figures_model
      rounding_model
      scientific_notation_model
      overflow_model
      underflow_model
      exactness_model
      provenance_model
      version_model
      locale_model
      format_model
      validation_model
      relationships
      semantic_equivalence
      constraints
      measurement_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      unit_or_quantity_kind_definition_changes
      linear_affine_or_context_conversion_changes
      prefix_compound_or_powered_unit_changes
      temperature_or_logarithmic_conversion_changes
      conversion_factor_exactness_or_source_changes
      uncertainty_or_covariance_model_changes
      conversion_graph_or_path_changes
      parsing_formatting_or_version_changes
      measurement_record_changes
      constraint_model_changes
      reasoning_rule_changes
  }

}

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