Documentation

Mathlib.Tactic.Translate.GuessName

Name generation APIs for to_additive-like attributes #

The data that is required to guess the name of a translation.

  • Dictionary used by guessName to autogenerate names. This only transforms single name components, unlike abbreviationDict.

    Note: guessName capitalizes the output according to the capitalization of the input. In order for this to work, the input should always start with a lower case letter, and the output should always start with an upper case letter.

  • abbreviationDict : Std.HashMap String String

    We need to fix a few abbreviations after applying nameDict, i.e. replacing ZeroLE by Nonneg. This dictionary contains these fixes. The input should contain entries that is in lowerCamelCase (e.g. ltzero; the initial sequence of capital letters should be lower-cased) and the output should be in UpperCamelCase (e.g. LTZero). When applying the dictionary, we lower-case the output if the input was also given in lower-case.

Instances For

    A set of strings of names that end in a capital letter.

    • If the string contains a lowercase letter, the string should be split between the first occurrence of a lower-case letter followed by an upper-case letter.
    • If multiple strings have the same prefix, they should be grouped by prefix
    • In this case, the second list should be prefix-free (no element can be a prefix of a later element)

    Todo: automate the translation from String to an element in this TreeMap (but this would require having something similar to the rb_lmap from Lean 3).

    Equations
    Instances For

      This function takes a String and splits it into separate parts based on the following naming conventions.

      E.g. #eval "InvHMulLEConjugate₂SMul_ne_top".splitCase yields ["Inv", "HMul", "LE", "Conjugate₂", "SMul", "_", "ne", "_", "top"].

      Replaces characters in s by lower-casing the first characters until a non-upper-case character is found.

      If r starts with an upper-case letter, return s, otherwise return s with the initial sequence of upper-case letters lower-cased.

      Equations
      Instances For

        Decapitalize the first element of a list if s starts with a lower-case letter. Note that we need to decapitalize multiple characters in some cases, in examples like HMul or HAdd.

        Equations
        Instances For

          Apply the nameDict and decapitalize the output like the input.

          E.g.

          #eval applyNameDict ["Inv", "HMul", "LE", "Conjugate₂", "SMul", "_", "ne", "_", "top"]
          

          yields ["Neg", "HAdd", "LE", "Conjugate₂", "VAdd", "_", "ne", "_", "top"].

          @[irreducible]

          Helper for fixAbbreviation. Note: this function has a quadratic number of recursive calls, but is not a performance bottleneck.

          Equations
          Instances For

            Replace substrings according to abbreviationDict, matching the case of the first letter.

            Example:

            #eval applyNameDict ["Mul", "Support"]
            

            gives the preliminary translation ["Add", "Support"]. Subsequently

            #eval fixAbbreviation ["Add", "Support"]
            

            "fixes" this translation and returns Support.

            Equations
            Instances For

              Autogenerate additive name. This runs in several steps:

              1. Split according to capitalisation rule and at _.
              2. Apply word-by-word translation rules.
              3. Fix up abbreviations that are not word-by-word translations, like "addComm" or "Nonneg".
              Equations
              • One or more equations did not get rendered due to their size.
              Instances For