Theorem: Profinite.NobelingProof.CC_comp_zero
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 : Ordinal.{u}
hC : IsClosed C
hsC : contained C (Order.succ o)
ho : o < Ordinal.type fun x x_1 => x < x_1
⊢ ∀ (y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ), (Linear_CC' C hsC ho) ((πs C o) y) = 0
state_after: 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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
⊢ (Linear_CC' C hsC ho) ((πs C o) y) = 0
tactic: intro y
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
⊢ (Linear_CC' C hsC ho) ((πs C o) y) = 0
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ ((Linear_CC' C hsC ho) ((πs C o) y)) x = 0 x
tactic: ext x
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ ((Linear_CC' C hsC ho) ((πs C o) y)) x = 0 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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ y (ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) -
      y (ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)) =
    0
tactic: dsimp [Linear_CC', Linear_CC'₀, Linear_CC'₁, LocallyConstant.sub_apply]
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ y (ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) -
      y (ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)) =
    0
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ y (ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) = y (ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x))
tactic: simp only [Pi.zero_apply, sub_eq_zero]
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ y (ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) = y (ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x))
state_after: case h.h.e_6.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x) = ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)
tactic: congr 1
state_before: case h.h.e_6.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
⊢ ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x) = ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)
state_after: case h.h.e_6.h.a.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ↑(ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) i =
    ↑(ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)) i
tactic: ext i
state_before: case h.h.e_6.h.a.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ↑(ProjRestrict C (fun x => ord I x < o) (CC'₁ C hsC ho x)) i =
    ↑(ProjRestrict C (fun x => ord I x < o) (CC'₀ C ho x)) i
state_after: case h.h.e_6.h.a.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ (if ord I i < o then SwapTrue o (↑x) i else false) = if ord I i < o then ↑x i else false
tactic: dsimp [CC'₀, CC'₁, ProjRestrict, Proj]
state_before: case h.h.e_6.h.a.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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ (if ord I i < o then SwapTrue o (↑x) i else false) = if ord I i < o then ↑x i else false
state_after: 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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ord I i < o → SwapTrue o (↑x) i = ↑x i
tactic: apply if_ctx_congr Iff.rfl _ (fun _ ↦ rfl)
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ord I i < o → SwapTrue o (↑x) i = ↑x i
state_after: 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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ord I i < o → ord I i = o → true = ↑x i
tactic: simp only [SwapTrue, ite_eq_right_iff]
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
⊢ ord I i < o → ord I i = o → true = ↑x i
state_after: 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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
h₁ : ord I i < o
h₂ : ord I i = o
⊢ true = ↑x i
tactic: intro h₁ h₂
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
y : LocallyConstant ↑(π C fun x => ord I x < o) ℤ
x : ↑(C' C ho)
i : I
h₁ : ord I i < o
h₂ : ord I i = o
⊢ true = ↑x i
state_after: no goals
tactic: exact (h₁.ne h₂).elim