lean4-htt/tests/lean/run/4413.lean
Joachim Breitner 8424ddbb3e
feat: prettier expected type mismatch error message (#9099)
This PR improves the “expected type mismatch” error message by omitting
the type's types when they are defeq, and putting them into separate
lines when not.

I found it rather tediuos to parse the error message when the expected
type is long, because I had to find the `:` in the middle of a large
expression somewhere. Also, when both are of sort `Prop` or `Type` it
doesn't add much value to print the sort (and it’s only one hover away
anyways).
2025-07-01 07:50:53 +00:00

51 lines
1.1 KiB
Text

set_option pp.mvars false
structure Note where
pitch : UInt64
start : Nat
def Note.containsNote (n1 n2 : Note) : Prop :=
n1.start ≤ n2.start
def Note.lowerSemitone (n : Note) : Note :=
{ n with pitch := n.pitch - 1 }
theorem Note.self_containsNote_lowerSemitone_self (n : Note) :
n.containsNote (Note.lowerSemitone n) := by
simp [Note.containsNote, Note.lowerSemitone]
/--
error: type mismatch
rfl
has type
?_ = ?_
but is expected to have type
n = n - 1
-/
#guard_msgs in
set_option maxRecDepth 100 in
set_option maxHeartbeats 200 in
example (n : UInt64) : n = n - 1 :=
rfl
namespace Ex2
def lowerSemitone := fun (n : Note) => Note.mk (n.1 - 0) n.2
set_option maxRecDepth 100 in
theorem Note.self_containsNote_lowerSemitone_self (n : Note) :
0 ≤ (lowerSemitone n).start :=
(Nat.zero_le (Note.start n))
end Ex2
namespace Ex3
def lowerSemitone := fun (n : Note) => Note.mk (n.1 + 100) n.2
set_option maxRecDepth 200 in
theorem Note.self_containsNote_lowerSemitone_self (n : Note) :
0 ≤ (lowerSemitone n).start :=
(Nat.zero_le (Note.start n))
end Ex3