Skip to main content

Genetic Drift Ontology

Genetics
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 30 September 2026
Audio Overview
AI Interpretation Note:
The following specifications represent a formal structural reasoning system for this page.
Execute as formal rules, not pseudocode.

flow "GeneticDriftOntology" v1.0

ENTITY GeneticDriftOntology {
  TYPE: BiologicalOntology
  DOMAIN: Genetics
  SUBJECT: GeneticDrift
  PURPOSE: FormalSemanticRepresentation
}

PAGE {
  TITLE: "Genetic Drift Ontology"
  PARENT_DOMAIN: "Genetics"
  CANONICAL_URL: "https://kirethresearch.org/booksai-core/ontologies/biological-ontologies/genetics/genetic-drift-ontology.html"
  AUTHORS: ["Mark Anthony Higgins", "Sky Recursive AI"]
}

# ============================================================
# CORE MODEL
# ============================================================

PROCESS GeneticDrift {
  IS_A: EvolutionaryProcess
  CHANGES: AlleleFrequency
  MECHANISM: RandomSampling
  STRONGEST_WHEN: EffectivePopulationSizeIsSmall
  MAY_RESULT_IN: [AlleleFixation, AlleleLoss, ReducedGeneticDiversity]
}

ENTITY Population {
  COMPOSED_OF: Individuals
  HAS: [PopulationSize, EffectivePopulationSize, AlleleFrequencies]
}

ENTITY Allele {
  IS_A: AlternativeStateAtGeneticLocus
  HAS_FREQUENCY_IN: Population
}

ENTITY AlleleFrequency {
  DESCRIBES: RelativeFrequencyOfAllele
  WITHIN: Population
}

ENTITY Generation {
  REPRESENTS: ReproductiveTimeStep
}

RULE DriftDefinition {
  IF AlleleFrequency changes_due_to_random_sampling
  THEN process := GeneticDrift
}

# ============================================================
# RANDOM SAMPLING
# ============================================================

PROCESS RandomGeneticSampling {
  SAMPLES: Alleles
  FROM: ParentalGenePool
  INTO: OffspringGenePool
}

ENTITY GenePool {
  CONTAINS: Alleles
  ASSOCIATED_WITH: Population
}

RULE SamplingRule {
  OffspringAlleleFrequency :=
    random_sample(
      ParentalAlleleFrequency,
      EffectivePopulationSize
    )
}

RULE ExpectationRule {
  expected(OffspringAlleleFrequency) :=
    ParentalAlleleFrequency
  UNDER neutral_unbiased_sampling
}

RULE VarianceRule {
  stochastic_variance INCREASES
  AS EffectivePopulationSize DECREASES
}

# ============================================================
# EFFECTIVE POPULATION SIZE
# ============================================================

ENTITY EffectivePopulationSize {
  SYMBOL: Ne
  REPRESENTS: IdealizedPopulationSizeProducingComparableDrift
  MAY_DIFFER_FROM: CensusPopulationSize
}

ENTITY CensusPopulationSize {
  SYMBOL: N
  DESCRIBES: NumberOfIndividualsInPopulation
}

RULE EffectiveSizeConstraint {
  EffectivePopulationSize != CensusPopulationSize
  UNLESS demographic_conditions_make_them_equivalent
}

RULE DriftStrengthRule {
  IF Ne decreases
  THEN magnitude_of_random_allele_frequency_change MAY_INCREASE
}

# ============================================================
# FIXATION AND LOSS
# ============================================================

ENTITY AlleleFixation {
  OCCURS_WHEN: AlleleFrequency == 1
}

ENTITY AlleleLoss {
  OCCURS_WHEN: AlleleFrequency == 0
}

RULE FixationRule {
  IF p == 1
  THEN allele_state := Fixed
}

RULE LossRule {
  IF p == 0
  THEN allele_state := Lost
}

RULE NeutralFixationProbability {
  IF allele IS_SELECTIVELY_NEUTRAL
  THEN fixation_probability APPROXIMATES initial_allele_frequency
  UNDER standard_neutral_model
}

# ============================================================
# GENETIC DIVERSITY
# ============================================================

ENTITY GeneticDiversity {
  DESCRIBES: VariationWithinPopulation
  MAY_BE_MEASURED_BY: [
    Heterozygosity,
    AllelicRichness,
    NucleotideDiversity
  ]
}

ENTITY Heterozygosity {
  DESCRIBES: ProbabilityOfDifferentAllelesAtLocus
}

RULE DiversityLossRule {
  IF GeneticDrift continues_in_finite_population
  THEN expected_heterozygosity MAY_DECREASE_over_generations
  WITHOUT counteracting_forces
}

