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 FiberState {
Pinned,
Free,
}
impl fmt::Display for FiberState {
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,
FiberPinning,
FiberPartition,
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::FiberPinning => f.write_str("fiber_pinning"),
Self::FiberPartition => f.write_str("fiber_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 CoordinateKind {
Stratum,
Spectrum,
Address,
}
impl fmt::Display for CoordinateKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Stratum => f.write_str("stratum"),
Self::Spectrum => f.write_str("spectrum"),
Self::Address => f.write_str("address"),
}
}
}
#[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 SaturationPhase {
Unsaturated,
PartialSaturation,
FullSaturation,
}
impl fmt::Display for SaturationPhase {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Unsaturated => f.write_str("unsaturated"),
Self::PartialSaturation => f.write_str("partial_saturation"),
Self::FullSaturation => f.write_str("full_saturation"),
}
}
}
#[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 ProofModality {
Computation,
Axiomatic,
Empirical,
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::Empirical => f.write_str("empirical"),
Self::Inductive => f.write_str("inductive"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct QuantumLevel {
index: u32,
}
impl QuantumLevel {
pub const Q0: Self = Self { index: 0 };
pub const Q1: Self = Self { index: 1 };
pub const Q2: Self = Self { index: 2 };
pub const Q3: Self = Self { index: 3 };
#[inline]
pub const fn new(index: u32) -> Self {
Self { index }
}
#[inline]
pub const fn index(self) -> u32 {
self.index
}
#[inline]
pub const fn bits_width(self) -> u32 {
8 * (self.index + 1)
}
#[inline]
pub const fn cycle_size(self) -> Option<u128> {
1u128.checked_shl(self.bits_width())
}
#[inline]
pub const fn next_level(self) -> Self {
Self {
index: self.index + 1,
}
}
}
impl fmt::Display for QuantumLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "q{}", self.index)
}
}