Lemmas for ASCII-casing #
These facts apply for ASCII characters only. Recall that isAlpha
, isLower
, isUpper
, toLower
,
toUpper
do not consider characters outside the ASCII character range (code points less than 128).
@[reducible, inline]
Case folding for ASCII characters only.
Alphabetic ASCII characters are mapped to their lowercase form, all other characters are left unchanged. This agrees with the Unicode case folding algorithm for ASCII characters.
#eval caseFoldAsciiOnly 'A' == 'a'
#eval caseFoldAsciiOnly 'a' == 'a'
#eval caseFoldAsciiOnly 'À' == 'À'
#eval caseFoldAsciiOnly 'à' == 'à'
#eval caseFoldAsciiOnly '$' == '$'
Equations
Instances For
Bool-valued comparison of two Char
s for ASCII-case insensitive equality.
#eval beqCaseInsensitiveAsciiOnly 'a' 'A' -- true
#eval beqCaseInsensitiveAsciiOnly 'a' 'a' -- true
#eval beqCaseInsensitiveAsciiOnly '$' '$' -- true
#eval beqCaseInsensitiveAsciiOnly 'a' 'b' -- false
#eval beqCaseInsensitiveAsciiOnly 'γ' 'Γ' -- false
#eval beqCaseInsensitiveAsciiOnly 'ä' 'Ä' -- false
Equations
- c₁.beqCaseInsensitiveAsciiOnly c₂ = (c₁.caseFoldAsciiOnly == c₂.caseFoldAsciiOnly)
Instances For
theorem
Char.beqCaseInsensitiveAsciiOnly.eqv :
Equivalence fun (x1 x2 : Char) => x1.beqCaseInsensitiveAsciiOnly x2 = true
Setoid structure on Char
using beqCaseInsensitiveAsciiOnly
Equations
- Char.beqCaseInsensitiveAsciiOnly.isSetoid = { r := fun (x1 x2 : Char) => x1.beqCaseInsensitiveAsciiOnly x2 = true, iseqv := Char.beqCaseInsensitiveAsciiOnly.eqv }
Instances For
ASCII-case insensitive implementation comparison returning an Ordering
. Useful for sorting.
#eval cmpCaseInsensitiveAsciiOnly 'a' 'A' -- eq
#eval cmpCaseInsensitiveAsciiOnly 'a' 'a' -- eq
#eval cmpCaseInsensitiveAsciiOnly '$' '$' -- eq
#eval cmpCaseInsensitiveAsciiOnly 'a' 'b' -- lt
#eval cmpCaseInsensitiveAsciiOnly 'γ' 'Γ' -- gt
#eval cmpCaseInsensitiveAsciiOnly 'ä' 'Ä' -- gt