Documentation

Mathlib.Data.List.EditDistance.Estimator

Estimator for Levenshtein distance. #

The usual algorithm for computing Levenshtein distances provides successively better lower bounds for the Levenshtein distance as it runs, as proved in Mathlib/Data/List/EditDistance/Bounds.lean.

In this file we package that fact as an instance of

Estimator (Thunk.mk fun _ => levenshtein C xs ys) (LevenshteinEstimator C xs ys)

allowing us to use the Estimator framework for Levenshtein distances.

This is then used in the implementation of rewrite_search to avoid needing the entire edit distance calculation in unlikely search paths.

structure LevenshteinEstimator' {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) :

Data showing that the Levenshtein distance from xs to ys is bounded below by the minimum Levenshtein distance between some suffix of xs and a particular suffix of ys.

This bound is (non-strict) monotone as we take longer suffixes of ys.

This is an auxiliary definition for the later LevenshteinEstimator: this variant constructs a lower bound for the pair consisting of the Levenshtein distance from xs to ys, along with the length of ys.

Instances For
    instance instEstimatorDataProdNatMkMkLevenshteinLengthLevenshteinEstimator' {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) :
    EstimatorData { fn := fun (x : Unit) => (levenshtein C xs ys, ys.length) } (LevenshteinEstimator' C xs ys)
    Equations
      instance estimator' {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] [CanonicallyOrderedAdd δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) :
      Estimator { fn := fun (x : Unit) => (levenshtein C xs ys, ys.length) } (LevenshteinEstimator' C xs ys)
      Equations
        def LevenshteinEstimator {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] [CanonicallyOrderedAdd δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) :

        An estimator for Levenshtein distances.

        Equations
          Instances For
            instance instEstimatorMkLevenshteinLevenshteinEstimatorOfWellFoundedGTSubtypeProdNatLe {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] [CanonicallyOrderedAdd δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) [∀ (a : δ × ), WellFoundedGT { x : δ × // x a }] :
            Estimator { fn := fun (x : Unit) => levenshtein C xs ys } (LevenshteinEstimator C xs ys)
            Equations
              instance instBotLevenshteinEstimator {α : Type u_1} {β δ : Type} [AddCommMonoid δ] [LinearOrder δ] [CanonicallyOrderedAdd δ] (C : Levenshtein.Cost α β δ) (xs : List α) (ys : List β) :

              The initial estimator for Levenshtein distances.

              Equations