use crate::{EF, F};
pub type NodeId = u32;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TraceSource {
PreprocessedLocal,
MainLocal,
}
#[derive(Debug, Clone, Copy)]
pub enum DagNode {
InputLeaf {
source: TraceSource,
col: u32,
},
PublicValue {
idx: u32,
},
GlobalCumulativeSum {
idx: u32,
},
ConstF {
value: F,
},
ConstEF {
value: EF,
},
IsFirstRow,
IsLastRow,
IsTransition,
AddF {
a: NodeId,
b: NodeId,
},
SubF {
a: NodeId,
b: NodeId,
},
MulF {
a: NodeId,
b: NodeId,
},
NegF {
a: NodeId,
},
AddEF {
a: NodeId,
b: NodeId,
},
SubEF {
a: NodeId,
b: NodeId,
},
MulEF {
a: NodeId,
b: NodeId,
},
NegEF {
a: NodeId,
},
EFFromF {
a: NodeId,
},
EFAddF {
a: NodeId,
b: NodeId,
},
EFSubF {
a: NodeId,
b: NodeId,
},
EFMulF {
a: NodeId,
b: NodeId,
},
}
#[derive(Debug, Clone, Copy)]
pub struct ConstraintRef {
pub root: NodeId,
pub alpha_index: u32,
}
#[derive(Debug)]
pub struct ConstraintDag {
pub nodes: Vec<DagNode>,
pub constraints: Vec<ConstraintRef>,
pub preprocessed_width: u32,
pub main_width: u32,
}
impl ConstraintDag {
pub fn num_nodes(&self) -> usize {
self.nodes.len()
}
pub fn num_constraints(&self) -> usize {
self.constraints.len()
}
}