Documentation

Std.Tactic.BVDecide.Bitblast.BVExpr.Circuit.Impl.Operations.Cpop

This module contains the implementation of a bitblaster for BitVec.cpop.

Instances For

    Extract a single bit in position start in target and extend it to have width w

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      Instances For

        Extract one bit at a time from the initial vector, zero-extend it to width w, and append it the result to acc, which eventually will have size outWidth = w * w

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[irreducible]
          def Std.Tactic.BVDecide.BVExpr.bitblast.blastExtractAndExtend.go {α : Type} [Hashable α] [DecidableEq α] {outWidth : Nat} {aig : Sat.AIG α} {w : Nat} (idx : Nat) (x : aig.RefVec w) (acc : aig.RefVec (w * idx)) (h : idx w) (h' : outWidth = w * w) :
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastExtractAndExtend.go_le_size {α : Type} [Hashable α] [DecidableEq α] {w outWidth : Nat} (aig : Sat.AIG α) (idx : Nat) (x : aig.RefVec w) (acc : aig.RefVec (w * idx)) (h : idx w) (h' : outWidth = w * w) :
            aig.decls.size (go idx x acc h h').aig.decls.size
            theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastExtractAndExtend.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {w outWidth : Nat} (aig : Sat.AIG α) (idx' : Nat) (x : aig.RefVec w) (acc : aig.RefVec (w * idx')) (h : idx' w) (h' : outWidth = w * w) (idx : Nat) (h1 : idx < aig.decls.size) (h2 : idx < (go idx' x acc h h').aig.decls.size) :
            (go idx' x acc h h').aig.decls[idx] = aig.decls[idx]
            Instances For
              def Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopLayer {α : Type} [Hashable α] [DecidableEq α] {outWidth : Nat} (aig : Sat.AIG α) (target : blastCpopLayerTarget aig outWidth) :

              Given a vector of references oldLayer, add the iterNum-th couple of elements and append the result of the addition to newLayer

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[irreducible]
                def Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopLayer.go {α : Type} [Hashable α] [DecidableEq α] {outWidth : Nat} {aig : Sat.AIG α} {w len : Nat} (iterNum : Nat) (oldLayer : aig.RefVec (len * w)) (newLayer : aig.RefVec (iterNum * w)) (hold : 2 * (iterNum - 1) < len) (hout : outWidth = (len + 1) / 2 * w) :
                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopLayer.go_le_size {α : Type} [Hashable α] [DecidableEq α] {len w outWidth : Nat} (aig : Sat.AIG α) (iterNum : Nat) (oldLayer : aig.RefVec (len * w)) (newLayer : aig.RefVec (iterNum * w)) (hold : 2 * (iterNum - 1) < len) (hout : outWidth = (len + 1) / 2 * w) :
                  aig.decls.size (go iterNum oldLayer newLayer hold hout).aig.decls.size
                  theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopLayer.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {len w outWidth : Nat} (aig : Sat.AIG α) (iterNum : Nat) (oldLayer : aig.RefVec (len * w)) (newLayer : aig.RefVec (iterNum * w)) (hold : 2 * (iterNum - 1) < len) (hout : outWidth = (len + 1) / 2 * w) (idx : Nat) (h1 : idx < (go iterNum oldLayer newLayer hold hout).aig.decls.size) (h2 : idx < aig.decls.size) :
                  (go iterNum oldLayer newLayer hold hout).aig.decls[idx] = aig.decls[idx]
                  Instances For

                    Construct a parallel-prefix-sum circuit, invoking blastCpopLayer for each layer, until a single addition node is left.

                    Equations
                    Instances For
                      @[irreducible]
                      def Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopTree.go {α : Type} [Hashable α] [DecidableEq α] {w : Nat} {aig : Sat.AIG α} {len : Nat} (x : aig.RefVec (len * w)) (h : 0 < len) :
                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopTree.go_le_size {α : Type} [Hashable α] [DecidableEq α] {len w : Nat} (aig : Sat.AIG α) (oldLayer : aig.RefVec (len * w)) (h : 0 < len) :
                        aig.decls.size (go oldLayer h).aig.decls.size
                        theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpopTree.go_decl_eq {α : Type} [Hashable α] [DecidableEq α] {len w : Nat} (aig : Sat.AIG α) (oldLayer : aig.RefVec (len * w)) (h : 0 < len) (idx : Nat) (h1 : idx < (go oldLayer h).aig.decls.size) (h2 : idx < aig.decls.size) :
                        (go oldLayer h).aig.decls[idx] = aig.decls[idx]

                        Extend all the bits in the input BitVec w x to have width w, then construct the parallel-prefix-sum circuit.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpop_le_size {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (input : aig.RefVec w) :
                          aig.decls.size (blastCpop aig input).aig.decls.size
                          theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastCpop_decl_eq {α : Type} [Hashable α] [DecidableEq α] {w : Nat} (aig : Sat.AIG α) (input : aig.RefVec w) (idx : Nat) (h1 : idx < (blastCpop aig input).aig.decls.size) (h2 : idx < aig.decls.size) :
                          (blastCpop aig input).aig.decls[idx] = aig.decls[idx]