Create ACSL (ANSI/ISO C Specification Language) formal annotations for C/C++ programs. Use this skill when working with formal verification, adding function contracts (requires/ensures), loop invariants, assertions, memory safety annotations, or any ACSL specifications. Supports Frama-C verification and generates comprehensive formal specifications for C/C++ code.
91
86%
Does it follow best practices?
Impact
100%
1.03xAverage score across 3 eval scenarios
Passed
No known issues
Memory safety function contracts
Multi-line contract syntax
100%
100%
Single-line assertion syntax
100%
100%
Contracts before declarations
100%
100%
\valid for struct pointer
100%
100%
\valid for out pointer
100%
100%
\separated usage
100%
100%
assigns clause on rb_write
100%
100%
assigns clause on rb_read
100%
100%
assigns \nothing / minimal on rb_reset
100%
100%
Return value postcondition — success path
100%
100%
Return value postcondition — failure path
100%
100%
Explanatory comments on non-obvious specs
100%
100%
integer type in quantifiers
100%
100%
Loop invariant and variant annotations
loop invariant present — count_in_range
100%
100%
loop assigns present — count_in_range
100%
100%
loop variant present — count_in_range
100%
100%
loop invariant present — replace_char
100%
100%
loop assigns present — replace_char
100%
100%
loop variant present — replace_char
100%
100%
Loop annotations before loop header
100%
100%
integer type in loop invariant quantifiers
100%
100%
Function assigns clause — count_in_range
100%
100%
Function assigns clause — replace_char
100%
100%
\valid_read for const pointer
0%
100%
Invariant bounds loop counter
100%
100%
Result postcondition
100%
100%
Behaviors, predicates, and axiomatic definitions
behavior blocks in safe_divide
100%
100%
complete behaviors — safe_divide
100%
100%
disjoint behaviors — safe_divide
100%
100%
behavior blocks in abs_value
100%
100%
complete behaviors — abs_value
100%
100%
disjoint behaviors — abs_value
100%
100%
Reusable predicate or logic definition
100%
100%
decreases clause on gcd
100%
100%
assigns \nothing on pure functions
100%
100%
\result postcondition — safe_divide zero case
100%
100%
\result postcondition — abs_value
100%
100%
gcd postcondition — divisibility
100%
100%
assumes clause in behaviors
100%
100%
0f00a4f
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.