File: Mathlib/Combinatorics/Additive/PluenneckeRuzsa.lean

full_name: Finset.ruzsa_triangle_inequality_sub_sub_sub
code: /-- **Ruzsa's triangle inequality**. Division version. -/
@[to_additive "**Ruzsa's triangle inequality**. Subtraction version."]
theorem ruzsa_triangle_inequality_div_div_div (A B C : Finset α) :
    (A / C).card * B.card ≤ (A / B).card * (B / C).card 
goal: (A - C).card * B.card ≤ (A - B).card * (B - C).card

full_name: Finset.ruzsa_triangle_inequality_div_div_div
code: /-- **Ruzsa's triangle inequality**. Division version. -/
@[to_additive "**Ruzsa's triangle inequality**. Subtraction version."]
theorem ruzsa_triangle_inequality_div_div_div (A B C : Finset α) :
    (A / C).card * B.card ≤ (A / B).card * (B / C).card 
goal: (A / C).card * B.card ≤ (A / B).card * (B / C).card

full_name: Finset.ruzsa_triangle_inequality_div_mul_mul
code: /-- **Ruzsa's triangle inequality**. Div-mul-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-add-add version."]
theorem ruzsa_triangle_inequality_div_mul_mul (A B C : Finset α) :
    (A / C).card * B.card ≤ (A * B).card * (B * C).card 
goal: (A / C).card * B.card ≤ (A * B).card * (B * C).card

full_name: Finset.ruzsa_triangle_inequality_sub_add_add
code: /-- **Ruzsa's triangle inequality**. Div-mul-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-add-add version."]
theorem ruzsa_triangle_inequality_div_mul_mul (A B C : Finset α) :
    (A / C).card * B.card ≤ (A * B).card * (B * C).card 
goal: (A - C).card * B.card ≤ (A + B).card * (B + C).card

full_name: Finset.ruzsa_triangle_inequality_add_sub_add
code: /-- **Ruzsa's triangle inequality**. Mul-div-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-sub-add version."]
theorem ruzsa_triangle_inequality_mul_div_mul (A B C : Finset α) :
    (A * C).card * B.card ≤ (A / B).card * (B * C).card 
goal: (A + C).card * B.card ≤ (A - B).card * (B + C).card

full_name: Finset.ruzsa_triangle_inequality_mul_div_mul
code: /-- **Ruzsa's triangle inequality**. Mul-div-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-sub-add version."]
theorem ruzsa_triangle_inequality_mul_div_mul (A B C : Finset α) :
    (A * C).card * B.card ≤ (A / B).card * (B * C).card 
goal: (A * C).card * B.card ≤ (A / B).card * (B * C).card

full_name: Finset.ruzsa_triangle_inequality_add_add_sub
code: /-- **Ruzsa's triangle inequality**. Mul-mul-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-add-sub version."]
theorem ruzsa_triangle_inequality_mul_mul_div (A B C : Finset α) :
    (A * C).card * B.card ≤ (A * B).card * (B / C).card 
goal: (A + C).card * B.card ≤ (A + B).card * (B - C).card

full_name: Finset.ruzsa_triangle_inequality_mul_mul_div
code: /-- **Ruzsa's triangle inequality**. Mul-mul-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-add-sub version."]
theorem ruzsa_triangle_inequality_mul_mul_div (A B C : Finset α) :
    (A * C).card * B.card ≤ (A * B).card * (B / C).card 
goal: (A * C).card * B.card ≤ (A * B).card * (B / C).card

