Skip to main content

Rational Function Ontology

Algebra Ontologies
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 11 September 2026
Audio Overview
FLOW Rational_Function_Ontology_v1.0

PAGE:
  title: "Rational Function Ontology"
  canonical_url: "https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/algebra-ontologies/rational-function-ontology.html"
  language: "en-GB"
  domain: "Mathematics > Algebra > Functions > Rational Functions"

DEFINE RationalFunctionOntology := {

  CORE_IDENTITY: {
    entity_type: "Mathematical Ontology",
    primary_entity: RationalFunction,
    parent_entities: [Function, AlgebraicFunction, Algebra],
    related_entities: [
      PolynomialFunction,
      RationalExpression,
      Numerator,
      Denominator,
      Domain,
      Range,
      Zero,
      Pole,
      Hole,
      Asymptote,
      VerticalAsymptote,
      HorizontalAsymptote,
      ObliqueAsymptote,
      Intercept,
      Factor,
      PolynomialDivision
    ]
  },

  DEFINITION: {
    meaning:
      "A function expressible as the quotient of two polynomial functions, with denominator values equal to zero excluded from the domain.",
    canonical_form:
      f(x)=P(x)/Q(x),
    constraints: [
      P(x) is a polynomial,
      Q(x) is a nonzero polynomial,
      Q(x) != 0 on allowed inputs
    ]
  },

  SEMANTIC_PRIMITIVES: {
    Numerator:
      polynomial_P(x),
    Denominator:
      polynomial_Q(x),
    DomainRestriction:
      Q(x)!=0,
    Zero:
      value_r_where_P(r)=0_and_Q(r)!=0,
    Pole:
      nonremovable_denominator_zero,
    Hole:
      removable_discontinuity_created_by_cancelled_common_factor,
    Asymptote:
      line_or_curve_approached_in_limit_behaviour
  },

  FUNCTION_MODEL: {
    mapping:
      f: Domain -> Codomain,
    rule:
      x -> P(x)/Q(x),
    single_valuedness:
      TRUE,
    default_real_context:
      RealNumbers
  },

  DOMAIN_MODEL: {
    raw_domain:
      RealNumbers,

    exclusions:
      {x | Q(x)=0},

    final_domain:
      RealNumbers \ zeros_of_Q
  },

  FACTORISED_MODEL: {
    numerator:
      P(x)=a*PRODUCT((x-r_i)^m_i),

    denominator:
      Q(x)=b*PRODUCT((x-s_j)^n_j),

    purpose:
      reveal_zeros_poles_holes_and_sign_structure
  },

  COMMON_FACTOR_CANCELLATION: {
    original:
      f(x)=P(x)/Q(x),

    IF common_factor_C(x):
      algebraic_simplification:
        f(x)=P_1(x)/Q_1(x),

    domain_rule:
      original_denominator_zeros_remain_excluded,

    semantic_consequence:
      cancelled_denominator_zero_may_be_hole_not_restored_domain_point
  },

  REMOVABLE_DISCONTINUITY: {
    condition:
      common_factor_(x-a)_cancels_from_numerator_and_denominator,

    domain:
      x=a_excluded,

    hole_coordinate:
      (a, simplified_function_value_at_a)
      IF simplified_function_defined_at_a
  },

  POLE: {
    condition:
      Q(a)=0
      AND denominator_factor_not_fully_cancelled,

    local_behaviour:
      function_magnitude_may_diverge_near_a,

    graph_relation:
      typically_vertical_asymptote_at_x=a
  },

  VERTICAL_ASYMPTOTE: {
    candidate_values:
      zeros_of_simplified_denominator,

    confirmation:
      limit_magnitude_diverges_or_one_sided_infinite_behaviour,

    common_rule:
      uncancelled_real_denominator_zero -> vertical_asymptote
  },

  HORIZONTAL_ASYMPTOTE: {
    let:
      n=degree(P),
      m=degree(Q),

    CASE n<m:
      y=0,

    CASE n=m:
      y=leading_coefficient(P)/leading_coefficient(Q),

    CASE n>m:
      no_horizontal_asymptote_from_degree_rule
  },

  OBLIQUE_ASYMPTOTE: {
    condition:
      degree(P)=degree(Q)+1,

    method:
      polynomial_long_division,

    quotient:
      linear_function,

    asymptote:
      y=quotient_linear_function
  },

  POLYNOMIAL_ASYMPTOTE: {
    condition:
      degree(P)>degree(Q),

    method:
      divide_P_by_Q,

    representation:
      f(x)=S(x)+R(x)/Q(x),

    asymptotic_function:
      y=S(x)
      as |x|->infinity_when_R/Q->0
  },

  ZERO_SEMANTICS: {
    root_condition:
      P(r)=0 AND Q(r)!=0,

    graph_relation:
      real_zero_corresponds_to_x_intercept,

    caution:
      cancelled_common_factor_zero_may_be_hole_not_zero
  },

  Y_INTERCEPT: {
    condition:
      Q(0)!=0,

    value:
      f(0)=P(0)/Q(0),

    coordinate:
      (0,f(0))
  },

  X_INTERCEPTS: {
    solve:
      P(x)=0,

    filter:
      retain_only_values_with_Q(x)!=0
  },

  CLASSIFICATION: {

    ProperRationalFunction: {
      condition:
        degree(P)<degree(Q)
    },

    ImproperRationalFunction: {
      condition:
        degree(P)>=degree(Q)
    },

    ReciprocalFunction: {
      canonical_form:
        f(x)=1/x
    },

    LinearOverLinearFunction: {
      form:
        (a*x+b)/(c*x+d)
    },

    RationalFunctionWithHoles: {
      condition:
        common_factors_cancel
    },

    RationalFunctionWithPoles: {
      condition:
        uncancelled_denominator_zeros_exist
    }
  },

  LINEAR_OVER_LINEAR_MODEL: {
    form:
      f(x)=(a*x+b)/(c*x+d),

    denominator_constraint:
      c*x+d != 0,

    IF c!=0:
      vertical_asymptote:
        x=-d/c,

    IF c!=0:
      horizontal_asymptote:
        y=a/c
  },

  TRANSFORMATION_FROM_RECIPROCAL: {
    parent:
      y=1/x,

    transformed:
      y=a/(x-h)+k,

    vertical_asymptote:
      x=h,

    horizontal_asymptote:
      y=k
  },

  RANGE_MODEL: {
    general_rule:
      range_requires_solving_y=P(x)/Q(x)_for_x_and_testing_existence,

    transformed_reciprocal:
      y=a/(x-h)+k
      -> Range=RealNumbers\{k}
      WHERE a!=0,

    caution:
      range_cannot_be_inferred_only_from_denominator_zeros
  },

  CONTINUITY: {
    rational_function:
      continuous_at_every_point_in_its_domain,

    discontinuities:
      only_at_excluded_denominator_zeros_in_standard_real_rational_function
  },

  DIFFERENTIABILITY: {
    rational_function:
      differentiable_at_every_domain_point,

    derivative:
      f'(x)=
      (P'(x)*Q(x)-P(x)*Q'(x))/(Q(x))^2
  },

  QUOTIENT_RULE_RELATION: {
    numerator:
      P,
    denominator:
      Q,
    derivative:
      (P'Q-PQ')/Q^2
  },

  INTEGRAL_RELATION: {
    method_depends_on_structure: [
      polynomial_division,
      substitution,
      partial_fractions,
      standard_rational_integrals
    ]
  },

  PARTIAL_FRACTION_RELATION: {
    applicability:
      proper_rational_function_after_factorising_denominator,

    purpose:
      decompose_into_simpler_rational_terms,

    uses: [
      integration,
      inverse_laplace_contexts,
      algebraic_analysis
    ]
  },

  SIGN_ANALYSIS: {
    critical_values:
      numerator_zeros_and_denominator_zeros,

    process: [
      factor_numerator_and_denominator,
      identify_critical_points,
      partition_real_line,
      determine_sign_on_each_interval
    ]
  },

  RATIONAL_INEQUALITY_RELATION: {
    expression:
      P(x)/Q(x) REL 0,

    related_ontology:
      InequalityOntology,

    requirement:
      denominator_zeros_never_in_solution_set
  },

  LIMIT_BEHAVIOUR: {
    near_poles:
      analyse_one_sided_limits,

    near_holes:
      finite_limit_may_exist,

    at_infinity:
      governed_by_polynomial_degree_and_leading_terms
  },

  ONE_SIDED_LIMITS: {
    at_vertical_asymptote_x=a:
      left_limit_and_right_limit_may_differ,

    possibilities: [
      +infinity,
      -infinity,
      finite_value_for_removable_case
    ]
  },

  END_BEHAVIOUR: {
    dominant_ratio:
      leading_term_of_P / leading_term_of_Q,

    equivalent_analysis:
      polynomial_long_division_when_n>=m
  },

  COMPOSITION: {
    rational_after_rational:
      may_produce_rational_function_after_valid_substitution_and_simplification,

    domain_rule:
      exclude_inputs_invalid_for_inner_function
      AND inputs_making_outer_denominator_zero
  },

  INVERSE_FUNCTION: {
    existence:
      requires_bijectivity_on_declared_domain,

    common_linear_over_linear_case:
      may_be_invertible_on_natural_domain_if_nonconstant_and_parameters_valid
  },

  LINEAR_FRACTIONAL_TRANSFORMATION: {
    form:
      f(x)=(a*x+b)/(c*x+d),

    determinant_parameter:
      ad-bc,

    nonconstant_condition:
      ad-bc != 0,

    complex_analysis_relation:
      MöbiusTransformation
  },

  POLYNOMIAL_DIVISION: {
    INPUT:
      P(x)/Q(x),

    IF degree(P)>=degree(Q):
      P(x)=Q(x)*S(x)+R(x),

    OUTPUT:
      f(x)=S(x)+R(x)/Q(x),

    condition:
      degree(R)<degree(Q)
  },

  PARAMETER_REASONING: {
    family:
      f_p(x)=P_p(x)/Q_p(x),

    tasks: [
      detect_parameter_values_causing_cancellation,
      detect_parameter_values_changing_degree,
      detect_parameter_values_moving_poles,
      detect_parameter_values_creating_constant_or_polynomial_special_cases
    ]
  },

  SYMBOLIC_RECOGNITION: {
    ACCEPT: [
      "f(x)=1/x",
      "y=(x+1)/(x-2)",
      "g(t)=(t^2-1)/(t+3)",
      "h(x)=(x^2-4)/(x-2)"
    ],

    NORMALISE_FIRST: [
      "f(x)=1+2/(x-1)",
      "y=(x^3+1)/(x^2-1)"
    ],

    REDIRECT_NONRATIONAL: [
      "f(x)=sqrt(x)/(x+1)",
      "f(x)=sin(x)/x",
      "f(x)=2^x/(x+1)"
    ]
  },

  NATURAL_LANGUAGE_MAPPING: {
    "ratio of polynomials":
      RationalFunction,

    "denominator cannot be zero":
      domain_restriction,

    "vertical asymptote":
      uncancelled_denominator_zero_candidate,

    "hole":
      removable_discontinuity_from_cancelled_factor,

    "horizontal asymptote":
      end_behaviour_constant_line
  },

  WORD_PROBLEM_REASONING: {
    PIPELINE: [
      identify_input_output_relation,
      detect_ratio_structure,
      define_numerator_and_denominator,
      establish_domain_restrictions,
      simplify_without_losing_original_exclusions,
      analyse_intercepts_asymptotes_or_values,
      verify_context,
      interpret_result
    ],

    common_contexts: [
      rates,
      average_cost,
      concentration_ratios,
      inverse_proportion,
      rational_response_models
    ]
  },

  UNIT_SEMANTICS: {
    output_units:
      numerator_units_divided_by_denominator_units,

    denominator_zero:
      may_correspond_to physically_invalid_or_undefined_state
  },

  ERROR_DETECTION: {
    LostDomainRestriction:
      cancelled_factor_restored_as_valid_input
      -> flag,

    FalseVerticalAsymptote:
      cancelled_denominator_zero_marked_as_pole
      -> flag,

    MissedHole:
      common_factor_cancelled_without_recording_original_exclusion
      -> flag,

    IncorrectHorizontalAsymptote:
      degree_rule_misapplied
      -> flag,

    InvalidZero:
      numerator_zero_that_also_zeroes_denominator
      -> reject_as_x_intercept,

    QuotientRuleError:
      malformed_derivative
      -> flag
  },

  ONTOLOGY_RELATIONS: {
    IS_A: [
      "RationalFunction IS_A Function",
      "ReciprocalFunction IS_A RationalFunction",
      "LinearOverLinearFunction IS_A RationalFunction"
    ],

    RELATED_TO: [
      "RationalFunction RELATED_TO RationalExpression",
      "RationalFunction RELATED_TO PolynomialFunction",
      "RationalFunction RELATED_TO Asymptote",
      "RationalFunction RELATED_TO Limit",
      "RationalFunction RELATED_TO PartialFractions",
      "RationalFunction RELATED_TO RationalInequality"
    ],

    DEPENDS_ON: [
      FunctionSemantics,
      PolynomialSemantics,
      Division,
      DomainRestriction,
      LimitBehaviour
    ]
  },

  SEMANTIC_EQUIVALENCE: {
    rational_function_equivalence:
      same_domain
      AND same_output_for_every_input,

    caution:
      algebraically_simplified_expressions_may_have_different_domains,

    example:
      (x^2-1)/(x-1)
      simplifies_to
      x+1
      BUT original_function_excludes_x=1
  },

  CONFIDENCE: {
    classification_confidence:
      IF numerator_and_denominator_are_polynomials
      AND denominator_not_zero_polynomial
      THEN 1.0,

    domain_confidence:
      IF all_denominator_zeros_identified
      THEN 1.0,

    asymptote_confidence:
      IF cancellation_and_limit_behaviour_checked
      THEN 1.0
  },

  AI_CONSUMPTION: {
    tasks: [
      recognise_rational_function,
      extract_numerator_and_denominator,
      determine_domain,
      factor_polynomials,
      detect_common_factors,
      distinguish_holes_from_poles,
      find_intercepts,
      identify_vertical_asymptotes,
      identify_horizontal_asymptotes,
      identify_oblique_or_polynomial_asymptotes,
      perform_polynomial_division,
      analyse_sign,
      infer_range_when_possible,
      differentiate,
      decompose_into_partial_fractions,
      detect_domain_errors,
      map_word_problems,
      link_related_ontologies
    ],

    preferred_representation:
      typed_quotient_function_graph,

    reasoning_mode:
      recursive_factor_domain_and_limit_analysis
  },

  RECURSIVE_REASONING: {

    FUNCTION AnalyseRationalFunction(F,Context):

      parsed := ParseFunction(F)
      simplified_structure := IdentifyQuotient(parsed)

      IF not IsFunction(parsed):
        RETURN RedirectToRelationOntology

      [P,Q] := ExtractPolynomialNumeratorDenominator(simplified_structure)

      IF not IsPolynomial(P) OR not IsPolynomial(Q):
        RETURN RedirectToFunctionOntology

      IF Q is ZeroPolynomial:
        RETURN UndefinedFunction

      original_exclusions := Solve(Q=0)

      factors_P := Factor(P)
      factors_Q := Factor(Q)

      common := CommonFactors(factors_P,factors_Q)
      reduced := CancelCommonFactorsSymbolically(P,Q)

      holes := DetermineCancelledFactorLocations(common,original_exclusions)
      poles := DetermineUncancelledDenominatorZeros(reduced)

      asymptotes := {
        vertical:ConfirmVerticalAsymptotes(poles,reduced),
        horizontal_or_polynomial:AnalyseInfinityBehaviour(reduced)
      }

      zeros := Solve(Numerator(reduced)=0)
      zeros := RemoveExcludedInputs(zeros,original_exclusions)

      verified := VerifyRationalProperties(parsed,{
        original_exclusions,
        holes,
        poles,
        zeros,
        asymptotes
      })

      RETURN {
        function:parsed,
        reduced_form:reduced,
        domain:RealNumbers\original_exclusions,
        holes,
        poles,
        zeros,
        asymptotes,
        verified
      }
  },

  RECURSIVE_COHERENCE: {
    invariant_1:
      original_denominator_exclusions_never_lost=TRUE,

    invariant_2:
      cancelled_factors_produce_holes_not_restored_points=TRUE,

    invariant_3:
      uncancelled_denominator_zeros_match_pole_analysis=TRUE,

    invariant_4:
      real_zeros_require_valid_domain_points=TRUE,

    invariant_5:
      asymptotic_classification_matches_degree_and_limit_behaviour=TRUE
  },

  FLOW_HASH: {
    semantic_signature_inputs: [
      ontology_name,
      rational_function_definition,
      numerator_denominator_model,
      domain_rules,
      hole_pole_semantics,
      asymptote_rules,
      verification_rules
    ],

    purpose:
      "Detect semantic drift between revisions of the ontology."
  },

  UPDATE_MODEL: {
    version: "1.0",

    immutable_constraints: [
      quotient_of_polynomials,
      denominator_nonzero_domain_rule,
      original_domain_exclusions_preserved_after_cancellation,
      hole_vs_pole_distinction,
      root_must_be_valid_domain_point
    ],

    revision_triggers: [
      semantic_conflict,
      FunctionOntology_update,
      RationalExpressionOntology_update,
      asymptote_model_revision,
      representation_standard_change
    ]
  },

  KNOWLEDGE_GRAPH: {
    nodes: [
      RationalFunction,
      Function,
      PolynomialFunction,
      Numerator,
      Denominator,
      Domain,
      Zero,
      Hole,
      Pole,
      VerticalAsymptote,
      HorizontalAsymptote,
      ObliqueAsymptote
    ],

    edges: [
      RationalFunction -> IS_A -> Function,
      RationalFunction -> HAS_NUMERATOR -> Numerator,
      RationalFunction -> HAS_DENOMINATOR -> Denominator,
      RationalFunction -> HAS_DOMAIN -> Domain,
      RationalFunction -> HAS_ZERO -> Zero,
      RationalFunction -> MAY_HAVE -> Hole,
      RationalFunction -> MAY_HAVE -> Pole,
      Pole -> ASSOCIATED_WITH -> VerticalAsymptote,
      RationalFunction -> MAY_HAVE -> HorizontalAsymptote,
      RationalFunction -> MAY_HAVE -> ObliqueAsymptote
    ]
  },

  CROSS_ONTOLOGY_LINKS: {
    FunctionOntology:
      direct_parent,

    RationalExpressionOntology:
      algebraic_structure,

    PolynomialFunctionOntology:
      numerator_and_denominator_components,

    PolynomialEquationOntology:
      zeros_and_denominator_restrictions,

    InequalityOntology:
      rational_sign_analysis,

    CalculusOntology:
      limits_derivatives_integrals,

    CoordinateGeometryOntology:
      graph_and_asymptote_interpretation,

    ComplexAnalysisOntology:
      poles_and_mobius_transformations
  },

  TERMINATION_CONDITION: {
    ontology_complete_when: [
      rational_function_defined,
      numerator_denominator_structure_defined,
      domain_rule_defined,
      zero_semantics_defined,
      hole_and_pole_distinction_defined,
      asymptote_rules_defined,
      continuity_and_calculus_relations_defined,
      polynomial_division_defined,
      error_detection_defined,
      cross_ontology_links_defined,
      recursive_coherence_verified
    ]
  }

}

