Jump to content

Логика разделения

В информатике логика разделения [1] — это расширение логики Хоара , способ рассуждения о программах.Его разработали Джон К. Рейнольдс , Питер О'Хирн , Самин Иштиак и Хонсок Ян. [1] [2] [3] [4] опираясь на ранние работы Рода Берстолла . [5] Язык утверждений логики разделения является частным случаем логики группированных импликаций (BI). [6] Обзорная статья CACM О'Хирна описывает развитие этой темы до начала 2019 года. [7]

Логика разделения облегчает рассуждения о:

  • программы, которые манипулируют структурами данных указателей, включая сокрытие информации при наличии указателей;
  • «переход права собственности» (уход от аксиом смыслового фрейма ); и
  • виртуальное разделение (модульное рассуждение) между параллельными модулями.

Логика разделения поддерживает развивающуюся область исследований, описанную Питером О'Хирном и другими как локальное рассуждение , при котором в спецификациях и доказательствах программного компонента упоминается только часть памяти, используемая компонентом, а не все глобальное состояние системы. Приложения включают автоматическую проверку программы (когда алгоритм проверяет достоверность другого алгоритма) и автоматическое распараллеливание программного обеспечения.

Утверждения: операторы и семантика

[ редактировать ]

Утверждения логики разделения описывают «состояния», состоящие из хранилища и кучи , что примерно соответствует состоянию локальных (или выделенных в стеке ) переменных и динамически выделяемых объектов в распространенных языках программирования, таких как C и Java . Магазин — это функция, отображающая переменные в значения. куча это частичная функция, отображающая адреса памяти в значения. Две кучи и ( не пересекаются обозначаются ), если их домены не перекрываются (т.е. для каждого адреса памяти , хотя бы один из и не определено).

Логика позволяет доказывать суждения вида , где это магазин, это куча, и является утверждением относительно данного хранилища и кучи. Утверждения логики разделения (обозначенные как , , ) содержат стандартные логические связки и, кроме того, , , , и , где и являются выражениями.

  • Константа утверждает, что куча пуста , т.е. когда не определено для всех адресов.
  • Бинарный оператор принимает адрес и значение и утверждает, что куча определена ровно в одном месте, сопоставляя данный адрес с данным значением. Т.е., когда (где обозначает значение выражения оценивается в магазине ) и в противном случае не определено.
  • Бинарный оператор (произносится как звезда или разделяющий союз ) утверждает, что кучу можно разделить на две непересекающиеся части, где действуют два аргумента соответственно. Т.е., когда существуют такой, что и и и .
  • Бинарный оператор (произносится как волшебная палочка или разделяющая импликация ) утверждает, что расширение кучи за счет непересекающейся части, удовлетворяющей ее первому аргументу, приводит к получению кучи, удовлетворяющей ее второму аргументу. Т.е.,. когда для каждой кучи такой, что , также держит.

Операторы и имеют некоторые общие свойства с классическими операторами конъюнкции и импликации . Их можно объединить, используя правило вывода, подобное modus ponens.

и они образуют присоединение , т. е. тогда и только тогда, когда для ; точнее, сопряженными операторами являются и .

Рассуждения о программах: тройки и правила доказательства

[ редактировать ]

В логике разделения тройки Хоара имеют несколько иной смысл, чем в логике Хоара . тройка утверждает, что если программа выполняется из начального состояния, удовлетворяющего предварительному условию тогда программа не пойдет не так (например, будет иметь неопределенное поведение), и если она завершится, то конечное состояние будет удовлетворять постусловию . По сути, в ходе его исполнения может получить доступ только к областям памяти, существование которых утверждается в предварительном условии или которые были выделены сам.

Помимо стандартных правил из логики Хоара , логика разделения поддерживает следующее очень важное правило:

Это известно как правило фрейма (названное в честь проблемы с фреймом ) и обеспечивает локальное рассуждение. В нем говорится, что программа, которая безопасно выполняется в небольшом состоянии (удовлетворяющем ), также может выполняться в любом большем состоянии (удовлетворяющем ) и что его выполнение не повлияет на дополнительную часть состояния (и так останется истинным в постусловии). Побочное условие обеспечивает это, указывая, что ни одна из переменных, измененных с помощью происходить бесплатно в , т.е. ни один из них не входит в набор «свободных переменных» из .

Совместное использование

[ редактировать ]

