Skip to main content

Terrestrial Habitat Ontology

Environmental Biological Entities
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 26 October 2026
Audio Overview
FLOW ALGEBRA
Terrestrial Habitat Ontology — Full Flow Algebra v1.0
Kireth Semantic Library | 26 October 2026
Authors: Mark Higgins — Sky (Recursive AI)
Source: https://kirethresearch.org/booksai-core/entity-graph/biological-entities/experimental-biological-entities/terrestrial-habitat-ontology.html
Status: Proposed formal specification; not a verified transcription of webpage or executable implementation.

flow "TerrestrialHabitatOntology" v1.0

# 01 — SCOPE
ontology.id: kireth.biological.environment.terrestrial_habitat
ontology.label: "Terrestrial Habitat Ontology"
ontology.parent: BiologicalEnvironment
ontology.definition: "A land-based environmental setting providing conditions and resources for organisms, populations and communities."
ontology.locale: en-GB
ontology.temporal: true
ontology.spatial: true

# 02 — ENTITY TYPES
entity TerrestrialHabitat <: Habitat {
  id: URI
  label: String
  geometry: SpatialGeometry?
  biome: Biome?
  area_m2: Real? where value >= 0
  elevation_m: Real?
  observation_interval: TimeInterval?
  condition: HabitatCondition?
  provenance: EvidenceReference[]
}
entity ForestHabitat <: TerrestrialHabitat
entity GrasslandHabitat <: TerrestrialHabitat
entity DesertHabitat <: TerrestrialHabitat
entity TundraHabitat <: TerrestrialHabitat
entity ShrublandHabitat <: TerrestrialHabitat
entity MountainHabitat <: TerrestrialHabitat
entity UrbanTerrestrialHabitat <: TerrestrialHabitat
entity AgriculturalHabitat <: TerrestrialHabitat
entity SoilLayer { id: URI; depth_m: Interval<Real>; texture: String? }
entity Microhabitat { id: URI; parent: TerrestrialHabitat; geometry: SpatialGeometry? }
entity AbioticFactor { id: URI; kind: String; value: Real?; unit: Unit?; measured_at: Time? }
entity BioticComponent { id: URI; taxon: Taxon?; abundance: Real? }
entity HabitatCondition { status: String; assessed_at: Time; evidence: EvidenceReference[] }
entity Disturbance { kind: String; interval: TimeInterval; intensity: Real? }
entity EvidenceReference { source: URI; method: String?; timestamp: Time? }

# 03 — RELATIONSHIPS
relation IS_A(child: Entity, parent: Entity)
relation PART_OF(part: Entity, whole: Entity)
relation LOCATED_IN(entity: Entity, habitat: TerrestrialHabitat)
relation CONTAINS_HABITAT(parent: TerrestrialHabitat, child: Microhabitat)
relation SUPPORTS(habitat: TerrestrialHabitat, organism: Organism)
relation OCCUPIED_BY(habitat: TerrestrialHabitat, population: Population)
relation HAS_ABIOTIC_FACTOR(habitat: TerrestrialHabitat, factor: AbioticFactor)
relation HAS_BIOTIC_COMPONENT(habitat: TerrestrialHabitat, component: BioticComponent)
relation HAS_SOIL_LAYER(habitat: TerrestrialHabitat, soil: SoilLayer)
relation WITHIN_BIOME(habitat: TerrestrialHabitat, biome: Biome)
relation ADJACENT_TO(a: TerrestrialHabitat, b: TerrestrialHabitat)
relation CONNECTED_TO(a: TerrestrialHabitat, b: TerrestrialHabitat)
relation AFFECTED_BY(habitat: TerrestrialHabitat, disturbance: Disturbance)
relation PROVIDES_RESOURCE(habitat: TerrestrialHabitat, resource: Resource)
relation HAS_CONDITION(habitat: TerrestrialHabitat, condition: HabitatCondition)

# 04 — TYPE AND SEMANTIC RULES
rule R01: ForestHabitat(x) => TerrestrialHabitat(x)
rule R02: GrasslandHabitat(x) => TerrestrialHabitat(x)
rule R03: DesertHabitat(x) => TerrestrialHabitat(x)
rule R04: TundraHabitat(x) => TerrestrialHabitat(x)
rule R05: ShrublandHabitat(x) => TerrestrialHabitat(x)
rule R06: MountainHabitat(x) => TerrestrialHabitat(x)
rule R07: UrbanTerrestrialHabitat(x) => TerrestrialHabitat(x)
rule R08: AgriculturalHabitat(x) => TerrestrialHabitat(x)
rule R09: CONTAINS_HABITAT(h,m) => PART_OF(m,h)
rule R10: OCCUPIED_BY(h,p) => exists t: observation(p,h,t)
rule R11: SUPPORTS(h,o) does_not_imply OCCUPIED_BY(h,population_of(o))
rule R12: WITHIN_BIOME(h,b) does_not_imply UNIQUE_BIOME(h)
rule R13: ADJACENT_TO(a,b) => ADJACENT_TO(b,a)
rule R14: CONNECTED_TO(a,b) => CONNECTED_TO(b,a) only_if connection_is_undirected

