use crate::Primitives;
pub trait InteractionContext<P: Primitives> {
type TermExpression: crate::kernel::schema::TermExpression<P>;
fn entity_a(&self) -> &Self::TermExpression;
fn entity_b(&self) -> &Self::TermExpression;
fn shared_fiber_mask(&self) -> P::NonNegativeInteger;
fn commutator_norm(&self) -> P::Decimal;
}
pub trait CommutatorState<P: Primitives> {
fn commutator_value(&self) -> P::Decimal;
}
pub trait AssociatorState<P: Primitives> {
fn associator_norm(&self) -> P::Decimal;
}
pub trait AssociatorTriple<P: Primitives> {
type Datum: crate::kernel::schema::Datum<P>;
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<P>;
fn associator_profile_ref(&self) -> &Self::Observable;
fn associator_norm_value(&self) -> P::Decimal;
}
pub trait ThreeWayFiber<P: Primitives> {
fn fiber_position(&self) -> P::NonNegativeInteger;
fn left_grouping_value(&self) -> P::Decimal;
fn right_grouping_value(&self) -> P::Decimal;
fn is_pinned(&self) -> P::Boolean;
type TermExpression: crate::kernel::schema::TermExpression<P>;
fn pinning_pair(&self) -> &Self::TermExpression;
}
pub trait NegotiationTrace<P: Primitives> {
fn negotiation_steps(&self) -> P::NonNegativeInteger;
fn is_convergent(&self) -> P::Boolean;
fn trace_length(&self) -> P::NonNegativeInteger;
fn convergence_rate(&self) -> P::Decimal;
type TermExpression: crate::kernel::schema::TermExpression<P>;
fn terminal_value(&self) -> &Self::TermExpression;
}
pub trait MutualModelTrace<P: Primitives> {
fn model_convergent(&self) -> P::Boolean;
}
pub trait InteractionNerve<P: Primitives> {
fn nerve_dimension(&self) -> P::NonNegativeInteger;
fn nerve_betti_numbers(&self) -> P::NonNegativeInteger;
}
pub trait InteractionComposition<P: Primitives> {
fn reification_depth(&self) -> P::NonNegativeInteger;
}