Unique products and related notions #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A group G has unique products if for any two non-empty finite subsets A, B ⊂ G, there is an
element g ∈ A * B that can be written uniquely as a product of an element of A and an element
of B. We call the formalization this property unique_prods. Since the condition requires no
property of the group operation, we define it for a Type simply satisfying has_mul. We also
introduce the analogous "additive" companion, unique_sums and link the two so that to_additive
converts unique_prods into unique_sums.
Here you can see several examples of Types that have unique_sums/prods
(apply_instance uses covariants.to_unique_prods and covariants.to_unique_sums).
import data.real.basic
example : unique_sums ℕ := by apply_instance
example : unique_sums ℕ+ := by apply_instance
example : unique_sums ℤ := by apply_instance
example : unique_sums ℚ := by apply_instance
example : unique_sums ℝ := by apply_instance
example : unique_prods ℕ+ := by apply_instance
```
Let G be a Type with multiplication, let A B : finset G be finite subsets and
let a0 b0 : G be two elements. unique_mul A B a0 b0 asserts a0 * b0 can be written in at
most one way as a product of an element of A and an element of B.
Let G be a Type with addition, let A B : finset G be finite subsets and
let a0 b0 : G be two elements. unique_add A B a0 b0 asserts a0 + b0 can be written in at
most one way as a sum of an element from A and an element from B.
unique_mul is preserved by inverse images under injective, multiplicative maps.
unique_add is preserved by inverse images under injective, additive maps.
unique_mul is preserved under multiplicative maps that are injective.
See unique_mul.mul_hom_map_iff for a version with swapped bundling.
unique_add is preserved under additive maps that are injective.
See unique_add.add_hom_map_iff for a version with swapped bundling.
unique_mul is preserved under embeddings that are multiplicative.
See unique_mul.mul_hom_image_iff for a version with swapped bundling.
unique_add is preserved under embeddings that are additive.
See unique_add.add_hom_image_iff for a version with swapped bundling.
- unique_add_of_nonempty : ∀ {A B : finset G}, A.nonempty → B.nonempty → (∃ (a0 : G) (H : a0 ∈ A) (b0 : G) (H : b0 ∈ B), unique_add A B a0 b0)
Let G be a Type with addition. unique_sums G asserts that any two non-empty
finite subsets of A have the unique_add property, with respect to some element of their
sum A + B.
Instances of this typeclass
- unique_mul_of_nonempty : ∀ {A B : finset G}, A.nonempty → B.nonempty → (∃ (a0 : G) (H : a0 ∈ A) (b0 : G) (H : b0 ∈ B), unique_mul A B a0 b0)
Let G be a Type with multiplication. unique_prods G asserts that any two non-empty
finite subsets of G have the unique_mul property, with respect to some element of their
product A * B.
Instances of this typeclass
This instance asserts that if A has a multiplication, a linear order, and multiplication
is 'very monotone', then A also has unique_prods.
This instance asserts that if A has an addition, a linear order, and addition
is 'very monotone', then A also has unique_sums.