lean4-htt/tests/lean/run/1234.lean
jrr6 020da5bffb
fix: behavior of hard line breaks in Format strings (#8457)
This PR fixes an issue when including a hard line break in a `Format`
that caused subsequent (ordinary) line breaks to be erroneously
flattened to spaces.

This issue is especially important for displaying notes and hints in
error messages, as these components could appear garbled due to improper
line-break rendering.
2025-05-29 22:10:27 +00:00

124 lines
3 KiB
Text

theorem le_of_not_lt {a b : Nat} (_: ¬ a < b): b ≤ a := sorry
theorem lt_of_succ_lt (_: a + 1 < b): a < b := sorry
theorem succ_pred_eq_of_pos (_: 0 < v): v - 1 + 1 = v := sorry
set_option trace.Meta.Tactic.simp true
--set_option trace.Debug.Meta.Tactic.simp true
set_option Elab.async false -- for stable message ordering in #guard_msgs
/--
warning: declaration uses 'sorry'
---
trace: [Meta.Tactic.simp.rewrite] h₁:1000:
k ≤ v - 1
==>
True
[Meta.Tactic.simp.discharge] succ_pred_eq_of_pos discharge ✅️
0 < v
[Meta.Tactic.simp.rewrite] h₂:1000:
0 < v
==>
True
[Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000:
v - 1 + 1
==>
v
[Meta.Tactic.simp.rewrite] ite_true:1000:
if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩
==>
⟨v, ⋯⟩
[Meta.Tactic.simp.rewrite] eq_self:1000:
⟨v, ⋯⟩ = ⟨v, ⋯⟩
==>
True
-/
#guard_msgs in
example (h₁: k ≤ v - 1) (h₂: 0 < v):
(if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by
simp only [
h₁, h₂,
ite_true,
succ_pred_eq_of_pos
----------------
, le_of_not_lt
, lt_of_succ_lt
]
-- it works
/--
warning: declaration uses 'sorry'
---
trace: [Meta.Tactic.simp.rewrite] h₁:1000:
k ≤ v - 1
==>
True
[Meta.Tactic.simp.discharge] succ_pred_eq_of_pos discharge ✅️
0 < v
[Meta.Tactic.simp.rewrite] h₂:1000:
0 < v
==>
True
[Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000:
v - 1 + 1
==>
v
[Meta.Tactic.simp.rewrite] ite_true:1000:
if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩
==>
⟨v, ⋯⟩
[Meta.Tactic.simp.rewrite] eq_self:1000:
⟨v, ⋯⟩ = ⟨v, ⋯⟩
==>
True
-/
#guard_msgs in
example (h₁: k ≤ v - 1) (h₂: 0 < v):
(if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by
simp (config := { memoize := false}) only [
h₁, h₂,
ite_true,
succ_pred_eq_of_pos
----------------
, le_of_not_lt
, lt_of_succ_lt
]
/--
warning: declaration uses 'sorry'
---
trace: [Meta.Tactic.simp.rewrite] h₁:1000:
k ≤ v - 1
==>
True
[Meta.Tactic.simp.discharge] succ_pred_eq_of_pos discharge ✅️
0 < v
[Meta.Tactic.simp.rewrite] h₂:1000:
0 < v
==>
True
[Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000:
v - 1 + 1
==>
v
[Meta.Tactic.simp.rewrite] ite_true:1000:
if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩
==>
⟨v, ⋯⟩
[Meta.Tactic.simp.rewrite] eq_self:1000:
⟨v, ⋯⟩ = ⟨v, ⋯⟩
==>
True
-/
#guard_msgs in
example (h₁: k ≤ v - 1) (h₂: 0 < v):
(if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by
simp only [
h₁, h₂,
ite_true,
succ_pred_eq_of_pos
----------------
--, le_of_not_lt
--, lt_of_succ_lt
]