PyVeritas: On Verifying Python via LLM-Based Transpilation and Bounded Model Checking for C

2508.08171v1 cs.SE, cs.AI 2025-08-13
Авторы:

Pedro Orvalho, Marta Kwiatkowska

Резюме на русском

## Контекст Python является одним из самых популярных языков программирования для общего назначения, но при этом отсутствуют полноценные средства для его формального верификации. В случае языков программирования среды высокого уровня, таких как Python, формальная верификация является значительным вызовом из-за сложности языка и уровня абстракции, присущего его. Однако языки программирования среднего уровня, такие как C, поддерживают формальные методы верификации с помощью инструментов, таких как CBMC, которые позволяют проводить символьное рассуждение и уточнять место ошибки. Использование транспайлеров, таких как Cython, не дало желаемого результата в преодолении разрыва между Python и C в сфере верификации. PyVeritas предлагает решение этой проблемы, используя Large Language Models (LLMs) для транспиляции Python-кода в C, а также для достижения повышенной точности в формальной верификации и баг-локализации. ## Метод PyVeritas использует LLMs для получения высокого уровня абстракции при переводе Python-кода в C. Это позволяет сохранить информацию о структуре и логике программы в процессе транспиляции. Далее, PyVeritas применяет баунденд модельное проверяние (BMC) для генерируемого C-кода, чтобы выявлять ошибки. Максимальные модели MaxSAT используются для формальной локализации ошибок в коде. Эта методология позволяет использовать существующие инструменты верификации, разработанные для C-кода, для анализа Python-программ. Таким образом, PyVeritas упрощает процесс верификации и делает его более доступным для Python-программистов. ## Результаты Проведенные эксперименты демонстрируют, что LLM-based transpilation может достигать высокой точности в переводе Python-кода в C. Например, некоторые модели LLM показали до 80-90% точности в транспиляции. Верификационные инструменты, такие как CBMC, могут использоваться для эффективного анализа транспилированного C-кода. PyVeritas позволяет выявлять баги в Python-программах с помощью инструментов, разработанных для C-кода. Это демонстрирует мощные возможности нового фреймворка для более простого и точного верификации Python-программ. ## Значимость Предложенный подход может быть применен в различных областях, где необходима формальная верификация Python-программ, таких как централизованная библиотека или платформы для разработки программного обеспечения. PyVeritas позволяет применять существующие инструменты, разработанные для C-кода, для проверки Python-программ. Это может существенно упростить процесс верификации и повысить его точность. Кроме того, PyVeritas дает возможность интерактивного анализа ошибок, что помогает разработчикам быстро находить и исправлять баги в Python-программах. ##

Abstract

Python has become the dominant language for general-purpose programming, yet it lacks robust tools for formal verification. In contrast, programmers working in languages such as C benefit from mature model checkers, for example CBMC, which enable exhaustive symbolic reasoning and fault localisation. The inherent complexity of Python, coupled with the verbosity and low-level nature of existing transpilers (e.g., Cython), have historically limited the applicability of formal verification to Python programs. In this paper, we propose PyVeritas, a novel framework that leverages Large Language Models (LLMs) for high-level transpilation from Python to C, followed by bounded model checking and MaxSAT-based fault localisation in the generated C code. PyVeritas enables verification and bug localisation for Python code using existing model checking tools for C. Our empirical evaluation on two Python benchmarks demonstrates that LLM-based transpilation can achieve a high degree of accuracy, up to 80--90% for some LLMs, enabling effective development environment that supports assertion-based verification and interpretable fault diagnosis for small yet non-trivial Python programs.

Ссылки и действия