Epistemic Confidence

doctrine

Definition and Overview

Epistemic confidence is a numerical measure (ranging from 0.0 to 1.0) expressing the degree of certainty assigned to a belief, claim, or intelligence assessment within the Prismatic Platform's NABLA Infinity epistemic framework. Unlike probabilistic confidence intervals from statistics, epistemic confidence is a composite measure that integrates evidence strength, source independence, logical consistency, formal verifiability, and temporal relevance into a single score that governs decision-making authority.

The concept addresses a fundamental challenge in intelligence analysis and automated decision-making: distinguishing between what we know, what we think we know, and what we do not know. Traditional systems treat all data equally once it passes basic validation, leading to overconfident decisions based on weak evidence. Epistemic confidence forces explicit quantification of uncertainty, ensuring that high-stakes decisions require correspondingly high evidence thresholds.

Within the NABLA Infinity framework, epistemic confidence is not merely advisory -- it is enforced. Claims below the required confidence threshold for their context are blocked from influencing decisions. The Trinity Gate (a three-stage verification system requiring structural consistency, logical consistency, and formal necessity) must be passed before any claim achieves the confidence levels required for critical operations. This prevents the "false certainty" anti-pattern where weak evidence is treated with unjustified conviction.

Technical Deep Dive

Confidence Score Components

Epistemic confidence is computed as a weighted aggregate of five independent dimensions:

DimensionWeightRangeAssessment Method
Evidence Strength0.300.0-1.0Source reliability, data quality, corroboration count
Source Independence0.200.0-1.0Number of independent sources, correlation analysis
Logical Consistency0.200.0-1.0Contradiction detection, inference chain validity
Temporal Relevance0.150.0-1.0Age of evidence, decay function, refresh rate
Formal Verifiability0.150.0-1.0Trinity Gate passage level, proof availability

Confidence Thresholds

ContextThreshold (tau)Trinity GateEnforcement
Critical Decisions>= 0.95MANDATORY (all 3 gates)BLOCKING -- decision halted
Standard Operations>= 0.80MANDATORY (all 3 gates)BLOCKING -- operation paused
Exploratory Analysis>= 0.60RECOMMENDEDWARNING -- flagged for review
Research Queries>= 0.50OPTIONALINFORMATIONAL -- logged
Speculative>= 0.30NOT REQUIREDLABELED -- marked as speculative

NABLA Axiom Integration

Each of the seven NABLA axioms directly influences confidence computation:

AxiomEffect on ConfidenceViolation Impact
Signal PluralityRequires minimum 2 independent signalsScore capped at 0.40 if single-source
Contradiction PreservationContradictory evidence reduces score until resolvedScore reduced by 0.20 per unresolved contradiction
Absence InformativeMissing expected data treated as signalScore adjusted for informative absence
Time DecayOlder evidence weighted lessScore decays by configurable function
Unknown ValidExplicit "unknown" state preserves honestyScore set to 0.0 for unknown (not guessed)
Source IndependenceIndependent sources weighted higherCorrelated sources treated as single source
Provenance MandatoryAll beliefs must be traceableScore blocked at 0.0 without provenance

Architecture and Implementation

The epistemic confidence system operates as a directed acyclic graph (DAG) of belief nodes, where each node carries a confidence score derived from its evidence base and propagated through logical inference rules. When new evidence arrives, confidence scores are recalculated through the affected portion of the belief graph, and any decisions or operations that depend on beliefs whose confidence has dropped below their required threshold are automatically flagged for review.

The architecture distinguishes between ground-level confidence (assigned to direct observations and primary evidence) and derived confidence (computed through inference chains). Derived confidence is always less than or equal to the minimum confidence in its inference chain, ensuring that long chains of reasoning do not produce artificially high confidence through accumulated small inferences.

Time decay is implemented as a configurable function (exponential, linear, or step) that reduces confidence scores as evidence ages. The decay rate is context-dependent: financial intelligence decays rapidly (hours), infrastructure configuration states decay moderately (days), and historical facts decay slowly (years).

Usage in Prismatic Platform

The Prismatic Platform implements epistemic confidence through the NABLA framework module, integrated with the agent decision-making system and quality gates.

