protocol(Foo, {
rel p(x)
start x=2
y=1 until y=2 and x<2 or always x=1
eventually...
})
So I've this crazy idea that since the language has goals then they could be used for a proofs or a model checker or some such without changing the base syntax ('x>2' itself is already a constraint) and I saw mentions of TLA+ in some website. basically you write a relation inside protocol
that gets recognized as such, maybe macros if they get added. So in addition to x>2 there are temporal operators such as until/always/init/next
, or even a forall mechanism, which have meaning and the AST could be re-used for checks.
Cosmos source
βΌ
typed AST
βΌ
Cosmos IR
ββββββββββββββββΊ normal compiler
ββββββββββββββββΊ TLA+ (protocol/temporal checking)
ββββββββββββββββΊ SMT (constraints/ARITH)
ββββββββββββββββΊ Rocq (deep formal proofs)
Cosmos temporal IR
ββββββββββββββββββ
βΌ βΌ
TLA+ SMT
TLC SMT solver
state-space check bounded/property check
So I got these suggestion and I'm only wondering if someone is familiar with such tools and if they might find it useful for the language to have it.
>>109992991
yeah me too