Theorem: Profinite.NobelingProof.Products.eval_πs_image'
File: Mathlib/Topology/Category/Profinite/Nobeling.lean

tactic: ext f
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
⊢ eval (π C fun x => ord I x < o₂) '' {m | m < l} = ⇑(πs' C h) '' (eval (π C fun x => ord I x < o₁) '' {m | m < l})
state_after: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ f ∈ eval (π C fun x => ord I x < o₂) '' {m | m < l} ↔
    f ∈ ⇑(πs' C h) '' (eval (π C fun x => ord I x < o₁) '' {m | m < l})

tactic: simp only [Set.mem_image, Set.mem_setOf_eq, exists_exists_and_eq_and]
state_before: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ f ∈ eval (π C fun x => ord I x < o₂) '' {m | m < l} ↔
    f ∈ ⇑(πs' C h) '' (eval (π C fun x => ord I x < o₁) '' {m | m < l})
state_after: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ (∃ x < l, eval (π C fun x => ord I x < o₂) x = f) ↔ ∃ a < l, (πs' C h) (eval (π C fun x => ord I x < o₁) a) = f

tactic: apply exists_congr
state_before: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ (∃ x < l, eval (π C fun x => ord I x < o₂) x = f) ↔ ∃ a < l, (πs' C h) (eval (π C fun x => ord I x < o₁) a) = f
state_after: case h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ ∀ (a : Products I),
    a < l ∧ eval (π C fun x => ord I x < o₂) a = f ↔ a < l ∧ (πs' C h) (eval (π C fun x => ord I x < o₁) a) = f

tactic: intro m
state_before: case h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
⊢ ∀ (a : Products I),
    a < l ∧ eval (π C fun x => ord I x < o₂) a = f ↔ a < l ∧ (πs' C h) (eval (π C fun x => ord I x < o₁) a) = f
state_after: case h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
⊢ m < l ∧ eval (π C fun x => ord I x < o₂) m = f ↔ m < l ∧ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f

tactic: apply and_congr_right
state_before: case h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
⊢ m < l ∧ eval (π C fun x => ord I x < o₂) m = f ↔ m < l ∧ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f
state_after: case h.h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
⊢ m < l → (eval (π C fun x => ord I x < o₂) m = f ↔ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f)

tactic: intro hm
state_before: case h.h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
⊢ m < l → (eval (π C fun x => ord I x < o₂) m = f ↔ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f)
state_after: case h.h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
hm : m < l
⊢ eval (π C fun x => ord I x < o₂) m = f ↔ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f

tactic: rw [eval_πs' C h (lt_ord_of_lt hm hl)]
state_before: case h.h.h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
l : Products I
o₁ o₂ : Ordinal.{u}
h : o₁ ≤ o₂
hl : ∀ i ∈ ↑l, ord I i < o₁
f : LocallyConstant ↑(π C fun x => ord I x < o₂) ℤ
m : Products I
hm : m < l
⊢ eval (π C fun x => ord I x < o₂) m = f ↔ (πs' C h) (eval (π C fun x => ord I x < o₁) m) = f
state_after: no goals