Documentation

Mathlib.Util.Qq

Extra Qq helpers #

This file contains some additional functions for using the quote4 library more conveniently.

def Qq.getLevelQ (e : Lean.Expr) :
Lean.MetaM ((u : Lean.Level) × Q(Sort u))

If e has type Sort u for some level u, return u and e : Q(Sort u).

Equations
Instances For
    def Qq.getLevelQ' (e : Lean.Expr) :
    Lean.MetaM ((u : Lean.Level) × Q(Type u))

    If e has type Type u for some level u, return u and e : Q(Type u).

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      def Qq.inferTypeQ' (e : Lean.Expr) :
      Lean.MetaM ((u : Lean.Level) × (α : have u := u; Q(Type u)) × Q(«$α»))

      Variant of inferTypeQ that yields a type in Type u rather than Sort u. Throws an error if the type is a Prop or if it's otherwise not possible to represent the universe as Type u (for example due to universe level metavariables).

      Equations
      Instances For
        theorem Qq.QuotedDefEq.rfl {u : Lean.Level} {α : Q(Sort u)} {a : Q(«$α»)} :
        «$a» =Q «$a»
        def Qq.findLocalDeclWithTypeQ? {u : Lean.Level} (sort : Q(Sort u)) :
        Lean.MetaM (Option Q(«$sort»))

        Return a local declaration whose type is definitionally equal to sort.

        This is a Qq version of Lean.Meta.findLocalDeclWithType?

        Equations
        Instances For
          def Qq.mkDecideProofQ (p : Q(Prop)) :
          Lean.MetaM Q(«$p»)

          Returns a proof of p : Prop using decide p.

          This is a Qq version of Lean.Meta.mkDecideProof.

          Equations
          Instances For
            def Qq.mkSetLiteralQ {u v : Lean.Level} {α : Q(Type u)} (β : Q(Type v)) (elems : List Q(«$α»)) :
            autoParam Q(EmptyCollection «$β») mkSetLiteralQ._auto_1 → autoParam Q(Singleton «$α» «$β») mkSetLiteralQ._auto_3 → autoParam Q(Insert «$α» «$β») mkSetLiteralQ._auto_5 → Q(«$β»)

            Join a list of elements of type α into a container β.

            Usually β is q(Multiset α) or q(Finset α) or q(Set α).

            As an example

            mkSetLiteralQ q(Finset ℝ) (List.range 4 |>.map fun n : ℕ ↦ q($n•π))
            

            produces the expression {0 • π, 1 • π, 2 • π, 3 • π} : Finset ℝ.

            Equations
            Instances For
              def Qq.mkNatLitQ (n : Nat) :
              Q(Nat)

              Returns the natural number literal n as used in the frontend. It is a OfNat.ofNat application. Recall that all theorems and definitions containing numeric literals are encoded using OfNat.ofNat applications in the frontend.

              This is a Qq version of Lean.mkNatLit.

              Equations
              Instances For
                def Qq.mkIntLitQ (n : Int) :
                Q(Int)

                Returns the integer literal n.

                This is a Qq version of Lean.mkIntLit.

                Equations
                Instances For
                  def Qq.mkIntNumeralQ {u : Lean.Level} (α : Q(Type u)) (i : Int) :
                  Lean.MetaM Q(«$α»)

                  Build the numeral of the integer i in α: mkNumeral on the absolute value, negated if i is negative.

                  Equations
                  Instances For
                    def Qq.mkRatNumeralQ {u : Lean.Level} (α : Q(Type u)) (r : Rat) :
                    Lean.MetaM Q(«$α»)

                    Build the numeral of the rational r in α: the integer numeral of r.num if r is an integer, and otherwise p / q on the numerals of |r.num| and r.den, negated if r is negative, which is the form in which norm_num displays rationals.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      def Qq.mkFinLitQ (n i : Nat) :
                      Lean.MetaM Q(Fin «$n»)

                      Build the numeral i : Fin n.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        def Qq.mkListLitQ {u : Lean.Level} {α : Q(Type u)} :
                        List Q(«$α») → Q(List «$α»)

                        The list literal [a₀, …] of the entries as.

                        Equations
                        Instances For
                          def Qq.dropListLitQ {u : Lean.Level} {α : Q(Type u)} (n : Nat) (l : Q(List «$α»)) :
                          Q(List «$α»)

                          List.drop n on the list literal l.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          • Qq.dropListLitQ 0 l = l
                          Instances For
                            def Qq.unconsListLitQ {u : Lean.Level} {α : Q(Type u)} (l : Q(List «$α»)) :
                            Lean.MetaM ((hd : Q(«$α»)) × (tl : Q(List «$α»)) ×' «$l» =Q «$hd» :: «$tl»)

                            A specialised version of ~q($hd :: $tl).

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              def Qq.instantiateLevelMVarsQ (u : Lean.Level) :
                              Lean.MetaM ((_u' : Lean.Level) ×' _u' =QL u)

                              Instantiate the level metavariables in u, remembering that the result is defeq to u.

                              This is a Qq version of Lean.instantiateLevelMVars.

                              Equations
                              Instances For
                                def Qq.instantiateMVarsQ' {u : Lean.Level} {α : Q(Sort u)} (e : Q(«$α»)) :
                                Lean.MetaM ((e' : Q(«$α»)) ×' «$e'» =Q «$e»)

                                Instantiate the metavariables in e, remembering that the result is defeq to e.

                                This is a variant of Qq.instantiateMVarsQ which returns the Qq-fact that the new expression is equal to the previous one.

                                Equations
                                Instances For