Documentation

Mathlib.Data.String.Basic

Strings #

Supplementary theorems about the String type.

@[irreducible]
def String.ltb (s₁ sβ‚‚ : Legacy.Iterator) :
Bool

< on string iterators. This coincides with < on strings as lists.

Instances For
    @[implicit_reducible]
    instance String.LT' :
    LT String

    This overrides an instance in core Lean.

    @[implicit_reducible]
    instance String.decidableLT' :
    DecidableLT String

    This instance has a prime to avoid the name of the corresponding instance in core Lean.

    @[irreducible]
    def String.ltb.inductionOn {motive : Legacy.Iterator β†’ Legacy.Iterator β†’ Sort u} (it₁ itβ‚‚ : Legacy.Iterator) (ind : (s₁ sβ‚‚ : String) β†’ (i₁ iβ‚‚ : Pos.Raw) β†’ { s := sβ‚‚, i := iβ‚‚ }.hasNext = true β†’ { s := s₁, i := i₁ }.hasNext = true β†’ Pos.Raw.get s₁ i₁ = Pos.Raw.get sβ‚‚ iβ‚‚ β†’ motive { s := s₁, i := i₁ }.next { s := sβ‚‚, i := iβ‚‚ }.next β†’ motive { s := s₁, i := i₁ } { s := sβ‚‚, i := iβ‚‚ }) (eq : (s₁ sβ‚‚ : String) β†’ (i₁ iβ‚‚ : Pos.Raw) β†’ { s := sβ‚‚, i := iβ‚‚ }.hasNext = true β†’ { s := s₁, i := i₁ }.hasNext = true β†’ Β¬Pos.Raw.get s₁ i₁ = Pos.Raw.get sβ‚‚ iβ‚‚ β†’ motive { s := s₁, i := i₁ } { s := sβ‚‚, i := iβ‚‚ }) (base₁ : (s₁ sβ‚‚ : String) β†’ (i₁ iβ‚‚ : Pos.Raw) β†’ { s := sβ‚‚, i := iβ‚‚ }.hasNext = true β†’ Β¬{ s := s₁, i := i₁ }.hasNext = true β†’ motive { s := s₁, i := i₁ } { s := sβ‚‚, i := iβ‚‚ }) (baseβ‚‚ : (s₁ sβ‚‚ : String) β†’ (i₁ iβ‚‚ : Pos.Raw) β†’ Β¬{ s := sβ‚‚, i := iβ‚‚ }.hasNext = true β†’ motive { s := s₁, i := i₁ } { s := sβ‚‚, i := iβ‚‚ }) :
    motive it₁ itβ‚‚

    Induction on String.ltb.

    Instances For
      theorem String.ltb_cons_addChar' (c : Char) (s₁ sβ‚‚ : Legacy.Iterator) :
      ltb { s := ofList (c :: s₁.s.toList), i := s₁.i + c } { s := ofList (c :: sβ‚‚.s.toList), i := sβ‚‚.i + c } = ltb s₁ sβ‚‚
      theorem String.ltb_cons_addChar (c : Char) (cs₁ csβ‚‚ : List Char) (i₁ iβ‚‚ : Pos.Raw) :
      ltb { s := ofList (c :: cs₁), i := i₁ + c } { s := ofList (c :: csβ‚‚), i := iβ‚‚ + c } = ltb { s := ofList cs₁, i := i₁ } { s := ofList csβ‚‚, i := iβ‚‚ }
      @[simp]
      theorem String.lt_iff_toList_lt {s₁ sβ‚‚ : String} :
      s₁ < sβ‚‚ ↔ s₁.toList < sβ‚‚.toList
      @[implicit_reducible]
      instance String.LE :
      _root_.LE String
      @[implicit_reducible]
      instance String.decidableLE :
      DecidableLE String
      @[simp]
      theorem String.le_iff_toList_le {s₁ sβ‚‚ : String} :
      s₁ ≀ sβ‚‚ ↔ s₁.toList ≀ sβ‚‚.toList
      @[deprecated String.ofList_nil (since := "2025-10-31")]
      theorem String.asString_nil :
      ofList [] = ""
      @[deprecated String.ofList_toList (since := "2025-10-31")]
      theorem String.asString_toList (s : String) :
      ofList s.toList = s
      theorem String.toList_nonempty {s : String} :
      s β‰  "" β†’ s.toList = Legacy.front s :: (Legacy.drop s 1).toList
      @[simp]
      theorem String.head_empty :
      "".toList.head! = default
      @[implicit_reducible]
      theorem String.ofList_eq {l : List Char} {s : String} :
      ofList l = s ↔ l = s.toList
      @[deprecated String.toList_ofList (since := "2025-10-31")]
      theorem List.toList_asString (l : List Char) :
      (String.ofList l).toList = l
      @[deprecated String.ofList_eq (since := "2025-10-31")]
      theorem List.asString_eq {l : List Char} {s : String} :
      String.ofList l = s ↔ l = s.toList