- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
Definition read_t key cont : Thread :=
call tx_context <- get_tx_context;
call cell <- get_cell key tx_context;
match cell.(cell_write) with
| Some v =>
do _ <- log (read key v);
cont v
| None =>
do v <- read_d key;
let tx_context' := set tx_cells <[key := cell]> tx_context in
do _ <- pd_set tx_context';
do _ <- log (read key v);
cont v
end.
CHayT 16.09.2020 12:07 # +1
Cnapmak 16.09.2020 12:59 # +4
Desktop 17.09.2020 18:51 # 0
Pig 16.09.2020 20:23 # 0
bormand 17.09.2020 17:29 # 0
В лучших традициях джаваскрипт фреймворков...
do/call и стрелочка это эмуляция императивщины?
CHayT 17.09.2020 17:53 # 0
bormand 17.09.2020 18:00 # 0
CHayT 17.09.2020 18:05 # 0
bormand 17.09.2020 18:07 # 0
CHayT 17.09.2020 18:11 # 0
bormand 17.09.2020 18:46 # 0
CHayT 17.09.2020 19:20 # 0
bormand 17.09.2020 19:24 # 0
А исполняться это будет через выгрузку в их верифицированный конпелятор си?
CHayT 17.09.2020 19:30 # 0
bootcamp_dropout 17.09.2020 19:56 # 0
Как в реальной жизни эти свойства доказываются? Твоя прога строит граф всех состояний системы? Бд это же асинхронная и недетерминированная система?
CHayT 17.09.2020 20:21 # 0
Да. Все model-checker'ы так и работают. Но в моём случае состояние системы представлено не конкретно (как в "TLA+", "Promela", "Spin" и "Concuerror", например), а параметрически, в виде системы уравнений. Так веселее. Потом из доказательства про этот граф можно сделать тройку Хоара, а их уже можно как угодно кобенировать.
> Бд это же асинхронная и недетерминированная система?
Именно. Она использует сеть, которая пакеты теряет и т.д. Поэтому результат I/O действия определяется как множество возможных исходов. Опять-таки символьно.
bootcamp_dropout 17.09.2020 20:42 # 0
Переменные в ней это что?
Множество решений системы - множество состояний? Это сколько уравнений в системе получается?
CHayT 17.09.2020 21:06 # +2
Состояния частей системы. Если у тебя в стейте есть переменная, то состояние этой переменной. Если есть сеть, то список in-flight пакетов, и т.д.
> Множество решений системы - множество состояний?
Да.
> Это сколько уравнений в системе получается?
Экспоненциально много, иначе никак ^___~ Сейчас пилю оптимизацию про сокращение этого добра примерно на порядок, через знание о том, какие операции коммутируют.
bootcamp_dropout 17.09.2020 21:26 # 0
CHayT 17.09.2020 21:30 # +2
В оптимизированной там формально верифицированный адок.
bootcamp_dropout 17.09.2020 21:42 # 0
у тебя есть какая-то модель из состояний и ограничений которая описывает систему, ты из нее строишь систему уравнений, решаешь и получаешь множество вершин графа. А откуда у тебя берется множество ребер?
bormand 17.09.2020 21:44 # 0
CHayT 17.09.2020 22:10 # 0
Из кода выше. "TE" (Trace Event) это и есть ребро графа. "list TE" — список сисколлов процесса (как если к нему strace'ом подрубиться). Он получается раскукоживанием кода из OP-поста. (На самом деле это и не код вовсе, а структура данных хитрая, которая кодирует все возможные поведения процесса).
bootcamp_dropout 17.09.2020 22:28 # 0
Ты запускаешь бд, у тебя появляется высер из логов, ты его перемешиваешь и что-то доказываешь?
CHayT 17.09.2020 22:36 # 0
bootcamp_dropout 17.09.2020 22:38 # 0
bormand 17.09.2020 22:40 # +1
CHayT 17.09.2020 22:40 # 0
bootcamp_dropout 17.09.2020 22:42 # 0
CHayT 17.09.2020 22:44 # 0
bormand 17.09.2020 22:45 # 0
Лоол. У них то питух то куритса.
bootcamp_dropout 17.09.2020 23:01 # 0
CHayT 17.09.2020 23:28 # 0