Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Define typeclasses `inv_one_class` and `neg_zero_class`, to allow results depending on those properties to be proved more generally than for `division_monoid` and `subtraction_monoid` without requiring duplication. Also define `div_inv_one_monoid` and `sub_neg_zero_monoid`. The only instances added here are those deduced from `division_monoid` and `subtraction_monoid`, and the only lemmas generalized to these classes were previously proved for those classes. Additional instances intended for followups include: * `neg_zero_class` for the combination of `mul_zero_class` with `has_distrib_neg`, so eliminating the separate `neg_zero'` lemma. * `sub_neg_zero_monoid` for `ereal`. * `div_inv_one_monoid` for `ennreal`. * The usual `pointwise`, `pi` and `prod` instances. Additional lemmas intended to be generalized to use these typeclasses in followups include: * `antiperiodic.nat_mul_eq_of_eq_zero` and `antiperiodic.int_mul_eq_of_eq_zero`, which currently require the codomain of the antiperiodic function to be a `subtraction_monoid`. (The latter will also require involutive `neg`, as will some lemmas about inequalities.) * Given appropriate typeclasses for the interaction of inequalities with `inv` and `neg` (which will also enabling combining `left` and `right` variants, which is the main motivation of these changes), lemmas such as `left.inv_le_one_iff`, `left.one_le_inv_iff`, `left.one_lt_inv_iff`, `left.inv_lt_one_iff` and their `right` and additive variants. Some of these currently have duplicates for `ennreal`, for example. Zulip thread raising question of such typeclasses: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/typeclasses.20for.20orders.20with.20neg.20and.20inv
- Loading branch information