feat: detail error message about invalid mutual blocks (#2949)
To prevent user confusion as in this [Zulip message](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Matching.20on.20prop/near/341456011)
This commit is contained in:
parent
feb0cb6fc4
commit
d4f10bc07e
3 changed files with 19 additions and 1 deletions
|
|
@ -348,7 +348,7 @@ def elabMutual : CommandElab := fun stx => do
|
|||
throwErrorAt bad "invalid 'decreasing_by' in 'mutual' block, it must be used after the 'end' keyword"
|
||||
elabMutualDef stx[1].getArgs hints
|
||||
else
|
||||
throwError "invalid mutual block"
|
||||
throwError "invalid mutual block: either all elements of the block must be inductive declarations, or they must all be definitions/theorems/abbrevs"
|
||||
|
||||
/- leading_parser "attribute " >> "[" >> sepBy1 (eraseAttr <|> Term.attrInstance) ", " >> "]" >> many1 ident -/
|
||||
@[builtin_command_elab «attribute»] def elabAttr : CommandElab := fun stx => do
|
||||
|
|
|
|||
17
tests/lean/invalidMutualError.lean
Normal file
17
tests/lean/invalidMutualError.lean
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
/-! Test invalid mutual block error message -/
|
||||
|
||||
inductive Foo : Type where
|
||||
| foo0 : Nat → Foo
|
||||
| foo1 : Foo → Foo
|
||||
| foo2 : Foo → Foo → Foo
|
||||
|
||||
mutual
|
||||
|
||||
inductive Bar1 : Foo → Prop where
|
||||
| mk {f : Foo} : Bar f → Bar1 (.foo1 f)
|
||||
|
||||
def Bar : Foo → Prop
|
||||
| .foo1 f => Bar1 f
|
||||
| _ => True
|
||||
|
||||
end
|
||||
1
tests/lean/invalidMutualError.lean.expected.out
Normal file
1
tests/lean/invalidMutualError.lean.expected.out
Normal file
|
|
@ -0,0 +1 @@
|
|||
invalidMutualError.lean:8:0-17:3: error: invalid mutual block: either all elements of the block must be inductive declarations, or they must all be definitions/theorems/abbrevs
|
||||
Loading…
Add table
Reference in a new issue