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`.
44 lines
900 B
Text
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?
|