Skip to content

Rust library for generating AIGER (and-inverter) circuits

License

Notifications You must be signed in to change notification settings

mnemonikr/aiger-circuit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

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.

Using Aiger

# 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();

Iterating over circuit components

# 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
}

Simple Circuit

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();

Circuit Conversion

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!();
    }
}

About

Rust library for generating AIGER (and-inverter) circuits

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages