HepLean Documentation

Std.Tactic.BVDecide.Reflect

This file contains theorems used for justifying the reflection procedure of bv_decide.

theorem Std.Tactic.BVDecide.Reflect.BitVec.and_congr (w : Nat) (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' &&& rhs' = lhs &&& rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.or_congr (w : Nat) (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' ||| rhs' = lhs ||| rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.xor_congr (w : Nat) (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' ^^^ rhs' = lhs ^^^ rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.not_congr (w : Nat) (x x' : BitVec w) (h : x = x') :
~~~x' = ~~~x
theorem Std.Tactic.BVDecide.Reflect.BitVec.shiftLeftNat_congr (n w : Nat) (x x' : BitVec w) (h : x = x') :
x' <<< n = x <<< n
theorem Std.Tactic.BVDecide.Reflect.BitVec.shiftLeft_congr (m n : Nat) (lhs : BitVec m) (rhs : BitVec n) (lhs' : BitVec m) (rhs' : BitVec n) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs <<< rhs = lhs' <<< rhs'
theorem Std.Tactic.BVDecide.Reflect.BitVec.shiftRightNat_congr (n w : Nat) (x x' : BitVec w) (h : x = x') :
x' >>> n = x >>> n
theorem Std.Tactic.BVDecide.Reflect.BitVec.shiftRight_congr (m n : Nat) (lhs : BitVec m) (rhs : BitVec n) (lhs' : BitVec m) (rhs' : BitVec n) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs >>> rhs = lhs' >>> rhs'
theorem Std.Tactic.BVDecide.Reflect.BitVec.arithShiftRight_congr (n w : Nat) (x x' : BitVec w) (h : x = x') :
x'.sshiftRight n = x.sshiftRight n
theorem Std.Tactic.BVDecide.Reflect.BitVec.add_congr (w : Nat) (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' + rhs' = lhs + rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.append_congr (lw rw : Nat) (lhs lhs' : BitVec lw) (rhs rhs' : BitVec rw) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' ++ rhs' = lhs ++ rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.replicate_congr (n w : Nat) (expr expr' : BitVec w) (h : expr' = expr) :
theorem Std.Tactic.BVDecide.Reflect.BitVec.extract_congr (start len w : Nat) (x x' : BitVec w) (h1 : x = x') :
BitVec.extractLsb' start len x' = BitVec.extractLsb' start len x
theorem Std.Tactic.BVDecide.Reflect.BitVec.rotateLeft_congr (n w : Nat) (x x' : BitVec w) (h : x = x') :
x'.rotateLeft n = x.rotateLeft n
theorem Std.Tactic.BVDecide.Reflect.BitVec.rotateRight_congr (n w : Nat) (x x' : BitVec w) (h : x = x') :
x'.rotateRight n = x.rotateRight n
theorem Std.Tactic.BVDecide.Reflect.BitVec.mul_congr (w : Nat) (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' * rhs' = lhs * rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.beq_congr {w : Nat} (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
(lhs' == rhs') = (lhs == rhs)
theorem Std.Tactic.BVDecide.Reflect.BitVec.ult_congr {w : Nat} (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs'.ult rhs' = lhs.ult rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.getLsbD_congr (i w : Nat) (e e' : BitVec w) (h : e' = e) :
e'.getLsbD i = e.getLsbD i
theorem Std.Tactic.BVDecide.Reflect.BitVec.ofBool_congr (b : Bool) (e' : BitVec 1) (h : e' = BitVec.ofBool b) :
e'.getLsbD 0 = b
theorem Std.Tactic.BVDecide.Reflect.BitVec.udiv_congr {w : Nat} (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' / rhs' = lhs / rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.umod_congr {w : Nat} (lhs rhs lhs' rhs' : BitVec w) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
lhs' % rhs' = lhs % rhs
theorem Std.Tactic.BVDecide.Reflect.BitVec.if_true {w : Nat} (discr : Bool) (lhs rhs : BitVec w) :
decide ((discr == true) = true((if discr = true then lhs else rhs) == lhs) = true) = true
theorem Std.Tactic.BVDecide.Reflect.BitVec.if_false {w : Nat} (discr : Bool) (lhs rhs : BitVec w) :
decide ((discr == false) = true((if discr = true then lhs else rhs) == rhs) = true) = true
theorem Std.Tactic.BVDecide.Reflect.Bool.not_congr (x x' : Bool) (h : x' = x) :
(!x') = !x
theorem Std.Tactic.BVDecide.Reflect.Bool.and_congr (lhs rhs lhs' rhs' : Bool) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
(lhs' && rhs') = (lhs && rhs)
theorem Std.Tactic.BVDecide.Reflect.Bool.xor_congr (lhs rhs lhs' rhs' : Bool) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
(lhs' ^^ rhs') = (lhs ^^ rhs)
theorem Std.Tactic.BVDecide.Reflect.Bool.beq_congr (lhs rhs lhs' rhs' : Bool) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
(lhs' == rhs') = (lhs == rhs)
theorem Std.Tactic.BVDecide.Reflect.Bool.imp_congr (lhs rhs lhs' rhs' : Bool) (h1 : lhs' = lhs) (h2 : rhs' = rhs) :
decide (lhs' = truerhs' = true) = decide (lhs = truerhs = true)
theorem Std.Tactic.BVDecide.Reflect.Bool.ite_congr (discr lhs rhs discr' lhs' rhs' : Bool) (h1 : discr' = discr) (h2 : lhs' = lhs) (h3 : rhs' = rhs) :
(if discr' = true then lhs' else rhs') = if discr = true then lhs else rhs
theorem Std.Tactic.BVDecide.Reflect.Bool.lemma_congr (x x' : Bool) (h1 : x' = x) (h2 : x = true) :
x' = true

Verify that a proof certificate is valid for a given formula.

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

    Verify that cert is an UNSAT proof for the SAT problem obtained by bitblasting bv.

    Equations
    Instances For