File: Mathlib/Combinatorics/Additive/Dissociation.lean

full_name: MulDissociated
code: /-- A set is dissociated iff all its finite subsets have different products.

This is an analog of linear independence in a vector space, but with the "scalars" restricted to
`0` and `±1`. -/
@[to_additive "A set is dissociated iff all its finite subsets have different sums.

This is an analog of linear independence in a vector space, but with the \"scalars\" restricted to
`0` and `±1`."]
def MulDissociated (s : Set α) : Prop 
goal: Prop

full_name: AddDissociated
code: /-- A set is dissociated iff all its finite subsets have different products.

This is an analog of linear independence in a vector space, but with the "scalars" restricted to
`0` and `±1`. -/
@[to_additive "A set is dissociated iff all its finite subsets have different sums.

This is an analog of linear independence in a vector space, but with the \"scalars\" restricted to
`0` and `±1`."]
def MulDissociated (s : Set α) : Prop 
goal: Prop

full_name: mulDissociated_iff_sum_eq_subsingleton
code: @[to_additive] lemma mulDissociated_iff_sum_eq_subsingleton :
    MulDissociated s ↔ ∀ a, {t : Finset α | ↑t ⊆ s ∧ ∏ x in t, x = a}.Subsingleton 
goal: MulDissociated s ↔ ∀ (a : α), {t | ↑t ⊆ s ∧ ∏ x ∈ t, x = a}.Subsingleton

full_name: addDissociated_iff_sum_eq_subsingleton
code: @[to_additive] lemma mulDissociated_iff_sum_eq_subsingleton :
    MulDissociated s ↔ ∀ a, {t : Finset α | ↑t ⊆ s ∧ ∏ x in t, x = a}.Subsingleton 
goal: AddDissociated s ↔ ∀ (a : α), {t | ↑t ⊆ s ∧ ∑ x ∈ t, x = a}.Subsingleton

full_name: MulDissociated.subset
code: @[to_additive] lemma MulDissociated.subset {t : Set α} (hst : s ⊆ t) (ht : MulDissociated t) :
    MulDissociated s 
goal: MulDissociated s

full_name: AddDissociated.subset
code: @[to_additive] lemma MulDissociated.subset {t : Set α} (hst : s ⊆ t) (ht : MulDissociated t) :
    MulDissociated s 
goal: AddDissociated s

full_name: mulDissociated_empty
code: @[to_additive (attr := simp)] lemma mulDissociated_empty : MulDissociated (∅ : Set α) 
goal: MulDissociated ∅

full_name: addDissociated_empty
code: @[to_additive (attr := simp)] lemma mulDissociated_empty : MulDissociated (∅ : Set α) 
goal: AddDissociated ∅

full_name: mulDissociated_singleton
code: @[to_additive (attr := simp)]
lemma mulDissociated_singleton : MulDissociated ({a} : Set α) ↔ a ≠ 1 
goal: MulDissociated {a} ↔ a ≠ 1

full_name: addDissociated_singleton
code: @[to_additive (attr := simp)]
lemma mulDissociated_singleton : MulDissociated ({a} : Set α) ↔ a ≠ 1 
goal: AddDissociated {a} ↔ a ≠ 0

full_name: not_addDissociated
code: @[to_additive (attr := simp)]
lemma not_mulDissociated :
    ¬ MulDissociated s ↔
      ∃ t : Finset α, ↑t ⊆ s ∧ ∃ u : Finset α, ↑u ⊆ s ∧ t ≠ u ∧ ∏ x in t, x = ∏ x in u, x 
goal: ¬AddDissociated s ↔ ∃ t, ↑t ⊆ s ∧ ∃ u, ↑u ⊆ s ∧ t ≠ u ∧ ∑ x ∈ t, x = ∑ x ∈ u, x

full_name: not_mulDissociated
code: @[to_additive (attr := simp)]
lemma not_mulDissociated :
    ¬ MulDissociated s ↔
      ∃ t : Finset α, ↑t ⊆ s ∧ ∃ u : Finset α, ↑u ⊆ s ∧ t ≠ u ∧ ∏ x in t, x = ∏ x in u, x 
goal: ¬MulDissociated s ↔ ∃ t, ↑t ⊆ s ∧ ∃ u, ↑u ⊆ s ∧ t ≠ u ∧ ∏ x ∈ t, x = ∏ x ∈ u, x

full_name: not_addDissociated_iff_exists_disjoint
code: @[to_additive]
lemma not_mulDissociated_iff_exists_disjoint :
    ¬ MulDissociated s ↔
      ∃ t u : Finset α, ↑t ⊆ s ∧ ↑u ⊆ s ∧ Disjoint t u ∧ t ≠ u ∧ ∏ a in t, a = ∏ a in u, a 
goal: ¬AddDissociated s ↔ ∃ t u, ↑t ⊆ s ∧ ↑u ⊆ s ∧ Disjoint t u ∧ t ≠ u ∧ ∑ a ∈ t, a = ∑ a ∈ u, a

full_name: not_mulDissociated_iff_exists_disjoint
code: @[to_additive]
lemma not_mulDissociated_iff_exists_disjoint :
    ¬ MulDissociated s ↔
      ∃ t u : Finset α, ↑t ⊆ s ∧ ↑u ⊆ s ∧ Disjoint t u ∧ t ≠ u ∧ ∏ a in t, a = ∏ a in u, a 
goal: ¬MulDissociated s ↔ ∃ t u, ↑t ⊆ s ∧ ↑u ⊆ s ∧ Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a

full_name: AddEquiv.addDissociated_preimage
code: @[to_additive (attr := simp)] lemma MulEquiv.mulDissociated_preimage (e : β ≃* α) :
    MulDissociated (e ⁻¹' s) ↔ MulDissociated s 
goal: AddDissociated (⇑e ⁻¹' s) ↔ AddDissociated s

full_name: MulEquiv.mulDissociated_preimage
code: @[to_additive (attr := simp)] lemma MulEquiv.mulDissociated_preimage (e : β ≃* α) :
    MulDissociated (e ⁻¹' s) ↔ MulDissociated s 
goal: MulDissociated (⇑e ⁻¹' s) ↔ MulDissociated s

full_name: mulDissociated_inv
code: @[to_additive (attr := simp)] lemma mulDissociated_inv : MulDissociated s⁻¹ ↔ MulDissociated s 
goal: MulDissociated s⁻¹ ↔ MulDissociated s

full_name: addDissociated_neg
code: @[to_additive (attr := simp)] lemma mulDissociated_inv : MulDissociated s⁻¹ ↔ MulDissociated s 
goal: AddDissociated (-s) ↔ AddDissociated s

full_name: Finset.addSpan
code: /-- The span of a finset `s` is the finset of elements of the form `∏ a in s, a ^ ε a` where
`ε ∈ {-1, 0, 1} ^ s`.

This is an analog of the linear span in a vector space, but with the "scalars" restricted to
`0` and `±1`. -/
@[to_additive "The span of a finset `s` is the finset of elements of the form `∑ a in s, ε a • a`
where `ε ∈ {-1, 0, 1} ^ s`.

This is an analog of the linear span in a vector space, but with the \"scalars\" restricted to
`0` and `±1`."]
def mulSpan (s : Finset α) : Finset α 
goal: Finset α

full_name: Finset.mulSpan
code: /-- The span of a finset `s` is the finset of elements of the form `∏ a in s, a ^ ε a` where
`ε ∈ {-1, 0, 1} ^ s`.

This is an analog of the linear span in a vector space, but with the "scalars" restricted to
`0` and `±1`. -/
@[to_additive "The span of a finset `s` is the finset of elements of the form `∑ a in s, ε a • a`
where `ε ∈ {-1, 0, 1} ^ s`.

This is an analog of the linear span in a vector space, but with the \"scalars\" restricted to
`0` and `±1`."]
def mulSpan (s : Finset α) : Finset α 
goal: Finset α

full_name: Finset.mem_mulSpan
code: @[to_additive (attr := simp)]
lemma mem_mulSpan :
    a ∈ mulSpan s ↔ ∃ ε : α → ℤ, (∀ a, ε a = -1 ∨ ε a = 0 ∨ ε a = 1) ∧ ∏ a in s, a ^ ε a = a 
goal: a ∈ s.mulSpan ↔ ∃ ε, (∀ (a : α), ε a = -1 ∨ ε a = 0 ∨ ε a = 1) ∧ ∏ a ∈ s, a ^ ε a = a

full_name: Finset.mem_addSpan
code: @[to_additive (attr := simp)]
lemma mem_mulSpan :
    a ∈ mulSpan s ↔ ∃ ε : α → ℤ, (∀ a, ε a = -1 ∨ ε a = 0 ∨ ε a = 1) ∧ ∏ a in s, a ^ ε a = a 
goal: a ∈ s.addSpan ↔ ∃ ε, (∀ (a : α), ε a = -1 ∨ ε a = 0 ∨ ε a = 1) ∧ ∑ a ∈ s, ε a • a = a

full_name: Finset.subset_mulSpan
code: @[to_additive (attr := simp)]
lemma subset_mulSpan : s ⊆ mulSpan s 
goal: s ⊆ s.mulSpan

full_name: Finset.subset_addSpan
code: @[to_additive (attr := simp)]
lemma subset_mulSpan : s ⊆ mulSpan s 
goal: s ⊆ s.addSpan

full_name: Finset.sum_sub_sum_mem_addSpan
code: @[to_additive]
lemma prod_div_prod_mem_mulSpan (ht : t ⊆ s) (hu : u ⊆ s) :
    (∏ a in t, a) / ∏ a in u, a ∈ mulSpan s 
goal: ∑ a ∈ t, a - ∑ a ∈ u, a ∈ s.addSpan

full_name: Finset.prod_div_prod_mem_mulSpan
code: @[to_additive]
lemma prod_div_prod_mem_mulSpan (ht : t ⊆ s) (hu : u ⊆ s) :
    (∏ a in t, a) / ∏ a in u, a ∈ mulSpan s 
goal: (∏ a ∈ t, a) / ∏ a ∈ u, a ∈ s.mulSpan

full_name: Finset.exists_subset_mulSpan_card_le_of_forall_mulDissociated
code: /-- If every dissociated subset of `s` has size at most `d`, then `s` is actually generated by a
subset of size at most `d`.

This is a dissociation analog of the fact that a set whose linearly independent subsets all have
size at most `d` is of dimension at most `d` itself. -/
@[to_additive "If every dissociated subset of `s` has size at most `d`, then `s` is actually
generated by a subset of size at most `d`.

This is a dissociation analog of the fact that a set whose linearly independent subspaces all have
size at most `d` is of dimension at most `d` itself."]
lemma exists_subset_mulSpan_card_le_of_forall_mulDissociated
    (hs : ∀ s', s' ⊆ s → MulDissociated (s' : Set α) → s'.card ≤ d) :
    ∃ s', s' ⊆ s ∧ s'.card ≤ d ∧ s ⊆ mulSpan s' 
goal: ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan

full_name: Finset.exists_subset_addSpan_card_le_of_forall_addDissociated
code: /-- If every dissociated subset of `s` has size at most `d`, then `s` is actually generated by a
subset of size at most `d`.

This is a dissociation analog of the fact that a set whose linearly independent subsets all have
size at most `d` is of dimension at most `d` itself. -/
@[to_additive "If every dissociated subset of `s` has size at most `d`, then `s` is actually
generated by a subset of size at most `d`.

This is a dissociation analog of the fact that a set whose linearly independent subspaces all have
size at most `d` is of dimension at most `d` itself."]
lemma exists_subset_mulSpan_card_le_of_forall_mulDissociated
    (hs : ∀ s', s' ⊆ s → MulDissociated (s' : Set α) → s'.card ≤ d) :
    ∃ s', s' ⊆ s ∧ s'.card ≤ d ∧ s ⊆ mulSpan s' 
goal: ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.addSpan