#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum RealSign {
Negative,
Zero,
Positive,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ZeroKnowledge {
Zero,
NonZero,
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct MagnitudeBits {
pub msd: i32,
pub exact_msd: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct RealStructuralFacts {
pub sign: Option<RealSign>,
pub zero: ZeroKnowledge,
pub exact_rational: bool,
pub magnitude: Option<MagnitudeBits>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum StructuralComparison {
Less,
Equal,
Greater,
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum DomainStatus {
Valid,
Invalid,
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum StructuralKind {
ExactRational,
PiLike,
ExpLike,
SqrtLike,
LogLike,
TrigExact,
ProductConstant,
ComputableOpaque,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ZeroOneStatus {
Zero,
One,
NeitherOrUnknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum RationalStorageClass {
Zero,
WordSized,
MultiLimb,
VeryLarge,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum PrimitiveFloatStatus {
Zero,
NormalFinite,
SubnormalOrUnderflows,
Overflows,
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PrimitiveFacts {
pub f32: PrimitiveFloatStatus,
pub f64: PrimitiveFloatStatus,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct IdentityFacts {
pub known_one: bool,
pub known_minus_one: bool,
pub zero_or_one: ZeroOneStatus,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct RationalFacts {
pub exact_integer: bool,
pub exact_small_integer_i64: bool,
pub exact_dyadic: bool,
pub power_of_two: bool,
pub storage: RationalStorageClass,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct OrderingFacts {
pub cmp_one: StructuralComparison,
pub abs_cmp_one: StructuralComparison,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct DomainFacts {
pub sqrt: DomainStatus,
pub log: DomainStatus,
pub unit_interval_closed: DomainStatus,
pub unit_interval_open: DomainStatus,
pub acosh: DomainStatus,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SymbolicFacts {
pub kind: StructuralKind,
pub has_sqrt_factor: bool,
pub has_pi_factor: bool,
pub has_exp_factor: bool,
pub computable_required: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct RealDetailedFacts {
pub base: RealStructuralFacts,
pub identity: IdentityFacts,
pub rational: RationalFacts,
pub primitive: PrimitiveFacts,
pub ordering: OrderingFacts,
pub domains: DomainFacts,
pub symbolic: SymbolicFacts,
}