@@ -66,7 +66,7 @@ def vars : IfExpr → List Nat
6666/--
6767A helper function to specify that two lists are disjoint.
6868-/
69- @[grind] def _root_.List.disjoint {α} [DecidableEq α] : List α → List α → Bool
69+ def _root_.List.disjoint {α} [DecidableEq α] : List α → List α → Bool
7070 | [], _ => true
7171 | x::xs, ys => x ∉ ys && xs.disjoint ys
7272
@@ -150,13 +150,13 @@ def normalize (assign : Std.HashMap Nat Bool) : IfExpr → IfExpr
150150 termination_by e => e.normSize
151151
152152-- We tell `grind` to unfold our definitions above.
153- attribute [local grind] normalized hasNestedIf hasConstantIf hasRedundantIf disjoint vars eval
153+ attribute [local grind] normalized hasNestedIf hasConstantIf hasRedundantIf disjoint vars eval List.disjoint
154154
155155theorem normalize_spec (assign : Std.HashMap Nat Bool) (e : IfExpr) :
156156 (normalize assign e).normalized
157157 ∧ (∀ f, (normalize assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
158158 ∧ ∀ (v : Nat), v ∈ vars (normalize assign e) → ¬ v ∈ assign := by
159- fun_induction normalize <;> grind (gen := 7 )
159+ fun_induction normalize with grind (gen := 7 )
160160
161161-- We can also prove other variations, where we spell "`v` is not in `assign`"
162162-- different ways, and `grind` doesn't mind.
@@ -165,13 +165,13 @@ example (assign : Std.HashMap Nat Bool) (e : IfExpr) :
165165 (normalize assign e).normalized
166166 ∧ (∀ f, (normalize assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
167167 ∧ ∀ (v : Nat), v ∈ vars (normalize assign e) → assign.contains v = false := by
168- fun_induction normalize <;> grind (gen := 7 )
168+ fun_induction normalize with grind (gen := 7 )
169169
170170example (assign : Std.HashMap Nat Bool) (e : IfExpr) :
171171 (normalize assign e).normalized
172172 ∧ (∀ f, (normalize assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
173173 ∧ ∀ (v : Nat), v ∈ vars (normalize assign e) → assign[v]? = none := by
174- fun_induction normalize <;> grind (gen := 8 )
174+ fun_induction normalize with grind (gen := 8 )
175175
176176/--
177177We recall the statement of the if-normalization problem.
@@ -207,18 +207,18 @@ theorem normalize'_spec (assign : Std.TreeMap Nat Bool) (e : IfExpr) :
207207 (normalize' assign e).normalized
208208 ∧ (∀ f, (normalize' assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
209209 ∧ ∀ (v : Nat), v ∈ vars (normalize' assign e) → ¬ v ∈ assign := by
210- fun_induction normalize' <;> grind (gen := 7 )
210+ fun_induction normalize' with grind (gen := 7 )
211211
212212example (assign : Std.TreeMap Nat Bool) (e : IfExpr) :
213213 (normalize' assign e).normalized
214214 ∧ (∀ f, (normalize' assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
215215 ∧ ∀ (v : Nat), v ∈ vars (normalize' assign e) → assign.contains v = false := by
216- fun_induction normalize' <;> grind (gen := 7 )
216+ fun_induction normalize' with grind (gen := 7 )
217217
218218example (assign : Std.TreeMap Nat Bool) (e : IfExpr) :
219219 (normalize' assign e).normalized
220220 ∧ (∀ f, (normalize' assign e).eval f = e.eval fun w => assign[w]?.getD (f w))
221221 ∧ ∀ (v : Nat), v ∈ vars (normalize' assign e) → assign[v]? = none := by
222- fun_induction normalize' <;> grind (gen := 8 )
222+ fun_induction normalize' with grind (gen := 8 )
223223
224224end IfExpr
0 commit comments