#include <arith_bound.hpp>
|
static CUDA constexpr this_type | geq_k (value_type k) |
|
static CUDA constexpr this_type | leq_k (value_type k) |
|
static CUDA constexpr local_type | bot () |
|
static CUDA constexpr local_type | top () |
|
template<bool diagnose = false, class F , class Env , class M2 > |
CUDA static NI bool | interpret_tell (const F &f, const Env &, this_type2< M2 > &tell, IDiagnostics &diagnostics) |
|
template<bool diagnose = false, class F , class Env , class M2 > |
CUDA static NI bool | interpret_ask (const F &f, const Env &, this_type2< M2 > &ask, IDiagnostics &diagnostics) |
|
template<IKind kind, bool diagnose = false, class F , class Env , class M2 > |
CUDA static NI bool | interpret (const F &f, const Env &env, this_type2< M2 > &value, IDiagnostics &diagnostics) |
|
static CUDA constexpr local_type | next (const this_type2< Mem > &a) |
|
static CUDA constexpr local_type | prev (const this_type2< Mem > &a) |
|
static CUDA constexpr bool | is_trivial_fun (Sig fun) |
|
static CUDA constexpr bool | is_order_preserving_fun (Sig fun) |
|
|
template<class Pre2 , class Mem2 > |
class | ArithBound |
|
◆ pre_universe
template<class PreUniverse , class Mem >
◆ value_type
template<class PreUniverse , class Mem >
using lala::ArithBound< PreUniverse, Mem >::value_type = typename pre_universe::value_type |
◆ memory_type
template<class PreUniverse , class Mem >
◆ this_type
template<class PreUniverse , class Mem >
◆ dual_type
template<class PreUniverse , class Mem >
◆ this_type2
template<class PreUniverse , class Mem >
template<class M >
◆ local_type
template<class PreUniverse , class Mem >
◆ flat_type
template<class PreUniverse , class Mem >
template<class M >
◆ local_flat_type
template<class PreUniverse , class Mem >
◆ atomic_type
template<class PreUniverse , class Mem >
◆ ArithBound() [1/5]
template<class PreUniverse , class Mem >
Initialize an upset universe to top.
◆ ArithBound() [2/5]
template<class PreUniverse , class Mem >
Similar to \([\![x \leq_A i]\!]\) for any name x
where \( \leq_A \) is the lattice order.
◆ ArithBound() [3/5]
template<class PreUniverse , class Mem >
◆ ArithBound() [4/5]
template<class PreUniverse , class Mem >
◆ ArithBound() [5/5]
template<class PreUniverse , class Mem >
template<class M >
◆ geq_k()
template<class PreUniverse , class Mem >
A pre-interpreted formula x >= value
ready to use. This is mainly for optimization purpose to avoid calling interpret
each time we need it.
◆ leq_k()
template<class PreUniverse , class Mem >
◆ bot()
template<class PreUniverse , class Mem >
Similar to \([\![\mathit{false}]\!]\) if preserve_bot
is true.
◆ top()
template<class PreUniverse , class Mem >
Similar to \([\![\mathit{true}]\!]\) if preserve_top
is true.
◆ operator=() [1/2]
template<class PreUniverse , class Mem >
template<class M >
The assignment operator can only be used in a sequential context. It is monotone but not extensive.
◆ operator=() [2/2]
template<class PreUniverse , class Mem >
◆ value()
template<class PreUniverse , class Mem >
◆ atomic()
template<class PreUniverse , class Mem >
◆ operator value_type()
template<class PreUniverse , class Mem >
◆ is_top()
template<class PreUniverse , class Mem >
- Returns
true
whenever \( a = \top \), false
otherwise. @parallel @order-preserving @increasing
◆ is_bot()
template<class PreUniverse , class Mem >
- Returns
true
whenever \( a = \bot \), false
otherwise. @parallel @order-preserving @decreasing
◆ join_top()
template<class PreUniverse , class Mem >
◆ join()
template<class PreUniverse , class Mem >
template<class M1 >
◆ meet_bot()
template<class PreUniverse , class Mem >
◆ meet()
template<class PreUniverse , class Mem >
template<class M1 >
◆ deinterpret() [1/2]
template<class PreUniverse , class Mem >
template<class Env , class Allocator = typename Env::allocator_type>
CUDA NI TFormula< Allocator > lala::ArithBound< PreUniverse, Mem >::deinterpret |
( |
AVar | avar, |
|
|
const Env & | env, |
|
|
const Allocator & | allocator = Allocator() ) const |
|
inline |
- Returns
- \( x <op> i \) where
x
is a variable's name, i
the current value and <op>
depends on the underlying universe. If U
preserves top, true
is returned whenever \( a = \top \), if it preserves bottom false
is returned whenever \( a = \bot \). We always return an exact approximation, hence for any formula \( \llbracket \varphi \rrbracket = a \), we must have \( a = \llbracket \rrbracket a \llbracket \rrbracket \) where \( \rrbracket a \llbracket \) is the deinterpretation function.
◆ deinterpret() [2/2]
template<class PreUniverse , class Mem >
template<class F >
Deinterpret the current value to a logical constant.
◆ extract()
template<class PreUniverse , class Mem >
Under-approximates the current element \( a \) w.r.t. \( \rrbracket a \llbracket \) into ua
. For this abstract universe, it always returns true
since the current element \( a \) is an exact representation of \( \rrbracket a \llbracket \).
◆ print()
template<class PreUniverse , class Mem >
Print the current element.
◆ interpret_tell()
template<class PreUniverse , class Mem >
template<bool diagnose = false, class F , class Env , class M2 >
Expects a predicate of the form x <op> k
where x
is any variable's name, and k
a constant. The symbol <op>
is expected to be U::sig_order()
, U::sig_strict_order()
, =
or in
. Existential formula \( \exists{x:T} \) can also be interpreted (only to top) depending on the underlying pre-universe.
◆ interpret_ask()
template<class PreUniverse , class Mem >
template<bool diagnose = false, class F , class Env , class M2 >
Expects a predicate of the form x <op> k
where x
is any variable's name, and k
a constant. The symbol <op>
is expected to be U::sig_order()
, U::sig_strict_order()
or !=
.
◆ interpret()
template<class PreUniverse , class Mem >
template<
IKind kind, bool diagnose = false, class F , class Env , class M2 >
◆ next()
template<class PreUniverse , class Mem >
◆ prev()
template<class PreUniverse , class Mem >
◆ project() [1/4]
template<class PreUniverse , class Mem >
Unary function of type fun: FlatUniverse -> ArithBound
. If a
is bot
, we meet with bottom in-place. Otherwise, we apply the function fun
to a
and meet the result.
◆ project() [2/4]
template<class PreUniverse , class Mem >
◆ is_trivial_fun()
template<class PreUniverse , class Mem >
In this universe, the non-trivial order-preserving functions are {min, max, +}.
◆ is_order_preserving_fun()
template<class PreUniverse , class Mem >
static CUDA constexpr bool lala::ArithBound< PreUniverse, Mem >::is_order_preserving_fun |
( |
Sig | fun | ) |
|
|
inlinestaticconstexpr |
The functions that are order-preserving on the natural order of the universe of discourse, and its dual.
◆ project() [3/4]
template<class PreUniverse , class Mem >
◆ project() [4/4]
template<class PreUniverse , class Mem >
◆ ArithBound
template<class PreUniverse , class Mem >
template<class Pre2 , class Mem2 >
◆ is_abstract_universe
template<class PreUniverse , class Mem >
◆ sequential
template<class PreUniverse , class Mem >
◆ is_totally_ordered
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::is_totally_ordered = pre_universe::is_totally_ordered |
|
staticconstexpr |
◆ preserve_bot
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::preserve_bot = pre_universe::preserve_bot |
|
staticconstexpr |
◆ preserve_top
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::preserve_top = pre_universe::preserve_top |
|
staticconstexpr |
◆ preserve_join
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::preserve_join = pre_universe::preserve_join |
|
staticconstexpr |
◆ preserve_meet
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::preserve_meet = pre_universe::preserve_meet |
|
staticconstexpr |
◆ injective_concretization
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::injective_concretization = pre_universe::injective_concretization |
|
staticconstexpr |
◆ preserve_concrete_covers
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::preserve_concrete_covers = pre_universe::preserve_concrete_covers |
|
staticconstexpr |
◆ is_lower_bound
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::is_lower_bound = pre_universe::is_lower_bound |
|
staticconstexpr |
◆ is_upper_bound
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::is_upper_bound = pre_universe::is_upper_bound |
|
staticconstexpr |
◆ name
template<class PreUniverse , class Mem >
◆ is_arithmetic
template<class PreUniverse , class Mem >
const bool lala::ArithBound< PreUniverse, Mem >::is_arithmetic = pre_universe::is_arithmetic |
|
staticconstexpr |
The documentation for this class was generated from the following file: