Theorem: Subgroup.properlyDiscontinuousSMul_opposite_of_tendsto_cofinite
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: intro K L hK hL
state_before: α : Type u
β : Type v
G : Type w
H : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
⊢ ∀ {K L : Set G}, IsCompact K → IsCompact L → Set.Finite {γ | (fun x => γ • x) '' K ∩ L ≠ ∅}

tactic: have : Continuous fun p : G × G => (p.1⁻¹, p.2) := continuous_inv.prod_map continuous_id
state_before: α : Type u
β : Type v
G : Type w
H : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
⊢ Set.Finite {γ | (fun x => γ • x) '' K ∩ L ≠ ∅}

tactic: have H : Set.Finite _ :=
  hS ((hK.prod hL).image (continuous_mul.comp this)).compl_mem_cocompact
state_before: α : Type u
β : Type v
G : Type w
H : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
⊢ Set.Finite {γ | (fun x => γ • x) '' K ∩ L ≠ ∅}

tactic: simp only [preimage_compl, compl_compl, coeSubtype, comp_apply] at H
state_before: α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite ((↑(Subgroup.subtype S) ⁻¹' (((fun p => p.fst * p.snd) ∘ fun p => (p.fst⁻¹, p.snd)) '' K ×ˢ L)ᶜ)ᶜ)
⊢ Set.Finite {γ | (fun x => γ • x) '' K ∩ L ≠ ∅}

tactic: apply Finite.of_preimage _ (oppositeEquiv S).surjective
state_before: α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite (Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L))
⊢ Set.Finite {γ | (fun x => γ • x) '' K ∩ L ≠ ∅}

tactic: convert H using 1
state_before: α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite (Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L))
⊢ Set.Finite (↑(oppositeEquiv S) ⁻¹' {γ | (fun x => γ • x) '' K ∩ L ≠ ∅})

tactic: ext x
state_before: case h.e'_2
α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite (Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L))
⊢ ↑(oppositeEquiv S) ⁻¹' {γ | (fun x => γ • x) '' K ∩ L ≠ ∅} = Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L)

tactic: simp only [image_smul, mem_setOf_eq, coeSubtype, mem_preimage, mem_image, Prod.exists]
state_before: case h.e'_2.h
α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite (Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L))
x : { x // x ∈ S }
⊢ x ∈ ↑(oppositeEquiv S) ⁻¹' {γ | (fun x => γ • x) '' K ∩ L ≠ ∅} ↔
    x ∈ Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L)

tactic: exact Set.op_smul_inter_ne_empty_iff
state_before: case h.e'_2.h
α : Type u
β : Type v
G : Type w
H✝ : Type x
inst✝⁴ : TopologicalSpace G
inst✝³ : Group G
inst✝² : TopologicalGroup G
S✝ : Subgroup G
inst✝¹ : Normal S✝
inst✝ : IsClosed ↑S✝
S : Subgroup G
hS : Tendsto (↑(Subgroup.subtype S)) cofinite (cocompact G)
K L : Set G
hK : IsCompact K
hL : IsCompact L
this : Continuous fun p => (p.fst⁻¹, p.snd)
H : Set.Finite (Subtype.val ⁻¹' ((fun a => a.fst⁻¹ * a.snd) '' K ×ˢ L))
x : { x // x ∈ S }
⊢ ↑(oppositeEquiv S) x • K ∩ L ≠ ∅ ↔ ∃ a b, (a, b) ∈ K ×ˢ L ∧ a⁻¹ * b = ↑x