Theorem: Equiv.sumPiEquivProdPi_symm_preimage_univ_pi
File: Mathlib/Data/Set/Prod.lean

tactic: ext
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
⊢ ⇑(sumPiEquivProdPi π).symm ⁻¹' univ.pi t = (univ.pi fun i => t (Sum.inl i)) ×ˢ univ.pi fun i => t (Sum.inr i)
state_after: case h
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ x✝ ∈ ⇑(sumPiEquivProdPi π).symm ⁻¹' univ.pi t ↔
    x✝ ∈ (univ.pi fun i => t (Sum.inl i)) ×ˢ univ.pi fun i => t (Sum.inr i)

tactic: simp_rw [mem_preimage, mem_prod, mem_univ_pi, sumPiEquivProdPi_symm_apply]
state_before: case h
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ x✝ ∈ ⇑(sumPiEquivProdPi π).symm ⁻¹' univ.pi t ↔
    x✝ ∈ (univ.pi fun i => t (Sum.inl i)) ×ˢ univ.pi fun i => t (Sum.inr i)
state_after: case h
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ (∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i) ↔ (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)

tactic: constructor
state_before: case h
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ (∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i) ↔ (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)
state_after: case h.mp
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ (∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i) → (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)

case h.mpr
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ ((∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)) → ∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i

tactic: intro h
state_before: case h.mp
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ (∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i) → (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)
state_after: case h.mp
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
h : ∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i
⊢ (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)

tactic: constructor <;> intro i <;> apply h
state_before: case h.mp
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
h : ∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i
⊢ (∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)
state_after: no goals

tactic: rintro ⟨h₁, h₂⟩ (i|i) <;> simp <;> apply_assumption
state_before: case h.mpr
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
π : ι ⊕ ι' → Type u_4
t : (i : ι ⊕ ι') → Set (π i)
x✝ : ((i : ι) → π (Sum.inl i)) × ((i' : ι') → π (Sum.inr i'))
⊢ ((∀ (i : ι), x✝.1 i ∈ t (Sum.inl i)) ∧ ∀ (i : ι'), x✝.2 i ∈ t (Sum.inr i)) → ∀ (i : ι ⊕ ι'), Sum.rec x✝.1 x✝.2 i ∈ t i
state_after: no goals