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
.