use crate::HostTypes;
pub trait CochainGroup<H: HostTypes> {
fn cochain_degree(&self) -> i64;
fn cochain_rank(&self) -> u64;
type ChainGroup: crate::bridge::homology::ChainGroup<H>;
fn dual_of(&self) -> &Self::ChainGroup;
}
pub trait CoboundaryOperator<H: HostTypes> {
type CochainGroup: CochainGroup<H>;
fn coboundary_source(&self) -> &Self::CochainGroup;
fn coboundary_target(&self) -> &Self::CochainGroup;
fn satisfies_coboundary_squared_zero(&self) -> bool;
}
pub trait CochainComplex<H: HostTypes> {
type CochainGroup: CochainGroup<H>;
fn has_cochain_group(&self) -> &[Self::CochainGroup];
type CoboundaryOperator: CoboundaryOperator<H>;
fn has_coboundary(&self) -> &[Self::CoboundaryOperator];
}
pub trait CohomologyGroup<H: HostTypes> {
fn cohomology_degree(&self) -> i64;
fn cohomology_rank(&self) -> u64;
}
pub trait Sheaf<H: HostTypes> {
type SimplicialComplex: crate::bridge::homology::SimplicialComplex<H>;
fn sheaf_over(&self) -> &Self::SimplicialComplex;
type Ring: crate::kernel::schema::Ring<H>;
fn coefficient_in(&self) -> &Self::Ring;
type Stalk: Stalk<H>;
fn has_stalks(&self) -> &[Self::Stalk];
type Section: Section<H>;
fn has_global_section(&self) -> &[Self::Section];
}
pub trait Stalk<H: HostTypes> {
type Simplex: crate::bridge::homology::Simplex<H>;
fn stalk_at(&self) -> &Self::Simplex;
}
pub trait Section<H: HostTypes> {}
pub trait LocalSection<H: HostTypes>: Section<H> {}
pub trait RestrictionMap<H: HostTypes> {
type Simplex: crate::bridge::homology::Simplex<H>;
fn restricts_from(&self) -> &Self::Simplex;
fn restricts_to(&self) -> &Self::Simplex;
}
pub trait GluingObstruction<H: HostTypes> {
type CohomologyGroup: CohomologyGroup<H>;
fn obstruction_class(&self) -> &Self::CohomologyGroup;
type RefinementSuggestion: crate::bridge::resolver::RefinementSuggestion<H>;
fn addresses_suggestion(&self) -> &[Self::RefinementSuggestion];
}
pub mod coboundary_squared_zero {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_coboundarySquaredZero_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_coboundarySquaredZero_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_coboundarySquaredZero_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}
pub mod de_rham_duality {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_deRhamDuality_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_deRhamDuality_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_deRhamDuality_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}
pub mod sheaf_cohomology_bridge {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_sheafCohomologyBridge_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_sheafCohomologyBridge_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_sheafCohomologyBridge_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}
pub mod local_global_principle {
pub const FOR_ALL: &str = "https://uor.foundation/schema/term_localGlobalPrinciple_forAll";
pub const LHS: &str = "https://uor.foundation/schema/term_localGlobalPrinciple_lhs";
pub const RHS: &str = "https://uor.foundation/schema/term_localGlobalPrinciple_rhs";
pub const VERIFICATION_DOMAIN: &str = "https://uor.foundation/op/Topological";
}