Documentation

Init.Data.String.Lemmas.Pattern.TakeDrop.Basic

theorem String.Slice.Pattern.Model.Pos.skip?_eq_some_iff {ρ : Type} {pat : ρ} [PatternModel pat] [ForwardPattern pat] [LawfulForwardPatternModel pat] {s : Slice} {pos res : s.Pos} :
pos.skip? pat = some res IsLongestMatchAt pat pos res
theorem String.Slice.Pos.skip?_cast {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.ForwardPattern pat] [Pattern.Model.LawfulForwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
(pos.cast hst).skip? pat = Option.map (fun (x : s.Pos) => x.cast hst) (pos.skip? pat)
theorem String.Slice.Pos.skip?_congr {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.ForwardPattern pat] [Pattern.Model.LawfulForwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
pos.skip? pat = Option.map (fun (x : t.Pos) => x.cast ) ((pos.cast hst).skip? pat)
theorem String.Slice.Pattern.Model.Pos.skipWhile_eq {ρ : Type} {pat : ρ} [PatternModel pat] [StrictPatternModel pat] [ForwardPattern pat] [LawfulForwardPatternModel pat] {s : Slice} {pos : s.Pos} :
pos.skipWhile pat = (matchAt? pat pos).elim pos fun (x : s.Pos) => x.skipWhile pat
theorem String.Slice.Pos.skipWhile_cast {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.ForwardPattern pat] [Pattern.Model.LawfulForwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
(pos.cast hst).skipWhile pat = (pos.skipWhile pat).cast hst
theorem String.Slice.Pos.skipWhile_congr {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.ForwardPattern pat] [Pattern.Model.LawfulForwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
pos.skipWhile pat = ((pos.cast hst).skipWhile pat).cast
theorem String.Slice.Pattern.Model.Pos.skipWhile_eq_self {ρ : Type} {pat : ρ} [PatternModel pat] [ForwardPattern pat] [LawfulForwardPatternModel pat] {s : Slice} {pos : s.Pos} (h : ¬MatchesAt pat pos) :
pos.skipWhile pat = pos
theorem String.Slice.Pattern.Model.Pos.skipWhile_eq_iff {ρ : Type} (pat : ρ) [PatternModel pat] [ForwardPattern pat] [LawfulForwardPatternModel pat] {s : Slice} (startPos endPos : s.Pos) :
startPos.skipWhile pat = endPos IsLongestMatchAtChain pat startPos endPos (¬MatchesAt pat endPos IsLongestMatchAt pat endPos endPos)
theorem String.Slice.Pattern.Model.Pos.le_skipWhile_of_isLongestMatchAtChain {ρ : Type} (pat : ρ) [PatternModel pat] [ForwardPattern pat] [LawfulForwardPatternModel pat] {s : Slice} {startPos endPos : s.Pos} (h : IsLongestMatchAtChain pat startPos endPos) :
endPos startPos.skipWhile pat
@[simp]
theorem String.Slice.takeWhile_eq_self_iff {ρ : Type} {pat : ρ} [Pattern.ForwardPattern pat] {s : Slice} :
s.takeWhile pat = s s.all pat = true
@[simp]
theorem String.Slice.isEmpty_dropWhile {ρ : Type} {pat : ρ} [Pattern.ForwardPattern pat] {s : Slice} :
(s.dropWhile pat).isEmpty = s.all pat
theorem String.Slice.Pos.revSkip?_cast {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.BackwardPattern pat] [Pattern.Model.LawfulBackwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
(pos.cast hst).revSkip? pat = Option.map (fun (x : s.Pos) => x.cast hst) (pos.revSkip? pat)
theorem String.Slice.Pos.revSkip?_congr {ρ : Type} {pat : ρ} [Pattern.Model.PatternModel pat] [Pattern.BackwardPattern pat] [Pattern.Model.LawfulBackwardPatternModel pat] {s t : Slice} (hst : s.copy = t.copy) {pos : s.Pos} :
pos.revSkip? pat = Option.map (fun (x : t.Pos) => x.cast ) ((pos.cast hst).revSkip? pat)
theorem String.Slice.Pattern.Model.Pos.revSkipWhile_eq {ρ : Type} {pat : ρ} [PatternModel pat] [StrictPatternModel pat] [BackwardPattern pat] [LawfulBackwardPatternModel pat] {s : Slice} {pos : s.Pos} :
pos.revSkipWhile pat = (revMatchAt? pat pos).elim pos fun (x : s.Pos) => x.revSkipWhile pat
theorem String.Slice.Pattern.Model.Pos.revSkipWhile_eq_iff {ρ : Type} (pat : ρ) [PatternModel pat] [BackwardPattern pat] [LawfulBackwardPatternModel pat] {s : Slice} (startPos endPos : s.Pos) :
endPos.revSkipWhile pat = startPos IsLongestRevMatchAtChain pat startPos endPos (¬RevMatchesAt pat startPos IsLongestRevMatchAt pat startPos startPos)
theorem String.Slice.Pattern.Model.Pos.revSkipWhile_le_of_isLongestRevMatchAtChain {ρ : Type} (pat : ρ) [PatternModel pat] [BackwardPattern pat] [LawfulBackwardPatternModel pat] {s : Slice} {startPos endPos : s.Pos} (h : IsLongestRevMatchAtChain pat startPos endPos) :
endPos.revSkipWhile pat startPos
@[simp]
@[simp]
@[simp]
theorem String.Pos.skip?_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.ForwardPattern pat] {s : String} {pos : s.Pos} :
theorem String.Pos.skipWhile_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.ForwardPattern pat] {s : String} {pos : s.Pos} :
pos.toSlice.skipWhile pat = (pos.skipWhile pat).toSlice
@[simp]
@[simp]
theorem String.all_eq_all_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.ForwardPattern pat] {s : String} :
s.all pat = s.toSlice.all pat
@[simp]
theorem String.all_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.ForwardPattern pat] {s : String} :
s.toSlice.all pat = s.all pat
@[simp]
@[simp]
theorem String.isEmpty_dropWhile {ρ : Type} {pat : ρ} [Slice.Pattern.ForwardPattern pat] {s : String} :
(s.dropWhile pat).isEmpty = s.all pat
@[simp]
theorem String.endsWith_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.BackwardPattern pat] {s : String} :
@[simp]
theorem String.revAll_toSlice {ρ : Type} {pat : ρ} [Slice.Pattern.BackwardPattern pat] {s : String} :
s.toSlice.revAll pat = s.revAll pat
@[simp]