# ============================================================
# FOUNDER EFFECT
# ============================================================

PROCESS FounderEffect {
  SUBCLASS_OF: GeneticDrift
  OCCURS_WHEN: NewPopulationEstablishedBySmallSubset
  MAY_CHANGE: AlleleFrequencies
  MAY_REDUCE: GeneticDiversity
}

ENTITY FounderPopulation {
  DERIVED_FROM: SourcePopulation
  FOUNDED_BY: SmallSampleOfIndividuals
}

RULE FounderEffectRule {
  IF FounderPopulation IS_CREATED_BY small_nonrepresentative_sample
  THEN allele_frequencies MAY_DIFFER_FROM SourcePopulation
  THROUGH sampling_effect
}

# ============================================================
# POPULATION BOTTLENECK
# ============================================================

PROCESS PopulationBottleneck {
  SUBCLASS_OF: GeneticDriftContext
  INVOLVES: SharpReductionInPopulationSize
  MAY_REDUCE: EffectivePopulationSize
  MAY_REDUCE: GeneticDiversity
}

ENTITY BottleneckPopulation {
  EXPERIENCES: PopulationBottleneck
}

RULE BottleneckRule {
  IF population_size sharply_decreases
  THEN drift_strength MAY_INCREASE
  AND rare_alleles MAY_BE_LOST
}

RULE RecoveryConstraint {
  IF census_population_size recovers_after_bottleneck
  THEN genetic_diversity DOES_NOT_NECESSARILY immediately_recover
}

# ============================================================
# NEUTRAL EVOLUTION
# ============================================================

ENTITY NeutralAllele {
  IS_A: Allele
  HAS_NO_DEMONSTRATED_FITNESS_DIFFERENCE: true
}

PROCESS NeutralEvolution {
  MAY_BE_DRIVEN_BY: GeneticDrift
}

RULE NeutralFrequencyRule {
  IF alleles have_equal_fitness
  THEN random_frequency_change MAY_BE attributed_to drift
  WITH model_and_sampling_constraints
}

# ============================================================
# DRIFT VS SELECTION
# ============================================================

PROCESS NaturalSelection {
  CHANGES: AlleleFrequency
  THROUGH: DifferentialFitness
}

ENTITY Fitness {
  DESCRIBES: RelativeReproductiveContribution
}

RULE DriftSelectionDistinction {
  GeneticDrift := stochastic_sampling_effect
  NaturalSelection := fitness_related_systematic_effect
}

RULE AttributionConstraint {
  IF AlleleFrequency changes
  THEN DO_NOT_INFER GeneticDrift OR NaturalSelection
  WITHOUT evidence_or_model_comparison
}

# ============================================================
# DRIFT VS GENE FLOW
# ============================================================

PROCESS GeneFlow {
  TRANSFERS: Alleles
  BETWEEN: Populations
  THROUGH: MigrationAndReproduction
}

RULE DriftGeneFlowDistinction {
  GeneticDrift DOES_NOT_REQUIRE migration
  GeneFlow REQUIRES genetic_exchange_between_populations
}

# ============================================================
# DRIFT VS MUTATION
# ============================================================

PROCESS Mutation {
  CREATES: NewGeneticVariation
}

RULE DriftMutationDistinction {
  Mutation MAY_CREATE new_allele
  GeneticDrift CHANGES frequency_of_existing_alleles
}

# ============================================================
# WRIGHT-FISHER MODEL
# ============================================================

ENTITY WrightFisherModel {
  IS_A: PopulationGeneticModel
  MODELS: GeneticDrift
  ASSUMES: [
    DiscreteGenerations,
    RandomSampling,
    FixedPopulationSize,
    IdealizedReproduction
  ]
}

RULE WrightFisherTransition {
  IF diploid_population_size == N
     AND allele_frequency == p
  THEN next_generation_allele_count
       MAY_BE_MODELLED_AS Binomial(2*N, p)
}

RULE ModelConstraint {
  IF WrightFisherModel IS_USED
  THEN model_assumptions MUST_BE recorded
}

# ============================================================
# COALESCENT RELATIONSHIP
# ============================================================

ENTITY CoalescentProcess {
  MODELS: AncestralLineages
  BACKWARD_IN_TIME: true
  DEPENDS_ON: EffectivePopulationSize
}

ENTITY CoalescenceTime {
  DESCRIBES: TimeToCommonAncestor
}

RULE CoalescentDriftRelation {
  IF EffectivePopulationSize IS_SMALLER
  THEN expected_coalescence_times MAY_BE_SHORTER
  UNDER standard_neutral_conditions
}

# ============================================================
# POPULATION DIFFERENTIATION
# ============================================================