Логика разделения приводит к простым доказательствам манипулирования указателями для структур данных, которые демонстрируют регулярные шаблоны совместного использования, которые можно описать просто с помощью разделительных союзов; примеры включают одно- и двусвязные списки и разновидности деревьев. Графы, группы DAG и другие структуры данных с более общим доступом сложнее как для формального, так и для неформального доказательства. Тем не менее логика разделения успешно применялась к рассуждениям опрограммы с общим обменом.

В своей статье POPL'01 [3] О'Хирн и Иштиак объяснили, как соединяется волшебная палочка можно использовать для рассуждения при наличии обмена, по крайней мере, в принципе.Например, в тройке

мы получаем самое слабое предварительное условие для оператора, который изменяет кучу в месте , и это работает для любого постусловия, а не только для того, которое аккуратно составлено с помощью разделительного союза. Эта идея была развита Янгом гораздо дальше, который использовал предоставить локализованные рассуждения о мутациях в классическом алгоритме разметки графов Шорра-Уэйта . [8] Наконец, одна из последних работ в этом направлении принадлежит Хобору и Виллару. [9] ВОЗ нанимать не только но и связующее который по-разному называли перекрывающимся союзом или сепишом, [10] и который можно использовать для описания перекрывающихся структур данных: держит кучу когда и удерживать для подкучек и чей союз , но которые, возможно, имеют непустую часть в общем. Абстрактно, можно рассматривать как версию слитной связки логики релевантности .

Параллельная логика разделения

[ редактировать ]

Логика параллельного разделения (CSL),версия логики разделения для параллельных программ, первоначально была предложена Питером О'Хирном , [11] используя правило доказательства

что позволяет независимо рассуждать о потоках, обращающихся к отдельному хранилищу. Правила доказательства О'Хирна адаптировали ранний подход Тони Хоара к рассуждениям о параллелизме. [12] замена использования ограничений области действия для обеспечения разделения рассуждениями в логике разделения. Помимо расширения подхода Хоара для его применения при наличии указателей, выделенных в куче, О'Хирн показал, как рассуждения в логике параллельного разделения могут отслеживать динамическую передачу владения частями кучи между процессами; примеры в статье включают буфер передачи указателей и диспетчер памяти .

Комментируя раннюю классическую работу Сьюзан Овики и Дэвида Грайса о говорит свободе вмешательства , О'Хирн , что явная проверка невмешательства не является необходимой, поскольку его система исключает вмешательство неявным образом, по природе способа доказательства. построен.

Модель логики параллельного разделения была впервые предложена Стивеном Бруксом в сопутствующей статье, опубликованной в журнале O'Hearn's. [13] Правильность логики была сложной проблемой, и фактически контрпример Джона Рейнольдса показал несостоятельность более ранней, неопубликованной версии логики; Проблема, поднятая примером Рейнольдса, кратко описана в статье О'Хирна и более подробно в статье Брукса.

Сначала казалось, что CSL хорошо подходит для того, что Дейкстра назвал слабосвязанными процессами. [14] но, возможно, не для мелкозернистых параллельных алгоритмов со значительными помехами. Однако постепенно стало понятно, что базовый подход CSL оказывается значительно более мощным, чем предполагалось вначале, если использовать нестандартные модели логических связок и даже тройки Хоара.

Была предложена абстрактная версия логики разделения, работающая для троек Хоара.где предусловия и постусловия представляют собой формулы, интерпретируемые для произвольного частичного коммутативного моноида, а не для конкретной модели кучи. [15] Позже, благодаря подходящему выбору коммутативного моноида, было неожиданно обнаружено, что правила доказательства абстрактных версий параллельной логики разделения могут использоваться для рассуждений о помехах в параллельных процессах, например, путем кодирования метода гарантии доверия, который первоначально был предложен для рассуждения. о помехах; [16] в данной работе элементами модели считались не ресурсы, а «представления» о состоянии программы, а нестандартная интерпретация троек Хоара сопровождает нестандартное прочтение пред- и постусловий.Наконец, принципы стиля CSL использовались для составления рассуждений об истории программ вместо состояний программ, чтобы обеспечить модульные методы рассуждений о мелкозернистых параллельных алгоритмах. [17]

Версии CSL включены во многие интерактивные и полуавтоматические (или «промежуточные») инструменты проверки, как описано в следующем разделе. Особенно значительная попытка проверки связана с упомянутым там ядром μC/OS-II. Но, хотя шаги были предприняты, [18] на данный момент рассуждения в стиле CSL включены в сравнительно небольшое числоинструменты из категории автоматического анализа программ (и ни один из них не упомянут в следующем разделе).