full_name: Finset.pluennecke_petridis_inequality_mul
code: @[to_additive]
theorem pluennecke_petridis_inequality_mul (C : Finset α)
    (hA : ∀ A' ⊆ A, (A * B).card * A'.card ≤ (A' * B).card * A.card) :
    (A * B * C).card * A.card ≤ (A * B).card * (A * C).card 
goal: (A * B * C).card * A.card ≤ (A * B).card * (A * C).card

full_name: Finset.pluennecke_petridis_inequality_add
code: @[to_additive]
theorem pluennecke_petridis_inequality_mul (C : Finset α)
    (hA : ∀ A' ⊆ A, (A * B).card * A'.card ≤ (A' * B).card * A.card) :
    (A * B * C).card * A.card ≤ (A * B).card * (A * C).card 
goal: (A + B + C).card * A.card ≤ (A + B).card * (A + C).card

full_name: _private.Mathlib.Combinatorics.Additive.PluenneckeRuzsa.0.Finset.add_aux
code: @[to_additive]
private theorem mul_aux (hA : A.Nonempty) (hAB : A ⊆ B)
    (h : ∀ A' ∈ B.powerset.erase ∅, ((A * C).card : ℚ≥0) / ↑A.card ≤ (A' * C).card / ↑A'.card) :
    ∀ A' ⊆ A, (A * C).card * A'.card ≤ (A' * C).card * A.card 
goal: A' ⊆ A → (A + C).card * A'.card ≤ (A' + C).card * A.card

full_name: _private.Mathlib.Combinatorics.Additive.PluenneckeRuzsa.0.Finset.mul_aux
code: @[to_additive]
private theorem mul_aux (hA : A.Nonempty) (hAB : A ⊆ B)
    (h : ∀ A' ∈ B.powerset.erase ∅, ((A * C).card : ℚ≥0) / ↑A.card ≤ (A' * C).card / ↑A'.card) :
    ∀ A' ⊆ A, (A * C).card * A'.card ≤ (A' * C).card * A.card 
goal: A' ⊆ A → (A * C).card * A'.card ≤ (A' * C).card * A.card

full_name: Finset.ruzsa_triangle_inequality_mul_mul_mul
code: /-- **Ruzsa's triangle inequality**. Multiplication version. -/
@[to_additive "**Ruzsa's triangle inequality**. Addition version."]
theorem ruzsa_triangle_inequality_mul_mul_mul (A B C : Finset α) :
    (A * C).card * B.card ≤ (A * B).card * (B * C).card 
goal: (A * C).card * B.card ≤ (A * B).card * (B * C).card

full_name: Finset.ruzsa_triangle_inequality_add_add_add
code: /-- **Ruzsa's triangle inequality**. Multiplication version. -/
@[to_additive "**Ruzsa's triangle inequality**. Addition version."]
theorem ruzsa_triangle_inequality_mul_mul_mul (A B C : Finset α) :
    (A * C).card * B.card ≤ (A * B).card * (B * C).card 
goal: (A + C).card * B.card ≤ (A + B).card * (B + C).card

full_name: Finset.ruzsa_triangle_inequality_add_sub_sub
code: /-- **Ruzsa's triangle inequality**. Mul-div-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-sub-sub version."]
theorem ruzsa_triangle_inequality_mul_div_div (A B C : Finset α) :
    (A * C).card * B.card ≤ (A / B).card * (B / C).card 
goal: (A + C).card * B.card ≤ (A - B).card * (B - C).card

full_name: Finset.ruzsa_triangle_inequality_mul_div_div
code: /-- **Ruzsa's triangle inequality**. Mul-div-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Add-sub-sub version."]
theorem ruzsa_triangle_inequality_mul_div_div (A B C : Finset α) :
    (A * C).card * B.card ≤ (A / B).card * (B / C).card 
goal: (A * C).card * B.card ≤ (A / B).card * (B / C).card

full_name: Finset.ruzsa_triangle_inequality_div_mul_div
code: /-- **Ruzsa's triangle inequality**. Div-mul-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-add-sub version."]
theorem ruzsa_triangle_inequality_div_mul_div (A B C : Finset α) :
    (A / C).card * B.card ≤ (A * B).card * (B / C).card 
goal: (A / C).card * B.card ≤ (A * B).card * (B / C).card

full_name: Finset.ruzsa_triangle_inequality_sub_add_sub
code: /-- **Ruzsa's triangle inequality**. Div-mul-div version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-add-sub version."]
theorem ruzsa_triangle_inequality_div_mul_div (A B C : Finset α) :
    (A / C).card * B.card ≤ (A * B).card * (B / C).card 
goal: (A - C).card * B.card ≤ (A + B).card * (B - C).card

full_name: Finset.card_sub_add_le_card_sub_add_card_add
code: /-- **Ruzsa's triangle inequality**. Div-div-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-sub-add version."]
theorem card_div_mul_le_card_div_mul_card_mul (A B C : Finset α) :
    (A / C).card * B.card ≤ (A / B).card * (B * C).card 
goal: (A - C).card * B.card ≤ (A - B).card * (B + C).card

full_name: Finset.card_div_mul_le_card_div_mul_card_mul
code: /-- **Ruzsa's triangle inequality**. Div-div-mul version. -/
@[to_additive "**Ruzsa's triangle inequality**. Sub-sub-add version."]
theorem card_div_mul_le_card_div_mul_card_mul (A B C : Finset α) :
    (A / C).card * B.card ≤ (A / B).card * (B * C).card 
goal: (A / C).card * B.card ≤ (A / B).card * (B * C).card

full_name: _private.Mathlib.Combinatorics.Additive.PluenneckeRuzsa.0.Finset.card_mul_pow_le
code: @[to_additive]
private lemma card_mul_pow_le (hAB : ∀ A' ⊆ A, (A * B).card * A'.card ≤ (A' * B).card * A.card)
    (n : ℕ) : (A * B ^ n).card ≤ ((A * B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(A * B ^ n).card ≤ (↑(A * B).card / ↑A.card) ^ n * ↑A.card

full_name: _private.Mathlib.Combinatorics.Additive.PluenneckeRuzsa.0.Finset.card_add_nsmul_le
code: @[to_additive]
private lemma card_mul_pow_le (hAB : ∀ A' ⊆ A, (A * B).card * A'.card ≤ (A' * B).card * A.card)
    (n : ℕ) : (A * B ^ n).card ≤ ((A * B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(A + n • B).card ≤ (↑(A + B).card / ↑A.card) ^ n * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_nsmul_sub_nsmul_add
code: /-- The **Plünnecke-Ruzsa inequality**. Multiplication version. Note that this is genuinely harder
than the division version because we cannot use a double counting argument. -/
@[to_additive "The **Plünnecke-Ruzsa inequality**. Addition version. Note that this is genuinely
harder than the subtraction version because we cannot use a double counting argument."]
theorem pluennecke_ruzsa_inequality_pow_div_pow_mul (hA : A.Nonempty) (B : Finset α) (m n : ℕ) :
    ((B ^ m / B ^ n).card) ≤ ((A * B).card / A.card : ℚ≥0) ^ (m + n) * A.card 
goal: ↑(m • B - n • B).card ≤ (↑(A + B).card / ↑A.card) ^ (m + n) * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_pow_div_pow_mul
code: /-- The **Plünnecke-Ruzsa inequality**. Multiplication version. Note that this is genuinely harder
than the division version because we cannot use a double counting argument. -/
@[to_additive "The **Plünnecke-Ruzsa inequality**. Addition version. Note that this is genuinely
harder than the subtraction version because we cannot use a double counting argument."]
theorem pluennecke_ruzsa_inequality_pow_div_pow_mul (hA : A.Nonempty) (B : Finset α) (m n : ℕ) :
    ((B ^ m / B ^ n).card) ≤ ((A * B).card / A.card : ℚ≥0) ^ (m + n) * A.card 
goal: ↑(B ^ m / B ^ n).card ≤ (↑(A * B).card / ↑A.card) ^ (m + n) * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_nsmul_sub_nsmul_sub
code: /-- The **Plünnecke-Ruzsa inequality**. Division version. -/
@[to_additive "The **Plünnecke-Ruzsa inequality**. Subtraction version."]
theorem pluennecke_ruzsa_inequality_pow_div_pow_div (hA : A.Nonempty) (B : Finset α) (m n : ℕ) :
    (B ^ m / B ^ n).card ≤ ((A / B).card / A.card : ℚ≥0) ^ (m + n) * A.card 
goal: ↑(m • B - n • B).card ≤ (↑(A - B).card / ↑A.card) ^ (m + n) * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_pow_div_pow_div
code: /-- The **Plünnecke-Ruzsa inequality**. Division version. -/
@[to_additive "The **Plünnecke-Ruzsa inequality**. Subtraction version."]
theorem pluennecke_ruzsa_inequality_pow_div_pow_div (hA : A.Nonempty) (B : Finset α) (m n : ℕ) :
    (B ^ m / B ^ n).card ≤ ((A / B).card / A.card : ℚ≥0) ^ (m + n) * A.card 
goal: ↑(B ^ m / B ^ n).card ≤ (↑(A / B).card / ↑A.card) ^ (m + n) * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_pow_mul
code: /-- Special case of the **Plünnecke-Ruzsa inequality**. Multiplication version. -/
@[to_additive "Special case of the **Plünnecke-Ruzsa inequality**. Addition version."]
theorem pluennecke_ruzsa_inequality_pow_mul (hA : A.Nonempty) (B : Finset α) (n : ℕ) :
    (B ^ n).card ≤ ((A * B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(B ^ n).card ≤ (↑(A * B).card / ↑A.card) ^ n * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_nsmul_add
code: /-- Special case of the **Plünnecke-Ruzsa inequality**. Multiplication version. -/
@[to_additive "Special case of the **Plünnecke-Ruzsa inequality**. Addition version."]
theorem pluennecke_ruzsa_inequality_pow_mul (hA : A.Nonempty) (B : Finset α) (n : ℕ) :
    (B ^ n).card ≤ ((A * B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(n • B).card ≤ (↑(A + B).card / ↑A.card) ^ n * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_pow_div
code: /-- Special case of the **Plünnecke-Ruzsa inequality**. Division version. -/
@[to_additive "Special case of the **Plünnecke-Ruzsa inequality**. Subtraction version."]
theorem pluennecke_ruzsa_inequality_pow_div (hA : A.Nonempty) (B : Finset α) (n : ℕ) :
    (B ^ n).card ≤ ((A / B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(B ^ n).card ≤ (↑(A / B).card / ↑A.card) ^ n * ↑A.card

full_name: Finset.pluennecke_ruzsa_inequality_nsmul_sub
code: /-- Special case of the **Plünnecke-Ruzsa inequality**. Division version. -/
@[to_additive "Special case of the **Plünnecke-Ruzsa inequality**. Subtraction version."]
theorem pluennecke_ruzsa_inequality_pow_div (hA : A.Nonempty) (B : Finset α) (n : ℕ) :
    (B ^ n).card ≤ ((A / B).card / A.card : ℚ≥0) ^ n * A.card 
goal: ↑(n • B).card ≤ (↑(A - B).card / ↑A.card) ^ n * ↑A.card