Mouse users are like "Just click a button."
Using the AI terminal CLI is mostly an ego thing. The desktop app looks better and does the exact same job. Most developers just use the terminal so their non-tech coworkers think they’re doing matrix-level programming. Clicking a button does the job. Stop pretending.
2
1
188
Daniel Firth (Inspector GADT) retweeted
"Why is formal verification exploding NOW?" 1. Nobody understands the code LLMs write 2. Everybody hopes for some deus ex machina
"Why is formal verification exploding NOW?" 1. Cost of proofs is going DOWN (as AI gets more capable) 2. Cost of exploits is going UP (as AI gets more dangerous) 3. Proofs exterminate exploits 4. Bonus: proof checking = perfect math/coding RL reward The rest is economics
12
45
725
20,030
Daniel Firth (Inspector GADT) retweeted
If you’re formally verifying software with Lean and you’re not proving inductive specs you’re doing it wrong Inductive specs allow you to describe and prove powerful properties like “this app will never crash” or “nobody can steal funds”
10
6
88
4,124
Daniel Firth (Inspector GADT) retweeted
"Why is formal verification exploding NOW?" 1. Cost of proofs is going DOWN (as AI gets more capable) 2. Cost of exploits is going UP (as AI gets more dangerous) 3. Proofs exterminate exploits 4. Bonus: proof checking = perfect math/coding RL reward The rest is economics
54
131
2,310
77,810
Daniel Firth (Inspector GADT) retweeted
It is a weird weird year to be a formal methods expert. Some unorganized thoughts on the new @AnthropicAI and @theoremlabs post on formal verification (anthropic.com/research/forma…): - This is very cool. - The main innovation is verifying a later stage of the program. Normally provers take the source code, LLM it into a theorem language, and then prove that, which means you have to make assumptions about source semantics and compilation properties. It's very easy to make a mistake in translating and prove the wrong thing! What they instead do is compile the code into assembly, and then (if I understand this correctly), compile that assembly into a theorem language (which they call LPS). So as long as the compiler is faithful you can skip the whole divergence problem. - I'm glad they clarify that you still have to trust the translation process, the "hardware, OS, OCaml" compiler, the LPS model, and also assume that the program is single threaded with fixed memory. The single biggest source of errors in formally verified code is when the proof assumes something that isn't true in practice. It's really, really important to state your assumptions! - I'm not clear why they need to compile the fuzzer into the theorem. Is it to act as a description of valid inputs and workload? Maybe to embed assertions in as theorems? - Holy crap, 180 million lines of Rocq. Is that more Rocq than exists in the world already? I notice they say a 600,000 line proof corresponds to roughly 20k CPU instructions. That would be like, 1-2k lines of source code at most? Really goes to show how inefficient this approach is and how it only works because you can throw LLMs at the problem. - This, probably deliberately, doesn't address the single biggest gap in AI-based verification: AIs cannot come up with good properties. Doesn't matter if you're doing unit testing, property testing, formal verification. I always assumed this was a "frontier labs haven't trained for it yet" thing, but if Anthropic hasn't talked about that here, maybe they've tried and haven't been successful yet. That's interesting to me. Instead, they take a known universal property (this code doesn't crash or get flagged by UBsan) and prove that instead. Still very useful, but makes it harder to generalize to proving arbitrary things about arbitrary programs. - Anybody reading the official post should also read their expert review appendix (www-cdn.anthropic.com/files/…). It points out some interesting things, like the fact that most of the code the LLM wrote wasn't used in the proof (over one billion lines of Rocq), that they had to prove the equivalence between fuzzed and unfuzzed programs, and (this is most interesting), some experiments find that the LLM-method of proofwriting may not scale to more complex things. - Also read the description of LPS (github.com/theorem-labs/oss-…) to understand the limitations of the assembly -> Rocq compilation. In particular, it does not handle concurrency at all (which is one of the main use cases for formal methods!) or OS signals. Also it can't prove things about program arguments with slash characters, meaning they can prove stuff about `rm foo` but not `rm foo/bar`. - The official skill (github.com/theorem-labs/oss-…) doesn't tell us much about the nature of FM and AI. Probably too much for me to hope of any skill. - Some of the article's specific caveats and throat clearings make me think someone at Anthropic reads my stuff ( ͡° ͜ʖ ͡°)
36
122
815
193,720
Used visible forall in a GADT today.
1
13
639
You can't hack a function.
4
5
337
Should have used Haskell.
An urgent notice from the Railway team blog.railway.com/p/security-…
14
420
On deterministically generated AI documentation. I think you could combine New Ithkuil with a variant of DisCoCirc to create a free monad DSL that you could interpret deterministically into natural sounding English. The LLMs would only be able to construct valid Ithkuil circuits and anything else would fail to type check.
1
5
398
Here's my public quality control handbook that I give to my agents on load. Covers a lot of things, but most importantly how to avoid using python, bash, or basically anything other than Haskell 100% of the time. openfp.net/quality-control/h…
1
12
594
"But why do you need a Haskell console in that?" vortex.openfp.net
1
10
349
Try this prompt. If you have a webapp and want to port it to Haskell. "Can you send ':commands' to this websocket at nixlab.openfp.net/ws, inspect all the projects to learn how to use vortex, then port me over to miso on horizon-javascript at GHC 10.0 with a vortex API on the backend using horizon-platform at GHC 10.0. Keep all my branding and frontend design. Then show me what I can do with this that I can't do with REST."
6
363
Here's how I make a merge request on nixlab.openfp.net ``` do mr <- openMergeRequest "systems/ashenvale" "Update README" "This is a description" let n = mrNumber mr a <- setAutoMerge n True b <- setAutoTag n "1.0.0" pure (n, a, b) ``` Then send that over a websocket and it's processed on the server completely safely.
2
206
Whether your code is written by a human, clanker, monkey, potato, spatula or white noise generator The answer is still "Use pure functions statically checked with algebraic data types."
1
14
92
2,028
Entropy is universal. Just like how search engines died. If you don't put effort into the system the models will eventually collapse. Another way of saying use Haskell.
One of the big problems with everyone vibe-coding everything rather than actually just checking and reviewing the output, is that LLMs are going to train themselves on their own output. LLMs are going to have problems related to inbreeding. Other AIs are beginning to have this. This model collapse or Habsburg AI is a serious problem in all of the kinds of models (LLM, generative, etc), and Goddamn do I worry it'll be an issue sooner rather than later. They could stop say "only train on data before this date", but that'll limit them too for when new things happen. I believe many companies adding the fingerprinting/watermarks is probably a big reason now of doing it. They are marketing to allow people to see if something is AI made, when in reality they are adding it to prevent their own models from consuming it, producing inbreed cannibalism.
1
12
319
An excerpt from my QC handbook: ``` #law("Script in vortex, never Python", kind: "review")[ A task you would reach for a script to do — fetching, reading, transforming data — is a vortex program run by a Haskell host. Never Python, and never a bash loop. If no DSL covers the domain, invent one: a typed effect row over a pure interpreter, a host folding it to the answer. Bash and Python have no type, no error value and no composition, so their failures are silent: a lost reply reads as an empty result, a pipe truncates output, and a sweep of 151 calls yields one answer with no error at all. A vortex program fails by refusing to compile, and every answer is a typed value that reaches the reader in full. Whenever a problem is solvable in a single vortex call with a monadic block, it is written as one. ] ```
Introducing Haskell Vortex: Put a Haskell console in anything. Link in comments
6
397