HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
matt-noonan
gdp-paper
SMT2018–2018
matt-noonan / gdp-paper

gdp-paper

Ghosts of Departed Proofs

2Distinct people
3Mentions
1Explicit recommenders
43GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Ghosts of Departed Proofs

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

Gosh, I have a few! Fistly, wavelet trees! Wavelet trees with something like RRR encoding for the bit vectors lets you work with massive datasets in positively tiny space and…

KirinDave used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by week3 dated mentions

Observed mentions: 2018-06-19 19:29:45 UTC to 2018-10-17 14:56:56 UTC. Weeks start Monday, UTC.

012018-06-18 00:00:00 UTC to 2018-06-25 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJun 182018-06-25 00:00:00 UTC to 2018-07-02 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2018-07-02 00:00:00 UTC to 2018-07-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-07-09 00:00:00 UTC to 2018-07-16 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-07-16 00:00:00 UTC to 2018-07-23 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-07-23 00:00:00 UTC to 2018-07-30 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-07-30 00:00:00 UTC to 2018-08-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-08-06 00:00:00 UTC to 2018-08-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-08-13 00:00:00 UTC to 2018-08-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsAug 132018-08-20 00:00:00 UTC to 2018-08-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-08-27 00:00:00 UTC to 2018-09-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-09-03 00:00:00 UTC to 2018-09-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-09-10 00:00:00 UTC to 2018-09-17 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-09-17 00:00:00 UTC to 2018-09-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-09-24 00:00:00 UTC to 2018-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-10-01 00:00:00 UTC to 2018-10-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-10-08 00:00:00 UTC to 2018-10-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-10-15 00:00:00 UTC to 2018-10-22 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsOct 15

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Jun 182018-06-18 00:00:00 UTC2018-06-25 00:00:00 UTC101
Jun 252018-06-25 00:00:00 UTC2018-07-02 00:00:00 UTC110
Jul 22018-07-02 00:00:00 UTC2018-07-09 00:00:00 UTC000
Jul 92018-07-09 00:00:00 UTC2018-07-16 00:00:00 UTC000
Jul 162018-07-16 00:00:00 UTC2018-07-23 00:00:00 UTC000
Jul 232018-07-23 00:00:00 UTC2018-07-30 00:00:00 UTC000
Jul 302018-07-30 00:00:00 UTC2018-08-06 00:00:00 UTC000
Aug 62018-08-06 00:00:00 UTC2018-08-13 00:00:00 UTC000
Aug 132018-08-13 00:00:00 UTC2018-08-20 00:00:00 UTC000
Aug 202018-08-20 00:00:00 UTC2018-08-27 00:00:00 UTC000
Aug 272018-08-27 00:00:00 UTC2018-09-03 00:00:00 UTC000
Sep 32018-09-03 00:00:00 UTC2018-09-10 00:00:00 UTC000
Sep 102018-09-10 00:00:00 UTC2018-09-17 00:00:00 UTC000
Sep 172018-09-17 00:00:00 UTC2018-09-24 00:00:00 UTC000
Sep 242018-09-24 00:00:00 UTC2018-10-01 00:00:00 UTC000
Oct 12018-10-01 00:00:00 UTC2018-10-08 00:00:00 UTC000
Oct 82018-10-08 00:00:00 UTC2018-10-15 00:00:00 UTC000
Oct 152018-10-15 00:00:00 UTC2018-10-22 00:00:00 UTC101

What Hacker News says

3 sources
KirinDave·Oct 17, 2018Recommendation phrase
Gosh, I have a few! Fistly, wavelet trees! Wavelet trees with something like RRR encoding for the bit vectors lets you work with massive datasets in positively tiny space and constant time. They're not even expensive to construct! My favorite introduction to the whole space of rank/select-friendly structures is Alex Bowe's tutorial: https://alexbowe.com/wavelet-trees/ I constantly agitate for people to realize that we now have an algorithm for O(n) generalized sorting. It's called discrimination sort, and while it's a complex subject its quite elegant once you internalize the algorithm. There's a talk by Prof. Henglein here: https://www.youtube.com/watch?v=sz9ZlZIRDAg 2017 saw the recommendation of a truly phenomenal approach to indexing data, using simple leaning structures. These indexes are poorly explored, there's still a ton of headr
Read the rest
oom here, but the paper is an incredibly cool read and very approachable: https://arxiv.org/abs/1712.01208 Another really cool family of algorithms and associated structures in distributed systems is CRDTs. They're poorly understood, but in research they have largely superseded operational transforms. The Wikipedia page branches off into lots of good research: https://en.wikipedia.org/wiki/Conflict-free_replicated_data_... If we slightly broadened the lens of what is an algorithm, my favoriate category-theoretic approaches to solving problems include Recursion Schemes which are a technique to totally separate the specification of recursive algorithms over data structures from both the structures and the code that the algorithm runs to compute a result (Patrick from Github has a great series on them here: https://blog.sumtypeofway.com/). I also love the modern and rapidly growing "Ghosts of Forgotten Proofs" as a way to let the compiler assert you've properly built and/or terminated values: https://github.com/matt-noonan/gdp-paper/releases/download/j...
In Ask HN: What's your favorite elegant/beautiful algorithm?
> And I suggested that this is overly complicated and procedural approaches are better. In procedural code we don't "assemble chained operations". We do them one-by-one and handle errors appropriately. Go does this. It's widely and I think rightly criticized for this. It's "easy" to do but not "simple" because it's prone to human error. > And we can typically arrange the data and control so that error handling is much easier. That was my point. You can do more work to validate in a separate pass if we're discussing data transforms. It's harder to do this for a series of chained imperative steps. The talk details an example making a series of API queries. It's fantastic to handle a CRUD loop with the ADT method because it lets you write a simple specification and collect errors out in the end, while reserving exception handlers for truly e
Read the rest
xceptional cases like network faults. F# is incredibly good at this kind of flow. > ADTs and FP techniques provide only syntactic sugar to avoid this spaghetti in the source code. But due to that they just encourage having the worst mess of control actually happen on the machine. You've said this multiple times, but it's just not true. The F# code is just a function that calls functions. F#, ML and Haskell compilers all aggressively inline these calls. You pay the exact same costs for validating an error exists in the Golang style, in practice. Indeed, lots of people generate Go from liskov-style templates JUST to get ADTs to make error handling less painful. It's gaining popularity in Swift and Rust as well. Folks there aren't trying to impress people with their FP knowledge, they're cribbing a technique that works and scales well. > My example does not have a single if statement (yes, you might argue there are if statements hidden in the for loops). I clearly stated that it's often possible to choose this approach. Your example, by your own admission, doesn't address error handling flows. You need conditional logic to work with operations that don't always succeed. You say, "Structure it so you never have them." I think a lot of FP people would agree with this (in fact, there is a really cool functional pearl about doing exactly this at scale: https://github.com/matt-noonan/gdp-paper/releases/download/j...) but they'd think about it less as a function of assurances and "thinking very hard" and more about using methods to make inconsistent code provably false at compile time. Very few languages can actually encode formal notions of correctness, right now. Recently languages like Idris, Agda, Coq, and TLA come up as tools for formal correctness, where you can actually have your compiler prove your invariants and their implications.
In Railway-Oriented Programming (2015)

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.