defmodule Prismatic.Epistemic.Confidence do
  @moduledoc """
  Computes and tracks epistemic confidence scores for
  beliefs, claims, and intelligence assessments within
  the NABLA Infinity framework.

  Confidence scores govern decision authority: operations
  below their required threshold are blocked until
  additional evidence raises confidence.
  """

  @type dimension :: :evidence | :independence | :consistency | :temporal | :formal
  @type confidence_score :: float()

  @type belief :: %{
    id: String.t(),
    claim: String.t(),
    confidence: confidence_score(),
    dimensions: map(),
    sources: list(map()),
    created_at: DateTime.t(),
    last_evaluated: DateTime.t(),
    trinity_gate_status: :passed | :failed | :pending
  }

  @dimension_weights %{
    evidence: 0.30,
    independence: 0.20,
    consistency: 0.20,
    temporal: 0.15,
    formal: 0.15
  }

  @spec compute_confidence(list(map()), keyword()) :: confidence_score()
  def compute_confidence(evidence_items, opts \\ []) do
    context = Keyword.get(opts, :context, :standard)
    decay_fn = Keyword.get(opts, :decay, &exponential_decay/2)

    dimensions = %{
      evidence: assess_evidence_strength(evidence_items),
      independence: assess_source_independence(evidence_items),
      consistency: assess_logical_consistency(evidence_items),
      temporal: assess_temporal_relevance(evidence_items, decay_fn),
      formal: assess_formal_verifiability(evidence_items)
    }

    score =
      Enum.reduce(@dimension_weights, 0.0, fn {dim, weight}, acc ->
        acc + weight * Map.fetch!(dimensions, dim)
      end)

    apply_axiom_constraints(score, evidence_items, context)
  end

  @spec meets_threshold?(confidence_score(), atom()) :: boolean()
  def meets_threshold?(score, :critical), do: score >= 0.95
  def meets_threshold?(score, :standard), do: score >= 0.80
  def meets_threshold?(score, :exploratory), do: score >= 0.60
  def meets_threshold?(score, :research), do: score >= 0.50
  def meets_threshold?(_score, :speculative), do: true

  defp assess_evidence_strength(items) do
    case length(items) do
      0 -> 0.0
      1 -> 0.3
      n when n < 3 -> 0.5
      n when n < 5 -> 0.7
      _ -> min(1.0, 0.7 + length(items) * 0.03)
    end
  end

  defp assess_source_independence(items) do
    unique_sources =
      items
      |> Enum.map(& &1.source)
      |> Enum.uniq()
      |> length()

    case unique_sources do
      0 -> 0.0
      1 -> 0.3
      2 -> 0.6
      _ -> min(1.0, 0.6 + unique_sources * 0.1)
    end
  end

  defp assess_logical_consistency(items) do
    contradictions =
      items
      |> detect_contradictions()
      |> length()

    max(0.0, 1.0 - contradictions * 0.20)
  end

  defp assess_temporal_relevance(items, decay_fn) do
    now = DateTime.utc_now()

    items
    |> Enum.map(fn item ->
      age_hours = DateTime.diff(now, item.timestamp, :hour)
      decay_fn.(1.0, age_hours)
    end)
    |> then(fn scores ->
      if Enum.empty?(scores), do: 0.0, else: Enum.max(scores)
    end)
  end

  defp assess_formal_verifiability(items) do
    verified_count = Enum.count(items, & &1[:formally_verified])
    if Enum.empty?(items), do: 0.0, else: verified_count / length(items)
  end

  defp apply_axiom_constraints(score, items, _context) do
    score
    |> apply_plurality_constraint(items)
    |> apply_provenance_constraint(items)
  end

  defp apply_plurality_constraint(score, items) do
    if length(Enum.uniq_by(items, & &1.source)) < 2, do: min(score, 0.40), else: score
  end

  defp apply_provenance_constraint(score, items) do
    if Enum.any?(items, fn i -> is_nil(i[:provenance]) end), do: 0.0, else: score
  end

  defp exponential_decay(initial, age_hours) do
    half_life = 168.0
    initial * :math.pow(0.5, age_hours / half_life)
  end

  defp detect_contradictions(items) do
    items
    |> Enum.chunk_every(2, 1, :discard)
    |> Enum.filter(fn [a, b] -> contradicts?(a, b) end)
  end

  defp contradicts?(a, b), do: a[:claim] == b[:claim] and a[:value] != b[:value]
end

Cross-References

  • NABLA Infinity -- Parent epistemic framework
  • Trinity Gate -- Three-stage verification for high-confidence claims
  • Addiction Preservation -- Preserving contradictory signals
  • Signal Plurality -- Multi-source evidence requirement
  • GRACE -- Intelligence analysis framework using confidence scores
  • Livebooks: ai_agents/ notebooks demonstrate confidence computation
  • Academy: OSINTSignalSynthesis topic teaches confidence assessment

Connect & Contribute

Created by Tomas Korcak (korczis) | Open Source under GHL