Theorem: Set.union_pi_inter
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 : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
⊢ ((s₁ ∪ s₂).pi fun i => t₁ i ∩ t₂ i) = s₁.pi t₁ ∩ s₂.pi t₂
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
⊢ (x ∈ (s₁ ∪ s₂).pi fun i => t₁ i ∩ t₂ i) ↔ x ∈ s₁.pi t₁ ∩ s₂.pi t₂

tactic: simp only [mem_pi, mem_union, mem_inter_iff]
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
⊢ (x ∈ (s₁ ∪ s₂).pi fun i => t₁ i ∩ t₂ i) ↔ x ∈ s₁.pi t₁ ∩ s₂.pi t₂
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
⊢ (∀ (i : ι), i ∈ s₁ ∨ i ∈ s₂ → x i ∈ t₁ i ∧ x i ∈ t₂ i) ↔ (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i

tactic: refine ⟨fun h ↦ ⟨fun i his₁ ↦ (h i (Or.inl his₁)).1, fun i his₂ ↦ (h i (Or.inr his₂)).2⟩,
  fun h i hi ↦ ?_⟩
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
⊢ (∀ (i : ι), i ∈ s₁ ∨ i ∈ s₂ → x i ∈ t₁ i ∧ x i ∈ t₂ i) ↔ (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
state_after: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁ ∨ i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

tactic: cases' hi with hi hi
state_before: case h
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁ ∨ i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: case h.inl
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

case h.inr
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

tactic: by_cases hi2 : i ∈ s₂
state_before: case h.inl
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

tactic: exact ⟨h.1 i hi, h.2 i hi2⟩
state_before: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: no goals

tactic: refine ⟨h.1 i hi, ?_⟩
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ t₂ i

tactic: rw [ht₂ i hi2]
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ t₂ i
state_after: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ univ

tactic: exact mem_univ _
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₁
hi2 : i ∉ s₂
⊢ x i ∈ univ
state_after: no goals

tactic: by_cases hi1 : i ∈ s₁
state_before: case h.inr
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∈ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i

tactic: exact ⟨h.1 i hi1, h.2 i hi⟩
state_before: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∈ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: no goals

tactic: refine ⟨?_, h.2 i hi⟩
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ t₁ i ∧ x i ∈ t₂ i
state_after: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ t₁ i

tactic: rw [ht₁ i hi1]
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ t₁ i
state_after: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ univ

tactic: exact mem_univ _
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
s s₁ s₂ : Set ι
t t₁ t₂ : (i : ι) → Set (α i)
i✝ : ι
ht₁ : ∀ i ∉ s₁, t₁ i = univ
ht₂ : ∀ i ∉ s₂, t₂ i = univ
x : (i : ι) → α i
h : (∀ i ∈ s₁, x i ∈ t₁ i) ∧ ∀ i ∈ s₂, x i ∈ t₂ i
i : ι
hi : i ∈ s₂
hi1 : i ∉ s₁
⊢ x i ∈ univ
state_after: no goals