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
Download Code
Copy to Clipboard