|
Lattice Land Core Library
|
#include <primitive_upset.hpp>
Public Types | |
| using | pre_universe = PreUniverse |
| using | value_type = typename pre_universe::value_type |
| using | memory_type = Mem |
| using | this_type = PrimitiveUpset<pre_universe, memory_type> |
| using | dual_type = PrimitiveUpset<typename pre_universe::dual_type, memory_type> |
| template<class M > | |
| using | this_type2 = PrimitiveUpset<pre_universe, M> |
| using | local_type = this_type2<battery::local_memory> |
| template<class M > | |
| using | flat_type = FlatUniverse<typename pre_universe::increasing_type, M> |
Public Member Functions | |
| CUDA constexpr | PrimitiveUpset () |
| CUDA constexpr | PrimitiveUpset (value_type x) |
| CUDA constexpr | PrimitiveUpset (const this_type &other) |
| constexpr | PrimitiveUpset (this_type &&other)=default |
| template<class M > | |
| CUDA constexpr | PrimitiveUpset (const this_type2< M > &other) |
| template<class M > | |
| CUDA constexpr this_type & | operator= (const this_type2< M > &other) |
| CUDA constexpr this_type & | operator= (const this_type &other) |
| CUDA constexpr value_type | value () const |
| CUDA constexpr | operator value_type () const |
| CUDA constexpr local::BInc | is_top () const |
| CUDA constexpr local::BDec | is_bot () const |
| CUDA constexpr this_type & | tell_top () |
| template<class M1 , class M2 > | |
| CUDA constexpr this_type & | tell (const this_type2< M1 > &other, BInc< M2 > &has_changed) |
| template<class M1 > | |
| CUDA constexpr this_type & | tell (const this_type2< M1 > &other) |
| CUDA constexpr this_type & | dtell_bot () |
| template<class M1 , class M2 > | |
| CUDA constexpr this_type & | dtell (const this_type2< M1 > &other, BInc< M2 > &has_changed) |
| template<class M1 > | |
| CUDA constexpr this_type & | dtell (const this_type2< M1 > &other) |
| template<class Env > | |
| CUDA NI TFormula< typename Env::allocator_type > | deinterpret (AVar avar, const Env &env) const |
| template<class F > | |
| CUDA NI F | deinterpret () const |
| CUDA constexpr bool | extract (local_type &ua) const |
| CUDA NI void | print () const |
Static Public Member Functions | |
| 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 bool | is_supported_fun (Sig sig) |
| static CUDA constexpr local_type | next (const this_type2< Mem > &a) |
| static CUDA constexpr local_type | prev (const this_type2< Mem > &a) |
| template<Sig sig, class M > | |
| static CUDA constexpr local_type | fun (const flat_type< M > &a) |
| template<Sig sig, class M1 , class M2 > | |
| static CUDA constexpr local_type | fun (const flat_type< M1 > &a, const flat_type< M2 > &b) |
| template<Sig sig, class Pre1 , class Mem1 , class Pre2 , class Mem2 > | |
| static CUDA constexpr local_type | guarded_div (const PrimitiveUpset< Pre1, Mem1 > &a, const PrimitiveUpset< Pre2, Mem2 > &b) |
| template<Sig sig, class M1 , class M2 > | |
| static CUDA constexpr local_type | fun (const this_type2< M1 > &a, const this_type2< M2 > &b) |
Static Public Attributes | |
| static constexpr const bool | is_abstract_universe = true |
| static constexpr const bool | sequential = Mem::sequential |
| static constexpr const bool | is_totally_ordered = pre_universe::is_totally_ordered |
| static constexpr const bool | preserve_bot = pre_universe::preserve_bot |
| static constexpr const bool | preserve_top = pre_universe::preserve_top |
| static constexpr const bool | preserve_join = pre_universe::preserve_join |
| static constexpr const bool | preserve_meet = pre_universe::preserve_meet |
| static constexpr const bool | injective_concretization = pre_universe::injective_concretization |
| static constexpr const bool | preserve_concrete_covers = pre_universe::preserve_concrete_covers |
| static constexpr const bool | complemented = pre_universe::complemented |
| static constexpr const bool | increasing = pre_universe::increasing |
| static constexpr const char * | name = pre_universe::name |
| static constexpr const bool | is_arithmetic = pre_universe::is_arithmetic |
Friends | |
| template<class Pre2 , class Mem2 > | |
| class | PrimitiveUpset |
| using lala::PrimitiveUpset< PreUniverse, Mem >::pre_universe = PreUniverse |
| using lala::PrimitiveUpset< PreUniverse, Mem >::value_type = typename pre_universe::value_type |
| using lala::PrimitiveUpset< PreUniverse, Mem >::memory_type = Mem |
| using lala::PrimitiveUpset< PreUniverse, Mem >::this_type = PrimitiveUpset<pre_universe, memory_type> |
| using lala::PrimitiveUpset< PreUniverse, Mem >::dual_type = PrimitiveUpset<typename pre_universe::dual_type, memory_type> |
| using lala::PrimitiveUpset< PreUniverse, Mem >::this_type2 = PrimitiveUpset<pre_universe, M> |
| using lala::PrimitiveUpset< PreUniverse, Mem >::local_type = this_type2<battery::local_memory> |
| using lala::PrimitiveUpset< PreUniverse, Mem >::flat_type = FlatUniverse<typename pre_universe::increasing_type, M> |
|
inlineconstexpr |
Initialize an upset universe to bottom.
|
inlineconstexpr |
Similar to \([\![x \geq_A i]\!]\) for any name x where \( \geq_A \) is the lattice order.
|
inlineconstexpr |
|
constexprdefault |
|
inlineconstexpr |
|
inlinestaticconstexpr |
A pre-interpreted formula x >= value ready to use. This is mainly for optimization purpose to avoid calling interpret each time we need it.
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
Similar to \([\![\mathit{true}]\!]\) if preserve_bot is true.
|
inlinestaticconstexpr |
Similar to \([\![\mathit{false}]\!]\) if preserve_top is true.
|
inlineconstexpr |
The assignment operator can only be used in a sequential context. It is monotone but not extensive.
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
true whenever \( a = \top \), false otherwise.
|
inlineconstexpr |
true whenever \( a = \bot \), false otherwise.
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inline |
x is a variable's name and i the current value. If U preserves bottom true is returned whenever \( a = \bot \), if it preserves top false is returned whenever \( a = \top \). 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.
|
inline |
Deinterpret the current value to a logical constant.
|
inlineconstexpr |
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 \).
|
inline |
Print the current element.
|
inlinestatic |
Expects a predicate of the form x <op> k, k <op> x or x in 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() and =. Existential formula \( \exists{x:T} \) can also be interpreted (only to bottom) depending on the underlying pre-universe.
|
inlinestatic |
Expects a predicate of the form x <op> k or k <op> x, 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 !=.
|
inlinestatic |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
|
inlinestaticconstexpr |
Unary function of type Sig: FlatUniverse -> PrimitiveUpset.
a is bot, we return the bottom element of the upset lattice; and dually for top. Otherwise, we apply the function Sig to a and return the result.
|
inlinestaticconstexpr |
Binary functions of type Sig: FlatUniverse x FlatUniverse -> PrimitiveUpset.
a or b is bot, we return the bottom element of the upset lattice; and dually for top. Otherwise, we apply the function Sig to a and b and return the result.
|
inlinestaticconstexpr |
Given two values a and b, we perform the division while taking care of the case where b == 0. When b != 0, the result is fun<sig>(a, b). Otherwise, the result depends on the type of a and b:
a | b | local_type | Result |
|---|---|---|---|
| Inc | Inc | Inc | 0 |
| Inc | Dec | Dec | 0 |
| Dec | Dec | Inc | 0 |
| Dec | Inc | Dec | 0 |
| - | - | - | bot() |
|
inlinestaticconstexpr |
|
friend |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |