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

tactic: rw [Set.image_singleton, eq_top_iff]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
⊢ Submodule.span ℤ (eval {fun x => false} '' {nil}) = ⊤
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
⊢ ⊤ ≤ Submodule.span ℤ {eval {fun x => false} nil}

tactic: intro f _
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
⊢ ⊤ ≤ Submodule.span ℤ {eval {fun x => false} nil}
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ f ∈ Submodule.span ℤ {eval {fun x => false} nil}

tactic: rw [Submodule.mem_span_singleton]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ f ∈ Submodule.span ℤ {eval {fun x => false} nil}
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ∃ a, a • eval {fun x => false} nil = f

tactic: refine ⟨f default, ?_⟩
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ∃ a, a • eval {fun x => false} nil = f
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ f default • eval {fun x => false} nil = f

tactic: simp only [eval, List.map, List.prod_nil, zsmul_eq_mul, mul_one]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ f default • eval {fun x => false} nil = f
state_after: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ↑(f default) = f

tactic: ext x
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ↑(f default) = f
state_after: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
x : ↑{fun x => false}
⊢ ↑(f default) x = f x

tactic: obtain rfl : x = default := by simp only [Set.default_coe_singleton, eq_iff_true_of_subsingleton]
state_before: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
x : ↑{fun x => false}
⊢ ↑(f default) x = f 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)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ↑(f default) default = f default

tactic: rfl
state_before: case h
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
⊢ ↑(f default) default = f default
state_after: no goals

tactic: simp only [Set.default_coe_singleton, eq_iff_true_of_subsingleton]
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
f : LocallyConstant ↑{fun x => false} ℤ
a✝ : f ∈ ⊤
x : ↑{fun x => false}
⊢ x = default
state_after: no goals