This section summarizes the main enhancements in the various components of
CADP. For more details, please refer to the CADP
- BCG
-
Besides a minor bug fix for BCG_CMP on Windows, BCG_MIN and BCG_CMP now
provide SVL with detailed information about the branching factor when these
tools are halted by the operating system due to memory exhaustion.
The BCG tools, their code libraries, and their related tools have been updated
to comply with the latest revision of the C language (i.e., the C23 standard
published in October 2024). After these changes, all the code compiles without
warning using recent C compilers. Precisely:
- New-style prototypes have been added in all definitions of functions and
functional types. The "bcg_read" and "bcg_write" manual pages have been
updated to document these prototypes.
- The code of CADP was simplified by eliminating the macro-definitions
BCG_ARG_n() intended for old C compilers that did not support function
prototypes. The include file "bcg_prototype.h" defining these macros is now
deprecated.
- The BCG_LIB tool was modified to generate C code function prototypes
and without BCG_ARG_n() macros.
For details, see HISTORY entries:
#3088 #3125 #3127 #3229
- DEMOS
-
The two versions of the alternating-bit protocol, demo_01 and demo_02, have
been merged into a single one. Demo_01 was archived, after moving its
test-generation features to demo_02. Then, demo_02, which was the last
CADP demo expressed in LOTOS, was translated to LNT.
Moreover, all demos have been revised in 2025 to follow the evolution
of CADP languages and tools. In addition to mere syntax updates, one
can report the following changes:
- The demo_32 and demo_38 have been reorganized to take advantage of LNT
virtual types.
- Many demos have been simplified using the incrementation/decrementation
operations recently introduced in LNT.
- Many demos have been shortened by removing useless definitions of
channels and functions, as well as useless "of" and "with"
clauses.
- Many demos have been simplified using the new high-level macro-definitions
of the MCL standard library.
- Many demos have been updated to use the "abstraction" operator
of SVL.
Finally, all demos have been ported to C23 and additional documentation was
provided for demo_04 and demo_15.
For details, see HISTORY entries:
#3156 #3163 #3165 #3167 #3193 #3223 #3231 #3236 #3259 #3261
- EXP
-
A segmentation-fault issue in EXP2C was fixed, which could arise with
networks of automata containing hundreds of synchronization vectors.
Also, the performance of EXP2C was significantly enhanced for composition
expressions containing priority operators: the CPU time is now quadratic
(rather than cubic) in the number of labels. For instance, on a network
with 10,000+ distinct labels, EXP2C did not finish within more than an hour,
but now terminates in 20 seconds.
For details, see HISTORY entries:
#3121 #3253
- LNT
-
In 2025, the unification of LNT and LOTOS NT was achieved, with the removal
of all references to LOTOS NT in tools and documentation.
The LNT language was enhanced in many respects:
- The ".." keyword (used in the definition of range and array types) was
deprecated and replaced by the "..." keyword (used in lists and sets).
- The former notation "!?X" for "in out" parameters was deprecated
and replaced by a simpler notation "X?".
- The syntax of LNT was made stricter, so as to ban ambiguous combinations
of prefix unary operators and postfix notations, such as type conversions
("V of T"), field selections ("V.X"),
field updates ("V.{X -> ...}"), and array accesses
("V1 [V2]").
- Two new instructions "+=" and "-=" for incrementing and decrementing
variables or array elements have been added. They work not only for numeric
types (NAT, INT, and REAL), but also for any type with binary functions
named "+" or "-", possibly raising exceptions.
- A new iterative construct "for ... until ... by ...
loop [... in] ... end loop" was introduced in both LNT
functions and processes. This construct, which exists in two forms (breakable
and unbreakable), is useful to enumerate the domain of enumerated types and
range types without raising overflow exceptions (as it often happens with
the "for ... while" loop).
- Similar to the concept of virtual functions introduced in December 2024,
LNT was enriched with virtual processes, virtual types, and virtual channels
(all defined using the "!virtual" pragma). This enables one to
specify generic LNT modules parameterized by types, functions, processes,
and/or channels.
- A new pragma "!library" was introduced, which can be either
global to an LNT module, or local to some of its definitions. This pragma
suppresses the warnings emitted by TRAIAN about functions and processes never
called and/or types and channels never employed.
- It is now possible to attach "!implementedby" pragmas to
"with get" and "with set" clauses, so as to fix the names of
the corresponding selector and updater functions.
Additionally, the predefined libraries of LNT have been significantly extended
to increase user-friendliness and compatibility between TRAIAN and LNT2LOTOS:
- The LNT_V1 library was enriched with 60 additional functions.
- The BIT library was enriched with 7 additional functions.
- The OCTET library was enriched with 2 additional functions.
- "with min" and "with max" predefined functions are now
available for all LNT types (constructor types, arrays, ranges, predicate
types, lists, sorted lists, and sets).
- "with inf" and "with sup" predefined functions are now
available for LNT lists, sorted lists, and sets.
- "with +" and "with -" predefined functions are now
available for LNT range types.
The above changes (together with many other enhancements and simplifications)
have been implemented in both TRAIAN and LNT2LOTOS. The editor style files
have been updated accordingly.
Also, the semantic checks performed by TRAIAN have been made more stringent:
- TRAIAN now checks that module pragmas (other than "!version")
appear at the beginning of each module.
- The "!external" or "!virtual" pragmas attached to
"with" functions are now rejected.
- Data-flow analysis for array assignments is now more precise (1 new
warning).
- Irrelevant pre-conditions ("require" clauses) are now detected
(6 new warnings).
- Irrelevant post-conditions ("ensure" clauses) are now detected
(9 new warnings).
- The "return" instructions located in dead code are now verified.
- Redundant "access" clauses in "trap" statements are now
detected.
- False conditions in "case" patterns are now detected.
- False conditions and true conditions in "for" and "while"
loops are now detected (1 new warning).
- Event parameters (of LNT functions and processes) that are never
accessed are now detected (2 new warnings).
- "in", "out", and "in out" value parameters (of LNT
functions and processes) that are never used or assigned are now detected
(3 new warnings).
- Many checks have been introduced for virtual functions, processes,
types, and channels (25 new warning/error messages).
- Types and channels defined but never employed are now detected (2 new warnings).
- Functions and processes defined but never called are now detected (7 new warnings).
- Useless "with get" and "with set" clauses are now detected
(4 new warnings).
- The C and LOTOS identifiers specified in "!implementedby" pragmas
are now checked thoroughly.
The LNT documentation was updated accordingly and the LNT2LOTOS Reference
Manual was enriched with 14 pages of examples taken from courses and exams
given at ENSIMAG and Universite Grenoble Alpes.
The CADP demos were modified to take advantage of these new features and
compile without warnings.
The generation of LOTOS code by LNT2LOTOS improved in many ways:
- Functions with only "in" parameters and no return type are no
longer rejected.
- "trap" instructions are no longer rejected, but partially
implemented.
- A wider class of LNT (n-ary) "par" instructions is now
translated to LOTOS.
- LNT module names identical to a LOTOS keyword are now accepted.
- The LOTOS code generated for LNT exceptions was greatly simplified.
- Functions "ord" and "val" are implemented more efficiently (complexity
reduced from quadratic to linear).
- LNT2LOTOS now resolves overloaded constants or nullary functions
used in communication events.
- LNT2LOTOS now resolves ellipses ("...") in event parameter lists of
processes not defined in the current module.
- LNT2LOTOS was aligned with TRAIAN for signed numeric constants and
nullary functions returning array values.
- The compatibility between the ".fnt" / ".tnt" files used by LNT2LOTOS
and those used by TRAIAN increased significantly.
- Both TRAIAN and LNT2LOTOS now have a "-main" option to determine
the entry process to be used in a given LNT program.
The generation of C code by TRAIAN also improved:
- The C code implementing the main process of an LNT program was simplified.
- The INTER() and UNION() functions for LNT sets are now more memory-efficient.
- The DELETE() and REMOVE() functions for LNT lists, sorted lists, and sets are more memory-efficient.
- To be aligned with the conventions of LNT2LOTOS, the C code generated by
TRAIAN for LNT functions having event parameters now places these parameters
at the beginning of the list.
Additionally, 32 bugs have been fixed (16 in LNT2LOTOS, 10 in TRAIAN, two
in both LNT2LOTOS and TRAIAN, one in LNT_MERGE, two in the data-type
libraries, and one in the documentation).
The "upc" shell script was extended to ease the migration of LNT programs.
These can be upgraded (automatically or semi-automatically) by invoking, in
that order, the following commands:
upc 2025-LNT-UNTIL <directory>
upc 2025-LNT-DOT-DOT <directory>
upc 2025-LNT-EXCLAIM-QUERY <directory>
upc 2025-LNT-C-NAMES <directory>
For details, see HISTORY entries:
#3089 #3091 #3093 #3094 #3095 #3096 #3097 #3099 #3103 #3105 #3107 #3108
#3109 #3111 #3113 #3115 #3116 #3118 #3119 #3122 #3123 #3124 #3126 #3128
#3129 #3131 #3133 #3135 #3140 #3145 #3147 #3148 #3150 #3151 #3152 #3153
#3154 #3155 #3157 #3159 #3160 #3161 #3162 #3164 #3166 #3168 #3169 #3170
#3173 #3175 #3178 #3179 #3181 #3182 #3185 #3187 #3190 #3192 #3195 #3196
#3198 #3199 #3200 #3201 #3202 #3203 #3204 #3205 #3206 #3207 #3208 #3209
#3210 #3211 #3212 #3213 #3215 #3216 #3217 #3218 #3220 #3221 #3222 #3224
#3225 #3226 #3227 #3232 #3233 #3234 #3235 #3237 #3238 #3240 #3241 #3242
#3243 #3244 #3246 #3248 #3249 #3250 #3251 #3252 #3255 #3257 #3258 #3260
#3262 #3264 #3265 #3267 #3271 #3272 #3273 #3274 #3275
- MCL
-
The XTL_EXPAND preprocessor, common to the MCL and XTL languages,
now supports single-line comments beginning with "--", in addition to the
already supported multi-line comments delimited by "(*" and "*)".
The MCL_EXPAND preprocessor now reports data variables defined but not
used in MCL formulas. Previously, such variables were reported later, in
the generated C code, through cryptic warnings of the C compiler.
MCL_EXPAND now optimizes state formulas to reduce their size before
translating them to the HMLR (Hennessy-Milner Logic with Recursion)
intermediate form. For conjunctions of temporal formulas, these optimizations
substantially improve the performance (verification time and memory
consumption) of EVALUATOR. On 104 MCL V3 formulas concerned by these
optimizations, the time needed to evaluate these formulas decreased
by 37.5%. On 52 MCL-V4 formulas concerned by these optimizations, this
time decreased by 12.2%.
Two bugs have been fixed in the "-bes" option of EVALUATOR, which caused
memory faults when writing BESs containing multiple equation blocks
or generated huge ".bes" files for MCL V4 formulas containing certain
classes of fixpoints.
To simplify the CADP toolbox, the three model checkers EVALUATOR 3,
EVALUATOR 4, and EVALUATOR 5 have been merged into a single one, EVALUATOR.
The source code of CADP model-checking tools (EVALUATOR, MCL_EXPAND,
XTL_EXPAND), as well as the C code they produce, was ported to C23 by
adding new-style function prototypes and modifying character constants.
The "standard.mcl" library of the MCL formula language was significantly
improved by renaming two existing macro-definitions, enhancing two other
ones, and introducing eight macro-definitions of common usage (DEADLOCK,
NO_DEADLOCK, LIVELOCK, NO_LIVELOCK, POSSIBLE, WITHOUT_1_INEVITABLE_2,
AFTER_1_WITHOUT_2_INEVITABLE_3, and AFTER_1_ONLY_2_INEVITABLE_3) that
remove the need for writing lower-level mu-calculus formulas.
For details, see HISTORY entries:
#3087 #3101 #3136 #3141 #3143 #3144 #3146 #3186 #3245 #3247 #3254
#3263 #3266 #3269
- MISC
-
The following enhancements have been brought:
- In all CADP tools having an option "-root", this option was renamed to
"-main".
- The windows of the EUCALYPTUS graphical user interface can now be
resized freely.
- The SYNTAX compiler generator used to build most CADP compilers was
upgraded from version 2023 to version 2025.
- A lexical bug was fixed in the scanner of CAESAR and CAESAR.ADT, which
rejected LOTOS identifiers starting with a digit and containing the
letter "l" or "L".
- In addition to a bug fix in TGV, the command-line options of TGV were
made more user-friendly. The "-csg" option was renamed to "-all". The
former option "-output" was deprecated and replaced by an additional
file name.
- In the editor style files provided by CADP, the support for Sublime Text
was improved and right arrows are displayed in a visually better way
with LaTeX listings.
For details, see HISTORY entries:
#3092 #3098 #3100 #3117 #3120 #3142 #3171 #3174 #3176 #3197 #3219
#3230
- OPEN/CAESAR
-
The OPEN/CAESAR programming interfaces have been refined at various points:
- In "caesar_graph", a new type CAESAR_TYPE_ITERATE_FUNCTION was introduced
and used in the profile of function CAESAR_ITERATE_STATE().
- In "caesar_cache_1": two new types CAESAR_TYPE_ORDER_FUNCTOR_CACHE_1
and CAESAR_TYPE_SUBCACHE_FUNCTOR_CACHE_1 were introduced and used in the
profile of function CAESAR_CREATE_CACHE_1(), which also uses the types
CAESAR_TYPE_SIZE_FUNCTION_CACHE_1 and CAESAR_TYPE_PERCENTAGE_FUNCTION_CACHE_1
at present.
- In "caesar_solve_1": four new types
CAESAR_TYPE_ITERATE_DIAGNOSTIC_FUNCTION_SOLVE_1,
CAESAR_TYPE_ITERATE_FUNCTION_SOLVE_1,
CAESAR_TYPE_ITERATE_STABLE_FUNCTION_SOLVE_1, and
CAESAR_TYPE_LOOP_FUNCTION_SOLVE_1 have been introduced and used in the
profiles of functions CAESAR_CREATE_SOLVE_1(),
CAESAR_ITERATE_DIAGNOSTIC_SOLVE_1(), and
CAESAR_ITERATE_STABLE_VARIABLE_SOLVE_1().
- In "caesar_solve_2": two new types CAESAR_TYPE_ITERATE_FUNCTION_SOLVE_2
and CAESAR_TYPE_LOOP_FUNCTION_SOLVE_2 have been introduced and used in the
profile of function CAESAR_CREATE_SOLVE_2().
- In "caesar_table_1": the deprecated value CAESAR_EMPTY_AREA_1() for the
formal parameter CAESAR_BASE_AREA of function CAESAR_CREATE_TABLE_1() was
removed and function CAESAR_PRINT_TABLE_1(), when invoked with format 0,
now displays the arity (2 or 3) of the hash function associated with the table.
Moreover, OPEN/CAESAR, EXEC/CAESAR, the OPEN/CAESAR-compliant compilers
(BCG_OPEN, CAESAR, EXP.OPEN, and SEQ.OPEN), the OPEN/CAESAR application
tools (e.g., CUNCTATOR, DETERMINATOR, XSIMULATOR, etc.), and their
documentation have been updated to comply with C23 and compile without
warnings using recent C compilers. Precisely:
- New-style prototypes have been added in all definitions of functions and
functional types.
- All macro-definitions CAESAR_ARG_n() have been eliminated. The
include file "caesar_prototype.h" defining these macros is now deprecated.
- The former macros CAESAR_WITH_OLD_PROTOTYPES, CAESAR_WITH_NEW_PROTOTYPES,
and CAESAR_PROMOTE_TO_INT() have been removed.
For details, see HISTORY entries:
#3130 #3132 #3134 #3137 #3138 #3183 #3184 #3189 #3191 #3214
- PORTS
-
Among many changes dictated by evolutions of operating systems and C compilers,
one can mention the following ones:
- The "cadp_edit" script shell was modified to take into account the fact
that "wordpad.exe" and "write.exe" are no longer present on Windows 11.
- The "cadp_more" script was modified to follow the new behaviour of the
"more" and "less" commands on recent versions of Linux.
- The "cadp_temporary" script was modified to continue working with the
recent versions of "mktemp" on Windows/Cygwin.
- The "cadp_cc" script and the two include files "caesar_area_1.h" and
"caesar_system.h" were modified to work with Clang on Solaris/SunOS.
The CADP toolset can now be downloaded (manually or using INSTALLATOR)
with HTTP or HTTPS, in addition to FTP, which was the only possibility
available so far.
Also, all the remaining tools of CADP (e.g., BES_SOLVE, PBG, etc.) were
upgraded to C23 and now compile without warnings with recent C compilers.
This required many changes in the source code of these tools, in their include
files distributed as part of CADP, and in the C code generated by these tools
(e.g., CAESAR, CAESAR.ADT, XTL, etc.).
For details, see HISTORY entries:
#3090 #3102 #3112 #3114 #3139 #3149 #3158 #3172 #3188 #3194 #3239
- SVL
-
The syntax of the SVL language was enhanced in three ways:
- The "|=" operator was extended to evaluate properties stored in ".mcl"
and ".xtl" files. The "verify" operator, less intuitive, is now
deprecated.
- Three new keywords "end abstraction", "end generation",
and "end reduction" have been introduced, which provide a
structured alternative to parentheses.
- The language was simplified, following the unification of "evalutor3",
"evaluator4", and "evaluator5" in one single tool "evaluator".
In addition to three bug fixes, the SVL compiler was improved as follows:
- SVL scripts may now be run as full-fledged programs from the command
line, like any other shell script.
- It distinguishes more clearly between errors and warnings reported by
the various CADP commands invoked from SVL scripts.
- It directly displays the messages emitted by the last CADP command
that failed (as well as storing these messages in a log file).
For details, see HISTORY entries:
#3104 #3106 #3110 #3177 #3180 #3228 #3256 #3268 #3270
We are extremely grateful to the following scientists, who provided us with
valuable feedback and advice about the use of CADP:
and all other persons we may forget.