@[notation_class] attribute for @[simps] #
This declares the @[notation_class] attribute, which is used to give smarter default projections
for @[simps].
We put this in a separate file so that we can already tag some declarations with this attribute
in the file where we declare @[simps]. For further documentation, see Tactic.Simps.Basic.
The @[notation_class] attribute specifies that this is a notation class,
and this notation should be used instead of projections by @[simps].
- This is only important if the projection is written differently using notation, e.g.
+usesHAdd.hAdd, notAdd.addand0usesOfNat.ofNatnotZero.zero. We also add it to non-heterogenous notation classes, likeNeg, but it doesn't do much for any class that extendsNeg. @[notation_class * <projName> Simps.findCoercionArgs]is used to configure theSetLikeandDFunLikecoercions.- The first name argument is the projection name we use as the key to search for this class (default: name of first projection of the class).
- The second argument is the name of a declaration that has type
findArgTypewhich is defined to beName → Name → Array Expr → MetaM (Array (Option Expr)). This declaration specifies how to generate the arguments of the notation class from the arguments of classes that use the projection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The type of methods to find arguments for automatic projections for simps.
We partly define this as a separate definition so that the unused arguments linter doesn't complain.
Equations
- Simps.findArgType = (Lean.Name → Lean.Name → Array Lean.Expr → Lean.MetaM (Array (Option Lean.Expr)))
Instances For
Find arguments for a notation class
Equations
- One or more equations did not get rendered due to their size.
Instances For
Find arguments by duplicating the first argument. Used for pow.
Equations
- Simps.copyFirst x✝ x args = pure (Array.map some (args.push (args[0]?.getD default)))
Instances For
Find arguments by duplicating the first argument. Used for smul.
Equations
- Simps.copySecond x✝ x args = pure (Array.map some (args.push (args[1]?.getD default)))
Instances For
Find arguments by prepending ℕ and duplicating the first argument. Used for nsmul.
Equations
- Simps.nsmulArgs x✝ x args = pure (Array.map some (#[Lean.Expr.const `Nat [], args[0]?.getD default] ++ args))
Instances For
Find arguments by prepending ℤ and duplicating the first argument. Used for zsmul.
Equations
- Simps.zsmulArgs x✝ x args = pure (Array.map some (#[Lean.Expr.const `Int [], args[0]?.getD default] ++ args))
Instances For
Find arguments for the Zero class.
Equations
- Simps.findZeroArgs x✝ x args = pure #[some (args[0]?.getD default), some (Lean.mkRawNatLit 0)]
Instances For
Find arguments for the One class.
Equations
- Simps.findOneArgs x✝ x args = pure #[some (args[0]?.getD default), some (Lean.mkRawNatLit 1)]
Instances For
Find arguments of a coercion class (DFunLike or SetLike)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Data needed to generate automatic projections. This data is associated to a name of a projection in a structure that must be used to trigger the search.
- className : Lean.Name
classNameis the name of the class we are looking for. - isNotation : Bool
isNotationis a boolean that specifies whether this is notation (false for the coercionsDFunLikeandSetLike). If this is set to true, we add the current class as hypothesis during type-class synthesis. - findArgs : Lean.Name
The method to find the arguments of the class.
Instances For
Equations
- Simps.instInhabitedAutomaticProjectionData = { default := { className := default, isNotation := default, findArgs := default } }
@[notation_class] attribute. Note: this is not a NameMapAttribute because we key on the
argument of the attribute, not the declaration name.