Theorem: Profinite.NobelingProof.GoodProducts.smaller_mono
File: Mathlib/Topology/Category/Profinite/Nobeling.lean

Proof steps:
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
⊢ smaller C o₁ ⊆ smaller C o₂
state_after: case intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ (πs C o₁) g ∈ smaller C o₂
tactic: rintro f ⟨g, hg, rfl⟩
state_before: case intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ (πs C o₁) g ∈ smaller C o₂
state_after: case intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ ∃ x ∈ range (π C fun x => ord I x < o₂), (πs C o₂) x = (πs C o₁) g
tactic: simp only [smaller, Set.mem_image]
state_before: case intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ ∃ x ∈ range (π C fun x => ord I x < o₂), (πs C o₂) x = (πs C o₁) g
state_after: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ (πs' C h) g ∈ range (π C fun x => ord I x < o₂) ∧ (πs C o₂) ((πs' C h) g) = (πs C o₁) g
tactic: use πs' C h g
state_before: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
g : LocallyConstant ↑(π C fun x => ord I x < o₁) ℤ
hg : g ∈ range (π C fun x => ord I x < o₁)
⊢ (πs' C h) g ∈ range (π C fun x => ord I x < o₂) ∧ (πs C o₂) ((πs' C h) g) = (πs C o₁) g
state_after: case h.intro.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
l : Products I
gl : Products.isGood (π C fun x => ord I x < o₁) l
⊢ (πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩) ∈ range (π C fun x => ord I x < o₂) ∧
    (πs C o₂) ((πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)) =
      (πs C o₁) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)
tactic: obtain ⟨⟨l, gl⟩, rfl⟩ := hg
state_before: case h.intro.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
l : Products I
gl : Products.isGood (π C fun x => ord I x < o₁) l
⊢ (πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩) ∈ range (π C fun x => ord I x < o₂) ∧
    (πs C o₂) ((πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)) =
      (πs C o₁) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)
state_after: case h.intro.mk.refine_1
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
l : Products I
gl : Products.isGood (π C fun x => ord I x < o₁) l
⊢ (πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩) ∈ range (π C fun x => ord I x < o₂)

case h.intro.mk.refine_2
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
l : Products I
gl : Products.isGood (π C fun x => ord I x < o₁) l
⊢ (πs C o₂) ((πs' C h) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)) =
    (πs C o₁) (eval (π C fun x => ord I x < o₁) ⟨l, gl⟩)
tactic: refine ⟨?_, ?_⟩