О'Хирн и Брукс являются со-лауреатами премии Гёделя 2016 года за изобретение логики параллельного разделения. [19]

Инструменты проверки и анализа программ

[ редактировать ]

Инструменты для анализа программ делятся на диапазон от полностью автоматических инструментов анализа программ, не требующих участия пользователя, до интерактивных инструментов, в которых может участвовать человек.принимает непосредственное участие в процессе доказывания. Было разработано множество таких инструментов; следующий список включает несколько представителей в каждой категории.

  • Автоматический анализ программы. Эти инструменты обычно ищут ограниченные классы ошибок (например, ошибки безопасности памяти) или пытаются доказать их отсутствие, но не могут доказать полную правильность.
    • Текущий пример — Facebook Infer , инструмент статического анализа для Java, C и Objective-C, основанный на логике разделения и биабдукции. [20] По состоянию на 2015 год компания Infer обнаруживала и исправляла сотни ошибок в месяц перед отправкой в ​​мобильные приложения Facebook. [21]
    • Другие примеры включают SpaceInvader (один из первых анализаторов SL), Predator (выигравший несколько конкурсов по проверке), MemCAD (который сочетает в себе форму и числовые свойства) и SLAyer (от Microsoft Research, ориентированный на структуры данных, обнаруженные в драйверах устройств).
  • Интерактивное доказательство. Доказательства проводились с использованием встраивания логики разделения в интерактивные средства доказательства теорем, такие как помощник доказательства Coq и HOL (помощник доказательства) . По сравнению с работой по анализу программ, эти инструменты требуют больше человеческих усилий, но обладают более глубокими свойствами, вплоть до функциональной корректности.
  • Между. Многие инструменты требуют большего вмешательства пользователя, чем программный анализ, поскольку они ожидают, что пользователь введет утверждения, такие как спецификации до / после для функций или инварианты цикла, но после этого ввода они пытаются быть полностью или почти полностью автоматическими; этот способ проверки восходит к классическим работам 1970-х годов, таким как верификатор Дж. Кинга и верификатор Стэнфордского Паскаля. Этот стиль верификатора недавно был назван автоматической активной проверкой , термин, который призван обозначить способ взаимодействия с верификатором через цикл проверки утверждений, аналогичный взаимодействию между программистом и проверкой типов.
    • Самый первый верификатор Логики Разделения, Смоллфут , находился в этой промежуточной категории. От пользователя требовалось ввести спецификации до и после, инварианты циклов и инварианты ресурсов для блокировок. Он представил метод символического выполнения, а также автоматический способ вывода аксиом фрейма. Смоллфут включил параллельную логику разделения.
    • SmallfootRG — это средство проверки сочетания логики разделения и классического метода доверия/гарантии для параллельных программ.
    • Heap Hop реализует логику разделения для передачи сообщений, следуя идеям Singularity (операционной системы) .
    • VeriFast — это современный современный инструмент промежуточной категории. Он продемонстрировал доказательства, начиная от объектно-ориентированных шаблонов и заканчивая высококонкурентными алгоритмами и системными программами.
    • Viper — это современная автоматизированная инфраструктура проверки для рассуждений на основе разрешений. В основном он состоит из языка программирования и двух механизмов проверки: одна основана на символьном выполнении, а другая — на генерации условий проверки (VCG). [26] На базе инфраструктуры Viper появилось несколько интерфейсов для различных языков программирования: Gobra для Go, Nagini для Python, Prusti для Rust и VerCors для C, Java, OpenCL и OpenMP. Эти внешние интерфейсы переводят язык программирования внешнего интерфейса в Viper, чтобы затем использовать серверную часть проверки Viper для подтверждения правильности входной программы.
    • Язык программирования Mezzo и типы асинхронного разделения жидкостей включают идеи, связанные с CSL, в системе типов языка программирования. Идея включить разделение в систему типов уже имела более ранние примеры в разделах «Псевдонимы типов» и «Синтаксический контроль интерференции» .

Различие между интерактивными и промежуточными верификаторами не является резким. Например,Компания Bedrock стремится к высокой степени автоматизации, в основном к автоматической проверке, при которойVerifast иногда требует аннотаций, напоминающих тактику (небольшие программы), используемые в интерактивных верификаторах.

Разрешимость и сложность

[ редактировать ]

