Freiman homomorphisms #
In this file, we define Freiman homomorphisms. An n-Freiman homomorphism on A is a function
f : α → β such that f (x₁) * ... * f (xₙ) = f (y₁) * ... * f (yₙ) for all
x₁, ..., xₙ, y₁, ..., yₙ ∈ A such that x₁ * ... * xₙ = y₁ * ... * yₙ. In particular, any
MulHom is a Freiman homomorphism.
They are of interest in additive combinatorics.
Main declaration #
FreimanHom: Freiman homomorphism.AddFreimanHom: Additive Freiman homomorphism.
Notation #
A →*[n] β: Multiplicativen-Freiman homomorphism onAA →+[n] β: Additiven-Freiman homomorphism onA
Implementation notes #
In the context of combinatorics, we are interested in Freiman homomorphisms over sets which are not
necessarily closed under addition/multiplication. This means we must parametrize them with a set in
an AddMonoid/Monoid instead of the AddMonoid/Monoid itself.
References #
Yufei Zhao, 18.225: Graph Theory and Additive Combinatorics
TODO #
MonoidHom.toFreimanHom could be relaxed to MulHom.toFreimanHom by proving
(s.map f).prod = (t.map f).prod directly by induction instead of going through f s.prod.
Define n-Freiman isomorphisms.
Affine maps induce Freiman homs. Concretely, provide the AddFreimanHomClass (α →ₐ[𝕜] β) A β n
instance.
An additive n-Freiman homomorphism is a map which preserves sums of n elements.
- toFun : α → β
The underlying function.
- map_sum_eq_map_sum' : ∀ {s t : Multiset α}, (∀ ⦃x : α⦄, x ∈ s → x ∈ A) → (∀ ⦃x : α⦄, x ∈ t → x ∈ A) → Multiset.card s = n → Multiset.card t = n → Multiset.sum s = Multiset.sum t → Multiset.sum (Multiset.map self.toFun s) = Multiset.sum (Multiset.map self.toFun t)
An additive
n-Freiman homomorphism preserves sums ofnelements.
Instances For
An n-Freiman homomorphism on a set A is a map which preserves products of n elements.
- toFun : α → β
The underlying function.
- map_prod_eq_map_prod' : ∀ {s t : Multiset α}, (∀ ⦃x : α⦄, x ∈ s → x ∈ A) → (∀ ⦃x : α⦄, x ∈ t → x ∈ A) → Multiset.card s = n → Multiset.card t = n → Multiset.prod s = Multiset.prod t → Multiset.prod (Multiset.map self.toFun s) = Multiset.prod (Multiset.map self.toFun t)
An
n-Freiman homomorphism preserves products ofnelements.
Instances For
An additive n-Freiman homomorphism is a map which preserves sums of n elements.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An n-Freiman homomorphism on a set A is a map which preserves products of n elements.
Equations
- One or more equations did not get rendered due to their size.
Instances For
AddFreimanHomClass F A β n states that F is a type of n-ary
sums-preserving morphisms. You should extend this class when you extend AddFreimanHom.
- map_sum_eq_map_sum' : ∀ (f : F) {s t : Multiset α}, (∀ ⦃x : α⦄, x ∈ s → x ∈ A) → (∀ ⦃x : α⦄, x ∈ t → x ∈ A) → Multiset.card s = n → Multiset.card t = n → Multiset.sum s = Multiset.sum t → Multiset.sum (Multiset.map (⇑f) s) = Multiset.sum (Multiset.map (⇑f) t)
An additive
n-Freiman homomorphism preserves sums ofnelements.
Instances
FreimanHomClass F A β n states that F is a type of n-ary products-preserving morphisms.
You should extend this class when you extend FreimanHom.
- map_prod_eq_map_prod' : ∀ (f : F) {s t : Multiset α}, (∀ ⦃x : α⦄, x ∈ s → x ∈ A) → (∀ ⦃x : α⦄, x ∈ t → x ∈ A) → Multiset.card s = n → Multiset.card t = n → Multiset.prod s = Multiset.prod t → Multiset.prod (Multiset.map (⇑f) s) = Multiset.prod (Multiset.map (⇑f) t)
An
n-Freiman homomorphism preserves products ofnelements.
Instances
Turn an element of a type F satisfying AddFreimanHomClass F A β n into an actual
AddFreimanHom. This is declared as the default coercion from F to AddFreimanHom A β n.
Equations
- ↑f = { toFun := ⇑f, map_sum_eq_map_sum' := ⋯ }
Instances For
Turn an element of a type F satisfying FreimanHomClass F A β n into an actual
FreimanHom. This is declared as the default coercion from F to FreimanHom A β n.
Equations
- ↑f = { toFun := ⇑f, map_prod_eq_map_prod' := ⋯ }
Instances For
Any type satisfying SMulHomClass can be cast into MulActionHom via
SMulHomClass.toMulActionHom.
Equations
- instCoeTCFreimanHom = { coe := FreimanHomClass.toFreimanHom }
Equations
- AddFreimanHom.instFunLike = { coe := AddFreimanHom.toFun, coe_injective' := ⋯ }
Equations
- FreimanHom.instFunLike = { coe := FreimanHom.toFun, coe_injective' := ⋯ }
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
The identity map from an additive commutative monoid to itself.
Equations
- AddFreimanHom.id A n = { toFun := fun (x : α) => x, map_sum_eq_map_sum' := ⋯ }
Instances For
The identity map from a commutative monoid to itself.
Equations
- FreimanHom.id A n = { toFun := fun (x : α) => x, map_prod_eq_map_prod' := ⋯ }
Instances For
Composition of additive Freiman homomorphisms as an additive Freiman homomorphism.
Equations
- AddFreimanHom.comp f g hAB = { toFun := ⇑f ∘ ⇑g, map_sum_eq_map_sum' := ⋯ }
Instances For
Composition of Freiman homomorphisms as a Freiman homomorphism.
Equations
- FreimanHom.comp f g hAB = { toFun := ⇑f ∘ ⇑g, map_prod_eq_map_prod' := ⋯ }
Instances For
AddFreimanHom.const An b is the Freiman homomorphism sending everything to b.
Equations
- AddFreimanHom.const A n b = { toFun := fun (x : α) => b, map_sum_eq_map_sum' := ⋯ }
Instances For
FreimanHom.const A n b is the Freiman homomorphism sending everything to b.
Equations
- FreimanHom.const A n b = { toFun := fun (x : α) => b, map_prod_eq_map_prod' := ⋯ }
Instances For
0 is the Freiman homomorphism sending everything to 0.
Equations
- AddFreimanHom.instZeroFreimanHom = { zero := AddFreimanHom.const A n 0 }
1 is the Freiman homomorphism sending everything to 1.
Equations
- FreimanHom.instOneFreimanHom = { one := FreimanHom.const A n 1 }
Equations
- AddFreimanHom.instInhabitedFreimanHom = { default := 0 }
Equations
- FreimanHom.instInhabitedFreimanHom = { default := 1 }
f + g is the Freiman homomorphism sending x to f x + g x.
f * g is the Freiman homomorphism sends x to f x * g x.
If f is a Freiman homomorphism to an additive commutative group, then -f is the
Freiman homomorphism sending x to -f x.
If f is a Freiman homomorphism to a commutative group, then f⁻¹ is the Freiman homomorphism
sending x to (f x)⁻¹.
If f and g are additive Freiman homomorphisms to an additive commutative group,
then f - g is the additive Freiman homomorphism sending x to f x - g x
If f and g are Freiman homomorphisms to a commutative group, then f / g is the Freiman
homomorphism sending x to f x / g x.
Instances #
α →+[n] β is an AddCommMonoid.
Equations
- AddFreimanHom.addCommMonoid = AddCommMonoid.mk ⋯
A →*[n] β is a CommMonoid.
Equations
- FreimanHom.commMonoid = CommMonoid.mk ⋯
If β is an additive commutative group, then A →*[n] β is an additive commutative
group too.
Equations
- AddFreimanHom.addCommGroup = let __src := AddFreimanHom.addCommMonoid; AddCommGroup.mk ⋯
If β is a commutative group, then A →*[n] β is a commutative group too.
Equations
- FreimanHom.commGroup = let __src := FreimanHom.commMonoid; CommGroup.mk ⋯
Hom hierarchy #
An additive monoid homomorphism is naturally an AddFreimanHom on its entire
domain.
We can't leave the domain A : Set α of the AddFreimanHom a free variable, since it
wouldn't be inferrable.
Equations
- ⋯ = ⋯
A monoid homomorphism is naturally a FreimanHom on its entire domain.
We can't leave the domain A : Set α of the FreimanHom a free variable, since it wouldn't be
inferrable.
Equations
- ⋯ = ⋯
An AddMonoidHom is naturally an AddFreimanHom
Equations
- AddMonoidHom.toAddFreimanHom A n f = { toFun := ⇑f, map_sum_eq_map_sum' := ⋯ }
Instances For
A MonoidHom is naturally a FreimanHom.
Equations
- MonoidHom.toFreimanHom A n f = { toFun := ⇑f, map_prod_eq_map_prod' := ⋯ }
Instances For
α →+[n] β is naturally included in α →+[m] β
for any m ≤ n
Equations
- AddFreimanHom.toAddFreimanHom h f = { toFun := ⇑f, map_sum_eq_map_sum' := ⋯ }
Instances For
α →*[n] β is naturally included in A →*[m] β for any m ≤ n.
Equations
- FreimanHom.toFreimanHom h f = { toFun := ⇑f, map_prod_eq_map_prod' := ⋯ }
Instances For
An additive n-Freiman homomorphism is
also an additive m-Freiman homomorphism for any m ≤ n.
An n-Freiman homomorphism is also a m-Freiman homomorphism for any m ≤ n.