Theorem: GroupFilterBasis.nhds_eq
File: Mathlib/Topology/Algebra/FilterBasis.lean

tactic: apply TopologicalSpace.nhds_mkOfNhds_of_hasBasis (fun x ↦ (FilterBasis.hasBasis _).map _)
state_before: G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ : G
⊢ 𝓝 x₀ = B.N x₀
state_after: case hpure
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ : G
⊢ ∀ (a : G), ∀ i ∈ toFilterBasis, a ∈ (fun y => a * y) '' id i

case hopen
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ : G
⊢ ∀ (a : G),
    ∀ i ∈ toFilterBasis,
      ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
        (fun y => a * y) '' id i ∈ map (fun y => x * y) toFilterBasis.filter

tactic: intro a U U_in
state_before: case hpure
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ : G
⊢ ∀ (a : G), ∀ i ∈ toFilterBasis, a ∈ (fun y => a * y) '' id i
state_after: case hpure
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
⊢ a ∈ (fun y => a * y) '' id U

tactic: exact ⟨1, B.one U_in, mul_one a⟩
state_before: case hpure
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
⊢ a ∈ (fun y => a * y) '' id U
state_after: no goals

tactic: intro a U U_in
state_before: case hopen
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ : G
⊢ ∀ (a : G),
    ∀ i ∈ toFilterBasis,
      ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
        (fun y => a * y) '' id i ∈ map (fun y => x * y) toFilterBasis.filter
state_after: case hopen
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
⊢ ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
    (fun y => a * y) '' id U ∈ map (fun y => x * y) toFilterBasis.filter

tactic: rcases GroupFilterBasis.mul U_in with ⟨V, V_in, hVU⟩
state_before: case hopen
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
⊢ ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
    (fun y => a * y) '' id U ∈ map (fun y => x * y) toFilterBasis.filter
state_after: case hopen.intro.intro
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
⊢ ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
    (fun y => a * y) '' id U ∈ map (fun y => x * y) toFilterBasis.filter

tactic: filter_upwards [image_mem_map (B.mem_filter_of_mem V_in)]
state_before: case hopen.intro.intro
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
⊢ ∀ᶠ (x : G) in map (fun y => a * y) toFilterBasis.filter,
    (fun y => a * y) '' id U ∈ map (fun y => x * y) toFilterBasis.filter
state_after: case h
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
⊢ ∀ a_1 ∈ (fun y => a * y) '' V, (fun y => a * y) '' id U ∈ map (fun y => a_1 * y) toFilterBasis.filter

tactic: rintro _ ⟨x, hx, rfl⟩
state_before: case h
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
⊢ ∀ a_1 ∈ (fun y => a * y) '' V, (fun y => a * y) '' id U ∈ map (fun y => a_1 * y) toFilterBasis.filter
state_after: case h.intro.intro
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
x : G
hx : x ∈ V
⊢ (fun y => a * y) '' id U ∈ map (fun y => (fun y => a * y) x * y) toFilterBasis.filter

tactic: calc
  a • U ⊇ a • (V * V) := smul_set_mono hVU
  _ ⊇ a • x • V := smul_set_mono <| smul_set_subset_smul hx
  _ = (a * x) • V := smul_smul ..
  _ ∈ (a * x) • B.filter := smul_set_mem_smul_filter <| B.mem_filter_of_mem V_in
state_before: case h.intro.intro
G : Type u
inst✝ : Group G
B✝ B : GroupFilterBasis G
x₀ a : G
U : Set G
U_in : U ∈ toFilterBasis
V : Set G
V_in : V ∈ B
hVU : V * V ⊆ U
x : G
hx : x ∈ V
⊢ (fun y => a * y) '' id U ∈ map (fun y => (fun y => a * y) x * y) toFilterBasis.filter
state_after: no goals