Theorem: IsClosed.mk_lt_continuum
File: Mathlib/Topology/Separation/NotNormal.lean

tactic: by_contra! h
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
⊢ #↑s < 𝔠
state_after: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
⊢ False

tactic: rcases exists_countable_dense X with ⟨t, htc, htd⟩
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
⊢ False
state_after: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
⊢ False

tactic: haveI := htc.to_subtype
state_before: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
⊢ False
state_after: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ False

tactic: refine (Cardinal.cantor 𝔠).not_le ?_
state_before: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ False
state_after: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ 𝔠 ≤ 𝔠

tactic: calc
  2 ^ 𝔠 ≤ #C(s, ℝ) := by
    rw [(ContinuousMap.equivFnOfDiscrete _ _).cardinal_eq, mk_arrow, mk_real, lift_continuum,
      lift_uzero]
    exact (power_le_power_left two_ne_zero h).trans (power_le_power_right (nat_lt_continuum 2).le)
  _ ≤ #C(X, ℝ) := by
    choose f hf using ContinuousMap.exists_restrict_eq (Y := ℝ) hs
    have hfi : Injective f := LeftInverse.injective hf
    exact mk_le_of_injective hfi
  _ ≤ #C(t, ℝ) := mk_le_of_injective <| ContinuousMap.injective_restrict htd
  _ ≤ #(t → ℝ) := mk_le_of_injective DFunLike.coe_injective
  _ ≤ 𝔠 := by
    rw [mk_arrow, mk_real, lift_uzero, lift_continuum, continuum, ← power_mul]
    exact power_le_power_left two_ne_zero mk_le_aleph0
state_before: case intro.intro
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ 𝔠 ≤ 𝔠
state_after: no goals

tactic: rw [(ContinuousMap.equivFnOfDiscrete _ _).cardinal_eq, mk_arrow, mk_real, lift_continuum,
  lift_uzero]
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ 𝔠 ≤ #C(↑s, ℝ)
state_after: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ 𝔠 ≤ 𝔠 ^ #↑s

tactic: exact (power_le_power_left two_ne_zero h).trans (power_le_power_right (nat_lt_continuum 2).le)
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ 𝔠 ≤ 𝔠 ^ #↑s
state_after: no goals

tactic: choose f hf using ContinuousMap.exists_restrict_eq (Y := ℝ) hs
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ #C(↑s, ℝ) ≤ #C(X, ℝ)
state_after: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
f : C(↑s, ℝ) → C(X, ℝ)
hf : ∀ (f_1 : C(↑s, ℝ)), ContinuousMap.restrict s (f f_1) = f_1
⊢ #C(↑s, ℝ) ≤ #C(X, ℝ)

tactic: have hfi : Injective f := LeftInverse.injective hf
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
f : C(↑s, ℝ) → C(X, ℝ)
hf : ∀ (f_1 : C(↑s, ℝ)), ContinuousMap.restrict s (f f_1) = f_1
⊢ #C(↑s, ℝ) ≤ #C(X, ℝ)
state_after: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
f : C(↑s, ℝ) → C(X, ℝ)
hf : ∀ (f_1 : C(↑s, ℝ)), ContinuousMap.restrict s (f f_1) = f_1
hfi : Injective f
⊢ #C(↑s, ℝ) ≤ #C(X, ℝ)

tactic: exact mk_le_of_injective hfi
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
f : C(↑s, ℝ) → C(X, ℝ)
hf : ∀ (f_1 : C(↑s, ℝ)), ContinuousMap.restrict s (f f_1) = f_1
hfi : Injective f
⊢ #C(↑s, ℝ) ≤ #C(X, ℝ)
state_after: no goals

tactic: rw [mk_arrow, mk_real, lift_uzero, lift_continuum, continuum, ← power_mul]
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ #(↑t → ℝ) ≤ 𝔠
state_after: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ (ℵ₀ * #↑t) ≤ 2 ^ ℵ₀

tactic: exact power_le_power_left two_ne_zero mk_le_aleph0
state_before: X : Type u
inst✝³ : TopologicalSpace X
inst✝² : SeparableSpace X
inst✝¹ : NormalSpace X
s : Set X
hs : IsClosed s
inst✝ : DiscreteTopology ↑s
h : 𝔠 ≤ #↑s
t : Set X
htc : t.Countable
htd : Dense t
this : Countable ↑t
⊢ 2 ^ (ℵ₀ * #↑t) ≤ 2 ^ ℵ₀
state_after: no goals