News for hackers. Stuff that matters.
Re:Advent of Code 2018, in Coq by tombert on Monday February 18, 2019 @06:01PM (#19195271)
I never liked Coq's name because I'm immature, but it really is magic software in my eyes. The level of downright objectivity that you get with it makes it feel so bulletproof.

I know functional languages are slowly starting to adopt dependent types, and you can get reasonable certainty of correctness with property-based testing, but Coq just feels kind of universal. If the proof passes, so will your code.

I really wish I could get my employer to sign off on me using it for a real project.

Re:Advent of Code 2018, in Coq by quickthrower2 on Monday February 18, 2019 @06:09PM (#19195318)
Good enough, with bugs is what makes the real money unfortunately.
Re:Advent of Code 2018, in Coq by dan-robertson on Monday February 18, 2019 @06:24PM (#19195419)
I don’t really like this trope.

The goal of a programming in Coq would, I suppose, be to shift debugging time from after compilation succeeds to before, with the hope that the compiler will direct one towards the bugs and they will be easier to find. I don’t think this is always a win. I think it is a win if what you write must be very reliable, but it seems less obvious that the advantage would still exist as the required reliability decreases.

Remember that bug Coq had when if you used more than 256 parameters in a constructor you could prove anything?

I suppose one could say Coq is good enough, with bugs.

Re:Advent of Code 2018, in Coq by bunderbunder on Monday February 18, 2019 @07:15PM (#19195694)
What I would be terrified of in Coq is some tiny change in business requirements ends up pulling the linchpin out of some fundamental premise way down at the bottom of your stack of proofs, this forcing you to go and fix everything. Sort of the mother of all brittle testing scenarios.

Maybe that's FUD on my part; I've only read Coq code and never written any of my own.

In any case, at least the way I'm thinking of it, it's not that good enough with bugs is what makes the money. It's more a question of proportionality: It doesn't make sense to spend $100 to guard against a $5 bug. I don't think Coq leaves much room for being pragmatic about test coverage like that.

Re:Advent of Code 2018, in Coq by nickpsecurity on Monday February 18, 2019 @07:43PM (#19195815)
"What I would be terrified of in Coq is some tiny change in business requirements ends up pulling the linchpin out of some fundamental premise way down at the bottom of your stack of proofs, this forcing you to go and fix everything."

I'm still wondering how often that will be a problem if high-assurance methods get more adoption. I'll note it's mitigated a lot by the advice we give about where to apply formal methods:

1. Highly critical stuff.

2. That doesn't change at a fast pace.

3. That's known to be verifiable with existing methods in the time frame needed. As in, you want pre-verified components or it to be really similar to past projects.

One thing to support No 3 is to have straight-forward, sequential code that's composed in a hierarchical way with clearly-specified interfaces. You'll mostly be just be verifying behavior of individual components. A change at the bottom will be isolated into that module. Then, you prove the integration of whatever calls it. Then what calls that. With the proper structure, you dramatically reduce the work required with the reverification.

" I don't think Coq leaves much room for being pragmatic about test coverage like that."

People that use it often try to use it for everything because formal verification is their job. In industry, you use it where it makes sense. That might be most critical component which is also pretty simple. Actually, most in industry use model-checkers (i.e. SPIN, TLA+) and languages with solvers (i.e. Frama-C, SPARK Ada) for verification. That minimizes their work. The most-adopted methods, though, for the $5 bugs are software inspections (i.e. checklists), static analyzers, test generation from source, and fuzzing. I strongly recommend using them in order of lowest-cost and fastest results to highest-cost, hardest results to avoid wasting time.

Re:Advent of Code 2018, in Coq by Swizec on Monday February 18, 2019 @07:33PM (#19195775)
> What I would be terrified of in Coq is some tiny change in business requirements ends up pulling the linchpin out of some fundamental premise way down at the bottom of your stack of proofs, this forcing you to go and fix everything. Sort of the mother of all brittle testing scenarios.

Isn't the same true for static typing? One small business requirement changes, you change a foundational type, and suddenly all your code needs to adapt.

Of course this is true with dynamic typing too, but at least you don't know.

Re:Advent of Code 2018, in Coq by dmitriid on Tuesday February 19, 2019 @03:53AM (#19197572)
> Isn't the same true for static typing? One small business requirement changes, you change a foundational type

Business changes are usually changes in logic, not in types. So it's mostly "our cashback is now calculated in percentage of the sum, not as a fixed sum" etc. Of course, this may still have repercussions through the entire system. I don't know how it would work in Coq (I don't know Coq :) ).

Re:Advent of Code 2018, in Coq by bjz_ on Tuesday February 19, 2019 @04:28AM (#19197735)
> Business changes are usually changes in logic, not in types.

Types _are_ logical propositions. In languages like Coq they are more expressive, and it's easier to leverage them as a way to constrain your implementation. Of course it's just a model, and there can be bugs in the specification, so it's not a silver bullet.

Re:Advent of Code 2018, in Coq by frabert on Tuesday February 19, 2019 @04:57AM (#19197868)
> types are propositions

ML and Coq types, yes. Java, C types? Not so much.

Re:Advent of Code 2018, in Coq by bunderbunder on Tuesday February 19, 2019 @10:07AM (#19199404)
Call them "illogical propositions".
Re:Advent of Code 2018, in Coq by bunderbunder on Monday February 18, 2019 @08:30PM (#19196010)
I guess. My experience has been that it's more a case with, for lack of a better term, "old school" OOP.

SOLID helps a lot with that sort of thing. Avoiding inheritance like the plague helps a lot. I slightly hate that I said old school, because Smalltalk-style tell-don't-ask helps a lot.

I think that the idiomatic ways of structuring code in the ML family of languages help the most, because they tend to be pretty radical about limiting scope of visibility. But they also tend to make more of a muddle of things than they're worth in algol-style languages.

Re:Advent of Code 2018, in Coq by tom_mellior on Tuesday February 19, 2019 @04:00AM (#19197597)
> What I would be terrified of in Coq is some tiny change in business requirements ends up pulling the linchpin out of some fundamental premise way down at the bottom of your stack of proofs, this forcing you to go and fix everything.

To be a bit facetious: What I would be terrified of in software development is some tiny change in business requirements ends up pulling the linchpin out of some fundamental premise way down at the bottom of your stack of functions, this forcing you to go and fix everything.

There is good proof engineering and bad proof engineering, just like there is good software engineering and bad software engineering. (If only all of us could agree on what exactly is good and bad in either ;-)). Coq has all sorts of modularity and abstraction facilities that you can use to build an architecture that is hopefully resilient to change.

But yeah, it's not perfect. Particularly because proofs are not always like unit tests: At the lowest level you prove things about actual implementations of functions, not just their behavior. In tricky cases, changing a low-level function does mean that you may have to change a lot of proofs. How to avoid this is still an open problem.

Re:Advent of Code 2018, in Coq by archi42 on Tuesday February 19, 2019 @07:28AM (#19198447)
This really depends on what you're doing. I suppose most of the code I've written in the last two decades wouldn't have profited from using coq. BUT then there's CompCert, an optimizing compiler written in coq [I'm affiliated, but not working on it directly]. If you're building safety critical stuff (like in failure == people die) something like this might be interesting.

Of course, for a C compiler the requirements are less prone to change than e.g. some SAP-style business application. As a dev, coq is just another tool in your belt and being a good dev means knowing when to use what tool.

Re:Advent of Code 2018, in Coq by moomin on Tuesday February 19, 2019 @07:41AM (#19198513)
I think that’s to a certain extent a matter of approach: we’ve discovered over time that certain approaches e.g. huge business logic inheritance trees are susceptible to this problem, whereas others e.g. list comprehensions, grouping constructs, functors &c aren’t.

So I’m sure you _can_ build something in Coq that is fragile as you describe, but I feel sure that there are alternative approaches that won’t be as brittle.

Re:Advent of Code 2018, in Coq by nickpsecurity on Monday February 18, 2019 @07:34PM (#19195780)
" with the hope that the compiler will direct one towards the bugs and they will be easier to find."

Also, less expensive to fix given bugs are cheaper to fix earlier in the lifecycle. You can also reduce breakage during changes to existing code. Finally, you can warranty the code at specific defect rates or for certain kinds of defects where the fixes are free within the warranty. Companies using Cleanroom and Correct-by-Construction did that with the above benefits.

http://infohost.nmt.edu/~al/cseet-paper.html

http://www.anthonyhall.org/c_by_c_secure_system.pdf

Re:Advent of Code 2018, in Coq by quickthrower2 on Monday February 18, 2019 @08:12PM (#19195937)
I’m referring to production code being good enough rather than the tooling.

Let’s take HN for example. Is it coq proven? I doubt it. Is that a barrier to its success?

Re:Advent of Code 2018, in Coq by tombert on Tuesday February 19, 2019 @10:28AM (#19199565)
I should rephrase; obviously nothing is perfect, I'll admit that a few things will slip through the cracks. I just feel that it's night and day, compared to nearly any mainstream language.
Re:Advent of Code 2018, in Coq by seanmcdirmid on Monday February 18, 2019 @09:21PM (#19196189)
> I suppose one could say Coq is good enough, with bugs.

Wait, isn't Coq verified by itself?

Re:Advent of Code 2018, in Coq by syrak on Monday February 18, 2019 @09:37PM (#19196224)
The Coq compiler is unverified, it is written in OCaml.

It's not possible for Coq's consistency to be verified in itself, thanks to Gödel's second incompleteness theorem. However there are still various other aspects of the compiler that could be verified in principle. The CertiCoq project is actively going in that direction.

Re:Advent of Code 2018, in Coq by quickthrower2 on Tuesday February 19, 2019 @03:25PM (#19202440)
I love this comment, because there is this pie in the sky mathematical idea, with direct consequences for practical coding.
Re:Advent of Code 2018, in Coq by rtpg on Tuesday February 19, 2019 @03:28AM (#19197475)
good enough without bugs makes you a lot of money and also lets you build something with a much smaller team.

I don't think Coq is the way forward (I don't think "code that makes money" has many interesting provable properties in itself along those axes) but being able to ship stuff that's pretty close to bug-free will get you far

Re:Advent of Code 2018, in Coq by OnlyOneCannolo on Monday February 18, 2019 @11:33PM (#19196608)
It's pronounced closer to "coke".
Re:Advent of Code 2018, in Coq by tom_mellior on Tuesday February 19, 2019 @03:05AM (#19197393)
No. The software Coq is pronounced like the French word "coq", which has a short o like the English "cock" and unlike the long o in the English "coke". https://forvo.com/word/coq/#fr

This is certainly the only pronounciation in the French formal methods community, where Coq comes from. It is also the standard pronounciation in the international formal methods community. I have never heard anyone pronounce it like "coke".

See for example Adam Chlipala at about 5:40 here: https://www.youtube.com/watch?v=4DYVJdHMV5k Benjamin Pierce has a slightly longer o here, but it doesn't sound to me like it's deliberately pronounced differently from "cock": https://www.youtube.com/watch?v=KKrD4JcfW90 And here is Andrej Bauer: https://www.youtube.com/watch?v=COe0VTNF2EA

I know from rare comments like yours that some prudish Americans pronounce it "coke", some deliberately, others apparently because they have been fooled by the first group. But this seems to be a very small minority.

Re:Advent of Code 2018, in Coq by dragonwriter on Tuesday February 19, 2019 @03:25AM (#19197467)
> The software Coq is pronounced like the French word "coq",

Yes, but...

> which has a short o like the English "cock"

No, it doesn't. The sound it has isn't a common English vowel sound at all; it is closer to the vowel sounds in “cuck” and “cook” than the one in “cock”, but not exactly either of those, either. In fact of the four (those two, plus coke and cock), the “o” in “cock” is the one most Americans would find it most distinct from, I would think.

> https://forvo.com/word/coq/#fr

Yeah, none of those pronounce it with the vowel sound in English “cock”.

> I know from rare comments like yours that some prudish Americans pronounce it "coke",

It's not prudish, its a common way Americans that haven't mastered French pronunciation approximate the unaccented French “o” irrespective of context.

Re:Advent of Code 2018, in Coq by tom_mellior on Tuesday February 19, 2019 @03:53AM (#19197568)
> Yeah, none of those pronounce it with the vowel sound in English “cock”.

I was mainly talking about the vowel length. However:

> the “o” in “cock” is the one most Americans would find it most distinct from, I would think.

Really? More distinct than from the "oʊ" sound in American "coke"? (IPA from https://en.wiktionary.org/wiki/coke)

Re:Advent of Code 2018, in Coq by thardus on Tuesday February 19, 2019 @08:07AM (#19198646)
Trying to have this discussion without IPA for multiple dialects is pretty tough with "long o" and "short o." I've only ever heard Coq pronounced like /kɑk/, but I'm from the Western US. I know Brits and Americans from the NE have the round low back vowel for /kɔk/. Coke sounds like /kouk/.
Re:Advent of Code 2018, in Coq by dragonwriter on Tuesday February 19, 2019 @08:24AM (#19198760)
I think mostly because to speakers of American English, roundedness is a very important vowel distinction, as “cock” has an unrounded vowel in American English, whereas the others are rounded, except “cuck”, which while also unrounded matches “coq” in position (open-mid vs. open, on the IPA chart)
Re:Advent of Code 2018, in Coq by dwild on Tuesday February 19, 2019 @10:36AM (#19199621)
As a French Canadian, I pronounce "coq" and "cock" the same way, while "cook" and "coke" are extremely different.

It's clearly because I don't pronounce them well, but it's certainly how I do it.

Re:Advent of Code 2018, in Coq by leoc on Tuesday February 19, 2019 @05:36AM (#19198003)
No, it really is pronounced a lot more like 'cock'. Moreover, I have it on pretty good authority that this wasn't any sort of unhappy coincidence; quite the opposite. I think they may have been unhappy about 'bit'.
Re:Advent of Code 2018, in Coq by throwmeback on Tuesday February 19, 2019 @04:52AM (#19197843)
You may have just ruined all the fun for me.

I'm pronouncing it like "coque" from now on.

Re:Advent of Code 2018, in Coq by merijnv on Tuesday February 19, 2019 @05:52AM (#19198057)
Good news for you, he's wrong. It's pronounced the way "coq" is in French, which isn't quite "cock", but certainly closer to "cock" than "coke".