Slightly more complicated than the toy examples shown in the documentation above, and hints at one of the real world use cases for Z3 - red teaming cryptography.
That said, I'm not sure the documentation linked above is really doing it any favors in terms of helping popularizing it.
How does it compare to the others? I started trying to use Zinc but I get lost in all the vocabulary and literature which assumes you already have a background in it.
I know this because the first thing I did when I got to the page was hit F12 to bring up the debugging tools and turn these styles off so I could read it. :)
Computer scientists are in denial about it, but CS is a branch of theoretical physics, not mathematics. You can point to this or that model of computation, such as lambda calculus or mu-recursive functions and try to claim its abstracted well beyond the particular laws of physics for some specific universe, but they all have some kind of rate limit built into them... and where does the motivation for this idea, that it takes something (time, space, work) to compute something ultimately come from? That's right - from underlying physics itself[1] - from the Bekenstein bound or Bremermann's limit or the like.
Even apparently non-physically-realizable models of computation like non-deterministic Turing machines are ultimately informed by and motivated by concepts in physics... otherwise they would just be examples of chmess[2] and of no interest to anyone. Computer science is of course somewhat abstracted from the details, but no more so than, say, thermodynamics, where concepts like entropy or Gibbs free energy can be studied in the abstract without reference to whether we are talking about a gas of non-interacting molecules or the spins of a bunch of electrons trapped in a lattice.
So, it's of no surprise whatsoever that the fundamental problems of distributed computing are ultimately the same as those found in the relativity of simultaneity[3]. You've all been studying the same things all along, just with different tools and at different levels of abstraction.
Maybe thats why one of the not-so-bad ideas how to go about distributed systems came from a guy who was trained as a physicist and used to complain to his fellow programmers that “a lot of systems actually break the laws of physics”[1]?
> In distributed systems there is no real shared state (imagine one machine in the USA another in Sweden) where is the shared state? In the middle of the Atlantic? - shared state breaks laws of physics. State changes are propagated at the speed of light - we always know how things were at a remote site not how they are now. What we know is what they last told us. If you make a software abstraction that ignores this fact you’ll be in trouble.[2]
A thought provoking leading question I have is (1) a space heater throws power into a coil and generates heat and nothing more in the world (2) an LLM into a GPU throws power into the GPU and generates heat and organized information.
Is (2) generating less heat so that the laws of thermodynamics account for the increased amount of "useful stuff" generated (the organized information)? Switch (2) for a bitcoin miner if you prefer.
Is the act of increasing order in the data, somehow costing some energy? Is there a fundamental minimum cost to flipping bits? Something about the switch of energy to matter and back, seems involved here.
I think the nature of computation is holding some secrets about the meaning of the universe, if there is any.
But modern computers are nowhere near this theoretical limit, nor any of the other limits I mentioned above. Nevertheless, most of heat generated from modern CPUs does come from bits turning on and off. Each transistor is a tiny capacitor, that holds a charge when its ON. When it switches OFF, it dumps that charge down the drain, creating waste heat. This is a limitation of our technolgy, not a fundamental limit of physics.
Could be worse, though; early chips would disipate heat even when they weren't doing anything. CMOS improved this enormously by pairing up "complementary" transistors so current only flows when something changes.
Still, from the universe's point of view, what we consider a super advanced computer is a lot closer to a space heater than anything that pushes up against its computational limits. Consider, for example, that quarks operate on time scales of 10^23 Hz, and the universe is happy to run three of those in every proton in every star in the universe. In fact, it runs 10^24 of them for one CPU, and that same CPU can't even simulate the quarks of one proton in real time.
Let's face it: we're like kids in Minecraft who think it's cool watch a calculation of 2+2 trickle through a redstone computer in a minute, while the GPU is rendering a billion triangles every second to give them that view.
I suspect this is old news for you, but just in case you haven't heard of it, check out Feynman's Lectures on Computation. A surprising amount of the book is still relevant, and it's fun how much he always brings everything back to the physics.
That's true. Chess only teaches two general lessons about strategy: look more than one step ahead, and invent heuristics (abstractions that let you estimate if positions are good or bad) for yourself. Those are useful lessons, but you don't need to play thousands of games to grasp those ideas.
Other aspects of strategy, like shortening decision loops[1], forming alliances, or the exploration/exploitation tradeoff[3], are simply not represented by chess because it is a turn-based, zero-sum game with perfect information. That makes chess a poor model of real-world strategy.
Still, the things it does teach are real and useful, so as long as you don't think its the end-all, be-all of strategic thinking you can get something out of it.
I think chess teaches a lot more.
It teaches decision making and resource management. It's very important to consider your options and decide how much time you spend analyzing them. It teaches you things like elimination process (if you have 3 options, one complicated one and 2 simple ones then start analyzing simple ones because if they are bad you just saved a lot of time by not analyzing 3rd one).
It also teaches you to forget about the past and focus on the present. It teaches you long term plans usually don't work and relying on them is a bad idea and it's better to focus on execution here and now (this is what Soviet school got wrong although probably only officially, the players knew it all along - analogies to 5 years plans were just too tempting for book authors).
At human level it also teaches you to design strategy to exploit your opponents - play openings they hate, simplify vs players who like complicated positions, complicate vs players who like simple ones.
There is a lot of interesting things you learn about thought process and decision making as your level improve. It might not be the best game for that but it's pretty good considered how simple it is.
I'd argue that chess similarly has "useless skills". But learning "useless skills" is one of the most important things you can do for yourself to learn "useful skills".
Not everything has to be an absolute competition-or-not. For the same reason you can enjoy a casual game of chess with a friend, you can enjoy a casual game of some RTS. Helps that there are a lot of open source RTS communities that each have their own skills-emphasis.
> Chess only teaches two general lessons about strategy: look more than one step ahead, and invent heuristics
That is true for an engine.
Meta-games around studying your opponent, specific match preparation and all those game theoretic stuff are so pervasive people claim they are 'killing' chess at top levels. Anyway, for humans, chess at high levels of mastery is a striking display of bootstrapping some insane cognitive machinery around memory, processing speed, 'expanding' working memory via understanding:
"Only teaches two useful lessons" seems a little certain.
Off the top of my head I can think of a number - the value of diversity and the contextual power of capabilities such as the power of weaker pieces used diligently, and the power of counterintuitive sacrifices.
Chess also makes no accommodation for your fantasies and ego. There is no luck, only skill.
There is also much to be garnered from the layered complexity of strategy, where some strategies will take you to a certain level of play that need to be completely replaced or expanded with nuance to reach a higher level.
There are many lessons to be learned from chess.
That said, I would not recommend anyone become good at chess to get good at life.
It’s popular to dismiss LLMs as “just next token predictors.” This is technically true, but also kind of misses the point. Markov chains, RNNs, and transformers are all language models that can be described as “next token predictors,” but they don’t all work equally well. A better question to ask is: “What is this model’s inductive bias?”
A Markov chain (an -gram model) assumes the next word depends on the previous words, and that each possible combination of words has a completely independent parameter. (Andrey Markov proposed using this language model over a century ago, making it the granddaddy of modern LLMs.) So, for a vocabulary of size , there are parameters to learn. For even a smallish like 5, that already explodes the hypothesis space beyond what can be learned from even a huge text corpus like the entire internet. And, simultaneously, having a context window of only the previous 5 words is grossly inadequate for modeling real-world language. Like our FCNN above, this model suffers from having an inductive bias which is too weak.
RNNs tried to fix this problem by compressing the entire history into a single fixed-size state vector, updated one token at a time. But that compression is itself a brutal assumption: everything worth remembering about the past must survive being squeezed through a tiny bottleneck at every step. In practice, RNN models quickly lose the plot after a handful of sentences. Locally, the text they generate looks grammatically correct and meaningful, but zoom out a little and they’re basically nonsense generators. Like our naïve linear model, this model suffers from having an inductive bias which is too strong.
Transformers manage to hit a sweet spot: by keeping the recent history around as a working memory, and attending to different parts of it at different times, the transformer’s bias matches real structure in language: the referent of a pronoun, the subject of a verb, the parenthesis waiting to be closed. Not only that, but the particular structure of the transformer, basically a weighted sum of semantic vectors from the context window, has empirically been shown to somehow be a “good enough” match for the structure of real-world language found in the wild.
Transformers aren’t “smarter” than other possible language models, they just happen to land in that Goldilocks zone where their inductive bias is just right.
Negative numbers were popularized in Europe by Michael Stifel's 1544 book Arithmetica Integra, where he called them "numeri absurdi." The concept emerged gradually, as mathematicians found they were useful for solving equations as a kind of "notional convenience," even though they did not think they were real in a Platonic sense.
The same book contains an extraordinary number of nascent mathematical ideas. For example, he talks about "circular numbers," which today we would call modulo arithmetic. He gives a method of multiplication involving a cross that gives rise to our modern "X" symbol for multiplication, but was the first to use algebraic juxtaposition (simply putting two letters next to each other to denote multiplication) and the concept of an "exponent:" `E = mc^2` would look a lot different without Stifel's work!
The most amazing thing in the book, in my opinion, is the extraordinary connection between arithmetic progression and geometric progression he mentions in an almost offhand way[1] (link goes to the Internet Archive version of the book.)
Here, he is using his new negative number notation and exponent concepts together to illustrate that there is some deep connection between addition and multiplication. As far as we know, this was the first mention of the concept that led Napier to invent the logarithm.
There's a well-known book that labels programmers as a specific type of pointless job. "Duct tapers" is the category. Also task masters, who would have a foot under the software development umbrella, have space in the book.
We are socially punished for our extremely cushy jobs
SWE has negative social value. Saying you’re a SWE or god forbid anything in AI in a dating/courtship context is basically suicide.
We are paid so well as compensation for debasing ourselves socially. A lot of normies intuitively understand the concepts in that book even without reading it and either see you as evil or a grifter, maybe both, when you say you work in tech/AI.
A lot of people are going to have extreme schadenfreud as they watch tech workers take L after L. They really hate us, they want us bullied or dead or wishing we were.
Still, it was totally worth it because the blue collar pricks that dislike tech workers are even worse in so many ways. At least I’m not a shitty construction worker responsible for contributing to the pathetic state that our housing industry is in.
I've noticed or experienced absolutely none of this. The closest thing I can relate to is that I operate on a different intellectual plane from some of my blue-collar friends. This causes a divide and probably limits intimacy, but does not result in negative relationships.
Regarding the dating world, it impresses people that I'm an SWE. My role is a boon, maybe because it signals intelligence; I'm not sure.
Strongly disagree here. Would encourage you to try to reframe some of that. Sorry if that comes across as patronizing.
This hasn’t been true for me. Not only are the majority of software engineers I know married but also looking at the marriage rates in high-income in the Bay Area, it’s quite high, so I don’t think it’s specific to my group.
There are angry people on the Internet but real life has rarely reflected them.
It sounds like you are describing a problem with the San Francisco dating scene, which does relate to a small subset of the SWE experience, but hardly covers anything close to the totality of being an SWE.
Is it just possible that your dating problems come from somewhere else? I personally haven't experienced the negative social consequences you're describing, but I'm also not dating in SF.
Well, I certainly was not trying to 'gaslight' you considering I repeatedly anchored my view in "for me" and "engineers I know" and then used a statistic to say that my experience seems pretty standard.
To gaslight you would be to try to convince you that your experience is not what it was. I have no doubt that one's social context determines the outcomes here a lot.
That has not been my experience at all. Usually people aren't interested in the career as a conversation topic ("Oh I don't understand anything about computers! Anyway,") but I've never seen anything like what you're describing.
Maybe AI people specifically get that kind of reaction, but that's a pretty hot topic at the moment.
I haven't found that to be true at all. So I suppose there's a personal component to it and your observation doesn't apply universally? If so, though, that's possibly good news: it means there may be factors that are yours to evolve for better prospects.
There isn’t a word in the comment that I can relate to. Might be a US thing, I’m in Europe.
My [very normal although otherworldly beautiful] wife thinks my job is interesting and talks about me with pride.
When I tell people that I work in IT, they almost never think of FAANG, because these companies aren’t really considered that interesting or important over here. I think it’s uniquely a US thing to conflate “IT” with “SV sociopaths”.
I've taken a lot of notes and done a lot of "scratchpad thinking" over the last 20 years, something I started in college but really got into in grad school. I've tried Evernote, OneNote, Obsidian. I've tried little journal apps on my phone. I wrote my own little "microblog" in Django to make it easy to collect and annotate links, quotes, snippets, and images from around the internet. And what I always keep coming back to is plain text files and folders of saved images and files, as well as paper.
For text files, I always have one generic TODO.md file that uses the `[ ]` todo and `[X]` done notation, and a couple of more generic text files like "work.md" or "solace.md" for more free form writing. There are also folders and text files for specific topics, like quotes, poems, etc. It's very important to have a scratchpad that you can just open up and start typing without thinking about how to categorize it, because you might lose the precious thread of the thought while debating which category to use, and you can always shelve it later if it's worth keeping. Zero friction to start typing is crucial.
On paper, I use a simple loose leaf and folder system. I used to use bound journals, but since 80% of what I write down is thrown away, loose leaf works better. Have a pile of about 10-20 pages. You fill up a page, and if it's destined for the circular file, dog-ear it; otherwise give it a title and date and move it to the bottom of the pile. When you run out of blank pages, go through and either discard or file each page in an appropriate manila folder. This works better than index cards (which are too small to contain a complete thought) or journals (where it's too hard to discard pages.) Lots of people use ring or disc bound journals for that, but I find that fiddly and not any easier to work with than loose-leaf, probably because I just keep everything at my desk and don't have to carry it around anywhere.
Paper has a massive advantage when it comes to diagrams, design thinking, and mathematical equations. I love LaTeX, and use MathJax on my personal site quite heavily, but its so much slower and less fluent than just writing equations on paper. I've tried tablets, and am really good at using draw.io (now app.diagrams.net) but when you're thinking freeform you want flexibility and fluency above all else and never want to be fighting a UI, which takes you out of the flow state. Ideas are fragile things, especially when newborn; any distraction is an unacceptable risk.
I used to use a custom Tesseract pipeline to OCR the pages I wanted to be searchable, but lately I've just been using ChatGPT, which seems to do just fine with my handwriting. As OCR got better over the years, I actually moved more towards paper, because what's the downside?
So, getting back to the point of the article: PKM tools are stuck in the unenviable position of competing with both paper and ordinary text files, and for me they just don't offer enough advantages.
https://www.oranlooney.com/post/playfair/#known-plaintext-at...
Slightly more complicated than the toy examples shown in the documentation above, and hints at one of the real world use cases for Z3 - red teaming cryptography.
That said, I'm not sure the documentation linked above is really doing it any favors in terms of helping popularizing it.
reply