Library for converting and serializing any symbolic circuit into AIGER format. It can also be used to query and iterate over the AIGER inputs, gates, and outputs which could be used to generate an AST for a solver.
# use aiger_circuit::Aiger;
# use aiger_circuit::circuit::SimpleCircuit;
# let output = SimpleCircuit::lit(false);
// Output is the output value of a complex circuit
let aiger = Aiger::with_output(&output);
let serialized = aiger.serialize_binary();# use aiger_circuit::Aiger;
# use aiger_circuit::circuit::SimpleCircuit;
# let output = SimpleCircuit::lit(false);
let aiger = Aiger::with_output(&output);
for input in aiger.inputs() {
// Iterate over all variables used in the circuit
}
for gate in aiger.gates() {
// Iterate over all unique gates in the circuit
}
for output in aiger.outputs() {
// Iterate over all circuit outputs
}The SimpleCircuit object can be used to build circuits for Aiger.
# use aiger_circuit::Aiger;
# use aiger_circuit::circuit::{AsAigerCircuit, SimpleCircuit};
let output = !SimpleCircuit::var(0) & SimpleCircuit::lit(true);
let aiger = Aiger::with_output(&output);
let serialized = aiger.serialize_binary();This library does not prescribe a circuit representation. Simply implement the AsAigerCircuit trait to enable support for your own custom circuit type.
# use aiger_circuit::circuit::{AsAigerCircuit, AigerCircuit};
# struct YourCircuitType { }
impl<'a> AsAigerCircuit<'a> for YourCircuitType {
type Inner = YourCircuitType;
fn as_aiger_circuit(&'a self) -> AigerCircuit<'a, Self::Inner> {
// Generate approprite AigerCircuit type (And, Not, Variable, Literal)
todo!();
}
}