Documentation

Lean.Meta.LazyDiscrTree

Lazy Discrimination Tree #

This file defines a new type of discrimination tree optimized for rapid population of imported modules for use in tactics. It uses a lazy initialization strategy.

The discrimination tree can be created through createImportedEnvironment. This creates a discrimination tree from all imported modules in an environment using a callback that provides the entries as InitEntry values.

The function getMatch can be used to get the values that match the expression as well as an updated lazy discrimination tree that has elaborated additional parts of the tree.

Hash function

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    Equations
    • Lean.Meta.LazyDiscrTree.instInhabitedTrie = { default := { values := default, star := default, children := default, pending := default } }
    Equations
    • Lean.Meta.LazyDiscrTree.instEmptyCollectionTrie = { emptyCollection := { values := #[], star := 0, children := , pending := #[] } }

    LazyDiscrTree is a variant of the discriminator tree datatype DiscrTree in Lean core that is designed to be efficiently initializable with a large number of patterns. This is useful in contexts such as searching an entire Lean environment for expressions that match a pattern.

    Lazy discriminator trees achieve good performance by minimizing the amount of work that is done up front to build the discriminator tree. When first adding patterns to the tree, only the root discriminator key is computed and processing the remaining terms is deferred until demanded by a match.

    Instances For
      Equations
      • One or more equations did not get rendered due to their size.

      Find values that match e in d.

      The results are ordered so that the longest matches in terms of number of non-star keys are first with ties going to earlier operators first.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        Equations
        • Lean.Meta.LazyDiscrTree.instInhabitedPreDiscrTree = { default := { roots := default, tries := default } }

        Merge two discrimination trees.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Equations
          • Lean.Meta.LazyDiscrTree.PreDiscrTree.instAppendPreDiscrTree = { append := Lean.Meta.LazyDiscrTree.PreDiscrTree.append }
          @[reducible]

          Initial entry in lazy discrimination tree

          Instances For

            Constructs an initial entry from an expression and value.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              Creates an entry for a subterm of an initial entry.

              This is slightly more efficient than using fromExpr on subterms since it avoids a redundant call to whnf.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  Equations
                  • Lean.Meta.LazyDiscrTree.instInhabitedInitResults = { default := { tree := { roots := , tries := #[] }, errors := #[] } }

                  Combine two initial results.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    Equations
                    • Lean.Meta.LazyDiscrTree.InitResults.instAppendInitResults = { append := Lean.Meta.LazyDiscrTree.InitResults.append }

                    Create an imported environment for tree.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Allocate constants to tasks according to constantsPerTask.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For