awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
⊢ Perfect (closure (eball x₁ (ε / 2) ∩ D₁))

Tactic:
rcases perf1.small_diam_aux ε_pos hx₁ with ⟨perf1', non1', sub1', diam1⟩

Premises used: _private.0.Perfect.small_diam_aux
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
⊢ (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty

Tactic:
rcases perf1.small_diam_aux ε_pos hx₁ with ⟨perf1', non1', sub1', diam1⟩

Premises used: _private.0.Perfect.small_diam_aux
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
⊢ closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁

Tactic:
rcases perf1.small_diam_aux ε_pos hx₁ with ⟨perf1', non1', sub1', diam1⟩

Premises used: _private.0.Perfect.small_diam_aux
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
⊢ ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε

Tactic:
rcases perf1.small_diam_aux ε_pos hx₁ with ⟨perf1', non1', sub1', diam1⟩

Premises used: _private.0.Perfect.small_diam_aux
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
diam1 : ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε
⊢ ∃ (C₀ : Set α) (C₁ : Set α),
    (Perfect C₀ ∧ C₀.Nonempty ∧ C₀ ⊆ C ∧ ediam C₀ ≤ ε) ∧
      (Perfect C₁ ∧ C₁.Nonempty ∧ C₁ ⊆ C ∧ ediam C₁ ≤ ε) ∧ Disjoint C₀ C₁

Tactic:
⟨closure (Metric.eball x₀ (ε / 2) ∩ D₀), closure (Metric.eball x₁ (ε / 2) ∩ D₁),
      ⟨perf0', non0', sub0'.trans sub0, diam0⟩, ⟨perf1', non1', sub1'.trans sub1, diam1⟩, ?_⟩

Premises used: HasSubset.Subset.trans, HDiv.hDiv, Metric.eball, Inter.inter, closure, And.intro, Exists.intro, OfNat.ofNat
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
diam1 : ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε
x₂ : Disjoint (closure (eball x₀ (ε / 2) ∩ D₀)) (closure (eball x₁ (ε / 2) ∩ D₁))
⊢ ∃ (C₀ : Set α) (C₁ : Set α),
    (Perfect C₀ ∧ C₀.Nonempty ∧ C₀ ⊆ C ∧ ediam C₀ ≤ ε) ∧
      (Perfect C₁ ∧ C₁.Nonempty ∧ C₁ ⊆ C ∧ ediam C₁ ≤ ε) ∧ Disjoint C₀ C₁

Tactic:
refine
    ⟨closure (Metric.eball x₀ (ε / 2) ∩ D₀), closure (Metric.eball x₁ (ε / 2) ∩ D₁),
      ⟨perf0', non0', sub0'.trans sub0, diam0⟩, ⟨perf1', non1', sub1'.trans sub1, diam1⟩, ?_⟩
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
diam1 : ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε
apply : closure (eball x₀ (ε / 2) ∩ D₀) ≤ D₀
apply₁ : closure (eball x₁ (ε / 2) ∩ D₁) ≤ D₁
⊢ Disjoint (closure (eball x₀ (ε / 2) ∩ D₀)) (closure (eball x₁ (ε / 2) ∩ D₁))

Tactic:
apply Disjoint.mono _ _ hdisj

Premises used: Disjoint.mono
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
diam1 : ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε
⊢ closure (eball x₀ (ε / 2) ∩ D₀) ≤ D₀

Tactic:
assumption
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
ε : ℝ≥0∞
hC : Perfect C
hnonempty : C.Nonempty
ε_pos : 0 < ε
D₀ D₁ : Set α
perf0 : Perfect D₀
sub0 : D₀ ⊆ C
hdisj : Disjoint D₀ D₁
perf1 : Perfect D₁
sub1 : D₁ ⊆ C
x₀ : α
hx₀ : x₀ ∈ D₀
x₁ : α
hx₁ : x₁ ∈ D₁
perf0' : Perfect (closure (eball x₀ (ε / 2) ∩ D₀))
non0' : (closure (eball x₀ (ε / 2) ∩ D₀)).Nonempty
sub0' : closure (eball x₀ (ε / 2) ∩ D₀) ⊆ D₀
diam0 : ediam (closure (eball x₀ (ε / 2) ∩ D₀)) ≤ ε
perf1' : Perfect (closure (eball x₁ (ε / 2) ∩ D₁))
non1' : (closure (eball x₁ (ε / 2) ∩ D₁)).Nonempty
sub1' : closure (eball x₁ (ε / 2) ∩ D₁) ⊆ D₁
diam1 : ediam (closure (eball x₁ (ε / 2) ∩ D₁)) ≤ ε
⊢ closure (eball x₁ (ε / 2) ∩ D₁) ≤ D₁

Tactic:
assumption
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
obtain :
  ∀ (u : ℕ → ℝ≥0∞) (upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)) (hu : Tendsto u atTop (nhds 0)),
    ∃ (f : (ℕ → Bool) → α), range f ⊆ C ∧ Continuous f ∧ Injective f
