[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
⊢ ∀ {x y : Set ℕ}, x ∈ range Ici → y ∈ range Ici → ∃ z, z ∈ range Ici ∧ z ⊆ x ∩ y
[PROOFSTEP]
rintro _ _ ⟨n, rfl⟩ ⟨m, rfl⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
n m : ℕ
⊢ ∃ z, z ∈ range Ici ∧ z ⊆ Ici n ∩ Ici m
[PROOFSTEP]
exact ⟨Ici (max n m), mem_range_self _, Ici_inter_Ici.symm.subset⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
⊢ ∀ {x y : Set α},
    x ∈ {t | ∃ i, p i ∧ s i = t} → y ∈ {t | ∃ i, p i ∧ s i = t} → ∃ z, z ∈ {t | ∃ i, p i ∧ s i = t} ∧ z ⊆ x ∩ y
[PROOFSTEP]
rintro _ _ ⟨i, hi, rfl⟩ ⟨j, hj, rfl⟩
[GOAL]
case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
i : ι
hi : p i
j : ι
hj : p j
⊢ ∃ z, z ∈ {t | ∃ i, p i ∧ s i = t} ∧ z ⊆ s i ∩ s j
[PROOFSTEP]
rcases h.inter hi hj with ⟨k, hk, hk'⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
i : ι
hi : p i
j : ι
hj : p j
k : ι
hk : p k
hk' : s k ⊆ s i ∩ s j
⊢ ∃ z, z ∈ {t | ∃ i, p i ∧ s i = t} ∧ z ⊆ s i ∩ s j
[PROOFSTEP]
exact ⟨_, ⟨k, hk, rfl⟩, hk'⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ FilterBasis.filter B = ⨅ (s : ↑B.sets), 𝓟 ↑s
[PROOFSTEP]
have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) :=
  by
  rintro ⟨U, U_in⟩ ⟨V, V_in⟩
  rcases B.inter_sets U_in V_in with ⟨W, W_in, W_sub⟩
  use⟨W, W_in⟩
  simp only [ge_iff_le, le_principal_iff, mem_principal, Subtype.coe_mk]
  exact subset_inter_iff.mp W_sub
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ Directed (fun x x_1 => x ≥ x_1) fun s => 𝓟 ↑s
[PROOFSTEP]
rintro ⟨U, U_in⟩ ⟨V, V_in⟩
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ B.sets
V : Set α
V_in : V ∈ B.sets
⊢ ∃ z,
    (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := U, property := U_in }) ((fun s => 𝓟 ↑s) z) ∧
      (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := V, property := V_in }) ((fun s => 𝓟 ↑s) z)
[PROOFSTEP]
rcases B.inter_sets U_in V_in with ⟨W, W_in, W_sub⟩
[GOAL]
case mk.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ B.sets
V : Set α
V_in : V ∈ B.sets
W : Set α
W_in : W ∈ B.sets
W_sub : W ⊆ U ∩ V
⊢ ∃ z,
    (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := U, property := U_in }) ((fun s => 𝓟 ↑s) z) ∧
      (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := V, property := V_in }) ((fun s => 𝓟 ↑s) z)
[PROOFSTEP]
use⟨W, W_in⟩
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ B.sets
V : Set α
V_in : V ∈ B.sets
W : Set α
W_in : W ∈ B.sets
W_sub : W ⊆ U ∩ V
⊢ (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := U, property := U_in })
      ((fun s => 𝓟 ↑s) { val := W, property := W_in }) ∧
    (fun x x_1 => x ≥ x_1) ((fun s => 𝓟 ↑s) { val := V, property := V_in })
      ((fun s => 𝓟 ↑s) { val := W, property := W_in })
