Skip to main content

ProofRung

Enum ProofRung 

Source
pub enum ProofRung {
    Trivial,
    Counting,
    Parity,
    ModCount {
        p: u64,
    },
    Nullstellensatz {
        min_degree: usize,
    },
    BeyondBudget,
}
Expand description

Where an UNSAT instance sits in the proof-complexity landscape, as our certified cuts see it. This is a ladder of proof systems (Cook–Reckhow): each rung crushes families the cheaper ones are blind to. Counting and Parity are incomparable narrow detectors — pigeonhole needs counting and is invisible to GF(2); Tseitin needs GF(2) and is invisible to counting — while Nullstellensatz{min_degree} is the universal algebraic height over GF(2), complete at degree n. The honest face of the wall: an instance whose narrow cuts are silent and whose minimum NS degree is large sits at the top of this ladder, and the cost at that height is exponential. We can locate an instance on the ladder; we cannot prove the top rung is unavoidable for a family — that lower bound is exactly P vs NP, and it stays open.

Variants§

§

Trivial

Closed by unit propagation / carving alone — no real refutation needed.

§

Counting

A counting / Hall (pigeonhole) cut crushes it. Resolution-exponential families like PHP live here; incomparable to Parity.

§

Parity

A GF(2) parity (Gaussian-elimination) cut crushes it. Tseitin / XOR families live here; incomparable to Counting.

§

ModCount

A certified mod-p Gaussian cut crushes it — Parity carried to the odd prime p: the CNF is a recognized one-hot encoding of a GF(p) linear system whose refutation re-checks. One rung per characteristic, each incomparable to the others and to Counting/Parity (the prime incomparability of polycalc_gfp). Reported only by the extended cascade (weakest_crushing_rung_with_char); the legacy cascade predates the characteristic axis.

Fields

§

Nullstellensatz

No narrow cut fires; refuted only by Nullstellensatz / Polynomial Calculus over GF(2) at this minimum degree — the universal algebraic height. The rigid residue lives here.

Fields

§min_degree: usize
§

BeyondBudget

No cut and no NS refutation within the degree budget — the wall as our detectors perceive it.

Trait Implementations§

Source§

impl Clone for ProofRung

Source§

fn clone(&self) -> ProofRung

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ProofRung

Source§

impl Debug for ProofRung

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ProofRung

Source§

impl PartialEq for ProofRung

Source§

fn eq(&self, other: &ProofRung) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ProofRung

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.