This module provides a basic theory around the naive AIG node creation functions. It is mostly fundamental work for the cached versions later on.
@[simp]
theorem Std.Sat.AIG.denote_invert_true {α : Type} [Hashable α] [DecidableEq α] {assign : α → Bool} {aig : AIG α} {gate : Nat} {hgate : gate < aig.decls.size} :
theorem Std.Sat.AIG.idx_trichotomy {α : Type} [Hashable α] [DecidableEq α] {start : Nat} (aig : AIG α) (hstart : start < aig.decls.size) {prop : Prop} (hfalse : aig.decls[start] = Decl.false → prop) (hatom : ∀ (a : α), aig.decls[start] = Decl.atom a → prop) (hgate : ∀ (lhs rhs : Fanin), aig.decls[start] = Decl.gate lhs rhs → prop) :
prop
theorem Std.Sat.AIG.denote_idx_trichotomy {α : Type} [Hashable α] [DecidableEq α] {start : Nat} {assign : α → Bool} {invert res : Bool} {aig : AIG α} {hstart : start < aig.decls.size} (hfalse :
aig.decls[start] = Decl.false →
⟦assign, { aig := aig, ref := { gate := start, invert := invert, hgate := hstart } }⟧ = res) (hatom :
∀ (a : α),
aig.decls[start] = Decl.atom a →
⟦assign, { aig := aig, ref := { gate := start, invert := invert, hgate := hstart } }⟧ = res) (hgate :
∀ (lhs rhs : Fanin),
aig.decls[start] = Decl.gate lhs rhs →
⟦assign, { aig := aig, ref := { gate := start, invert := invert, hgate := hstart } }⟧ = res) :