This PR adjusts the error message when `apply` fails to unify. It is clearer about distinguishing the term being applied and the goal, as well as distinguishing the "conclusion" of the given term and the term itself. --------- Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
46 lines
1.2 KiB
Text
46 lines
1.2 KiB
Text
set_option pp.mvars false
|
||
|
||
/--
|
||
error: type mismatch
|
||
congrArg ?_ (congrArg ?_ ?_)
|
||
has type
|
||
?_ (?_ ?_) = ?_ (?_ ?_) : Prop
|
||
but is expected to have type
|
||
OfNat.ofNat 0 = OfNat.ofNat 1 : Prop
|
||
-/
|
||
#guard_msgs in
|
||
theorem ex1 : (@OfNat.ofNat Nat 0 Zero.toOfNat0) = @OfNat.ofNat Nat 1 One.toOfNat1 := by
|
||
refine congrArg _ (congrArg _ ?_)
|
||
rfl
|
||
|
||
/--
|
||
error: tactic 'apply' failed, could not unify the conclusion of `@congrArg`
|
||
?_ ?_ = ?_ ?_
|
||
with the goal
|
||
OfNat.ofNat 0 = OfNat.ofNat 1
|
||
|
||
Note: The full type of `@congrArg` is
|
||
∀ {α : Sort _} {β : Sort _} {a₁ a₂ : α} (f : α → β), a₁ = a₂ → f a₁ = f a₂
|
||
⊢ OfNat.ofNat 0 = OfNat.ofNat 1
|
||
-/
|
||
#guard_msgs in
|
||
example : (@OfNat.ofNat Nat 0 Zero.toOfNat0) = @OfNat.ofNat Nat 1 One.toOfNat1 := by
|
||
apply congrArg
|
||
apply congrArg
|
||
apply rfl
|
||
|
||
/--
|
||
error: tactic 'apply' failed, could not unify the conclusion of `@congrArg`
|
||
?_ ?_ = ?_ ?_
|
||
with the goal
|
||
OfNat.ofNat 0 = OfNat.ofNat 1
|
||
|
||
Note: The full type of `@congrArg` is
|
||
∀ {α : Sort _} {β : Sort _} {a₁ a₂ : α} (f : α → β), a₁ = a₂ → f a₁ = f a₂
|
||
⊢ OfNat.ofNat 0 = OfNat.ofNat 1
|
||
-/
|
||
#guard_msgs in
|
||
theorem ex2 : (@OfNat.ofNat Nat 0 Zero.toOfNat0) = @OfNat.ofNat Nat 1 One.toOfNat1 := by
|
||
apply congrArg
|
||
apply congrArg
|
||
apply rfl
|