Fixed point construction on complete lattices #
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
Greatest fixed point of a monotone function
theorem
order_hom.lfp_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(h : ⇑f a ≤ a) :
⇑order_hom.lfp f ≤ a
theorem
order_hom.lfp_le_fixed
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(h : ⇑f a = a) :
⇑order_hom.lfp f ≤ a
theorem
order_hom.le_lfp
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(h : ∀ (b : α), ⇑f b ≤ b → a ≤ b) :
a ≤ ⇑order_hom.lfp f
theorem
order_hom.map_le_lfp
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(ha : a ≤ ⇑order_hom.lfp f) :
⇑f a ≤ ⇑order_hom.lfp f
@[simp]
theorem
order_hom.map_lfp
{α : Type u}
[complete_lattice α]
(f : α →o α) :
⇑f (⇑order_hom.lfp f) = ⇑order_hom.lfp f
theorem
order_hom.lfp_le_map
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(ha : ⇑order_hom.lfp f ≤ a) :
⇑order_hom.lfp f ≤ ⇑f a
theorem
order_hom.is_least_lfp_le
{α : Type u}
[complete_lattice α]
(f : α →o α) :
is_least {a : α | ⇑f a ≤ a} (⇑order_hom.lfp f)
theorem
order_hom.lfp_induction
{α : Type u}
[complete_lattice α]
(f : α →o α)
{p : α → Prop}
(step : ∀ (a : α), p a → a ≤ ⇑order_hom.lfp f → p (⇑f a))
(hSup : ∀ (s : set α), (∀ (a : α), a ∈ s → p a) → p (Sup s)) :
p (⇑order_hom.lfp f)
theorem
order_hom.le_gfp
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(h : a ≤ ⇑f a) :
a ≤ ⇑order_hom.gfp f
theorem
order_hom.gfp_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(h : ∀ (b : α), b ≤ ⇑f b → b ≤ a) :
⇑order_hom.gfp f ≤ a
@[simp]
theorem
order_hom.map_gfp
{α : Type u}
[complete_lattice α]
(f : α →o α) :
⇑f (⇑order_hom.gfp f) = ⇑order_hom.gfp f
theorem
order_hom.map_le_gfp
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(ha : a ≤ ⇑order_hom.gfp f) :
⇑f a ≤ ⇑order_hom.gfp f
theorem
order_hom.gfp_le_map
{α : Type u}
[complete_lattice α]
(f : α →o α)
{a : α}
(ha : ⇑order_hom.gfp f ≤ a) :
⇑order_hom.gfp f ≤ ⇑f a
theorem
order_hom.is_greatest_gfp_le
{α : Type u}
[complete_lattice α]
(f : α →o α) :
is_greatest {a : α | a ≤ ⇑f a} (⇑order_hom.gfp f)
theorem
order_hom.gfp_induction
{α : Type u}
[complete_lattice α]
(f : α →o α)
{p : α → Prop}
(step : ∀ (a : α), p a → ⇑order_hom.gfp f ≤ a → p (⇑f a))
(hInf : ∀ (s : set α), (∀ (a : α), a ∈ s → p a) → p (Inf s)) :
p (⇑order_hom.gfp f)
theorem
order_hom.map_lfp_comp
{α : Type u}
{β : Type v}
[complete_lattice α]
[complete_lattice β]
(f : β →o α)
(g : α →o β) :
⇑f (⇑order_hom.lfp (g.comp f)) = ⇑order_hom.lfp (f.comp g)
theorem
order_hom.map_gfp_comp
{α : Type u}
{β : Type v}
[complete_lattice α]
[complete_lattice β]
(f : β →o α)
(g : α →o β) :
⇑f (⇑order_hom.gfp (g.comp f)) = ⇑order_hom.gfp (f.comp g)
theorem
order_hom.gfp_const_inf_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
(x : α) :
⇑order_hom.gfp (⇑(order_hom.const α) x ⊓ f) ≤ x
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), _⟩
theorem
order_hom.prev_fixed_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : ⇑f x ≤ x) :
↑(f.prev_fixed x hx) ≤ x
theorem
order_hom.le_next_fixed
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : x ≤ ⇑f x) :
x ≤ ↑(f.next_fixed x hx)
theorem
order_hom.next_fixed_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : x ≤ ⇑f x)
{y : ↥(function.fixed_points ⇑f)}
(h : x ≤ ↑y) :
f.next_fixed x hx ≤ y
@[simp]
theorem
order_hom.next_fixed_le_iff
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : x ≤ ⇑f x)
{y : ↥(function.fixed_points ⇑f)} :
f.next_fixed x hx ≤ y ↔ x ≤ ↑y
@[simp]
theorem
order_hom.le_prev_fixed_iff
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : ⇑f x ≤ x)
{y : ↥(function.fixed_points ⇑f)} :
y ≤ f.prev_fixed x hx ↔ ↑y ≤ x
theorem
order_hom.le_prev_fixed
{α : Type u}
[complete_lattice α]
(f : α →o α)
{x : α}
(hx : ⇑f x ≤ x)
{y : ↥(function.fixed_points ⇑f)}
(h : ↑y ≤ x) :
y ≤ f.prev_fixed x hx
theorem
order_hom.le_map_sup_fixed_points
{α : Type u}
[complete_lattice α]
(f : α →o α)
(x y : ↥(function.fixed_points ⇑f)) :
theorem
order_hom.map_inf_fixed_points_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
(x y : ↥(function.fixed_points ⇑f)) :
theorem
order_hom.le_map_Sup_subset_fixed_points
{α : Type u}
[complete_lattice α]
(f : α →o α)
(A : set α)
(hA : A ⊆ function.fixed_points ⇑f) :
theorem
order_hom.map_Inf_subset_fixed_points_le
{α : Type u}
[complete_lattice α]
(f : α →o α)
(A : set α)
(hA : A ⊆ function.fixed_points ⇑f) :
@[protected, instance]
def
fixed_points.function.fixed_points.semilattice_sup
{α : Type u}
[complete_lattice α]
(f : α →o α) :
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 := _}
@[protected, instance]
def
fixed_points.function.fixed_points.semilattice_inf
{α : Type u}
[complete_lattice α]
(f : α →o α) :
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 := _}
@[protected, instance]
def
fixed_points.function.fixed_points.complete_semilattice_Sup
{α : Type u}
[complete_lattice α]
(f : α →o α) :
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 (Sup (coe '' s)) _, le_Sup := _, Sup_le := _}
@[protected, instance]
def
fixed_points.function.fixed_points.complete_semilattice_Inf
{α : Type u}
[complete_lattice α]
(f : α →o α) :
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 (Inf (coe '' s)) _, Inf_le := _, le_Inf := _}
@[protected, instance]
def
fixed_points.function.fixed_points.complete_lattice
{α : Type u}
[complete_lattice α]
(f : α →o α) :
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 := _}