Skip to main content

ProofIR

Struct ProofIR 

Source
pub struct ProofIR {
    pub refined_types: HashMap<TypeId, RefinedTypeDecl>,
    pub fn_contracts: HashMap<FnId, FnContract>,
    pub law_theorems: Vec<LawTheorem>,
    pub unclassified_fns: Vec<UnclassifiedFn>,
}
Expand description

Output of the proof_lower pipeline stage. Every decision the proof backends will make is materialised here; backends become pure renderers.

ProofIR is intentionally NOT a closed superset of the AST — it only carries facts that proof export needs. Source-faithful emission of plain fns / verify cases still flows through the untyped AST path, same as runtime backends (VM, Rust, WASM).

Fields§

§refined_types: HashMap<TypeId, RefinedTypeDecl>

Every refinement-lifted user type, keyed by opaque TypeId from the symbol table. Same-bare-name refined records in two modules (A.Natural vs B.Natural) get distinct IDs, so their predicates never merge. Includes types declared in the entry items and in dependent modules; name resolution happens once in populate_refined_types, consumers look up directly by id through ctx.symbol_table.

§fn_contracts: HashMap<FnId, FnContract>

Per-pure-fn contract describing what proof artifact the fn lowers to (native / fuel / structural / linear recurrence). Keyed by opaque FnId from the symbol table — name resolution happens once in populate_fn_contracts; consumers thereafter use ctx.symbol_table to resolve &FnDef → FnId and look up directly. Cross-module same-bare-name fns get distinct IDs, so the lookup is unambiguous without per-call-site scope plumbing.

§law_theorems: Vec<LawTheorem>

Per-verify-law theorem decomposed into quantifiers, premises, and claim with all wrapper-strip / val-projection / drop-vs- keep decisions baked in, plus the pinned proof strategy.

§unclassified_fns: Vec<UnclassifiedFn>

Recursive pure fns whose shape fell outside every recognised pattern. Surfaced as diagnostics (“recursive function ‘foo’ is outside proof subset (…)”) and steers the consumer to either skip the fn or emit it as a partial/axiom fallback. Carried in ProofIR so consumers don’t re-run the classifier just to see what failed.

Trait Implementations§

Source§

impl Clone for ProofIR

Source§

fn clone(&self) -> ProofIR

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 Debug for ProofIR

Source§

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

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

impl Default for ProofIR

Source§

fn default() -> ProofIR

Returns the “default value” for a type. Read more

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V