Theorem: Subgroup.isCoatom_comap_of_surjective
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: refine And.imp (fun hM ↦ ?_) (fun hM ↦ ?_) hM
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM : IsCoatom M
⊢ IsCoatom (comap φ M)
state_after: case refine_1
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : M ≠ ⊤
⊢ comap φ M ≠ ⊤

case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : ∀ (b : Subgroup H), M < b → b = ⊤
⊢ ∀ (b : Subgroup G), comap φ M < b → b = ⊤

tactic: rwa [← (comap_injective hφ).ne_iff, comap_top] at hM
state_before: case refine_1
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : M ≠ ⊤
⊢ comap φ M ≠ ⊤
state_after: no goals

tactic: intro K hK
state_before: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : ∀ (b : Subgroup H), M < b → b = ⊤
⊢ ∀ (b : Subgroup G), comap φ M < b → b = ⊤
state_after: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : ∀ (b : Subgroup H), M < b → b = ⊤
K : Subgroup G
hK : comap φ M < K
⊢ K = ⊤

tactic: specialize hM (K.map φ)
state_before: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
hM : ∀ (b : Subgroup H), M < b → b = ⊤
K : Subgroup G
hK : comap φ M < K
⊢ K = ⊤
state_after: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : M < map φ K → map φ K = ⊤
⊢ K = ⊤

tactic: rw [← comap_lt_comap_of_surjective hφ, ← (comap_injective hφ).eq_iff] at hM
state_before: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : M < map φ K → map φ K = ⊤
⊢ K = ⊤
state_after: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : comap φ M < comap φ (map φ K) → comap φ (map φ K) = comap φ ⊤
⊢ K = ⊤

tactic: rw [comap_map_eq_self ((M.ker_le_comap φ).trans hK.le), comap_top] at hM
state_before: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : comap φ M < comap φ (map φ K) → comap φ (map φ K) = comap φ ⊤
⊢ K = ⊤
state_after: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : comap φ M < K → K = ⊤
⊢ K = ⊤

tactic: exact hM hK
state_before: case refine_2
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
N : Type u_5
inst✝¹ : Group N
f : G →* N
H : Type u_6
inst✝ : Group H
φ : G →* H
hφ : Surjective ⇑φ
M : Subgroup H
hM✝ : IsCoatom M
K : Subgroup G
hK : comap φ M < K
hM : comap φ M < K → K = ⊤
⊢ K = ⊤
state_after: no goals