// ---
// tags: nox, rust
// crystal-type: source
// crystal-domain: comp
// ---
//! call โ non-deterministic witness injection (Layer 2)
//! look โ deterministic state read (BBG polynomial evaluation)
//!
//! the prover provides a witness; Layer 1 constraints validate it.
//! the verifier never calls provide() โ it checks the zheng proof.
//! look reads committed polynomial state โ same inputs always produce same output.
use Goldilocks;
use crate;
/// look provider trait โ deterministic BBG state reads
///
/// commitment: BBG root field element extracted from the object at BBG_ROOT_AXIS
/// namespace: evaluation dimension of BBG_poly (0..9)
/// key: evaluation point within that dimension
///
/// returns Some(value) or None (= lookup unavailable, e.g. BBG not connected)
/// call provider trait โ the prover's interface to inject witnesses
///
/// extends LookProvider: every call provider also supports deterministic lookups.
/// NullCalls provides both (returning None for both).
///
/// `Sync` is required because the `std` feature runs binary sub-formulas on
/// separate threads, each holding a `&dyn CallProvider<N>` read-only reference.
/// All current implementations (NullCalls, test stubs) are unit structs and
/// trivially `Sync`. User-defined providers must not hold non-Sync interior state.
/// null provider โ always returns None for both call and look.
/// used for pure Layer 1 execution and tests without privacy/BBG.
;
/// alias kept for spec-side terminology; same type as NullCalls.
pub type NullLooks = NullCalls;