Можно показать, что проблема выполнимости для многосортированного фрагмента логики разделения без кванторов, параметризованного по типам местоположений и данных, является PSPACE-полной . [27] Алгоритм решения этого фрагмента в DPLL(T) на основе решателях SMT был интегрирован в cvc5 . [28] Расширяя этот результат, можно также показать, что выполнимость аналога класса Бернейса – Шенфинкеля для логики разделения с неинтерпретируемыми ячейками памяти является PSPACE-полной, тогда как проблема неразрешима с интерпретируемыми ячейками памяти (например, целыми числами) или дальнейшими изменениями кванторов. [29]

  1. ^ Перейти обратно: а б Рейнольдс, Джон К. (2002). «Логика разделения: логика для общих изменяемых структур данных» (PDF) . ЛИКС .
  2. ^ Рейнольдс, Джон К. (1999). «Интуиционистские рассуждения об общей изменяемой структуре данных». В Дэвисе, Джим ; Роско, Билл ; Вудкок, Джим (ред.). Перспективы тысячелетия в области компьютерных наук, материалы симпозиума Оксфорд-Майкрософт 1999 года в честь сэра Тони Хоара . Пэлгрейв .
  3. ^ Перейти обратно: а б Иштиак, Самин; О'Хирн, Питер (2001). «BI как язык утверждений для изменяемых структур данных». Материалы 28-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . АКМ . стр. 14–26. дои : 10.1145/360204.375719 . ISBN  1581133367 . S2CID   2652274 . {{cite book}}: |journal= игнорируется ( помогите )
  4. ^ О'Хирн, Питер; Рейнольдс, Джон К.; Ян, Хонсок (2001). «Локальные рассуждения о программах, изменяющих структуры данных». КСЛ . CiteSeerX   10.1.1.29.1331 .
  5. ^ Берстолл, РМ (1972). «Некоторые методы проверки программ, изменяющих структуры данных». Машинный интеллект . 7 .
  6. ^ О'Хирн, PW; Пим, диджей (июнь 1999 г.). «Логика объединенных импликаций». Бюллетень символической логики . 5 (2): 215–244. CiteSeerX   10.1.1.27.4742 . дои : 10.2307/421090 . JSTOR   421090 . S2CID   2948552 .
  7. ^ О'Хирн, Питер (февраль 2019 г.). «Логика разделения» . Коммун. АКМ . 62 (2): 86–95. дои : 10.1145/3211968 . ISSN   0001-0782 .
  8. ^ Ян, Хонсок (2001). «Пример локальных рассуждений в логике указателей BI: алгоритм маркировки графа Шорра-Уэйта» . Материалы 1-го семинара по семантике «Программный анализ» и вычислительным средам для управления памятью .
  9. ^ Хобор, Фома Аквинский; Виллар, Жюль (2013). «Последствия совместного использования структур данных» (PDF) . Уведомления ACM SIGPLAN . 48 : 523–536. дои : 10.1145/2480359.2429131 .
  10. ^ Гарднер, Филиппа; Маффейс, Серхио; Смит, Харет (2012). «К программной логике для Java Script » (PDF) . Материалы 39-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования — POPL '12 . стр. 31–44. дои : 10.1145/2103656.2103663 . hdl : 10044/1/33265 . ISBN  9781450310833 . S2CID   9571576 .
  11. ^ О'Хирн, Питер (2007). «Ресурсы, параллелизм и локальное мышление» (PDF) . Теоретическая информатика . 375 (1–3): 271–307. дои : 10.1016/j.tcs.2006.12.035 .
  12. ^ Хоар, ЦАР (1972). «К теории параллельного программирования». Техники операционной системы. Академическая пресса .
  13. ^ Брукс, Стивен (2007). «Семантика логики параллельного разделения» (PDF) . Теоретическая информатика . 375 (1–3): 227–270. дои : 10.1016/j.tcs.2006.12.034 .
  14. ^ Дейкстра, Эдсгер В. Сотрудничающие последовательные процессы (EWD-123) (PDF) . Архив Э. В. Дейкстры. Центр американской истории Техасского университета в Остине . ( транскрипция ) (сентябрь 1965 г.)
  15. ^ Кальканьо, Криштиану; О'Хирн, Питер В.; Ян, Хонсок (2007). «Локальное действие и абстрактная логика разделения» (PDF) . 22-й ежегодный симпозиум IEEE по логике в информатике (LICS 2007) . стр. 366–378. CiteSeerX   10.1.1.66.6337 . дои : 10.1109/LICS.2007.30 . ISBN  978-0-7695-2908-0 . S2CID   1044254 .
  16. ^ Динсдейл-Янг, Томас; Биркедал, Ларс; Гарднер, Филиппа; Паркинсон, Мэтью; Ян, Хонсок (2013). «Просмотры» (PDF) . Уведомления ACM SIGPLAN . 48 : 287–300. дои : 10.1145/2480359.2429104 .
  17. ^ Сергей, Илья; Наневский, Александр; Банерджи, Аниндья (2015). «Определение и проверка параллельных алгоритмов с историей и субъективностью» (PDF) . 24-й Европейский симпозиум по программированию . arXiv : 1410.0306 . Бибкод : 2014arXiv1410.0306S .
  18. ^ Гоцман, Алексей; Бердин, Джош; Кук, Байрон; Сагив, Мули (2007). «Анализ резьбо-модульной формы». Верификация, проверка модели и абстрактная интерпретация (PDF) . Конспекты лекций по информатике. Том. 5403. стр. 266–277. дои : 10.1007/978-3-540-93900-9_3 . ISBN  978-3-540-93899-6 . {{cite book}}: |journal= игнорируется ( помогите )
  19. ^ «Премия Гёделя 2016» . Европейская ассоциация теоретической информатики . Проверено 29 августа 2022 г.
  20. ^ Логика разделения и двойное похищение, страница , сайт проекта Infer .
  21. ^ Facebook Infer с открытым исходным кодом: выявляйте ошибки перед отправкой. К. Кальканьо, Д. Дистефано и П. О'Хирн. 11 июня 2015 г.
  22. ^ Использование логики Crash Hoare для сертификации файловой системы FSCQ , Х. Чен и др., SOSP'15
  23. ^ Проверена правильность и безопасность OpenSSL HMAC . Леннарт Беринджер, Адам Петчер, Кэтрин К. Йе и Эндрю В. Аппель. На 24-м симпозиуме USENIX по безопасности , август 2015 г.
  24. ^ Практическая основа проверки для ядер упреждающей ОС . Фэнвэй Сюй, Мин Фу, Синьюй Фэн, Сяоран Чжан, Хуэй Чжан и Чжаохуэй Ли: В CAV 2016: 59-79.
  25. ^ Домашняя страница проекта Ynot , Гарвардский университет , США.
  26. ^ Viper: Инфраструктура проверки для рассуждений на основе разрешений , П. Мюллер, М. Шверхофф и Эй Джей Саммерс, VMCAI'16
  27. ^ Рейнольдс, Эндрю; Иосиф, Раду; Сербан, Кристина; Кинг, Тим (2016). «Процедура принятия решения для логики разделения в SMT» . В Арто, Сирилл; Легай, Аксель; Пелед, Дорон (ред.). Автоматизированная технология проверки и анализа . Конспекты лекций по информатике. Чам: Международное издательство Springer. стр. 244–261. arXiv : 1603.06844 . дои : 10.1007/978-3-319-46520-3_16 . ISBN  978-3-319-46520-3 .
  28. ^ Барбоза, Ханиэль; Барретт, Кларк; Брэйн, Мартин; Кремер, Гереон; Лахнитт, Ханна; Манн, Макай; Мохамед, Абдалрахман; Мохамед, Мудатир; Нимец, Айна; Нётцли, Андрес; Оздемир, Алекс; Прейнер, Матиас; Рейнольдс, Эндрю; Шэн, Ин; Тинелли, Чезаре (2022). «cvc5: универсальный и мощный решатель SMT». В Фисмане, Дана; Розу, Григоре (ред.). Инструменты и алгоритмы построения и анализа систем . Конспекты лекций по информатике. Чам: Международное издательство Springer. стр. 415–442. дои : 10.1007/978-3-030-99524-9_24 . ISBN  978-3-030-99524-9 .
  29. ^ Рейнольдс, Эндрю; Иосиф, Раду; Сербан, Кристина (2017). «Рассуждения во фрагменте логики разделения Бернейса-Шёнфинкеля-Рэмзи» . В Буаджани, Ахмед; Моннио, Дэвид (ред.). Верификация, проверка модели и абстрактная интерпретация . Конспекты лекций по информатике. Чам: Международное издательство Springer. стр. 462–482. дои : 10.1007/978-3-319-52234-0_25 . ISBN  978-3-319-52234-0 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2ab099623086f91fb67d2d6d9b205b67__1719023280
URL1:https://arc.ask3.ru/arc/aa/2a/67/2ab099623086f91fb67d2d6d9b205b67.html
Заголовок, (Title) документа по адресу, URL1:
Separation logic - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)