norm_num plugin for big operators #
This file adds norm_num plugins for Finset.prod and Finset.sum.
The driving part of this plugin is Mathlib.Meta.NormNum.evalFinsetBigop.
We repeatedly use Finset.proveEmptyOrCons to try to find a proof that the given set is empty,
or that it consists of one element inserted into a strict subset, and evaluate the big operator
on that subset until the set is completely exhausted.
See also #
- The
fin_casestactic has similar scope: splitting out a finite collection into its elements.
Porting notes #
This plugin is noticeably less powerful than the equivalent version in Mathlib 3: the design of
norm_num means plugins have to return numerals, rather than a generic expression.
In particular, we can't use the plugin on sums containing variables.
(See also the TODO note "To support variables".)
TODOs #
- Support intervals:
Finset.Ico,Finset.Icc, ... - To support variables, like in Mathlib 3, turn this into a standalone tactic that unfolds
the sum/prod, without computing its numeric value (using the
ringtactic to do some normalization?)
- zero: {n : Q(ℕ)} → «$n» =Q 0 → Mathlib.Meta.Nat.UnifyZeroOrSuccResult n
nunifies with0 - succ: {n : Q(ℕ)} → (n' : Q(ℕ)) → «$n» =Q Nat.succ «$n'» → Mathlib.Meta.Nat.UnifyZeroOrSuccResult n
nunifies withsucc n'for this specificn'
This represents the result of trying to determine whether the given expression n : Q(ℕ)
is either zero or succ.
Instances For
Determine whether the expression n : Q(ℕ) unifies with 0 or Nat.succ n'.
We do not use norm_num functionality because we want definitional equality,
not propositional equality, for use in dependent types.
Fails if neither of the options succeed.
Instances For
norm_num plugin for evaluating products of finsets.
If your finset is not supported, you can add it to the match in Finset.proveEmptyOrCons.
Equations
- One or more equations did not get rendered due to their size.
Instances For
norm_num plugin for evaluating sums of finsets.
If your finset is not supported, you can add it to the match in Finset.proveEmptyOrCons.
Equations
- One or more equations did not get rendered due to their size.