Theorem: MonoidHom.ker_transferSylow_isComplement'
File: Mathlib/GroupTheory/Transfer.lean

Proof steps:
state_before: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
⊢ (transferSylow P hP).ker.IsComplement' ↑P
state_after: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Bijective ⇑((transferSylow P hP).restrict ↑P)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
tactic: have hf : Function.Bijective ((transferSylow P hP).restrict (P : Subgroup G)) :=
    (transferSylow_restrict_eq_pow P hP).symm ▸
      (P.2.powEquiv'
          (not_dvd_index_sylow P
            (mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite))).bijective
state_before: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Bijective ⇑((transferSylow P hP).restrict ↑P)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
state_after: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Injective ⇑((transferSylow P hP).restrict ↑P) ∧ map (transferSylow P hP) ↑P = ⊤
⊢ (transferSylow P hP).ker.IsComplement' ↑P
tactic: rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
state_before: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Injective ⇑((transferSylow P hP).restrict ↑P) ∧ map (transferSylow P hP) ↑P = ⊤
⊢ (transferSylow P hP).ker.IsComplement' ↑P
state_after: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Injective ⇑((transferSylow P hP).restrict ↑P) ∧ map (transferSylow P hP) ↑P = ⊤
this : Function.Surjective ⇑(transferSylow P hP)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
tactic: have := range_top_iff_surjective.mp (top_le_iff.mp (hf.2.ge.trans
    (map_le_range (transferSylow P hP) P)))
state_before: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : Function.Injective ⇑((transferSylow P hP).restrict ↑P) ∧ map (transferSylow P hP) ↑P = ⊤
this : Function.Surjective ⇑(transferSylow P hP)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
state_after: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : (transferSylow P hP).ker ⊓ ↑P = ⊥ ∧ ↑(transferSylow P hP).ker * ↑↑P = Set.univ
this : Function.Surjective ⇑(transferSylow P hP)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
tactic: rw [← (comap_injective this).eq_iff, comap_top, comap_map_eq, sup_comm, SetLike.ext'_iff,
    normal_mul, ← ker_eq_bot_iff, ← (map_injective (P : Subgroup G).subtype_injective).eq_iff,
    ker_restrict, subgroupOf_map_subtype, Subgroup.map_bot, coe_top] at hf
state_before: G : Type u_1
inst✝⁴ : Group G
H : Subgroup G
A : Type u_2
inst✝³ : CommGroup A
ϕ : ↥H →* A
T : ↑(leftTransversals ↑H)
p : ℕ
P : Sylow p G
hP : (↑P).normalizer ≤ centralizer ↑P
inst✝² : Fact (Nat.Prime p)
inst✝¹ : Finite (Sylow p G)
inst✝ : (↑P).FiniteIndex
hf : (transferSylow P hP).ker ⊓ ↑P = ⊥ ∧ ↑(transferSylow P hP).ker * ↑↑P = Set.univ
this : Function.Surjective ⇑(transferSylow P hP)
⊢ (transferSylow P hP).ker.IsComplement' ↑P
state_after: no goals
tactic: exact isComplement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2