Theorem: Filter.HasBasis.prod_same_index
File: Mathlib/Order/Filter/Bases.lean

tactic: simp only [hasBasis_iff, (hla.prod_pprod hlb).mem_iff]
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
⊢ HasBasis (la ×ˢ lb) p fun i => sa i ×ˢ sb i

tactic: refine' fun t => ⟨_, _⟩
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
⊢ ∀ (t : Set (α × β)), (∃ i, (p i.fst ∧ p i.snd) ∧ sa i.fst ×ˢ sb i.snd ⊆ t) ↔ ∃ i, p i ∧ sa i ×ˢ sb i ⊆ t

tactic: rintro ⟨⟨i, j⟩, ⟨hi, hj⟩, hsub : sa i ×ˢ sb j ⊆ t⟩
state_before: case refine'_1
α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
t : Set (α × β)
⊢ (∃ i, (p i.fst ∧ p i.snd) ∧ sa i.fst ×ˢ sb i.snd ⊆ t) → ∃ i, p i ∧ sa i ×ˢ sb i ⊆ t

tactic: rcases h_dir hi hj with ⟨k, hk, ki, kj⟩
state_before: case refine'_1.intro.mk.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
t : Set (α × β)
i j : ι
hsub : sa i ×ˢ sb j ⊆ t
hi : p { fst := i, snd := j }.fst
hj : p { fst := i, snd := j }.snd
⊢ ∃ i, p i ∧ sa i ×ˢ sb i ⊆ t

tactic: exact ⟨k, hk, (Set.prod_mono ki kj).trans hsub⟩
state_before: case refine'_1.intro.mk.intro.intro.intro.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
t : Set (α × β)
i j : ι
hsub : sa i ×ˢ sb j ⊆ t
hi : p { fst := i, snd := j }.fst
hj : p { fst := i, snd := j }.snd
k : ι
hk : p k
ki : sa k ⊆ sa { fst := i, snd := j }.fst
kj : sb k ⊆ sb { fst := i, snd := j }.snd
⊢ ∃ i, p i ∧ sa i ×ˢ sb i ⊆ t

tactic: rintro ⟨i, hi, h⟩
state_before: case refine'_2
α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
t : Set (α × β)
⊢ (∃ i, p i ∧ sa i ×ˢ sb i ⊆ t) → ∃ i, (p i.fst ∧ p i.snd) ∧ sa i.fst ×ˢ sb i.snd ⊆ t

tactic: exact ⟨⟨i, i⟩, ⟨hi, hi⟩, h⟩
state_before: case refine'_2.intro.intro
α : Type u_2
β : Type u_1
γ : Type ?u.77172
ι : Sort u_3
ι' : Sort ?u.77178
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb✝ : ι' → Set β
f : α → β
p : ι → Prop
sb : ι → Set β
hla : HasBasis la p sa
hlb : HasBasis lb p sb
h_dir : ∀ {i j : ι}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j
t : Set (α × β)
i : ι
hi : p i
h : sa i ×ˢ sb i ⊆ t
⊢ ∃ i, (p i.fst ∧ p i.snd) ∧ sa i.fst ×ˢ sb i.snd ⊆ t