lean4-htt/tests/lean/run/issue8257.lean
Markus Himmel eb01aaeee4
chore: rename String.Iterator to String.Legacy.Iterator (#11152)
This PR renames `String.Iterator` to `String.Legacy.Iterator`.

From the docstring of `String.Legacy.Iterator`:

> This is a no-longer-supported legacy API that will be removed in a
future release. You should use
> `String.ValidPos` instead, which is similar, but safer. To iterate
over a string `s`, start with
> `p : s.startValidPos`, advance it using `p.next`, access the current
character using `p.get` and
> check if the position is at the end using `p = s.endValidPos` or
`p.IsAtEnd`.
2025-11-13 13:46:22 +00:00

44 lines
900 B
Text

/--
info: Try this:
[apply] termination_by xs.length / 2 - i
-/
#guard_msgs in
def foo (xs : String) (i : Nat) (a b : String.Legacy.Iterator) : Bool :=
if xs.length / 2 ≤ i then
true
else if a.curr ≠ b.curr then
false
else
foo xs (i + 1) a.next b.prev
termination_by?
/--
info: Try this:
[apply] termination_by xs.length / 2 - i
-/
#guard_msgs in
def bar (xs : String) (i : Nat) (a b : String.Legacy.Iterator) : Bool :=
if i < xs.length / 2 then
if a.curr ≠ b.curr then
false
else
bar xs (i + 1) a.next b.prev
else
true
termination_by?
/--
info: Try this:
[apply] termination_by xs.length / 2 - i
-/
#guard_msgs in
def baz (xs : String) (i : Nat) (a b : String.Legacy.Iterator) : Bool :=
if ¬ (i < xs.length / 2) then
true
else
if a.curr ≠ b.curr then
false
else
baz xs (i + 1) a.next b.prev
termination_by?