Fork me on GitHub
#off-topic
<
2022-05-29
>
David Vujic10:05:47

Yesterday felt like a good day to uninstall & install some things. :rain_cloud: I wrote a short post about how switching from docker to podman went here: https://davidvujic.blogspot.com/2022/05/hi-podman-bye-docker.html

šŸ‘ 1
šŸš€ 2
danieroux19:05:04

Mostly off-topic: I have two processes. Both state machines, that interact and drive each other. Neither implemented in Clojure, and only one implemented by us. I want to model these two and check for correctness. We found a bug in our state machine, because we did not cater for a state transition in "their" state machine. Reaching for TLA+, I have something working. Then I needed to add time (https://github.com/tlaplus/Examples/blob/9d7de44a8a37e415c8ba6e24d167632d53c24176/specifications/SpecifyingSystems/RealTime/RealTime.tla) and the wheels fell off (spectacularly). So my question is this: What would you reach for to check for correctness? It is worth figuring out how to do this in TLA+? Will https://github.com/Datomic/simulant and https://github.com/candera/causatum fit here?

šŸ‘€ 1
hiredman19:05:32

https://gist.github.com/hiredman/60e5e6f0025cb38c8a7739d21f5a8ce6 is a toy for specifying and checking stateful protocols (describing a state machine in spec)

hiredman19:05:56

For finite state machines you often don't actually need to do proofs, because you can do exhaustive checking for a finite set of states

hiredman19:05:02

https://www.hillelwayne.com/post/alloy6/ alloy might be interesting to check out too

danieroux19:05:13

Thank you @U0NCTKEV8, you always seem to have infinitely deep sleeves to pull something from!

Drew Verlee22:05:21

@U0NCTKEV8 https://gist.github.com/hiredman/60e5e6f0025cb38c8a7739d21f5a8ce6 Are you using core async to mock a internet network? Is the goal here to have some communication protocol between 2 actors/servers/whatever and then see what happens with arbitrary message failures? I'm trying to read the code top down as by the time i hit the details i lose the thread...

hiredman00:05:06

core.async is just how the code communicates

hiredman00:05:16

The idea is to define, via spec, how a stateful protocol operates over time (start in state x, in which messages q w and e can happen, and those messages cause it to change to another state)

šŸ‘ 1
Drew Verlee01:05:55

Thanks, haven't looked at the link but the explanation makes sense.

Martynas Maciulevičius04:05:32

What if a state machine has multiple possible states in multiple places? For instance 10 variables which can be populated depending on some rules and each can have n states. Is it 10^n of combinations to describe in the state machine "checker" language?

bronsa15:05:34

you could also check out http://docs.imandra.ai/imandra-docs , it's a computable logic as a subset of ocaml (much in the spirit of ACL2) with seamless integration between (semi)-automated inductive proofs and bounded model checking (disclaimer: I work on this).