Theorem: Filter.seq_assoc
File: Mathlib/Order/Filter/Basic.lean

tactic: refine le_antisymm (le_seq fun s hs t ht => ?_) (le_seq fun s hs t ht => ?_)
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
⊢ h.seq (g.seq x) = ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x
state_after: case refine_1
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
⊢ s.seq t ∈ h.seq (g.seq x)

case refine_2
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht : t ∈ g.seq x
⊢ s.seq t ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x

tactic: rcases mem_seq_iff.1 hs with ⟨u, hu, v, hv, hs⟩
state_before: case refine_1
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
⊢ s.seq t ∈ h.seq (g.seq x)
state_after: case refine_1.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
⊢ s.seq t ∈ h.seq (g.seq x)

tactic: rcases mem_map_iff_exists_image.1 hu with ⟨w, hw, hu⟩
state_before: case refine_1.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
⊢ s.seq t ∈ h.seq (g.seq x)
state_after: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ s.seq t ∈ h.seq (g.seq x)

tactic: refine mem_of_superset ?_ (Set.seq_mono ((Set.seq_mono hu Subset.rfl).trans hs) Subset.rfl)
state_before: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ s.seq t ∈ h.seq (g.seq x)
state_after: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ (((fun x x_1 => x ∘ x_1) '' w).seq v).seq t ∈ h.seq (g.seq x)

tactic: rw [← Set.seq_seq]
state_before: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ (((fun x x_1 => x ∘ x_1) '' w).seq v).seq t ∈ h.seq (g.seq x)
state_after: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ w.seq (v.seq t) ∈ h.seq (g.seq x)

tactic: exact seq_mem_seq hw (seq_mem_seq hv ht)
state_before: case refine_1.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (α → γ)
hs✝ : s ∈ (map (fun x x_1 => x ∘ x_1) h).seq g
t : Set α
ht : t ∈ x
u : Set ((α → β) → α → γ)
hu✝ : u ∈ map (fun x x_1 => x ∘ x_1) h
v : Set (α → β)
hv : v ∈ g
hs : u.seq v ⊆ s
w : Set (β → γ)
hw : w ∈ h
hu : (fun x x_1 => x ∘ x_1) '' w ⊆ u
⊢ w.seq (v.seq t) ∈ h.seq (g.seq x)
state_after: no goals

tactic: rcases mem_seq_iff.1 ht with ⟨u, hu, v, hv, ht⟩
state_before: case refine_2
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht : t ∈ g.seq x
⊢ s.seq t ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x
state_after: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ s.seq t ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x

tactic: refine mem_of_superset ?_ (Set.seq_mono Subset.rfl ht)
state_before: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ s.seq t ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x
state_after: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ s.seq (u.seq v) ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x

tactic: rw [Set.seq_seq]
state_before: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ s.seq (u.seq v) ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x
state_after: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ (((fun x x_1 => x ∘ x_1) '' s).seq u).seq v ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x

tactic: exact seq_mem_seq (seq_mem_seq (image_mem_map hs) hu) hv
state_before: case refine_2.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l x : Filter α
g : Filter (α → β)
h : Filter (β → γ)
s : Set (β → γ)
hs : s ∈ h
t : Set β
ht✝ : t ∈ g.seq x
u : Set (α → β)
hu : u ∈ g
v : Set α
hv : v ∈ x
ht : u.seq v ⊆ t
⊢ (((fun x x_1 => x ∘ x_1) '' s).seq u).seq v ∈ ((map (fun x x_1 => x ∘ x_1) h).seq g).seq x
state_after: no goals