{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2605-23643","title":"Less Effort, Shorter Proofs: Reinforcement Learning for Security Protocol Analysis in Tamarin","arxiv_id":"2605.23643","date":"2026-05-22","proceeding":null,"authors":["Matthias Cosler","Cas Cremers","Bernd Finkbeiner","Mohamed Ghanem","Niklas Medinger"],"abstract":"Tools like Tamarin and ProVerif have achieved notable success in analyzing and verifying complex real-world protocols such as EMV, 5G, and WPA2, even detecting zero-day exploits. Despite these successes, verifying such protocols remains a time-consuming, challenging task, often requiring significant human effort and expertise. In this paper, we present a reinforcement learning (RL) framework inspired by AlphaZero and AlphaProof that implements a new style of proof search for Tamarin. We have developed a stateless API for Tamarin that acts as a classical RL environment. We guide a Monte Carlo Tree Search (MCTS) by a neural heuristic that learns from completed subproofs. We evaluate our framework on 16 case studies, ranging from classical protocol models to challenging state-of-the-art protocol models from recent publications. Our method finds more proofs automatically than Tamarin's standard search and produces shorter proofs than both the standard and human-engineered heuristics. Our pipeline is applicable out of the box to assist Tamarin users in active research, reducing the human effort required. Moreover, our standardized interface provides a programmatic way for users to interact with Tamarin. Finally, our work demonstrates the promising potential of adapting RL-based methods to the Tamarin domain.","url_abs":"https://arxiv.org/abs/2605.23643","url_pdf":"https://arxiv.org/pdf/2605.23643","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2605.23643","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2605.23643"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/niklasmedinger/Tamarin-ML-API","reach":null},{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/MatCos/TamRL","reach":null}],"summary":{"ran":16,"unverified":2},"by_repo_kind":{"found_in_text":{"samples":18,"ran":16,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":12,"samples":[{"code_sha256_prefix":"2242a44f3f7b7332","entry":"add_dashes_to_arguments","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"etc/tamarin-troop.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/etc/tamarin-troop.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"2242a44f3f7b7332"}},{"code_sha256_prefix":"ac554b856fdbcd2f","entry":"add_double_dashes_to_arguments","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"etc/tamarin-troop.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/etc/tamarin-troop.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"ac554b856fdbcd2f"}},{"code_sha256_prefix":"85c53052d0602d48","entry":"color","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"regressionTests.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/regressionTests.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"85c53052d0602d48"}},{"code_sha256_prefix":"28aae34a5d50f267","entry":"create_commands","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"eval/tamarin_wrapper.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/eval/tamarin_wrapper.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"28aae34a5d50f267"}},{"code_sha256_prefix":"3d037295fa1d28e5","entry":"extractexclude","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"manual/filter.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/manual/filter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"3d037295fa1d28e5"}},{"code_sha256_prefix":"524e718089af0ac5","entry":"filterinput","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"manual/filter.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/manual/filter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"524e718089af0ac5"}},{"code_sha256_prefix":"aad03ee127de0e35","entry":"getColorQuality","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"regressionTests.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/regressionTests.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"aad03ee127de0e35"}},{"code_sha256_prefix":"c046ae398def14ec","entry":"get_sinusoidal_positional_encoding","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"src/models/utils.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/src/models/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c046ae398def14ec"}},{"code_sha256_prefix":"0e682454dc085471","entry":"includefile","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"manual/filter.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/manual/filter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"0e682454dc085471"}},{"code_sha256_prefix":"62a99b2d6369003d","entry":"mean_pooling","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"src/models/utils.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/src/models/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"62a99b2d6369003d"}},{"code_sha256_prefix":"d2c8d290524cfd7f","entry":"parseTest","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"regressionTests.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/regressionTests.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"d2c8d290524cfd7f"}},{"code_sha256_prefix":"73624e17f433c69d","entry":"rename_quantified","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"src/dtypes/fol_tree.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/src/dtypes/fol_tree.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"73624e17f433c69d"}},{"code_sha256_prefix":"c012b7f362c66aab","entry":"render","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"misc/cleandot/tamarincleandotlib.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/misc/cleandot/tamarincleandotlib.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"c012b7f362c66aab"}},{"code_sha256_prefix":"60866a1f307ba993","entry":"report_results","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"etc/tamarin-troop.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/etc/tamarin-troop.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"60866a1f307ba993"}},{"code_sha256_prefix":"c89cd3781f1a9d1d","entry":"run_tamarin","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"eval/tamarin_wrapper.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/eval/tamarin_wrapper.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c89cd3781f1a9d1d"}},{"code_sha256_prefix":"79638e88412d139d","entry":"subsequences","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"misc/cleandot/tamarincleandotlib.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/misc/cleandot/tamarincleandotlib.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"79638e88412d139d"}},{"code_sha256_prefix":"03aac3723778b306","entry":"abbreviate","repo":"niklasmedinger/Tamarin-ML-API","repo_kind":"found_in_text","path":"misc/cleandot/tamarincleandotlib.py","file_url":"https://github.com/niklasmedinger/Tamarin-ML-API/blob/HEAD/misc/cleandot/tamarincleandotlib.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"03aac3723778b306"}},{"code_sha256_prefix":"f4e775bacbe0f922","entry":"get_lemma","repo":"MatCos/TamRL","repo_kind":"found_in_text","path":"eval/tamarin_wrapper.py","file_url":"https://github.com/MatCos/TamRL/blob/HEAD/eval/tamarin_wrapper.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f4e775bacbe0f922"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":null,"prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,795 of the 9,581 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9581,"papers_checked":6795},"entries":[],"not_placed":{"boards":0,"rejected_by_independent_check":0,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}