A bunch libraries to support doing Feynman integral reduction by sparse interpolation over finite fields in Rust.
IBP systems are eliminated numerically modulo word-sized primes, and the exact rational coefficients are recovered from evaluations alone.
zippel-interp: Zippel's black-box sparse polynomial interpolation over prime fieldszippel-interp::rational: Rational function reconstruction ala the method of Thiele and Zippelzippel-interp::benor: Ben-Or/Tiwari interpolation from about two evaluations per termzippel-interp::geometric: Sparse recovery with smooth-subgroup exponent decodingzippel-lift: Lifts to Q by CRT and rational number reconstructionzippel-laporta: IBP generation and Laporta elimination over GF(p)zippel-laporta::block: Adaptive block-triangular reduction over GF(p)zippel-gcd: Multivariate GCD, cofactors and LCM of polycore polynomialszippel-gcd::zippel: Zippel's modular GCD with LINZIP interpolationzippel-gcd::huang_gao: Huang–Gao GCD by separated Hensel lifting (asymptotic SOTA, 2026)zippel-gcd::huang_monagan: Huang–Monagan GCD by prime substitutionzippel-gcd::hu_monagan: Hu–Monagan GCD and cofactor interpolationzippel-gcd::hu_monagan_bivariate: Hu–Monagan GCD with bivariate images
cargo build
cargo testcargo run -p zippel-interp --example determinant
cargo run -p zippel-interp --example linsolve
cargo run -p zippel-laporta --example hello
cargo run -p zippel-laporta --example bubble
cargo run --release -p zippel-laporta --example box
cargo run --release -p zippel-laporta --example double_box
cargo run -p zippel-gcd --example demoThe massless one-loop bubble with dots, reduced to its master integral
use zippel_laporta::ibp::Family;
let bubble = Family {
vars: ["d", "s"].map(String::from).to_vec(),
loops: 1,
props: vec![(vec![1, 0], vec![]), (vec![1, 1], vec![])], // k^2, (k + q)^2
lines: 2,
legs: vec![vec![vec![0, 0, 2]]], // 2 q.q = 2s
symmetries: vec![vec![1, 0]],
};
let (system, plan, coefficients) = bubble.reduce(&[vec![2, 1], vec![2, 2]], 2, 0).unwrap();
print!("{}", system.render(&plan, &coefficients));I(2,1) = (-d + 3) / (s) * I(1,1)
I(2,2) = (d^2 - 9*d + 18) / (s^2) * I(1,1)
MIT Licensed. Copyright 2024-2026 Stephen Diehl. See LICENSE for details.