This PR lets `induction` print a warning if a variable occurring in the `using` clause is generalized. Fixes #10683.
20 lines
844 B
Text
20 lines
844 B
Text
def orderedInsert (a : Nat) : List Nat → List Nat
|
|
| [] => [a]
|
|
| b :: l => if a < b then a :: b :: l else b :: orderedInsert a l
|
|
|
|
/-- error: Variable `x` cannot be generalized because the induction principle depends on it -/
|
|
#guard_msgs in
|
|
example : orderedInsert x l = [] := by
|
|
induction l using orderedInsert.induct_unfolding (a := x) generalizing x
|
|
|
|
/-- error: Variable `x` cannot be generalized because the induction principle depends on it -/
|
|
#guard_msgs in
|
|
example : orderedInsert x l = [] := by
|
|
fun_induction orderedInsert generalizing x
|
|
|
|
axiom foo_induct (n : Nat) {motive : Nat → Prop} (h : ∀ m, n = m): ∀ m, motive m
|
|
|
|
/-- error: Variable `n` cannot be generalized because the induction principle depends on it -/
|
|
#guard_msgs in
|
|
example (n m : Nat) : n = m := by
|
|
induction m using foo_induct (n := n) generalizing n
|