use core::fmt;
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Space {
Kernel,
User,
Bridge,
}
impl fmt::Display for Space {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Kernel => f.write_str("kernel"),
Self::User => f.write_str("user"),
Self::Bridge => f.write_str("bridge"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum PrimitiveOp {
Neg,
Bnot,
Succ,
Pred,
Add,
Sub,
Mul,
Xor,
And,
Or,
}
impl fmt::Display for PrimitiveOp {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Neg => f.write_str("neg"),
Self::Bnot => f.write_str("bnot"),
Self::Succ => f.write_str("succ"),
Self::Pred => f.write_str("pred"),
Self::Add => f.write_str("add"),
Self::Sub => f.write_str("sub"),
Self::Mul => f.write_str("mul"),
Self::Xor => f.write_str("xor"),
Self::And => f.write_str("and"),
Self::Or => f.write_str("or"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum MetricAxis {
Vertical,
Horizontal,
Diagonal,
}
impl fmt::Display for MetricAxis {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Vertical => f.write_str("vertical"),
Self::Horizontal => f.write_str("horizontal"),
Self::Diagonal => f.write_str("diagonal"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum SiteState {
Pinned,
Free,
}
impl fmt::Display for SiteState {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Pinned => f.write_str("pinned"),
Self::Free => f.write_str("free"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum GeometricCharacter {
RingReflection,
HypercubeReflection,
Rotation,
RotationInverse,
Translation,
Scaling,
HypercubeTranslation,
HypercubeProjection,
HypercubeJoin,
ConstraintSelection,
ResolutionTraversal,
SiteBinding,
SitePartition,
SessionMerge,
}
impl fmt::Display for GeometricCharacter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::RingReflection => f.write_str("ring_reflection"),
Self::HypercubeReflection => f.write_str("hypercube_reflection"),
Self::Rotation => f.write_str("rotation"),
Self::RotationInverse => f.write_str("rotation_inverse"),
Self::Translation => f.write_str("translation"),
Self::Scaling => f.write_str("scaling"),
Self::HypercubeTranslation => f.write_str("hypercube_translation"),
Self::HypercubeProjection => f.write_str("hypercube_projection"),
Self::HypercubeJoin => f.write_str("hypercube_join"),
Self::ConstraintSelection => f.write_str("constraint_selection"),
Self::ResolutionTraversal => f.write_str("resolution_traversal"),
Self::SiteBinding => f.write_str("site_binding"),
Self::SitePartition => f.write_str("site_partition"),
Self::SessionMerge => f.write_str("session_merge"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum VerificationDomain {
Enumerative,
Algebraic,
Geometric,
Analytical,
Thermodynamic,
Topological,
Pipeline,
IndexTheoretic,
SuperpositionDomain,
QuantumThermodynamic,
ArithmeticValuation,
ComposedAlgebraic,
}
impl fmt::Display for VerificationDomain {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Enumerative => f.write_str("enumerative"),
Self::Algebraic => f.write_str("algebraic"),
Self::Geometric => f.write_str("geometric"),
Self::Analytical => f.write_str("analytical"),
Self::Thermodynamic => f.write_str("thermodynamic"),
Self::Topological => f.write_str("topological"),
Self::Pipeline => f.write_str("pipeline"),
Self::IndexTheoretic => f.write_str("index_theoretic"),
Self::SuperpositionDomain => f.write_str("superposition_domain"),
Self::QuantumThermodynamic => f.write_str("quantum_thermodynamic"),
Self::ArithmeticValuation => f.write_str("arithmetic_valuation"),
Self::ComposedAlgebraic => f.write_str("composed_algebraic"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ComplexityClass {
Constant,
Logarithmic,
Linear,
Exponential,
}
impl fmt::Display for ComplexityClass {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Constant => f.write_str("constant"),
Self::Logarithmic => f.write_str("logarithmic"),
Self::Linear => f.write_str("linear"),
Self::Exponential => f.write_str("exponential"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum RewriteRule {
CriticalIdentity,
Involution,
Associativity,
Commutativity,
IdentityElement,
Normalization,
}
impl fmt::Display for RewriteRule {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::CriticalIdentity => f.write_str("critical_identity"),
Self::Involution => f.write_str("involution"),
Self::Associativity => f.write_str("associativity"),
Self::Commutativity => f.write_str("commutativity"),
Self::IdentityElement => f.write_str("identity_element"),
Self::Normalization => f.write_str("normalization"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum MeasurementUnit {
Bits,
RingSteps,
Dimensionless,
Nats,
}
impl fmt::Display for MeasurementUnit {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Bits => f.write_str("bits"),
Self::RingSteps => f.write_str("ring_steps"),
Self::Dimensionless => f.write_str("dimensionless"),
Self::Nats => f.write_str("nats"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum TriadProjection {
TwoAdicValuation,
WalshHadamardImage,
RingElement,
}
impl fmt::Display for TriadProjection {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::TwoAdicValuation => f.write_str("two_adic_valuation"),
Self::WalshHadamardImage => f.write_str("walsh_hadamard_image"),
Self::RingElement => f.write_str("ring_element"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum SessionBoundaryType {
ExplicitReset,
ConvergenceBoundary,
ContradictionBoundary,
}
impl fmt::Display for SessionBoundaryType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ExplicitReset => f.write_str("explicit_reset"),
Self::ConvergenceBoundary => f.write_str("convergence_boundary"),
Self::ContradictionBoundary => f.write_str("contradiction_boundary"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum PhaseBoundaryType {
Period,
PowerOfTwo,
}
impl fmt::Display for PhaseBoundaryType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Period => f.write_str("period"),
Self::PowerOfTwo => f.write_str("power_of_two"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum GroundingPhase {
Open,
PartialGrounding,
FullGrounding,
}
impl fmt::Display for GroundingPhase {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Open => f.write_str("open"),
Self::PartialGrounding => f.write_str("partial_grounding"),
Self::FullGrounding => f.write_str("full_grounding"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum AchievabilityStatus {
Achievable,
Forbidden,
}
impl fmt::Display for AchievabilityStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Achievable => f.write_str("achievable"),
Self::Forbidden => f.write_str("forbidden"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ValidityScopeKind {
Universal,
ParametricLower,
ParametricRange,
LevelSpecific,
}
impl fmt::Display for ValidityScopeKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Universal => f.write_str("universal"),
Self::ParametricLower => f.write_str("parametric_lower"),
Self::ParametricRange => f.write_str("parametric_range"),
Self::LevelSpecific => f.write_str("level_specific"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ExecutionPolicyKind {
FifoPolicy,
MinFreeCountFirst,
MaxFreeCountFirst,
DisjointFirst,
}
impl fmt::Display for ExecutionPolicyKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::FifoPolicy => f.write_str("fifo_policy"),
Self::MinFreeCountFirst => f.write_str("min_free_count_first"),
Self::MaxFreeCountFirst => f.write_str("max_free_count_first"),
Self::DisjointFirst => f.write_str("disjoint_first"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum VarianceAnnotation {
Covariant,
Contravariant,
Invariant,
Bivariant,
}
impl fmt::Display for VarianceAnnotation {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Covariant => f.write_str("covariant"),
Self::Contravariant => f.write_str("contravariant"),
Self::Invariant => f.write_str("invariant"),
Self::Bivariant => f.write_str("bivariant"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum QuantifierKind {
Universal,
Existential,
}
impl fmt::Display for QuantifierKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Universal => f.write_str("universal"),
Self::Existential => f.write_str("existential"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ProofStrategy {
RingAxiom,
DecideQ0,
BitwiseInduction,
GroupPresentation,
Simplification,
ChineseRemainder,
EulerPoincare,
ProductFormula,
Composition,
Contradiction,
Computation,
}
impl fmt::Display for ProofStrategy {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::RingAxiom => f.write_str("ring_axiom"),
Self::DecideQ0 => f.write_str("decide_q0"),
Self::BitwiseInduction => f.write_str("bitwise_induction"),
Self::GroupPresentation => f.write_str("group_presentation"),
Self::Simplification => f.write_str("simplification"),
Self::ChineseRemainder => f.write_str("chinese_remainder"),
Self::EulerPoincare => f.write_str("euler_poincare"),
Self::ProductFormula => f.write_str("product_formula"),
Self::Composition => f.write_str("composition"),
Self::Contradiction => f.write_str("contradiction"),
Self::Computation => f.write_str("computation"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ViolationKind {
Missing,
TypeMismatch,
CardinalityViolation,
ValueCheck,
LevelMismatch,
}
impl fmt::Display for ViolationKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Missing => f.write_str("missing"),
Self::TypeMismatch => f.write_str("type_mismatch"),
Self::CardinalityViolation => f.write_str("cardinality_violation"),
Self::ValueCheck => f.write_str("value_check"),
Self::LevelMismatch => f.write_str("level_mismatch"),
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum ProofModality {
Computation,
Axiomatic,
Inductive,
}
impl fmt::Display for ProofModality {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Computation => f.write_str("computation"),
Self::Axiomatic => f.write_str("axiomatic"),
Self::Inductive => f.write_str("inductive"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct WittLevel {
witt_length: u32,
}
impl WittLevel {
pub const W8: Self = Self { witt_length: 8 };
pub const W16: Self = Self { witt_length: 16 };
pub const W24: Self = Self { witt_length: 24 };
pub const W32: Self = Self { witt_length: 32 };
#[inline]
pub const fn new(witt_length: u32) -> Self {
Self { witt_length }
}
#[inline]
pub const fn witt_length(self) -> u32 {
self.witt_length
}
#[inline]
pub const fn bits_width(self) -> u32 {
self.witt_length
}
#[inline]
pub const fn cycle_size(self) -> Option<u128> {
1u128.checked_shl(self.bits_width())
}
#[inline]
pub const fn next_witt_level(self) -> Self {
Self {
witt_length: self.witt_length + 8,
}
}
}
impl fmt::Display for WittLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "w{}", self.witt_length)
}
}