Lattice Land Core Library
|
#include <pre_fub.hpp>
Public Types | |
using | this_type = PreFUB<VT> |
using | dual_type = PreFLB<VT> |
using | value_type = VT |
using | lower_bound_type = dual_type |
using | upper_bound_type = this_type |
Static Public Member Functions | |
CUDA static constexpr value_type | zero () |
CUDA static constexpr value_type | one () |
template<bool diagnose, class F > | |
static CUDA bool | interpret_tell (const F &f, value_type &k, IDiagnostics &diagnostics) |
template<bool diagnose, class F > | |
static CUDA bool | interpret_ask (const F &f, value_type &k, IDiagnostics &diagnostics) |
template<bool diagnose, class F , bool dualize = false> | |
CUDA static NI bool | interpret_type (const F &f, value_type &k, IDiagnostics &diagnostics) |
template<class F > | |
static CUDA F | deinterpret (const value_type &v) |
static CUDA constexpr Sig | sig_order () |
static CUDA constexpr Sig | sig_strict_order () |
static CUDA constexpr value_type | bot () |
static CUDA constexpr value_type | top () |
static CUDA constexpr value_type | join (value_type x, value_type y) |
static CUDA constexpr value_type | meet (value_type x, value_type y) |
static CUDA constexpr bool | order (value_type x, value_type y) |
static CUDA constexpr bool | strict_order (value_type x, value_type y) |
static CUDA constexpr value_type | next (value_type x) |
static CUDA constexpr value_type | prev (value_type x) |
static CUDA constexpr value_type | project (Sig fun, value_type x) |
static CUDA constexpr value_type | project (Sig fun, value_type x, value_type y) |
Static Public Attributes | |
static constexpr const bool | is_totally_ordered = true |
static constexpr const bool | preserve_bot = true |
static constexpr const bool | preserve_top = true |
static constexpr const bool | preserve_join = true |
static constexpr const bool | preserve_meet = true |
static constexpr const bool | injective_concretization = true |
static constexpr const bool | preserve_concrete_covers = false |
static constexpr const bool | is_lower_bound = false |
static constexpr const bool | is_upper_bound = true |
static constexpr const char * | name = "FUB" |
static constexpr const bool | is_arithmetic = true |
PreFUB
is a pre-abstract universe \( \langle \mathbb{F}\setminus\{NaN\}, \leq \rangle \) totally ordered by the floating-point arithmetic comparison operator. We work on a subset of floating-point numbers without NaN. It is used to represent (and possibly approximate) constraints of the form \( x \leq k \) where \( k \) is a real number.
using lala::PreFUB< VT >::this_type = PreFUB<VT> |
using lala::PreFUB< VT >::dual_type = PreFLB<VT> |
using lala::PreFUB< VT >::value_type = VT |
using lala::PreFUB< VT >::lower_bound_type = dual_type |
using lala::PreFUB< VT >::upper_bound_type = this_type |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestatic |
Interpret a constant in the lattice of increasing floating-point numbers FInc
according to the downset semantics. Interpretations: Formulas of kind F::Z
might be over-approximated (if the integer cannot be represented in a floating-point number because it is too large). Formulas of kind F::R
might be over-approximated to the upper bound of the interval (if the real number is represented by an interval [lb..ub] where lb != ub). Other kind of formulas are not supported.
|
inlinestatic |
Same as interpret_tell
but the constant is under-approximated instead.
|
inlinestatic |
Verify if the type of a variable, introduced by an existential quantifier, is compatible with the current abstract universe. Interpretations: Variables of type Int
are always over-approximated ( \( \mathbb{Z} \subseteq \gamma(\top) \)). Variables of type Real
are represented exactly (only initially because \( \mathbb{R} = \gamma(\top) \)).
|
inlinestatic |
|
inlinestaticconstexpr |
The logical predicate symbol corresponding to the order of this pre-universe. We have \( a \leq_\mathit{FInc} b \Leftrightarrow a \leq b \).
LEQ
.
|
inlinestaticconstexpr |
The logical predicate symbol corresponding to the strict order of this pre-universe. We have \( a <_\mathit{FInc} b \Leftrightarrow a < b \).
LT
.
|
inlinestaticconstexpr |
\( \bot \) is represented by the floating-point negative infinity value.
|
inlinestaticconstexpr |
\( \top \) is represented by the floating-point positive infinity value.
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
From a lattice perspective, this function returns an element \( y \) such that \( y \) is a cover of \( x \).
|
inlinestaticconstexpr |
From a lattice perspective, this function returns an element \( y \) such that \( x \) is a cover of \( y \).
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
Note that -0 and +0 are treated as the same element.
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |