Fixed point construction on complete lattices #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file sets up the basic theory of fixed points of a monotone function in a complete lattice.
Main definitions #
order_hom.lfp
: The least fixed point of a bundled monotone function.order_hom.gfp
: The greatest fixed point of a bundled monotone function.order_hom.prev_fixed
: The greatest fixed point of a bundled monotone function smaller than or equal to a given element.order_hom.next_fixed
: The least fixed point of a bundled monotone function greater than or equal to a given element.fixed_points.complete_lattice
: The Knaster-Tarski theorem: fixed points of a monotone self-map of a complete lattice form themselves a complete lattice.
Tags #
fixed point, complete lattice, monotone function
Least fixed point of a monotone function
Equations
- order_hom.lfp = {to_fun := λ (f : α →o α), has_Inf.Inf {a : α | ⇑f a ≤ a}, monotone' := _}
Greatest fixed point of a monotone function
Equations
- order_hom.gfp = {to_fun := λ (f : α →o α), has_Sup.Sup {a : α | a ≤ ⇑f a}, monotone' := _}
Previous fixed point of a monotone map. If f
is a monotone self-map of a complete lattice and
x
is a point such that f x ≤ x
, then f.prev_fixed x hx
is the greatest fixed point of f
that is less than or equal to x
.
Equations
- f.prev_fixed x hx = ⟨⇑order_hom.gfp (⇑(order_hom.const α) x ⊓ f), _⟩
Next fixed point of a monotone map. If f
is a monotone self-map of a complete lattice and
x
is a point such that x ≤ f x
, then f.next_fixed x hx
is the least fixed point of f
that is greater than or equal to x
.
Equations
- f.next_fixed x hx = ⟨⇑order_hom.lfp (⇑(order_hom.const α) x ⊔ f), _⟩
Equations
- fixed_points.function.fixed_points.semilattice_sup f = {sup := λ (x y : ↥(function.fixed_points ⇑f)), f.next_fixed (↑x ⊔ ↑y) _, le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _}
Equations
- fixed_points.function.fixed_points.semilattice_inf f = {inf := λ (x y : ↥(function.fixed_points ⇑f)), f.prev_fixed (↑x ⊓ ↑y) _, le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- fixed_points.function.fixed_points.complete_semilattice_Sup f = {le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, Sup := λ (s : set ↥(function.fixed_points ⇑f)), f.next_fixed (has_Sup.Sup (coe '' s)) _, le_Sup := _, Sup_le := _}
Equations
- fixed_points.function.fixed_points.complete_semilattice_Inf f = {le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, Inf := λ (s : set ↥(function.fixed_points ⇑f)), f.prev_fixed (has_Inf.Inf (coe '' s)) _, Inf_le := _, le_Inf := _}
Knaster-Tarski Theorem: The fixed points of f
form a complete lattice.
Equations
- fixed_points.function.fixed_points.complete_lattice f = {sup := semilattice_sup.sup (fixed_points.function.fixed_points.semilattice_sup f), le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ function.fixed_points ⇑f)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := semilattice_inf.inf (fixed_points.function.fixed_points.semilattice_inf f), inf_le_left := _, inf_le_right := _, le_inf := _, Sup := complete_semilattice_Sup.Sup (fixed_points.function.fixed_points.complete_semilattice_Sup f), le_Sup := _, Sup_le := _, Inf := complete_semilattice_Inf.Inf (fixed_points.function.fixed_points.complete_semilattice_Inf f), Inf_le := _, le_Inf := _, top := ⟨⇑order_hom.gfp f, _⟩, bot := ⟨⇑order_hom.lfp f, _⟩, le_top := _, bot_le := _}