Changelog for grisette-0.13.0.1
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.13.0.0 -- 2025-07-03
Added
- Added missing instances for
ArithException. (#292) - [Breaking] Added
Integralinstances forSymInteger,SymIntN, andSymWordN. Also make(/),recipandlogBaseno longer throw errors forSymAlgReal. These functions are "unsafe" and should be used with caution as they expose undefined behavior for some inputs. (#293) - Added
MergingIndextype class for types that can be used as indices in a 'SortedStrategy'. (#294) - Added
makeGrisetteADTandmakeGrisetteBasicADTfor easier use of ADTs with Grisette. (#295, #303) - Added
Concretetype class to tag the types guaranteed to be fully concrete. (#296) - Added
SymBoolKey/UnionKeytypes that is an alias forAsKey SymBoolandAsKey1 Union, respectively. (#301)
Changed
- Removed
Showconstraints for merging indices. (#294) - [Breaking] Removed
Hashableinstances forSymBool, and also,Eqnow errors when called. AddedAsKeywrapper to recover the original behavior. (#299) - Make
GetDatanow accept one parameter instead of two so thatGetData modecan be used as a type in a context where we want a monad. TheBaseMonadis now a type alias ofGetData. (#302) - [Breaking] Renamed
PlainUniontoUnionView. (#302) - Implemented
UnionViewforIdentity. (#302) - Added unified versions of
simpleMergeandonUnionthat usesUnionView. (#302)
0.12.0.0 -- 2025-04-12
Added
- Added derivation of
Mergeableinstances usingNoStrategy. (#269) - Added
filterExactNumArgsandfilterLeqNumArgsfor filtering classes that accepts type constructors with exactly or at most \(n\) arguments. Added more list of classes. (#269) - Added derivation for
MergeableusingNoStrategy. (#270) - Added derivation for cereal and binary serializations. (#271)
- Added unconstrained positions for derivation. (#273)
- Added
AsMetadatatype class andMetadatapattern for embedding and extracting values from metadata represented as an S-expression. (#277) - Improved
SupportedNonFuncPrimandBasicSymPrimconstraints. (#278) - Provided better patterns for term analysis. (#280)
- Added
PPrintinstances forSomeTermandTerm. (#281) - Types with
SimpleMergeableinstances now have defaultITEOpinstances. (#290)
Changed
- Derivation of
PPrintno longer relies onOverloadedStringsextension. (#268) - The
choose*Freshfunctions will not try its best to minimize the size of the guards. (#283) EvalModeConvertibleis now reflexive. (#284)- [Breaking] Renamed
deriveGADTtoderive. (#286)
Fixed
- Fixed the derivation for empty data types. (#272)
0.11.0.0 -- 2024-12-29
Added
- Added
deriveGADTfor deriving all relevant instances for GADTs. (#267) - Added
EvalModeConvertiblefor a unified constraint for the evaluation modes that can be converted to each other withToConandToSym. (#267)
Changed
- [Breaking] We no longer support direct
toConfrom a union to a single value ortoSymfrom a single value to a union. These should now be done throughmrgToSym,toUnionSym, andunionToCon. (#267) - [Breaking] Changed the
EvalModetag forContoCandSymtoS. (#267)
Fixed
- Fixed some missing constraints for unified interfaces. (#267)
- Fixed badly staged types in the lifting of terms. (#267)
- Fixed the
Readinstance for bit-vectors on GHC 9.12. (#267)
Removed
- Removed old template-haskell-based derivation mechanism. (#267)
0.10.0.0 -- 2024-12-11
Added
SomeBVnow allows being used under conditionals even if no bit-width is specified. (#261)- Added interface to smart constructor generation with decapitalized names. (#263)
- Added
SymPrimconstraints for symbolic primitive types. (#264) - Added initial support for type class derivation for GADTs. (#265)
Changed
- [Breaking] Improved the
SymFiniteBitsinterface. (#262) - [Breaking] Changed the smart constructor generation Template Haskell procedure
name to
makeSmartCtorWith,makePrefixedSmartCtorWith,makeNamedSmartCtor, andmakeSmartCtor. (#263) - [Breaking] Renamed the evaluation mode tags
ConandSymtoCandS. (#264)
0.9.0.0 -- 2024-11-07
Added
- Added missing instances for concrete general and tabular functions. (#249)
- Added eval mode constraint on demand. (#250)
- Added support for uninterpreted functions in unified interfaces. (#250)
- Added instances for concrete
Ratiotype. (#251) - Added serialization for the core constructs. (#253)
- Added partial evaluation for distinct. (#254)
Changed
- [Breaking] Moved the constraints for the general and tabular functions and simplified their instances declaration. (#249)
- [Breaking] Renamed
EvalModetoEvalModeAll, renamedMonadWithModetoMonadEvalModeAll. (#250) - Improved parallel symbolic evaluation performance. (#252)
- [Breaking] Changed the metadata for identifiers from existential arguments to s-expressions. (#253)
- [Breaking] Changed the solving/cegis results from maintaining the exception themselves to maintaining a textual representation of them. (#253)
- [Breaking] Changed the 'VerifierResult' type for CEGIS to allow it report that the verifier cannot find a counter example. (#257)
Fixed
- Fixed memory leak within the term cache. (#252)
- Fixed printing of bv terms. (#255)
- Fixed solverGenericCEGIS and make it also return the last failing cex. (#256)
solverGenericCEGISwill only rerun possible verifiers now. This will improve overall verification performance. (#258)- Fixed a critical bug in the lowering/evalSym/extractSym where the intermediate states are not properly memoized. (#259)
0.8.0.0 -- 2024-08-13
Added
- Added pretty printer for models. (#225)
- Added support for algebraic reals (
AlgRealandSymAlgReal). (#228, #229) - Added support for quantifiers. (#230)
- Added
SafeFdiv,SafeLogBase,DivOr,FdivOr, andLogBaseOr. (#228, #231) - Added bitcast from and to
Bool,IntN,WordN,FPand their symbolic counterparts when appropriate. (#232) - Add
SymFromIntegral. (#233) - Add operations for concrete floating point numbers. Add IEEE754-2019
fpMinimum,fpMinimumNumber,fpMaximum, andfpMaximumNumberoperations. (#235) - Add conversion from and to floating points. (#236)
- Add
SymFiniteBits. (#237) - Add unified instances for all provided operations, including
FPandAlgReal. (#239, #240, #243) - Allow the use of number literals for
SomeBV. (#245) - Add
symDistinct. (#246, #247)
Fixed
- Fixed model parsing for floating points. (#227)
- Allowed
mkUnifiedConstructorto be used with types without modes or args. (#242)
Changed
- [Breaking] Changed the operand order for
liftPFormatPrec2andliftPFormatList2. (#225) - [Breaking] Changed the term representation with a compile-time tag for its
kind (
AnyKindfor all symbols andConstantKindfor symbols other than uninterpreted functions). This also affects the 'ExtractSym'. A newextractSymMaybewill regard this tag if not all symbols can be casted to that tag.extractSymwill always succeed, returning a set withAnyKind. (#230) - [Breaking]
SafeDivisionrenamed toSafeDiv. (#231) - Refined the template-haskell-based derivation mechanism. (#238)
- [Breaking]
GetDatais made injective by givingIdentitywrapped type for concrete evaluation instead of the type itself. (#242) - Changed pprint for
Identityto not to print the constructor. (#242) - Make
ToSymrequires the target type to beMergeable. This enable us to merge the results for converting fromUnion atoUnion bagain. (#244)
Removed
- Removed
fpMinandfpMax, which is removed in IEEE754-2019. (#235) - Dropped support for post-evaluation approximation. (#241)
0.7.0.0 -- 2024-07-02
Added
- Added
trueandfalseinLogicalOp. (#211) - Exported the
FPconstructs in theGrisettemodule. (#209) - Added missing
AllSymsinstance forWordN,IntN, andFP. (#209) - Added unified interfaces. (#210, #212, #213, #214, #215, #217)
- Added
IEEEFPRoundingMode. (#219) - Added
Showinstance forSomeSym. (#219) - Added incoherent conversions (
ToSym,ToCon) from/toIdentity aanda. (#221)
Fixed
- Fixed the printing of FP terms. (#219)
Changed
- [Breaking] Relaxed constraints for type classes, according to
https://github.com/haskell/core-libraries-committee/issues/10. One problem
this causes is that the instances for
Unionwill no longer be able to always merge the results. This is unfortunate, but should not be critical. (#213, #214, #221) - [Breaking] Rewritten the generic derivation mechanism. (#213, #214, #216)
- [Breaking] Changed the type class hierarchy for operations for functors, e.g.
SEq1, as described in https://github.com/haskell/core-libraries-committee/issues/10. (#216) - [Breaking] Renamed
UnionMergeable1toSymBranching. RenamedUniontoUnionBase, andUnionMtoUnion. (#214, #217) - [Breaking] Renamed
EvaluateSymtoEvalSym. RenamedSubstituteSymtoSubstSym. RenamedExtractSymbolicstoExtractSym. (#217) - [Breaking] Renamed
SEqtoSymEq. RenamedSOrdtoSymOrd. (#217) - [Breaking] Renamed
GPrettytoPPrint. (#217, #224) - [Breaking] Discourage the use of approximation with
approx.preciseis now the default and we do not requirepreciseto be used everytime we call a solver. (#218)
0.6.0.0 -- 2024-06-07
Added
- Added solving procedures with solver handles. (#198)
- Added
overestimateUnionValues. (#203) - Added pretty printing for hashset and hashmaps. (#205)
- Added support for refinement of solutions in CEGIS algorithm. (#206)
- Added generation of globally unique identifier with
uniqueIdentifier. (#206) - Added support for arbitrary precision floating point theory. (#207)
Fixed
withSolvernow forcifully terminate the solver when exiting the scope. (#199)- Fixed pretty printing for monad transformers. (#205)
Changed
- [Breaking] Equality test for
SomeBVwith different bit widths will now return false rather than crash. (#200) - [Breaking] More intuitive CEGIS interface. (#201)
- [Breaking] Changed the low-level solver interface. (#206)
- [Breaking] Changed the CEGIS interface. (#206)
- Bumped the minimum supported sbv version to 8.17. (#207)
0.5.0.1 -- 2024-04-18
Fixed
- Fix an building error due to a GHC 9.8.1 regression (https://gitlab.haskell.org/ghc/ghc/-/issues/24084). (#195)
0.5.0.0 -- 2024-04-18
Added
- Added the creation of unparameterized bit vectors from run-time bit-widths. (#168, #177)
- Added all the functions available for the exception transformer in
transformersandmtlpackages. (#171) - Improved the partial evaluation for bit vectors. (#176)
- Added
symRotateNegatedandsymShiftNegated. (#181) - Added
mrgandsymvariants for all reasonable operations fromControl.Monad,Control.Applicative,Data.Foldable,Data.List, andData.Traversable. (#182) - Added
mrgIfPropagatedStrategy. (#184) - Added
freshString. (#188) - Added
localFreshIdent. (#190) - Added deriving for void types for builtin type classes. (#191)
Fixed
- Fixed the merging for safe division. (#173)
- Fixed the behavior for safe
modandremfor signed, bounded concrete types. (#173) - Fixed merging in
mrg*operations for monad transformers to ensure that they merge the results. (#187)
Changed
- [Breaking] Removed the
UnionLikeandUnionPrjOpinterface, added theTryMergeandPlainUnioninterface. This allowsmrg*operations to be used with non-union programs. (#170) - [Breaking] Refined the safe operations interface using
TryMerge. (#172) - [Breaking] Renamed
safeMinustosafeSubto be more consistent. (#172) - [Breaking] Unifies the implementation for all symbolic non-indexed bit-vectors. The legacy types are now type and pattern synonyms. (#174, #179, #180)
- [Breaking] Use functional dependency instead of type family for the
Functionclass. (#178) - [Breaking] Added
Mergeableconstraints to somemrg*list operators (#182) - [Breaking] Refactored the
mrg*constructor related template haskell code. (#185) - [Breaking] Dropped symbols with extra information. (#188)
- [Breaking] The
FreshIdentis removed. It is now changed toIdentifierandSymboltypes. (#192) - Changed the internal representation of the terms. (#193)
- [Breaking] Refactored the project structures. (#194)
0.4.1.0 -- 2024-01-10
Added
- Added
cegisForAllinterfaces. (#165)
0.4.0.0 -- 2024-01-08
Added
- Added wrappers for state transformers. (#132)
- Added
toGuardListfunction. (#137) - Exported some previously hidden API (
BVSignConversion,runFreshTFromIndex) that we found useful or forgot to export. (#138, #139) - Provided
mrgRunFreshTto runFreshTwith merging. (#140) - Added
Grisette.Data.Class.SignConversion.SignConversionfor types fromData.IntandData.Word. (#142) - Added shift functions by symbolic shift amounts. (#151)
- Added
applyfor uninterpreted functions. (#155) - Added
liftFreshto lift aFreshintoMonadFresh. (#156) - Added a handle types for SBV solvers. This allows users to use SBV solvers without the need to wrap everything in the SBV monads. (#159)
- Added a new generic CEGIS interface. This allows any verifier/fuzzer to be used in the CEGIS loop. (#159)
Removed
- [Breaking] Removed the
Grisette.Lib.Mtlmodule. (#132) - [Breaking] Removed
SymBoolOpandSymIntegerOp. (#146) - [Breaking] Removed
ExtractSymbolicsinstance forSymbolSet. (#146)
Fixed
- Removed the quotation marks around the pretty printed results for string-like data types. (#127)
- Fixed the
SOrdinstance forVerificationConditions. (#131) - Fixed the missing
SubstituteSyminstance forUnionM. (#131) - Fixed the symbolic generation order for
Maybe. (#131) - Fixed the
toIntegerfunction forIntN 1. (#143) - Fixed the
absfunction forWordN. (#144) - Fixed the QuickCheck shrink function for
WordN 1andIntN 1. (#149) - Fixed the heap overflow bug for
shiftLforWordNandIntNby large numbers. (#150)
Changed
- Reorganized the files for
MonadTrans. (#132) - [Breaking] Changed the name of
Unionconstructors and patterns. (#133) - The
Unionpatterns, when used as constructors, now merges the result. (#133) - Changed the symbolic identifier type from
StringtoData.Text.Text. (#141) - [Breaking]
Grisette.Data.Class.BitVector.BVSignConversionis nowGrisette.Data.Class.SignConversion.SignConversion. (#142) - [Breaking] Moved the
ITEOp,LogicalOp, andSEqtype classes to dedicated modules. (#146) - [Breaking] Moved
Grisette.Data.Class.EvaluatetoGrisette.Data.Class.EvaluateSym. (#146) - [Breaking] Moved
Grisette.Data.Class.SubstitutetoGrisette.Data.Class.SubstituteSym. (#146) - [Breaking] Split the
Grisette.Data.Class.SafeArithmodule toGrisette.Data.Class.SafeDivisionandGrisette.Data.Class.SafeLinearArith. (#146) - [Breaking] Changed the API to
MonadFresh. (#156) - [Breaking] Renamed multiple symbolic operators. (#158)
- [Breaking] Changed the solver interface. (#159)
- [Breaking] Changed the CEGIS solver interface. (#159)
0.3.1.1 -- 2023-09-29
No user-facing changes.
0.3.1.0 -- 2023-07-19
Added
- Added support to
Data.Text. (#95) - Added
Arbitraryinstances for bit vectors. (#97) - Added pretty printers for Grisette data types. (#101)
- Added
ExtractSymbolicsinstances for tuples longer than 2. (#103)
Fixed
0.3.0.0 -- 2023-07-07
Added
- Added the conversion between signed and unsigned bit vectors. (#69)
- Added the generation of
SomeSymIntNandSomeSymWordNfrom a singleIntfor bit width. (#73) - Added the
FiniteBitsinstance forSomeSymIntNandSomeSymWordN. (#83) - Added more flexible instances for symbolic generation for
Either,Maybeand list types. (#84) - Added an experimental
GenSymConstrainedtype class. (#89)
Changed
- Changed the operations for
SomeIntNandSomeWordNto accepting dynamic runtime integers rather than compile-time integers. (#71) - Comparing the equality of
SomeIntN/SomeWordN/SomeSymIntN/SomeSymWordNwith different bit widths returns false rather than crash now. (#74)
Fixed
- Fixed the compatibility issue with sbv 10+. (#66)
- Fixed build error with newer GHC. (#70)
- Fixed the merging for
SomeSymIntNandSomeSymWordN. (#72)
0.2.0.0 -- 2023-04-13
Added
- Add term size count API. (#48, #53)
- Add timeout to solver interface. (#49, #50)
- Add parallel do-notation for parallel symbolic compilation. (#51)
- Added some missing instances for symbolic values and bit vectors. (#46, #61)
- Add missing instances for
MonadFreshandFreshT. (#59)
Changed
- New safe operator interfaces. (#56)
- Redesigned symbolic value interface.
Removed
- Dropped merging cache for
UnionM. This fixed some segmentation fault errors. (#43)
Fixed
- Fix CEGIS when no symbolic input is present. (#52)
- Fix overlapping
ToSymandToConinstances. (#54) - Fix uninterpreted function lowering. (#57, #58)
- Fix CEGIS crash when subsequent solver calls introduces new symbolic constant. (#60)
0.1.0.0 -- 2023-01-20
Added
- Initial release for Grisette.