pub enum MultilinearPolyOracle<F: Field> {
Transparent {
id: OracleId,
inner: TransparentPolyOracle<F>,
name: Option<String>,
},
Committed {
id: CommittedId,
oracle_id: OracleId,
n_vars: usize,
tower_level: usize,
name: Option<String>,
},
Repeating {
id: OracleId,
inner: Box<MultilinearPolyOracle<F>>,
log_count: usize,
name: Option<String>,
},
Interleaved {
id: OracleId,
poly0: Box<MultilinearPolyOracle<F>>,
poly1: Box<MultilinearPolyOracle<F>>,
name: Option<String>,
},
Merged {
id: OracleId,
poly0: Box<MultilinearPolyOracle<F>>,
poly1: Box<MultilinearPolyOracle<F>>,
name: Option<String>,
},
Projected {
id: OracleId,
projected: Projected<F>,
name: Option<String>,
},
Shifted {
id: OracleId,
shifted: Shifted<F>,
name: Option<String>,
},
Packed {
id: OracleId,
packed: Packed<F>,
name: Option<String>,
},
LinearCombination {
id: OracleId,
linear_combination: LinearCombination<F>,
name: Option<String>,
},
ZeroPadded {
id: OracleId,
inner: Box<MultilinearPolyOracle<F>>,
n_vars: usize,
name: Option<String>,
},
}
Expand description
A multilinear polynomial oracle in the polynomial IOP model.
In the multilinear polynomial IOP model, a prover sends multilinear polynomials to an oracle, and the verifier may at the end of the protocol query their evaluations at chosen points. An oracle is a verifier and prover’s shared view of a polynomial that can be queried for evaluations by the verifier.
There are three fundamental categories of oracles:
- Transparent oracles. These are multilinear polynomials with a succinct description and evaluation algorithm that are known to the verifier. When the verifier queries a transparent oracle, it evaluates the polynomial itself.
- Committed oracles. These are polynomials actually sent by the prover. When the polynomial IOP is compiled to an interactive protocol, these polynomial are committed with a polynomial commitment scheme.
- Virtual oracles. A virtual multilinear oracle is not actually sent by the prover, but instead admits an interactive reduction for evaluation queries to evaluation queries to other oracles. This is formalized in DP23 Section 4.
Variants§
Transparent
Committed
Repeating
Interleaved
Merged
Projected
Shifted
Packed
LinearCombination
ZeroPadded
Implementations§
source§impl<F: Field> MultilinearPolyOracle<F>
impl<F: Field> MultilinearPolyOracle<F>
pub fn id(&self) -> OracleId
pub fn label(&self) -> String
pub fn name(&self) -> Option<&str>
pub fn n_vars(&self) -> usize
sourcepub fn binary_tower_level(&self) -> usize
pub fn binary_tower_level(&self) -> usize
Maximum tower level of the oracle’s values over the boolean hypercube.
pub fn into_composite(self) -> CompositePolyOracle<F>
Trait Implementations§
source§impl<F: Clone + Field> Clone for MultilinearPolyOracle<F>
impl<F: Clone + Field> Clone for MultilinearPolyOracle<F>
source§fn clone(&self) -> MultilinearPolyOracle<F>
fn clone(&self) -> MultilinearPolyOracle<F>
Returns a copy of the value. Read more
1.6.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreimpl<F: Eq + Field> Eq for MultilinearPolyOracle<F>
impl<F: Field> StructuralPartialEq for MultilinearPolyOracle<F>
Auto Trait Implementations§
impl<F> Freeze for MultilinearPolyOracle<F>
impl<F> !RefUnwindSafe for MultilinearPolyOracle<F>
impl<F> Send for MultilinearPolyOracle<F>
impl<F> Sync for MultilinearPolyOracle<F>
impl<F> Unpin for MultilinearPolyOracle<F>
impl<F> !UnwindSafe for MultilinearPolyOracle<F>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more