Theorem: t2Space_of_properVAdd_of_t2AddGroup
File: Mathlib/Topology/Algebra/ProperAction.lean

Proof steps:
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
⊢ T2Space X
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
⊢ T2Space X
tactic: let f := fun x : X ↦ ((1 : G), x)
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
⊢ T2Space X
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
⊢ IsClosed (diagonal X)
tactic: rw [t2_iff_isClosed_diagonal]
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
⊢ IsClosed (diagonal X)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
⊢ IsClosed (diagonal X)
tactic: let g := fun gx : G × X ↦ (gx.1 • gx.2, gx.2)
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
⊢ IsClosed (diagonal X)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
⊢ IsClosed (diagonal X)
tactic: have proper_g : IsProperMap g := (properSMul_iff G X).1 h_proper
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
⊢ IsClosed (diagonal X)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
⊢ IsClosed (diagonal X)
tactic: have : g ∘ f = fun x ↦ (x, x) := by ext x <;> simp
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
⊢ IsClosed (diagonal X)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
range_gf : range (g ∘ f) = diagonal X
⊢ IsClosed (diagonal X)
tactic: have range_gf : range (g ∘ f) = diagonal X := by simp [this]
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
range_gf : range (g ∘ f) = diagonal X
⊢ IsClosed (diagonal X)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
range_gf : range (g ∘ f) = diagonal X
⊢ IsClosed (range (g ∘ f))
tactic: rw [← range_gf]
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
h_proper : ProperSMul G X
inst✝ : T2Space G
f : X → G × X := fun x => (1, x)
proper_f : IsProperMap f
g : G × X → X × X := fun gx => (gx.1 • gx.2, gx.2)
proper_g : IsProperMap g
this : g ∘ f = fun x => (x, x)
range_gf : range (g ∘ f) = diagonal X
⊢ IsClosed (range (g ∘ f))
state_after: no goals
tactic: exact (proper_f.comp proper_g).isClosed_range