lean4-htt/tests/lean/run/bv_relation.lean
Henrik Böving 77ae842496
feat: bv_decide remove casts (#7390)
This PR makes bv_decide's preprocessing handle casts, as we are in the
constant BitVec fragment we should be able to always remove them using
BitVec.cast_eq.
2025-03-07 22:40:53 +00:00

24 lines
595 B
Text

import Std.Tactic.BVDecide
structure State where
x : BitVec 8
y : BitVec 8
z : BitVec 8
inductive Transfer : State → State → Prop
| step : Transfer ⟨x, y, z⟩ ⟨y, z, x⟩
@[simp]
theorem Transfer.iff_x : Transfer s1 s2 ↔ (s2.x = s1.y ∧ s2.y = s1.z ∧ s2.z = s1.x) := by
constructor
· intro h
cases h
simp
· intro h
cases s1 <;> cases s2 <;> simp_all [Transfer.step]
def P (s : State) : Prop := s.x > 3
example : ∀ s1 s2 s3 s4, P s1 ∧ Transfer s1 s2 ∧ P s2 ∧ Transfer s2 s3 ∧ P s3 ∧ Transfer s3 s4 → P s4 := by
simp [P]
bv_decide