-- Mathlib/Data/Finset/Card.lean
/-- If a Finset in a Pi type is nontrivial (has at least two elements), then
  its projection to some factor is nontrivial, and the fibers of the projection
  are proper subsets. -/
lemma exists_of_one_lt_card_pi {ι : Type*} {α : ι → Type*} [∀ i, DecidableEq (α i)]
    {s : Finset (∀ i, α i)} (h : 1 < #s) :
    ∃ i, 1 < #(s.image (· i)) ∧ ∀ ai, s.filter (· i = ai) ⊂ s

Proof state:
case intro.intro.intro.intro.intro.inl
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
⊢ ∃ x ∈ s, ¬x i = a2 i

case intro.intro.intro.intro.intro.inr
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne✝ : a1 i ≠ a2 i
ai : α i
hne : a2 i ≠ ai
⊢ ∃ x ∈ s, ¬x i = ai

Tactic:
exacts [⟨a1, h1, hne⟩, ⟨a2, h2, hne⟩]

Result:
no goals

Proof state:
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
h : ∃ a b, a ∈ s ∧ b ∈ s ∧ ∃ a_1, a a_1 ≠ b a_1
⊢ ∃ i,
    (∃ a b, a ∈ image (fun x => x i) s ∧ b ∈ image (fun x => x i) s ∧ a ≠ b) ∧
      ∀ (ai : α i), filter (fun x => x i = ai) s ⊂ s

Tactic:
obtain ⟨a1, a2, h1, h2, i, hne⟩ := h

Result:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
⊢ ∃ i,
    (∃ a b, a ∈ image (fun x => x i) s ∧ b ∈ image (fun x => x i) s ∧ a ≠ b) ∧
      ∀ (ai : α i), filter (fun x => x i = ai) s ⊂ s

Proof state:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
⊢ ∃ i,
    (∃ a b, a ∈ image (fun x => x i) s ∧ b ∈ image (fun x => x i) s ∧ a ≠ b) ∧
      ∀ (ai : α i), filter (fun x => x i = ai) s ⊂ s

Tactic:
refine ⟨i, ⟨_, _, mem_image_of_mem _ h1, mem_image_of_mem _ h2, hne⟩, fun ai => ?_⟩

Result:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
ai : α i
⊢ filter (fun x => x i = ai) s ⊂ s

Proof state:
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
h : 1 < #s
⊢ ∃ i, 1 < #(image (fun x => x i) s) ∧ ∀ (ai : α i), filter (fun x => x i = ai) s ⊂ s

Tactic:
simp_rw [one_lt_card_iff, Function.ne_iff] at h ⊢

Result:
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
h : ∃ a b, a ∈ s ∧ b ∈ s ∧ ∃ a_1, a a_1 ≠ b a_1
⊢ ∃ i,
    (∃ a b, a ∈ image (fun x => x i) s ∧ b ∈ image (fun x => x i) s ∧ a ≠ b) ∧
      ∀ (ai : α i), filter (fun x => x i = ai) s ⊂ s

Proof state:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
ai : α i
⊢ ∃ x ∈ s, ¬x i = ai

Tactic:
obtain rfl | hne := eq_or_ne (a2 i) ai

Result:
case intro.intro.intro.intro.intro.inl
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
⊢ ∃ x ∈ s, ¬x i = a2 i

case intro.intro.intro.intro.intro.inr
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne✝ : a1 i ≠ a2 i
ai : α i
hne : a2 i ≠ ai
⊢ ∃ x ∈ s, ¬x i = ai

Proof state:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
ai : α i
⊢ filter (fun x => x i = ai) s ⊂ s

Tactic:
rw [filter_ssubset]

Result:
case intro.intro.intro.intro.intro
ι : Type u_4
α : ι → Type u_5
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset ((i : ι) → α i)
a1 a2 : (i : ι) → α i
h1 : a1 ∈ s
h2 : a2 ∈ s
i : ι
hne : a1 i ≠ a2 i
ai : α i
⊢ ∃ x ∈ s, ¬x i = ai