use crate::HostTypes;
pub trait Simplex<H: HostTypes> {
fn dimension(&self) -> i64;
type Constraint: crate::user::type_::Constraint<H>;
fn vertex(&self) -> &[Self::Constraint];
fn vertex_count(&self) -> u64;
type SimplexTarget: Simplex<H>;
fn is_face_of(&self) -> &[Self::SimplexTarget];
type SiteIndex: crate::bridge::partition::SiteIndex<H>;
fn pin_intersection(&self) -> &[Self::SiteIndex];
}
pub trait SimplicialComplex<H: HostTypes> {
type Simplex: Simplex<H>;
fn has_simplex(&self) -> &[Self::Simplex];
fn max_dimension(&self) -> i64;
fn euler_characteristic(&self) -> i64;
fn simplicial_vertex_count(&self) -> u64;
}
pub trait FaceMap<H: HostTypes> {
fn removes_vertex(&self) -> u64;
type Simplex: Simplex<H>;
fn source_simplex(&self) -> &Self::Simplex;
fn target_face(&self) -> &Self::Simplex;
}
pub trait ChainGroup<H: HostTypes> {
fn degree(&self) -> i64;
type Simplex: Simplex<H>;
fn generated_by(&self) -> &[Self::Simplex];
}
pub trait BoundaryOperator<H: HostTypes> {
type ChainGroup: ChainGroup<H>;
fn source_group(&self) -> &Self::ChainGroup;
fn target_group(&self) -> &Self::ChainGroup;
fn satisfies_boundary_squared_zero(&self) -> bool;
}
pub trait ChainComplex<H: HostTypes> {
type ChainGroup: ChainGroup<H>;
fn has_chain_group(&self) -> &[Self::ChainGroup];
type BoundaryOperator: BoundaryOperator<H>;
fn has_boundary(&self) -> &[Self::BoundaryOperator];
}
pub trait HomologyGroup<H: HostTypes> {
fn homology_degree(&self) -> i64;
fn betti_number(&self) -> u64;
}
pub trait NerveFunctor<H: HostTypes> {}
pub trait ChainFunctor<H: HostTypes> {}
pub trait KanComplex<H: HostTypes>: SimplicialComplex<H> {
type HornFiller: HornFiller<H>;
fn kan_witness(&self) -> &[Self::HornFiller];
}
pub trait HornFiller<H: HostTypes> {
fn horn_dimension(&self) -> u64;
fn horn_position(&self) -> u64;
}
pub trait PostnikovTruncation<H: HostTypes> {
fn truncation_level(&self) -> u64;
type KanComplex: KanComplex<H>;
fn truncation_source(&self) -> &Self::KanComplex;
type KInvariant: KInvariant<H>;
fn k_invariant(&self) -> &Self::KInvariant;
}
pub trait KInvariant<H: HostTypes> {
fn k_invariant_trivial(&self) -> bool;
}
pub trait DeformationComplex<H: HostTypes>: ChainComplex<H> {
type CompleteType: crate::user::type_::CompleteType<H>;
fn deformation_base(&self) -> &Self::CompleteType;
fn tangent_dimension(&self) -> u64;
fn obstruction_dimension(&self) -> u64;
}
pub mod boundary_squared_zero {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_boundarySquaredZero_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_boundarySquaredZero_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_boundarySquaredZero_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}
pub mod nerve_functor_n {}
pub mod chain_functor_c {}
pub mod psi_4 {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_psi_4_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_psi_4_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_psi_4_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}
pub mod index_bridge {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_indexBridge_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_indexBridge_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_indexBridge_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}