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.
This commit is contained in:
parent
f8f1b2212a
commit
017a1f2b94
3 changed files with 28 additions and 1 deletions
|
|
@ -64,7 +64,7 @@ partial def structuresPass : Pass where
|
|||
if decl.isLet || decl.isImplementationDetail then
|
||||
return false
|
||||
else
|
||||
let some const := decl.type.getAppFn.constName? | return false
|
||||
let some const := (← instantiateMVars decl.type).getAppFn.constName? | return false
|
||||
return interesting.contains const
|
||||
match goals with
|
||||
| [goal] => postprocess goal interesting
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ partial def typeAnalysisPass : Pass where
|
|||
name := `typeAnalysis
|
||||
run' goal := do
|
||||
checkContext goal
|
||||
let analysis ← PreProcessM.getTypeAnalysis
|
||||
trace[Meta.Tactic.bv] m!"Type analysis found structures: {analysis.interestingStructures.toList}"
|
||||
trace[Meta.Tactic.bv] m!"Type analysis found enums: {analysis.interestingEnums.toList}"
|
||||
return goal
|
||||
where
|
||||
checkContext (goal : MVarId) : PreProcessM Unit := do
|
||||
|
|
|
|||
24
tests/bv_relation.lean
Normal file
24
tests/bv_relation.lean
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
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
|
||||
Loading…
Add table
Reference in a new issue