use crate::HostTypes;
pub trait InteractionContext<H: HostTypes> {
type TermExpression: crate::kernel::schema::TermExpression<H>;
fn entity_a(&self) -> &Self::TermExpression;
fn entity_b(&self) -> &Self::TermExpression;
fn shared_site_mask(&self) -> u64;
fn commutator_norm(&self) -> H::Decimal;
}
pub trait CommutatorState<H: HostTypes> {
fn commutator_value(&self) -> H::Decimal;
}
pub trait AssociatorState<H: HostTypes> {
fn associator_norm(&self) -> H::Decimal;
}
pub trait AssociatorTriple<H: HostTypes> {
type Datum: crate::kernel::schema::Datum<H>;
fn triple_component_a(&self) -> &Self::Datum;
fn triple_component_b(&self) -> &Self::Datum;
fn triple_component_c(&self) -> &Self::Datum;
type Observable: crate::bridge::observable::Observable<H>;
fn associator_profile_ref(&self) -> &Self::Observable;
fn associator_norm_value(&self) -> H::Decimal;
}
pub trait ThreeWaySite<H: HostTypes> {
fn site_position(&self) -> u64;
fn left_grouping_value(&self) -> H::Decimal;
fn right_grouping_value(&self) -> H::Decimal;
fn is_pinned(&self) -> bool;
type TermExpression: crate::kernel::schema::TermExpression<H>;
fn pinning_pair(&self) -> &Self::TermExpression;
}
pub trait NegotiationTrace<H: HostTypes> {
fn negotiation_steps(&self) -> u64;
fn is_convergent(&self) -> bool;
fn trace_length(&self) -> u64;
fn convergence_rate(&self) -> H::Decimal;
type TermExpression: crate::kernel::schema::TermExpression<H>;
fn terminal_value(&self) -> &Self::TermExpression;
}
pub trait MutualModelTrace<H: HostTypes> {
fn model_convergent(&self) -> bool;
}
pub trait InteractionNerve<H: HostTypes> {
fn nerve_dimension(&self) -> u64;
fn nerve_betti_numbers(&self) -> u64;
}
pub trait InteractionComposition<H: HostTypes> {
fn reification_depth(&self) -> u64;
}