Documentation

Std.Sat.AIG.RefVecOperator.Fold

structure Std.Sat.AIG.RefVec.FoldTarget {α : Type} [Hashable α] [DecidableEq α] (aig : AIG α) :
Instances For
    @[specialize #[]]
    def Std.Sat.AIG.RefVec.fold {α : Type} [Hashable α] [DecidableEq α] (aig : AIG α) (target : FoldTarget aig) :
    Equations
    Instances For
      @[irreducible, specialize #[]]
      def Std.Sat.AIG.RefVec.fold.go {α : Type} [Hashable α] [DecidableEq α] (aig : AIG α) (acc : aig.Ref) (idx len : Nat) (input : aig.RefVec len) (f : (aig : AIG α) → aig.BinaryInputEntrypoint α) [LawfulOperator α BinaryInput f] :
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[irreducible]
        theorem Std.Sat.AIG.RefVec.fold.go_le_size {α : Type} [Hashable α] [DecidableEq α] {len : Nat} {aig : AIG α} (acc : aig.Ref) (idx : Nat) (s : aig.RefVec len) (f : (aig : AIG α) → aig.BinaryInputEntrypoint α) [LawfulOperator α BinaryInput f] :
        aig.decls.size (go aig acc idx len s f).aig.decls.size
        theorem Std.Sat.AIG.RefVec.fold_le_size {α : Type} [Hashable α] [DecidableEq α] {aig : AIG α} (target : FoldTarget aig) :
        aig.decls.size (fold aig target).aig.decls.size
        @[irreducible]
        theorem Std.Sat.AIG.RefVec.fold.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {len : Nat} {aig : AIG α} (acc : aig.Ref) (i : Nat) (s : aig.RefVec len) (f : (aig : AIG α) → aig.BinaryInputEntrypoint α) [LawfulOperator α BinaryInput f] (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (go aig acc i len s f).aig.decls.size) :
        (go aig acc i len s f).aig.decls[idx] = aig.decls[idx]
        theorem Std.Sat.AIG.RefVec.fold_decl_eq {α : Type} [Hashable α] [DecidableEq α] {aig : AIG α} (target : FoldTarget aig) (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (fold aig target).aig.decls.size) :
        (fold aig target).aig.decls[idx] = aig.decls[idx]
        @[irreducible]
        theorem Std.Sat.AIG.RefVec.fold.denote_go_and {α : Type} [Hashable α] [DecidableEq α] {len : Nat} {assign : αBool} {aig : AIG α} (acc : aig.Ref) (curr : Nat) (hcurr : curr len) (input : aig.RefVec len) :
        (assign, { aig := (go aig acc curr len input mkAndCached).aig, ref := (go aig acc curr len input mkAndCached).ref } = true) = (assign, { aig := aig, ref := acc } = true ∀ (idx : Nat) (hidx1 : idx < len), curr idxassign, { aig := aig, ref := input.get idx hidx1 } = true)
        @[simp]
        theorem Std.Sat.AIG.RefVec.denote_fold_and {α : Type} [Hashable α] [DecidableEq α] {len : Nat} {assign : αBool} {aig : AIG α} (s : aig.RefVec len) :
        assign, fold aig (FoldTarget.mkAnd s) = true ∀ (idx : Nat) (hidx : idx < len), assign, { aig := aig, ref := s.get idx hidx } = true