Skip to main content

Normalisation Ontology

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

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

FLOW NormalisationOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Measurement Mathematics
    -> Normalisation Ontology

  PURPOSE:
    Represent normalisation as a family of mathematical transformations that express quantities, variables, vectors, distributions, signals or datasets relative to a declared reference, scale, norm, range or total. The ontology models reference normalisation, nondimensionalisation, min-max scaling, z-score standardisation, vector norm normalisation, probability normalisation, compositional normalisation, signal and image normalisation, baseline and ratio normalisation, calibration-related transformations, uncertainty and covariance propagation, inverse transformations, edge cases, provenance and machine-consumable reasoning while strictly distinguishing normalisation from unit conversion, calibration, centring, standardisation, scaling in general and physical change.

  ENTITY Normalisation {
    TYPE: MathematicalReferenceTransformation

    DEFINITION:
      transformation_of_values_or_quantities
      relative_to_declared_reference_scale_norm_range_or_total
      for_comparison_analysis_or_dimensionless_representation

    PROPERTIES:
      has_input
      has_reference_or_scale
      has_normalisation_rule
      has_output
      may_be_dimensionless
      may_be_invertible
      may_change_distribution
      may_change_range
      may_propagate_uncertainty
      has_provenance
  }

  ENTITY NormalisedValue {
    TYPE: DerivedValue

    COMPONENTS:
      transformed_value
      normalisation_method
      reference
      parameters
      provenance
  }

  ENTITY ReferenceScale {
    TYPE: NormalisationParameter

    RULE:
      reference_scale MUST be_defined_and_nonzero_when_used_as_divisor
  }

  TERMINOLOGY_MODEL {
    terms:
      normalisation
      normalization
      rescaling
      standardisation
      standardization
      nondimensionalisation
      centring
      ratio_to_reference
      unit_norm

    RULE:
      normalisation_method MUST be explicitly identified
      because_term_usage_varies_across_domains
  }

  REFERENCE_NORMALISATION_MODEL {
    input:
      x

    reference:
      r

    output:
      x_norm =
        x/r

    REQUIRE:
      r != 0

    RULE:
      input_and_reference_should_have_compatible_dimensions
  }

  DIMENSIONLESS_REFERENCE_MODEL {
    x:
      dimension_D

    r:
      same_dimension_D

    x_norm:
      dimensionless

    RULE:
      ratio_preserves_quantity_kind_context_even_when_dimensionless
  }

  BASELINE_NORMALISATION_MODEL {
    observed:
      x

    baseline:
      x_0

    ratio:
      x_norm =
        x/x_0

    REQUIRE:
      x_0 != 0

    RULE:
      baseline_time_condition_and_uncertainty MUST be preserved
  }

  RELATIVE_CHANGE_MODEL {
    x:
      current

    x_0:
      baseline

    relative_change:
      delta_rel =
        (x-x_0)/x_0

    REQUIRE:
      x_0 != 0

    RULE:
      relative_change != simple_ratio_normalisation
  }

  PERCENT_CHANGE_MODEL {
    percent_change =
      100*(x-x_0)/x_0

    REQUIRE:
      x_0 != 0
  }

  MAX_NORMALISATION_MODEL {
    dataset:
      x_i

    maximum:
      m =
        max(x_i)

    output:
      x_i_norm =
        x_i/m

    REQUIRE:
      m != 0

    RULE:
      negative_values_can_make_max_based_interpretation_nonintuitive
  }

  MAX_ABS_NORMALISATION_MODEL {
    m =
      max(abs(x_i))

    x_i_norm =
      x_i/m

    REQUIRE:
      m != 0

    RANGE:
      [-1,1]
  }

  SUM_NORMALISATION_MODEL {
    total:
      S =
        sum_i(x_i)

    normalized:
      p_i =
        x_i/S

    REQUIRE:
      S != 0

    RULE:
      probability_interpretation_requires_nonnegative_inputs
  }

  PROBABILITY_NORMALISATION_MODEL {
    weights:
      w_i >= 0

    total:
      Z =
        sum_i(w_i)

    probability:
      p_i =
        w_i/Z

    REQUIRE:
      Z > 0

    invariant:
      sum_i(p_i)=1
  }

  CONTINUOUS_PROBABILITY_MODEL {
    nonnegative_function:
      f(x)

    normalising_constant:
      Z =
        integral f(x)dx

    density:
      p(x) =
        f(x)/Z

    REQUIRE:
      0 < Z < infinity

    RULE:
      probability_density_may_have_units_inverse_to_variable
  }

  NORMALISING_CONSTANT_MODEL {
    unnormalised:
      q(x)

    constant:
      Z

    normalised:
      p(x) =
        q(x)/Z

    RULE:
      Z_may_depend_on_parameters_and_domain
  }

  SOFTMAX_MODEL {
    inputs:
      z_i

    output:
      p_i =
        exp(z_i)/
        sum_j(exp(z_j))

    properties:
      p_i > 0
      sum_i(p_i)=1

    RULE:
      numerical_implementation SHOULD use_shifted_logits_for_stability
  }

  STABLE_SOFTMAX_MODEL {
    m =
      max(z_i)

    p_i =
      exp(z_i-m)/
      sum_j(exp(z_j-m))

    RULE:
      subtracting_common_max_does_not_change_softmax_probabilities
  }

  MIN_MAX_MODEL {
    source_min:
      x_min

    source_max:
      x_max

    zero_one:
      x_norm =
        (x-x_min)/(x_max-x_min)

    REQUIRE:
      x_max != x_min

    RANGE_FOR_IN_RANGE_X:
      [0,1]
  }

  GENERAL_RANGE_MODEL {
    source:
      [x_min,x_max]

    target:
      [a,b]

    y =
      a+
      (x-x_min)*(b-a)/(x_max-x_min)

    REQUIRE:
      x_max != x_min
  }

  OUT_OF_RANGE_MODEL {
    new_x:
      outside_training_or_reference_range

    result:
      normalized_value_may_fall_outside_target_interval

    RULE:
      do_not_clip_unless_clipping_policy_is_explicit
  }

  CLIPPING_MODEL {
    normalized:
      y

    clipped:
      y_c =
        min(max(y,a),b)

    RULE:
      clipping_is_separate_information_losing_operation
  }

  Z_SCORE_MODEL {
    x:
      observed_value

    centre:
      mu

    scale:
      sigma

    z =
      (x-mu)/sigma

    REQUIRE:
      sigma > 0

    output:
      dimensionless
  }

  SAMPLE_Z_SCORE_MODEL {
    centre:
      x_bar

    scale:
      s

    z_i =
      (x_i-x_bar)/s

    REQUIRE:
      s > 0

    RULE:
      sample_and_population_parameter_context MUST be distinguished
  }

  STANDARDISATION_MODEL {
    common_definition:
      centre_by_mean
      scale_by_standard_deviation

    RULE:
      standardisation_is_specific_normalisation_family
      but_terms_are_not_universal_across_domains
  }

  CENTERING_MODEL {
    x_centered =
      x-c

    RULE:
      centring_alone_is_translation_not_scale_normalisation
  }

  ROBUST_NORMALISATION_MODEL {
    centre:
      median

    scale:
      IQR_or_MAD

    output:
      (x-centre)/scale

    REQUIRE:
      scale != 0

    RULE:
      scale_definition MUST be declared
  }

  MAD_MODEL {
    MAD =
      median_i(abs(x_i-median(x)))

    RULE:
      consistency_scaling_factor_if_used MUST be preserved
  }

  IQR_MODEL {
    IQR =
      Q_3-Q_1

    REQUIRE_FOR_DIVISION:
      IQR != 0
  }

  VECTOR_NORMALISATION_MODEL {
    vector:
      x

    norm:
      ||x||

    normalized:
      x_hat =
        x/||x||

    REQUIRE:
      ||x|| != 0

    invariant:
      ||x_hat||=1
      under_same_norm
  }

  L1_MODEL {
    norm:
      ||x||_1 =
        sum_i(abs(x_i))

    normalized:
      x/||x||_1
  }

  L2_MODEL {
    norm:
      ||x||_2 =
        sqrt(sum_i(x_i^2))

    normalized:
      x/||x||_2
  }

  LINF_MODEL {
    norm:
      ||x||_infinity =
        max_i(abs(x_i))

    normalized:
      x/||x||_infinity
  }

  ZERO_VECTOR_MODEL {
    vector:
      0

    norm:
      0

    RULE:
      zero_vector_cannot_be_unit_normalised_without_special_policy
  }

  MATRIX_NORMALISATION_MODEL {
    matrix:
      A

    possible_norms:
      Frobenius
      spectral
      induced_1
      induced_infinity

    output:
      A_norm =
        A/||A||

    RULE:
      matrix_norm_definition MUST be preserved
  }

  FROBENIUS_MODEL {
    ||A||_F =
      sqrt(sum_i sum_j abs(A_ij)^2)
  }

  FEATURE_NORMALISATION_MODEL {
    dataset:
      rows_observations
      columns_features

    process:
      normalise_each_feature_using_training_parameters

    RULE:
      training_parameters MUST be reused_for_validation_test_and_future_data
  }

  DATA_LEAKAGE_MODEL {
    prohibited_pattern:
      estimating_normalisation_parameters_from_test_or_future_data
      in_predictive_evaluation

    RULE:
      parameter_estimation_scope MUST be preserved
  }

  TRAINING_PARAMETER_MODEL {
    fields:
      mean
      standard_deviation
      minimum
      maximum
      median
      IQR
      reference_sample
      version

    RULE:
      transformation_parameters_are_part_of_model_state
  }

  BATCH_NORMALISATION_DISTINCTION_MODEL {
    machine_learning_batch_normalization:
      learned_or_running_statistics_plus_affine_parameters

    RULE:
      neural_network_batch_normalization != generic_measurement_normalisation
  }

  LAYER_NORMALISATION_DISTINCTION_MODEL {
    neural_network:
      normalises_features_within_declared tensor_axis

    RULE:
      axis_and_epsilon MUST be preserved
  }

  COMPOSITIONAL_MODEL {
    components:
      x_i >= 0

    closure:
      c_i =
        x_i/sum_j(x_j)

    REQUIRE:
      sum_j(x_j) > 0

    RULE:
      compositional_data_have_relative_information_and_special_statistical_geometry
  }

  CLOSURE_MODEL {
    target_total:
      K

    c_i =
      K*x_i/sum_j(x_j)

    REQUIRE:
      sum_j(x_j) != 0
  }

  PROPORTION_MODEL {
    total:
      sum_components

    proportion:
      component/total

    RULE:
      numerator_and_denominator_basis MUST match
  }

  PERCENT_NORMALISATION_MODEL {
    percentage:
      100*component/total

    REQUIRE:
      total != 0
  }

  SIGNAL_AMPLITUDE_MODEL {
    signal:
      x(t)

    peak_normalised:
      x_norm(t) =
        x(t)/max(abs(x(t)))

    REQUIRE:
      nonzero_peak
  }

  SIGNAL_RMS_MODEL {
    RMS:
      sqrt(mean(x^2))

    normalized:
      x/RMS

    REQUIRE:
      RMS > 0
  }

  SIGNAL_ENERGY_MODEL {
    energy:
      E =
        integral(abs(x(t))^2 dt)
      or_discrete_equivalent

    unit_energy_normalised:
      x/sqrt(E)

    REQUIRE:
      E > 0
  }

  AUDIO_NORMALISATION_MODEL {
    possible:
      peak
      RMS
      loudness

    RULE:
      loudness_normalisation_requires_declared_standard_and_gating_method
  }

  IMAGE_INTENSITY_MODEL {
    possible:
      divide_by_max_code
      map_range
      subtract_mean_and_scale
      histogram_based

    RULE:
      intensity_normalisation != spatial_rescaling
  }

  FLAT_FIELD_MODEL {
    image:
      corrected_by_reference_field

    generic:
      I_corr =
        (I-dark)/(flat-dark)

    RULE:
      denominator_nonzero_and_reference_uncertainty MUST be considered
  }

  SPECTRAL_NORMALISATION_MODEL {
    spectrum:
      may_normalise_by
        maximum
        area
        reference_peak
        continuum
        total_power

    RULE:
      method_changes_interpretation_and_must_be explicit
  }

  BASELINE_CORRECTION_DISTINCTION_MODEL {
    baseline_subtraction:
      x_corr =
        x-b

    RULE:
      baseline_subtraction_is_correction_or_centring
      not_ratio_normalisation
  }

  REFERENCE_SAMPLE_MODEL {
    sample_signal:
      S

    reference_signal:
      R

    normalized:
      N =
        S/R

    REQUIRE:
      R != 0

    RULE:
      shared_reference_uncertainty_creates_covariance_across_normalised_results
  }

  CONTROL_NORMALISATION_MODEL {
    experiment:
      treatment_value

    control:
      reference_value

    fold_change:
      treatment/control

    REQUIRE:
      control != 0

    RULE:
      control_definition_and_matching_conditions MUST be preserved
  }

  FOLD_CHANGE_MODEL {
    FC =
      x/x_ref

    log2_fold_change:
      log2(x/x_ref)
      WHEN x>0 AND x_ref>0

    RULE:
      fold_change_and_percent_change_are_distinct
  }

  INDEX_NUMBER_MODEL {
    base_period:
      x_0

    index:
      I =
        100*x/x_0

    REQUIRE:
      x_0 != 0

    RULE:
      base_period_and_rebasing_history MUST be preserved
  }

  REBASING_MODEL {
    old_index:
      I_old

    new_base_value:
      I_old_at_new_base

    new_index:
      100*I_old/I_base

    REQUIRE:
      I_base != 0
  }

  NONDIMENSIONALISATION_MODEL {
    dimensional_variable:
      X

    characteristic_scale:
      X_c

    dimensionless:
      X_star =
        X/X_c

    REQUIRE:
      same_dimension
      X_c != 0

    RULE:
      characteristic_scale_has_physical_model_semantics
  }

  MULTIVARIABLE_NONDIMENSIONALISATION_MODEL {
    variables:
      X_i

    scales:
      X_ci

    output:
      X_i_star =
        X_i/X_ci

    RULE:
      each_scale_must_match_corresponding_dimension
  }

  BUCKINGHAM_PI_MODEL {
    dimensionless_group:
      Pi =
        product_i(Q_i^a_i)

    RULE:
      Pi_group_generation_is_dimensional_analysis
      and_is_related_to_but_not_identical_with_simple_normalisation
  }

  COORDINATE_NORMALISATION_MODEL {
    coordinates:
      x

    transform:
      may_translate_and_scale_to_canonical_domain

    example:
      [-1,1]

    RULE:
      coordinate_normalisation_may_be_affine
  }

  HOMOGENEOUS_COORDINATE_DISTINCTION_MODEL {
    homogeneous_coordinates:
      projective_representation

    normalisation:
      divide_by_nonzero_last_coordinate

    RULE:
      projective_normalisation_has_special_geometric_semantics
  }

  QUATERNION_NORMALISATION_MODEL {
    quaternion:
      q

    unit_quaternion:
      q_hat =
        q/||q||

    REQUIRE:
      ||q|| != 0

    RULE:
      unit_quaternion_represents_rotation_under_declared convention
  }

  PROBABILITY_VECTOR_MODEL {
    vector:
      p_i

    normalisation:
      p_i/sum(p)

    REQUIRE:
      nonnegative_components
      positive_sum

    invariant:
      sum=1
  }

  HISTOGRAM_NORMALISATION_MODEL {
    counts:
      n_i

    probability_mass:
      p_i =
        n_i/sum(n_i)

    density:
      p_i/(bin_width_i)
      when_density_required

    RULE:
      probability_mass_and_probability_density_are_distinct
  }

  PDF_NORMALISATION_MODEL {
    density:
      p(x)

    requirement:
      integral_domain p(x)dx =
        1

    RULE:
      density_dimension_depends_on_variable_dimension
  }

  WAVEFUNCTION_NORMALISATION_MODEL {
    psi:
      complex_amplitude

    condition:
      integral(abs(psi)^2 dV) =
        1

    RULE:
      integration_measure_and_domain MUST be defined
  }

  EIGENVECTOR_NORMALISATION_MODEL {
    eigenvector:
      v

    arbitrary_nonzero_scalar_multiple:
      also_eigenvector

    common_normalisation:
      ||v||_2 =
        1

    RULE:
      sign_or_phase_ambiguity_may_remain_after_norm_normalisation
  }

  ORTHOGONALISATION_DISTINCTION_MODEL {
    normalisation:
      sets_vector_norm

    orthogonalisation:
      enforces_mutual_orthogonality

    RULE:
      normalisation != orthogonalisation
  }

  UNIT_VECTOR_MODEL {
    v_hat =
      v/||v||

    REQUIRE:
      v != 0
  }

  CALIBRATION_DISTINCTION_MODEL {
    calibration:
      establishes_measurement_relation_to_reference

    normalisation:
      mathematical transformation_relative_to_reference_or_scale

    RULE:
      calibration != normalisation
  }

  UNIT_CONVERSION_DISTINCTION_MODEL {
    conversion:
      changes_unit_representation

    normalisation:
      usually changes numeric reference scale_and_may_remove_dimension

    RULE:
      unit_conversion != normalisation
  }

  SCALING_DISTINCTION_MODEL {
    scaling:
      broad_family_of_magnitude_transformations

    normalisation:
      scaling_or_transformation_to_declared_reference_condition

    RULE:
      normalisation_is_more_specific_than_scaling_in_this_ontology
  }

  PHYSICAL_CHANGE_DISTINCTION_MODEL {
    normalisation:
      derived representation

    physical_change:
      change_in_measurand_or_system

    RULE:
      normalising_data_does_not_change_original_physical_quantity
  }

  INVERSE_TRANSFORMATION_MODEL {
    min_max:
      x =
        x_min+y*(x_max-x_min)    z_score:
      x =
        mu+z*sigma

    reference_ratio:
      x =
        x_norm*r

    RULE:
      inverse_requires_original_parameters_and_non-degenerate_scale
  }

  INFORMATION_LOSS_MODEL {
    invertible_examples:
      fixed_reference_ratio
      fixed_parameter_z_score
      nondegenerate_min_max

    noninvertible_examples:
      clipping
      normalise_vector_without_preserving_original_norm
      closure_without_total
      aggregation

    RULE:
      required_inverse_parameters MUST be preserved
  }

  ZERO_DENOMINATOR_MODEL {
    cases:
      zero_reference
      zero_standard_deviation
      zero_range
      zero_norm
      zero_total

    RULE:
      division_based_normalisation MUST define_failure_or_special_policy
  }

  EPSILON_MODEL {
    computational:
      denominator_adjusted_by_epsilon

    RULE:
      epsilon_changes_mathematical_transformation
      and_value_method_and_rationale MUST be preserved
  }

  MISSING_DATA_MODEL {
    parameters:
      may_be_estimated_from_available_data

    RULE:
      missing_data_policy MUST be defined
  }

  OUTLIER_MODEL {
    mean_min_max_SD:
      may_be_sensitive_to_outliers

    RULE:
      robust_normalisation MAY be preferable_when_declared_model_requires_resistance
  }

  DISTRIBUTION_EFFECT_MODEL {
    transformation:
      changes_location_scale_and_possible_shape

    RULE:
      normalisation_does_not_guarantee_normal_distribution
  }

  RANK_PRESERVATION_MODEL {
    positive_affine_or_positive_reference_scaling:
      preserves_order

    negative_scale:
      reverses_order

    nonlinear:
      depends_on_monotonicity

    RULE:
      rank_preservation MUST not_be_assumed_for_arbitrary_normalisation
  }

  UNCERTAINTY_REFERENCE_RATIO_MODEL {
    y =
      x/r

    first_order_variance:
      u_y^2 =
        (1/r)^2*u_x^2
        +(x/r^2)^2*u_r^2
        -2*x/r^3*cov(x,r)

    REQUIRE:
      r != 0

    RULE:
      reference_uncertainty MUST be included_when_material
  }

  MIN_MAX_UNCERTAINTY_MODEL {
    y =
      (x-a)/(b-a)

    RULE:
      if_min_and_max_are_estimated_or_uncertain
      propagate_their_uncertainty_and_covariance
  }

  Z_SCORE_UNCERTAINTY_MODEL {
    z =
      (x-mu)/sigma

    RULE:
      uncertainty_in_mu_and_sigma_must_be included_when_they_are_estimated_measurement_parameters
  }

  VECTOR_COVARIANCE_MODEL {
    transformation:
      y =
        f(x)

    first_order:
      Sigma_y =
        J*Sigma_x*J_transpose

    RULE:
      nonlinear_normalisation_can_create_correlations_between_components
  }

  SUM_NORMALISATION_COVARIANCE_MODEL {
    p_i =
      x_i/S

    S =
      sum_j(x_j)

    RULE:
      normalized_components_are_statistically_dependent_due_to_shared_denominator
  }

  SHARED_REFERENCE_MODEL {
    y_i =
      x_i/r

    RULE:
      common_uncertain_reference_creates_covariance_between_y_i
  }

  SIGNIFICANT_FIGURES_MODEL {
    transformation:
      should_not_create_false_measurement_precision

    RULE:
      final_reporting_should_follow_propagated_uncertainty
  }

  ROUNDING_MODEL {
    internal:
      preserve_full_precision

    final:
      round_after_normalisation_under_declared_policy
  }

  NUMERICAL_STABILITY_MODEL {
    risks:
      very_small_denominator
      overflow_in_exponentials
      catastrophic_cancellation
      poorly_scaled_data

    RULE:
      stable_algorithm SHOULD be used
  }

  CONDITIONING_MODEL {
    normalisation:
      may_improve_numerical_conditioning

    examples:
      regression
      optimisation
      matrix_computation

    RULE:
      improved_conditioning_does_not_change_original_measurement_information
  }

  DATASET_SHIFT_MODEL {
    future_data:
      may_have_different_distribution

    RULE:
      normalisation_parameters_should_not_be silently_reestimated_when_model_requires_fixed_reference
  }

  DRIFT_MODEL {
    reference_parameters:
      may_change_over_time

    RULE:
      time-varying_normalisation_requires_versioned_reference_state
  }

  CALIBRATION_RANGE_MODEL {
    normalised_measurement:
      may_be_valid_only_within_reference_or_calibration_range

    RULE:
      extrapolated_normalised_values SHOULD be flagged
  }

  METADATA_MODEL {
    fields:
      normalisation_identifier
      method
      input_quantity
      input_unit
      output_quantity
      output_unit
      reference
      centre
      scale
      minimum
      maximum
      norm
      total
      training_dataset_identifier
      parameter_version
      uncertainty
      covariance
      inverse_parameters
      quality_flags
      provenance

    RULE:
      normalisation_metadata MUST support_reconstruction_and_inverse_when_possible
  }

  RELATIONSHIPS {
    Normalisation -> TRANSFORMS -> InputValue
    Normalisation -> PRODUCES -> NormalisedValue
    Normalisation -> USES -> ReferenceScale
    ZScoreNormalisation -> USES -> Mean
    ZScoreNormalisation -> USES -> StandardDeviation
    MinMaxNormalisation -> USES -> MinimumAndMaximum
    VectorNormalisation -> USES -> Norm
    ProbabilityNormalisation -> USES -> NormalisingConstant
    Nondimensionalisation -> PRODUCES -> DimensionlessQuantity
    SharedReference -> CREATES_POTENTIAL -> Covariance
    NormalisationParameters -> QUALIFY -> DerivedData
  }

  SEMANTIC_EQUIVALENCE {
    "normalisation" ~= normalization
    "unit norm normalisation" ~= vector_divided_by_declared_norm
    "z-score normalisation" ~= mean_centering_and_standard_deviation_scaling WHEN declared_context

    normalisation != unit_conversion
    normalisation != calibration
    normalisation != physical_change
    normalisation != centring_in_all_contexts
    normalisation != standardisation_in_all_contexts
    normalisation != nondimensionalisation_in_all_contexts
    normalisation != clipping
    normalisation != interpolation
    normalised_value != raw_measurement
  }

  CONSTRAINTS {
    normalisation_method_must_be_defined = true
    divisor_reference_or_scale_must_be_nonzero = true
    nondimensional_reference_must_have_compatible_dimension = true
    min_max_normalisation_requires_nonzero_range = true
    z_score_requires_positive_nonzero_scale = true
    vector_unit_normalisation_requires_nonzero_norm = true
    probability_normalisation_requires_positive_total = true
    training_derived_parameters_must_not_use_test_data_when_evaluation_requires_separation = true
    inverse_parameters_should_be_preserved_when_reversibility_is_required = true
    shared_reference_dependencies_should_be_preserved = true
    normalisation_and_calibration_are_not_semantically_equivalent = true
    provenance_must_be_preserved = true
  }

  MEASUREMENT_MODEL {
    RECORD:
      normalisation_identifier
      input_identifier
      input_value
      input_unit
      input_dimension
      method
      reference_value
      reference_unit
      centre
      scale
      minimum
      maximum
      norm_type
      norm_value
      total
      target_range
      output_value
      output_unit
      output_dimension
      parameter_source
      parameter_version
      input_uncertainty
      parameter_uncertainty
      covariance
      output_uncertainty
      inverse_parameters
      quality_flags
      algorithm_version
      provenance

    RULE:
      normalised_result MUST remain_linked_to_raw_input_and_normalisation_parameters
  }

  REASONING_RULES {
    IF reference_normalisation
      AND reference != 0
      THEN output =
        input/reference

    IF input_and_reference_have_same_dimension
      THEN ratio_output_is_dimensionless

    IF min_max_normalisation
      AND maximum != minimum
      THEN output =
        (input-minimum)/(maximum-minimum)

    IF general_range_mapping
      AND source_max != source_min
      THEN output =
        target_min+
        (input-source_min)*(target_max-target_min)/(source_max-source_min)

    IF z_score_normalisation
      AND scale > 0
      THEN output =
        (input-centre)/scale

    IF vector_normalisation
      AND norm != 0
      THEN output_vector =
        input_vector/norm

    IF probability_weights_nonnegative
      AND sum_weights > 0
      THEN probabilities =
        weights/sum_weights

    IF shared_reference_uncertain
      THEN propagate_reference_uncertainty
      AND preserve_cross_result_covariance

    IF normalisation_parameters_estimated_from_training_data
      THEN reuse_same_parameters_for_validation_test_and_future_inference
      unless_explicit_retraining_occurs

    IF denominator_zero_or_near_zero
      THEN flag_invalid_or_unstable_normalisation
      and_apply_special_policy_only_if_declared

    IF clipping_applied_after_normalisation
      THEN record_as_separate_information_losing_step

    IF inverse_requested
      THEN require_saved_reference_centre_scale_range_norm_or_total_as_needed
  }

  VALIDATION {
    CHECK normalisation_method
    CHECK input_quantity_and_unit
    CHECK reference_or_scale
    CHECK denominator_nonzero
    CHECK dimensional_compatibility
    CHECK minimum_and_maximum
    CHECK centre_and_standard_deviation
    CHECK vector_norm
    CHECK probability_nonnegativity_and_total
    CHECK training_parameter_scope
    CHECK shared_reference_covariance
    CHECK uncertainty_propagation
    CHECK out_of_range_values
    CHECK clipping
    CHECK inverse_parameters
    CHECK numerical_stability
    CHECK parameter_version
    CHECK quality_flags
    CHECK provenance
  }

  CONFIDENCE {
    definition_confidence: 1.00
    reference_normalisation_confidence: 1.00
    min_max_confidence: 1.00
    z_score_confidence: 1.00
    vector_normalisation_confidence: 1.00
    probability_normalisation_confidence: 1.00
    uncertainty_propagation_confidence: 0.99
    domain_specific_normalisation_confidence: 0.98

    RULE:
      confidence decreases when method, reference, parameter source,
      denominator, uncertainty, training scope, inverse parameters,
      version or provenance is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_normalisation:
      identify_method
      identify_input
      resolve_reference_centre_scale_range_norm_or_total
      validate_domain_and_denominator
      compute_normalised_output
      propagate_uncertainty
      preserve_parameters_and_provenance

    ON parameter_revision:
      preserve_previous_parameters
      update_reference_centre_scale_range_or_norm
      create_new_parameter_version
      recompute_derived_values_when_policy_allows

    ON new_dataset:
      determine_whether_parameters_are_fixed_or_reestimated
      prevent_data_leakage_under_predictive_evaluation
      attach_dataset_and_parameter_version

    ON uncertainty_revision:
      preserve_raw_input_and_parameters
      update_input_or_reference_uncertainty
      recompute_output_uncertainty_and_covariance

    ON inverse_transformation:
      preserve_normalised_value
      apply_saved_parameters
      reconstruct_original_scale_when_transformation_is_invertible
      record_numeric_rounding_difference

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: Normalisation
    canonical_role: MathematicalReferenceTransformation

    interpretation_order:
      identify_input
      identify_normalisation_method
      identify_reference_centre_scale_range_norm_or_total
      identify_units_and_dimensions
      identify_parameter_source_and_version
      identify_training_or_reference_dataset
      identify_uncertainty_and_covariance
      identify_out_of_range_clipping_or_zero_denominator
      identify_inverse_parameters
      identify_algorithm
      identify_provenance
      validate_normalisation_semantics
      compute_or_invert_normalised_value

    ambiguity_controls:
      distinguish_normalisation_from_unit_conversion
      distinguish_normalisation_from_calibration
      distinguish_normalisation_from_physical_change
      distinguish_normalisation_from_centring
      distinguish_normalisation_from_standardisation_when_usage_differs
      distinguish_normalisation_from_nondimensionalisation_when_reference_has_physical_scale_role
      distinguish_normalisation_from_clipping
      distinguish_normalisation_from_interpolation
      distinguish_normalised_value_from_raw_measurement
      preserve_input_method_reference_parameter_source_uncertainty_version_and_provenance_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_units_measurement_mathematics_and_normalisation_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Measurement Mathematics
      -> Normalisation Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      terminology_model
      reference_normalisation_model
      dimensionless_reference_model
      baseline_normalisation_model
      relative_change_model
      percent_change_model
      max_normalisation_model
      max_abs_normalisation_model
      sum_normalisation_model
      probability_normalisation_model
      continuous_probability_model
      normalising_constant_model
      softmax_model
      stable_softmax_model
      min_max_model
      general_range_model
      out_of_range_model
      clipping_model
      z_score_model
      sample_z_score_model
      standardisation_model
      centering_model
      robust_normalisation_model
      MAD_model
      IQR_model
      vector_normalisation_model
      L1_model
      L2_model
      Linf_model
      zero_vector_model
      matrix_normalisation_model
      Frobenius_model
      feature_normalisation_model
      data_leakage_model
      training_parameter_model
      batch_normalisation_distinction_model
      layer_normalisation_distinction_model
      compositional_model
      closure_model
      proportion_model
      percent_normalisation_model
      signal_amplitude_model
      signal_RMS_model
      signal_energy_model
      audio_normalisation_model
      image_intensity_model
      flat_field_model
      spectral_normalisation_model
      baseline_correction_distinction_model
      reference_sample_model
      control_normalisation_model
      fold_change_model
      index_number_model
      rebasing_model
      nondimensionalisation_model
      multivariable_nondimensionalisation_model
      Buckingham_Pi_model
      coordinate_normalisation_model
      homogeneous_coordinate_distinction_model
      quaternion_normalisation_model
      probability_vector_model
      histogram_normalisation_model
      PDF_normalisation_model
      wavefunction_normalisation_model
      eigenvector_normalisation_model
      orthogonalisation_distinction_model
      unit_vector_model
      calibration_distinction_model
      unit_conversion_distinction_model
      scaling_distinction_model
      physical_change_distinction_model
      inverse_transformation_model
      information_loss_model
      zero_denominator_model
      epsilon_model
      missing_data_model
      outlier_model
      distribution_effect_model
      rank_preservation_model
      uncertainty_reference_ratio_model
      min_max_uncertainty_model
      z_score_uncertainty_model
      vector_covariance_model
      sum_normalisation_covariance_model
      shared_reference_model
      significant_figures_model
      rounding_model
      numerical_stability_model
      conditioning_model
      dataset_shift_model
      drift_model
      calibration_range_model
      metadata_model
      relationships
      semantic_equivalence
      constraints
      measurement_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      reference_or_baseline_normalisation_changes
      min_max_z_score_or_robust_method_changes
      vector_matrix_or_probability_normalisation_changes
      signal_image_spectral_or_compositional_method_changes
      nondimensionalisation_or_coordinate_model_changes
      inverse_or_information_loss_semantics_change
      uncertainty_or_covariance_model_changes
      training_parameter_or_dataset_scope_changes
      algorithm_or_parameter_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