#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 >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::is_abstract_universe = true |
|
staticconstexpr |
◆ sequential
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::sequential = Mem::sequential |
|
staticconstexpr |
◆ is_totally_ordered
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::is_totally_ordered = pre_universe::is_totally_ordered |
|
staticconstexpr |
◆ preserve_bot
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::preserve_bot = pre_universe::preserve_bot |
|
staticconstexpr |
◆ preserve_top
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::preserve_top = pre_universe::preserve_top |
|
staticconstexpr |
◆ preserve_join
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::preserve_join = pre_universe::preserve_join |
|
staticconstexpr |
◆ preserve_meet
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::preserve_meet = pre_universe::preserve_meet |
|
staticconstexpr |
◆ injective_concretization
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::injective_concretization = pre_universe::injective_concretization |
|
staticconstexpr |
◆ preserve_concrete_covers
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::preserve_concrete_covers = pre_universe::preserve_concrete_covers |
|
staticconstexpr |
◆ is_lower_bound
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::is_lower_bound = pre_universe::is_lower_bound |
|
staticconstexpr |
◆ is_upper_bound
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::is_upper_bound = pre_universe::is_upper_bound |
|
staticconstexpr |
◆ name
template<class PreUniverse , class Mem >
| constexpr const char* lala::ArithBound< PreUniverse, Mem >::name = pre_universe::name |
|
staticconstexpr |
◆ is_arithmetic
template<class PreUniverse , class Mem >
| constexpr const bool lala::ArithBound< PreUniverse, Mem >::is_arithmetic = pre_universe::is_arithmetic |
|
staticconstexpr |
The documentation for this class was generated from the following file: