use crate::error::ConsciousnessError;
use crate::types::{ComputeBudget, EmergenceResult, PhiAlgorithm, PhiResult, TransitionMatrix};
pub trait PhiEngine: Send + Sync {
fn compute_phi(
&self,
tpm: &TransitionMatrix,
state: Option<usize>,
budget: &ComputeBudget,
) -> Result<PhiResult, ConsciousnessError>;
fn algorithm(&self) -> PhiAlgorithm;
fn estimate_cost(&self, n: usize) -> u64;
}
pub trait EmergenceEngine: Send + Sync {
fn compute_emergence(
&self,
tpm: &TransitionMatrix,
budget: &ComputeBudget,
) -> Result<EmergenceResult, ConsciousnessError>;
fn effective_information(&self, tpm: &TransitionMatrix) -> Result<f64, ConsciousnessError>;
}
pub trait ConsciousnessCollapse: Send + Sync {
fn collapse_to_mip(
&self,
tpm: &TransitionMatrix,
iterations: usize,
seed: u64,
) -> Result<PhiResult, ConsciousnessError>;
}