SBV - это проверка на основе SMT в Haskell. Выражайте свойства программ на Haskell и автоматически подтверждайте их с помощью решателей SMT.
1 ответ

Почему этот код SBV останавливается перед достижением установленного мной лимита?

У меня есть эта теорема (не уверен, что это правильное слово), и я хочу получить все решения. pairCube limit = do m <- natural exists "m" n <- natural exists "n" a <- natural exists "a" constrain $ m^3 .== n^2 constrain $ m .< limit retu…
08 дек '15 в 18:01
1 ответ

Попытка решить Ограничение Отношения Предка с SBV

Я пытаюсь решить следующую csp, включающую отношение предка в Haskell, используя библиотеку SBV (версия 7.12): Дайте мне набор всех людей, которые не происходят от Стивена. Мое решение (см. Ниже) получает следующее исключение *** Exception: SBV.Merg…
24 янв '19 в 17:19
1 ответ

Должно ли введение дополнительных ограничений улучшить время решения для решателей SMT?

У меня есть приложение SMT (построено на библиотеке Haskell SBV), которое решает некоторые сложные уравнения против одного s переменная в реальной логике с использованием Z3. Поиск решения занимает около 30 секунд в моем случае. Пытаясь ускорить про…
13 фев '19 в 19:45
1 ответ

Исключение из Z3 работает пример минимизации для Data.SBV

При запуске примера для функции оптимизации в библиотеке Data.SBV для Haskell: problem :: Goal problem = optimize Lexicographic $ do [x1, x2] <- mapM sReal ["x1", "x2"] constrain $ x1 + x2 .<= 10 constrain $ x1 - x2 .>= 3 constrain $ 5*x1 +…
20 сен '17 в 03:30
1 ответ

Превращение значений Haskell Int в константы для ограничений SBV

Я вижу много примеров использования библиотеки SBV следующим образом: f :: IO SatResult f = sat $ do x <- sInteger "x" constraint $ x .< 200 Для функции, которая принимает Haskell Int, я хотел бы использовать этот Int в моих формулах ограничен…
20 сен '17 в 16:47
1 ответ

Логики SMT с плавающей точкой медленнее реальных?

Я написал приложение на Haskell, которое вызывает решатель Z3 для решения ограничений с помощью некоторых сложных формул. Благодаря Haskell я могу быстро переключать тип данных, с которыми я работаю. При использовании SBV AlgReal типа для вычислений…
03 фев '19 в 12:27
1 ответ

Как получить символические функции квадратного корня и логарифма в SBV?

Единственное решение, которое я могу найти - это приближение квадратного корня, но это не работает символически, поэтому я не могу использовать его для доказательства.
08 дек '15 в 17:54
2 ответа

Автоматически получаемый Предоставляемый для предикатов по записям в SBV

Я нахожусь в ситуации, когда у меня есть тип данных, как data X = X {foo :: SInteger, bar :: SInteger} и я хочу доказать, например, forAll_ $ \x -> foo x + bar x .== bar x + foo x используя ssv Haskell. Это не компилируется, потому что X -> SB…
11 окт '16 в 11:25
2 ответа

Что означает "свободная логика" в контексте SMT?

Даже для простейших арифметических задач SMT экзистенциальный квантификатор необходим для объявления символических переменных. А также ∀ квантификатор можно превратить в ∃ инвертируя ограничение. Итак, я могу использовать их оба в QF_* логика и все …
18 фев '19 в 10:27
1 ответ

Кодирование расширенных натуральных чисел в SBV

Я экспериментирую со следующим способом кодирования расширенных натуральных чисел в SMT-LIB (я определяю тип данных, аналогичный Maybe Integer): ; extended integers -- if first field is true, then the value is infinity (declare-datatypes () ((IntX (…
23 ноя '18 в 10:00
2 ответа

Символическая теория, доказывающая использование SBV и Haskell

Я использую SBV (с бэкэндом Z3) в Haskell, чтобы создать теоретические доказательства. Я хочу проверить, если все в порядке x а также y с заданными ограничениями (например, x + y = y + x, где + является "оператором плюс", а не дополнением) некоторые…
08 июл '15 в 14:49
1 ответ

Объединение кортежей в SBV?

В основном мне интересно, есть ли способ написать функцию следующего типа с библиотекой SBV: (SBV a, SBV b) -> SBV (a,b) Кажется, это должно быть возможно: если у нас есть два символических значения, мы можем создать новое символическое значение …
03 июл '19 в 21:23
2 ответа

Утверждение, что класс типов верен для всех результатов применения семейства типов

У меня есть семейство типов, определенное следующим образом: type family Vec a (n :: Nat) where Vec a Z = a Vec a (S n) = (a, Vec a n) Я хотел бы заявить, что результат применения этого семейства типов всегда соответствует ограничению класса SymVal …
1 ответ

Как отладить отсутствующие переменные в выводе SMT-Lib?

Основываясь на этом очень полезном ответе, я переписал свою программу-решатель для сохранения состояния, чтобы использоватьQueryмонада и постоянно увеличивающийся список переменных SMT, обозначающих входные данные. Я ожидал от этого одного из двух р…
04 июл '20 в 07:20
1 ответ

Как использовать Data.SBV для правильной реализации стековой машины?

Грэм Хаттон во 2-м издании " Программирование на Haskell" посвящает последние две главы теме реализации AST на основе стековых машин. И в заключение он показывает, как получить правильную реализацию этой машины из семантической модели AST. Я пытаюсь…
07 янв '20 в 16:49
1 ответ

Почему сортировка Int32 намного медленнее, чем сортировка Integer в этом коде SBV/Z3?

Пытаясь изучить Z3, я попытался решить одну из моих любимых задач, связанных с появлением кода (особенно сложную, 2018 день 23, часть 2), с помощью привязок Haskell.sbv. Впереди спойлеры в коде... module Lib ( solve ) where import Data.SBV puzzle ::…
26 фев '20 в 03:13
1 ответ

Эффективный способ выполнять n-арные ветвления / табличные функции?

Я пытаюсь получить базовую информацию о характеристиках производительности веток в SBV. Предположим, у меня есть SInt16 и очень разреженная таблица поиска Map Int16 a. Я могу реализовать поиск с помощью вложенныхite: sCase :: (Mergeable a) => SIn…
08 июл '20 в 15:26
1 ответ

Использование Z3 с распараллеливанием из SBV

Я хотел бы использовать Z3 через SBV с использованием нескольких ядер. Основываясь на этом ответе, я смогу сделать это, просто передавparallel.enable=true к z3исполняемый файл в командной строке. Поскольку я использую SBV, мне нужно пройти через инт…
30 июл '20 в 10:28
1 ответ

Эффективный способ "продолжать крутить ручку" при вычислении с отслеживанием состояния

У меня есть процесс с отслеживанием состояния, который смоделирован как i -> RWS r w s a. Я хочу кормить его вводомcmds :: [i]; в настоящее время я занимаюсь этим оптом: let play = runGame theGame . go where go [] = finished go ((v, n):cmds) = do…
03 июл '20 в 15:25
1 ответ

найти строку, соответствующую как можно большему количеству регулярных выражений в наборе регулярных выражений

Предположим, у меня есть набор регулярных выражений R, как мне найти строку s, которая соответствует как можно большему количеству регулярных выражений? Например, если R = {a\*b, b\*, c}, тогда s может быть "b". Не уверен, может быть, реша…
29 июл '20 в 08:29