The definition of the operations on the abstract domain used for call types, in/out types, and verification of programs.
Author: Michael Hanus
Version: October 2023
valueAnalysis
:: Analysis AType
The CASS analysis to approximate result values. |
emptyType
:: AType
Abstract representation of no possible value. |
isEmptyType
:: AType -> Bool
Does an abstract type represent no value? |
anyType
:: AType
Abstract representation of the type of all values. |
isAnyType
:: AType -> Bool
Does an abstract type represent any value? |
lubType
:: AType -> AType -> AType
Least upper bound of abstract values. |
joinType
:: AType -> AType -> AType
Join two abstract values. |
aCons
:: (String,String) -> [AType] -> AType
The representation of a constructor application to a list of abstract argument types. |
aLit
:: Literal -> AType
|
litAsCons
:: Literal -> (String,String)
The representation of a literal as a constructor. |
consOfType
:: AType -> [(String,String)]
The list of top-level constructors covered by an abstract type. |
argTypesOfCons
:: (String,String) -> Int -> AType -> [AType]
The argument types of an abstract type (given as the last argument) when it matches a given constructor/arity. |
showType
:: AType -> String
Shows an abstract value. |
The type of the abstract domain.
Type synonym: AType = AType
The CASS analysis to approximate result values. |
Abstract representation of no possible value.
|
Does an abstract type represent no value?
|
Abstract representation of the type of all values.
|
Does an abstract type represent any value?
|
Join two abstract values.
The result is |
The representation of a constructor application to a list of abstract argument types.
|
The list of top-level constructors covered by an abstract type.
The list is empty for
|
The argument types of an abstract type (given as the last argument) when it matches a given constructor/arity. For the top constructor domain, the arguments have always any type. |