ENTITY GeneticDifferentiation {
  DESCRIBES: GeneticDifferenceBetweenPopulations
}

ENTITY F_ST {
  IS_A: PopulationDifferentiationStatistic
}

RULE DivergenceRule {
  IF isolated_populations experience_independent_drift
  THEN genetic_differentiation MAY_INCREASE
  WITHOUT sufficient_gene_flow
}

# ============================================================
# TEMPORAL CHANGE
# ============================================================

ENTITY TemporalAlleleFrequencySeries {
  RECORDS: AlleleFrequency
  ACROSS: GenerationsOrTimepoints
}

RULE TemporalDriftInference {
  IF temporal_frequency_changes
     ARE_COMPATIBLE_WITH neutral_sampling_model
  THEN drift_hypothesis MAY_BE_SUPPORTED
  WITH uncertainty
}

# ============================================================
# STOCHASTICITY
# ============================================================

ENTITY StochasticProcess {
  PRODUCES: ProbabilisticOutcomes
}

RELATION GeneticDrift IS_A StochasticProcess

RULE ReplicatePopulationRule {
  IF identical_starting_populations evolve_under_independent_drift
  THEN trajectories MAY_DIVERGE
}

# ============================================================
# DEMOGRAPHIC CONTEXT
# ============================================================

ENTITY DemographicHistory {
  MAY_INCLUDE: [
    PopulationExpansion,
    PopulationDecline,
    Bottleneck,
    FounderEvent,
    PopulationSplit
  ]
  AFFECTS: DriftDynamics
}

RULE DemographyConstraint {
  IF drift_effects ARE_INTERPRETED
  THEN DemographicHistory SHOULD_BE considered
}

# ============================================================
# EVIDENCE
# ============================================================

ENTITY Evidence {
  TYPES: [
    TemporalFrequencyEvidence,
    PopulationGenomicEvidence,
    DemographicEvidence,
    ExperimentalPopulationEvidence,
    SimulationEvidence,
    StatisticalEvidence,
    ComparativeEvidence,
    LiteratureEvidence
  ]
}

RULE EvidenceConvergence {
  IF IndependentEvidenceSources AGREE
  THEN Confidence := increase(Confidence)
}

RULE EvidenceConflict {
  IF EvidenceSources CONFLICT
  THEN {
    PRESERVE competing_models
    RECORD population_definition
    RECORD effective_population_size
    RECORD demographic_history
    RECORD timepoints
    RECORD statistical_model
    RECORD provenance
    REDUCE confidence
    REQUIRE further_validation
  }
}

# ============================================================
# SEMANTIC RELATIONSHIPS
# ============================================================

RELATION GeneticDrift CHANGES AlleleFrequency
RELATION GeneticDrift DEPENDS_ON EffectivePopulationSize
RELATION GeneticDrift MAY_CAUSE AlleleFixation
RELATION GeneticDrift MAY_CAUSE AlleleLoss
RELATION GeneticDrift MAY_REDUCE GeneticDiversity
RELATION FounderEffect IS_A GeneticDrift
RELATION PopulationBottleneck AMPLIFIES GeneticDrift
RELATION GeneticDrift MAY_INCREASE GeneticDifferentiation

# ============================================================
# SEMANTIC EQUIVALENCE
# ============================================================

SEMANTIC_EQUIVALENCE {
  "genetic drift" ~= "random genetic drift"
  "allele fixation" ~= "fixation of an allele"
  "allele loss" ~= "loss of an allele from population"
  "founder effect" ~= "founder-event drift" WHEN population_foundation_context
  "effective population size" ~= "Ne" WHEN notation_context_is_defined
}

RULE EquivalenceConstraint {
  IF terms ARE semantic_equivalents
  THEN preserve_population()
  AND preserve_locus()
  AND preserve_timepoint()
  AND preserve_demographic_context()
  AND prevent_false_identity()
}

# ============================================================
# CONFIDENCE MODEL
# ============================================================

CONFIDENCE GeneticDriftAssertion {
  INPUTS: [
    population_sampling_quality,
    temporal_data_quality,
    effective_population_size_support,
    demographic_model_support,
    statistical_support,
    simulation_support,
    replication,
    source_independence,
    semantic_consistency
  ]

  SCORE := weighted_sum(INPUTS)

  LEVEL :=
    IF SCORE >= 0.90 THEN "very_high"
    ELSE IF SCORE >= 0.75 THEN "high"
    ELSE IF SCORE >= 0.55 THEN "moderate"
    ELSE IF SCORE >= 0.35 THEN "low"
    ELSE "uncertain"
}

# ============================================================
# REASONING RULES
# ============================================================

