| Copyright | Benjamin Jones 2016 |
|---|---|
| License | ISC |
| Maintainer | bjones@galois.com |
| Stability | experimental |
| Portability | unknown |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Language.Sally.Types
Description
This module defines types reflecting the basic Sally input language sections and base types.
- data Name
- textFromName :: Name -> Text
- nameFromT :: Text -> Name
- nameFromS :: String -> Name
- catNamesWith :: Text -> Name -> Name -> Name
- bangNames :: Name -> Name -> Name
- scoreNames :: Name -> Name -> Name
- nextName :: Name -> Name
- stateName :: Name -> Name
- inputName :: Name -> Name
- varFromName :: Name -> SallyVar
- data SallyBaseType
- data SallyConst
- data SallyState = SallyState {
- sName :: Name
- sVars :: [(Name, SallyBaseType)]
- sInVars :: [(Name, SallyBaseType)]
- data SallyPred
- newtype SallyVar = SallyVar {
- textFromVar :: Text
- data SallyArith
- data SallyExpr
- class ToSallyExpr a where
- data SallyStateFormula = SallyStateFormula {}
- type SallyLet = (SallyVar, SallyExpr)
- data SallyTransition = SallyTransition {}
- data SallySystem = SallySystem {}
- data TrResult = TrResult {}
Name type
A Name is a wrapped up strict Text.
catNamesWith :: Text -> Name -> Name -> Name Source #
Concatenate names with the given seperating text in between
scoreNames :: Name -> Name -> Name Source #
Concatenate names with an underscore separated in between
Base types
data SallyBaseType Source #
Base data types in Sally: Booleans, (mathematical) Integers, and (mathematical) Reals
Instances
data SallyConst Source #
A defined constant. For our purposes, a real number is represented (approximated) by an exact rational number.
Constructors
| SConstBool Bool | |
| SConstInt Integer | |
| SConstReal Rational |
Instances
Types for defining transition systems
data SallyState Source #
The state type in Sally
This consists of 1) a name for the type, 2) a set of state variables (and their associated base type) and, 3) (optionally) a set in input variabels which are uninterpreted in the model; they can be thought of as varying non-deterministically in any system trace.
Constructors
| SallyState | |
Fields
| |
Instances
Predicates
Constructors
| SPConst Bool | boolean constant |
| SPExpr SallyExpr | a boolean valued expression |
| SPAnd (Seq SallyPred) | and |
| SPOr (Seq SallyPred) | or |
| SPImpl SallyPred SallyPred | implication |
| SPNot SallyPred | logical negation |
| SPEq SallyExpr SallyExpr | == |
| SPLEq SallyExpr SallyExpr | <= |
| SPGEq SallyExpr SallyExpr | = |
| SPLt SallyExpr SallyExpr | < |
| SPGt SallyExpr SallyExpr |
A SallyVar is a wrapped up variable name.
Constructors
| SallyVar | |
Fields
| |
data SallyArith Source #
Arithmetic terms
Constructors
| SAAdd SallyExpr SallyExpr | addition |
| SAMult SallyExpr SallyExpr | constant mult |
| SADiv SallyExpr SallyExpr | constant division |
| SAExpr SallyExpr | general expression |
Instances
Expressions
class ToSallyExpr a where Source #
A typeclass for types that can be converted to a SallyExpr.
Minimal complete definition
data SallyStateFormula Source #
A named formula over a state type
Constructors
| SallyStateFormula | |
Instances
type SallyLet = (SallyVar, SallyExpr) Source #
A "let" binding: each let binds a SallyVar to a Sally expression,
which can be a constant literal, a predicate (boolean value), or an
arithmetic expression.
data SallyTransition Source #
A transition over a given state type
Constructors
| SallyTransition | |
Instances
data SallySystem Source #
A transition system declaration
Constructors
| SallySystem | |
Instances
| Eq SallySystem Source # | |
| Show SallySystem Source # | |
| ToSExp SallySystem Source # | Pretty print a |
The result of translation, a specific form of the Sally AST.
Constructors
| TrResult | |
Fields
| |