use crate::enums::TriadProjection;
use crate::Primitives;
pub trait Query<P: Primitives> {
fn input_type(&self) -> &P::String;
fn output_type(&self) -> &P::String;
}
pub trait CoordinateQuery<P: Primitives>: Query<P> {
fn has_triad_projection(&self) -> TriadProjection;
}
pub trait MetricQuery<P: Primitives>: Query<P> {}
pub trait RepresentationQuery<P: Primitives>: Query<P> {}
pub trait RelationQuery<P: Primitives>: Query<P> {
type Element: crate::kernel::address::Element<P>;
fn source_address(&self) -> &Self::Element;
type Constraint: crate::user::type_::Constraint<P>;
fn relation_type(&self) -> &Self::Constraint;
type FreeRank: crate::bridge::partition::FreeRank<P>;
fn target_site(&self) -> &Self::FreeRank;
type GroundingMap: crate::user::morphism::GroundingMap<P>;
fn grounding_map(&self) -> &Self::GroundingMap;
type ProjectionMap: crate::user::morphism::ProjectionMap<P>;
fn projection_map(&self) -> &Self::ProjectionMap;
type Context: crate::user::state::Context<P>;
fn session_context(&self) -> &Self::Context;
}
pub trait SessionQuery<P: Primitives>: RelationQuery<P> {
type Session: crate::user::state::Session<P>;
fn session_membership(&self) -> &Self::Session;
}
pub mod two_adic_valuation {}
pub mod walsh_hadamard_image {}
pub mod ring_element {}