RULE FrequencyChangeInference {
  IF AlleleFrequency(time2) != AlleleFrequency(time1)
  THEN frequency_change := observed
  BUT mechanism := unresolved
}

RULE DriftInference {
  IF frequency_change IS_COMPATIBLE_WITH stochastic_sampling
     AND population_is_finite
     AND alternative_forces_are_modelled
  THEN GeneticDrift MAY_BE_SUPPORTED
}

RULE FounderInference {
  IF new_population derives_from small_subset
     AND allele_frequencies differ_from_source
  THEN FounderEffect MAY_BE_SUPPORTED
}

RULE BottleneckInference {
  IF population experienced_severe_size_reduction
     AND diversity_loss IS_OBSERVED
  THEN bottleneck_related_drift MAY_BE_SUPPORTED
}

RULE FixationInference {
  IF allele_frequency reaches 1
  THEN AlleleFixation EXISTS
  BUT fixation_cause := unresolved_without_evidence
}

# ============================================================
# QUERY MODEL
# ============================================================

QUERY GeneticDriftLookup(population_identifier) {
  RETURN [
    population,
    effective_population_size,
    allele_frequency_trajectories,
    fixation_events,
    loss_events,
    genetic_diversity,
    bottleneck_history,
    founder_events,
    demographic_context,
    evidence,
    confidence
  ]
}

QUERY AlleleDriftLookup(population, locus, allele) {
  RETURN [
    initial_frequency,
    temporal_frequencies,
    effective_population_size,
    fixation_or_loss_status,
    selection_context,
    migration_context,
    mutation_context,
    drift_support,
    confidence
  ]
}

QUERY DriftModelLookup(population) {
  RETURN [
    model,
    assumptions,
    effective_population_size,
    demographic_parameters,
    expected_frequency_variance,
    observed_frequency_variance,
    model_fit,
    confidence
  ]
}

# ============================================================
# UPDATE MODEL
# ============================================================

UPDATE_MODEL {
  ON new_genetic_drift_evidence:
    validate_provenance()
    define_population()
    identify_organism()
    normalize_locus_and_allele_identifiers()
    record_timepoints()
    normalize_allele_frequencies()
    estimate_effective_population_size()
    capture_demographic_history()
    model_selection_and_gene_flow()
    compare_drift_models()
    preserve_competing_explanations()
    recalculate_confidence()
    regenerate_population_relationships()
    update_flow_hash()
}

# ============================================================
# AI CONSUMPTION
# ============================================================

AI_CONSUMPTION {
  MODE: FormalSemanticReasoning
  PARSE_AS: ExecutableFlowAlgebra

  PRIORITIES: [
    population_definition,
    allele_identity,
    locus_identity,
    allele_frequency,
    effective_population_size,
    temporal_context,
    demographic_history,
    competing_evolutionary_forces,
    evidence_provenance,
    confidence
  ]

  REQUIREMENTS: [
    preserve_population_context,
    preserve_species_context,
    preserve_locus_and_allele_identity,
    preserve_timepoint,
    distinguish_effective_from_census_population_size,
    distinguish_drift_from_selection,
    distinguish_drift_from_gene_flow,
    distinguish_drift_from_mutation,
    distinguish_observed_frequency_change_from_causal_mechanism,
    preserve_model_assumptions_and_uncertainty
  ]
}

# ============================================================
# VALIDATION
# ============================================================

VALIDATE {
  REQUIRE GeneticDrift
  REQUIRE Population
  REQUIRE AlleleFrequency
  REQUIRE EffectivePopulationSize
  REQUIRE RandomGeneticSampling
  REQUIRE AlleleFixation
  REQUIRE AlleleLoss
  REQUIRE FounderEffect
  REQUIRE PopulationBottleneck
  REQUIRE Evidence
  REQUIRE CONFIDENCE
  REQUIRE SEMANTIC_EQUIVALENCE
  REQUIRE UPDATE_MODEL
  REQUIRE AI_CONSUMPTION

  ASSERT GeneticDrift != NaturalSelection
  ASSERT GeneticDrift != GeneFlow
  ASSERT GeneticDrift != Mutation
  ASSERT EffectivePopulationSize != CensusPopulationSize UNLESS justified
  ASSERT observed_frequency_change != proof_of_drift
}

# ============================================================
# FLOW HASH
# ============================================================

FLOW_HASH {
  ALGORITHM: SHA-256
  INPUT: canonicalize(
    entities,
    relations,
    processes,
    rules,
    semantic_equivalence,
    confidence_model,
    update_model,
    ai_consumption
  )
  PURPOSE: integrity_and_version_tracking
}

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