Theorem: MeasurableSpace.cardinal_generateMeasurableRec_le
File: Mathlib/MeasureTheory/MeasurableSpace/Card.lean

Proof steps:
state_before: α : Type u
s : Set (Set α)
i : (Quotient.out (aleph 1).ord).α
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i : (Quotient.out (aleph 1).ord).α
⊢ ∀ (x : (Quotient.out (aleph 1).ord).α),
    (∀ (y : (Quotient.out (aleph 1).ord).α),
        (Quotient.out (aleph 1).ord).r y x → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀) →
      #↑(generateMeasurableRec s x) ≤ max (#↑s) 2 ^ ℵ₀
tactic: apply (aleph 1).ord.out.wo.wf.induction i
state_before: α : Type u
s : Set (Set α)
i : (Quotient.out (aleph 1).ord).α
⊢ ∀ (x : (Quotient.out (aleph 1).ord).α),
    (∀ (y : (Quotient.out (aleph 1).ord).α),
        (Quotient.out (aleph 1).ord).r y x → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀) →
      #↑(generateMeasurableRec s x) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
tactic: intro i IH
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
tactic: have A := aleph0_le_aleph 1
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
tactic: have B : aleph 1 ≤ max #s 2 ^ aleph0.{u} :=
    aleph_one_le_continuum.trans (power_le_power_right (le_max_right _ _))
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
tactic: have C : ℵ₀ ≤ max #s 2 ^ aleph0.{u} := A.trans B
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
tactic: have J : #(⋃ j : Iio i, generateMeasurableRec s j.1) ≤ max #s 2 ^ aleph0.{u} := by
    refine (mk_iUnion_le _).trans ?_
    have D : ⨆ j : Iio i, #(generateMeasurableRec s j) ≤ _ := ciSup_le' fun ⟨j, hj⟩ => IH j hj
    apply (mul_le_mul' ((mk_subtype_le _).trans (aleph 1).mk_ord_out.le) D).trans
    rw [mul_eq_max A C]
    exact max_le B le_rfl
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(generateMeasurableRec s i) ≤ max (#↑s) 2 ^ ℵ₀
state_after: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑((s ∪ {∅} ∪ compl '' ⋃ j, generateMeasurableRec s ↑j) ∪ range fun f => ⋃ n, ↑(f n)) ≤ max (#↑s) 2 ^ ℵ₀
tactic: rw [generateMeasurableRec]
state_before: α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑((s ∪ {∅} ∪ compl '' ⋃ j, generateMeasurableRec s ↑j) ∪ range fun f => ⋃ n, ↑(f n)) ≤ max (#↑s) 2 ^ ℵ₀
state_after: case h1.h1.h1
α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑s ≤ max (#↑s) 2 ^ ℵ₀

case h1.h1.h2
α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑{∅} ≤ max (#↑s) 2 ^ ℵ₀

case h2
α : Type u
s : Set (Set α)
i✝ i : (Quotient.out (aleph 1).ord).α
IH :
  ∀ (y : (Quotient.out (aleph 1).ord).α),
    (Quotient.out (aleph 1).ord).r y i → #↑(generateMeasurableRec s y) ≤ max (#↑s) 2 ^ ℵ₀
A : ℵ₀ ≤ aleph 1
B : aleph 1 ≤ max (#↑s) 2 ^ ℵ₀
C : ℵ₀ ≤ max (#↑s) 2 ^ ℵ₀
J : #↑(⋃ j, generateMeasurableRec s ↑j) ≤ max (#↑s) 2 ^ ℵ₀
⊢ #↑(range fun f => ⋃ n, ↑(f n)) ≤ max (#↑s) 2 ^ ℵ₀
tactic: apply_rules [(mk_union_le _ _).trans, add_le_of_le C, mk_image_le.trans]