use crate::HostTypes;
pub trait ConvergenceLevel<H: HostTypes> {
fn algebra_dimension(&self) -> u64;
fn betti_signature(&self) -> &H::HostString;
type HopfFiber: HopfFiber<H>;
fn fiber_type(&self) -> &Self::HopfFiber;
fn characteristic_identity(&self) -> &H::HostString;
fn level_name(&self) -> &H::HostString;
}
pub trait HopfFiber<H: HostTypes> {
fn fiber_dimension(&self) -> u64;
fn total_space(&self) -> &H::HostString;
fn base_space(&self) -> &H::HostString;
fn fiber_sphere(&self) -> &H::HostString;
}
pub trait ConvergenceResidual<H: HostTypes> {
fn residual_betti(&self) -> u64;
fn residual_dimension(&self) -> u64;
}
pub trait CommutativeSubspace<H: HostTypes> {
type CommutativeSubspaceTarget: CommutativeSubspace<H>;
fn subspace_ref(&self) -> &Self::CommutativeSubspaceTarget;
type Commutator: crate::bridge::observable::Commutator<H>;
fn commutator_ref(&self) -> &Self::Commutator;
}
pub trait AssociativeSubalgebra<H: HostTypes> {
type AssociativeSubalgebraTarget: AssociativeSubalgebra<H>;
fn subalgebra_ref(&self) -> &Self::AssociativeSubalgebraTarget;
type AssociatorTriple: crate::bridge::interaction::AssociatorTriple<H>;
fn associator_ref(&self) -> &Self::AssociatorTriple;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NullConvergenceLevel<H: HostTypes> {
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Default for NullConvergenceLevel<H> {
fn default() -> Self {
Self {
_phantom: core::marker::PhantomData,
}
}
}
impl<H: HostTypes> NullConvergenceLevel<H> {
pub const ABSENT: NullConvergenceLevel<H> = NullConvergenceLevel {
_phantom: core::marker::PhantomData,
};
}
impl<H: HostTypes> ConvergenceLevel<H> for NullConvergenceLevel<H> {
fn algebra_dimension(&self) -> u64 {
0
}
fn betti_signature(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
type HopfFiber = NullHopfFiber<H>;
fn fiber_type(&self) -> &Self::HopfFiber {
&<NullHopfFiber<H>>::ABSENT
}
fn characteristic_identity(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
fn level_name(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NullHopfFiber<H: HostTypes> {
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Default for NullHopfFiber<H> {
fn default() -> Self {
Self {
_phantom: core::marker::PhantomData,
}
}
}
impl<H: HostTypes> NullHopfFiber<H> {
pub const ABSENT: NullHopfFiber<H> = NullHopfFiber {
_phantom: core::marker::PhantomData,
};
}
impl<H: HostTypes> HopfFiber<H> for NullHopfFiber<H> {
fn fiber_dimension(&self) -> u64 {
0
}
fn total_space(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
fn base_space(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
fn fiber_sphere(&self) -> &H::HostString {
H::EMPTY_HOST_STRING
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NullConvergenceResidual<H: HostTypes> {
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Default for NullConvergenceResidual<H> {
fn default() -> Self {
Self {
_phantom: core::marker::PhantomData,
}
}
}
impl<H: HostTypes> NullConvergenceResidual<H> {
pub const ABSENT: NullConvergenceResidual<H> = NullConvergenceResidual {
_phantom: core::marker::PhantomData,
};
}
impl<H: HostTypes> ConvergenceResidual<H> for NullConvergenceResidual<H> {
fn residual_betti(&self) -> u64 {
0
}
fn residual_dimension(&self) -> u64 {
0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NullCommutativeSubspace<H: HostTypes> {
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Default for NullCommutativeSubspace<H> {
fn default() -> Self {
Self {
_phantom: core::marker::PhantomData,
}
}
}
impl<H: HostTypes> NullCommutativeSubspace<H> {
pub const ABSENT: NullCommutativeSubspace<H> = NullCommutativeSubspace {
_phantom: core::marker::PhantomData,
};
}
impl<H: HostTypes> CommutativeSubspace<H> for NullCommutativeSubspace<H> {
type CommutativeSubspaceTarget = NullCommutativeSubspace<H>;
fn subspace_ref(&self) -> &Self::CommutativeSubspaceTarget {
&<NullCommutativeSubspace<H>>::ABSENT
}
type Commutator = crate::bridge::observable::NullCommutator<H>;
fn commutator_ref(&self) -> &Self::Commutator {
&<crate::bridge::observable::NullCommutator<H>>::ABSENT
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NullAssociativeSubalgebra<H: HostTypes> {
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Default for NullAssociativeSubalgebra<H> {
fn default() -> Self {
Self {
_phantom: core::marker::PhantomData,
}
}
}
impl<H: HostTypes> NullAssociativeSubalgebra<H> {
pub const ABSENT: NullAssociativeSubalgebra<H> = NullAssociativeSubalgebra {
_phantom: core::marker::PhantomData,
};
}
impl<H: HostTypes> AssociativeSubalgebra<H> for NullAssociativeSubalgebra<H> {
type AssociativeSubalgebraTarget = NullAssociativeSubalgebra<H>;
fn subalgebra_ref(&self) -> &Self::AssociativeSubalgebraTarget {
&<NullAssociativeSubalgebra<H>>::ABSENT
}
type AssociatorTriple = crate::bridge::interaction::NullAssociatorTriple<H>;
fn associator_ref(&self) -> &Self::AssociatorTriple {
&<crate::bridge::interaction::NullAssociatorTriple<H>>::ABSENT
}
}
#[derive(Debug)]
pub struct ConvergenceLevelHandle<H: HostTypes> {
pub fingerprint: crate::enforcement::ContentFingerprint,
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Copy for ConvergenceLevelHandle<H> {}
impl<H: HostTypes> Clone for ConvergenceLevelHandle<H> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<H: HostTypes> PartialEq for ConvergenceLevelHandle<H> {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.fingerprint == other.fingerprint
}
}
impl<H: HostTypes> Eq for ConvergenceLevelHandle<H> {}
impl<H: HostTypes> core::hash::Hash for ConvergenceLevelHandle<H> {
#[inline]
fn hash<S: core::hash::Hasher>(&self, state: &mut S) {
self.fingerprint.hash(state);
}
}
impl<H: HostTypes> ConvergenceLevelHandle<H> {
#[inline]
#[must_use]
pub const fn new(fingerprint: crate::enforcement::ContentFingerprint) -> Self {
Self {
fingerprint,
_phantom: core::marker::PhantomData,
}
}
}
pub trait ConvergenceLevelResolver<H: HostTypes> {
fn resolve(&self, handle: ConvergenceLevelHandle<H>) -> Option<ConvergenceLevelRecord<H>>;
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ConvergenceLevelRecord<H: HostTypes> {
pub algebra_dimension: u64,
pub betti_signature: &'static H::HostString,
pub fiber_type_handle: HopfFiberHandle<H>,
pub characteristic_identity: &'static H::HostString,
pub level_name: &'static H::HostString,
#[doc(hidden)]
pub _phantom: core::marker::PhantomData<H>,
}
pub struct ResolvedConvergenceLevel<'r, R: ConvergenceLevelResolver<H>, H: HostTypes> {
handle: ConvergenceLevelHandle<H>,
resolver: &'r R,
record: Option<ConvergenceLevelRecord<H>>,
}
impl<'r, R: ConvergenceLevelResolver<H>, H: HostTypes> ResolvedConvergenceLevel<'r, R, H> {
#[inline]
pub fn new(handle: ConvergenceLevelHandle<H>, resolver: &'r R) -> Self {
let record = resolver.resolve(handle);
Self {
handle,
resolver,
record,
}
}
#[inline]
#[must_use]
pub const fn handle(&self) -> ConvergenceLevelHandle<H> {
self.handle
}
#[inline]
#[must_use]
pub const fn resolver(&self) -> &'r R {
self.resolver
}
#[inline]
#[must_use]
pub const fn record(&self) -> Option<&ConvergenceLevelRecord<H>> {
self.record.as_ref()
}
}
impl<'r, R: ConvergenceLevelResolver<H>, H: HostTypes> ConvergenceLevel<H>
for ResolvedConvergenceLevel<'r, R, H>
{
fn algebra_dimension(&self) -> u64 {
match &self.record {
Some(r) => r.algebra_dimension,
None => 0,
}
}
fn betti_signature(&self) -> &H::HostString {
match &self.record {
Some(r) => r.betti_signature,
None => H::EMPTY_HOST_STRING,
}
}
type HopfFiber = NullHopfFiber<H>;
fn fiber_type(&self) -> &Self::HopfFiber {
&<NullHopfFiber<H>>::ABSENT
}
fn characteristic_identity(&self) -> &H::HostString {
match &self.record {
Some(r) => r.characteristic_identity,
None => H::EMPTY_HOST_STRING,
}
}
fn level_name(&self) -> &H::HostString {
match &self.record {
Some(r) => r.level_name,
None => H::EMPTY_HOST_STRING,
}
}
}
impl<'r, R: ConvergenceLevelResolver<H>, H: HostTypes> ResolvedConvergenceLevel<'r, R, H> {
#[inline]
pub fn resolve_fiber_type<'r2, R2: HopfFiberResolver<H>>(
&self,
r: &'r2 R2,
) -> Option<ResolvedHopfFiber<'r2, R2, H>> {
let record = self.record.as_ref()?;
Some(ResolvedHopfFiber::new(record.fiber_type_handle, r))
}
}
#[derive(Debug)]
pub struct HopfFiberHandle<H: HostTypes> {
pub fingerprint: crate::enforcement::ContentFingerprint,
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Copy for HopfFiberHandle<H> {}
impl<H: HostTypes> Clone for HopfFiberHandle<H> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<H: HostTypes> PartialEq for HopfFiberHandle<H> {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.fingerprint == other.fingerprint
}
}
impl<H: HostTypes> Eq for HopfFiberHandle<H> {}
impl<H: HostTypes> core::hash::Hash for HopfFiberHandle<H> {
#[inline]
fn hash<S: core::hash::Hasher>(&self, state: &mut S) {
self.fingerprint.hash(state);
}
}
impl<H: HostTypes> HopfFiberHandle<H> {
#[inline]
#[must_use]
pub const fn new(fingerprint: crate::enforcement::ContentFingerprint) -> Self {
Self {
fingerprint,
_phantom: core::marker::PhantomData,
}
}
}
pub trait HopfFiberResolver<H: HostTypes> {
fn resolve(&self, handle: HopfFiberHandle<H>) -> Option<HopfFiberRecord<H>>;
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct HopfFiberRecord<H: HostTypes> {
pub fiber_dimension: u64,
pub total_space: &'static H::HostString,
pub base_space: &'static H::HostString,
pub fiber_sphere: &'static H::HostString,
#[doc(hidden)]
pub _phantom: core::marker::PhantomData<H>,
}
pub struct ResolvedHopfFiber<'r, R: HopfFiberResolver<H>, H: HostTypes> {
handle: HopfFiberHandle<H>,
resolver: &'r R,
record: Option<HopfFiberRecord<H>>,
}
impl<'r, R: HopfFiberResolver<H>, H: HostTypes> ResolvedHopfFiber<'r, R, H> {
#[inline]
pub fn new(handle: HopfFiberHandle<H>, resolver: &'r R) -> Self {
let record = resolver.resolve(handle);
Self {
handle,
resolver,
record,
}
}
#[inline]
#[must_use]
pub const fn handle(&self) -> HopfFiberHandle<H> {
self.handle
}
#[inline]
#[must_use]
pub const fn resolver(&self) -> &'r R {
self.resolver
}
#[inline]
#[must_use]
pub const fn record(&self) -> Option<&HopfFiberRecord<H>> {
self.record.as_ref()
}
}
impl<'r, R: HopfFiberResolver<H>, H: HostTypes> HopfFiber<H> for ResolvedHopfFiber<'r, R, H> {
fn fiber_dimension(&self) -> u64 {
match &self.record {
Some(r) => r.fiber_dimension,
None => 0,
}
}
fn total_space(&self) -> &H::HostString {
match &self.record {
Some(r) => r.total_space,
None => H::EMPTY_HOST_STRING,
}
}
fn base_space(&self) -> &H::HostString {
match &self.record {
Some(r) => r.base_space,
None => H::EMPTY_HOST_STRING,
}
}
fn fiber_sphere(&self) -> &H::HostString {
match &self.record {
Some(r) => r.fiber_sphere,
None => H::EMPTY_HOST_STRING,
}
}
}
#[derive(Debug)]
pub struct ConvergenceResidualHandle<H: HostTypes> {
pub fingerprint: crate::enforcement::ContentFingerprint,
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Copy for ConvergenceResidualHandle<H> {}
impl<H: HostTypes> Clone for ConvergenceResidualHandle<H> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<H: HostTypes> PartialEq for ConvergenceResidualHandle<H> {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.fingerprint == other.fingerprint
}
}
impl<H: HostTypes> Eq for ConvergenceResidualHandle<H> {}
impl<H: HostTypes> core::hash::Hash for ConvergenceResidualHandle<H> {
#[inline]
fn hash<S: core::hash::Hasher>(&self, state: &mut S) {
self.fingerprint.hash(state);
}
}
impl<H: HostTypes> ConvergenceResidualHandle<H> {
#[inline]
#[must_use]
pub const fn new(fingerprint: crate::enforcement::ContentFingerprint) -> Self {
Self {
fingerprint,
_phantom: core::marker::PhantomData,
}
}
}
pub trait ConvergenceResidualResolver<H: HostTypes> {
fn resolve(&self, handle: ConvergenceResidualHandle<H>)
-> Option<ConvergenceResidualRecord<H>>;
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ConvergenceResidualRecord<H: HostTypes> {
pub residual_betti: u64,
pub residual_dimension: u64,
#[doc(hidden)]
pub _phantom: core::marker::PhantomData<H>,
}
pub struct ResolvedConvergenceResidual<'r, R: ConvergenceResidualResolver<H>, H: HostTypes> {
handle: ConvergenceResidualHandle<H>,
resolver: &'r R,
record: Option<ConvergenceResidualRecord<H>>,
}
impl<'r, R: ConvergenceResidualResolver<H>, H: HostTypes> ResolvedConvergenceResidual<'r, R, H> {
#[inline]
pub fn new(handle: ConvergenceResidualHandle<H>, resolver: &'r R) -> Self {
let record = resolver.resolve(handle);
Self {
handle,
resolver,
record,
}
}
#[inline]
#[must_use]
pub const fn handle(&self) -> ConvergenceResidualHandle<H> {
self.handle
}
#[inline]
#[must_use]
pub const fn resolver(&self) -> &'r R {
self.resolver
}
#[inline]
#[must_use]
pub const fn record(&self) -> Option<&ConvergenceResidualRecord<H>> {
self.record.as_ref()
}
}
impl<'r, R: ConvergenceResidualResolver<H>, H: HostTypes> ConvergenceResidual<H>
for ResolvedConvergenceResidual<'r, R, H>
{
fn residual_betti(&self) -> u64 {
match &self.record {
Some(r) => r.residual_betti,
None => 0,
}
}
fn residual_dimension(&self) -> u64 {
match &self.record {
Some(r) => r.residual_dimension,
None => 0,
}
}
}
#[derive(Debug)]
pub struct CommutativeSubspaceHandle<H: HostTypes> {
pub fingerprint: crate::enforcement::ContentFingerprint,
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Copy for CommutativeSubspaceHandle<H> {}
impl<H: HostTypes> Clone for CommutativeSubspaceHandle<H> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<H: HostTypes> PartialEq for CommutativeSubspaceHandle<H> {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.fingerprint == other.fingerprint
}
}
impl<H: HostTypes> Eq for CommutativeSubspaceHandle<H> {}
impl<H: HostTypes> core::hash::Hash for CommutativeSubspaceHandle<H> {
#[inline]
fn hash<S: core::hash::Hasher>(&self, state: &mut S) {
self.fingerprint.hash(state);
}
}
impl<H: HostTypes> CommutativeSubspaceHandle<H> {
#[inline]
#[must_use]
pub const fn new(fingerprint: crate::enforcement::ContentFingerprint) -> Self {
Self {
fingerprint,
_phantom: core::marker::PhantomData,
}
}
}
pub trait CommutativeSubspaceResolver<H: HostTypes> {
fn resolve(&self, handle: CommutativeSubspaceHandle<H>)
-> Option<CommutativeSubspaceRecord<H>>;
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct CommutativeSubspaceRecord<H: HostTypes> {
pub subspace_ref_handle: CommutativeSubspaceHandle<H>,
pub commutator_ref_handle: crate::bridge::observable::CommutatorHandle<H>,
#[doc(hidden)]
pub _phantom: core::marker::PhantomData<H>,
}
pub struct ResolvedCommutativeSubspace<'r, R: CommutativeSubspaceResolver<H>, H: HostTypes> {
handle: CommutativeSubspaceHandle<H>,
resolver: &'r R,
record: Option<CommutativeSubspaceRecord<H>>,
}
impl<'r, R: CommutativeSubspaceResolver<H>, H: HostTypes> ResolvedCommutativeSubspace<'r, R, H> {
#[inline]
pub fn new(handle: CommutativeSubspaceHandle<H>, resolver: &'r R) -> Self {
let record = resolver.resolve(handle);
Self {
handle,
resolver,
record,
}
}
#[inline]
#[must_use]
pub const fn handle(&self) -> CommutativeSubspaceHandle<H> {
self.handle
}
#[inline]
#[must_use]
pub const fn resolver(&self) -> &'r R {
self.resolver
}
#[inline]
#[must_use]
pub const fn record(&self) -> Option<&CommutativeSubspaceRecord<H>> {
self.record.as_ref()
}
}
impl<'r, R: CommutativeSubspaceResolver<H>, H: HostTypes> CommutativeSubspace<H>
for ResolvedCommutativeSubspace<'r, R, H>
{
type CommutativeSubspaceTarget = NullCommutativeSubspace<H>;
fn subspace_ref(&self) -> &Self::CommutativeSubspaceTarget {
&<NullCommutativeSubspace<H>>::ABSENT
}
type Commutator = crate::bridge::observable::NullCommutator<H>;
fn commutator_ref(&self) -> &Self::Commutator {
&<crate::bridge::observable::NullCommutator<H>>::ABSENT
}
}
impl<'r, R: CommutativeSubspaceResolver<H>, H: HostTypes> ResolvedCommutativeSubspace<'r, R, H> {
#[inline]
pub fn resolve_subspace_ref<'r2, R2: CommutativeSubspaceResolver<H>>(
&self,
r: &'r2 R2,
) -> Option<ResolvedCommutativeSubspace<'r2, R2, H>> {
let record = self.record.as_ref()?;
Some(ResolvedCommutativeSubspace::new(
record.subspace_ref_handle,
r,
))
}
#[inline]
pub fn resolve_commutator_ref<'r2, R2: crate::bridge::observable::CommutatorResolver<H>>(
&self,
r: &'r2 R2,
) -> Option<crate::bridge::observable::ResolvedCommutator<'r2, R2, H>> {
let record = self.record.as_ref()?;
Some(crate::bridge::observable::ResolvedCommutator::new(
record.commutator_ref_handle,
r,
))
}
}
#[derive(Debug)]
pub struct AssociativeSubalgebraHandle<H: HostTypes> {
pub fingerprint: crate::enforcement::ContentFingerprint,
_phantom: core::marker::PhantomData<H>,
}
impl<H: HostTypes> Copy for AssociativeSubalgebraHandle<H> {}
impl<H: HostTypes> Clone for AssociativeSubalgebraHandle<H> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<H: HostTypes> PartialEq for AssociativeSubalgebraHandle<H> {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.fingerprint == other.fingerprint
}
}
impl<H: HostTypes> Eq for AssociativeSubalgebraHandle<H> {}
impl<H: HostTypes> core::hash::Hash for AssociativeSubalgebraHandle<H> {
#[inline]
fn hash<S: core::hash::Hasher>(&self, state: &mut S) {
self.fingerprint.hash(state);
}
}
impl<H: HostTypes> AssociativeSubalgebraHandle<H> {
#[inline]
#[must_use]
pub const fn new(fingerprint: crate::enforcement::ContentFingerprint) -> Self {
Self {
fingerprint,
_phantom: core::marker::PhantomData,
}
}
}
pub trait AssociativeSubalgebraResolver<H: HostTypes> {
fn resolve(
&self,
handle: AssociativeSubalgebraHandle<H>,
) -> Option<AssociativeSubalgebraRecord<H>>;
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct AssociativeSubalgebraRecord<H: HostTypes> {
pub subalgebra_ref_handle: AssociativeSubalgebraHandle<H>,
pub associator_ref_handle: crate::bridge::interaction::AssociatorTripleHandle<H>,
#[doc(hidden)]
pub _phantom: core::marker::PhantomData<H>,
}
pub struct ResolvedAssociativeSubalgebra<'r, R: AssociativeSubalgebraResolver<H>, H: HostTypes> {
handle: AssociativeSubalgebraHandle<H>,
resolver: &'r R,
record: Option<AssociativeSubalgebraRecord<H>>,
}
impl<'r, R: AssociativeSubalgebraResolver<H>, H: HostTypes>
ResolvedAssociativeSubalgebra<'r, R, H>
{
#[inline]
pub fn new(handle: AssociativeSubalgebraHandle<H>, resolver: &'r R) -> Self {
let record = resolver.resolve(handle);
Self {
handle,
resolver,
record,
}
}
#[inline]
#[must_use]
pub const fn handle(&self) -> AssociativeSubalgebraHandle<H> {
self.handle
}
#[inline]
#[must_use]
pub const fn resolver(&self) -> &'r R {
self.resolver
}
#[inline]
#[must_use]
pub const fn record(&self) -> Option<&AssociativeSubalgebraRecord<H>> {
self.record.as_ref()
}
}
impl<'r, R: AssociativeSubalgebraResolver<H>, H: HostTypes> AssociativeSubalgebra<H>
for ResolvedAssociativeSubalgebra<'r, R, H>
{
type AssociativeSubalgebraTarget = NullAssociativeSubalgebra<H>;
fn subalgebra_ref(&self) -> &Self::AssociativeSubalgebraTarget {
&<NullAssociativeSubalgebra<H>>::ABSENT
}
type AssociatorTriple = crate::bridge::interaction::NullAssociatorTriple<H>;
fn associator_ref(&self) -> &Self::AssociatorTriple {
&<crate::bridge::interaction::NullAssociatorTriple<H>>::ABSENT
}
}
impl<'r, R: AssociativeSubalgebraResolver<H>, H: HostTypes>
ResolvedAssociativeSubalgebra<'r, R, H>
{
#[inline]
pub fn resolve_subalgebra_ref<'r2, R2: AssociativeSubalgebraResolver<H>>(
&self,
r: &'r2 R2,
) -> Option<ResolvedAssociativeSubalgebra<'r2, R2, H>> {
let record = self.record.as_ref()?;
Some(ResolvedAssociativeSubalgebra::new(
record.subalgebra_ref_handle,
r,
))
}
#[inline]
pub fn resolve_associator_ref<
'r2,
R2: crate::bridge::interaction::AssociatorTripleResolver<H>,
>(
&self,
r: &'r2 R2,
) -> Option<crate::bridge::interaction::ResolvedAssociatorTriple<'r2, R2, H>> {
let record = self.record.as_ref()?;
Some(crate::bridge::interaction::ResolvedAssociatorTriple::new(
record.associator_ref_handle,
r,
))
}
}
pub mod l0_state {
pub const ALGEBRA_DIMENSION: i64 = 1;
pub const BETTI_SIGNATURE: &str = "[1]";
pub const CHARACTERISTIC_IDENTITY: &str = "existence";
pub const FIBER_TYPE: &str = "https://uor.foundation/convergence/hopf_S0";
pub const LEVEL_NAME: &str = "R";
}
pub mod l1_memory {
pub const ALGEBRA_DIMENSION: i64 = 2;
pub const BETTI_SIGNATURE: &str = "[1,1]";
pub const CHARACTERISTIC_IDENTITY: &str = "feedback";
pub const FIBER_TYPE: &str = "https://uor.foundation/convergence/hopf_S1";
pub const LEVEL_NAME: &str = "C";
}
pub mod l2_agency {
pub const ALGEBRA_DIMENSION: i64 = 4;
pub const BETTI_SIGNATURE: &str = "[1,0,0,1]";
pub const CHARACTERISTIC_IDENTITY: &str = "choice";
pub const FIBER_TYPE: &str = "https://uor.foundation/convergence/hopf_S3";
pub const LEVEL_NAME: &str = "H";
}
pub mod l3_self {
pub const ALGEBRA_DIMENSION: i64 = 8;
pub const BETTI_SIGNATURE: &str = "[1,0,0,0,0,0,0,1]";
pub const CHARACTERISTIC_IDENTITY: &str = "self-reference";
pub const FIBER_TYPE: &str = "https://uor.foundation/convergence/hopf_S7";
pub const LEVEL_NAME: &str = "O";
}
pub mod hopf_s0 {
pub const BASE_SPACE: &str = "pt";
pub const FIBER_DIMENSION: i64 = 0;
pub const FIBER_SPHERE: &str = "S⁰";
pub const TOTAL_SPACE: &str = "S¹";
}
pub mod hopf_s1 {
pub const BASE_SPACE: &str = "S²";
pub const FIBER_DIMENSION: i64 = 1;
pub const FIBER_SPHERE: &str = "S¹";
pub const TOTAL_SPACE: &str = "S³";
}
pub mod hopf_s3 {
pub const BASE_SPACE: &str = "S⁴";
pub const FIBER_DIMENSION: i64 = 3;
pub const FIBER_SPHERE: &str = "S³";
pub const TOTAL_SPACE: &str = "S⁷";
}
pub mod hopf_s7 {
pub const BASE_SPACE: &str = "S⁸";
pub const FIBER_DIMENSION: i64 = 7;
pub const FIBER_SPHERE: &str = "S⁷";
pub const TOTAL_SPACE: &str = "S¹⁵";
}