Documentation

Lean.Meta.Check

This is not the Kernel type checker, but an auxiliary method for checking whether terms produced by tactics and isDefEq are type correct.

Given two expressions a and b, this method tries to annotate terms with pp.explicit := true and other pp options to expose "implicit" differences. For example, suppose a and b are of the form

@HashMap Nat Nat eqInst hasInst1
@HashMap Nat Nat eqInst hasInst2

By default, the pretty printer formats both of them as HashMap Nat Nat. So, counterintuitive error messages such as

error: application type mismatch
  HashMap.insert m
argument
  m
has type
  HashMap Nat Nat
but is expected to have type
  HashMap Nat Nat

would be produced. By adding pp.explicit := true, we can generate the more informative error

error: application type mismatch
  HashMap.insert m
argument
  m
has type
  @HashMap Nat Nat eqInst hasInst1
but is expected to have type
  @HashMap Nat Nat eqInst hasInst2

Remark: this method implements simple heuristics; we should extend it as we find other counterintuitive error messages.

Instances For

    Return error message "has type{givenType}\nbut is expected to have type{expectedType}"

    Instances For
      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

          Throw an exception if e is not type correct.

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

            Return true if e is type correct.

            Instances For