File: Mathlib/GroupTheory/Index.lean

full_name: Subgroup.index
code: /-- The index of a subgroup as a natural number, and returns 0 if the index is infinite. -/
@[to_additive "The index of a subgroup as a natural number,
and returns 0 if the index is infinite."]
noncomputable def index : ℕ 
goal: ℕ

full_name: AddSubgroup.index
code: /-- The index of a subgroup as a natural number, and returns 0 if the index is infinite. -/
@[to_additive "The index of a subgroup as a natural number,
and returns 0 if the index is infinite."]
noncomputable def index : ℕ 
goal: ℕ

full_name: Subgroup.relindex
code: /-- The relative index of a subgroup as a natural number,
  and returns 0 if the relative index is infinite. -/
@[to_additive "The relative index of a subgroup as a natural number,
and returns 0 if the relative index is infinite."]
noncomputable def relindex : ℕ 
goal: ℕ

full_name: AddSubgroup.relindex
code: /-- The relative index of a subgroup as a natural number,
  and returns 0 if the relative index is infinite. -/
@[to_additive "The relative index of a subgroup as a natural number,
and returns 0 if the relative index is infinite."]
noncomputable def relindex : ℕ 
goal: ℕ

full_name: Subgroup.index_comap_of_surjective
code: @[to_additive]
theorem index_comap_of_surjective {f : G' →* G} (hf : Function.Surjective f) :
    (H.comap f).index = H.index 
goal: (Subgroup.comap f H).index = H.index

full_name: AddSubgroup.index_comap_of_surjective
code: @[to_additive]
theorem index_comap_of_surjective {f : G' →* G} (hf : Function.Surjective f) :
    (H.comap f).index = H.index 
goal: (AddSubgroup.comap f H).index = H.index

full_name: AddSubgroup.index_comap
code: @[to_additive]
theorem index_comap (f : G' →* G) :
    (H.comap f).index = H.relindex f.range 
goal: (AddSubgroup.comap f H).index = H.relindex f.range

full_name: Subgroup.index_comap
code: @[to_additive]
theorem index_comap (f : G' →* G) :
    (H.comap f).index = H.relindex f.range 
goal: (Subgroup.comap f H).index = H.relindex f.range

full_name: Subgroup.relindex_comap
code: @[to_additive]
theorem relindex_comap (f : G' →* G) (K : Subgroup G') :
    relindex (comap f H) K = relindex H (map f K) 
goal: (Subgroup.comap f H).relindex K = H.relindex (Subgroup.map f K)

full_name: AddSubgroup.relindex_comap
code: @[to_additive]
theorem relindex_comap (f : G' →* G) (K : Subgroup G') :
    relindex (comap f H) K = relindex H (map f K) 
goal: (AddSubgroup.comap f H).relindex K = H.relindex (AddSubgroup.map f K)

full_name: AddSubgroup.relindex_mul_index
code: @[to_additive relindex_mul_index]
theorem relindex_mul_index (h : H ≤ K) : H.relindex K * K.index = H.index 
goal: H.relindex K * K.index = H.index

full_name: Subgroup.relindex_mul_index
code: @[to_additive relindex_mul_index]
theorem relindex_mul_index (h : H ≤ K) : H.relindex K * K.index = H.index 
goal: H.relindex K * K.index = H.index

full_name: AddSubgroup.index_dvd_of_le
code: @[to_additive]
theorem index_dvd_of_le (h : H ≤ K) : K.index ∣ H.index 
goal: K.index ∣ H.index

full_name: Subgroup.index_dvd_of_le
code: @[to_additive]
theorem index_dvd_of_le (h : H ≤ K) : K.index ∣ H.index 
goal: K.index ∣ H.index

full_name: AddSubgroup.relindex_dvd_index_of_le
code: @[to_additive]
theorem relindex_dvd_index_of_le (h : H ≤ K) : H.relindex K ∣ H.index 
goal: H.relindex K ∣ H.index

full_name: Subgroup.relindex_dvd_index_of_le
code: @[to_additive]
theorem relindex_dvd_index_of_le (h : H ≤ K) : H.relindex K ∣ H.index 
goal: H.relindex K ∣ H.index

full_name: Subgroup.relindex_subgroupOf
code: @[to_additive]
theorem relindex_subgroupOf (hKL : K ≤ L) :
    (H.subgroupOf L).relindex (K.subgroupOf L) = H.relindex K 
goal: (H.subgroupOf L).relindex (K.subgroupOf L) = H.relindex K

full_name: AddSubgroup.relindex_addSubgroupOf
code: @[to_additive]
theorem relindex_subgroupOf (hKL : K ≤ L) :
    (H.subgroupOf L).relindex (K.subgroupOf L) = H.relindex K 
goal: (H.addSubgroupOf L).relindex (K.addSubgroupOf L) = H.relindex K

full_name: Subgroup.relindex_mul_relindex
code: @[to_additive relindex_mul_relindex]
theorem relindex_mul_relindex (hHK : H ≤ K) (hKL : K ≤ L) :
    H.relindex K * K.relindex L = H.relindex L 
goal: H.relindex K * K.relindex L = H.relindex L

full_name: AddSubgroup.relindex_mul_relindex
code: @[to_additive relindex_mul_relindex]
theorem relindex_mul_relindex (hHK : H ≤ K) (hKL : K ≤ L) :
    H.relindex K * K.relindex L = H.relindex L 
goal: H.relindex K * K.relindex L = H.relindex L

full_name: AddSubgroup.inf_relindex_right
code: @[to_additive]
theorem inf_relindex_right : (H ⊓ K).relindex K = H.relindex K 
goal: (H ⊓ K).relindex K = H.relindex K

full_name: Subgroup.inf_relindex_right
code: @[to_additive]
theorem inf_relindex_right : (H ⊓ K).relindex K = H.relindex K 
goal: (H ⊓ K).relindex K = H.relindex K

full_name: AddSubgroup.inf_relindex_left
code: @[to_additive]
theorem inf_relindex_left : (H ⊓ K).relindex H = K.relindex H 
goal: (H ⊓ K).relindex H = K.relindex H

full_name: Subgroup.inf_relindex_left
code: @[to_additive]
theorem inf_relindex_left : (H ⊓ K).relindex H = K.relindex H 
goal: (H ⊓ K).relindex H = K.relindex H

full_name: Subgroup.relindex_inf_mul_relindex
code: @[to_additive relindex_inf_mul_relindex]
theorem relindex_inf_mul_relindex : H.relindex (K ⊓ L) * K.relindex L = (H ⊓ K).relindex L 
goal: H.relindex (K ⊓ L) * K.relindex L = (H ⊓ K).relindex L

full_name: AddSubgroup.relindex_inf_mul_relindex
code: @[to_additive relindex_inf_mul_relindex]
theorem relindex_inf_mul_relindex : H.relindex (K ⊓ L) * K.relindex L = (H ⊓ K).relindex L 
goal: H.relindex (K ⊓ L) * K.relindex L = (H ⊓ K).relindex L

full_name: AddSubgroup.relindex_sup_right
code: @[to_additive (attr := simp)]
theorem relindex_sup_right [K.Normal] : K.relindex (H ⊔ K) = K.relindex H 
goal: K.relindex (H ⊔ K) = K.relindex H

full_name: Subgroup.relindex_sup_right
code: @[to_additive (attr := simp)]
theorem relindex_sup_right [K.Normal] : K.relindex (H ⊔ K) = K.relindex H 
goal: K.relindex (H ⊔ K) = K.relindex H

full_name: Subgroup.relindex_sup_left
code: @[to_additive (attr := simp)]
theorem relindex_sup_left [K.Normal] : K.relindex (K ⊔ H) = K.relindex H 
goal: K.relindex (K ⊔ H) = K.relindex H

full_name: AddSubgroup.relindex_sup_left
code: @[to_additive (attr := simp)]
theorem relindex_sup_left [K.Normal] : K.relindex (K ⊔ H) = K.relindex H 
goal: K.relindex (K ⊔ H) = K.relindex H

full_name: AddSubgroup.relindex_dvd_index_of_normal
code: @[to_additive]
theorem relindex_dvd_index_of_normal [H.Normal] : H.relindex K ∣ H.index 
goal: H.relindex K ∣ H.index

full_name: Subgroup.relindex_dvd_index_of_normal
code: @[to_additive]
theorem relindex_dvd_index_of_normal [H.Normal] : H.relindex K ∣ H.index 
goal: H.relindex K ∣ H.index

full_name: AddSubgroup.relindex_dvd_of_le_left
code: @[to_additive]
theorem relindex_dvd_of_le_left (hHK : H ≤ K) : K.relindex L ∣ H.relindex L 
goal: K.relindex L ∣ H.relindex L

full_name: Subgroup.relindex_dvd_of_le_left
code: @[to_additive]
theorem relindex_dvd_of_le_left (hHK : H ≤ K) : K.relindex L ∣ H.relindex L 
goal: K.relindex L ∣ H.relindex L

full_name: AddSubgroup.index_eq_two_iff
code: /-- A subgroup has index two if and only if there exists `a` such that for all `b`, exactly one
of `b * a` and `b` belong to `H`. -/
@[to_additive "An additive subgroup has index two if and only if there exists `a` such that
for all `b`, exactly one of `b + a` and `b` belong to `H`."]
theorem index_eq_two_iff : H.index = 2 ↔ ∃ a, ∀ b, Xor' (b * a ∈ H) (b ∈ H) 
goal: H.index = 2 ↔ ∃ a, ∀ (b : G), Xor' (b + a ∈ H) (b ∈ H)

full_name: Subgroup.index_eq_two_iff
code: /-- A subgroup has index two if and only if there exists `a` such that for all `b`, exactly one
of `b * a` and `b` belong to `H`. -/
@[to_additive "An additive subgroup has index two if and only if there exists `a` such that
for all `b`, exactly one of `b + a` and `b` belong to `H`."]
theorem index_eq_two_iff : H.index = 2 ↔ ∃ a, ∀ b, Xor' (b * a ∈ H) (b ∈ H) 
goal: H.index = 2 ↔ ∃ a, ∀ (b : G), Xor' (b * a ∈ H) (b ∈ H)

full_name: AddSubgroup.add_mem_iff_of_index_two
code: @[to_additive]
theorem mul_mem_iff_of_index_two (h : H.index = 2) {a b : G} : a * b ∈ H ↔ (a ∈ H ↔ b ∈ H) 
goal: a + b ∈ H ↔ (a ∈ H ↔ b ∈ H)

full_name: Subgroup.mul_mem_iff_of_index_two
code: @[to_additive]
theorem mul_mem_iff_of_index_two (h : H.index = 2) {a b : G} : a * b ∈ H ↔ (a ∈ H ↔ b ∈ H) 
goal: a * b ∈ H ↔ (a ∈ H ↔ b ∈ H)

full_name: AddSubgroup.add_self_mem_of_index_two
code: @[to_additive]
theorem mul_self_mem_of_index_two (h : H.index = 2) (a : G) : a * a ∈ H 
goal: a + a ∈ H

full_name: Subgroup.mul_self_mem_of_index_two
code: @[to_additive]
theorem mul_self_mem_of_index_two (h : H.index = 2) (a : G) : a * a ∈ H 
goal: a * a ∈ H

full_name: AddSubgroup.two_smul_mem_of_index_two
code: @[to_additive two_smul_mem_of_index_two]
theorem sq_mem_of_index_two (h : H.index = 2) (a : G) : a ^ 2 ∈ H 
goal: 2 • a ∈ H

full_name: Subgroup.sq_mem_of_index_two
code: @[to_additive two_smul_mem_of_index_two]
theorem sq_mem_of_index_two (h : H.index = 2) (a : G) : a ^ 2 ∈ H 
goal: a ^ 2 ∈ H

full_name: AddSubgroup.index_top
code: @[to_additive (attr := simp)]
theorem index_top : (⊤ : Subgroup G).index = 1 
goal: ⊤.index = 1

full_name: Subgroup.index_top
code: @[to_additive (attr := simp)]
theorem index_top : (⊤ : Subgroup G).index = 1 
goal: ⊤.index = 1

full_name: AddSubgroup.index_bot
code: @[to_additive (attr := simp)]
theorem index_bot : (⊥ : Subgroup G).index = Nat.card G 
goal: ⊥.index = Nat.card G

full_name: Subgroup.index_bot
code: @[to_additive (attr := simp)]
theorem index_bot : (⊥ : Subgroup G).index = Nat.card G 
goal: ⊥.index = Nat.card G

full_name: Subgroup.relindex_top_left
code: @[to_additive (attr := simp)]
theorem relindex_top_left : (⊤ : Subgroup G).relindex H = 1 
goal: ⊤.relindex H = 1

full_name: AddSubgroup.relindex_top_left
code: @[to_additive (attr := simp)]
theorem relindex_top_left : (⊤ : Subgroup G).relindex H = 1 
goal: ⊤.relindex H = 1

full_name: Subgroup.relindex_top_right
code: @[to_additive (attr := simp)]
theorem relindex_top_right : H.relindex ⊤ = H.index 
goal: H.relindex ⊤ = H.index

full_name: AddSubgroup.relindex_top_right
code: @[to_additive (attr := simp)]
theorem relindex_top_right : H.relindex ⊤ = H.index 
goal: H.relindex ⊤ = H.index

full_name: Subgroup.relindex_bot_left
code: @[to_additive (attr := simp)]
theorem relindex_bot_left : (⊥ : Subgroup G).relindex H = Nat.card H 
goal: ⊥.relindex H = Nat.card ↥H

full_name: AddSubgroup.relindex_bot_left
code: @[to_additive (attr := simp)]
theorem relindex_bot_left : (⊥ : Subgroup G).relindex H = Nat.card H 
goal: ⊥.relindex H = Nat.card ↥H

full_name: AddSubgroup.relindex_bot_right
code: @[to_additive (attr := simp)]
theorem relindex_bot_right : H.relindex ⊥ = 1 
goal: H.relindex ⊥ = 1

full_name: Subgroup.relindex_bot_right
code: @[to_additive (attr := simp)]
theorem relindex_bot_right : H.relindex ⊥ = 1 
goal: H.relindex ⊥ = 1

full_name: AddSubgroup.relindex_self
code: @[to_additive (attr := simp)]
theorem relindex_self : H.relindex H = 1 
goal: H.relindex H = 1

full_name: Subgroup.relindex_self
code: @[to_additive (attr := simp)]
theorem relindex_self : H.relindex H = 1 
goal: H.relindex H = 1

full_name: Subgroup.index_ker
code: @[to_additive]
theorem index_ker (f : G →* G') : f.ker.index = Nat.card (Set.range f) 
goal: f.ker.index = Nat.card ↑(Set.range ⇑f)

full_name: AddSubgroup.index_ker
code: @[to_additive]
theorem index_ker (f : G →* G') : f.ker.index = Nat.card (Set.range f) 
goal: f.ker.index = Nat.card ↑(Set.range ⇑f)

full_name: AddSubgroup.relindex_ker
code: @[to_additive]
theorem relindex_ker (f : G →* G') (K : Subgroup G) :
    f.ker.relindex K = Nat.card (f '' K) 
goal: f.ker.relindex K = Nat.card ↑(⇑f '' ↑K)

full_name: Subgroup.relindex_ker
code: @[to_additive]
theorem relindex_ker (f : G →* G') (K : Subgroup G) :
    f.ker.relindex K = Nat.card (f '' K) 
goal: f.ker.relindex K = Nat.card ↑(⇑f '' ↑K)

full_name: AddSubgroup.card_mul_index
code: @[to_additive (attr := simp) card_mul_index]
theorem card_mul_index : Nat.card H * H.index = Nat.card G 
goal: Nat.card ↥H * H.index = Nat.card G

full_name: Subgroup.card_mul_index
code: @[to_additive (attr := simp) card_mul_index]
theorem card_mul_index : Nat.card H * H.index = Nat.card G 
goal: Nat.card ↥H * H.index = Nat.card G

full_name: AddSubgroup.card_dvd_of_surjective
code: @[to_additive]
theorem card_dvd_of_surjective (f : G →* G') (hf : Function.Surjective f) :
    Nat.card G' ∣ Nat.card G 
goal: Nat.card G' ∣ Nat.card G

full_name: Subgroup.card_dvd_of_surjective
code: @[to_additive]
theorem card_dvd_of_surjective (f : G →* G') (hf : Function.Surjective f) :
    Nat.card G' ∣ Nat.card G 
goal: Nat.card G' ∣ Nat.card G

full_name: Subgroup.index_map
code: @[to_additive]
theorem index_map (f : G →* G') :
    (H.map f).index = (H ⊔ f.ker).index * f.range.index 
goal: (Subgroup.map f H).index = (H ⊔ f.ker).index * f.range.index

full_name: AddSubgroup.index_map
code: @[to_additive]
theorem index_map (f : G →* G') :
    (H.map f).index = (H ⊔ f.ker).index * f.range.index 
goal: (AddSubgroup.map f H).index = (H ⊔ f.ker).index * f.range.index

full_name: Subgroup.index_map_dvd
code: @[to_additive]
theorem index_map_dvd {f : G →* G'} (hf : Function.Surjective f) :
    (H.map f).index ∣ H.index 
goal: (Subgroup.map f H).index ∣ H.index

full_name: AddSubgroup.index_map_dvd
code: @[to_additive]
theorem index_map_dvd {f : G →* G'} (hf : Function.Surjective f) :
    (H.map f).index ∣ H.index 
goal: (AddSubgroup.map f H).index ∣ H.index

full_name: AddSubgroup.dvd_index_map
code: @[to_additive]
theorem dvd_index_map {f : G →* G'} (hf : f.ker ≤ H) :
    H.index ∣ (H.map f).index 
goal: H.index ∣ (AddSubgroup.map f H).index

full_name: Subgroup.dvd_index_map
code: @[to_additive]
theorem dvd_index_map {f : G →* G'} (hf : f.ker ≤ H) :
    H.index ∣ (H.map f).index 
goal: H.index ∣ (Subgroup.map f H).index

full_name: Subgroup.index_map_eq
code: @[to_additive]
theorem index_map_eq {f : G →* G'} (hf1 : Function.Surjective f)
    (hf2 : f.ker ≤ H) : (H.map f).index = H.index 
goal: (Subgroup.map f H).index = H.index

full_name: AddSubgroup.index_map_eq
code: @[to_additive]
theorem index_map_eq {f : G →* G'} (hf1 : Function.Surjective f)
    (hf2 : f.ker ≤ H) : (H.map f).index = H.index 
goal: (AddSubgroup.map f H).index = H.index

full_name: AddSubgroup.index_eq_card
code: @[to_additive]
theorem index_eq_card : H.index = Nat.card (G ⧸ H) 
goal: H.index = Nat.card (G ⧸ H)

full_name: Subgroup.index_eq_card
code: @[to_additive]
theorem index_eq_card : H.index = Nat.card (G ⧸ H) 
goal: H.index = Nat.card (G ⧸ H)

full_name: Subgroup.index_mul_card
code: @[to_additive index_mul_card]
theorem index_mul_card : H.index * Nat.card H = Nat.card G 
goal: H.index * Nat.card ↥H = Nat.card G

full_name: AddSubgroup.index_mul_card
code: @[to_additive index_mul_card]
theorem index_mul_card : H.index * Nat.card H = Nat.card G 
goal: H.index * Nat.card ↥H = Nat.card G

full_name: Subgroup.index_dvd_card
code: @[to_additive]
theorem index_dvd_card : H.index ∣ Nat.card G 
goal: H.index ∣ Nat.card G

full_name: AddSubgroup.index_dvd_card
code: @[to_additive]
theorem index_dvd_card : H.index ∣ Nat.card G 
goal: H.index ∣ Nat.card G

full_name: Subgroup.relindex_eq_zero_of_le_left
code: @[to_additive]
theorem relindex_eq_zero_of_le_left (hHK : H ≤ K) (hKL : K.relindex L = 0) : H.relindex L = 0 
goal: H.relindex L = 0

full_name: AddSubgroup.relindex_eq_zero_of_le_left
code: @[to_additive]
theorem relindex_eq_zero_of_le_left (hHK : H ≤ K) (hKL : K.relindex L = 0) : H.relindex L = 0 
goal: H.relindex L = 0

full_name: Subgroup.relindex_eq_zero_of_le_right
code: @[to_additive]
theorem relindex_eq_zero_of_le_right (hKL : K ≤ L) (hHK : H.relindex K = 0) : H.relindex L = 0 
goal: H.relindex L = 0

full_name: AddSubgroup.relindex_eq_zero_of_le_right
code: @[to_additive]
theorem relindex_eq_zero_of_le_right (hKL : K ≤ L) (hHK : H.relindex K = 0) : H.relindex L = 0 
goal: H.relindex L = 0

full_name: AddSubgroup.index_eq_zero_of_relindex_eq_zero
code: @[to_additive]
theorem index_eq_zero_of_relindex_eq_zero (h : H.relindex K = 0) : H.index = 0 
goal: H.index = 0

full_name: Subgroup.index_eq_zero_of_relindex_eq_zero
code: @[to_additive]
theorem index_eq_zero_of_relindex_eq_zero (h : H.relindex K = 0) : H.index = 0 
goal: H.index = 0

full_name: AddSubgroup.relindex_le_of_le_left
code: @[to_additive]
theorem relindex_le_of_le_left (hHK : H ≤ K) (hHL : H.relindex L ≠ 0) :
    K.relindex L ≤ H.relindex L 
goal: K.relindex L ≤ H.relindex L

full_name: Subgroup.relindex_le_of_le_left
code: @[to_additive]
theorem relindex_le_of_le_left (hHK : H ≤ K) (hHL : H.relindex L ≠ 0) :
    K.relindex L ≤ H.relindex L 
goal: K.relindex L ≤ H.relindex L

full_name: AddSubgroup.relindex_le_of_le_right
code: @[to_additive]
theorem relindex_le_of_le_right (hKL : K ≤ L) (hHL : H.relindex L ≠ 0) :
    H.relindex K ≤ H.relindex L 
goal: H.relindex K ≤ H.relindex L

full_name: Subgroup.relindex_le_of_le_right
code: @[to_additive]
theorem relindex_le_of_le_right (hKL : K ≤ L) (hHL : H.relindex L ≠ 0) :
    H.relindex K ≤ H.relindex L 
goal: H.relindex K ≤ H.relindex L

full_name: Subgroup.relindex_ne_zero_trans
code: @[to_additive]
theorem relindex_ne_zero_trans (hHK : H.relindex K ≠ 0) (hKL : K.relindex L ≠ 0) :
    H.relindex L ≠ 0 
goal: H.relindex L ≠ 0

full_name: AddSubgroup.relindex_ne_zero_trans
code: @[to_additive]
theorem relindex_ne_zero_trans (hHK : H.relindex K ≠ 0) (hKL : K.relindex L ≠ 0) :
    H.relindex L ≠ 0 
goal: H.relindex L ≠ 0

full_name: AddSubgroup.relindex_inf_ne_zero
code: @[to_additive]
theorem relindex_inf_ne_zero (hH : H.relindex L ≠ 0) (hK : K.relindex L ≠ 0) :
    (H ⊓ K).relindex L ≠ 0 
goal: (H ⊓ K).relindex L ≠ 0

full_name: Subgroup.relindex_inf_ne_zero
code: @[to_additive]
theorem relindex_inf_ne_zero (hH : H.relindex L ≠ 0) (hK : K.relindex L ≠ 0) :
    (H ⊓ K).relindex L ≠ 0 
goal: (H ⊓ K).relindex L ≠ 0

full_name: AddSubgroup.index_inf_ne_zero
code: @[to_additive]
theorem index_inf_ne_zero (hH : H.index ≠ 0) (hK : K.index ≠ 0) : (H ⊓ K).index ≠ 0 
goal: (H ⊓ K).index ≠ 0

full_name: Subgroup.index_inf_ne_zero
code: @[to_additive]
theorem index_inf_ne_zero (hH : H.index ≠ 0) (hK : K.index ≠ 0) : (H ⊓ K).index ≠ 0 
goal: (H ⊓ K).index ≠ 0

full_name: Subgroup.relindex_inf_le
code: @[to_additive]
theorem relindex_inf_le : (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L 
goal: (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L

full_name: AddSubgroup.relindex_inf_le
code: @[to_additive]
theorem relindex_inf_le : (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L 
goal: (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L

full_name: Subgroup.index_inf_le
code: @[to_additive]
theorem index_inf_le : (H ⊓ K).index ≤ H.index * K.index 
goal: (H ⊓ K).index ≤ H.index * K.index

full_name: AddSubgroup.index_inf_le
code: @[to_additive]
theorem index_inf_le : (H ⊓ K).index ≤ H.index * K.index 
goal: (H ⊓ K).index ≤ H.index * K.index

full_name: AddSubgroup.relindex_iInf_ne_zero
code: @[to_additive]
theorem relindex_iInf_ne_zero {ι : Type*} [_hι : Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).relindex L ≠ 0) : (⨅ i, f i).relindex L ≠ 0 
goal: (⨅ i, f i).relindex L ≠ 0

full_name: Subgroup.relindex_iInf_ne_zero
code: @[to_additive]
theorem relindex_iInf_ne_zero {ι : Type*} [_hι : Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).relindex L ≠ 0) : (⨅ i, f i).relindex L ≠ 0 
goal: (⨅ i, f i).relindex L ≠ 0

full_name: AddSubgroup.relindex_iInf_le
code: @[to_additive]
theorem relindex_iInf_le {ι : Type*} [Fintype ι] (f : ι → Subgroup G) :
    (⨅ i, f i).relindex L ≤ ∏ i, (f i).relindex L 
goal: (⨅ i, f i).relindex L ≤ ∏ i : ι, (f i).relindex L

full_name: Subgroup.relindex_iInf_le
code: @[to_additive]
theorem relindex_iInf_le {ι : Type*} [Fintype ι] (f : ι → Subgroup G) :
    (⨅ i, f i).relindex L ≤ ∏ i, (f i).relindex L 
goal: (⨅ i, f i).relindex L ≤ ∏ i : ι, (f i).relindex L

full_name: Subgroup.index_iInf_ne_zero
code: @[to_additive]
theorem index_iInf_ne_zero {ι : Type*} [Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).index ≠ 0) : (⨅ i, f i).index ≠ 0 
goal: (⨅ i, f i).index ≠ 0

full_name: AddSubgroup.index_iInf_ne_zero
code: @[to_additive]
theorem index_iInf_ne_zero {ι : Type*} [Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).index ≠ 0) : (⨅ i, f i).index ≠ 0 
goal: (⨅ i, f i).index ≠ 0

full_name: Subgroup.index_iInf_le
code: @[to_additive]
theorem index_iInf_le {ι : Type*} [Fintype ι] (f : ι → Subgroup G) :
    (⨅ i, f i).index ≤ ∏ i, (f i).index 
goal: (⨅ i, f i).index ≤ ∏ i : ι, (f i).index

full_name: AddSubgroup.index_iInf_le
code: @[to_additive]
theorem index_iInf_le {ι : Type*} [Fintype ι] (f : ι → Subgroup G) :
    (⨅ i, f i).index ≤ ∏ i, (f i).index 
goal: (⨅ i, f i).index ≤ ∏ i : ι, (f i).index

full_name: AddSubgroup.index_eq_one
code: @[to_additive (attr := simp) index_eq_one]
theorem index_eq_one : H.index = 1 ↔ H = ⊤ 
goal: H.index = 1 ↔ H = ⊤

full_name: Subgroup.index_eq_one
code: @[to_additive (attr := simp) index_eq_one]
theorem index_eq_one : H.index = 1 ↔ H = ⊤ 
goal: H.index = 1 ↔ H = ⊤

full_name: Subgroup.relindex_eq_one
code: @[to_additive (attr := simp) relindex_eq_one]
theorem relindex_eq_one : H.relindex K = 1 ↔ K ≤ H 
goal: H.relindex K = 1 ↔ K ≤ H

full_name: AddSubgroup.relindex_eq_one
code: @[to_additive (attr := simp) relindex_eq_one]
theorem relindex_eq_one : H.relindex K = 1 ↔ K ≤ H 
goal: H.relindex K = 1 ↔ K ≤ H

full_name: AddSubgroup.card_eq_one
code: @[to_additive (attr := simp) card_eq_one]
theorem card_eq_one : Nat.card H = 1 ↔ H = ⊥ 
goal: Nat.card ↥H = 1 ↔ H = ⊥

full_name: Subgroup.card_eq_one
code: @[to_additive (attr := simp) card_eq_one]
theorem card_eq_one : Nat.card H = 1 ↔ H = ⊥ 
goal: Nat.card ↥H = 1 ↔ H = ⊥

full_name: AddSubgroup.index_ne_zero_of_finite
code: @[to_additive]
theorem index_ne_zero_of_finite [hH : Finite (G ⧸ H)] : H.index ≠ 0 
goal: H.index ≠ 0

full_name: Subgroup.index_ne_zero_of_finite
code: @[to_additive]
theorem index_ne_zero_of_finite [hH : Finite (G ⧸ H)] : H.index ≠ 0 
goal: H.index ≠ 0

full_name: Subgroup.fintypeOfIndexNeZero
code: /-- Finite index implies finite quotient. -/
@[to_additive "Finite index implies finite quotient."]
noncomputable def fintypeOfIndexNeZero (hH : H.index ≠ 0) : Fintype (G ⧸ H) 
goal: Fintype (G ⧸ H)

full_name: AddSubgroup.fintypeOfIndexNeZero
code: /-- Finite index implies finite quotient. -/
@[to_additive "Finite index implies finite quotient."]
noncomputable def fintypeOfIndexNeZero (hH : H.index ≠ 0) : Fintype (G ⧸ H) 
goal: Fintype (G ⧸ H)

full_name: AddSubgroup.one_lt_index_of_ne_top
code: @[to_additive one_lt_index_of_ne_top]
theorem one_lt_index_of_ne_top [Finite (G ⧸ H)] (hH : H ≠ ⊤) : 1 < H.index 
goal: 1 < H.index

full_name: Subgroup.one_lt_index_of_ne_top
code: @[to_additive one_lt_index_of_ne_top]
theorem one_lt_index_of_ne_top [Finite (G ⧸ H)] (hH : H ≠ ⊤) : 1 < H.index 
goal: 1 < H.index

full_name: Subgroup.FiniteIndex.finiteIndex
code: /-- Typeclass for finite index subgroups. -/
class FiniteIndex : Prop where
  /-- The subgroup has finite index -/
  finiteIndex : H.index ≠ 0
goal: H.index ≠ 0

full_name: Subgroup.FiniteIndex
code: /-- Typeclass for finite index subgroups. -/
class FiniteIndex : Prop where
  /-- The subgroup has finite index -/
  finiteIndex : H.index ≠ 0
goal: Prop

full_name: AddSubgroup.FiniteIndex.finiteIndex
code: /-- Typeclass for finite index subgroups. -/
class _root_.AddSubgroup.FiniteIndex {G : Type*} [AddGroup G] (H : AddSubgroup G) : Prop where
  /-- The additive subgroup has finite index -/
  finiteIndex : H.index ≠ 0
goal: H.index ≠ 0

full_name: AddSubgroup.FiniteIndex
code: /-- Typeclass for finite index subgroups. -/
class _root_.AddSubgroup.FiniteIndex {G : Type*} [AddGroup G] (H : AddSubgroup G) : Prop where
  /-- The additive subgroup has finite index -/
  finiteIndex : H.index ≠ 0
goal: Prop

full_name: AddSubgroup.fintypeQuotientOfFiniteIndex
code: /-- A finite index subgroup has finite quotient. -/
@[to_additive "A finite index subgroup has finite quotient"]
noncomputable def fintypeQuotientOfFiniteIndex [FiniteIndex H] : Fintype (G ⧸ H) 
goal: Fintype (G ⧸ H)

full_name: Subgroup.fintypeQuotientOfFiniteIndex
code: /-- A finite index subgroup has finite quotient. -/
@[to_additive "A finite index subgroup has finite quotient"]
noncomputable def fintypeQuotientOfFiniteIndex [FiniteIndex H] : Fintype (G ⧸ H) 
goal: Fintype (G ⧸ H)

full_name: AddSubgroup.finite_quotient_of_finiteIndex
code: @[to_additive]
instance finite_quotient_of_finiteIndex [FiniteIndex H] : Finite (G ⧸ H) 
goal: Finite (G ⧸ H)

full_name: Subgroup.finite_quotient_of_finiteIndex
code: @[to_additive]
instance finite_quotient_of_finiteIndex [FiniteIndex H] : Finite (G ⧸ H) 
goal: Finite (G ⧸ H)

full_name: AddSubgroup.finiteIndex_of_finite_quotient
code: @[to_additive]
theorem finiteIndex_of_finite_quotient [Finite (G ⧸ H)] : FiniteIndex H 
goal: H.FiniteIndex

full_name: Subgroup.finiteIndex_of_finite_quotient
code: @[to_additive]
theorem finiteIndex_of_finite_quotient [Finite (G ⧸ H)] : FiniteIndex H 
goal: H.FiniteIndex

full_name: Subgroup.finiteIndex_of_finite
code: @[to_additive]
instance (priority := 100) finiteIndex_of_finite [Finite G] : FiniteIndex H 
goal: H.FiniteIndex

full_name: AddSubgroup.finiteIndex_of_finite
code: @[to_additive]
instance (priority := 100) finiteIndex_of_finite [Finite G] : FiniteIndex H 
goal: H.FiniteIndex

full_name: AddSubgroup.instFiniteIndexTop
code: @[to_additive]
instance : FiniteIndex (⊤ : Subgroup G) 
goal: ⊤.FiniteIndex

full_name: Subgroup.instFiniteIndexTop
code: @[to_additive]
instance : FiniteIndex (⊤ : Subgroup G) 
goal: ⊤.FiniteIndex

full_name: AddSubgroup.instFiniteIndexInf
code: @[to_additive]
instance [FiniteIndex H] [FiniteIndex K] : FiniteIndex (H ⊓ K) 
goal: (H ⊓ K).FiniteIndex

full_name: Subgroup.instFiniteIndexInf
code: @[to_additive]
instance [FiniteIndex H] [FiniteIndex K] : FiniteIndex (H ⊓ K) 
goal: (H ⊓ K).FiniteIndex

full_name: AddSubgroup.finiteIndex_iInf
code: @[to_additive]
theorem finiteIndex_iInf {ι : Type*} [Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).FiniteIndex) : (⨅ i, f i).FiniteIndex 
goal: (⨅ i, f i).FiniteIndex

full_name: Subgroup.finiteIndex_iInf
code: @[to_additive]
theorem finiteIndex_iInf {ι : Type*} [Finite ι] {f : ι → Subgroup G}
    (hf : ∀ i, (f i).FiniteIndex) : (⨅ i, f i).FiniteIndex 
goal: (⨅ i, f i).FiniteIndex

full_name: AddSubgroup.finiteIndex_iInf'
code: @[to_additive]
theorem finiteIndex_iInf' {ι : Type*} {s : Finset ι}
    (f : ι → Subgroup G) (hs : ∀ i ∈ s, (f i).FiniteIndex) :
    (⨅ i ∈ s, f i).FiniteIndex 
goal: (⨅ i ∈ s, f i).FiniteIndex

full_name: Subgroup.finiteIndex_iInf'
code: @[to_additive]
theorem finiteIndex_iInf' {ι : Type*} {s : Finset ι}
    (f : ι → Subgroup G) (hs : ∀ i ∈ s, (f i).FiniteIndex) :
    (⨅ i ∈ s, f i).FiniteIndex 
goal: (⨅ i ∈ s, f i).FiniteIndex

full_name: Subgroup.instFiniteIndex_subgroupOf
code: @[to_additive]
instance instFiniteIndex_subgroupOf (H K : Subgroup G) [H.FiniteIndex] :
    (H.subgroupOf K).FiniteIndex 
goal: (H.subgroupOf K).FiniteIndex

full_name: AddSubgroup.instFiniteIndex_addSubgroupOf
code: @[to_additive]
instance instFiniteIndex_subgroupOf (H K : Subgroup G) [H.FiniteIndex] :
    (H.subgroupOf K).FiniteIndex 
goal: (H.addSubgroupOf K).FiniteIndex

full_name: AddSubgroup.finiteIndex_of_le
code: @[to_additive]
theorem finiteIndex_of_le [FiniteIndex H] (h : H ≤ K) : FiniteIndex K 
goal: K.FiniteIndex

full_name: Subgroup.finiteIndex_of_le
code: @[to_additive]
theorem finiteIndex_of_le [FiniteIndex H] (h : H ≤ K) : FiniteIndex K 
goal: K.FiniteIndex

full_name: AddSubgroup.finiteIndex_ker
code: @[to_additive]
instance finiteIndex_ker {G' : Type*} [Group G'] (f : G →* G') [Finite f.range] :
    f.ker.FiniteIndex 
goal: f.ker.FiniteIndex

full_name: Subgroup.finiteIndex_ker
code: @[to_additive]
instance finiteIndex_ker {G' : Type*} [Group G'] (f : G →* G') [Finite f.range] :
    f.ker.FiniteIndex 
goal: f.ker.FiniteIndex

full_name: Subgroup.finiteIndex_normalCore
code: instance finiteIndex_normalCore [H.FiniteIndex] : H.normalCore.FiniteIndex 
goal: H.normalCore.FiniteIndex

full_name: Subgroup.finiteIndex_center
code: instance finiteIndex_center [Finite (commutatorSet G)] [Group.FG G] : FiniteIndex (center G) 
goal: (Subgroup.center G).FiniteIndex

full_name: Subgroup.index_center_le_pow
code: theorem index_center_le_pow [Finite (commutatorSet G)] [Group.FG G] :
    (center G).index ≤ Nat.card (commutatorSet G) ^ Group.rank G 
goal: (Subgroup.center G).index ≤ Nat.card ↑(commutatorSet G) ^ Group.rank G

full_name: MonoidHom.card_fiber_eq_of_mem_range
code: @[to_additive]
lemma card_fiber_eq_of_mem_range (f : F) {x y : M} (hx : x ∈ Set.range f) (hy : y ∈ Set.range f) :
    (univ.filter <| fun g => f g = x).card = (univ.filter <| fun g => f g = y).card 
goal: (Finset.filter (fun g => f g = x) Finset.univ).card = (Finset.filter (fun g => f g = y) Finset.univ).card

full_name: AddMonoidHom.card_fiber_eq_of_mem_range
code: @[to_additive]
lemma card_fiber_eq_of_mem_range (f : F) {x y : M} (hx : x ∈ Set.range f) (hy : y ∈ Set.range f) :
    (univ.filter <| fun g => f g = x).card = (univ.filter <| fun g => f g = y).card 
goal: (Finset.filter (fun g => f g = x) Finset.univ).card = (Finset.filter (fun g => f g = y) Finset.univ).card