@kha: I initially planned to use the UTF8 API only in very special cases, but I found them to be super useful. They allow us to implement an efficient String library mostly in Lean. However, the there was a problem: `abbrev String.Pos := USize`. This definition is fine for a low level API, but this is not the case anymore. By having `String.Pos := USize`, we will not be able to prove natural theorems for the `String` API. For example, `String.map id s = s` did not hold. We would have to include the artificial antecedent `s.length <= usizeMax` (or something like this). I suspect it would be very painful. So, this commit defines `String.Pos` as `Nat`. The performance overhead seems to be very small. |
||
|---|---|---|
| .. | ||
| control | ||
| data | ||
| lean | ||
| coe.lean | ||
| core.lean | ||
| default.lean | ||
| env_ext.lean | ||
| fix.lean | ||
| init.md | ||
| io.lean | ||
| platform.lean | ||
| util.lean | ||
| wf.lean | ||