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.

Equations
  • Lean.Meta.LazyDiscrTree.instInhabitedTrie = { default := { values := default, star := default, children := default, pending := default } }

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

    Create a key path from an expression using the function used for patterns.

    This differs from Lean.Meta.DiscrTree.mkPath and targetPath in that the expression should uses free variables rather than meta-variables for holes.

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

      Create a key path from an expression we are matching against.

      This should have mvars instantiated where feasible.

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

        This drops a specific key from the lazy discrimination tree so that all the entries matching that key exactly are removed.

        Instances For

          A match result contains the terms formed from matching a term against patterns in the discrimination tree.

          • elts : Array (Array (Array α))

            The elements in the match result.

            The top-level array represents an array from score values to the results with that score. A score is the number of non-star matches in a pattern against the term, and thus bounded by the size of the term being matched against. The elements of this array are themselves arrays of non-empty arrays so that we can defer concatenating results until needed.

          Instances For

            Number of elements in result

            Equations
            Instances For
              @[specialize #[]]

              Append results to array

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

                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.

                Instances For

                  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 }

                    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
                          • Lean.Meta.LazyDiscrTree.InitResults.instAppendInitResults = { append := Lean.Meta.LazyDiscrTree.InitResults.append }
                          Equations
                          Instances For
                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              Create a discriminator tree for imported environment.

                              Instances For
                                @[irreducible]

                                Allocate constants to tasks according to constantsPerTask.

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

                                  A discriminator tree for the current module's declarations only.

                                  Note. We use different discriminator trees for imported and current module declarations since imported declarations are typically much more numerous but not changed after the environment is created.

                                  Instances For

                                    Create a discriminator tree for current module declarations.

                                    Instances For

                                      Creates reference for lazy discriminator tree that only contains this module's definitions.

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

                                        Returns candidates from this module in this module that match the expression.

                                        • moduleRef is a references to a lazy discriminator tree only containing this module's definitions.
                                        Instances For
                                          def Lean.Meta.LazyDiscrTree.findMatchesExt {α β : Type} (moduleTreeRef : Lean.Meta.LazyDiscrTree.ModuleDiscrTreeRef α) (ext : Lean.EnvExtension (IO.Ref (Option (Lean.Meta.LazyDiscrTree α)))) (addEntry : Lean.NameLean.ConstantInfoLean.MetaM (Array (Lean.Meta.LazyDiscrTree.InitEntry α))) (droppedKeys : List (List Lean.Meta.LazyDiscrTree.Key) := []) (constantsPerTask : Nat := 1000) (adjustResult : Natαβ) (ty : Lean.Expr) :

                                          findMatchesExt searches for entries in a lazily initialized discriminator tree.

                                          It provides some additional capabilities beyond findMatches to adjust results based on priority and cache module declarations

                                          • modulesTreeRef points to the discriminator tree for local environment. Used for caching and created by createLocalTree.
                                          • ext should be an environment extension with an IO.Ref for caching the import lazy discriminator tree.
                                          • addEntry is the function for creating discriminator tree entries from constants.
                                          • droppedKeys contains keys we do not want to consider when searching for matches. It is used for dropping very general keys.
                                          • constantsPerTask stores number of constants in imported modules used to decide when to create new task.
                                          • adjustResult takes the priority and value to produce a final result.
                                          • ty is the expression type.
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            findMatches searches for entries in a lazily initialized discriminator tree.

                                            • ext should be an environment extension with an IO.Ref for caching the import lazy discriminator tree.
                                            • addEntry is the function for creating discriminator tree entries from constants.
                                            • droppedKeys contains keys we do not want to consider when searching for matches. It is used for dropping very general keys.
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For