lean4-htt/tests/bv_relation.lean
Henrik Böving 017a1f2b94
fix: bv_decide structures pass instantiate mvars (#7309)
This PR fixes a bug where bv_decide's new structure support would
sometimes not case split on all available structure fvars as their type
was an mvar.
2025-03-03 21:27: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