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

tactic: ext i
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
⊢ Proj (fun x => ord I x < o) x = x
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
⊢ Proj (fun x => ord I x < o) x i = x i

tactic: simp only [Proj, Set.mem_setOf, ite_eq_left_iff, not_lt]
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
⊢ Proj (fun x => ord I x < o) x i = x i
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
⊢ o ≤ ord I i → false = x i

tactic: intro hi
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
⊢ o ≤ ord I i → false = x i
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o ≤ ord I i
⊢ false = x i

tactic: rw [le_iff_lt_or_eq] at hi
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o ≤ ord I i
⊢ false = x i
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i ∨ o = ord I i
⊢ false = x i

tactic: cases' hi with hi hi
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i ∨ o = ord I i
⊢ false = x i
state_after: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
⊢ false = x i

case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o = ord I i
⊢ false = x i

tactic: specialize hsC x hx.1 i
state_before: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
⊢ false = x i
state_after: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : x i = true → ord I i < Order.succ o
⊢ false = x i

tactic: rw [← not_imp_not] at hsC
state_before: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : x i = true → ord I i < Order.succ o
⊢ false = x i
state_after: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : ¬ord I i < Order.succ o → ¬x i = true
⊢ false = x i

tactic: simp only [not_lt, Bool.not_eq_true, Order.succ_le_iff] at hsC
state_before: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : ¬ord I i < Order.succ o → ¬x i = true
⊢ false = x i
state_after: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : o < ord I i → x i = false
⊢ false = x i

tactic: exact (hsC hi).symm
state_before: case h.inl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o < ord I i
hsC : o < ord I i → x i = false
⊢ false = x i
state_after: no goals

tactic: simp only [C0, Set.mem_inter_iff, Set.mem_setOf_eq] at hx
state_before: case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
hx : x ∈ C0 C ho
i : I
hi : o = ord I i
⊢ false = x i
state_after: case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
i : I
hi : o = ord I i
hx : x ∈ C ∧ x (term I ho) = false
⊢ false = x i

tactic: rw [eq_comm, ord_term ho] at hi
state_before: case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
i : I
hi : o = ord I i
hx : x ∈ C ∧ x (term I ho) = false
⊢ false = x i
state_after: case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
i : I
hi : term I ho = i
hx : x ∈ C ∧ x (term I ho) = false
⊢ false = x i

tactic: rw [← hx.2, hi]
state_before: case h.inr
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
o : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
x : I → Bool
i : I
hi : term I ho = i
hx : x ∈ C ∧ x (term I ho) = false
⊢ false = x i
state_after: no goals