[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hx : x ≠ c
hy : y ≠ c
⊢ inversion c R x ∈ perpBisector c (inversion c R y) ↔ dist x y = dist y c
[PROOFSTEP]
rw [mem_perpBisector_iff_dist_eq, dist_inversion_inversion hx hy, dist_inversion_center]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hx : x ≠ c
hy : y ≠ c
⊢ R ^ 2 / dist x c = R ^ 2 / (dist x c * dist y c) * dist x y ↔ dist x y = dist y c
[PROOFSTEP]
have hx' := dist_ne_zero.2 hx
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hx : x ≠ c
hy : y ≠ c
hx' : dist x c ≠ 0
⊢ R ^ 2 / dist x c = R ^ 2 / (dist x c * dist y c) * dist x y ↔ dist x y = dist y c
[PROOFSTEP]
have hy' := dist_ne_zero.2 hy
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hx : x ≠ c
hy : y ≠ c
hx' : dist x c ≠ 0
hy' : dist y c ≠ 0
⊢ R ^ 2 / dist x c = R ^ 2 / (dist x c * dist y c) * dist x y ↔ dist x y = dist y c
[PROOFSTEP]
field_simp [mul_assoc, mul_comm, hx, hx.symm, eq_comm]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R x ∈ perpBisector c (inversion c R y) ↔ dist x y = dist y c ∧ x ≠ c
[PROOFSTEP]
rcases eq_or_ne x c with rfl | hx
[GOAL]
case inl
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ x
⊢ inversion x R x ∈ perpBisector x (inversion x R y) ↔ dist x y = dist y x ∧ x ≠ x
[PROOFSTEP]
simp [*]
[GOAL]
case inr
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
hx : x ≠ c
⊢ inversion c R x ∈ perpBisector c (inversion c R y) ↔ dist x y = dist y c ∧ x ≠ c
[PROOFSTEP]
simp [inversion_mem_perpBisector_inversion_iff hR hx hy, hx]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R ⁻¹' ↑(perpBisector c y) = sphere (inversion c R y) (R ^ 2 / dist y c) \ {c}
[PROOFSTEP]
rw [← dist_inversion_center, ← preimage_inversion_perpBisector_inversion hR, inversion_inversion]
[GOAL]
case hR
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ R ≠ 0
[PROOFSTEP]
simp [*]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R y ≠ c
[PROOFSTEP]
simp [*]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R '' ↑(perpBisector c y) = sphere (inversion c R y) (R ^ 2 / dist y c) \ {c}
[PROOFSTEP]
rw [image_eq_preimage_of_inverse (inversion_involutive _ hR) (inversion_involutive _ hR),
  preimage_inversion_perpBisector hR hy]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R ⁻¹' sphere y (dist y c) = insert c ↑(perpBisector c (inversion c R y))
[PROOFSTEP]
ext x
[GOAL]
case h
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x✝ y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
x : P
⊢ x ∈ inversion c R ⁻¹' sphere y (dist y c) ↔ x ∈ insert c ↑(perpBisector c (inversion c R y))
[PROOFSTEP]
rcases eq_or_ne x c with rfl | hx
[GOAL]
case h.inl
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
x✝ y : P
R : ℝ
hR : R ≠ 0
x : P
hy : y ≠ x
⊢ x ∈ inversion x R ⁻¹' sphere y (dist y x) ↔ x ∈ insert x ↑(perpBisector x (inversion x R y))
[PROOFSTEP]
simp [dist_comm]
[GOAL]
case h.inr
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x✝ y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
x : P
hx : x ≠ c
⊢ x ∈ inversion c R ⁻¹' sphere y (dist y c) ↔ x ∈ insert c ↑(perpBisector c (inversion c R y))
[PROOFSTEP]
rw [mem_preimage, mem_sphere, ← inversion_mem_perpBisector_inversion_iff hR]
[GOAL]
case h.inr
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x✝ y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
x : P
hx : x ≠ c
⊢ inversion c R (inversion c R x) ∈ perpBisector c (inversion c R y) ↔ x ∈ insert c ↑(perpBisector c (inversion c R y))
[PROOFSTEP]
simp [*]
[GOAL]
case h.inr.hx
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x✝ y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
x : P
hx : x ≠ c
⊢ inversion c R x ≠ c
[PROOFSTEP]
simp [*]
[GOAL]
case h.inr.hy
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x✝ y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
x : P
hx : x ≠ c
⊢ y ≠ c
[PROOFSTEP]
simp [*]
[GOAL]
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c x y : P
R : ℝ
hR : R ≠ 0
hy : y ≠ c
⊢ inversion c R '' sphere y (dist y c) = insert c ↑(perpBisector c (inversion c R y))
[PROOFSTEP]
rw [image_eq_preimage_of_inverse (inversion_involutive _ hR) (inversion_involutive _ hR),
  preimage_inversion_sphere_dist_center hR hy]


[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedSemiring k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : 0 < c
⊢ c • a < 0 ↔ a < 0
[PROOFSTEP]
rw [← neg_neg a, smul_neg, neg_neg_iff_pos, neg_neg_iff_pos]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedSemiring k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : 0 < c
⊢ 0 < c • -a ↔ 0 < -a
[PROOFSTEP]
exact smul_pos_iff_of_pos hc
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : a < b
hc : c < 0
⊢ c • b < c • a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_lt_neg_iff]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : a < b
hc : c < 0
⊢ -c • a < -c • b
[PROOFSTEP]
exact smul_lt_smul_of_pos h (neg_pos_of_neg hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : a ≤ b
hc : c ≤ 0
⊢ c • b ≤ c • a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_le_neg_iff]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : a ≤ b
hc : c ≤ 0
⊢ -c • a ≤ -c • b
[PROOFSTEP]
exact smul_le_smul_of_nonneg h (neg_nonneg_of_nonpos hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hab : c • a = c • b
hc : c < 0
h : a ≤ b
⊢ a = b
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_inj] at hab
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hab : -c • a = -c • b
hc : c < 0
h : a ≤ b
⊢ a = b
[PROOFSTEP]
exact eq_of_smul_eq_smul_of_pos_of_le hab (neg_pos_of_neg hc) h
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : c • a < c • b
hc : c ≤ 0
⊢ b < a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_lt_neg_iff] at h
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : -c • b < -c • a
hc : c ≤ 0
⊢ b < a
[PROOFSTEP]
exact lt_of_smul_lt_smul_of_nonneg h (neg_nonneg_of_nonpos hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ c • a < c • b ↔ b < a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_lt_neg_iff]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ -c • b < -c • a ↔ b < a
[PROOFSTEP]
exact smul_lt_smul_iff_of_pos (neg_pos_of_neg hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ c • a < 0 ↔ 0 < a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_neg_iff_pos]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ 0 < -c • a ↔ 0 < a
[PROOFSTEP]
exact smul_pos_iff_of_pos (neg_pos_of_neg hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ 0 < c • a ↔ a < 0
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_pos]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ -c • a < 0 ↔ a < 0
[PROOFSTEP]
exact smul_neg_iff_of_pos (neg_pos_of_neg hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a b : k
c d : M
hab : a ≤ b
hcd : c ≤ d
⊢ a • d + b • c ≤ a • c + b • d
[PROOFSTEP]
obtain ⟨b, rfl⟩ := exists_add_of_le hab
[GOAL]
case intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : k
c d : M
hcd : c ≤ d
b : k
hab : a ≤ a + b
⊢ a • d + (a + b) • c ≤ a • c + (a + b) • d
[PROOFSTEP]
obtain ⟨d, rfl⟩ := exists_add_of_le hcd
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : k
c : M
b : k
hab : a ≤ a + b
d : M
hcd : c ≤ c + d
⊢ a • (c + d) + (a + b) • c ≤ a • c + (a + b) • (c + d)
[PROOFSTEP]
rw [smul_add, add_right_comm, smul_add, ← add_assoc, add_smul _ _ d]
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : k
c : M
b : k
hab : a ≤ a + b
d : M
hcd : c ≤ c + d
⊢ a • c + (a + b) • c + a • d ≤ a • c + (a + b) • c + (a • d + b • d)
[PROOFSTEP]
rw [le_add_iff_nonneg_right] at hab hcd
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : k
c : M
b : k
hab : 0 ≤ b
d : M
hcd : 0 ≤ d
⊢ a • c + (a + b) • c + a • d ≤ a • c + (a + b) • c + (a • d + b • d)
[PROOFSTEP]
exact add_le_add_left (le_add_of_nonneg_right <| smul_nonneg hab hcd) _
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a b : k
c d : M
hba : b ≤ a
hdc : d ≤ c
⊢ a • d + b • c ≤ a • c + b • d
[PROOFSTEP]
rw [add_comm (a • d), add_comm (a • c)]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : OrderedRing k
inst✝³ : OrderedAddCommGroup M
inst✝² : Module k M
inst✝¹ : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a b : k
c d : M
hba : b ≤ a
hdc : d ≤ c
⊢ b • c + a • d ≤ b • d + a • c
[PROOFSTEP]
exact smul_add_smul_le_smul_add_smul hba hdc
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a b : k
c d : M
hab : a < b
hcd : c < d
⊢ a • d + b • c < a • c + b • d
[PROOFSTEP]
obtain ⟨b, rfl⟩ := exists_add_of_le hab.le
[GOAL]
case intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a : k
c d : M
hcd : c < d
b : k
hab : a < a + b
⊢ a • d + (a + b) • c < a • c + (a + b) • d
[PROOFSTEP]
obtain ⟨d, rfl⟩ := exists_add_of_le hcd.le
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a : k
c : M
b : k
hab : a < a + b
d : M
hcd : c < c + d
⊢ a • (c + d) + (a + b) • c < a • c + (a + b) • (c + d)
[PROOFSTEP]
rw [smul_add, add_right_comm, smul_add, ← add_assoc, add_smul _ _ d]
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a : k
c : M
b : k
hab : a < a + b
d : M
hcd : c < c + d
⊢ a • c + (a + b) • c + a • d < a • c + (a + b) • c + (a • d + b • d)
[PROOFSTEP]
rw [lt_add_iff_pos_right] at hab hcd
[GOAL]
case intro.intro
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a : k
c : M
b : k
hab : 0 < b
d : M
hcd : 0 < d
⊢ a • c + (a + b) • c + a • d < a • c + (a + b) • c + (a • d + b • d)
[PROOFSTEP]
exact add_lt_add_left (lt_add_of_pos_right _ <| smul_pos hab hcd) _
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a b : k
c d : M
hba : b < a
hdc : d < c
⊢ a • d + b • c < a • c + b • d
[PROOFSTEP]
rw [add_comm (a • d), add_comm (a • c)]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : OrderedRing k
inst✝⁴ : OrderedAddCommGroup M
inst✝³ : Module k M
inst✝² : OrderedSMul k M
a✝ b✝ : M
c✝ : k
inst✝¹ : CovariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass M M (fun x x_1 => x + x_1) fun x x_1 => x < x_1
a b : k
c d : M
hba : b < a
hdc : d < c
⊢ b • c + a • d < b • d + a • c
[PROOFSTEP]
exact smul_add_smul_lt_smul_add_smul hba hdc
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ c • a ≤ c • b ↔ b ≤ a
[PROOFSTEP]
rw [← neg_neg c, neg_smul, neg_smul (-c), neg_le_neg_iff]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
hc : c < 0
⊢ -c • b ≤ -c • a ↔ b ≤ a
[PROOFSTEP]
exact smul_le_smul_iff_of_pos (neg_pos_of_neg hc)
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : c < 0
⊢ c⁻¹ • a ≤ b ↔ c • b ≤ a
[PROOFSTEP]
rw [← smul_le_smul_iff_of_neg h, smul_inv_smul₀ h.ne]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : c < 0
⊢ c⁻¹ • a < b ↔ c • b < a
[PROOFSTEP]
rw [← smul_lt_smul_iff_of_neg h, smul_inv_smul₀ h.ne]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : c < 0
⊢ a ≤ c⁻¹ • b ↔ b ≤ c • a
[PROOFSTEP]
rw [← smul_le_smul_iff_of_neg h, smul_inv_smul₀ h.ne]
[GOAL]
k : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : LinearOrderedField k
inst✝² : OrderedAddCommGroup M
inst✝¹ : Module k M
inst✝ : OrderedSMul k M
a b : M
c : k
h : c < 0
⊢ a < c⁻¹ • b ↔ b < c • a
[PROOFSTEP]
rw [← smul_lt_smul_iff_of_neg h, smul_inv_smul₀ h.ne]


[GOAL]
G : Type u
inst✝³ : Group G
inst✝² : Fintype (ConjClasses G)
inst✝¹ : Fintype G
inst✝ : (x : ConjClasses G) → Fintype ↑(carrier x)
⊢ ∑ x : ConjClasses G, Finset.card (Set.toFinset (carrier x)) = Fintype.card G
[PROOFSTEP]
suffices : (Σ x : ConjClasses G, x.carrier) ≃ G
[GOAL]
G : Type u
inst✝³ : Group G
inst✝² : Fintype (ConjClasses G)
inst✝¹ : Fintype G
inst✝ : (x : ConjClasses G) → Fintype ↑(carrier x)
this : (x : ConjClasses G) × ↑(carrier x) ≃ G
⊢ ∑ x : ConjClasses G, Finset.card (Set.toFinset (carrier x)) = Fintype.card G
[PROOFSTEP]
simpa using (Fintype.card_congr this)
[GOAL]
case this
G : Type u
inst✝³ : Group G
inst✝² : Fintype (ConjClasses G)
inst✝¹ : Fintype G
inst✝ : (x : ConjClasses G) → Fintype ↑(carrier x)
⊢ (x : ConjClasses G) × ↑(carrier x) ≃ G
[PROOFSTEP]
simpa [carrier_eq_preimage_mk] using Equiv.sigmaFiberEquiv ConjClasses.mk
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
⊢ ∑ᶠ (x : ConjClasses G), Set.ncard (carrier x) = Nat.card G
[PROOFSTEP]
classical
cases nonempty_fintype G
rw [Nat.card_eq_fintype_card, ← sum_conjClasses_card_eq_card, finsum_eq_sum_of_fintype]
simp [Set.ncard_eq_toFinset_card']
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
⊢ ∑ᶠ (x : ConjClasses G), Set.ncard (carrier x) = Nat.card G
[PROOFSTEP]
cases nonempty_fintype G
[GOAL]
case intro
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∑ᶠ (x : ConjClasses G), Set.ncard (carrier x) = Nat.card G
[PROOFSTEP]
rw [Nat.card_eq_fintype_card, ← sum_conjClasses_card_eq_card, finsum_eq_sum_of_fintype]
[GOAL]
case intro
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∑ i : ConjClasses G, Set.ncard (carrier i) = ∑ x : ConjClasses G, Finset.card (Set.toFinset (carrier x))
[PROOFSTEP]
simp [Set.ncard_eq_toFinset_card']
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
⊢ Nat.card { x // x ∈ Subgroup.center G } + ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Nat.card ↑(carrier x) =
    Nat.card G
[PROOFSTEP]
classical
cases nonempty_fintype G
rw [@Nat.card_eq_fintype_card G, ← sum_conjClasses_card_eq_card, ←
  Finset.sum_sdiff (ConjClasses.noncenter G).toFinset.subset_univ]
simp only [Nat.card_eq_fintype_card, Set.toFinset_card]
congr 1
swap
· convert finsum_cond_eq_sum_of_cond_iff _ _
  simp [Set.mem_toFinset]
calc
  Fintype.card (Subgroup.center G) = Fintype.card ((noncenter G)ᶜ : Set _) := Fintype.card_congr ((mk_bijOn G).equiv _)
  _ = Finset.card (Finset.univ \ (noncenter G).toFinset) := by
    rw [← Set.toFinset_card, Set.toFinset_compl, Finset.compl_eq_univ_sdiff]
  _ = _ := ?_
rw [Finset.card_eq_sum_ones]
refine Finset.sum_congr rfl ?_
rintro ⟨g⟩ hg
simp only [noncenter, Set.not_subsingleton_iff, Set.toFinset_setOf, Finset.mem_univ, true_and, forall_true_left,
  Finset.mem_sdiff, Finset.mem_filter, Set.not_nontrivial_iff] at hg
rw [eq_comm, ← Set.toFinset_card, Finset.card_eq_one]
exact ⟨g, Finset.coe_injective <| by simpa using hg.eq_singleton_of_mem mem_carrier_mk⟩
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
⊢ Nat.card { x // x ∈ Subgroup.center G } + ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Nat.card ↑(carrier x) =
    Nat.card G
[PROOFSTEP]
cases nonempty_fintype G
[GOAL]
case intro
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Nat.card { x // x ∈ Subgroup.center G } + ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Nat.card ↑(carrier x) =
    Nat.card G
[PROOFSTEP]
rw [@Nat.card_eq_fintype_card G, ← sum_conjClasses_card_eq_card, ←
  Finset.sum_sdiff (ConjClasses.noncenter G).toFinset.subset_univ]
[GOAL]
case intro
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Nat.card { x // x ∈ Subgroup.center G } + ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Nat.card ↑(carrier x) =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Finset.card (Set.toFinset (carrier x)) +
      ∑ x in Set.toFinset (noncenter G), Finset.card (Set.toFinset (carrier x))
[PROOFSTEP]
simp only [Nat.card_eq_fintype_card, Set.toFinset_card]
[GOAL]
case intro
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Fintype.card { x // x ∈ Subgroup.center G } +
      ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Fintype.card ↑(carrier x) =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Fintype.card ↑(carrier x) +
      ∑ x in Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
congr 1
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Fintype.card { x // x ∈ Subgroup.center G } =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Fintype.card ↑(carrier x) =
    ∑ x in Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
swap
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Fintype.card ↑(carrier x) =
    ∑ x in Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
convert finsum_cond_eq_sum_of_cond_iff _ _
[GOAL]
case intro.e_a.convert_7
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∀ {x : ConjClasses G}, Fintype.card ↑(carrier x) ≠ 0 → (x ∈ noncenter G ↔ x ∈ Set.toFinset (noncenter G))
[PROOFSTEP]
simp [Set.mem_toFinset]
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Fintype.card { x // x ∈ Subgroup.center G } =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
calc
  Fintype.card (Subgroup.center G) = Fintype.card ((noncenter G)ᶜ : Set _) := Fintype.card_congr ((mk_bijOn G).equiv _)
  _ = Finset.card (Finset.univ \ (noncenter G).toFinset) := by
    rw [← Set.toFinset_card, Set.toFinset_compl, Finset.compl_eq_univ_sdiff]
  _ = _ := ?_
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Fintype.card ↑(noncenter G)ᶜ = Finset.card (Finset.univ \ Set.toFinset (noncenter G))
[PROOFSTEP]
rw [← Set.toFinset_card, Set.toFinset_compl, Finset.compl_eq_univ_sdiff]
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ Finset.card (Finset.univ \ Set.toFinset (noncenter G)) =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
rw [Finset.card_eq_sum_ones]
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∑ x in Finset.univ \ Set.toFinset (noncenter G), 1 =
    ∑ x in Finset.univ \ Set.toFinset (noncenter G), Fintype.card ↑(carrier x)
[PROOFSTEP]
refine Finset.sum_congr rfl ?_
[GOAL]
case intro.e_a
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
⊢ ∀ (x : ConjClasses G), x ∈ Finset.univ \ Set.toFinset (noncenter G) → 1 = Fintype.card ↑(carrier x)
[PROOFSTEP]
rintro ⟨g⟩ hg
[GOAL]
case intro.e_a.mk
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
x✝ : ConjClasses G
g : G
hg : Quot.mk Setoid.r g ∈ Finset.univ \ Set.toFinset (noncenter G)
⊢ 1 = Fintype.card ↑(carrier (Quot.mk Setoid.r g))
[PROOFSTEP]
simp only [noncenter, Set.not_subsingleton_iff, Set.toFinset_setOf, Finset.mem_univ, true_and, forall_true_left,
  Finset.mem_sdiff, Finset.mem_filter, Set.not_nontrivial_iff] at hg
[GOAL]
case intro.e_a.mk
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
x✝ : ConjClasses G
g : G
hg : Set.Subsingleton (carrier (Quot.mk Setoid.r g))
⊢ 1 = Fintype.card ↑(carrier (Quot.mk Setoid.r g))
[PROOFSTEP]
rw [eq_comm, ← Set.toFinset_card, Finset.card_eq_one]
[GOAL]
case intro.e_a.mk
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
x✝ : ConjClasses G
g : G
hg : Set.Subsingleton (carrier (Quot.mk Setoid.r g))
⊢ ∃ a, Set.toFinset (carrier (Quot.mk Setoid.r g)) = {a}
[PROOFSTEP]
exact ⟨g, Finset.coe_injective <| by simpa using hg.eq_singleton_of_mem mem_carrier_mk⟩
[GOAL]
G : Type u
inst✝¹ : Group G
inst✝ : Finite G
val✝ : Fintype G
x✝ : ConjClasses G
g : G
hg : Set.Subsingleton (carrier (Quot.mk Setoid.r g))
⊢ ↑(Set.toFinset (carrier (Quot.mk Setoid.r g))) = ↑{g}
[PROOFSTEP]
simpa using hg.eq_singleton_of_mem mem_carrier_mk
[GOAL]
G✝ : Type u
inst✝⁵ : Group G✝
G : Type u_1
inst✝⁴ : Group G
inst✝³ : (x : ConjClasses G) → Fintype ↑(carrier x)
inst✝² : Fintype G
inst✝¹ : Fintype { x // x ∈ Subgroup.center G }
inst✝ : Fintype ↑(noncenter G)
⊢ Fintype.card { x // x ∈ Subgroup.center G } +
      ∑ x in Set.toFinset (noncenter G), Finset.card (Set.toFinset (carrier x)) =
    Fintype.card G
[PROOFSTEP]
convert Group.nat_card_center_add_sum_card_noncenter_eq_card G using 2
[GOAL]
case h.e'_2.h.e'_5
G✝ : Type u
inst✝⁵ : Group G✝
G : Type u_1
inst✝⁴ : Group G
inst✝³ : (x : ConjClasses G) → Fintype ↑(carrier x)
inst✝² : Fintype G
inst✝¹ : Fintype { x // x ∈ Subgroup.center G }
inst✝ : Fintype ↑(noncenter G)
⊢ Fintype.card { x // x ∈ Subgroup.center G } = Nat.card { x // x ∈ Subgroup.center G }
[PROOFSTEP]
simp
[GOAL]
case h.e'_2.h.e'_6
G✝ : Type u
inst✝⁵ : Group G✝
G : Type u_1
inst✝⁴ : Group G
inst✝³ : (x : ConjClasses G) → Fintype ↑(carrier x)
inst✝² : Fintype G
inst✝¹ : Fintype { x // x ∈ Subgroup.center G }
inst✝ : Fintype ↑(noncenter G)
⊢ ∑ x in Set.toFinset (noncenter G), Finset.card (Set.toFinset (carrier x)) =
    ∑ᶠ (x : ConjClasses G) (_ : x ∈ noncenter G), Nat.card ↑(carrier x)
[PROOFSTEP]
rw [← finsum_set_coe_eq_finsum_mem (noncenter G), finsum_eq_sum_of_fintype, ← Finset.sum_set_coe]
[GOAL]
case h.e'_2.h.e'_6
G✝ : Type u
inst✝⁵ : Group G✝
G : Type u_1
inst✝⁴ : Group G
inst✝³ : (x : ConjClasses G) → Fintype ↑(carrier x)
inst✝² : Fintype G
inst✝¹ : Fintype { x // x ∈ Subgroup.center G }
inst✝ : Fintype ↑(noncenter G)
⊢ ∑ i : ↑(noncenter G), Finset.card (Set.toFinset (carrier ↑i)) = ∑ i : ↑(noncenter G), Nat.card ↑(carrier ↑i)
[PROOFSTEP]
simp
[GOAL]
case h.e'_3
G✝ : Type u
inst✝⁵ : Group G✝
G : Type u_1
inst✝⁴ : Group G
inst✝³ : (x : ConjClasses G) → Fintype ↑(carrier x)
inst✝² : Fintype G
inst✝¹ : Fintype { x // x ∈ Subgroup.center G }
inst✝ : Fintype ↑(noncenter G)
⊢ Fintype.card G = Nat.card G
[PROOFSTEP]
simp


[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
⊢ IsGenericPoint x S ↔ ∀ (y : α), x ⤳ y ↔ y ∈ S
[PROOFSTEP]
simp only [specializes_iff_mem_closure, IsGenericPoint, Set.ext_iff]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
h : IsGenericPoint x S
hU : IsOpen U
⊢ Disjoint S U ↔ ¬x ∈ U
[PROOFSTEP]
rw [h.mem_open_set_iff hU, ← not_disjoint_iff_nonempty_inter, Classical.not_not]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
h : IsGenericPoint x S
hZ : IsClosed Z
⊢ x ∈ Z ↔ S ⊆ Z
[PROOFSTEP]
rw [← h.def, hZ.closure_subset_iff, singleton_subset_iff]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
h : IsGenericPoint x S
f : α → β
hf : Continuous f
⊢ IsGenericPoint (f x) (closure (f '' S))
[PROOFSTEP]
rw [isGenericPoint_def, ← h.def, ← image_singleton, closure_image_closure hf]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
hS : IsClosed S
hxS : x ∈ S
⊢ IsGenericPoint x S ↔ ∀ (Z : Set α), IsClosed Z → x ∈ Z → S ⊆ Z
[PROOFSTEP]
have : closure { x } ⊆ S := closure_minimal (singleton_subset_iff.2 hxS) hS
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
hS : IsClosed S
hxS : x ∈ S
this : closure {x} ⊆ S
⊢ IsGenericPoint x S ↔ ∀ (Z : Set α), IsClosed Z → x ∈ Z → S ⊆ Z
[PROOFSTEP]
simp_rw [IsGenericPoint, subset_antisymm_iff, this, true_and_iff, closure, subset_sInter_iff, mem_setOf_eq, and_imp,
  singleton_subset_iff]
[GOAL]
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : IrreducibleSpace α
⊢ IsGenericPoint (genericPoint α) ⊤
[PROOFSTEP]
simpa using (IrreducibleSpace.isIrreducible_univ α).genericPoint_spec
[GOAL]
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : IrreducibleSpace α
x : α
⊢ x ∈ closure univ
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : T0Space α
x : α
⊢ IsGenericPoint x (closure (closure {x}))
[PROOFSTEP]
rw [closure_closure]
[GOAL]
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : T0Space α
x : α
⊢ IsGenericPoint x (closure {x})
[PROOFSTEP]
exact isGenericPoint_closure
[GOAL]
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : T0Space α
⊢ ∀ {a b : ↑{s | IsIrreducible s ∧ IsClosed s}},
    ↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
              invFun := fun x =>
                { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
              left_inv :=
                (_ :
                  ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                    (fun x =>
                          { val := closure {x},
                            property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                        ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                      s),
              right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
          a ≤
        ↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
              invFun := fun x =>
                { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
              left_inv :=
                (_ :
                  ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                    (fun x =>
                          { val := closure {x},
                            property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                        ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                      s),
              right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
          b ↔
      a ≤ b
[PROOFSTEP]
rintro ⟨s, hs⟩ ⟨t, ht⟩
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : T0Space α
s : Set α
hs : s ∈ {s | IsIrreducible s ∧ IsClosed s}
t : Set α
ht : t ∈ {s | IsIrreducible s ∧ IsClosed s}
⊢ ↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
            invFun := fun x =>
              { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
            left_inv :=
              (_ :
                ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                  (fun x =>
                        { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                      ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                    s),
            right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
        { val := s, property := hs } ≤
      ↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
            invFun := fun x =>
              { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
            left_inv :=
              (_ :
                ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                  (fun x =>
                        { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                      ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                    s),
            right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
        { val := t, property := ht } ↔
    { val := s, property := hs } ≤ { val := t, property := ht }
[PROOFSTEP]
refine specializes_iff_closure_subset.trans ?_
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : QuasiSober α
inst✝ : T0Space α
s : Set α
hs : s ∈ {s | IsIrreducible s ∧ IsClosed s}
t : Set α
ht : t ∈ {s | IsIrreducible s ∧ IsClosed s}
⊢ closure
        {↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
                invFun := fun x =>
                  { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
                left_inv :=
                  (_ :
                    ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                      (fun x =>
                            { val := closure {x},
                              property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                          ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                        s),
                right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
            { val := s, property := hs }} ⊆
      closure
        {↑{ toFun := fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s),
                invFun := fun x =>
                  { val := closure {x}, property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) },
                left_inv :=
                  (_ :
                    ∀ (s : ↑{s | IsIrreducible s ∧ IsClosed s}),
                      (fun x =>
                            { val := closure {x},
                              property := (_ : IsIrreducible (closure {x}) ∧ IsClosed (closure {x})) })
                          ((fun s => IsIrreducible.genericPoint (_ : IsIrreducible ↑s)) s) =
                        s),
                right_inv := (_ : ∀ (x : α), IsIrreducible.genericPoint (_ : IsIrreducible (closure {x})) = x) }
            { val := t, property := ht }} ↔
    { val := s, property := hs } ≤ { val := t, property := ht }
[PROOFSTEP]
simp [hs.2.closure_eq, ht.2.closure_eq]
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
have hS'' := hS.image f hf.continuous.continuousOn
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
obtain ⟨x, hx⟩ := QuasiSober.sober hS'' (hf.isClosedMap _ hS')
[GOAL]
case intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
x : β
hx : IsGenericPoint x (f '' S✝)
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
obtain ⟨y, -, rfl⟩ := hx.mem
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
y : α
hx : IsGenericPoint (f y) (f '' S✝)
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
use y
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
y : α
hx : IsGenericPoint (f y) (f '' S✝)
⊢ IsGenericPoint y S✝
[PROOFSTEP]
apply image_injective.mpr hf.inj
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : ClosedEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
y : α
hx : IsGenericPoint (f y) (f '' S✝)
⊢ f '' closure {y} = f '' S✝
[PROOFSTEP]
rw [← hx.def, ← hf.closure_image_eq, image_singleton]
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
have hS'' := hS.image f hf.continuous.continuousOn
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
obtain ⟨x, hx⟩ := QuasiSober.sober hS''.closure isClosed_closure
[GOAL]
case intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
S✝ : Set α
hS : IsIrreducible S✝
hS' : IsClosed S✝
hS'' : IsIrreducible (f '' S✝)
x : β
hx : IsGenericPoint x (closure (f '' S✝))
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
obtain ⟨T, hT, rfl⟩ := hf.toInducing.isClosed_iff.mp hS'
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (f '' (f ⁻¹' T))
hx : IsGenericPoint x (closure (f '' (f ⁻¹' T)))
⊢ ∃ x, IsGenericPoint x (f ⁻¹' T)
[PROOFSTEP]
rw [image_preimage_eq_inter_range] at hx hS''
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
⊢ ∃ x, IsGenericPoint x (f ⁻¹' T)
[PROOFSTEP]
have hxT : x ∈ T := by
  rw [← hT.closure_eq]
  exact closure_mono (inter_subset_left _ _) hx.mem
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
⊢ x ∈ T
[PROOFSTEP]
rw [← hT.closure_eq]
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
⊢ x ∈ closure T
[PROOFSTEP]
exact closure_mono (inter_subset_left _ _) hx.mem
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
hxT : x ∈ T
⊢ ∃ x, IsGenericPoint x (f ⁻¹' T)
[PROOFSTEP]
obtain ⟨y, rfl⟩ : x ∈ range f := by
  rw [hx.mem_open_set_iff hf.open_range]
  refine' Nonempty.mono _ hS''.1
  simpa using subset_closure
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
hxT : x ∈ T
⊢ x ∈ range f
[PROOFSTEP]
rw [hx.mem_open_set_iff hf.open_range]
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
hxT : x ∈ T
⊢ Set.Nonempty (closure (T ∩ range f) ∩ range f)
[PROOFSTEP]
refine' Nonempty.mono _ hS''.1
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
x : β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
hx : IsGenericPoint x (closure (T ∩ range f))
hxT : x ∈ T
⊢ T ∩ range f ⊆ closure (T ∩ range f) ∩ range f
[PROOFSTEP]
simpa using subset_closure
[GOAL]
case intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
⊢ ∃ x, IsGenericPoint x (f ⁻¹' T)
[PROOFSTEP]
use y
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
⊢ IsGenericPoint y (f ⁻¹' T)
[PROOFSTEP]
change _ = _
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
⊢ closure {y} = f ⁻¹' T
[PROOFSTEP]
rw [hf.toEmbedding.closure_eq_preimage_closure_image, image_singleton, show _ = _ from hx]
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
⊢ f ⁻¹' closure (T ∩ range f) = f ⁻¹' T
[PROOFSTEP]
apply image_injective.mpr hf.inj
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
⊢ f '' (f ⁻¹' closure (T ∩ range f)) = f '' (f ⁻¹' T)
[PROOFSTEP]
ext z
[GOAL]
case h.a.h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
z : β
⊢ z ∈ f '' (f ⁻¹' closure (T ∩ range f)) ↔ z ∈ f '' (f ⁻¹' T)
[PROOFSTEP]
simp only [image_preimage_eq_inter_range, mem_inter_iff, and_congr_left_iff]
[GOAL]
case h.a.h
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
f : α → β
hf : OpenEmbedding f
inst✝ : QuasiSober β
T : Set β
hT : IsClosed T
hS : IsIrreducible (f ⁻¹' T)
hS' : IsClosed (f ⁻¹' T)
hS'' : IsIrreducible (T ∩ range f)
y : α
hx : IsGenericPoint (f y) (closure (T ∩ range f))
hxT : f y ∈ T
z : β
⊢ z ∈ range f → (z ∈ closure (T ∩ range f) ↔ z ∈ T)
[PROOFSTEP]
exact fun hy => ⟨fun h => hT.closure_eq ▸ closure_mono (inter_subset_left _ _) h, fun h => subset_closure ⟨h, hy⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
⊢ QuasiSober α
[PROOFSTEP]
rw [quasiSober_iff]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
⊢ ∀ {S : Set α}, IsIrreducible S → IsClosed S → ∃ x, IsGenericPoint x S
[PROOFSTEP]
intro t h h'
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
obtain ⟨x, hx⟩ := h.1
[GOAL]
case intro
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
obtain ⟨U, hU, hU'⟩ : x ∈ ⋃₀ S := by
  rw [hS'']
  trivial
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
⊢ x ∈ ⋃₀ S
[PROOFSTEP]
rw [hS'']
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
⊢ x ∈ ⊤
[PROOFSTEP]
trivial
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
haveI : QuasiSober U := hS' ⟨U, hU⟩
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this : QuasiSober ↑U
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
have H : IsPreirreducible ((↑) ⁻¹' t : Set U) := h.2.preimage (hS ⟨U, hU⟩).openEmbedding_subtype_val
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this : QuasiSober ↑U
H : IsPreirreducible (Subtype.val ⁻¹' t)
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
replace H : IsIrreducible ((↑) ⁻¹' t : Set U) := ⟨⟨⟨x, hU'⟩, by simpa using hx⟩, H⟩
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this : QuasiSober ↑U
H : IsPreirreducible (Subtype.val ⁻¹' t)
⊢ { val := x, property := hU' } ∈ Subtype.val ⁻¹' t
[PROOFSTEP]
simpa using hx
[GOAL]
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
⊢ ∃ x, IsGenericPoint x t
[PROOFSTEP]
use H.genericPoint
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
⊢ IsGenericPoint (↑(IsIrreducible.genericPoint H)) t
[PROOFSTEP]
have := continuous_subtype_val.closure_preimage_subset _ H.genericPoint_spec.mem
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' closure t
⊢ IsGenericPoint (↑(IsIrreducible.genericPoint H)) t
[PROOFSTEP]
rw [h'.closure_eq] at this
[GOAL]
case h
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ IsGenericPoint (↑(IsIrreducible.genericPoint H)) t
[PROOFSTEP]
apply le_antisymm
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ closure {↑(IsIrreducible.genericPoint H)} ≤ t
[PROOFSTEP]
apply h'.closure_subset_iff.mpr
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ {↑(IsIrreducible.genericPoint H)} ⊆ t
[PROOFSTEP]
simpa using this
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ t ≤ closure {↑(IsIrreducible.genericPoint H)}
[PROOFSTEP]
rw [← image_singleton, ← closure_image_closure continuous_subtype_val, H.genericPoint_spec.def]
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ t ≤ closure (Subtype.val '' closure (Subtype.val ⁻¹' t))
[PROOFSTEP]
refine' (subset_closure_inter_of_isPreirreducible_of_isOpen h.2 (hS ⟨U, hU⟩) ⟨x, hx, hU'⟩).trans (closure_mono _)
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ t ∩ ↑{ val := U, property := hU } ⊆ Subtype.val '' closure (Subtype.val ⁻¹' t)
[PROOFSTEP]
rw [← Subtype.image_preimage_coe]
[GOAL]
case h.a
α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
S : Set (Set α)
hS : ∀ (s : ↑S), IsOpen ↑s
hS' : ∀ (s : ↑S), QuasiSober ↑↑s
hS'' : ⋃₀ S = ⊤
t : Set α
h : IsIrreducible t
h' : IsClosed t
x : α
hx : x ∈ t
U : Set α
hU : U ∈ S
hU' : x ∈ U
this✝ : QuasiSober ↑U
H : IsIrreducible (Subtype.val ⁻¹' t)
this : IsIrreducible.genericPoint H ∈ Subtype.val ⁻¹' t
⊢ Subtype.val '' (Subtype.val ⁻¹' t) ⊆ Subtype.val '' closure (Subtype.val ⁻¹' t)
[PROOFSTEP]
exact Set.image_subset _ subset_closure
[GOAL]
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space α
S✝ : Set α
h : IsIrreducible S✝
x✝ : IsClosed S✝
⊢ ∃ x, IsGenericPoint x S✝
[PROOFSTEP]
obtain ⟨x, rfl⟩ := isIrreducible_iff_singleton.mp h
[GOAL]
case intro
α : Type u_1
β : Type u_2
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : T2Space α
x : α
h : IsIrreducible {x}
x✝ : IsClosed {x}
⊢ ∃ x_1, IsGenericPoint x_1 {x}
[PROOFSTEP]
exact ⟨x, closure_singleton⟩


[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝ : OpenNhds x
⊢ x✝ ≤ x✝
[PROOFSTEP]
dsimp [LE.le]
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝ : OpenNhds x
⊢ x✝.obj ≤ x✝.obj
[PROOFSTEP]
exact le_rfl
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝² x✝¹ x✝ : OpenNhds x
⊢ x✝² ≤ x✝¹ → x✝¹ ≤ x✝ → x✝² ≤ x✝
[PROOFSTEP]
dsimp [LE.le]
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝² x✝¹ x✝ : OpenNhds x
⊢ x✝².obj ≤ x✝¹.obj → x✝¹.obj ≤ x✝.obj → x✝².obj ≤ x✝.obj
[PROOFSTEP]
exact le_trans
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝ : OpenNhds x
⊢ x✝ ≤ ⊤
[PROOFSTEP]
dsimp [LE.le]
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
x✝ : OpenNhds x
⊢ x✝.obj ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : (OpenNhds x)ᵒᵖ
⊢ (map (𝟙 X) x).obj U.unop = U.unop
[PROOFSTEP]
simp
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : (OpenNhds x)ᵒᵖ
⊢ (map (𝟙 X) x).op.obj U = U
[PROOFSTEP]
simp
[GOAL]
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (inclusion (↑f x) ⋙ Opens.map f).obj U ≅ (map f x ⋙ inclusion x).obj U
[PROOFSTEP]
constructor
[GOAL]
case hom_inv_id
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ autoParam (?hom ≫ ?inv = 𝟙 ((inclusion (↑f x) ⋙ Opens.map f).obj U)) _auto✝
case inv_hom_id
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ autoParam (?inv ≫ ?hom = 𝟙 ((map f x ⋙ inclusion x).obj U)) _auto✝
case hom
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (inclusion (↑f x) ⋙ Opens.map f).obj U ⟶ (map f x ⋙ inclusion x).obj U
case inv
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (map f x ⋙ inclusion x).obj U ⟶ (inclusion (↑f x) ⋙ Opens.map f).obj U
[PROOFSTEP]
rfl
[GOAL]
case inv_hom_id
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ autoParam (?inv ≫ ?hom = 𝟙 ((map f x ⋙ inclusion x).obj U)) _auto✝
case hom
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (inclusion (↑f x) ⋙ Opens.map f).obj U ⟶ (map f x ⋙ inclusion x).obj U
case inv
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (map f x ⋙ inclusion x).obj U ⟶ (inclusion (↑f x) ⋙ Opens.map f).obj U
[PROOFSTEP]
rfl
[GOAL]
case hom
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (inclusion (↑f x) ⋙ Opens.map f).obj U ⟶ (map f x ⋙ inclusion x).obj U
case inv
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (map f x ⋙ inclusion x).obj U ⟶ (inclusion (↑f x) ⋙ Opens.map f).obj U
[PROOFSTEP]
exact 𝟙 _
[GOAL]
case inv
X Y : TopCat
f : X ⟶ Y
x : ↑X
U : OpenNhds (↑f x)
⊢ (map f x ⋙ inclusion x).obj U ⟶ (inclusion (↑f x) ⋙ Opens.map f).obj U
[PROOFSTEP]
exact 𝟙 _


[GOAL]
⊢ StableUnderComposition fun {R S} [CommRing R] [CommRing S] f => IsIntegral f
[PROOFSTEP]
introv R hf hg
[GOAL]
R S T : Type u_1
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
f : R →+* S
g : S →+* T
hf : IsIntegral f
hg : IsIntegral g
⊢ IsIntegral (comp g f)
[PROOFSTEP]
exact RingHom.isIntegral_trans _ _ hf hg
[GOAL]
⊢ RespectsIso fun {R S} [CommRing R] [CommRing S] f => IsIntegral f
[PROOFSTEP]
apply isIntegral_stableUnderComposition.respectsIso
[GOAL]
⊢ ∀ {R S : Type u_1} [inst : CommRing R] [inst_1 : CommRing S] (e : R ≃+* S), IsIntegral (RingEquiv.toRingHom e)
[PROOFSTEP]
introv x
[GOAL]
R S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
e : R ≃+* S
x : S
⊢ IsIntegralElem (RingEquiv.toRingHom e) x
[PROOFSTEP]
rw [← e.apply_symm_apply x]
[GOAL]
R S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
e : R ≃+* S
x : S
⊢ IsIntegralElem (RingEquiv.toRingHom e) (↑e (↑(RingEquiv.symm e) x))
[PROOFSTEP]
apply RingHom.is_integral_map
[GOAL]
⊢ StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] f => IsIntegral f
[PROOFSTEP]
refine' StableUnderBaseChange.mk _ isIntegral_respectsIso _
[GOAL]
⊢ ∀ ⦃R S T : Type u_1⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], IsIntegral (algebraMap R T) → IsIntegral includeLeftRingHom
[PROOFSTEP]
introv h x
[GOAL]
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x : S ⊗[R] T
⊢ IsIntegralElem includeLeftRingHom x
[PROOFSTEP]
refine' TensorProduct.induction_on x _ _ _
[GOAL]
case refine'_1
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x : S ⊗[R] T
⊢ IsIntegralElem includeLeftRingHom 0
[PROOFSTEP]
apply isIntegral_zero
[GOAL]
case refine'_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x : S ⊗[R] T
⊢ ∀ (x : S) (y : T), IsIntegralElem includeLeftRingHom (x ⊗ₜ[R] y)
[PROOFSTEP]
intro x y
[GOAL]
case refine'_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x✝ : S ⊗[R] T
x : S
y : T
⊢ IsIntegralElem includeLeftRingHom (x ⊗ₜ[R] y)
[PROOFSTEP]
exact IsIntegral.tmul x (h y)
[GOAL]
case refine'_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x : S ⊗[R] T
⊢ ∀ (x y : S ⊗[R] T),
    IsIntegralElem includeLeftRingHom x →
      IsIntegralElem includeLeftRingHom y → IsIntegralElem includeLeftRingHom (x + y)
[PROOFSTEP]
intro x y hx hy
[GOAL]
case refine'_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : IsIntegral (algebraMap R T)
x✝ x y : S ⊗[R] T
hx : IsIntegralElem includeLeftRingHom x
hy : IsIntegralElem includeLeftRingHom y
⊢ IsIntegralElem includeLeftRingHom (x + y)
[PROOFSTEP]
exact isIntegral_add hx hy