Theorem: properVAdd_of_closedEmbedding
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this : IsProperMap ⇑f
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
tactic: have := isProperMap_of_closedEmbedding f_clemb
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this : IsProperMap ⇑f
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
tactic: have h : IsProperMap (Prod.map f (fun x : X ↦ x)) := IsProperMap.prod_map this isProperMap_id
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this✝ : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
this : (fun hx => (hx.1 • hx.2, hx.2)) = fun hx => (f hx.1 • hx.2, hx.2)
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
tactic: have : (fun hx : H × X ↦ (hx.1 • hx.2, hx.2)) = (fun hx ↦ (f hx.1 • hx.2, hx.2)) := by
      simp [f_compat]
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this✝ : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
this : (fun hx => (hx.1 • hx.2, hx.2)) = fun hx => (f hx.1 • hx.2, hx.2)
⊢ IsProperMap fun gx => (gx.1 • gx.2, gx.2)
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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this✝ : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
this : (fun hx => (hx.1 • hx.2, hx.2)) = fun hx => (f hx.1 • hx.2, hx.2)
⊢ IsProperMap fun hx => (f hx.1 • hx.2, hx.2)
tactic: rw [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 : Type u_5
inst✝³ : Group H
inst✝² : MulAction H X
inst✝¹ : TopologicalSpace H
inst✝ : ProperSMul G X
f : H →* G
f_clemb : ClosedEmbedding ⇑f
f_compat : ∀ (h : H) (x : X), f h • x = h • x
this✝ : IsProperMap ⇑f
h : IsProperMap (Prod.map ⇑f fun x => x)
this : (fun hx => (hx.1 • hx.2, hx.2)) = fun hx => (f hx.1 • hx.2, hx.2)
⊢ IsProperMap fun hx => (f hx.1 • hx.2, hx.2)
state_after: no goals
tactic: exact h.comp <| ProperSMul.isProperMap_smul_pair