use crate::Primitives;
pub trait MonoidalProduct<P: Primitives> {
type ComputationDatum: crate::user::morphism::ComputationDatum<P>;
fn left_operand(&self) -> &Self::ComputationDatum;
fn right_operand(&self) -> &Self::ComputationDatum;
type Datum: crate::kernel::schema::Datum<P>;
fn composed_result(&self) -> &Self::Datum;
fn saturation_value(&self) -> P::Decimal;
}
pub trait MonoidalUnit<P: Primitives> {
type Certificate: crate::bridge::cert::Certificate<P>;
fn unit_witness_ref(&self) -> &Self::Certificate;
}
pub trait MonoidalAssociator<P: Primitives> {
type MonoidalProduct: MonoidalProduct<P>;
fn associator_left(&self) -> &Self::MonoidalProduct;
fn associator_right(&self) -> &Self::MonoidalProduct;
type Certificate: crate::bridge::cert::Certificate<P>;
fn associator_witness_ref(&self) -> &Self::Certificate;
}