FLOW ALGEBRA
FREE RADICAL ONTOLOGY
Kireth Semantic Library — Chemical Foundations of Life
Source: https://kirethresearch.org/booksai-core/entity-graph/biological-entities/chemical-foundations-of-life/free-radical-ontology.html
Version: 1.0 | Date: 2026-10-15 | Locale: en-GB
Authors: Mark Higgins — Sky (Recursive AI)
Status: Companion formalisation; illustrative typed flow specification, not a verified executable implementation.
1. PURPOSE
Represent free radicals as chemical entities with one or more unpaired electrons, their formation, reactions, biological contexts, and evidence-qualified effects. Distinguish radical identity from the broader class of reactive oxygen species (ROS): not all ROS are radicals, and not all radicals are oxygen species.
2. TYPE SYSTEM
entity FreeRadical <: ChemicalSpecies {
id: URI; label: String; formula: String;
unpaired_electrons: Integer[1..]; charge: Integer;
radical_site: Optional[AtomOrOrbital];
phase: Optional[Phase]; biological_context: Set[Context];
evidence: Set[Evidence]; provenance: Provenance;
}
entity RadicalReaction {
reactants: Multiset[ChemicalSpecies]; products: Multiset[ChemicalSpecies];
mechanism: ReactionMechanism; conditions: Set[Condition];
rate_constant: Optional[MeasuredValue]; evidence: Set[Evidence];
}
entity BiologicalTarget { id: URI; kind: Protein|Lipid|NucleicAcid|Other; }
entity Observation { measurement: MeasuredValue; method: String; context: Context; }
entity Evidence { source: URI; method: String; quality: String; }
entity Provenance { source: URI; version: String; observed_at: Optional[DateTime]; }
entity Context { organism: Optional[String]; compartment: Optional[String]; conditions: Set[String]; }
3. EXEMPLAR ENTITIES
radical HydroxylRadical { formula: "HO•"; charge: 0; unpaired_electrons: 1; }
radical Superoxide { formula: "O2•−"; charge: -1; unpaired_electrons: 1; }
radical NitricOxide { formula: "NO•"; charge: 0; unpaired_electrons: 1; }
radical LipidPeroxyl { formula: "LOO•"; charge: 0; unpaired_electrons: 1; }
nonradical HydrogenPeroxide { formula: "H2O2"; unpaired_electrons: 0; }
# Hydrogen peroxide is ROS but not a free radical.
4. TYPED RELATIONSHIPS
relation IS_A(FreeRadical, ChemicalSpecies)
relation PARTICIPATES_IN(ChemicalSpecies, RadicalReaction)
relation GENERATED_BY(FreeRadical, RadicalReaction)
relation REACTS_WITH(FreeRadical, ChemicalSpecies)
relation TARGETS(FreeRadical, BiologicalTarget)
relation OCCURS_IN(RadicalReaction, Context)
relation DETECTED_BY(FreeRadical, Observation)
relation SCAVENGED_BY(FreeRadical, ChemicalSpecies)
relation SUPPORTED_BY(Claim, Evidence)
relation DERIVED_FROM(Claim, Provenance)
relation MAY_CONTRIBUTE_TO(RadicalReaction, BiologicalOutcome)
5. FLOW OPERATORS
operator IDENTIFY_SPECIES(formula, electronic_state, charge) -> Candidate[ChemicalSpecies]
operator CLASSIFY_RADICAL(species) -> Classification
operator LINK_REACTION(reactants, products, conditions) -> RadicalReaction
operator BALANCE(reaction) -> ValidationResult
operator TRACE_PATHWAY(reaction_graph, origin, depth_limit) -> Set[Path]
operator EVALUATE_EVIDENCE(claim, evidence) -> ConfidenceAssessment
operator RESOLVE_ALIAS(label, context) -> CandidateSet
operator VALIDATE_GRAPH(graph) -> ValidationReport
operator SERIALISE(graph, format) -> Document
6. INFERENCE RULES
R1: unpaired_electrons(x) >= 1 => FreeRadical(x).
R2: FreeRadical(x) AND contains_oxygen(x) => OxygenContainingRadical(x).
R3: ROS(x) does NOT imply FreeRadical(x).
R4: FreeRadical(x) does NOT imply ROS(x).
R5: PARTICIPATES_IN(x,r) AND OCCURS_IN(r,c) => CONTEXT_ASSOCIATED(x,c).
R6: TARGETS(x,t) AND SUPPORTED_BY(claim,e) => CANDIDATE_INTERACTION(x,t,e).
R7: Evidence of a radical-target reaction alone does not establish organism-level injury.
R8: Pathway effects depend on concentration, location, duration, and biological defence.
R9: Absence of detection does not imply absence of radical formation.
7. REACTION AND BIOLOGICAL FLOW
flow RadicalLifecycle(input: ChemicalSpecies, context: Context) -> EvidenceQualifiedGraph {
candidates = IDENTIFY_SPECIES(input.formula, input.electronic_state, input.charge);
radicals = candidates.filter(CLASSIFY_RADICAL == "radical");
formation = LINK_REACTION(precursors, radicals, context.conditions);
propagation = TRACE_PATHWAY(reaction_graph, formation, depth_limit=8);
validation = VALIDATE_GRAPH(propagation);
return EvidenceQualifiedGraph(propagation, validation, provenance);
}
Example: initiation -> radical generation -> target reaction -> possible chain propagation -> termination/scavenging.
Examples are mechanistic patterns, not universal pathways.
8. VALIDATION AND CONSTRAINTS
constraint C1: radical classification requires electronic-state evidence or explicit qualification.
constraint C2: atomic elements and charge must balance in a fully specified reaction.
constraint C3: do not treat radical notation as a measured concentration.
constraint C4: separate in-vitro evidence from in-vivo evidence.
constraint C5: maintain distinct identifiers for radical species and nonradical ROS.
constraint C6: preserve uncertainty, measurement limits, and assay specificity.
constraint C7: disallow unbounded recursive traversal; detect cycles and cap depth.
constraint C8: preserve source identity and version across graph updates.
9. SEMANTIC_EQUIVALENCE
semantic_equivalence:
exact_identity: same canonical chemical species, charge and electronic state
contextual_alias: alternative labels for the same species in a defined context
related_not_equivalent: "free radical" vs "reactive oxygen species"
related_not_equivalent: "hydroxyl radical" vs "hydroxide ion"
related_not_equivalent: "superoxide radical anion" vs "hydrogen peroxide"
resolution_rule: do not merge entities on name similarity alone
10. CONFIDENCE
confidence:
basis: [direct_measurement, assay_specificity, replication, reaction_balance,
biological_context, independent_evidence, source_quality]
output: {score: Optional[Float[0..1]], method: String,
limitations: Set[String], evidence_links: Set[URI]}
rule: scores require a declared calibration method; never invent precision
rule: inference confidence is not equivalent to proof of causality
11. PROVENANCE
provenance:
preserve: [source_uri, author, publication_date, retrieval_date,
evidence_method, ontology_version, transformation_history]
requirement: every derived assertion must reference its supporting inputs
12. FLOW_HASH
flow_hash:
canonicalise: [entity_ids, types, relationships, rule_version, source_version]
digest: SHA-256(canonical_serialisation)
note: computed by an implementation; no digest is asserted here
13. UPDATE_MODEL
update_model:
triggers: [new_evidence, revised_classification, changed_reaction_data,
corrected_identity, revised_confidence]
steps: [ingest, normalise, resolve, validate, compare_versions,
preserve_provenance, publish_revision]
conflict_policy: retain competing evidence and flag unresolved claims
14. AI_CONSUMPTION
ai_consumption:
formats: [UTF-8 TXT, JSON-LD, RDF]
retrieval_keys: [species_id, formula, charge, reaction, biological_context]
reasoning: [typed_traversal, evidence_filtering, bounded_recursive_inference]
guardrails: [distinguish_hypothesis_from_observation,
no_unsupported_clinical_claims, disclose_uncertainty]
15. TEST CASES
T1: HO• -> radical: true.
T2: O2•− -> radical: true; charge -1.
T3: H2O2 -> radical: false; ROS: true.
T4: OH− -> hydroxyl radical: false.
T5: reaction with unbalanced charge -> validation failure.
T6: inferred oxidative damage without biological evidence -> unverified claim.
T7: circular pathway -> bounded traversal terminates.
END FLOW ALGEBRA
Download Code
Copy to Clipboard