| ▲ | "Why not just use Lean?"(lawrencecpaulson.github.io) |
| 128 points by ibobev 3 hours ago | 54 comments |
| |
|
| ▲ | c0balt 26 minutes ago | parent | next [-] |
| Isabelle/HOL as a language is nice, but the tooling has deep flaws even outside the pure desktop-first app approach. The language is different (not necessarily better) in comparison to Lean, but I do agree with some of the points on dependent types. It seems both languages mostly just made different tradeoffs, which imo, were fair and have shaped them into quite efficient tools for their domains. The domain of "proofs" is large and different paradigms just have different strengths/weaknesses, Lean just specialized for a different part of this space. Sledgehammer is nice but probably just a question of time until an equivalent can be ported/created for Lean. It might also be nice to use for explorative phases but is a resource hog, it also makes proofs concise but I would usually rather see the full chain of steps directly for a proof in the published code instead of a semi-magic "by sledgehammer". Working on Isabelle itself however is painful (especially communicating with developers) in comparison to Lean. Things like "we don't have bugs just unexpected behaviour" on the mailing list just seems childish/unprofessional. The callout to RAM consumption of Lean and related systems is also a bit of joke when looking at Isabelle's gluttony for RAM. |
| |
| ▲ | vintermann 12 minutes ago | parent | next [-] | | Last I checked, Isabelle/HOL used a custom Emacs mode as their interface. (I could be mixing it up with one of the other HOLs). | |
| ▲ | zozbot234 23 minutes ago | parent | prev [-] | | > but I would usually rather see the full chain of steps directly for a proof in the published code instead of a semi-magic "by sledgehammer". One issue with this is that coming up with a quickly-checkable certificate for UNSAT is not exactly a trivial problem. It's effectively the same as writing a formal proof. |
|
|
| ▲ | kccqzy 2 hours ago | parent | prev | next [-] |
| For the HN crowd who are generally programmers but not necessarily mathematicians, it’s more relevant to consider the programming side of things. There is a very good book (one I haven’t finished unfortunately) that covers Lean from a functional programming perspective rather than proving mathematics perspective: https://leanprover.github.io/functional_programming_in_lean/ I am learning Lean myself so forgive me as I have an overly rosy picture of it as a beginner. My current goal is to write and prove the kind of code normal programmers would write, such as real-world compression/decompression algorithms as in the recent lean-zip example: https://github.com/kiranandcode/lean-zip/blob/master/Zip/Nat... |
| |
| ▲ | readthenotes1 an hour ago | parent [-] | | I recall an experiment in proving software correct from the 1990s that found more errors in the final proof annotations than in the software it had proved correct. Then, I foresee 2 other obstacles, 1 of which may disappear: 1. Actually knowing what the software is supposed to do is hard. Understanding what the users actually want to do and what the customers are paying to do --which aren't necessarily the same thing--is complex 2. The quality of the work of many software developers is abysmal and I don't know why they would be better at a truth language than they are at Java or some other language. Objection 2 may disappear to be replaced with AI systems with the attention to do what needs to be done. So perhaps things will change in that to make it worthwhile... | | |
| ▲ | jsmorph an hour ago | parent | next [-] | | Re 1: Discussing and guiding the desirable theorems for general-purpose programs has been a major challenge for us. Proofs for their own sake (bad?) vs glorious general results (good but hard?). Actual human guidance there can be critical there at least for now. | |
| ▲ | cayley_graph an hour ago | parent | prev [-] | | Mind linking the experiment? Sounds interesting. |
|
|
|
| ▲ | smj-edison 2 hours ago | parent | prev | next [-] |
| I think what's interesting about Lean is that Lean is a language, and what most people are talking about is a library called Mathlib. From what I've read about Mathlib, the creators are very pragmatic, which is why they encode classical logic in Lean types, with only a bit of intuitionistic logic[1]. [1] for those unfamiliar with math lingo, classical logic has a lot of powerful features. One of those is the law of the excluded middle, which says something can't be true and false at the same time. That means not not true is true, which you can't say in intuitionistic logic. Another feature is proof by contradiction, where you can prove something by showing that the alternative is unsound. There's quite a few results that depend on these techniques, so trying to do everything in intuitionistic logic has run into a lot of roadblocks. |
| |
| ▲ | zozbot234 an hour ago | parent | next [-] | | > I think what's interesting about Lean is that Lean is a language, and what most people are talking about is a library called Mathlib. From what I've read about Mathlib, the creators are very pragmatic, which is why they encode classical logic in Lean types, with only a bit of intuitionistic logic The computer science folks are now working on their own CSLib. https://www.cslib.io https://www.github.com/leanprover/cslib Given that intuitionistic logic is really only relevant to computational content (the whole point of it is to be able to turn a mathematical argument into a construction that could in some sense be computed with), it will be interesting to see how they deal with the issue. Note that if you write algorithms in Lean, you are already limited to some kind of construction, and perhaps that's all the logic you need for that purpose. | |
| ▲ | vscode-rest 2 hours ago | parent | prev | next [-] | | When/why would one prefer to use intuitive logic, given the limitations/roadblocks? | | |
| ▲ | ux266478 an hour ago | parent | next [-] | | Classical logic has plenty of limitations/roadblocks, all logics do. Logic isn't a unified domain, but an infinite beach of structural shards, each providing a unique lens of study. Classical logic was rejected in computer science because the non-constructive nature made it inappropriate for an ostensibly constructive domain. Theoretical mathematics has plenty of uses to prove existences and then do nothing with the relevant object. A computer, generally, is more interested in performing operations over objects, which requires more than proving the object exists.
Additionally, while you can implement evaluation of classical logic with a machine, it's extremely unwieldy and inefficient, and allows for a level of non-rigor that proves to be a massive footgun. | | |
| ▲ | zozbot234 an hour ago | parent | next [-] | | But proving the object exists is still useful, of course: it effectively means you can assume an oracle that constructs this object without hitting any contradiction. Talking about oracles is useful in turn since it's a very general way of talking about side-conditions that might make something easier to construct. | | |
| ▲ | ux266478 17 minutes ago | parent [-] | | Of course. Though it's also important to note: whether or not an object exists is dependent on the logic being utilized itself, which is to say nothing of how even if the object holds some structural equivalent in the given logic of attention, it might not have all provable structure shared between the two, and that's before we get into how the chosen axioms on top of the logical system also mutate all of this. It's not that classical logic is useless, it's just that it's not particularly appropriate to choose as the basis for a system built on algorithms. This goes both ways. Set theory was taken as the foundation of arithmetic, et al. because type theory was simply too unwieldy for human beings scrawling algebras on blackboards. | | |
| ▲ | zozbot234 9 minutes ago | parent [-] | | Set theory was chosen because it was a compatively simple proof of concept. You don't really refer to the foundation when scrawling algebra on a blackboard the way you would with a proof assistant, and this actually causes all sorts of issues down the line (it's a key motivation for things like HoTT). |
|
| |
| ▲ | layer8 32 minutes ago | parent | prev [-] | | Classical logic isn’t rejected in computer science. Computer science papers don’t generally care if their proofs are non-constructive, just like in mathematics. | | |
| ▲ | zozbot234 28 minutes ago | parent [-] | | They care quite a bit actually, they just call their constructive proofs "algorithms" or "decision procedures". |
|
| |
| ▲ | smj-edison an hour ago | parent | prev | next [-] | | As far as I understand it, classical mathematics is non-constructive. This means there are quite a few proofs that show that some value exists, but not what that value is. And in mathematics, a proof often depends on the existence of some value (you can't do an operation on nothing). The thing is it can be quite useful to always know what a value is, and there's some cool things you can do when you know how to get a value (such as create an algorithm to get said value). I'm still learning this stuff myself, but inuitionistic logic gets you a lot of interesting properties. | | |
| ▲ | zozbot234 an hour ago | parent [-] | | > As far as I understand it, classical mathematics is non-constructive. It's not as simple as that. Classical mathematics can talk about whether some property is computationally decidable (possibly with further tweaks, e.g. modulo some oracle, or with complexity constraints) or whether some object is computable (see above), express decision/construction procedures etc.; it's just incredibly clunky to do so, and it may be worthwhile to introduce foundations that make it natural to talk about these things. | | |
| ▲ | smj-edison 37 minutes ago | parent [-] | | Would it be fair to say then that classical mathematics does not require computability, so it requires a lot more bookkeeping, while intuitionistic logic requires constructivism, so it's the air you live and breathe in, which is much more natural? | | |
| ▲ | zozbot234 31 minutes ago | parent [-] | | Intuitionistic logic is not really constrained to talking about constructive things: you just stuff everything else in the negative fragment. Does that ultimately make sense? Maybe, maybe not. Perhaps that goes too far in obscuring the inherent duality of classical logic, which is still very useful. |
|
|
| |
| ▲ | amavect 44 minutes ago | parent | prev | next [-] | | In constructive logic, a proof of "A or B" consists of a pair (T,P). If T equals 0, then P proves A. If T equals 1, then P proves B. This directly corresponds to tagged union data types in programming. A "Float or Int" consists of a pair (Tag, Union). If Tag equals 0, then Union stores a Float. If Tag equals 1, then Union stores an Int. In classical logic, a proof of "A or not A" requires nothing, a proof out of thin air. Obviously, we want to stick with useful data structures, so we use constructive logic for programming. | | |
| ▲ | layer8 37 minutes ago | parent [-] | | You aren’t giving any justification why proofs should necessarily map to data structures. | | |
| ▲ | amavect 27 minutes ago | parent [-] | | Not necessarily, I only argue for utility. You can find better justification in the Curry-Howard correspondence. |
|
| |
| ▲ | ogogmad 17 minutes ago | parent | prev | next [-] | | There are non-computational interpretations of intuitionistic logic too, like every single thing mentioned on this page: https://ncatlab.org/nlab/show/synthetic+mathematics I think stuff like "synthetic topology", "synthetic differential geometry", "synthetic computability theory", "synthetic algebraic geometry" are the most promising applications at the moment. It can also find commonalities between different abstract areas of maths, since there are a lot of exotic interpretations of intuitionistic logic, and doing mathematics within intuitionistic logic allows one to prove results which are true in all these interpretations simultaneously. I'm not sure if intuitionism has a "killer app" yet, but you could say the same about every piece of theory ever, at least over its initial period of development. I think the broad lesson is that the rules of logic are a "coordinate system" for doing mathematics, and changing the rules of logic is like changing to a different coordinate system, which might make certain things easier. In some areas of maths, like modern Algebraic Geometry, the standard rules of logic might be why the area is borderline impenetrable. | | |
| ▲ | zozbot234 4 minutes ago | parent [-] | | These are more like computational-ish interpretations of sheaves, topological spaces and synthetic geometry. The link of intuitionistic logic to computation is close enough that these things don't really make it "non-computational". One can definitely argue though that many mathematicians are finding out that things like "expressing X in a topos" are effectively roundabout ways of discussing constructive logic and constructivity concerns. |
| |
| ▲ | gowld an hour ago | parent | prev | next [-] | | Excluded-middle `true` means "[provable] OR [impossible to disprove]". Intuitionist/Constructivist `true` means, "provable". The question you are asking determines what answers are acceptable. Why build an airplane, if you already know it must be possible? | | |
| ▲ | thaumasiotes a minute ago | parent | next [-] | | > Excluded-middle `true` means "[provable] OR [impossible to disprove]". > Intuitionist/Constructivist `true` means, "provable". This is completely wrong. Excluded-middle `true` means "provable" and only "provable". "Impossible to disprove" is `independent`, not `true`. | |
| ▲ | smj-edison 43 minutes ago | parent | prev [-] | | Ah, so if you had ¬p, and you negated it, you could technically construct ¬¬p in intuitionist logic, but only in classical logic could you reduce that to p? Since truth in classical logic means what you said here, where you didn't actually construct what p is, so you can't reduce it in intuitionistic logic. |
| |
| ▲ | thaumasiotes 2 hours ago | parent | prev [-] | | For ideological reasons. |
| |
| ▲ | Chinjut 2 hours ago | parent | prev | next [-] | | You mean intuitionistic logic, not "intuitive logic". | | |
| ▲ | smj-edison an hour ago | parent [-] | | Oops, just edited. I'm still fairly new to this area, so I keep mixing up my terms :) |
| |
| ▲ | cubefox an hour ago | parent | prev | next [-] | | > One of those is the law of the excluded middle, which says something can't be true and false at the same time. That would be the law of non-contradiction (LNC). The law of the excluded middle (LEM) says that for every proposition it is true or its negation is true. LEM: For all p, p or not p. LNC: For all p, not (p and not p). Classical logic satisfies both, intuitionistic logic only satisfies LNC. | |
| ▲ | bowsamic 2 hours ago | parent | prev | next [-] | | This makes it good for formal maths, but bad for philosophy, since it means it can’t encode the speculative movement | |
| ▲ | thaumasiotes 2 hours ago | parent | prev [-] | | > Another feature is proof by contradiction, where you can prove something by showing that the alternative is unsound. As far as lean is concerned, this isn't an example of classical logic. It's just the definition of "not" - to say that some proposition implies a contradiction, and to say that that proposition is untrue, are the same statement. Most "something"s that you'd want to prove this way will require a step from classical logic, but not all of them. (¬p ⟶ F) ⟶ p is classical; (p ⟶ F) ⟶ ¬p is constructive. | | |
| ▲ | zozbot234 an hour ago | parent | next [-] | | More generally, any negative statements can be proven classically, even in intuitionistic logic. Intuitionistic logic does not have the De Morgan duality found in classical logic, you have to go to linear logic if you want to recover that while keeping constructivity. (The "negative" in linear logic actually models requesting some object, which is dual to constructing it. The connection with the usual meaning of "negative" in logic involves a similar duality between "proposing" a proof and "challenging" it.) | |
| ▲ | smj-edison an hour ago | parent | prev [-] | | So proof by contradiction proves ¬p, but it requires the law of excluded middle to prove p (in the case of ¬p -> F)? I didn't realize that was constructive in the first case. |
|
|
|
| ▲ | MarkusQ 2 hours ago | parent | prev | next [-] |
| We need more of this. For every "well of course, just...X, that's what everybody does" group-think argument there's a cogent case to be made for at least considering the alternatives. Even if you ultimately reject the alternatives and go with the crowd, you will be better off knowing the landscape. |
| |
| ▲ | sdenton4 an hour ago | parent [-] | | It depends! Every time you go off the beaten path, you're locking yourself into less documentation, more bugs (since there's less exploration of the dark corners), and fewer people you can go to for help. If you've got 20+ choices to make, picking the standard option is the right choice on average, so you can just do it and move on. You have finite attention, so doing a research report on every dependency means you're never actually working on the core problem. The exceptions to this are when a) it becomes apparent that the standard tool doesn't actually fit your use case, or b) the standard tool significantly overlaps the core problem you're trying to solve. |
|
|
| ▲ | shaguoer 8 minutes ago | parent | prev | next [-] |
| Interesting perspective. Would love to see more discussion. |
|
| ▲ | jsmorph an hour ago | parent | prev | next [-] |
| Slightly off topic: This project https://agentcourt.ai/arb/analysis/index.html uses a Go/Lean hybrid design. The Go code is mostly glue, and the Lean code is the logic https://github.com/agentcourt/adjudication/tree/main/arb/eng.... It's not math-intensive. Really just functional programming with some interesting proofs (including soundness ideally). Go code can migrate to Lean code when that makes sense. |
|
| ▲ | zermelo44 2 hours ago | parent | prev | next [-] |
| Good post! +1 |
|
| ▲ | groundzeros2015 2 hours ago | parent | prev [-] |
| Type theory and lean is more interesting to people who like computers than to people who like math. |
| |
| ▲ | ux266478 an hour ago | parent | next [-] | | The set theorists decided that mathematics is the overarching superdomain over all study of structure. You don't get to pick and choose. Either mathematics is a suburb of logic and these two things are separate, or they're not and ZFC dogmatics need to accept they don't have a monopoly on math. I of course fully support reinstating logicism, but the same dogmatics love putting up a fight over that as well. | | |
| ▲ | smj-edison 25 minutes ago | parent | next [-] | | I think the most surprising thing I've learned taking formal math in college is just how much mathematicians are pragmatists (at least for my teacher with sample size n=1). They're much more interested in new ways to think about ideas, with a side effect of proofs for correctness. The proof is more about explaining why something works, not that it does. I'm going to take a formal logic class in the fall, and my professor said something akin to "definitely take it if you're interested, just be aware that it probably won't come in use in most of the mathematics done today." The thing is the foundations are mostly laid, and people are interested in using said foundations for interesting things, not for constantly revisiting the foundations. I think this is one reason most mathematicians don't see a need for formal proof assistants, since from their perspective it's one very small part of math, and not the interesting one. This is not to say that proof assistants are a dead end—I find them fascinating and hope they continue to grow—but there's a reason that they haven't had a ton of traction. | |
| ▲ | groundzeros2015 an hour ago | parent | prev [-] | | Mathematicians use logic to talk about the mathematical world. But logic is not the world. | | |
| ▲ | ux266478 an hour ago | parent [-] | | Not even the most dogmatic of the set theorists ever argued mathematics was possible without reason, however. For mathematics, logic is the world, as the copula makes no distinction between substance and existence. In the same sense that the earth is not matter itself, but it is a material thing. Putting that aside, to make things more clear: computer science is mathematics. Computer scientists are mathematicians. That was a categorization decided long before you and I ever lived. In the sense that you mean, you're only referring to a very small fraction of what "mathematics" refers to In the true sense of the word. It is just as irreconcilably disjointed as Logic is, not unified and fundamentally non-unifiable. I too think it would be better if "mathematics" was reserved for the gated suburb of ZFC. But that's not the world we live in, courtesy of the same people who pushed ZFC as a foundation to begin with. | | |
| ▲ | groundzeros2015 an hour ago | parent [-] | | > For mathematics, logic is the world, as the copula makes no distinction between substance and existence. No. There are truths about the subject not captured in any single formal system. Which is why objects are studied form many perspectives. > Computer scientists are mathematicians. Some are and some aren’t. |
|
|
| |
| ▲ | baq an hour ago | parent | prev | next [-] | | citation needed, Tao certainly is on record using Lean and that carries some weight. also, https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspon... i.e. there's no reason it should be as you say. | | |
| ▲ | groundzeros2015 an hour ago | parent [-] | | The link is exactly what I’m saying. I only hear cs people talk about it. For mathematicians a proof is a means to an end, or a medium of expression - they care about what they say and why. The correspondence isn’t about C programs corresponding to proofs in math papers. It’s a very a specific claim about kinds of formal systems which don’t resemble how math or programming is done. | | |
| ▲ | gowld an hour ago | parent [-] | | Mathematicians care about interesting ideas, not whether their theorems are true :-) | | |
| ▲ | groundzeros2015 37 minutes ago | parent [-] | | They care about if it’s true. But the role of the formal proof is a kind of spell checker or static analysis after they have the idea. | | |
| ▲ | j16sdiz 15 minutes ago | parent [-] | | > They care about if it’s true. Not always. If it is NOT true, they sometimes simply play "what if" and construct a new system where it could be true. |
|
|
|
| |
| ▲ | soulofmischief an hour ago | parent | prev [-] | | Terence Tao, one of the most important living mathematicians, specifically embraces Lean and has been helping the community embrace it. What you've done here is an overgeneralization. "People who like math" and "people who like computers" are massive demographics with considerable overlap. | | |
|