File: Mathlib/GroupTheory/CosetCover.lean

full_name: Subgroup.exists_leftTransversal_of_FiniteIndex
code: @[to_additive]
theorem exists_leftTransversal_of_FiniteIndex
    {D H : Subgroup G} [D.FiniteIndex] (hD_le_H : D ≤ H) :
    ∃ t : Finset H,
      (t : Set H) ∈ leftTransversals (D.subgroupOf H) ∧
        ⋃ g ∈ t, (g : G) • (D : Set G) = H 
goal: ∃ t, ↑t ∈ Subgroup.leftTransversals ↑(D.subgroupOf H) ∧ ⋃ g ∈ t, ↑g • ↑D = ↑H

full_name: AddSubgroup.exists_leftTransversal_of_FiniteIndex
code: @[to_additive]
theorem exists_leftTransversal_of_FiniteIndex
    {D H : Subgroup G} [D.FiniteIndex] (hD_le_H : D ≤ H) :
    ∃ t : Finset H,
      (t : Set H) ∈ leftTransversals (D.subgroupOf H) ∧
        ⋃ g ∈ t, (g : G) • (D : Set G) = H 
goal: ∃ t, ↑t ∈ AddSubgroup.leftTransversals ↑(D.addSubgroupOf H) ∧ ⋃ g ∈ t, ↑g +ᵥ ↑D = ↑H

full_name: AddSubgroup.leftCoset_cover_const_iff_surjOn
code: @[to_additive]
theorem leftCoset_cover_const_iff_surjOn :
    ⋃ i ∈ s, g i • (H : Set G) = Set.univ ↔ Set.SurjOn (g · : ι → G ⧸ H) s Set.univ 
goal: ⋃ i ∈ s, g i +ᵥ ↑H = Set.univ ↔ Set.SurjOn (fun x => ↑(g x)) (↑s) Set.univ

full_name: Subgroup.leftCoset_cover_const_iff_surjOn
code: @[to_additive]
theorem leftCoset_cover_const_iff_surjOn :
    ⋃ i ∈ s, g i • (H : Set G) = Set.univ ↔ Set.SurjOn (g · : ι → G ⧸ H) s Set.univ 
goal: ⋃ i ∈ s, g i • ↑H = Set.univ ↔ Set.SurjOn (fun x => ↑(g x)) (↑s) Set.univ

full_name: AddSubgroup.finiteIndex_of_leftCoset_cover_const
code: /-- If `H` is a subgroup of `G` and `G` is the union of a finite family of left cosets of `H`
then `H` has finite index. -/
@[to_additive]
theorem finiteIndex_of_leftCoset_cover_const : H.FiniteIndex 
goal: H.FiniteIndex

full_name: Subgroup.finiteIndex_of_leftCoset_cover_const
code: /-- If `H` is a subgroup of `G` and `G` is the union of a finite family of left cosets of `H`
then `H` has finite index. -/
@[to_additive]
theorem finiteIndex_of_leftCoset_cover_const : H.FiniteIndex 
goal: H.FiniteIndex

full_name: Subgroup.index_le_of_leftCoset_cover_const
code: @[to_additive]
theorem index_le_of_leftCoset_cover_const : H.index ≤ s.card 
goal: H.index ≤ s.card

full_name: AddSubgroup.index_le_of_leftCoset_cover_const
code: @[to_additive]
theorem index_le_of_leftCoset_cover_const : H.index ≤ s.card 
goal: H.index ≤ s.card

full_name: Subgroup.pairwiseDisjoint_leftCoset_cover_const_of_index_eq
code: @[to_additive]
theorem pairwiseDisjoint_leftCoset_cover_const_of_index_eq (hind : H.index = s.card) :
    Set.PairwiseDisjoint s (g · • (H : Set G)) 
goal: (↑s).PairwiseDisjoint fun x => g x • ↑H

full_name: AddSubgroup.pairwiseDisjoint_leftCoset_cover_const_of_index_eq
code: @[to_additive]
theorem pairwiseDisjoint_leftCoset_cover_const_of_index_eq (hind : H.index = s.card) :
    Set.PairwiseDisjoint s (g · • (H : Set G)) 
goal: (↑s).PairwiseDisjoint fun x => g x +ᵥ ↑H

