Fixed point construction on complete lattices
Least fixed point of a monotone function
Equations
- lfp f = has_Inf.Inf {a : α | f a ≤ a}
Greatest fixed point of a monotone function
Equations
- gfp f = has_Sup.Sup {a : α | a ≤ f a}
Equations
- fixed_points.prev f x = gfp (λ (z : α), x ⊓ f z)
Equations
- fixed_points.next f x = lfp (λ (z : α), x ⊔ f z)
theorem
fixed_points.prev_le
{α : Type u}
[complete_lattice α]
{f : α → α}
{x : α} :
fixed_points.prev f x ≤ x
theorem
fixed_points.prev_eq
{α : Type u}
[complete_lattice α]
{f : α → α}
(hf : monotone f)
{a : α} :
f a ≤ a → fixed_points.prev f a = f (fixed_points.prev f a)
def
fixed_points.prev_fixed
{α : Type u}
[complete_lattice α]
{f : α → α}
(hf : monotone f)
(a : α) :
f a ≤ a → ↥(function.fixed_points f)
Equations
- fixed_points.prev_fixed hf a h = ⟨fixed_points.prev f a, _⟩
theorem
fixed_points.next_le
{α : Type u}
[complete_lattice α]
{f : α → α}
{x : α} :
x ≤ fixed_points.next f x
theorem
fixed_points.next_eq
{α : Type u}
[complete_lattice α]
{f : α → α}
(hf : monotone f)
{a : α} :
a ≤ f a → fixed_points.next f a = f (fixed_points.next f a)
def
fixed_points.next_fixed
{α : Type u}
[complete_lattice α]
{f : α → α}
(hf : monotone f)
(a : α) :
a ≤ f a → ↥(function.fixed_points f)
Equations
- fixed_points.next_fixed hf a h = ⟨fixed_points.next f a, _⟩
theorem
fixed_points.sup_le_f_of_fixed_points
{α : Type u}
[complete_lattice α]
(f : α → α)
(hf : monotone f)
(x y : ↥(function.fixed_points f)) :
theorem
fixed_points.f_le_inf_of_fixed_points
{α : Type u}
[complete_lattice α]
(f : α → α)
(hf : monotone f)
(x y : ↥(function.fixed_points f)) :
theorem
fixed_points.Sup_le_f_of_fixed_points
{α : Type u}
[complete_lattice α]
(f : α → α)
(hf : monotone f)
(A : set α) :
A ⊆ function.fixed_points f → has_Sup.Sup A ≤ f (has_Sup.Sup A)
theorem
fixed_points.f_le_Inf_of_fixed_points
{α : Type u}
[complete_lattice α]
(f : α → α)
(hf : monotone f)
(A : set α) :
A ⊆ function.fixed_points f → f (has_Inf.Inf A) ≤ has_Inf.Inf A
The fixed points of f
form a complete lattice.
This cannot be an instance, since it depends on the monotonicity of f
.
Equations
- fixed_points.complete_lattice f hf = {sup := λ (x y : ↥(function.fixed_points f)), fixed_points.next_fixed hf (x.val ⊔ y.val) _, le := λ (x y : ↥(function.fixed_points f)), x.val ≤ y.val, lt := bounded_lattice.lt._default (λ (x y : ↥(function.fixed_points f)), x.val ≤ y.val), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := λ (x y : ↥(function.fixed_points f)), fixed_points.prev_fixed hf (x.val ⊓ y.val) _, inf_le_left := _, inf_le_right := _, le_inf := _, top := fixed_points.prev_fixed hf ⊤ _, le_top := _, bot := fixed_points.next_fixed hf ⊥ _, bot_le := _, Sup := λ (A : set ↥(function.fixed_points f)), fixed_points.next_fixed hf (has_Sup.Sup (subtype.val '' A)) _, Inf := λ (A : set ↥(function.fixed_points f)), fixed_points.prev_fixed hf (has_Inf.Inf (subtype.val '' A)) _, le_Sup := _, Sup_le := _, Inf_le := _, le_Inf := _}