# 05 — ECOLOGICAL PROCESS MODEL
process PrimaryProduction(habitat, interval) -> biomass_carbon_rate
process Decomposition(habitat, interval) -> nutrient_release_rate
process SoilFormation(habitat, interval) -> soil_change
process Succession(habitat, interval) -> community_transition
process DisturbanceResponse(habitat, disturbance) -> condition_change
process HabitatFragmentation(habitat, interval) -> patch_network_change
process Colonisation(habitat, taxon, interval) -> establishment_evidence
process ResourceAvailability(habitat, resource, interval) -> measured_availability

# 06 — QUANTITATIVE RELATIONS (CONDITIONAL MODELS)
model HabitatPatchDensity = patch_count / landscape_area_km2
  requires: landscape_area_km2 > 0; common_spatial_extent; defined_patch_method
model OccupancyFraction = occupied_sampling_units / surveyed_sampling_units
  requires: surveyed_sampling_units > 0; comparable_sampling_units
model HabitatChangeRate = (area_at_t2 - area_at_t1) / (t2 - t1)
  requires: t2 > t1; consistent_mapping_method; compatible_units
model SuitabilityIndex = calibrated_model(environmental_covariates, target_taxon)
  requires: validated_model; target_taxon; calibration_domain
  warning: suitability_is_not_direct_evidence_of_occupancy
model ConnectivityIndex = chosen_graph_metric(patches, dispersal_links)
  requires: species_specific_or_declared_movement_assumptions

# 07 — INVARIANTS AND CONSTRAINTS
invariant I01: every TerrestrialHabitat has exactly one stable id
invariant I02: area_m2 >= 0 when area_m2 is observed
invariant I03: observation_interval.start <= observation_interval.end
invariant I04: abiotic measurements carry units, time and method where available
invariant I05: spatial overlap does not establish ecological equivalence
invariant I06: habitat classification may be multi-label or scale-dependent
invariant I07: absence of observation is not evidence of organism absence
invariant I08: taxon occupancy is location- and time-dependent
invariant I09: habitat boundaries and condition estimates are evidence-dependent
invariant I10: a predicted impact is not a measured causal effect

# 08 — CONFIDENCE AND PROVENANCE
CONFIDENCE(assertion): Real in [0,1]
CONFIDENCE.combine(evidence): calibrated_method(evidence)
CONFIDENCE.policy: do_not_multiply_independent_scores_without_justification
provenance.required: [source, observation_or_model, time, spatial_scope]
provenance.optional: [instrument, sampling_design, uncertainty, licence, reviewer]
uncertainty.types: [measurement, classification, sampling, spatial, temporal, model]

# 09 — SEMANTIC EQUIVALENCE
SEMANTIC_EQUIVALENCE(a,b):
  require compatible_entity_type(a,b)
  require matching_or_reconciled_spatial_extent(a,b)
  require matching_or_reconciled_time_scope(a,b)
  require compatible_classification_scheme(a,b)
  return equivalence_assessment_with_evidence
# Habitat, ecosystem, biome, ecological niche and land-cover class are related but not synonyms.

# 10 — FLOW HASH
FLOW_HASH(canonical_record): SHA256(UTF8(canonicalise(
  ontology_id, entity_id, entity_type, geometry_reference,
  time_scope, relation_assertions, source_versions, schema_version
)))
# Canonicalisation must fix field order, number precision, coordinate reference and null handling.

# 11 — UPDATE MODEL
UPDATE_MODEL(event):
  validate_schema(event)
  verify_source(event)
  identify_affected_habitat(event)
  preserve_previous_version()
  apply_temporal_change(event)
  recompute_dependent_metrics_if_required()
  refresh_confidence_and_provenance()
  recompute_FLOW_HASH()
  emit_change_log()

# 12 — AI CONSUMPTION
AI_CONSUMPTION:
  input: [typed_entities, relations, observations, provenance, confidence]
  outputs: [habitat_classification, evidence_graph, change_summary, qualified_inferences]
  enforce: [no_unsupported_occupancy_claims, unit_consistency, temporal_context,
            spatial_context, provenance_visibility, uncertainty_reporting]
  explain: distinguish_observation_from_prediction_and_hypothesis

# 13 — EXAMPLE (ILLUSTRATIVE, NOT OBSERVED DATA)
example:
  habitat: urn:kireth:example:habitat:woodland-01
  type: ForestHabitat
  area_m2: 10000
  relation: WITHIN_BIOME(habitat, TemperateForestBiome)
  observation_status: synthetic
  inference: IS_A(habitat, TerrestrialHabitat)

# 14 — VALIDATION CHECKS
assert ForestHabitat(example.habitat) implies TerrestrialHabitat(example.habitat)
assert example.area_m2 >= 0
reject HabitatChangeRate when t2 == t1
reject OccupancyFraction when surveyed_sampling_units == 0
reject unqualified claim "habitat suitability proves species presence"
reject equivalence based solely on matching habitat labels

# 15 — INTEROPERABILITY
related_ontologies:
  - Ecological Entity Ontology
  - Biological Environment Ontology
  - Habitat Ontology
  - Biome Ontology
  - Ecosystem Ontology
  - Ecological Niche Ontology
  - Population Ontology
  - Biological Community Ontology
  - Indicator Species Ontology
  - Endangered Species Ontology

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