Theorem: Subgroup.exists_right_complement'_of_coprime
File: Mathlib/GroupTheory/SchurZassenhaus.lean

tactic: by_cases hN1 : Nat.card N = 0
state_before: n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H

case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H

tactic: by_cases hN2 : N.index = 0
state_before: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
⊢ ∃ H, N.IsComplement' H

case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
⊢ ∃ H, N.IsComplement' H

tactic: have hN3 : Nat.card G ≠ 0 := by
  rw [← N.card_mul_index]
  exact mul_ne_zero hN1 hN2
state_before: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
⊢ ∃ H, N.IsComplement' H
state_after: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
⊢ ∃ H, N.IsComplement' H

tactic: haveI := (Cardinal.lt_aleph0_iff_fintype.mp
  (lt_of_not_ge (mt Cardinal.toNat_apply_of_aleph0_le hN3))).some
state_before: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
⊢ ∃ H, N.IsComplement' H
state_after: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
this : Fintype G
⊢ ∃ H, N.IsComplement' H

tactic: apply exists_right_complement'_of_coprime_of_fintype
state_before: case neg
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
this : Fintype G
⊢ ∃ H, N.IsComplement' H
state_after: case neg.hN
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
this : Fintype G
⊢ (Fintype.card ↥N).Coprime N.index

tactic: rwa [← Nat.card_eq_fintype_card]
state_before: case neg.hN
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
hN3 : Nat.card G ≠ 0
this : Fintype G
⊢ (Fintype.card ↥N).Coprime N.index
state_after: no goals

tactic: rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : N = ⊤
hN1 : Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H

tactic: rw [hN]
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : N = ⊤
hN1 : Nat.card ↥N = 0
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : N = ⊤
hN1 : Nat.card ↥N = 0
⊢ ∃ H, ⊤.IsComplement' H

tactic: exact ⟨⊥, isComplement'_top_bot⟩
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : N = ⊤
hN1 : Nat.card ↥N = 0
⊢ ∃ H, ⊤.IsComplement' H
state_after: no goals

tactic: rw [hN2, Nat.coprime_zero_right] at hN
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
⊢ ∃ H, N.IsComplement' H

tactic: haveI := (Cardinal.toNat_eq_one_iff_unique.mp hN).1
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
this : Subsingleton ↥N
⊢ ∃ H, N.IsComplement' H

tactic: rw [N.eq_bot_of_subsingleton]
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
this : Subsingleton ↥N
⊢ ∃ H, N.IsComplement' H
state_after: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
this : Subsingleton ↥N
⊢ ∃ H, ⊥.IsComplement' H

tactic: exact ⟨⊤, isComplement'_bot_top⟩
state_before: case pos
n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : Nat.card ↥N = 1
hN1 : ¬Nat.card ↥N = 0
hN2 : N.index = 0
this : Subsingleton ↥N
⊢ ∃ H, ⊥.IsComplement' H
state_after: no goals

tactic: rw [← N.card_mul_index]
state_before: n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
⊢ Nat.card G ≠ 0
state_after: n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
⊢ Nat.card ↥N * N.index ≠ 0

tactic: exact mul_ne_zero hN1 hN2
state_before: n : ℕ
G : Type u
inst✝¹ : Group G
N : Subgroup G
inst✝ : N.Normal
hN : (Nat.card ↥N).Coprime N.index
hN1 : ¬Nat.card ↥N = 0
hN2 : ¬N.index = 0
⊢ Nat.card ↥N * N.index ≠ 0
state_after: no goals