⊢ ∃ (f : (ℕ → Bool) → α), range f ⊆ C ∧ Continuous f ∧ Injective f

Tactic:
obtain ⟨u, -, upos', hu⟩ := exists_seq_strictAnti_tendsto' (zero_lt_one' ℝ≥0∞)

Premises used: exists_seq_strictAnti_tendsto', zero_lt_one', ENNReal
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
⊢ ∀ (n : ℕ), 0 < u n

Tactic:
have upos := fun n => (upos' n).1
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
choose :
  ∀ (C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α)
    (h0 :
      ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
        Perfect (C0 (C := C) hC hnonempty hε) ∧
          (C0 (C := C) hC hnonempty hε).Nonempty ∧
            C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε)
    (h1 :
      ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
        Perfect (C1 (C := C) hC hnonempty hε) ∧
          (C1 (C := C) hC hnonempty hε).Nonempty ∧
            C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε)
    (hdisj :
      ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
        Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)),
    ∃ (f : (ℕ → Bool) → α), range f ⊆ C ∧ Continuous f ∧ Injective f
⊢ ∃ (f : (ℕ → Bool) → α), range f ⊆ C ∧ Continuous f ∧ Injective f

Tactic:
choose C0 C1 h0 h1 hdisj using
    fun {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε) =>
    hC.small_diam_splitting hnonempty hε

Premises used: Perfect.small_diam_splitting
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
⊢ P

Tactic:
exact ⟨C, ⟨hC, hnonempty⟩⟩
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
a : Bool
l : List Bool
ih cons cons₁ : P
⊢ P

Tactic:
cases a
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
property :
  Perfect (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty
⊢ P

Tactic:
use C0 ih.property.1 ih.property.2 (upos (l.length + 1))

Premises used: And.right, And.left, HAdd.hAdd, OfNat.ofNat, List.length, Subtype.property
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
⊢ Perfect (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty

Tactic:
⟨(h0 _ _ _).1, (h0 _ _ _).2.1⟩

Premises used: And.right, And.left, And.intro
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
⊢ Perfect (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C0 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty

Tactic:
exact ⟨(h0 _ _ _).1, (h0 _ _ _).2.1⟩
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
property :
  Perfect (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty
⊢ P

Tactic:
use C1 ih.property.1 ih.property.2 (upos (l.length + 1))

Premises used: And.right, And.left, HAdd.hAdd, OfNat.ofNat, List.length, Subtype.property
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
⊢ Perfect (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty

Tactic:
⟨(h1 _ _ _).1, (h1 _ _ _).2.1⟩

Premises used: And.right, And.left, And.intro
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
ih : P
⊢ Perfect (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯) ∧
    (C1 (C := (↑ih : Set α)) ⋯ ⋯ (ε := u (l.length + 1)) ⋯).Nonempty

Tactic:
exact ⟨(h1 _ _ _).1, (h1 _ _ _).2.1⟩
-- Module: Mathlib.Topology.MetricSpace.Perfect
Goal:
α : Type u_1
inst : MetricSpace α
C : Set α
hC : Perfect C
hnonempty : C.Nonempty
inst_1 : CompleteSpace α
u : ℕ → ℝ≥0∞
upos' : ∀ (n : ℕ), Membership.mem (γ := Set ℝ≥0∞) (Ioo 0 1) (u n)
hu : Tendsto u atTop (nhds 0)
upos : ∀ (n : ℕ), 0 < u n
P : Type (max 0 u_1) := { E : Set α // Perfect E ∧ E.Nonempty }
C0 C1 : {C : Set α} → (hC : Perfect C) → (hnonempty : C.Nonempty) → {ε : ℝ≥0∞} → (hε : 0 < ε) → Set α
h0 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C0 (C := C) hC hnonempty hε) ∧
      (C0 (C := C) hC hnonempty hε).Nonempty ∧ C0 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C0 (C := C) hC hnonempty hε) ≤ ε
h1 :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Perfect (C1 (C := C) hC hnonempty hε) ∧
      (C1 (C := C) hC hnonempty hε).Nonempty ∧ C1 (C := C) hC hnonempty hε ⊆ C ∧ ediam (C1 (C := C) hC hnonempty hε) ≤ ε
hdisj :
  ∀ {C : Set α} (hC : Perfect C) (hnonempty : C.Nonempty) {ε : ℝ≥0∞} (hε : 0 < ε),
    Disjoint (C0 (C := C) hC hnonempty hε) (C1 (C := C) hC hnonempty hε)
l : List Bool
nil : P
cons : (a : Bool) → (l : List Bool) → (ih : P) → P
⊢ P

Tactic:
induction l with
    | nil => exact ⟨C, ⟨hC, hnonempty⟩⟩
    | cons a l ih =>
      cases a
      · use C0 ih.property.1 ih.property.2 (upos (l.length + 1))
        exact ⟨(h0 _ _ _).1, (h0 _ _ _).2.1⟩
      use C1 ih.property.1 ih.property.2 (upos (l.length + 1))
      exact ⟨(h1 _ _ _).1, (h1 _ _ _).2.1⟩