Theorem: Profinite.NobelingProof.factors_prod_eq_basis_of_eq
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)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
⊢ (List.map (⇑(LocallyConstant.evalMonoidHom y)) (factors C s x)).prod = 1
state_after: case hl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
⊢ ∀ x_1 ∈ List.map (⇑(LocallyConstant.evalMonoidHom y)) (factors C s x), x_1 = 1
tactic: apply List.prod_eq_one
state_before: case hl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
⊢ ∀ x_1 ∈ List.map (⇑(LocallyConstant.evalMonoidHom y)) (factors C s x), x_1 = 1
state_after: case hl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
⊢ ∀ (x_1 : ℤ),
    (∃ a,
        (∃ a_1 ∈ Finset.sort (fun x x_2 => x ≥ x_2) s,
            (if ↑x a_1 = true then e (π C fun x => x ∈ s) a_1 else 1 - e (π C fun x => x ∈ s) a_1) = a) ∧
          ((Pi.evalMonoidHom (fun a => ℤ) x).comp LocallyConstant.coeFnMonoidHom) a = x_1) →
      x_1 = 1
tactic: simp only [h, List.mem_map, LocallyConstant.evalMonoidHom, factors]
state_before: case hl
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
⊢ ∀ (x_1 : ℤ),
    (∃ a,
        (∃ a_1 ∈ Finset.sort (fun x x_2 => x ≥ x_2) s,
            (if ↑x a_1 = true then e (π C fun x => x ∈ s) a_1 else 1 - e (π C fun x => x ∈ s) a_1) = a) ∧
          ((Pi.evalMonoidHom (fun a => ℤ) x).comp LocallyConstant.coeFnMonoidHom) a = x_1) →
      x_1 = 1
state_after: case hl.intro.intro.intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
⊢ ((Pi.evalMonoidHom (fun a => ℤ) x).comp LocallyConstant.coeFnMonoidHom)
      (if ↑x b = true then e (π C fun x => x ∈ s) b else 1 - e (π C fun x => x ∈ s) b) =
    1
tactic: rintro _ ⟨a, ⟨b, _, rfl⟩, rfl⟩
state_before: case hl.intro.intro.intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
⊢ ((Pi.evalMonoidHom (fun a => ℤ) x).comp LocallyConstant.coeFnMonoidHom)
      (if ↑x b = true then e (π C fun x => x ∈ s) b else 1 - e (π C fun x => x ∈ s) b) =
    1
state_after: case hl.intro.intro.intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
⊢ (if ↑x b = true then e (π C fun x => x ∈ s) b else 1 - e (π C fun x => x ∈ s) b) x = 1
tactic: dsimp
state_before: case hl.intro.intro.intro.intro
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
⊢ (if ↑x b = true then e (π C fun x => x ∈ s) b else 1 - e (π C fun x => x ∈ s) b) x = 1
state_after: case pos
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
hh : ↑x b = true
⊢ (e (π C fun x => x ∈ s) b) x = 1

case neg
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
s : Finset I
x y : ↑(π C fun x => x ∈ s)
h : y = x
b : I
left✝ : b ∈ Finset.sort (fun x x_1 => x ≥ x_1) s
hh : ¬↑x b = true
⊢ (1 - e (π C fun x => x ∈ s) b) x = 1
tactic: split_ifs with hh