Theorem: Set.eval_image_pi_of_not_mem
File: Mathlib/Data/Set/Prod.lean

tactic: ext xᵢ
state_before: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
⊢ eval i '' s.pi t = if (s.pi t).Nonempty then univ else ∅
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ xᵢ ∈ eval i '' s.pi t ↔ xᵢ ∈ if (s.pi t).Nonempty then univ else ∅

tactic: simp only [eval, mem_image, mem_pi, Set.Nonempty, mem_ite_empty_right, mem_univ, and_true]
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ xᵢ ∈ eval i '' s.pi t ↔ xᵢ ∈ if (s.pi t).Nonempty then univ else ∅
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ) ↔ ∃ x, ∀ i ∈ s, x i ∈ t i

tactic: constructor
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ) ↔ ∃ x, ∀ i ∈ s, x i ∈ t i
state_after: case h.mp
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ) → ∃ x, ∀ i ∈ s, x i ∈ t i

case h.mpr
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, ∀ i ∈ s, x i ∈ t i) → ∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ

tactic: rintro ⟨x, hx, rfl⟩
state_before: case h.mp
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ) → ∃ x, ∀ i ∈ s, x i ∈ t i
state_after: case h.mp.intro.intro
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
x : (x : ι) → α x
hx : ∀ i ∈ s, x i ∈ t i
⊢ ∃ x, ∀ i ∈ s, x i ∈ t i

tactic: exact ⟨x, hx⟩
state_before: case h.mp.intro.intro
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
x : (x : ι) → α x
hx : ∀ i ∈ s, x i ∈ t i
⊢ ∃ x, ∀ i ∈ s, x i ∈ t i
state_after: no goals

tactic: rintro ⟨x, hx⟩
state_before: case h.mpr
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
⊢ (∃ x, ∀ i ∈ s, x i ∈ t i) → ∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ
state_after: case h.mpr.intro
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
x : (i : ι) → α i
hx : ∀ i ∈ s, x i ∈ t i
⊢ ∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ

tactic: refine ⟨Function.update x i xᵢ, ?_⟩
state_before: case h.mpr.intro
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
x : (i : ι) → α i
hx : ∀ i ∈ s, x i ∈ t i
⊢ ∃ x, (∀ i ∈ s, x i ∈ t i) ∧ x i = xᵢ
state_after: case h.mpr.intro
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
inst✝ : Decidable (s.pi t).Nonempty
hi : i ∉ s
xᵢ : α i
x : (i : ι) → α i
hx : ∀ i ∈ s, x i ∈ t i
⊢ (∀ i_1 ∈ s, update x i xᵢ i_1 ∈ t i_1) ∧ update x i xᵢ i = xᵢ