//! Nucleus grafting certificate //! Source: HeytingLean.NucleusGrafting.Certificate //! //! Theorem preserved: certificate_gap_nonzero //! Theorem preserved: certificate_records_nonnegative_quantization //! Theorem preserved: certificate_has_gap_witness use crate::types::GapDecomposition; /// A certificate asserting verified nucleus grafting for a model layer #[derive(Debug, Clone)] pub struct NucleusGraftingCertificate { pub model_name: String, pub graft_layer: String, pub gap: GapDecomposition, } impl NucleusGraftingCertificate { pub fn new( model_name: impl Into, graft_layer: impl Into, gap: GapDecomposition, ) -> Self { assert!(gap.total > 0.0, "gap must be positive"); Self { model_name: model_name.into(), graft_layer: graft_layer.into(), gap, } } /// Theorem: certificate_gap_nonzero pub fn gap_nonzero(&self) -> bool { self.gap.total > 0.0 } /// Theorem: certificate_records_nonnegative_quantization pub fn quantization_nonneg(&self) -> bool { self.gap.quantization >= 0.0 } } #[cfg(test)] mod tests { use super::*; use crate::types::GapDecomposition; #[test] fn test_certificate() { let g = GapDecomposition::new(0.1, 0.5, 0.0); let c = NucleusGraftingCertificate::new("mlp", "relu1", g); assert!(c.gap_nonzero()); assert!(c.quantization_nonneg()); } }