use crate::Diagram;
use crate::certificate::ChangeColumn;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct InterfaceChainTerm {
pub cell: Vec<usize>,
pub coefficient: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct InterfaceCell {
pub vertices: Vec<usize>,
pub value: f64,
pub boundary: Vec<InterfaceChainTerm>,
}
impl InterfaceCell {
pub fn dimension(&self) -> usize {
self.vertices.len() - 1
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InterfaceCancellation {
pub upper: Vec<usize>,
pub lower: Vec<usize>,
pub coefficient: u32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct RelativeInterfaceWork {
pub input_cells: usize,
pub cancellations: usize,
pub core_cells: usize,
pub reduction_additions: usize,
}
#[derive(Debug, Clone)]
pub struct RelativeInterfaceCertificate {
pub(super) max_dim: usize,
pub(super) modulus: u32,
pub(super) protected_vertices: Vec<usize>,
pub(super) input_cells: Vec<Vec<InterfaceCell>>,
pub(super) cancellations: Vec<InterfaceCancellation>,
pub(super) core_cells: Vec<Vec<InterfaceCell>>,
pub(super) columns: Vec<Vec<ChangeColumn>>,
pub(super) diagram: Diagram,
pub(super) digest: [u8; 32],
pub(super) work: RelativeInterfaceWork,
}