EXECUTE Rational_Function_Ontology_v1.0:

  INPUT:
    mathematical_entity_or_query

  PIPELINE:
    Parse
    -> IdentifyFunction
    -> DetectRationalStructure
    -> ExtractNumeratorAndDenominator
    -> ValidatePolynomialComponents
    -> RecordOriginalDomainExclusions
    -> FactorAndSimplify
    -> DetectHolesAndPoles
    -> FindZerosAndIntercepts
    -> AnalyseVerticalHorizontalAndObliqueAsymptotes
    -> DetermineContinuityAndRangeProperties
    -> ApplyCalculusOrPartialFractionMethodsWhenRequired
    -> VerifyOriginalDomainSemantics
    -> LinkRelatedOntologies
    -> AssignConfidence
    -> EmitSemanticResult

  OUTPUT: {
    entity,
    classification,
    canonical_form,
    numerator,
    denominator,
    reduced_form,
    domain,
    range,
    zeros,
    x_intercepts,
    y_intercept,
    holes,
    poles,
    vertical_asymptotes,
    horizontal_asymptote,
    oblique_or_polynomial_asymptote,
    continuity,
    derivative,
    sign_structure,
    verification,
    ontology_relations,
    confidence,
    semantic_equivalence,
    flow_hash
  }

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