Fixed parameter tractable algorithms for monitoring linearizability for concurrent histories. Based on the following paper:
Zheng Han Lee and Umang Mathur. 2026. Fixed Parameter Tractable Linearizability Monitoring. Proc. ACM Program. Lang. 10, PLDI, Article 237 (June 2026). https://doi.org/10.1145/3808315
Histories are text files that provide a data type as header and operations on a single object of the stated data type in the following rows. Yes, we assume all operations to be completed by the end of the history.
Data types are prefixed with # followed by any of the supported tags:
stackqueuepriorityqueuermwsemaphoreset
Operations are denoted by process id, start time, end time, method, and value(s) in that order. Refer to examples in testcases directory for supported methods and values for a given data type.
# stack
0 1 5 PUSH 1
1 2 6 PUSH 2
2 3 7 POP 2
3 4 8 POP 1
4 2 9 PEEK -1
-bash-4.2$ ./fptlin [-tvh] <history_file>-t: report time taken in seconds-v: print verbose information-h: include header--help: show help message
The standard output shall be in the form:
"%d %f\n", <linearizability>, <time taken>
linearizability prints 1 when input history is linearizable, 0 otherwise.
-bash-4.2$ ./build/fptlin -t testcases/priorityqueue/lin_simple_0.log
1 1.8e-05n is the size of the given history and k is the number of processes
| Data Type | Time Complexity |
|---|---|
| Stack | |
| Queue | |
| Priority Queue | |
| Read-Modify-Write Register | |
| Non-blocking Semaphore | |
| Set |