This module contains some basic definitions and results from domain theory, intended to be used as
the underlying construction of the partial_fixpoint feature. It is not meant to be used as a
general purpose library for domain theory, but can be of interest to users who want to extend
the partial_fixpoint machinery (e.g. mark more functions as monotone or register more monads).
This follows the corresponding Isabelle development, as also described in Alexander Krauss: Recursive Definitions of Monadic Functions.
A partial order is a reflexive, transitive and antisymmetric relation.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
- rel : α → α → Prop
A “less-or-equal-to” or “approximates” relation.
This is intended to be used in the construction of
partial_fixpoint, and not meant to be used otherwise. - rel_refl {x : α} : rel x x
The “less-or-equal-to” or “approximates” relation is reflexive.
The “less-or-equal-to” or “approximates” relation is transitive.
The “less-or-equal-to” or “approximates” relation is antisymmetric.
Instances
A “less-or-equal-to” or “approximates” relation.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
A chain is a totally ordered set (representing a set as a predicate).
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
is_meet x y w states that w is a greatest lower bound of x and y.
This is intended to be used in the construction of the strong induction principles of
inductive_fixpoint and coinductive_fixpoint, and not meant to be used otherwise.
Instances For
A chain-complete partial order (CCPO) is a partial order where every chain has a least upper bound.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used
otherwise.
The least upper bound of chains exists.
Instances
The bottom element is the least upper bound of the empty chain.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
A complete lattice is a partial order where every subset has a least upper bound.
The least upper bound of an arbitrary subset exists.
Instances
Instances For
Instances For
A function is monotone if it maps related elements to related elements.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
A predicate is admissible if it can be transferred from the elements of a chain to the chains least upper bound. Such predicates can be used in fixpoint induction.
This definition implies P ⊥. Sometimes (e.g. in Isabelle) the empty chain is excluded
from this definition, and P ⊥ is a separate condition of the induction predicate.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
Instances For
Park induction principle for least fixpoint.
In general, this construction does not require monotonicity of f.
Monotonicity is required to show that lfp f is indeed a fixpoint of f.
Park induction for least fixpoint of a monotone function f.
Takes an explicit witness of f being monotone.
Strong Park induction for the least fixpoint of a monotone function f: to show lfp f ⊑ x,
it suffices to show f w ⊑ x where w is a greatest lower bound of x and lfp f.
The meet is passed as an explicit witness w (together with a proof of is_meet x (lfp f) w)
so that callers can supply a definitionally convenient form of it.
This is intended to be used in the construction of the strong induction principles of
inductive_fixpoint and coinductive_fixpoint, and not meant to be used otherwise.
Same as lfp_le_of_le_meet, but uses the version of lfp that takes a witness of monotonicity.
This is intended to be used in the construction of the strong induction principles of
inductive_fixpoint and coinductive_fixpoint, and not meant to be used otherwise.
The transfinite iteration of a function f is a set that is ⊥ and is closed under application
of f and csup.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
- step {α : Sort u} [CCPO α] {f : α → α} {x : α} : iterates f x → iterates f (f x)
- sup {α : Sort u} [CCPO α] {f : α → α} {c : α → Prop} (hc : chain c) (hi : ∀ (x : α), c x → iterates f x) : iterates f (CCPO.csup hc)
Instances For
The least fixpoint of a monotone function is the least upper bound of its transfinite iteration.
The monotone f assumption is not strictly necessarily for the definition, but without this the
definition is not very meaningful and it simplifies applying theorems like fix_eq if every use of
fix already has the monotonicity requirement.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
The main fixpoint theorem for fixed points of monotone functions in chain-complete partial orders.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
The fixpoint induction theme: An admissible predicate holds for a least fixpoint if it is preserved by the fixpoint's function.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
A pointwise greatest lower bound is a greatest lower bound in the pointwise order.
Instances For
Instances For
Instances For
Instances For
The order on α × β is the order on α ×' β at the two components.
A pair is below p when both components are below the components of p.
A pair with the first component of p is below p when its second component is below the
second component of p.
The suprema of α × β are those of α ×' β at the two components.
FlatOrder b wraps the type α with the flat partial order generated by ∀ x, b ⊑ x.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
Instances For
The class MonoBind m indicates that every m α has a PartialOrder, and that the bind operation
on m is monotone in both arguments with regard to that order.
This is intended to be used in the construction of partial_fixpoint, and not meant to be used otherwise.
- bind_mono_left {α β : Type u} {a₁ a₂ : m α} {f : α → m β} (h : PartialOrder.rel a₁ a₂) : PartialOrder.rel (a₁ >>= f) (a₂ >>= f)
- bind_mono_right {α β : Type u} {a : m α} {f₁ f₂ : α → m β} (h : ∀ (x : α), PartialOrder.rel (f₁ x) (f₂ x)) : PartialOrder.rel (a >>= f₁) (a >>= f₂)
Instances
In the implication order the meet of two propositions is their conjunction.
In the reverse implication order the meet of two propositions is their disjunction.