/- Copyright (c) 2019 Yury Kudryashov. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Yury Kudryashov ! This file was ported from Lean 3 source module order.filter.extr ! leanprover-community/mathlib commit 1f0096e6caa61e9c849ec2adbd227e960e9dff58 ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Order.Filter.Basic import Mathlib.Order.ConditionallyCompleteLattice.Basic /-! # Minimum and maximum w.r.t. a filter and on a aet ## Main Definitions This file defines six predicates of the form `isAB`, where `A` is `Min`, `Max`, or `Extr`, and `B` is `Filter` or `On`. * `isMinFilter f l a` means that `f a ≤ f x` in some `l`-neighborhood of `a`; * `isMaxFilter f l a` means that `f x ≤ f a` in some `l`-neighborhood of `a`; * `isExtrFilter f l a` means `isMinFilter f l a` or `isMaxFilter f l a`. Similar predicates with `on` suffix are particular cases for `l = 𝓟 s`. ## Main statements ### Change of the filter (set) argument * `is*Filter.filter_mono` : replace the filter with a smaller one; * `is*Filter.filter_inf` : replace a filter `l` with `l ⊓ l'`; * `is*On.on_subset` : restrict to a smaller set; * `is*Pn.inter` : replace a set `s` wtih `s ∩ t`. ### Composition * `is**.comp_mono` : if `x` is an extremum for `f` and `g` is a monotone function, then `x` is an extremum for `g ∘ f`; * `is**.comp_antitone` : similarly for the case of antitone `g`; * `is**.bicomp_mono` : if `x` is an extremum of the same type for `f` and `g` and a binary operation `op` is monotone in both arguments, then `x` is an extremum of the same type for `fun x => op (f x) (g x)`. * `is*Filter.comp_tendsto` : if `g x` is an extremum for `f` w.r.t. `l'` and `Tendsto g l l'`, then `x` is an extremum for `f ∘ g` w.r.t. `l`. * `is*On.on_preimage` : if `g x` is an extremum for `f` on `s`, then `x` is an extremum for `f ∘ g` on `g ⁻¹' s`. ### Algebraic operations * `is**.add` : if `x` is an extremum of the same type for two functions, then it is an extremum of the same type for their sum; * `is**.neg` : if `x` is an extremum for `f`, then it is an extremum of the opposite type for `-f`; * `is**.sub` : if `x` is an a minimum for `f` and a maximum for `g`, then it is a minimum for `f - g` and a maximum for `g - f`; * `is**.max`, `is**.min`, `is**.sup`, `is**.inf` : similarly for `is**.add` for pointwise `max`, `min`, `sup`, `inf`, respectively. ### Miscellaneous definitions * `is**_const` : any point is both a minimum and maximum for a constant function; * `isMin/Max*.isExt` : any minimum/maximum point is an extremum; * `is**.dual`, `is**.undual`: conversion between codomains `α` and `dual α`; ## Missing features (TODO) * Multiplication and division; * `is**.bicompl` : if `x` is a minimum for `f`, `y` is a minimum for `g`, and `op` is a monotone binary operation, then `(x, y)` is a minimum for `uncurry (bicompl op f g)`. From this point of view, `is**.bicomp` is a composition * It would be nice to have a tactic that specializes `comp_(anti)mono` or `bicomp_mono` based on a proof of monotonicity of a given (binary) function. The tactic should maintain a `meta` list of known (anti)monotone (binary) functions with their names, as well as a list of special types of filters, and define the missing lemmas once one of these two lists grows. -/ universe u v w x variable {α :α: Type uType u} {Type u: Type (u+1)β :β: Type vType v} {Type v: Type (v+1)γ :γ: Type wType w} {Type w: Type (w+1)δ :δ: Type xType x} open Set Filter open Filter section Preorder variable [PreorderType x: Type (x+1)β] [Preorderβ: Type vγ] variable (γ: Type wf :f: α → βα →α: Type uβ) (β: Type vs : Sets: Set αα) (α: Type ul : Filterl: Filter αα) (α: Type ua :a: αα) /-! ### Definitions -/ /-- `IsMinFilter f l a` means that `f a ≤ f x` in some `l`-neighborhood of `a` -/ defα: Type uIsMinFilter :IsMinFilter: PropProp := ∀ᶠProp: Typex inx: ?m.80l,l: Filter αff: α → βa ≤a: αff: α → βx #align is_min_filter IsMinFilter /-- `is_maxFilter f l a` means that `f x ≤ f a` in some `l`-neighborhood of `a` -/ defx: ?m.80IsMaxFilter :IsMaxFilter: PropProp := ∀ᶠProp: Typex inx: ?m.145l,l: Filter αff: α → βx ≤x: ?m.145ff: α → βa #align is_max_filter IsMaxFilter /-- `IsExtrFilter f l a` means `IsMinFilter f l a` or `IsMaxFilter f l a` -/ defa: αIsExtrFilter :IsExtrFilter: PropProp := IsMinFilterProp: Typeff: α → βll: Filter αa ∨ IsMaxFiltera: αff: α → βll: Filter αa #align is_extr_filter IsExtrFilter /-- `IsMinOn f s a` means that `f a ≤ f x` for all `x ∈ a`. Note that we do not assume `a ∈ s`. -/ def IsMinOn := IsMinFiltera: αf (𝓟f: α → βs)s: Set αa #align is_min_on IsMinOn /-- `IsMaxOn f s a` means that `f x ≤ f a` for all `x ∈ a`. Note that we do not assume `a ∈ s`. -/ defa: αIsMaxOn := IsMaxFilterIsMaxOn: ?m.352f (𝓟f: α → βs)s: Set αa #align is_max_on IsMaxOn /-- `IsExtrOn f s a` means `IsMinOn f s a` or `IsMaxOn f s a` -/ defa: αIsExtrOn :IsExtrOn: PropProp := IsExtrFilterProp: Typef (𝓟f: α → βs)s: Set αa #align is_extr_on IsExtrOn variable {a: αff: ?m.495ss: ?m.498aa: ?m.501l} {l: ?m.504t : Sett: Set αα} {α: Type ul' : Filterl': Filter αα} theorem IsExtrOn.elim {α: Type up :p: PropProp} : IsExtrOnProp: Typeff: α → βss: Set αa → (IsMinOna: αff: α → βss: Set αa →a: αp) → (IsMaxOnp: Propff: α → βss: Set αa →a: αp) →p: Propp := Or.elim #align is_extr_on.elim IsExtrOn.elim theorem isMinOn_iff : IsMinOnp: Propff: α → βss: Set αa ↔ ∀a: αx ∈x: ?m.731s,s: Set αff: α → βa ≤a: αff: α → βx := Iff.rfl #align is_min_on_iff isMinOn_iff theoremx: ?m.731isMaxOn_iff : IsMaxOnff: α → βss: Set αa ↔ ∀a: αx ∈x: ?m.844s,s: Set αff: α → βx ≤x: ?m.844ff: α → βa := Iff.rfl #align is_max_on_iff isMaxOn_iff theorema: αisMinOn_univ_iff : IsMinOnf univf: α → βa ↔ ∀a: αx,x: ?m.959ff: α → βa ≤a: αff: α → βx := univ_subset_iff.trans eq_univ_iff_forall #align is_min_on_univ_iff isMinOn_univ_iff theorem isMaxOn_univ_iff : IsMaxOnx: ?m.959f univf: α → βa ↔ ∀a: αx,x: ?m.1065ff: α → βx ≤x: ?m.1065ff: α → βa := univ_subset_iff.trans eq_univ_iff_forall #align is_max_on_univ_iff isMaxOn_univ_iff theorema: αIsMinFilter.tendsto_principal_Ici (h : IsMinFilterh: IsMinFilter f l aff: α → βll: Filter αa) : Tendstoa: αff: α → βl (𝓟 <| Ici (l: Filter αff: α → βa)) := tendsto_principal.2a: αh #align is_min_filter.tendsto_principal_Ici IsMinFilter.tendsto_principal_Ici theoremh: IsMinFilter f l aIsMaxFilter.tendsto_principal_Iic (h : IsMaxFilterh: IsMaxFilter f l aff: α → βll: Filter αa) : Tendstoa: αff: α → βl (𝓟 <| Iic (l: Filter αff: α → βa)) := tendsto_principal.2a: αh #align is_max_filter.tendsto_principal_Iic IsMaxFilter.tendsto_principal_Iic /-! ### Conversion to `IsExtr*` -/ theoremh: IsMaxFilter f l aIsMinFilter.isExtr : IsMinFilterIsMinFilter.isExtr: IsMinFilter f l a → IsExtrFilter f l aff: α → βll: Filter αa → IsExtrFiltera: αff: α → βll: Filter αa := Or.inl #align is_min_filter.is_extra: αIsMinFilter.isExtr theoremIsMinFilter.isExtr: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l aIsMaxFilter.isExtr : IsMaxFilterIsMaxFilter.isExtr: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l aff: α → βll: Filter αa → IsExtrFiltera: αff: α → βll: Filter αa := Or.inr #align is_max_filter.is_extra: αIsMaxFilter.isExtr theorem IsMinOn.isExtr (IsMaxFilter.isExtr: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l ah : IsMinOnh: IsMinOn f s aff: α → βss: Set αa) : IsExtrOna: αff: α → βss: Set αa :=a: αIsMinFilter.isExtrIsMinFilter.isExtr: ∀ {α : Type ?u.1765} {β : Type ?u.1764} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l ah #align is_min_on.is_extr IsMinOn.isExtr theoremh: IsMinOn f s aIsMaxOn.isExtr (h : IsMaxOnh: IsMaxOn f s aff: α → βss: Set αa) : IsExtrOna: αff: α → βss: Set αa :=a: αIsMaxFilter.isExtrIsMaxFilter.isExtr: ∀ {α : Type ?u.1917} {β : Type ?u.1916} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l ah #align is_max_on.is_extr IsMaxOn.isExtr /-! ### Constant function -/ theoremh: IsMaxOn f s aisMinFilter_const {isMinFilter_const: ∀ {b : β}, IsMinFilter (fun x => b) l ab :b: ββ} : IsMinFilter (funβ: Type v_ =>_: ?m.2026b)b: βll: Filter αa := univ_mem' funa: α_ => le_rfl #align is_min_filter_const_: ?m.2052isMinFilter_const theoremisMinFilter_const: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsMinFilter (fun x => b) l aisMaxFilter_const {isMaxFilter_const: ∀ {b : β}, IsMaxFilter (fun x => b) l ab :b: ββ} : IsMaxFilter (funβ: Type v_ =>_: ?m.2160b)b: βll: Filter αa := univ_mem' funa: α_ => le_rfl #align is_max_filter_const_: ?m.2186isMaxFilter_const theoremisMaxFilter_const: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsMaxFilter (fun x => b) l aisExtrFilter_const {isExtrFilter_const: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsExtrFilter (fun x => b) l ab :b: ββ} : IsExtrFilter (funβ: Type v_ =>_: ?m.2294b)b: βll: Filter αa :=a: αisMinFilter_const.isMinFilter_const: ∀ {α : Type ?u.2308} {β : Type ?u.2307} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsMinFilter (fun x => b) l aisExtr #align is_extr_filter_constisExtr: ∀ {α : Type ?u.2338} {β : Type ?u.2337} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l aisExtrFilter_const theoremisExtrFilter_const: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsExtrFilter (fun x => b) l aisMinOn_const {b :b: ββ} : IsMinOn (funβ: Type v_ =>_: ?m.2462b)b: βss: Set αa :=a: αisMinFilter_const #align is_min_on_const isMinOn_const theoremisMinFilter_const: ∀ {α : Type ?u.2477} {β : Type ?u.2476} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsMinFilter (fun x => b) l aisMaxOn_const {isMaxOn_const: ∀ {b : β}, IsMaxOn (fun x => b) s ab :b: ββ} : IsMaxOn (funβ: Type v_ =>_: ?m.2584b)b: βss: Set αa :=a: αisMaxFilter_const #align is_max_on_const isMaxOn_const theoremisMaxFilter_const: ∀ {α : Type ?u.2599} {β : Type ?u.2598} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsMaxFilter (fun x => b) l aisExtrOn_const {b :b: ββ} : IsExtrOn (funβ: Type v_ =>_: ?m.2706b)b: βss: Set αa :=a: αisExtrFilter_const #align is_extr_on_const isExtrOn_const /-! ### Order dual -/ open OrderDual (toDual) theoremisExtrFilter_const: ∀ {α : Type ?u.2721} {β : Type ?u.2720} [inst : Preorder β] {l : Filter α} {a : α} {b : β}, IsExtrFilter (fun x => b) l aisMinFilter_dual_iff : IsMinFilter (toDual ∘isMinFilter_dual_iff: IsMinFilter (↑toDual ∘ f) l a ↔ IsMaxFilter f l af)f: α → βll: Filter αa ↔ IsMaxFiltera: αff: α → βll: Filter αa := Iff.rfl #align is_min_filter_dual_iffa: αisMinFilter_dual_iff theoremisMinFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter (↑toDual ∘ f) l a ↔ IsMaxFilter f l aisMaxFilter_dual_iff : IsMaxFilter (toDual ∘isMaxFilter_dual_iff: IsMaxFilter (↑toDual ∘ f) l a ↔ IsMinFilter f l af)f: α → βll: Filter αa ↔ IsMinFiltera: αff: α → βll: Filter αa := Iff.rfl #align is_max_filter_dual_iffa: αisMaxFilter_dual_iff theoremisMaxFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter (↑toDual ∘ f) l a ↔ IsMinFilter f l aisExtrFilter_dual_iff : IsExtrFilter (toDual ∘isExtrFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter (↑toDual ∘ f) l a ↔ IsExtrFilter f l af)f: α → βll: Filter αa ↔ IsExtrFiltera: αff: α → βll: Filter αa := or_comm #align is_extr_filter_dual_iffa: αisExtrFilter_dual_iff aliasisExtrFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter (↑toDual ∘ f) l a ↔ IsExtrFilter f l aisMinFilter_dual_iff ↔isMinFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter (↑toDual ∘ f) l a ↔ IsMaxFilter f l aIsMinFilter.undualIsMinFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter (↑toDual ∘ f) l a → IsMaxFilter f l aIsMaxFilter.dual #align is_min_filter.undualIsMaxFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsMinFilter (↑toDual ∘ f) l aIsMinFilter.undual #align is_max_filter.dualIsMinFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter (↑toDual ∘ f) l a → IsMaxFilter f l aIsMaxFilter.dual aliasIsMaxFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsMinFilter (↑toDual ∘ f) l aisMaxFilter_dual_iff ↔isMaxFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter (↑toDual ∘ f) l a ↔ IsMinFilter f l aIsMaxFilter.undualIsMaxFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter (↑toDual ∘ f) l a → IsMinFilter f l aIsMinFilter.dual #align is_max_filter.undualIsMinFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsMaxFilter (↑toDual ∘ f) l aIsMaxFilter.undual #align is_min_filter.dualIsMaxFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter (↑toDual ∘ f) l a → IsMinFilter f l aIsMinFilter.dual aliasIsMinFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsMaxFilter (↑toDual ∘ f) l aisExtrFilter_dual_iff ↔isExtrFilter_dual_iff: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter (↑toDual ∘ f) l a ↔ IsExtrFilter f l aIsExtrFilter.undualIsExtrFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter (↑toDual ∘ f) l a → IsExtrFilter f l aIsExtrFilter.dual #align is_extr_filter.undualIsExtrFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → IsExtrFilter (↑toDual ∘ f) l aIsExtrFilter.undual #align is_extr_filter.dualIsExtrFilter.undual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter (↑toDual ∘ f) l a → IsExtrFilter f l aIsExtrFilter.dual theorem isMinOn_dual_iff : IsMinOn (toDual ∘IsExtrFilter.dual: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → IsExtrFilter (↑toDual ∘ f) l af)f: α → βss: Set αa ↔ IsMaxOna: αff: α → βss: Set αa := Iff.rfl #align is_min_on_dual_iff isMinOn_dual_iff theorema: αisMaxOn_dual_iff : IsMaxOn (toDual ∘f)f: α → βss: Set αa ↔ IsMinOna: αff: α → βss: Set αa := Iff.rfl #align is_max_on_dual_iff isMaxOn_dual_iff theorema: αisExtrOn_dual_iff : IsExtrOn (toDual ∘f)f: α → βss: Set αa ↔ IsExtrOna: αff: α → βss: Set αa := or_comm #align is_extr_on_dual_iff isExtrOn_dual_iff alias isMinOn_dual_iff ↔ IsMinOn.undual IsMaxOn.dual #align is_min_on.undual IsMinOn.undual #align is_max_on.dual IsMaxOn.dual alias isMaxOn_dual_iff ↔ IsMaxOn.undual IsMinOn.dual #align is_max_on.undual IsMaxOn.undual #align is_min_on.dual IsMinOn.dual alias isExtrOn_dual_iff ↔ IsExtrOn.undual IsExtrOn.dual #align is_extr_on.undual IsExtrOn.undual #align is_extr_on.dual IsExtrOn.dual /-! ### Operations on the filter/set -/ theorema: αIsMinFilter.filter_mono (IsMinFilter.filter_mono: IsMinFilter f l a → l' ≤ l → IsMinFilter f l' ah : IsMinFilterh: IsMinFilter f l aff: α → βll: Filter αa) (a: αhl :hl: l' ≤ ll' ≤l': Filter αl) : IsMinFilterl: Filter αff: α → βl'l': Filter αa :=a: αhlhl: l' ≤ lh #align is_min_filter.filter_monoh: IsMinFilter f l aIsMinFilter.filter_mono theoremIsMinFilter.filter_mono: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMinFilter f l a → l' ≤ l → IsMinFilter f l' aIsMaxFilter.filter_mono (IsMaxFilter.filter_mono: IsMaxFilter f l a → l' ≤ l → IsMaxFilter f l' ah : IsMaxFilterh: IsMaxFilter f l aff: α → βll: Filter αa) (a: αhl :hl: l' ≤ ll' ≤l': Filter αl) : IsMaxFilterl: Filter αff: α → βl'l': Filter αa :=a: αhlhl: l' ≤ lh #align is_max_filter.filter_monoh: IsMaxFilter f l aIsMaxFilter.filter_mono theoremIsMaxFilter.filter_mono: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMaxFilter f l a → l' ≤ l → IsMaxFilter f l' aIsExtrFilter.filter_mono (IsExtrFilter.filter_mono: IsExtrFilter f l a → l' ≤ l → IsExtrFilter f l' ah : IsExtrFilterh: IsExtrFilter f l aff: α → βll: Filter αa) (a: αhl :hl: l' ≤ ll' ≤l': Filter αl) : IsExtrFilterl: Filter αff: α → βl'l': Filter αa :=a: αh.elim (funh: IsExtrFilter f l ah => (h: ?m.4512h.h: ?m.4512filter_monofilter_mono: ∀ {α : Type ?u.4515} {β : Type ?u.4514} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMinFilter f l a → l' ≤ l → IsMinFilter f l' ahl).hl: l' ≤ lisExtr) funisExtr: ∀ {α : Type ?u.4545} {β : Type ?u.4544} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l ah => (h: ?m.4570h.h: ?m.4570filter_monofilter_mono: ∀ {α : Type ?u.4573} {β : Type ?u.4572} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMaxFilter f l a → l' ≤ l → IsMaxFilter f l' ahl).hl: l' ≤ lisExtr #align is_extr_filter.filter_monoisExtr: ∀ {α : Type ?u.4599} {β : Type ?u.4598} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l aIsExtrFilter.filter_mono theoremIsExtrFilter.filter_mono: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsExtrFilter f l a → l' ≤ l → IsExtrFilter f l' aIsMinFilter.filter_inf (IsMinFilter.filter_inf: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ (l' : Filter α), IsMinFilter f (l ⊓ l') ah : IsMinFilterh: IsMinFilter f l aff: α → βll: Filter αa) (a: αl') : IsMinFilterl': Filter αf (f: α → βl ⊓l: Filter αl')l': ?m.4698a :=a: αh.h: IsMinFilter f l afilter_monofilter_mono: ∀ {α : Type ?u.4768} {β : Type ?u.4767} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMinFilter f l a → l' ≤ l → IsMinFilter f l' ainf_le_left #align is_min_filter.filter_infinf_le_left: ∀ {α : Type ?u.4793} [inst : SemilatticeInf α] {a b : α}, a ⊓ b ≤ aIsMinFilter.filter_inf theoremIsMinFilter.filter_inf: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ (l' : Filter α), IsMinFilter f (l ⊓ l') aIsMaxFilter.filter_inf (IsMaxFilter.filter_inf: IsMaxFilter f l a → ∀ (l' : Filter α), IsMaxFilter f (l ⊓ l') ah : IsMaxFilterh: IsMaxFilter f l aff: α → βll: Filter αa) (a: αl') : IsMaxFilterl': ?m.4969f (f: α → βl ⊓l: Filter αl')l': ?m.4969a :=a: αh.h: IsMaxFilter f l afilter_monofilter_mono: ∀ {α : Type ?u.5039} {β : Type ?u.5038} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMaxFilter f l a → l' ≤ l → IsMaxFilter f l' ainf_le_left #align is_max_filter.filter_infinf_le_left: ∀ {α : Type ?u.5064} [inst : SemilatticeInf α] {a b : α}, a ⊓ b ≤ aIsMaxFilter.filter_inf theoremIsMaxFilter.filter_inf: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ (l' : Filter α), IsMaxFilter f (l ⊓ l') aIsExtrFilter.filter_inf (IsExtrFilter.filter_inf: IsExtrFilter f l a → ∀ (l' : Filter α), IsExtrFilter f (l ⊓ l') ah : IsExtrFilterh: IsExtrFilter f l aff: α → βll: Filter αa) (a: αl') : IsExtrFilterl': ?m.5240f (f: α → βl ⊓l: Filter αl')l': ?m.5240a :=a: αh.h: IsExtrFilter f l afilter_monofilter_mono: ∀ {α : Type ?u.5310} {β : Type ?u.5309} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsExtrFilter f l a → l' ≤ l → IsExtrFilter f l' ainf_le_left #align is_extr_filter.filter_infinf_le_left: ∀ {α : Type ?u.5335} [inst : SemilatticeInf α] {a b : α}, a ⊓ b ≤ aIsExtrFilter.filter_inf theorem IsMinOn.on_subset (IsExtrFilter.filter_inf: ∀ {α : Type u} {β : Type v} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ (l' : Filter α), IsExtrFilter f (l ⊓ l') ahf : IsMinOnhf: IsMinOn f t aff: α → βtt: Set αa) (a: αh :h: s ⊆ ts ⊆s: Set αt) : IsMinOnt: Set αff: α → βss: Set αa :=a: αhf.hf: IsMinOn f t afilter_mono <| principal_mono.2filter_mono: ∀ {α : Type ?u.5569} {β : Type ?u.5568} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMinFilter f l a → l' ≤ l → IsMinFilter f l' ah #align is_min_on.on_subset IsMinOn.on_subset theorem IsMaxOn.on_subset (h: s ⊆ thf : IsMaxOnhf: IsMaxOn f t aff: α → βtt: Set αa) (a: αh :h: s ⊆ ts ⊆s: Set αt) : IsMaxOnt: Set αff: α → βss: Set αa :=a: αhf.hf: IsMaxOn f t afilter_mono <| principal_mono.2filter_mono: ∀ {α : Type ?u.5756} {β : Type ?u.5755} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsMaxFilter f l a → l' ≤ l → IsMaxFilter f l' ah #align is_max_on.on_subset IsMaxOn.on_subset theorem IsExtrOn.on_subset (h: s ⊆ thf : IsExtrOnhf: IsExtrOn f t aff: α → βtt: Set αa) (a: αh :h: s ⊆ ts ⊆s: Set αt) : IsExtrOnt: Set αff: α → βss: Set αa :=a: αhf.hf: IsExtrOn f t afilter_mono <| principal_mono.2filter_mono: ∀ {α : Type ?u.5943} {β : Type ?u.5942} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α} {l' : Filter α}, IsExtrFilter f l a → l' ≤ l → IsExtrFilter f l' ah #align is_extr_on.on_subset IsExtrOn.on_subset theoremh: s ⊆ tIsMinOn.inter (hf : IsMinOnhf: IsMinOn f s aff: α → βss: Set αa) (a: αt) : IsMinOnt: ?m.6073f (f: α → βs ∩s: Set αt)t: ?m.6073a :=a: αhf.on_subset (inter_subset_lefthf: IsMinOn f s ass: Set αt) #align is_min_on.inter IsMinOn.inter theoremt: Set αIsMaxOn.inter (hf : IsMaxOnhf: IsMaxOn f s aff: α → βss: Set αa) (a: αt) : IsMaxOnt: ?m.6245f (f: α → βs ∩s: Set αt)t: ?m.6245a :=a: αhf.on_subset (inter_subset_lefthf: IsMaxOn f s ass: Set αt) #align is_max_on.inter IsMaxOn.inter theorem IsExtrOn.inter (t: Set αhf : IsExtrOnhf: IsExtrOn f s aff: α → βss: Set αa) (a: αt) : IsExtrOnt: ?m.6417f (f: α → βs ∩s: Set αt)t: ?m.6417a :=a: αhf.on_subset (inter_subset_lefthf: IsExtrOn f s ass: Set αt) #align is_extr_on.inter IsExtrOn.inter /-! ### Composition with (anti)monotone functions -/ theoremt: Set αIsMinFilter.comp_mono (IsMinFilter.comp_mono: IsMinFilter f l a → ∀ {g : β → γ}, Monotone g → IsMinFilter (g ∘ f) l ahf : IsMinFilterhf: IsMinFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsMinFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa := mem_of_superseta: αhf funhf: IsMinFilter f l a_x_x: ?m.6712hx =>hx: ?m.6715hghg: Monotone ghx #align is_min_filter.comp_monohx: ?m.6715IsMinFilter.comp_mono theoremIsMinFilter.comp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Monotone g → IsMinFilter (g ∘ f) l aIsMaxFilter.comp_mono (IsMaxFilter.comp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Monotone g → IsMaxFilter (g ∘ f) l ahf : IsMaxFilterhf: IsMaxFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsMaxFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa := mem_of_superseta: αhf funhf: IsMaxFilter f l a_x_x: ?m.6943hx =>hx: ?m.6946hghg: Monotone ghx #align is_max_filter.comp_monohx: ?m.6946IsMaxFilter.comp_mono theoremIsMaxFilter.comp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Monotone g → IsMaxFilter (g ∘ f) l aIsExtrFilter.comp_mono (IsExtrFilter.comp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Monotone g → IsExtrFilter (g ∘ f) l ahf : IsExtrFilterhf: IsExtrFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsExtrFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa :=a: αhf.elim (funhf: IsExtrFilter f l ahf => (hf: ?m.7172hf.hf: ?m.7172comp_monocomp_mono: ∀ {α : Type ?u.7176} {β : Type ?u.7175} {γ : Type ?u.7174} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Monotone g → IsMinFilter (g ∘ f) l ahg).hg: Monotone gisExtr) funisExtr: ∀ {α : Type ?u.7219} {β : Type ?u.7218} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l ahf => (hf: ?m.7251hf.hf: ?m.7251comp_monocomp_mono: ∀ {α : Type ?u.7255} {β : Type ?u.7254} {γ : Type ?u.7253} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Monotone g → IsMaxFilter (g ∘ f) l ahg).hg: Monotone gisExtr #align is_extr_filter.comp_monoisExtr: ∀ {α : Type ?u.7292} {β : Type ?u.7291} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l aIsExtrFilter.comp_mono theoremIsExtrFilter.comp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Monotone g → IsExtrFilter (g ∘ f) l aIsMinFilter.comp_antitone (IsMinFilter.comp_antitone: IsMinFilter f l a → ∀ {g : β → γ}, Antitone g → IsMaxFilter (g ∘ f) l ahf : IsMinFilterhf: IsMinFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsMaxFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa :=a: αhf.hf: IsMinFilter f l adual.dual: ∀ {α : Type ?u.7516} {β : Type ?u.7515} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsMaxFilter (↑toDual ∘ f) l acomp_mono funcomp_mono: ∀ {α : Type ?u.7533} {β : Type ?u.7532} {γ : Type ?u.7531} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Monotone g → IsMaxFilter (g ∘ f) l a__: ?m.7609__: ?m.7612h =>h: ?m.7615hghg: Antitone gh #align is_min_filter.comp_antitoneh: ?m.7615IsMinFilter.comp_antitone theoremIsMinFilter.comp_antitone: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Antitone g → IsMaxFilter (g ∘ f) l aIsMaxFilter.comp_antitone (IsMaxFilter.comp_antitone: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Antitone g → IsMinFilter (g ∘ f) l ahf : IsMaxFilterhf: IsMaxFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsMinFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa :=a: αhf.hf: IsMaxFilter f l adual.dual: ∀ {α : Type ?u.7833} {β : Type ?u.7832} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsMinFilter (↑toDual ∘ f) l acomp_mono funcomp_mono: ∀ {α : Type ?u.7850} {β : Type ?u.7849} {γ : Type ?u.7848} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Monotone g → IsMinFilter (g ∘ f) l a__: ?m.7926__: ?m.7929h =>h: ?m.7932hghg: Antitone gh #align is_max_filter.comp_antitoneh: ?m.7932IsMaxFilter.comp_antitone theoremIsMaxFilter.comp_antitone: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Antitone g → IsMinFilter (g ∘ f) l aIsExtrFilter.comp_antitone (IsExtrFilter.comp_antitone: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Antitone g → IsExtrFilter (g ∘ f) l ahf : IsExtrFilterhf: IsExtrFilter f l aff: α → βll: Filter αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsExtrFilter (g: β → γg ∘g: β → γf)f: α → βll: Filter αa :=a: αhf.hf: IsExtrFilter f l adual.dual: ∀ {α : Type ?u.8150} {β : Type ?u.8149} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → IsExtrFilter (↑toDual ∘ f) l acomp_mono funcomp_mono: ∀ {α : Type ?u.8167} {β : Type ?u.8166} {γ : Type ?u.8165} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Monotone g → IsExtrFilter (g ∘ f) l a__: ?m.8236__: ?m.8239h =>h: ?m.8242hghg: Antitone gh #align is_extr_filter.comp_antitoneh: ?m.8242IsExtrFilter.comp_antitone theoremIsExtrFilter.comp_antitone: ∀ {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Antitone g → IsExtrFilter (g ∘ f) l aIsMinOn.comp_mono (hf : IsMinOnhf: IsMinOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsMinOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsMinFilter.comp_monoIsMinFilter.comp_mono: ∀ {α : Type ?u.8463} {β : Type ?u.8462} {γ : Type ?u.8461} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Monotone g → IsMinFilter (g ∘ f) l ahfhf: IsMinOn f s ahg #align is_min_on.comp_mono IsMinOn.comp_mono theoremhg: Monotone gIsMaxOn.comp_mono (hf : IsMaxOnhf: IsMaxOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsMaxOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsMaxFilter.comp_monoIsMaxFilter.comp_mono: ∀ {α : Type ?u.8728} {β : Type ?u.8727} {γ : Type ?u.8726} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Monotone g → IsMaxFilter (g ∘ f) l ahfhf: IsMaxOn f s ahg #align is_max_on.comp_mono IsMaxOn.comp_mono theoremhg: Monotone gIsExtrOn.comp_mono (hf : IsExtrOnhf: IsExtrOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Monotonehg: Monotone gg) : IsExtrOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsExtrFilter.comp_monoIsExtrFilter.comp_mono: ∀ {α : Type ?u.8993} {β : Type ?u.8992} {γ : Type ?u.8991} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Monotone g → IsExtrFilter (g ∘ f) l ahfhf: IsExtrOn f s ahg #align is_extr_on.comp_mono IsExtrOn.comp_mono theoremhg: Monotone gIsMinOn.comp_antitone (hf : IsMinOnhf: IsMinOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsMaxOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsMinFilter.comp_antitoneIsMinFilter.comp_antitone: ∀ {α : Type ?u.9256} {β : Type ?u.9255} {γ : Type ?u.9254} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → ∀ {g : β → γ}, Antitone g → IsMaxFilter (g ∘ f) l ahfhf: IsMinOn f s ahg #align is_min_on.comp_antitone IsMinOn.comp_antitone theorem IsMaxOn.comp_antitone (hg: Antitone ghf : IsMaxOnhf: IsMaxOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsMinOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsMaxFilter.comp_antitoneIsMaxFilter.comp_antitone: ∀ {α : Type ?u.9521} {β : Type ?u.9520} {γ : Type ?u.9519} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → ∀ {g : β → γ}, Antitone g → IsMinFilter (g ∘ f) l ahfhf: IsMaxOn f s ahg #align is_max_on.comp_antitone IsMaxOn.comp_antitone theorem IsExtrOn.comp_antitone (hg: Antitone ghf : IsExtrOnhf: IsExtrOn f s aff: α → βss: Set αa) {a: αg :g: β → γβ →β: Type vγ} (γ: Type whg : Antitonehg: Antitone gg) : IsExtrOn (g: β → γg ∘g: β → γf)f: α → βss: Set αa :=a: αIsExtrFilter.comp_antitoneIsExtrFilter.comp_antitone: ∀ {α : Type ?u.9786} {β : Type ?u.9785} {γ : Type ?u.9784} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α}, IsExtrFilter f l a → ∀ {g : β → γ}, Antitone g → IsExtrFilter (g ∘ f) l ahfhf: IsExtrOn f s ahg #align is_extr_on.comp_antitone IsExtrOn.comp_antitone theoremhg: Antitone gIsMinFilter.bicomp_mono [PreorderIsMinFilter.bicomp_mono: ∀ [inst : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMinFilter f l a → ∀ {g : α → γ}, IsMinFilter g l a → IsMinFilter (fun x => op (f x) (g x)) l aδ] {δ: Type xop :op: β → γ → δβ →β: Type vγ →γ: Type wδ} (hop : (δ: Type x(· ≤ ·) ⇒(· ≤ ·): β → β → Prop(· ≤ ·) ⇒(· ≤ ·): γ → γ → Prop(· ≤ ·))(· ≤ ·): δ → δ → Propopop: β → γ → δop) (op: β → γ → δhf : IsMinFilterhf: IsMinFilter f l aff: α → βll: Filter αa) {a: αg :g: α → γα →α: Type uγ} (γ: Type whg : IsMinFilterhg: IsMinFilter g l agg: α → γll: Filter αa) : IsMinFilter (funa: αx =>x: ?m.10257op (op: β → γ → δff: α → βx) (x: ?m.10257gg: α → γx))x: ?m.10257ll: Filter αa := mem_of_superset (inter_mema: αhfhf: IsMinFilter f l ahg) funhg: IsMinFilter g l a_x ⟨hfx, hgx⟩ => hop hfx hgx #align is_min_filter.bicomp_mono_x: ?m.10333IsMinFilter.bicomp_mono theoremIsMinFilter.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMinFilter f l a → ∀ {g : α → γ}, IsMinFilter g l a → IsMinFilter (fun x => op (f x) (g x)) l aIsMaxFilter.bicomp_mono [PreorderIsMaxFilter.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMaxFilter f l a → ∀ {g : α → γ}, IsMaxFilter g l a → IsMaxFilter (fun x => op (f x) (g x)) l aδ] {δ: Type xop :op: β → γ → δβ →β: Type vγ →γ: Type wδ} (hop : (δ: Type x(· ≤ ·) ⇒(· ≤ ·): β → β → Prop(· ≤ ·) ⇒(· ≤ ·): γ → γ → Prop(· ≤ ·))(· ≤ ·): δ → δ → Propopop: β → γ → δop) (op: β → γ → δhf : IsMaxFilterhf: IsMaxFilter f l aff: α → βll: Filter αa) {a: αg :g: α → γα →α: Type uγ} (γ: Type whg : IsMaxFilterhg: IsMaxFilter g l agg: α → γll: Filter αa) : IsMaxFilter (funa: αx =>x: ?m.10917op (op: β → γ → δff: α → βx) (x: ?m.10917gg: α → γx))x: ?m.10917ll: Filter αa := mem_of_superset (inter_mema: αhfhf: IsMaxFilter f l ahg) funhg: IsMaxFilter g l a_x ⟨hfx, hgx⟩ => hop hfx hgx #align is_max_filter.bicomp_mono_x: ?m.10993IsMaxFilter.bicomp_mono -- No `Extr` version because we need `hf` and `hg` to be of the same kind theoremIsMaxFilter.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMaxFilter f l a → ∀ {g : α → γ}, IsMaxFilter g l a → IsMaxFilter (fun x => op (f x) (g x)) l aIsMinOn.bicomp_mono [PreorderIsMinOn.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {s : Set α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMinOn f s a → ∀ {g : α → γ}, IsMinOn g s a → IsMinOn (fun x => op (f x) (g x)) s aδ] {δ: Type xop :op: β → γ → δβ →β: Type vγ →γ: Type wδ} (hop : (δ: Type x(· ≤ ·) ⇒(· ≤ ·): β → β → Prop(· ≤ ·) ⇒(· ≤ ·): γ → γ → Prop(· ≤ ·))(· ≤ ·): δ → δ → Propopop: β → γ → δop) (op: β → γ → δhf : IsMinOnhf: IsMinOn f s aff: α → βss: Set αa) {a: αg :g: α → γα →α: Type uγ} (γ: Type whg : IsMinOnhg: IsMinOn g s agg: α → γss: Set αa) : IsMinOn (funa: αx =>x: ?m.11579op (op: β → γ → δff: α → βx) (x: ?m.11579gg: α → γx))x: ?m.11579ss: Set αa :=a: αIsMinFilter.bicomp_mono hopIsMinFilter.bicomp_mono: ∀ {α : Type ?u.11640} {β : Type ?u.11639} {γ : Type ?u.11638} {δ : Type ?u.11637} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMinFilter f l a → ∀ {g : α → γ}, IsMinFilter g l a → IsMinFilter (fun x => op (f x) (g x)) l ahfhf: IsMinOn f s ahg #align is_min_on.bicomp_monohg: IsMinOn g s aIsMinOn.bicomp_mono theoremIsMinOn.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {s : Set α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMinOn f s a → ∀ {g : α → γ}, IsMinOn g s a → IsMinOn (fun x => op (f x) (g x)) s aIsMaxOn.bicomp_mono [PreorderIsMaxOn.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {s : Set α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMaxOn f s a → ∀ {g : α → γ}, IsMaxOn g s a → IsMaxOn (fun x => op (f x) (g x)) s aδ] {δ: Type xop :op: β → γ → δβ →β: Type vγ →γ: Type wδ} (hop : (δ: Type x(· ≤ ·) ⇒(· ≤ ·): β → β → Prop(· ≤ ·) ⇒(· ≤ ·): γ → γ → Prop(· ≤ ·))(· ≤ ·): δ → δ → Propopop: β → γ → δop) (op: β → γ → δhf : IsMaxOnhf: IsMaxOn f s aff: α → βss: Set αa) {a: αg :g: α → γα →α: Type uγ} (γ: Type whg : IsMaxOnhg: IsMaxOn g s agg: α → γss: Set αa) : IsMaxOn (funa: αx =>x: ?m.12179op (op: β → γ → δff: α → βx) (x: ?m.12179gg: α → γx))x: ?m.12179ss: Set αa :=a: αIsMaxFilter.bicomp_mono hopIsMaxFilter.bicomp_mono: ∀ {α : Type ?u.12240} {β : Type ?u.12239} {γ : Type ?u.12238} {δ : Type ?u.12237} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {l : Filter α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMaxFilter f l a → ∀ {g : α → γ}, IsMaxFilter g l a → IsMaxFilter (fun x => op (f x) (g x)) l ahfhf: IsMaxOn f s ahg #align is_max_on.bicomp_monohg: IsMaxOn g s aIsMaxOn.bicomp_mono /-! ### Composition with `Tendsto` -/ theoremIsMaxOn.bicomp_mono: ∀ {α : Type u} {β : Type v} {γ : Type w} {δ : Type x} [inst : Preorder β] [inst_1 : Preorder γ] {f : α → β} {s : Set α} {a : α} [inst_2 : Preorder δ] {op : β → γ → δ}, ((fun x x_1 => x ≤ x_1) ⇒ (fun x x_1 => x ≤ x_1) ⇒ fun x x_1 => x ≤ x_1) op op → IsMaxOn f s a → ∀ {g : α → γ}, IsMaxOn g s a → IsMaxOn (fun x => op (f x) (g x)) s aIsMinFilter.comp_tendsto {IsMinFilter.comp_tendsto: ∀ {g : δ → α} {l' : Filter δ} {b : δ}, IsMinFilter f l (g b) → Tendsto g l' l → IsMinFilter (f ∘ g) l' bg :g: δ → αδ →δ: Type xα} {α: Type ul' : Filterl': Filter δδ} {δ: Type xb :b: δδ} (δ: Type xhf : IsMinFilterhf: IsMinFilter f l (g b)ff: α → βl (l: Filter αgg: δ → αb)) (b: δhg : Tendstohg: Tendsto g l' lgg: δ → αl'l': Filter δl) : IsMinFilter (l: Filter αf ∘f: α → βg)g: δ → αl'l': Filter δb :=b: δhghg: Tendsto g l' lhf #align is_min_filter.comp_tendstohf: IsMinFilter f l (g b)IsMinFilter.comp_tendsto theoremIsMinFilter.comp_tendsto: ∀ {α : Type u} {β : Type v} {δ : Type x} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMinFilter f l (g b) → Tendsto g l' l → IsMinFilter (f ∘ g) l' bIsMaxFilter.comp_tendsto {IsMaxFilter.comp_tendsto: ∀ {g : δ → α} {l' : Filter δ} {b : δ}, IsMaxFilter f l (g b) → Tendsto g l' l → IsMaxFilter (f ∘ g) l' bg :g: δ → αδ →δ: Type xα} {α: Type ul' : Filterl': Filter δδ} {δ: Type xb :b: δδ} (δ: Type xhf : IsMaxFilterhf: IsMaxFilter f l (g b)ff: α → βl (l: Filter αgg: δ → αb)) (b: δhg : Tendstohg: Tendsto g l' lgg: δ → αl'l': Filter δl) : IsMaxFilter (l: Filter αf ∘f: α → βg)g: δ → αl'l': Filter δb :=b: δhghg: Tendsto g l' lhf #align is_max_filter.comp_tendstohf: IsMaxFilter f l (g b)IsMaxFilter.comp_tendsto theoremIsMaxFilter.comp_tendsto: ∀ {α : Type u} {β : Type v} {δ : Type x} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMaxFilter f l (g b) → Tendsto g l' l → IsMaxFilter (f ∘ g) l' bIsExtrFilter.comp_tendsto {IsExtrFilter.comp_tendsto: ∀ {α : Type u} {β : Type v} {δ : Type x} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsExtrFilter f l (g b) → Tendsto g l' l → IsExtrFilter (f ∘ g) l' bg :g: δ → αδ →δ: Type xα} {α: Type ul' : Filterl': Filter δδ} {δ: Type xb :b: δδ} (δ: Type xhf : IsExtrFilterhf: IsExtrFilter f l (g b)ff: α → βl (l: Filter αgg: δ → αb)) (b: δhg : Tendstohg: Tendsto g l' lgg: δ → αl'l': Filter δl) : IsExtrFilter (l: Filter αf ∘f: α → βg)g: δ → αl'l': Filter δb :=b: δhf.elim (funhf: IsExtrFilter f l (g b)hf => (hf: ?m.12955hf.hf: ?m.12955comp_tendstocomp_tendsto: ∀ {α : Type ?u.12959} {β : Type ?u.12958} {δ : Type ?u.12957} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMinFilter f l (g b) → Tendsto g l' l → IsMinFilter (f ∘ g) l' bhg).hg: Tendsto g l' lisExtr) funisExtr: ∀ {α : Type ?u.12996} {β : Type ?u.12995} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMinFilter f l a → IsExtrFilter f l ahf => (hf: ?m.13028hf.hf: ?m.13028comp_tendstocomp_tendsto: ∀ {α : Type ?u.13032} {β : Type ?u.13031} {δ : Type ?u.13030} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMaxFilter f l (g b) → Tendsto g l' l → IsMaxFilter (f ∘ g) l' bhg).hg: Tendsto g l' lisExtr #align is_extr_filter.comp_tendstoisExtr: ∀ {α : Type ?u.13063} {β : Type ?u.13062} [inst : Preorder β] {f : α → β} {l : Filter α} {a : α}, IsMaxFilter f l a → IsExtrFilter f l aIsExtrFilter.comp_tendsto theorem IsMinOn.on_preimage (IsExtrFilter.comp_tendsto: ∀ {α : Type u} {β : Type v} {δ : Type x} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsExtrFilter f l (g b) → Tendsto g l' l → IsExtrFilter (f ∘ g) l' bg :g: δ → αδ →δ: Type xα) {α: Type ub :b: δδ} (δ: Type xhf : IsMinOnhf: IsMinOn f s (g b)ff: α → βs (s: Set αgg: δ → αb)) : IsMinOn (b: δf ∘f: α → βg) (g: δ → αg ⁻¹'g: δ → αs)s: Set αb :=b: δhf.hf: IsMinOn f s (g b)comp_tendsto (tendsto_principal_principal.mpr <| Subset.reflcomp_tendsto: ∀ {α : Type ?u.13243} {β : Type ?u.13242} {δ : Type ?u.13241} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMinFilter f l (g b) → Tendsto g l' l → IsMinFilter (f ∘ g) l' b_) #align is_min_on.on_preimage IsMinOn.on_preimage theorem_: Set ?m.13313IsMaxOn.on_preimage (g :g: δ → αδ →δ: Type xα) {α: Type ub :b: δδ} (δ: Type xhf : IsMaxOnhf: IsMaxOn f s (g b)ff: α → βs (s: Set αgg: δ → αb)) : IsMaxOn (b: δf ∘f: α → βg) (g: δ → αg ⁻¹'g: δ → αs)s: Set αb :=b: δhf.hf: IsMaxOn f s (g b)comp_tendsto (tendsto_principal_principal.mpr <| Subset.reflcomp_tendsto: ∀ {α : Type ?u.13486} {β : Type ?u.13485} {δ : Type ?u.13484} [inst : Preorder β] {f : α → β} {l : Filter α} {g : δ → α} {l' : Filter δ} {b : δ}, IsMaxFilter f l (g b) → Tendsto g l' l → IsMaxFilter (f ∘ g) l' b_) #align is_max_on.on_preimage IsMaxOn.on_preimage theorem IsExtrOn.on_preimage (_: Set ?m.13556g :g: δ → αδ →δ: Type xα) {α: Type ub :b: δδ} (δ: Type xhf : IsExtrOnhf: IsExtrOn f s (g b)ff: α → βs (s: Set αgg: δ → αb)) : IsExtrOn (b: δf ∘f: α → βg) (g: δ → αg ⁻¹'g: δ → αs)s: Set αb :=b: δhf.elim (funhf: IsExtrOn f s (g b)hf => (hf: ?m.13756hf.on_preimagehf: ?m.13756g).g: δ → αisExtr) funhf => (hf: ?m.13827hf.on_preimagehf: ?m.13827g).g: δ → αisExtr #align is_extr_on.on_preimage IsExtrOn.on_preimage theoremIsMinOn.comp_mapsTo {t : Sett: Set δδ} {δ: Type xg :g: δ → αδ →δ: Type xα} {α: Type ub :b: δδ} (δ: Type xhf : IsMinOnhf: IsMinOn f s aff: α → βss: Set αa) (a: αhg : MapsTohg: MapsTo g t sgg: δ → αtt: Set δs) (s: Set αha :ha: g b = agg: δ → αb =b: δa) : IsMinOn (a: αf ∘f: α → βg)g: δ → αtt: Set δb := funb: δyy: ?m.14056hy =>hy: ?m.14059Goals accomplished! 🐙#align is_min_on.comp_maps_to IsMinOn.comp_mapsTo theoremGoals accomplished! 🐙IsMaxOn.comp_mapsTo {t : Sett: Set δδ} {δ: Type xg :g: δ → αδ →δ: Type xα} {α: Type ub :b: δδ} (δ: Type xhf : IsMaxOnhf: IsMaxOn f s aff: α → βss: Set αa) (a: αhg : MapsTohg: MapsTo g t sgg: δ → αtt: Set δs) (s: Set αha :ha: g b = agg: δ → αb =b: δa) : IsMaxOn (a: αf ∘f: α → βg)g: δ → αtt: Set δb :=b: δhf.dual.comp_mapsTohf: IsMaxOn f s ahghg: MapsTo g t sha #align is_max_on.comp_maps_to IsMaxOn.comp_mapsTo theoremha: g b = aIsExtrOn.comp_mapsTo {t : Sett: Set δδ} {δ: Type xg :g: δ → αδ →δ: Type xα} {α: Type ub :b: δδ} (δ: Type xhf : IsExtrOnhf: IsExtrOn f s aff: α → βss: Set αa) (a: αhg : MapsTohg: MapsTo g t sgg: δ → αtt: Set δs) (s: Set α