pub enum InferenceMethod {
Show 14 variants
DirectLookup,
MajorityVote,
CitationLink,
AnalogyInference,
PatternSummarize,
ArchitecturalChain,
DominanceAnalysis,
EntityCount,
IntervalCalc,
FeedbackConsolidation,
QualitativeInference,
ProvenanceChain,
MultiSourceConsensus,
ConflictReconciliation,
}Expand description
One of the 14 registered inference methods. Every Inferential memory’s
method field resolves to a symbol whose canonical name maps to one
of these variants.
Variants§
DirectLookup
Pass-through from a single parent. output.conf = parent.conf.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let out = InferenceMethod::DirectLookup
.compute(&[Confidence::try_from_f32(0.73).unwrap()])
.unwrap();
assert!((out.as_f32() - 0.73).abs() < 0.001);MajorityVote
Majority vote across an odd number of parents (N ≥ 3). Per the
spec v1 convention (librarian-pipeline.md § 5.1) the write
surface carries only voters-in-favor in derived_from, so
votes_for == N and the formula collapses to min(parents.conf).
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::MajorityVote.compute(&[p(0.9), p(0.6), p(0.7)]).unwrap();
assert!((out.as_f32() - 0.6).abs() < 0.001);CitationLink
Citation-linked pair of parents.
output.conf = min(parents.conf) * 0.9.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::CitationLink.compute(&[p(1.0), p(1.0)]).unwrap();
assert!((out.as_f32() - 0.9).abs() < 0.001);AnalogyInference
Analogical mapping from source to target.
output.conf = product(parents.conf) * 0.7.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::AnalogyInference.compute(&[p(1.0), p(1.0)]).unwrap();
assert!((out.as_f32() - 0.7).abs() < 0.001);PatternSummarize
Geometric-mean summarization over N ≥ 2 parents.
output.conf = geomean(parents.conf) * 0.8.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
// geomean(0.5, 0.5) = 0.5; * 0.8 = 0.4.
let out = InferenceMethod::PatternSummarize.compute(&[p(0.5), p(0.5)]).unwrap();
assert!((out.as_f32() - 0.4).abs() < 0.001);ArchitecturalChain
Chained architectural derivation.
output.conf = product(parents.conf).
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
// 0.5 * 0.5 * 0.5 = 0.125.
let out = InferenceMethod::ArchitecturalChain
.compute(&[p(0.5), p(0.5), p(0.5)]).unwrap();
assert!((out.as_f32() - 0.125).abs() < 0.001);DominanceAnalysis
Dominance / ranking analysis.
output.conf = min(parents.conf) * 0.6.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
// min(0.9, 0.5) * 0.6 = 0.3.
let out = InferenceMethod::DominanceAnalysis.compute(&[p(0.9), p(0.5)]).unwrap();
assert!((out.as_f32() - 0.3).abs() < 0.001);EntityCount
Cardinality / count over N ≥ 1 parents.
output.conf = min(parents.conf) * 0.8.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::EntityCount.compute(&[p(0.7)]).unwrap();
assert!((out.as_f32() - 0.56).abs() < 0.001); // 0.7 * 0.8.IntervalCalc
Interval calculation between two endpoint parents.
output.conf = min(parents.conf) * 0.9.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::IntervalCalc.compute(&[p(0.8), p(0.6)]).unwrap();
assert!((out.as_f32() - 0.54).abs() < 0.001); // min=0.6; *0.9.FeedbackConsolidation
Feedback consolidation over N ≥ 1 parents.
output.conf = min(parents.conf) * 0.85.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::FeedbackConsolidation.compute(&[p(0.6)]).unwrap();
assert!((out.as_f32() - 0.51).abs() < 0.001); // 0.6 * 0.85.QualitativeInference
Qualitative / narrative inference.
output.conf = min(parents.conf) * 0.5.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::QualitativeInference.compute(&[p(0.8)]).unwrap();
assert!((out.as_f32() - 0.4).abs() < 0.001);ProvenanceChain
Provenance chain through N ≥ 2 parents.
output.conf = product(parents.conf).
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
let out = InferenceMethod::ProvenanceChain.compute(&[p(0.9), p(0.8)]).unwrap();
assert!((out.as_f32() - 0.72).abs() < 0.001);MultiSourceConsensus
Noisy-OR consensus across independent parents.
output.conf = 1 - product(1 - parents.conf).
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
// 1 - (0.5)(0.5) = 0.75.
let out = InferenceMethod::MultiSourceConsensus.compute(&[p(0.5), p(0.5)]).unwrap();
assert!((out.as_f32() - 0.75).abs() < 0.001);ConflictReconciliation
Conflict reconciliation over contested peers.
output.conf = max(parents.conf) * 0.8.
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let p = |f| Confidence::try_from_f32(f).unwrap();
// max(0.3, 0.9) * 0.8 = 0.72.
let out = InferenceMethod::ConflictReconciliation.compute(&[p(0.3), p(0.9)]).unwrap();
assert!((out.as_f32() - 0.72).abs() < 0.001);Implementations§
Source§impl InferenceMethod
impl InferenceMethod
Sourcepub fn symbol_name(self) -> &'static str
pub fn symbol_name(self) -> &'static str
The canonical symbol name (with leading @) for this method.
Sourcepub fn from_symbol_name(name: &str) -> Option<Self>
pub fn from_symbol_name(name: &str) -> Option<Self>
Resolve a canonical method name (with or without leading @) to
a variant, or None if the name is not a registered method.
Sourcepub fn parent_count_rule(self) -> ParentCountRule
pub fn parent_count_rule(self) -> ParentCountRule
Parent-count rule expected by this method.
Sourcepub fn staleness_rule(self) -> StalenessRule
pub fn staleness_rule(self) -> StalenessRule
Staleness predicate per spec § 5.1.
Sourcepub fn compute(
self,
parents: &[Confidence],
) -> Result<Confidence, InferenceMethodError>
pub fn compute( self, parents: &[Confidence], ) -> Result<Confidence, InferenceMethodError>
Compute the output confidence for this method given parent confidences. See variant docs for each formula.
§Errors
InferenceMethodError::WrongParentCountif the supplied count violates the method’sParentCountRule.InferenceMethodError::TooManyParentsifparents.len() > 8for methods whose formulas require a joint product (ArchitecturalChain,ProvenanceChain,AnalogyInference,PatternSummarize,MultiSourceConsensus). The u128 intermediate accommodates up to eight 16-bit factors; larger N is reserved for a log-table follow-up.
§Example
use mimir_core::inference_methods::InferenceMethod;
use mimir_core::Confidence;
let parents = [Confidence::ONE, Confidence::ONE];
let out = InferenceMethod::CitationLink.compute(&parents).unwrap();
// min(1.0, 1.0) * 0.9 ≈ 0.9; allow ±1 fixed-point step of drift.
let expected = (f32::from(u16::MAX) * 0.9) as u16;
assert!((i32::from(out.as_u16()) - i32::from(expected)).abs() <= 1);Trait Implementations§
Source§impl Clone for InferenceMethod
impl Clone for InferenceMethod
Source§fn clone(&self) -> InferenceMethod
fn clone(&self) -> InferenceMethod
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for InferenceMethod
impl Debug for InferenceMethod
Source§impl Hash for InferenceMethod
impl Hash for InferenceMethod
Source§impl PartialEq for InferenceMethod
impl PartialEq for InferenceMethod
impl Copy for InferenceMethod
impl Eq for InferenceMethod
impl StructuralPartialEq for InferenceMethod
Auto Trait Implementations§
impl Freeze for InferenceMethod
impl RefUnwindSafe for InferenceMethod
impl Send for InferenceMethod
impl Sync for InferenceMethod
impl Unpin for InferenceMethod
impl UnsafeUnpin for InferenceMethod
impl UnwindSafe for InferenceMethod
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.