full_name: AddSubgroup.exists_finiteIndex_of_leftCoset_cover_aux
code: @[to_additive]
theorem exists_finiteIndex_of_leftCoset_cover_aux [DecidableEq (Subgroup G)]
    (j : ι) (hj : j ∈ s) (hcovers' : ⋃ i ∈ s.filter (H · = H j), g i • (H i : Set G) ≠ Set.univ) :
    ∃ i ∈ s, H i ≠ H j ∧ (H i).FiniteIndex 
goal: ∃ i ∈ s, H i ≠ H j ∧ (H i).FiniteIndex

full_name: Subgroup.exists_finiteIndex_of_leftCoset_cover_aux
code: @[to_additive]
theorem exists_finiteIndex_of_leftCoset_cover_aux [DecidableEq (Subgroup G)]
    (j : ι) (hj : j ∈ s) (hcovers' : ⋃ i ∈ s.filter (H · = H j), g i • (H i : Set G) ≠ Set.univ) :
    ∃ i ∈ s, H i ≠ H j ∧ (H i).FiniteIndex 
goal: ∃ i ∈ s, H i ≠ H j ∧ (H i).FiniteIndex

full_name: Subgroup.exists_finiteIndex_of_leftCoset_cover
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
Then at least one subgroup `H i` has finite index in `G`. -/
@[to_additive]
theorem exists_finiteIndex_of_leftCoset_cover : ∃ k ∈ s, (H k).FiniteIndex 
goal: ∃ k ∈ s, (H k).FiniteIndex

full_name: AddSubgroup.exists_finiteIndex_of_leftCoset_cover
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
Then at least one subgroup `H i` has finite index in `G`. -/
@[to_additive]
theorem exists_finiteIndex_of_leftCoset_cover : ∃ k ∈ s, (H k).FiniteIndex 
goal: ∃ k ∈ s, (H k).FiniteIndex

full_name: AddSubgroup.leftCoset_cover_filter_FiniteIndex_aux
code: @[to_additive]
theorem leftCoset_cover_filter_FiniteIndex_aux
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    (⋃ k ∈ s.filter (fun i => (H i).FiniteIndex), g k • (H k : Set G) = Set.univ) ∧
      (1 ≤ ∑ i ∈ s, ((H i).index : ℚ)⁻¹) ∧
      (∑ i ∈ s, ((H i).index : ℚ)⁻¹ = 1 → Set.PairwiseDisjoint
        (s.filter (fun i => (H i).FiniteIndex)) (fun i ↦ g i • (H i : Set G))) 
goal: ⋃ k ∈ Finset.filter (fun i => (H i).FiniteIndex) s, g k +ᵥ ↑(H k) = Set.univ ∧
  1 ≤ ∑ i ∈ s, (↑(H i).index)⁻¹ ∧
    (∑ i ∈ s, (↑(H i).index)⁻¹ = 1 →
      (↑(Finset.filter (fun i => (H i).FiniteIndex) s)).PairwiseDisjoint fun i => g i +ᵥ ↑(H i))

full_name: Subgroup.leftCoset_cover_filter_FiniteIndex_aux
code: @[to_additive]
theorem leftCoset_cover_filter_FiniteIndex_aux
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    (⋃ k ∈ s.filter (fun i => (H i).FiniteIndex), g k • (H k : Set G) = Set.univ) ∧
      (1 ≤ ∑ i ∈ s, ((H i).index : ℚ)⁻¹) ∧
      (∑ i ∈ s, ((H i).index : ℚ)⁻¹ = 1 → Set.PairwiseDisjoint
        (s.filter (fun i => (H i).FiniteIndex)) (fun i ↦ g i • (H i : Set G))) 
goal: ⋃ k ∈ Finset.filter (fun i => (H i).FiniteIndex) s, g k • ↑(H k) = Set.univ ∧
  1 ≤ ∑ i ∈ s, (↑(H i).index)⁻¹ ∧
    (∑ i ∈ s, (↑(H i).index)⁻¹ = 1 →
      (↑(Finset.filter (fun i => (H i).FiniteIndex) s)).PairwiseDisjoint fun i => g i • ↑(H i))

full_name: Subgroup.leftCoset_cover_filter_FiniteIndex
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
Then the cosets of subgroups of infinite index may be omitted from the covering. -/
@[to_additive]
theorem leftCoset_cover_filter_FiniteIndex
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    ⋃ k ∈ s.filter (fun i => (H i).FiniteIndex), g k • (H k : Set G) = Set.univ 
goal: ⋃ k ∈ Finset.filter (fun i => (H i).FiniteIndex) s, g k • ↑(H k) = Set.univ

full_name: AddSubgroup.leftCoset_cover_filter_FiniteIndex
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
Then the cosets of subgroups of infinite index may be omitted from the covering. -/
@[to_additive]
theorem leftCoset_cover_filter_FiniteIndex
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    ⋃ k ∈ s.filter (fun i => (H i).FiniteIndex), g k • (H k : Set G) = Set.univ 
goal: ⋃ k ∈ Finset.filter (fun i => (H i).FiniteIndex) s, g k +ᵥ ↑(H k) = Set.univ

full_name: Subgroup.one_le_sum_inv_index_of_leftCoset_cover
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`. Then the
sum of the inverses of the indexes of the subgroups `H i` is greater than or equal to 1. -/
@[to_additive one_le_sum_inv_index_of_leftCoset_cover]
theorem one_le_sum_inv_index_of_leftCoset_cover :
    1 ≤ ∑ i ∈ s, ((H i).index : ℚ)⁻¹ 
goal: 1 ≤ ∑ i ∈ s, (↑(H i).index)⁻¹

full_name: AddSubgroup.one_le_sum_inv_index_of_leftCoset_cover
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`. Then the
sum of the inverses of the indexes of the subgroups `H i` is greater than or equal to 1. -/
@[to_additive one_le_sum_inv_index_of_leftCoset_cover]
theorem one_le_sum_inv_index_of_leftCoset_cover :
    1 ≤ ∑ i ∈ s, ((H i).index : ℚ)⁻¹ 
goal: 1 ≤ ∑ i ∈ s, (↑(H i).index)⁻¹

full_name: AddSubgroup.pairwiseDisjoint_leftCoset_cover_of_sum_neg_index_eq_zero
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
If the sum of the inverses of the indexes of the subgroups `H i` is equal to 1,
then the cosets of the subgroups of finite index are pairwise disjoint. -/
@[to_additive]
theorem pairwiseDisjoint_leftCoset_cover_of_sum_inv_index_eq_one
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    ∑ i ∈ s, ((H i).index : ℚ)⁻¹ = 1 →
      Set.PairwiseDisjoint (s.filter (fun i => (H i).FiniteIndex))
        (fun i ↦ g i • (H i : Set G)) 
goal: ∑ i ∈ s, (↑(H i).index)⁻¹ = 1 →
  (↑(Finset.filter (fun i => (H i).FiniteIndex) s)).PairwiseDisjoint fun i => g i +ᵥ ↑(H i)

full_name: Subgroup.pairwiseDisjoint_leftCoset_cover_of_sum_inv_index_eq_one
code: /-- Let the group `G` be the union of finitely many left cosets `g i • H i`.
If the sum of the inverses of the indexes of the subgroups `H i` is equal to 1,
then the cosets of the subgroups of finite index are pairwise disjoint. -/
@[to_additive]
theorem pairwiseDisjoint_leftCoset_cover_of_sum_inv_index_eq_one
    [DecidablePred (FiniteIndex : Subgroup G → Prop)] :
    ∑ i ∈ s, ((H i).index : ℚ)⁻¹ = 1 →
      Set.PairwiseDisjoint (s.filter (fun i => (H i).FiniteIndex))
        (fun i ↦ g i • (H i : Set G)) 
goal: ∑ i ∈ s, (↑(H i).index)⁻¹ = 1 → (↑(Finset.filter (fun i => (H i).FiniteIndex) s)).PairwiseDisjoint fun i => g i • ↑(H i)

full_name: Subgroup.exists_index_le_card_of_leftCoset_cover
code: /-- B. H. Neumann Lemma :
If a finite family of cosets of subgroups covers the group, then at least one
of these subgroups has index not exceeding the number of cosets. -/
@[to_additive]
theorem exists_index_le_card_of_leftCoset_cover :
    ∃ i ∈ s, (H i).FiniteIndex ∧ (H i).index ≤ s.card 
goal: ∃ i ∈ s, (H i).FiniteIndex ∧ (H i).index ≤ s.card

full_name: AddSubgroup.exists_index_le_card_of_leftCoset_cover
code: /-- B. H. Neumann Lemma :
If a finite family of cosets of subgroups covers the group, then at least one
of these subgroups has index not exceeding the number of cosets. -/
@[to_additive]
theorem exists_index_le_card_of_leftCoset_cover :
    ∃ i ∈ s, (H i).FiniteIndex ∧ (H i).index ≤ s.card 
goal: ∃ i ∈ s, (H i).FiniteIndex ∧ (H i).index ≤ s.card

full_name: Submodule.exists_finiteIndex_of_cover
code: theorem Submodule.exists_finiteIndex_of_cover :
    ∃ k ∈ s, (p k).toAddSubgroup.FiniteIndex 
goal: ∃ k ∈ s, (p k).toAddSubgroup.FiniteIndex

full_name: Subspace.biUnion_ne_univ_of_ne_top
code: theorem Subspace.biUnion_ne_univ_of_ne_top (hs : ∀ p ∈ s, p ≠ ⊤) :
    ⋃ p ∈ s, (p : Set E) ≠ Set.univ 
goal: ⋃ p ∈ s, ↑p ≠ Set.univ

full_name: Subspace.exists_eq_top_of_biUnion_eq_univ
code: theorem Subspace.exists_eq_top_of_biUnion_eq_univ (hcovers : ⋃ p ∈ s, (p : Set E) = Set.univ) :
    ∃ p ∈ s, p = ⊤ 
goal: ∃ p ∈ s, p = ⊤