Theorem: t2Space_quotient_addAction_of_properVAdd
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
inst✝ : ProperSMul G X
⊢ T2Space (Quotient (MulAction.orbitRel G 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
inst✝ : ProperSMul G X
⊢ IsClosed (diagonal (Quotient (MulAction.orbitRel G 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
inst✝ : ProperSMul G X
⊢ IsClosed (diagonal (Quotient (MulAction.orbitRel G 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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
⊢ IsClosed (diagonal (Quotient R))
tactic: set R := MulAction.orbitRel 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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
⊢ IsClosed (diagonal (Quotient R))
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
⊢ IsClosed (diagonal (Quotient R))
tactic: let π : X → Quotient R := Quotient.mk'
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
⊢ IsClosed (diagonal (Quotient R))
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ IsClosed (diagonal (Quotient R))
tactic: have : QuotientMap (Prod.map π π) :=
    (isOpenMap_quotient_mk'_mul.prod isOpenMap_quotient_mk'_mul).to_quotientMap
      (continuous_quotient_mk'.prod_map continuous_quotient_mk')
      ((surjective_quotient_mk' _).prodMap (surjective_quotient_mk' _))
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ IsClosed (diagonal (Quotient R))
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ IsClosed (Prod.map π π ⁻¹' diagonal (Quotient R))
tactic: rw [← this.isClosed_preimage]
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ IsClosed (Prod.map π π ⁻¹' diagonal (Quotient R))
state_after: case h.e'_3
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ Prod.map π π ⁻¹' diagonal (Quotient R) = range fun gx => (gx.1 • gx.2, gx.2)

case convert_1
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ Type ?u.23430

case convert_3
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ TopologicalSpace ?convert_1

case convert_5
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ Group ?convert_1

case convert_6
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ MulAction ?convert_1 X

case convert_7
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ ProperSMul ?convert_1 X
tactic: convert ProperSMul.isProperMap_smul_pair.isClosedMap.isClosed_range
state_before: case convert_3
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ TopologicalSpace G

case convert_7
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
inst✝ : ProperSMul G X
R : Setoid X := MulAction.orbitRel G X
π : X → Quotient R := Quotient.mk'
this : QuotientMap (Prod.map π π)
⊢ ProperSMul G X
state_after: no goals
tactic: all_goals infer_instance