[PROOFSTEP]
simp only [ge_iff_le, le_principal_iff, mem_principal, Subtype.coe_mk]
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ B.sets
V : Set α
V_in : V ∈ B.sets
W : Set α
W_in : W ∈ B.sets
W_sub : W ⊆ U ∩ V
⊢ W ⊆ U ∧ W ⊆ V
[PROOFSTEP]
exact subset_inter_iff.mp W_sub
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
this : Directed (fun x x_1 => x ≥ x_1) fun s => 𝓟 ↑s
⊢ FilterBasis.filter B = ⨅ (s : ↑B.sets), 𝓟 ↑s
[PROOFSTEP]
ext U
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
this : Directed (fun x x_1 => x ≥ x_1) fun s => 𝓟 ↑s
U : Set α
⊢ U ∈ FilterBasis.filter B ↔ U ∈ ⨅ (s : ↑B.sets), 𝓟 ↑s
[PROOFSTEP]
simp [mem_filter_iff, mem_iInf_of_directed this]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ generate B.sets = FilterBasis.filter B
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ generate B.sets ≤ FilterBasis.filter B
[PROOFSTEP]
intro U U_in
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ FilterBasis.filter B
⊢ U ∈ generate B.sets
[PROOFSTEP]
rcases B.mem_filter_iff.mp U_in with ⟨V, V_in, h⟩
[GOAL]
case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
U : Set α
U_in : U ∈ FilterBasis.filter B
V : Set α
V_in : V ∈ B
h : V ⊆ U
⊢ U ∈ generate B.sets
[PROOFSTEP]
exact GenerateSets.superset (GenerateSets.basic V_in) h
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ FilterBasis.filter B ≤ generate B.sets
[PROOFSTEP]
rw [le_generate_iff]
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
B : FilterBasis α
⊢ B.sets ⊆ (FilterBasis.filter B).sets
[PROOFSTEP]
apply mem_filter_of_mem
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
U : Set α
⊢ U ∈ IsBasis.filter h ↔ ∃ i, p i ∧ s i ⊆ U
[PROOFSTEP]
simp only [IsBasis.filter, FilterBasis.mem_filter_iff, mem_filterBasis_iff, exists_exists_and_eq_and]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
⊢ IsBasis.filter h = generate {U | ∃ i, p i ∧ s i = U}
[PROOFSTEP]
erw [h.filterBasis.generate]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
p : ι → Prop
s : ι → Set α
h : IsBasis p s
⊢ IsBasis.filter h = FilterBasis.filter (IsBasis.filterBasis h)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
U : Set α
⊢ U ∈ generate s ↔ ∃ i, (Set.Finite i ∧ i ⊆ s) ∧ ⋂₀ i ⊆ U
[PROOFSTEP]
simp only [mem_generate_iff, exists_prop, and_assoc, and_left_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
⊢ ∀ {x y : Set α},
    x ∈ sInter '' {t | Set.Finite t ∧ t ⊆ s} →
      y ∈ sInter '' {t | Set.Finite t ∧ t ⊆ s} → ∃ z, z ∈ sInter '' {t | Set.Finite t ∧ t ⊆ s} ∧ z ⊆ x ∩ y
[PROOFSTEP]
rintro _ _ ⟨a, ⟨fina, suba⟩, rfl⟩ ⟨b, ⟨finb, subb⟩, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s a : Set (Set α)
fina : Set.Finite a
suba : a ⊆ s
b : Set (Set α)
finb : Set.Finite b
subb : b ⊆ s
⊢ ∃ z, z ∈ sInter '' {t | Set.Finite t ∧ t ⊆ s} ∧ z ⊆ ⋂₀ a ∩ ⋂₀ b
[PROOFSTEP]
exact ⟨⋂₀ (a ∪ b), mem_image_of_mem _ ⟨fina.union finb, union_subset suba subb⟩, (sInter_union _ _).subset⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p s
⊢ l = l'
[PROOFSTEP]
ext t
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p s
t : Set α
⊢ t ∈ l ↔ t ∈ l'
[PROOFSTEP]
rw [hl.mem_iff, hl'.mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : IsBasis p s
t : Set α
⊢ t ∈ IsBasis.filter h ↔ ∃ i, p i ∧ s i ⊆ t
[PROOFSTEP]
simp only [h.mem_filter_iff, exists_prop]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
i✝ j✝ : ι
hi : p i✝
hj : p j✝
⊢ ∃ k, p k ∧ s k ⊆ s i✝ ∩ s j✝
[PROOFSTEP]
simpa only [h.mem_iff] using inter_mem (h.mem_of_mem hi) (h.mem_of_mem hj)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
⊢ IsBasis.filter (_ : IsBasis p s) = l
[PROOFSTEP]
ext U
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
U : Set α
⊢ U ∈ IsBasis.filter (_ : IsBasis p s) ↔ U ∈ l
[PROOFSTEP]
simp [h.mem_iff, IsBasis.mem_filter_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
⊢ l = generate {U | ∃ i, p i ∧ s i = U}
[PROOFSTEP]
rw [← h.isBasis.filter_eq_generate, h.filter_eq]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
⊢ generate s = generate (sInter '' {t | Set.Finite t ∧ t ⊆ s})
[PROOFSTEP]
rw [← FilterBasis.ofSets_sets, FilterBasis.generate, ← (hasBasis_generate s).filter_eq]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
⊢ IsBasis.filter (_ : IsBasis (fun t => Set.Finite t ∧ t ⊆ s) fun t => ⋂₀ t) = FilterBasis.filter (FilterBasis.ofSets s)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
⊢ FilterBasis.filter (FilterBasis.ofSets s) = generate s
[PROOFSTEP]
rw [← (FilterBasis.ofSets s).generate, FilterBasis.ofSets_sets, ← generate_eq_generate_inter]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → s' i' ∈ l
⊢ HasBasis l p' s'
[PROOFSTEP]
refine' ⟨fun t => ⟨fun ht => _, fun ⟨i', hi', ht⟩ => mem_of_superset (h' i' hi') ht⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → s' i' ∈ l
t : Set α
ht : t ∈ l
⊢ ∃ i, p' i ∧ s' i ⊆ t
[PROOFSTEP]
rcases hl.mem_iff.1 ht with ⟨i, hi, ht⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → s' i' ∈ l
t : Set α
ht✝ : t ∈ l
i : ι
hi : p i
ht : s i ⊆ t
⊢ ∃ i, p' i ∧ s' i ⊆ t
[PROOFSTEP]
rcases h i hi with ⟨i', hi', hs's⟩
[GOAL]
case intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i'✝ : ι'
hl : HasBasis l p s
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → s' i' ∈ l
t : Set α
ht✝ : t ∈ l
i : ι
hi : p i
ht : s i ⊆ t
i' : ι'
hi' : p' i'
hs's : s' i' ⊆ s i
⊢ ∃ i, p' i ∧ s' i ⊆ t
[PROOFSTEP]
exact ⟨i', hi', hs's.trans ht⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
q : α → Prop
⊢ (∀ᶠ (x : α) in l, q x) ↔ ∃ i, p i ∧ ∀ ⦃x : α⦄, x ∈ s i → q x
[PROOFSTEP]
simpa using hl.mem_iff
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
q : α → Prop
⊢ (∃ᶠ (x : α) in l, q x) ↔ ∀ (i : ι), p i → ∃ x, x ∈ s i ∧ q x
[PROOFSTEP]
simp only [Filter.Frequently, hl.eventually_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
q : α → Prop
⊢ (¬∃ i, p i ∧ ∀ ⦃x : α⦄, x ∈ s i → ¬q x) ↔ ∀ (i : ι), p i → ∃ x, x ∈ s i ∧ q x
[PROOFSTEP]
push_neg
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
q : α → Prop
⊢ (∀ (i : ι), p i → Exists fun ⦃x⦄ => x ∈ s i ∧ q x) ↔ ∀ (i : ι), p i → ∃ x, x ∈ s i ∧ q x
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
⊢ (∀ {i : ι}, p i → Set.Nonempty (s i)) ↔ ¬∃ i, p i ∧ s i = ∅
[PROOFSTEP]
simp only [not_exists, not_and, nonempty_iff_ne_empty]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : Set (Set α)
⊢ (∀ {i : Set (Set α)}, Set.Finite i ∧ i ⊆ s → Set.Nonempty (⋂₀ i)) ↔
    ∀ (t : Set (Set α)), t ⊆ s → Set.Finite t → Set.Nonempty (⋂₀ t)
[PROOFSTEP]
simp only [← and_imp, and_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
l : Filter α
P : Set α → Prop
⊢ HasBasis l (fun s => s ∈ l ∧ P s) id ↔ ∀ (t : Set α), t ∈ l → ∃ r, r ∈ l ∧ P r ∧ r ⊆ t
[PROOFSTEP]
simp only [hasBasis_iff, id, and_assoc]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
l : Filter α
P : Set α → Prop
⊢ (∀ (t : Set α), t ∈ l ↔ ∃ i, i ∈ l ∧ P i ∧ i ⊆ t) ↔ ∀ (t : Set α), t ∈ l → ∃ r, r ∈ l ∧ P r ∧ r ⊆ t
[PROOFSTEP]
exact forall_congr' fun s => ⟨fun h => h.1, fun h => ⟨h, fun ⟨t, hl, _, hts⟩ => mem_of_superset hl hts⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
q : ι → Prop
hq : ∀ (i : ι), p i → ∃ j, p j ∧ q j ∧ s j ⊆ s i
⊢ HasBasis l (fun i => p i ∧ q i) s
[PROOFSTEP]
refine' ⟨fun t => ⟨fun ht => _, fun ⟨i, hpi, hti⟩ => h.mem_iff.2 ⟨i, hpi.1, hti⟩⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
q : ι → Prop
hq : ∀ (i : ι), p i → ∃ j, p j ∧ q j ∧ s j ⊆ s i
t : Set α
ht : t ∈ l
⊢ ∃ i, (p i ∧ q i) ∧ s i ⊆ t
[PROOFSTEP]
rcases h.mem_iff.1 ht with ⟨i, hpi, hti⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
q : ι → Prop
hq : ∀ (i : ι), p i → ∃ j, p j ∧ q j ∧ s j ⊆ s i
t : Set α
ht : t ∈ l
i : ι
hpi : p i
hti : s i ⊆ t
⊢ ∃ i, (p i ∧ q i) ∧ s i ⊆ t
[PROOFSTEP]
rcases hq i hpi with ⟨j, hpj, hqj, hji⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
q : ι → Prop
hq : ∀ (i : ι), p i → ∃ j, p j ∧ q j ∧ s j ⊆ s i
t : Set α
ht : t ∈ l
i : ι
hpi : p i
hti : s i ⊆ t
j : ι
hpj : p j
hqj : q j
hji : s j ⊆ s i
⊢ ∃ i, (p i ∧ q i) ∧ s i ⊆ t
[PROOFSTEP]
exact ⟨j, ⟨hpj, hqj⟩, hji.trans hti⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p✝ : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
p : Set α → Prop
h : HasBasis l (fun s => s ∈ l ∧ p s) id
V : Set α
hV : V ∈ l
⊢ HasBasis l (fun s => s ∈ l ∧ p s ∧ s ⊆ V) id
[PROOFSTEP]
simpa only [and_assoc] using h.restrict_subset hV
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
⊢ l ≤ l' ↔ ∀ (t : Set α), t ∈ l' → ∃ i, p i ∧ s i ⊆ t
[PROOFSTEP]
simp only [le_def, hl.mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ l ≤ l' ↔ ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
[PROOFSTEP]
simp only [hl'.ge_iff, hl.mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l = l'
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l ≤ l'
[PROOFSTEP]
rw [hl.le_basis_iff hl']
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
[PROOFSTEP]
simpa using h'
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l' ≤ l
[PROOFSTEP]
rw [hl'.le_basis_iff hl]
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ ∀ (i' : ι), p i' → ∃ i, p' i ∧ s' i ⊆ s i'
[PROOFSTEP]
simpa using h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ ∀ (t : Set α), t ∈ l ⊓ l' ↔ ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t
[PROOFSTEP]
intro t
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ t ∈ l ⊓ l' ↔ ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ t ∈ l ⊓ l' → ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t
[PROOFSTEP]
simp only [mem_inf_iff, hl.mem_iff, hl'.mem_iff]
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ (∃ t₁, (∃ i, p i ∧ s i ⊆ t₁) ∧ ∃ t₂, (∃ i, p' i ∧ s' i ⊆ t₂) ∧ t = t₁ ∩ t₂) →
    ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t
[PROOFSTEP]
rintro ⟨t, ⟨i, hi, ht⟩, t', ⟨i', hi', ht'⟩, rfl⟩
[GOAL]
case mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i'✝ : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
i : ι
hi : p i
ht : s i ⊆ t
t' : Set α
i' : ι'
hi' : p' i'
ht' : s' i' ⊆ t'
⊢ ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t ∩ t'
[PROOFSTEP]
exact ⟨⟨i, i'⟩, ⟨hi, hi'⟩, inter_subset_inter ht ht'⟩
[GOAL]
case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ (∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∩ s' i.snd ⊆ t) → t ∈ l ⊓ l'
[PROOFSTEP]
rintro ⟨⟨i, i'⟩, ⟨hi, hi'⟩, H⟩
[GOAL]
case mpr.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i'✝ : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
i : ι
i' : ι'
H : s { fst := i, snd := i' }.fst ∩ s' { fst := i, snd := i' }.snd ⊆ t
hi : p { fst := i, snd := i' }.fst
hi' : p' { fst := i, snd := i' }.snd
⊢ t ∈ l ⊓ l'
[PROOFSTEP]
exact mem_inf_of_inter (hl.mem_of_mem hi) (hl'.mem_of_mem hi') H
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
⊢ ∀ (t : Set α),
    t ∈ ⨅ (i : ι), l i ↔
      ∃ i,
        (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
          ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ t
[PROOFSTEP]
intro t
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ t ∈ ⨅ (i : ι), l i ↔
    ∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
        ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ t
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ t ∈ ⨅ (i : ι), l i →
    ∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
        ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ t
[PROOFSTEP]
simp only [mem_iInf', (hl _).mem_iff]
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ (∃ I,
      Set.Finite I ∧
        ∃ V,
          (∀ (i : ι), ∃ i_1, p i i_1 ∧ s i i_1 ⊆ V i) ∧
            (∀ (i : ι), ¬i ∈ I → V i = univ) ∧ t = ⋂ (i : ι) (_ : i ∈ I), V i ∧ t = ⋂ (i : ι), V i) →
    ∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
        ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ t
[PROOFSTEP]
rintro ⟨I, hI, V, hV, -, rfl, -⟩
[GOAL]
case mp.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
I : Set ι
hI : Set.Finite I
V : ι → Set α
hV : ∀ (i : ι), ∃ i_1, p i i_1 ∧ s i i_1 ⊆ V i
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
      ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ ⋂ (i : ι) (_ : i ∈ I), V i
[PROOFSTEP]
choose u hu using hV
[GOAL]
case mp.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
I : Set ι
hI : Set.Finite I
V : ι → Set α
u : (i : ι) → ι' i
hu : ∀ (i : ι), p i (u i) ∧ s i (u i) ⊆ V i
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
      ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ ⋂ (i : ι) (_ : i ∈ I), V i
[PROOFSTEP]
exact ⟨⟨I, u⟩, ⟨hI, fun i _ => (hu i).1⟩, iInter₂_mono fun i _ => (hu i).2⟩
[GOAL]
case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ (∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ι), i_1 ∈ i.fst → p i_1 (Prod.snd i i_1)) ∧
        ⋂ (i_1 : ι) (_ : i_1 ∈ i.fst), s i_1 (Prod.snd i i_1) ⊆ t) →
    t ∈ ⨅ (i : ι), l i
[PROOFSTEP]
rintro ⟨⟨I, f⟩, ⟨hI₁, hI₂⟩, hsub⟩
[GOAL]
case mpr.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ι) → ι' i
hsub : ⋂ (i : ι) (_ : i ∈ (I, f).fst), s i (Prod.snd (I, f) i) ⊆ t
hI₁ : Set.Finite (I, f).fst
hI₂ : ∀ (i : ι), i ∈ (I, f).fst → p i (Prod.snd (I, f) i)
⊢ t ∈ ⨅ (i : ι), l i
[PROOFSTEP]
refine' mem_of_superset _ hsub
[GOAL]
case mpr.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ι) → ι' i
hsub : ⋂ (i : ι) (_ : i ∈ (I, f).fst), s i (Prod.snd (I, f) i) ⊆ t
hI₁ : Set.Finite (I, f).fst
hI₂ : ∀ (i : ι), i ∈ (I, f).fst → p i (Prod.snd (I, f) i)
⊢ ⋂ (i : ι) (_ : i ∈ (I, f).fst), s i (Prod.snd (I, f) i) ∈ ⨅ (i : ι), l i
[PROOFSTEP]
exact (biInter_mem hI₁).mpr fun i hi => mem_iInf_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
⊢ HasBasis (⨅ (i : ι), l i) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), p (↑i) (Sigma.snd If i)) fun If =>
    ⋂ (i : ↑If.fst), s (↑i) (Sigma.snd If i)
[PROOFSTEP]
refine' ⟨fun t => ⟨fun ht => _, _⟩⟩
[GOAL]
case refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
ht : t ∈ ⨅ (i : ι), l i
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧ ⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1) ⊆ t
[PROOFSTEP]
rcases(hasBasis_iInf' hl).mem_iff.mp ht with ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
[GOAL]
case refine'_1.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
ht : t ∈ ⨅ (i : ι), l i
I : Set ι
f : (i : ι) → ι' i
hsub : ⋂ (i : ι) (_ : i ∈ (I, f).fst), s i (Prod.snd (I, f) i) ⊆ t
hI : Set.Finite (I, f).fst
hf : ∀ (i : ι), i ∈ (I, f).fst → p i (Prod.snd (I, f) i)
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧ ⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1) ⊆ t
[PROOFSTEP]
exact ⟨⟨I, fun i => f i⟩, ⟨hI, Subtype.forall.mpr hf⟩, trans (iInter_subtype _ _) hsub⟩
[GOAL]
case refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ (∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧
        ⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1) ⊆ t) →
    t ∈ ⨅ (i : ι), l i
[PROOFSTEP]
rintro ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
[GOAL]
case refine'_2.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : ⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
⊢ t ∈ ⨅ (i : ι), l i
[PROOFSTEP]
refine' mem_of_superset _ hsub
[GOAL]
case refine'_2.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : ⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
⊢ ⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i) ∈ ⨅ (i : ι), l i
[PROOFSTEP]
cases hI.nonempty_fintype
[GOAL]
case refine'_2.intro.mk.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : ⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
val✝ : Fintype ↑{ fst := I, snd := f }.fst
⊢ ⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i) ∈ ⨅ (i : ι), l i
[PROOFSTEP]
exact iInter_mem.2 fun i => mem_iInf_of_mem ↑i <| (hl i).mem_of_mem <| hf _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
⊢ HasBasis (⨅ (i : ι), l i) (fun ii' => p ii'.fst ii'.snd) fun ii' => s ii'.fst ii'.snd
[PROOFSTEP]
refine' ⟨fun t => _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
t : Set α
⊢ t ∈ ⨅ (i : ι), l i ↔ ∃ i, p i.fst i.snd ∧ s i.fst i.snd ⊆ t
[PROOFSTEP]
rw [mem_iInf_of_directed h, Sigma.exists]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
t : Set α
⊢ (∃ i, t ∈ l i) ↔
    ∃ a b,
      p { fst := a, snd := b }.fst { fst := a, snd := b }.snd ∧
        s { fst := a, snd := b }.fst { fst := a, snd := b }.snd ⊆ t
[PROOFSTEP]
exact exists_congr fun i => (hl i).mem_iff
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
⊢ HasBasis (⨅ (i : ι), l i) (fun ii' => p ii'.fst ii'.snd) fun ii' => s ii'.fst ii'.snd
[PROOFSTEP]
refine' ⟨fun t => _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
t : Set α
⊢ t ∈ ⨅ (i : ι), l i ↔ ∃ i, p i.fst i.snd ∧ s i.fst i.snd ⊆ t
[PROOFSTEP]
rw [mem_iInf_of_directed h, Prod.exists]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
inst✝ : Nonempty ι
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
h : Directed (fun x x_1 => x ≥ x_1) l
t : Set α
⊢ (∃ i, t ∈ l i) ↔ ∃ a b, p (a, b).fst (a, b).snd ∧ s (a, b).fst (a, b).snd ⊆ t
[PROOFSTEP]
exact exists_congr fun i => (hl i).mem_iff
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
⊢ HasBasis (⨅ (i : ι) (_ : i ∈ dom), l i) (fun ii' => ii'.fst ∈ dom ∧ p ii'.fst ii'.snd) fun ii' => s ii'.fst ii'.snd
[PROOFSTEP]
refine' ⟨fun t => _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ t ∈ ⨅ (i : ι) (_ : i ∈ dom), l i ↔ ∃ i, (i.fst ∈ dom ∧ p i.fst i.snd) ∧ s i.fst i.snd ⊆ t
[PROOFSTEP]
rw [mem_biInf_of_directed h hdom, Sigma.exists]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ (∃ i, i ∈ dom ∧ t ∈ l i) ↔
    ∃ a b,
      ({ fst := a, snd := b }.fst ∈ dom ∧ p { fst := a, snd := b }.fst { fst := a, snd := b }.snd) ∧
        s { fst := a, snd := b }.fst { fst := a, snd := b }.snd ⊆ t
[PROOFSTEP]
refine' exists_congr fun i => ⟨_, _⟩
[GOAL]
case refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ i ∈ dom ∧ t ∈ l i →
    ∃ b,
      ({ fst := i, snd := b }.fst ∈ dom ∧ p { fst := i, snd := b }.fst { fst := i, snd := b }.snd) ∧
        s { fst := i, snd := b }.fst { fst := i, snd := b }.snd ⊆ t
[PROOFSTEP]
rintro ⟨hi, hti⟩
[GOAL]
case refine'_1.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
⊢ ∃ b,
    ({ fst := i, snd := b }.fst ∈ dom ∧ p { fst := i, snd := b }.fst { fst := i, snd := b }.snd) ∧
      s { fst := i, snd := b }.fst { fst := i, snd := b }.snd ⊆ t
[PROOFSTEP]
rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
[GOAL]
case refine'_1.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
b : ι' i
hb : p i b
hbt : s i b ⊆ t
⊢ ∃ b,
    ({ fst := i, snd := b }.fst ∈ dom ∧ p { fst := i, snd := b }.fst { fst := i, snd := b }.snd) ∧
      s { fst := i, snd := b }.fst { fst := i, snd := b }.snd ⊆ t
[PROOFSTEP]
exact ⟨b, ⟨hi, hb⟩, hbt⟩
[GOAL]
case refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ (∃ b,
      ({ fst := i, snd := b }.fst ∈ dom ∧ p { fst := i, snd := b }.fst { fst := i, snd := b }.snd) ∧
        s { fst := i, snd := b }.fst { fst := i, snd := b }.snd ⊆ t) →
    i ∈ dom ∧ t ∈ l i
[PROOFSTEP]
rintro ⟨b, ⟨hi, hb⟩, hibt⟩
[GOAL]
case refine'_2.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : ι → Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : (i : ι) → ι' i → Set α
p : (i : ι) → ι' i → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
b : ι' i
hibt : s { fst := i, snd := b }.fst { fst := i, snd := b }.snd ⊆ t
hi : { fst := i, snd := b }.fst ∈ dom
hb : p { fst := i, snd := b }.fst { fst := i, snd := b }.snd
⊢ i ∈ dom ∧ t ∈ l i
[PROOFSTEP]
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
⊢ HasBasis (⨅ (i : ι) (_ : i ∈ dom), l i) (fun ii' => ii'.fst ∈ dom ∧ p ii'.fst ii'.snd) fun ii' => s ii'.fst ii'.snd
[PROOFSTEP]
refine' ⟨fun t => _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ t ∈ ⨅ (i : ι) (_ : i ∈ dom), l i ↔ ∃ i, (i.fst ∈ dom ∧ p i.fst i.snd) ∧ s i.fst i.snd ⊆ t
[PROOFSTEP]
rw [mem_biInf_of_directed h hdom, Prod.exists]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ (∃ i, i ∈ dom ∧ t ∈ l i) ↔ ∃ a b, ((a, b).fst ∈ dom ∧ p (a, b).fst (a, b).snd) ∧ s (a, b).fst (a, b).snd ⊆ t
[PROOFSTEP]
refine' exists_congr fun i => ⟨_, _⟩
[GOAL]
case refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ i ∈ dom ∧ t ∈ l i → ∃ b, ((i, b).fst ∈ dom ∧ p (i, b).fst (i, b).snd) ∧ s (i, b).fst (i, b).snd ⊆ t
[PROOFSTEP]
rintro ⟨hi, hti⟩
[GOAL]
case refine'_1.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
⊢ ∃ b, ((i, b).fst ∈ dom ∧ p (i, b).fst (i, b).snd) ∧ s (i, b).fst (i, b).snd ⊆ t
[PROOFSTEP]
rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
[GOAL]
case refine'_1.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
b : ι'
hb : p i b
hbt : s i b ⊆ t
⊢ ∃ b, ((i, b).fst ∈ dom ∧ p (i, b).fst (i, b).snd) ∧ s (i, b).fst (i, b).snd ⊆ t
[PROOFSTEP]
exact ⟨b, ⟨hi, hb⟩, hbt⟩
[GOAL]
case refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ (∃ b, ((i, b).fst ∈ dom ∧ p (i, b).fst (i, b).snd) ∧ s (i, b).fst (i, b).snd ⊆ t) → i ∈ dom ∧ t ∈ l i
[PROOFSTEP]
rintro ⟨b, ⟨hi, hb⟩, hibt⟩
[GOAL]
case refine'_2.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i✝ : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : Set.Nonempty dom
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ (i : ι), i ∈ dom → HasBasis (l i) (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
b : ι'
hibt : s (i, b).fst (i, b).snd ⊆ t
hi : (i, b).fst ∈ dom
hb : p (i, b).fst (i, b).snd
⊢ i ∈ dom ∧ t ∈ l i
[PROOFSTEP]
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
t U : Set α
⊢ U ∈ 𝓟 t ↔ ∃ i, True ∧ t ⊆ U
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
x : α
⊢ HasBasis (pure x) (fun x => True) fun x_1 => {x}
[PROOFSTEP]
simp only [← principal_singleton, hasBasis_principal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ ∀ (t : Set α), t ∈ l ⊔ l' ↔ ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∪ s' i.snd ⊆ t
[PROOFSTEP]
intro t
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ t ∈ l ⊔ l' ↔ ∃ i, (p i.fst ∧ p' i.snd) ∧ s i.fst ∪ s' i.snd ⊆ t
[PROOFSTEP]
simp_rw [mem_sup, hl.mem_iff, hl'.mem_iff, PProd.exists, union_subset_iff, ← exists_and_right, ← exists_and_left]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
t : Set α
⊢ (∃ x x_1, (p x ∧ s x ⊆ t) ∧ p' x_1 ∧ s' x_1 ⊆ t) ↔ ∃ a b, (p a ∧ p' b) ∧ s a ⊆ t ∧ s' b ⊆ t
[PROOFSTEP]
simp only [and_assoc, and_left_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι'✝ : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Sort u_6
ι' : ι → Type u_7
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ t ∈ ⨆ (i : ι), l i ↔ ∃ i, (∀ (i_1 : ι), p i_1 (i i_1)) ∧ ⋃ (i_1 : ι), s i_1 (i i_1) ⊆ t
[PROOFSTEP]
simp only [hasBasis_iff, (hl _).mem_iff, Classical.skolem, forall_and, iUnion_subset_iff, mem_iSup]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
t u : Set α
⊢ u ∈ l ⊔ 𝓟 t ↔ ∃ i, p i ∧ s i ∪ t ⊆ u
[PROOFSTEP]
simp only [(hl.sup' (hasBasis_principal t)).mem_iff, PProd.exists, exists_prop, and_true_iff, Unique.exists_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
x : α
⊢ HasBasis (l ⊔ pure x) p fun i => s i ∪ {x}
[PROOFSTEP]
simp only [← principal_singleton, hl.sup_principal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s'✝ : ι' → Set α
i' : ι'
hl : HasBasis l p s
s' t : Set α
⊢ t ∈ l ⊓ 𝓟 s' ↔ ∃ i, p i ∧ s i ∩ s' ⊆ t
[PROOFSTEP]
simp only [mem_inf_principal, hl.mem_iff, subset_def, mem_setOf_eq, mem_inter_iff, and_imp]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s'✝ : ι' → Set α
i' : ι'
hl : HasBasis l p s
s' : Set α
⊢ HasBasis (𝓟 s' ⊓ l) p fun i => s' ∩ s i
[PROOFSTEP]
simpa only [inf_comm, inter_comm] using hl.inf_principal s'
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ (∀ {i : PProd ι ι'}, p i.fst ∧ p' i.snd → Set.Nonempty (s i.fst ∩ s' i.snd)) ↔
    ∀ ⦃i : ι⦄, p i → ∀ ⦃i' : ι'⦄, p' i' → Set.Nonempty (s i ∩ s' i')
[PROOFSTEP]
simp [@forall_swap _ ι']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ ¬Disjoint l l' ↔ ¬∃ i, p i ∧ ∃ i', p' i' ∧ Disjoint (s i) (s' i')
[PROOFSTEP]
simp only [_root_.disjoint_iff, ← Ne.def, ← neBot_iff, inf_eq_inter, hl.inf_basis_neBot_iff hl', not_exists, not_and,
  bot_eq_empty, ← nonempty_iff_ne_empty]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_7
inst✝ : Finite I
l : I → Filter α
ι : I → Sort u_6
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
hd : Pairwise (Disjoint on l)
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ Pairwise (Disjoint on fun i => s i (ind i))
[PROOFSTEP]
rcases hd.exists_mem_filter_of_disjoint with ⟨t, htl, hd⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_7
inst✝ : Finite I
l : I → Filter α
ι : I → Sort u_6
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
hd✝ : Pairwise (Disjoint on l)
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
t : I → Set α
htl : ∀ (i : I), t i ∈ l i
hd : Pairwise (Disjoint on t)
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ Pairwise (Disjoint on fun i => s i (ind i))
[PROOFSTEP]
choose ind hp ht using fun i => (h i).mem_iff.1 (htl i)
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_7
inst✝ : Finite I
l : I → Filter α
ι : I → Sort u_6
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
hd✝ : Pairwise (Disjoint on l)
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
t : I → Set α
htl : ∀ (i : I), t i ∈ l i
hd : Pairwise (Disjoint on t)
ind : (i : I) → ι i
hp : ∀ (i : I), p i (ind i)
ht : ∀ (i : I), s i (ind i) ⊆ t i
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ Pairwise (Disjoint on fun i => s i (ind i))
[PROOFSTEP]
exact ⟨ind, hp, hd.mono fun i j hij => hij.mono (ht _) (ht _)⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_6
l : I → Filter α
ι : I → Sort u_7
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
S : Set I
hd : PairwiseDisjoint S l
hS : Set.Finite S
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ PairwiseDisjoint S fun i => s i (ind i)
[PROOFSTEP]
rcases hd.exists_mem_filter hS with ⟨t, htl, hd⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_6
l : I → Filter α
ι : I → Sort u_7
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
S : Set I
hd✝ : PairwiseDisjoint S l
hS : Set.Finite S
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
t : I → Set α
htl : ∀ (i : I), t i ∈ l i
hd : PairwiseDisjoint S t
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ PairwiseDisjoint S fun i => s i (ind i)
[PROOFSTEP]
choose ind hp ht using fun i => (h i).mem_iff.1 (htl i)
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
I : Type u_6
l : I → Filter α
ι : I → Sort u_7
p : (i : I) → ι i → Prop
s : (i : I) → ι i → Set α
S : Set I
hd✝ : PairwiseDisjoint S l
hS : Set.Finite S
h : ∀ (i : I), HasBasis (l i) (p i) (s i)
t : I → Set α
htl : ∀ (i : I), t i ∈ l i
hd : PairwiseDisjoint S t
ind : (i : I) → ι i
hp : ∀ (i : I), p i (ind i)
ht : ∀ (i : I), s i (ind i) ⊆ t i
⊢ ∃ ind, (∀ (i : I), p i (ind i)) ∧ PairwiseDisjoint S fun i => s i (ind i)
[PROOFSTEP]
exact ⟨ind, hp, hd.mono ht⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
⊢ s ∈ f ↔ f ⊓ 𝓟 sᶜ = ⊥
[PROOFSTEP]
refine' not_iff_not.1 ((inf_principal_neBot_iff.trans _).symm.trans neBot_iff)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
⊢ (∀ (U : Set α), U ∈ f → Set.Nonempty (U ∩ sᶜ)) ↔ ¬s ∈ f
[PROOFSTEP]
exact
  ⟨fun h hs => by simpa [Set.not_nonempty_empty] using h s hs, fun hs t ht =>
    inter_compl_nonempty_iff.2 fun hts => hs <| mem_of_superset ht hts⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
h : ∀ (U : Set α), U ∈ f → Set.Nonempty (U ∩ sᶜ)
hs : s ∈ f
⊢ False
[PROOFSTEP]
simpa [Set.not_nonempty_empty] using h s hs
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
⊢ Disjoint f (𝓟 s) ↔ sᶜ ∈ f
[PROOFSTEP]
rw [mem_iff_inf_principal_compl, compl_compl, disjoint_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
⊢ Disjoint (𝓟 s) f ↔ sᶜ ∈ f
[PROOFSTEP]
rw [disjoint_comm, disjoint_principal_right]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s t : Set α
⊢ Disjoint (𝓟 s) (𝓟 t) ↔ Disjoint s t
[PROOFSTEP]
rw [← subset_compl_iff_disjoint_left, disjoint_principal_left, mem_principal]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
x y : α
⊢ Disjoint (pure x) (pure y) ↔ x ≠ y
[PROOFSTEP]
simp only [← principal_singleton, disjoint_principal_principal, disjoint_singleton]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
l₁ l₂ : Filter α
⊢ (diagonal α)ᶜ ∈ l₁ ×ˢ l₂ ↔ Disjoint l₁ l₂
[PROOFSTEP]
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
⊢ Disjoint l l' ↔ ∃ i, p i ∧ (s i)ᶜ ∈ l'
[PROOFSTEP]
simp only [h.disjoint_iff l'.basis_sets, id, ← disjoint_principal_left,
  (hasBasis_principal _).disjoint_iff l'.basis_sets, true_and, Unique.exists_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ (x : α) in f, p x) → ∃ᶠ (x : α) in g, p x
[PROOFSTEP]
simp only [inf_neBot_iff, frequently_iff, and_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ (∀ ⦃s : Set α⦄, s ∈ f → ∀ ⦃s' : Set α⦄, s' ∈ g → Set.Nonempty (s ∩ s')) ↔
    ∀ {p : α → Prop}, (∀ᶠ (x : α) in f, p x) → ∀ {U : Set α}, U ∈ g → ∃ x, p x ∧ x ∈ U
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ (x : α) in g, p x) → ∃ᶠ (x : α) in f, p x
[PROOFSTEP]
rw [inf_comm]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ NeBot (g ⊓ f) ↔ ∀ {p : α → Prop}, (∀ᶠ (x : α) in g, p x) → ∃ᶠ (x : α) in f, p x
[PROOFSTEP]
exact inf_neBot_iff_frequently_left
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
x✝ : Set α
⊢ x✝ ∈ l ↔ ∃ i, p i ∧ x✝ ∈ 𝓟 (s i)
[PROOFSTEP]
simp only [h.mem_iff, mem_principal, exists_prop]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l (fun x => True) s
⊢ l = ⨅ (i : ι), 𝓟 (s i)
[PROOFSTEP]
simpa only [iInf_true] using h.eq_biInf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : ι → Set α
h : Directed (fun x x_1 => x ≥ x_1) s
inst✝ : Nonempty ι
t : Set α
⊢ t ∈ ⨅ (i : ι), 𝓟 (s i) ↔ ∃ i, True ∧ s i ⊆ t
[PROOFSTEP]
simpa only [true_and] using mem_iInf_of_directed (h.mono_comp monotone_principal.dual) t
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
ι : Type u_6
s : ι → Set α
⊢ HasBasis (⨅ (i : ι), 𝓟 (s i)) (fun t => Set.Finite t) fun t => ⋂ (i : ι) (_ : i ∈ t), s i
[PROOFSTEP]
refine' ⟨fun U => (mem_iInf_finite _).trans _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
ι : Type u_6
s : ι → Set α
U : Set α
⊢ (∃ t, U ∈ ⨅ (i : ι) (_ : i ∈ t), 𝓟 (s i)) ↔ ∃ i, Set.Finite i ∧ ⋂ (i_1 : ι) (_ : i_1 ∈ i), s i_1 ⊆ U
[PROOFSTEP]
simp only [iInf_principal_finset, mem_iUnion, mem_principal, exists_prop, exists_finite_iff_finset,
  Finset.set_biInter_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : β → Set α
S : Set β
h : DirectedOn (s ⁻¹'o fun x x_1 => x ≥ x_1) S
ne : Set.Nonempty S
t : Set α
⊢ t ∈ ⨅ (i : β) (_ : i ∈ S), 𝓟 (s i) ↔ ∃ i, i ∈ S ∧ s i ⊆ t
[PROOFSTEP]
refine' mem_biInf_of_directed _ ne
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : β → Set α
S : Set β
h : DirectedOn (s ⁻¹'o fun x x_1 => x ≥ x_1) S
ne : Set.Nonempty S
t : Set α
⊢ DirectedOn ((fun i => 𝓟 (s i)) ⁻¹'o fun x x_1 => x ≥ x_1) S
[PROOFSTEP]
rw [directedOn_iff_directed, ← directed_comp] at h ⊢
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : β → Set α
S : Set β
h : Directed (fun x x_1 => x ≥ x_1) (s ∘ Subtype.val)
ne : Set.Nonempty S
t : Set α
⊢ Directed (fun x x_1 => x ≥ x_1) ((fun i => 𝓟 (s i)) ∘ Subtype.val)
[PROOFSTEP]
refine' h.mono_comp _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
s : β → Set α
S : Set β
h : Directed (fun x x_1 => x ≥ x_1) (s ∘ Subtype.val)
ne : Set.Nonempty S
t : Set α
⊢ ∀ ⦃x y : Set α⦄, x ≥ y → 𝓟 x ≥ 𝓟 y
[PROOFSTEP]
exact fun _ _ => principal_mono.2
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : α → β
hl : HasBasis l p s
t : Set β
⊢ t ∈ Filter.map f l ↔ ∃ i, p i ∧ f '' s i ⊆ t
[PROOFSTEP]
simp only [mem_map, image_subset_iff, hl.mem_iff, preimage]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : β → α
hl : HasBasis l p s
t : Set β
⊢ t ∈ Filter.comap f l ↔ ∃ i, p i ∧ f ⁻¹' s i ⊆ t
[PROOFSTEP]
simp only [mem_comap', hl.mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : β → α
hl : HasBasis l p s
t : Set β
⊢ (∃ i, p i ∧ s i ⊆ {y | ∀ ⦃x : β⦄, f x = y → x ∈ t}) ↔ ∃ i, p i ∧ f ⁻¹' s i ⊆ t
[PROOFSTEP]
refine exists_congr (fun i => Iff.rfl.and ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : β → α
hl : HasBasis l p s
t : Set β
i : ι
⊢ s i ⊆ {y | ∀ ⦃x : β⦄, f x = y → x ∈ t} ↔ f ⁻¹' s i ⊆ t
[PROOFSTEP]
exact ⟨fun h x hx => h hx rfl, fun h y hy x hx => h <| by rwa [mem_preimage, hx]⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t✝ : Set α
i✝ : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : β → α
hl : HasBasis l p s
t : Set β
i : ι
h : f ⁻¹' s i ⊆ t
y : α
hy : y ∈ s i
x : β
hx : f x = y
⊢ x ∈ f ⁻¹' s i
[PROOFSTEP]
rwa [mem_preimage, hx]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
x : α
⊢ (∀ (t : Set α), t ∈ l → x ∈ t) ↔ ∀ (i : ι), p i → x ∈ s i
[PROOFSTEP]
simp only [h.mem_iff, exists_imp, and_imp]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
x : α
⊢ (∀ (t : Set α) (x_1 : ι), p x_1 → s x_1 ⊆ t → x ∈ t) ↔ ∀ (i : ι), p i → x ∈ s i
[PROOFSTEP]
exact ⟨fun h i hi => h (s i) i hi Subset.rfl, fun h t i hi ht => ht (h i hi)⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
⊢ ⋂₀ l.sets = ⋂ (i : ι) (_ : p i), s i
[PROOFSTEP]
rw [sInter_eq_biInter]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
h : HasBasis l p s
⊢ ⋂ (i : Set α) (_ : i ∈ l.sets), i = ⋂ (i : ι) (_ : p i), s i
[PROOFSTEP]
exact h.biInter_mem monotone_id
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hla : HasBasis la pa sa
⊢ Tendsto f la lb ↔ ∀ (t : Set β), t ∈ lb → ∃ i, pa i ∧ MapsTo f (sa i) t
[PROOFSTEP]
simp only [Tendsto, (hla.map f).le_iff, image_subset_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hla : HasBasis la pa sa
⊢ (∀ (t : Set β), t ∈ lb → ∃ i, pa i ∧ sa i ⊆ f ⁻¹' t) ↔ ∀ (t : Set β), t ∈ lb → ∃ i, pa i ∧ MapsTo f (sa i) t
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hlb : HasBasis lb pb sb
⊢ Tendsto f la lb ↔ ∀ (i : ι'), pb i → ∀ᶠ (x : α) in la, f x ∈ sb i
[PROOFSTEP]
simp only [Tendsto, hlb.ge_iff, mem_map', Filter.Eventually]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hla : HasBasis la pa sa
hlb : HasBasis lb pb sb
⊢ Tendsto f la lb ↔ ∀ (ib : ι'), pb ib → ∃ ia, pa ia ∧ ∀ (x : α), x ∈ sa ia → f x ∈ sb ib
[PROOFSTEP]
simp [hlb.tendsto_right_iff, hla.eventually_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
simp only [hasBasis_iff, (hla.prod_pprod hlb).mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
refine' fun t => ⟨_, _⟩
[GOAL]
case refine'_1
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
rintro ⟨⟨i, j⟩, ⟨hi, hj⟩, hsub : sa i ×ˢ sb j ⊆ t⟩
[GOAL]
case refine'_1.intro.mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
rcases h_dir hi hj with ⟨k, hk, ki, kj⟩
[GOAL]
case refine'_1.intro.mk.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
exact ⟨k, hk, (Set.prod_mono ki kj).trans hsub⟩
[GOAL]
case refine'_2
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
rintro ⟨i, hi, h⟩
[GOAL]
case refine'_2.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
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
[PROOFSTEP]
exact ⟨⟨i, i⟩, ⟨hi, hi⟩, h⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hl : HasBasis la pa sa
i j : ι
hi : pa i
hj : pa j
⊢ ∃ k, pa k ∧ sa k ⊆ sa i ∧ sa k ⊆ sa j
[PROOFSTEP]
simpa only [exists_prop, subset_inter_iff] using hl.mem_iff.1 (inter_mem (hl.mem_of_mem hi) (hl.mem_of_mem hj))
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
π : α → Type u_6
π' : β → Type u_7
f : α → β
hf : Function.Injective f
g : (a : α) → π a → π' (f a)
a : α
l : Filter (π' (f a))
⊢ map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l)
[PROOFSTEP]
refine' (((basis_sets _).comap _).map _).eq_of_same_basis _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
π : α → Type u_6
π' : β → Type u_7
f : α → β
hf : Function.Injective f
g : (a : α) → π a → π' (f a)
a : α
l : Filter (π' (f a))
⊢ HasBasis (comap (Sigma.map f g) (map (Sigma.mk (f a)) l)) (fun s => s ∈ l) fun i => Sigma.mk a '' (g a ⁻¹' id i)
[PROOFSTEP]
convert ((basis_sets l).map (Sigma.mk (f a))).comap (Sigma.map f g)
[GOAL]
case h.e'_5.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
π : α → Type u_6
π' : β → Type u_7
f : α → β
hf : Function.Injective f
g : (a : α) → π a → π' (f a)
a : α
l : Filter (π' (f a))
x✝ : Set (π' (f a))
⊢ Sigma.mk a '' (g a ⁻¹' id x✝) = Sigma.map f g ⁻¹' (Sigma.mk (f a) '' id x✝)
[PROOFSTEP]
apply image_sigmaMk_preimage_sigmaMap hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ∃ t, Antitone t ∧ ⨅ (i : ℕ), 𝓟 (s i) = ⨅ (i : ℕ), 𝓟 (t i)
[PROOFSTEP]
use fun n => ⋂ m ≤ n, s m
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ (Antitone fun n => ⋂ (m : ℕ) (_ : m ≤ n), s m) ∧ ⨅ (i : ℕ), 𝓟 (s i) = ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m)
[PROOFSTEP]
constructor
[GOAL]
case h.left
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ Antitone fun n => ⋂ (m : ℕ) (_ : m ≤ n), s m
[PROOFSTEP]
exact fun i j hij => biInter_mono (Iic_subset_Iic.2 hij) fun n _ => Subset.rfl
[GOAL]
case h.right
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ⨅ (i : ℕ), 𝓟 (s i) = ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m)
[PROOFSTEP]
apply le_antisymm
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ⨅ (i : ℕ), 𝓟 (s i) ≤ ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m)
[PROOFSTEP]
rw [le_iInf_iff]
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m) ≤ ⨅ (i : ℕ), 𝓟 (s i)
[PROOFSTEP]
rw [le_iInf_iff]
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ∀ (i : ℕ), ⨅ (i : ℕ), 𝓟 (s i) ≤ 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m)
[PROOFSTEP]
intro i
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
⊢ ∀ (i : ℕ), ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m) ≤ 𝓟 (s i)
[PROOFSTEP]
intro i
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
i : ℕ
⊢ ⨅ (i : ℕ), 𝓟 (s i) ≤ 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m)
[PROOFSTEP]
rw [le_principal_iff]
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
i : ℕ
⊢ ⋂ (m : ℕ) (_ : m ≤ i), s m ∈ ⨅ (i : ℕ), 𝓟 (s i)
[PROOFSTEP]
refine' (biInter_mem (finite_le_nat _)).2 fun j _ => _
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
i j : ℕ
x✝ : j ∈ {i_1 | i_1 ≤ i}
⊢ s j ∈ ⨅ (i : ℕ), 𝓟 (s i)
[PROOFSTEP]
exact mem_iInf_of_mem j (mem_principal_self _)
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
i : ℕ
⊢ ⨅ (i : ℕ), 𝓟 (⋂ (m : ℕ) (_ : m ≤ i), s m) ≤ 𝓟 (s i)
[PROOFSTEP]
refine iInf_le_of_le i (principal_mono.2 <| iInter₂_subset i ?_)
[GOAL]
case h.right.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
s : ℕ → Set α
i : ℕ
⊢ i ≤ i
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : CompleteLattice α
B : Set ι
Bcbl : Set.Countable B
f : ι → α
i₀ : ι
h : f i₀ = ⊤
⊢ ∃ x, ⨅ (t : ι) (_ : t ∈ B), f t = ⨅ (i : ℕ), f (x i)
[PROOFSTEP]
cases' B.eq_empty_or_nonempty with hB Bnonempty
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : CompleteLattice α
B : Set ι
Bcbl : Set.Countable B
f : ι → α
i₀ : ι
h : f i₀ = ⊤
hB : B = ∅
⊢ ∃ x, ⨅ (t : ι) (_ : t ∈ B), f t = ⨅ (i : ℕ), f (x i)
[PROOFSTEP]
rw [hB, iInf_emptyset]
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : CompleteLattice α
B : Set ι
Bcbl : Set.Countable B
f : ι → α
i₀ : ι
h : f i₀ = ⊤
hB : B = ∅
⊢ ∃ x, ⊤ = ⨅ (i : ℕ), f (x i)
[PROOFSTEP]
use fun _ => i₀
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : CompleteLattice α
B : Set ι
Bcbl : Set.Countable B
f : ι → α
i₀ : ι
h : f i₀ = ⊤
hB : B = ∅
⊢ ⊤ = ⨅ (i : ℕ), f i₀
[PROOFSTEP]
simp [h]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : CompleteLattice α
B : Set ι
Bcbl : Set.Countable B
f : ι → α
i₀ : ι
h : f i₀ = ⊤
Bnonempty : Set.Nonempty B
⊢ ∃ x, ⨅ (t : ι) (_ : t ∈ B), f t = ⨅ (i : ℕ), f (x i)
[PROOFSTEP]
exact countable_biInf_eq_iInf_seq Bcbl Bnonempty f
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : Preorder ι
l : Filter α
s : ι → Set α
hs : HasAntitoneBasis l s
t : Set α
⊢ (∃ i, True ∧ s i ⊆ t) ↔ ∃ i, s i ⊆ t
[PROOFSTEP]
simp only [exists_prop, true_and]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
obtain ⟨x', hx'⟩ : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 (x i) :=
  by
  rcases h with ⟨s, hsc, rfl⟩
  rw [generate_eq_biInf]
  exact countable_biInf_principal_eq_seq_iInf hsc
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
⊢ ∃ x, f = ⨅ (i : ℕ), 𝓟 (x i)
[PROOFSTEP]
rcases h with ⟨s, hsc, rfl⟩
[GOAL]
case mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
p : ι' → Prop
s✝ : ι' → Set α
s : Set (Set α)
hsc : Set.Countable s
hs : HasBasis (generate s) p s✝
⊢ ∃ x, generate s = ⨅ (i : ℕ), 𝓟 (x i)
[PROOFSTEP]
rw [generate_eq_biInf]
[GOAL]
case mk.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
p : ι' → Prop
s✝ : ι' → Set α
s : Set (Set α)
hsc : Set.Countable s
hs : HasBasis (generate s) p s✝
⊢ ∃ x, ⨅ (s_1 : Set α) (_ : s_1 ∈ s), 𝓟 s_1 = ⨅ (i : ℕ), 𝓟 (x i)
[PROOFSTEP]
exact countable_biInf_principal_eq_seq_iInf hsc
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
have : ∀ i, x' i ∈ f := fun i => hx'.symm ▸ (iInf_le (fun i => 𝓟 (x' i)) i) (mem_principal_self _)
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
let x : ℕ → { i : ι' // p i } := fun n =>
  Nat.recOn n (hs.index _ <| this 0) fun n xn => hs.index _ <| inter_mem (this <| n + 1) (hs.mem_of_mem xn.2)
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
have x_mono : Antitone fun i => s (x i).1 :=
  antitone_nat_of_succ_le fun i => (hs.set_index_subset _).trans (inter_subset_right _ _)
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
have x_subset : ∀ i, s (x i).1 ⊆ x' i := by
  rintro (_ | i)
  exacts [hs.set_index_subset _, (hs.set_index_subset _).trans (inter_subset_left _ _)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
⊢ ∀ (i : ℕ), s ↑(x i) ⊆ x' i
[PROOFSTEP]
rintro (_ | i)
[GOAL]
case zero
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
⊢ s ↑(x Nat.zero) ⊆ x' Nat.zero
case succ
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
i : ℕ
⊢ s ↑(x (Nat.succ i)) ⊆ x' (Nat.succ i)
[PROOFSTEP]
exacts [hs.set_index_subset _, (hs.set_index_subset _).trans (inter_subset_left _ _)]
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
⊢ ∃ x, (∀ (i : ℕ), p (x i)) ∧ HasAntitoneBasis f fun i => s (x i)
[PROOFSTEP]
refine' ⟨fun i => (x i).1, fun i => (x i).2, _⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
⊢ HasAntitoneBasis f fun i => s ((fun i => ↑(x i)) i)
[PROOFSTEP]
have : (⨅ i, 𝓟 (s (x i).1)).HasAntitoneBasis fun i => s (x i).1 :=
  ⟨hasBasis_iInf_principal (directed_of_sup x_mono), x_mono⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this✝ : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
this : HasAntitoneBasis (⨅ (i : ℕ), 𝓟 (s ↑(x i))) fun i => s ↑(x i)
⊢ HasAntitoneBasis f fun i => s ((fun i => ↑(x i)) i)
[PROOFSTEP]
convert this
[GOAL]
case h.e'_4
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this✝ : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
this : HasAntitoneBasis (⨅ (i : ℕ), 𝓟 (s ↑(x i))) fun i => s ↑(x i)
⊢ f = ⨅ (i : ℕ), 𝓟 (s ↑(x i))
[PROOFSTEP]
exact
  le_antisymm (le_iInf fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
    (hx'.symm ▸ le_iInf fun i => le_principal_iff.2 <| this.1.mem_iff.2 ⟨i, trivial, x_subset i⟩)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this✝ : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
this : HasAntitoneBasis (⨅ (i : ℕ), 𝓟 (s ↑(x i))) fun i => s ↑(x i)
i : ℕ
⊢ s ↑(x i) ∈ f
[PROOFSTEP]
cases i
[GOAL]
case zero
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this✝ : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
this : HasAntitoneBasis (⨅ (i : ℕ), 𝓟 (s ↑(x i))) fun i => s ↑(x i)
⊢ s ↑(x Nat.zero) ∈ f
[PROOFSTEP]
apply hs.set_index_mem
[GOAL]
case succ
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
p : ι' → Prop
s : ι' → Set α
hs : HasBasis f p s
x' : ℕ → Set α
hx' : f = ⨅ (i : ℕ), 𝓟 (x' i)
this✝ : ∀ (i : ℕ), x' i ∈ f
x : ℕ → { i // p i } :=
  fun n =>
    Nat.recOn n (index hs (x' 0) (_ : x' 0 ∈ f)) fun n xn => index hs (x' (n + 1) ∩ s ↑xn) (_ : x' (n + 1) ∩ s ↑xn ∈ f)
x_mono : Antitone fun i => s ↑(x i)
x_subset : ∀ (i : ℕ), s ↑(x i) ⊆ x' i
this : HasAntitoneBasis (⨅ (i : ℕ), 𝓟 (s ↑(x i))) fun i => s ↑(x i)
n✝ : ℕ
⊢ s ↑(x (Nat.succ n✝)) ∈ f
[PROOFSTEP]
apply hs.set_index_mem
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
inst✝ : IsCountablyGenerated f
x : ℕ → Set α
hx : HasAntitoneBasis f x
⊢ ∀ {s : Set α}, s ∈ f ↔ ∃ i, x i ⊆ s
[PROOFSTEP]
simp [hx.1.mem_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
⊢ IsCountablyGenerated (f ⊓ g)
[PROOFSTEP]
rcases f.exists_antitone_basis with ⟨s, hs⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
s : ℕ → Set α
hs : HasAntitoneBasis f s
⊢ IsCountablyGenerated (f ⊓ g)
[PROOFSTEP]
rcases g.exists_antitone_basis with ⟨t, ht⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
s : ℕ → Set α
hs : HasAntitoneBasis f s
t : ℕ → Set α
ht : HasAntitoneBasis g t
⊢ IsCountablyGenerated (f ⊓ g)
[PROOFSTEP]
exact HasCountableBasis.isCountablyGenerated ⟨hs.1.inf ht.1, Set.to_countable _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
⊢ IsCountablyGenerated (f ⊔ g)
[PROOFSTEP]
rcases f.exists_antitone_basis with ⟨s, hs⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
s : ℕ → Set α
hs : HasAntitoneBasis f s
⊢ IsCountablyGenerated (f ⊔ g)
[PROOFSTEP]
rcases g.exists_antitone_basis with ⟨t, ht⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f g : Filter α
inst✝¹ : IsCountablyGenerated f
inst✝ : IsCountablyGenerated g
s : ℕ → Set α
hs : HasAntitoneBasis f s
t : ℕ → Set α
ht : HasAntitoneBasis g t
⊢ IsCountablyGenerated (f ⊔ g)
[PROOFSTEP]
exact HasCountableBasis.isCountablyGenerated ⟨hs.1.sup ht.1, Set.to_countable _⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : Countable β
x : β → Set α
⊢ IsCountablyGenerated (⨅ (i : β), 𝓟 (x i))
[PROOFSTEP]
use range x, countable_range x
[GOAL]
case right
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : Countable β
x : β → Set α
⊢ ⨅ (i : β), 𝓟 (x i) = generate (range x)
[PROOFSTEP]
rw [generate_eq_biInf, iInf_range]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : ∃ x, f = ⨅ (i : ℕ), 𝓟 (x i)
⊢ IsCountablyGenerated f
[PROOFSTEP]
rcases h with ⟨x, rfl⟩
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
x : ℕ → Set α
⊢ IsCountablyGenerated (⨅ (i : ℕ), 𝓟 (x i))
[PROOFSTEP]
apply isCountablyGenerated_seq
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
⊢ IsCountablyGenerated f ↔ ∃ x, HasAntitoneBasis f x
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
⊢ IsCountablyGenerated f → ∃ x, HasAntitoneBasis f x
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
h : IsCountablyGenerated f
⊢ ∃ x, HasAntitoneBasis f x
[PROOFSTEP]
exact f.exists_antitone_basis
[GOAL]
case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
⊢ (∃ x, HasAntitoneBasis f x) → IsCountablyGenerated f
[PROOFSTEP]
rintro ⟨x, h⟩
[GOAL]
case mpr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
x : ℕ → Set α
h : HasAntitoneBasis f x
⊢ IsCountablyGenerated f
[PROOFSTEP]
rw [h.1.eq_iInf]
[GOAL]
case mpr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
f : Filter α
x : ℕ → Set α
h : HasAntitoneBasis f x
⊢ IsCountablyGenerated (⨅ (i : ℕ), 𝓟 (x i))
[PROOFSTEP]
exact isCountablyGenerated_seq x
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
a : α
⊢ IsCountablyGenerated (pure a)
[PROOFSTEP]
rw [← principal_singleton]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
a : α
⊢ IsCountablyGenerated (𝓟 {a})
[PROOFSTEP]
exact isCountablyGenerated_principal _
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f i)
⊢ IsCountablyGenerated (⨅ (i : ι), f i)
[PROOFSTEP]
choose s hs using fun i => exists_antitone_basis (f i)
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f i) (s i)
⊢ IsCountablyGenerated (⨅ (i : ι), f i)
[PROOFSTEP]
rw [← PLift.down_surjective.iInf_comp]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f i) (s i)
⊢ IsCountablyGenerated (⨅ (x : PLift ι), f x.down)
[PROOFSTEP]
refine' HasCountableBasis.isCountablyGenerated ⟨hasBasis_iInf fun n => (hs _).1, _⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f i) (s i)
⊢ Set.Countable {If | Set.Finite If.fst ∧ (↑If.fst → True)}
[PROOFSTEP]
refine' (countable_range <| Sigma.map ((↑) : Finset (PLift ι) → Set (PLift ι)) fun _ => id).mono _
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f i) (s i)
⊢ {If | Set.Finite If.fst ∧ (↑If.fst → True)} ⊆ range (Sigma.map Finset.toSet fun x => id)
[PROOFSTEP]
rintro ⟨I, f⟩ ⟨hI, -⟩
[GOAL]
case mk.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f✝ : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f✝ i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f✝ i) (s i)
I : Set (PLift ι)
f : ↑I → ℕ
hI : Set.Finite { fst := I, snd := f }.fst
⊢ { fst := I, snd := f } ∈ range (Sigma.map Finset.toSet fun x => id)
[PROOFSTEP]
lift I to Finset (PLift ι) using hI
[GOAL]
case mk.intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Sort u_5
ι : Sort u
α : Type v
inst✝¹ : Countable ι
f✝ : ι → Filter α
inst✝ : ∀ (i : ι), IsCountablyGenerated (f✝ i)
s : ι → ℕ → Set α
hs : ∀ (i : ι), HasAntitoneBasis (f✝ i) (s i)
I : Finset (PLift ι)
f : ↑↑I → ℕ
⊢ { fst := ↑I, snd := f } ∈ range (Sigma.map Finset.toSet fun x => id)
[PROOFSTEP]
exact ⟨⟨I, f⟩, rfl⟩


[GOAL]
A : Mon_ (Type u)
x y z : A.X
⊢ x * y * z = x * (y * z)
[PROOFSTEP]
convert congr_fun A.mul_assoc ((x, y), z)
[GOAL]
A : Mon_ (Type u)
x : A.X
⊢ 1 * x = x
[PROOFSTEP]
convert congr_fun A.one_mul (PUnit.unit, x)
[GOAL]
A : Mon_ (Type u)
x : A.X
⊢ x * 1 = x
[PROOFSTEP]
convert congr_fun A.mul_one (x, PUnit.unit)
[GOAL]
A : MonCat
⊢ (MonoidalCategory.tensorHom (fun x => 1) (𝟙 ↑A) ≫ fun p => p.fst * p.snd) = (MonoidalCategory.leftUnitor ↑A).hom
[PROOFSTEP]
ext ⟨_, _⟩
[GOAL]
case h.mk
A : MonCat
fst✝ : MonoidalCategory.tensorUnit (Type u)
snd✝ : ↑A
⊢ (MonoidalCategory.tensorHom (fun x => 1) (𝟙 ↑A) ≫ fun p => p.fst * p.snd) (fst✝, snd✝) =
    (MonoidalCategory.leftUnitor ↑A).hom (fst✝, snd✝)
[PROOFSTEP]
dsimp
[GOAL]
case h.mk
A : MonCat
fst✝ : MonoidalCategory.tensorUnit (Type u)
snd✝ : ↑A
⊢ 1 * snd✝ = snd✝
[PROOFSTEP]
simp
[GOAL]
A : MonCat
⊢ ((MonoidalCategory.tensorHom (𝟙 ↑A) fun x => 1) ≫ fun p => p.fst * p.snd) = (MonoidalCategory.rightUnitor ↑A).hom
[PROOFSTEP]
ext ⟨_, _⟩
[GOAL]
case h.mk
A : MonCat
fst✝ : ↑A
snd✝ : MonoidalCategory.tensorUnit (Type u)
⊢ ((MonoidalCategory.tensorHom (𝟙 ↑A) fun x => 1) ≫ fun p => p.fst * p.snd) (fst✝, snd✝) =
    (MonoidalCategory.rightUnitor ↑A).hom (fst✝, snd✝)
[PROOFSTEP]
dsimp
[GOAL]
case h.mk
A : MonCat
fst✝ : ↑A
snd✝ : MonoidalCategory.tensorUnit (Type u)
⊢ fst✝ * 1 = fst✝
[PROOFSTEP]
simp
[GOAL]
A : MonCat
⊢ (MonoidalCategory.tensorHom (fun p => p.fst * p.snd) (𝟙 ↑A) ≫ fun p => p.fst * p.snd) =
    (MonoidalCategory.associator ↑A ↑A ↑A).hom ≫
      (MonoidalCategory.tensorHom (𝟙 ↑A) fun p => p.fst * p.snd) ≫ fun p => p.fst * p.snd
[PROOFSTEP]
ext ⟨⟨x, y⟩, z⟩
[GOAL]
case h.mk.mk
A : MonCat
z x y : ↑A
⊢ (MonoidalCategory.tensorHom (fun p => p.fst * p.snd) (𝟙 ↑A) ≫ fun p => p.fst * p.snd) ((x, y), z) =
    ((MonoidalCategory.associator ↑A ↑A ↑A).hom ≫
        (MonoidalCategory.tensorHom (𝟙 ↑A) fun p => p.fst * p.snd) ≫ fun p => p.fst * p.snd)
      ((x, y), z)
[PROOFSTEP]
simp [mul_assoc]
[GOAL]
⊢ ∀ {X Y : Mon_ (Type u)} (f : X ⟶ Y),
    (𝟭 (Mon_ (Type u))).map f ≫
        ((fun A =>
              Iso.mk (Mon_.Hom.mk (𝟙 ((𝟭 (Mon_ (Type u))).obj A).X)) (Mon_.Hom.mk (𝟙 ((functor ⋙ inverse).obj A).X)))
            Y).hom =
      ((fun A => Iso.mk (Mon_.Hom.mk (𝟙 ((𝟭 (Mon_ (Type u))).obj A).X)) (Mon_.Hom.mk (𝟙 ((functor ⋙ inverse).obj A).X)))
            X).hom ≫
        (functor ⋙ inverse).map f
[PROOFSTEP]
aesop_cat
[GOAL]
⊢ ∀ {X Y : MonCat} (f : X ⟶ Y),
    (inverse ⋙ functor).map f ≫
        ((fun A =>
              Iso.mk
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((inverse ⋙ functor).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) }
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((𝟭 MonCat).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) })
            Y).hom =
      ((fun A =>
              Iso.mk
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((inverse ⋙ functor).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) }
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((𝟭 MonCat).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) })
            X).hom ≫
        (𝟭 MonCat).map f
[PROOFSTEP]
aesop_cat
[GOAL]
⊢ ∀ {X Y : Mon_ (Type u)} (f : X ⟶ Y),
    (functor ⋙ forget MonCat).map f ≫ ((fun A => Iso.refl ((functor ⋙ forget MonCat).obj A)) Y).hom =
      ((fun A => Iso.refl ((functor ⋙ forget MonCat).obj A)) X).hom ≫ (Mon_.forget (Type u)).map f
[PROOFSTEP]
aesop_cat
[GOAL]
A : CommMon_ (Type u)
src✝ : Monoid A.X := monMonoid A.toMon_
x y : A.X
⊢ x * y = y * x
[PROOFSTEP]
convert congr_fun A.mul_comm (y, x)
[GOAL]
A : CommMonCat
src✝ : Mon_ (Type u) := MonTypeEquivalenceMon.inverse.obj ((forget₂ CommMonCat MonCat).obj A)
⊢ (β_ (Mon_.mk src✝.X src✝.one src✝.mul).X (Mon_.mk src✝.X src✝.one src✝.mul).X).hom ≫
      (Mon_.mk src✝.X src✝.one src✝.mul).mul =
    (Mon_.mk src✝.X src✝.one src✝.mul).mul
[PROOFSTEP]
ext ⟨x : A, y : A⟩
[GOAL]
case h.mk
A : CommMonCat
src✝ : Mon_ (Type u) := MonTypeEquivalenceMon.inverse.obj ((forget₂ CommMonCat MonCat).obj A)
x y : ↑A
⊢ ((β_ (Mon_.mk src✝.X src✝.one src✝.mul).X (Mon_.mk src✝.X src✝.one src✝.mul).X).hom ≫
        (Mon_.mk src✝.X src✝.one src✝.mul).mul)
      (x, y) =
    Mon_.mul (Mon_.mk src✝.X src✝.one src✝.mul) (x, y)
[PROOFSTEP]
exact CommMonoid.mul_comm y x
[GOAL]
⊢ ∀ {X Y : CommMon_ (Type u)} (f : X ⟶ Y),
    (𝟭 (CommMon_ (Type u))).map f ≫
        ((fun A =>
              Iso.mk (Mon_.Hom.mk (𝟙 ((𝟭 (CommMon_ (Type u))).obj A).X))
                (Mon_.Hom.mk
                  (𝟙 ((CommMonTypeEquivalenceCommMon.functor ⋙ CommMonTypeEquivalenceCommMon.inverse).obj A).X)))
            Y).hom =
      ((fun A =>
              Iso.mk (Mon_.Hom.mk (𝟙 ((𝟭 (CommMon_ (Type u))).obj A).X))
                (Mon_.Hom.mk
                  (𝟙 ((CommMonTypeEquivalenceCommMon.functor ⋙ CommMonTypeEquivalenceCommMon.inverse).obj A).X)))
            X).hom ≫
        (CommMonTypeEquivalenceCommMon.functor ⋙ CommMonTypeEquivalenceCommMon.inverse).map f
[PROOFSTEP]
aesop_cat
[GOAL]
⊢ ∀ {X Y : CommMonCat} (f : X ⟶ Y),
    (CommMonTypeEquivalenceCommMon.inverse ⋙ CommMonTypeEquivalenceCommMon.functor).map f ≫
        ((fun A =>
              Iso.mk
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀
                        (x y :
                          ↑((CommMonTypeEquivalenceCommMon.inverse ⋙ CommMonTypeEquivalenceCommMon.functor).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) }
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((𝟭 CommMonCat).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) })
            Y).hom =
      ((fun A =>
              Iso.mk
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀
                        (x y :
                          ↑((CommMonTypeEquivalenceCommMon.inverse ⋙ CommMonTypeEquivalenceCommMon.functor).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) }
                { toOneHom := { toFun := id, map_one' := (_ : id 1 = id 1) },
                  map_mul' :=
                    (_ :
                      ∀ (x y : ↑((𝟭 CommMonCat).obj A)),
                        OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y) =
                          OneHom.toFun { toFun := id, map_one' := (_ : id 1 = id 1) } (x * y)) })
            X).hom ≫
        (𝟭 CommMonCat).map f
[PROOFSTEP]
aesop_cat
[GOAL]
⊢ ∀ {X Y : CommMon_ (Type u)} (f : X ⟶ Y),
    (CommMonTypeEquivalenceCommMon.functor ⋙ forget₂ CommMonCat MonCat).map f ≫
        ((fun A => Iso.refl ((CommMonTypeEquivalenceCommMon.functor ⋙ forget₂ CommMonCat MonCat).obj A)) Y).hom =
      ((fun A => Iso.refl ((CommMonTypeEquivalenceCommMon.functor ⋙ forget₂ CommMonCat MonCat).obj A)) X).hom ≫
        (CommMon_.forget₂Mon_ (Type u) ⋙ MonTypeEquivalenceMon.functor).map f
[PROOFSTEP]
aesop_cat