‹ BackHN Continuity

Thread

Bend 2 and the Vibe-Coding Trap

327 points · 235 comments · LiamPowell

  1. GodelNumbering · · focus · HN ↗
    The code itself is the most compact representation of the rules you want applied.
    1. Smaug123 · · focus · HN ↗
      This is probably not necessarily true. “f: list[1 A] -> list[A] pure, worst-case time n log n, such that for all x and 0 <= i <= j < len(x), f(x)[i] <= f(x)[j]” is probably good enough for nearly everyone unless the program synthesiser is actively adversarial; probably 99.999% of the list-sorting in the world is done via standard library functions anyway, which suggests that people don’t much care exactly how it happens.
      1. GodelNumbering · · focus · HN ↗
        Good point. I would treat this as 'fully specified vs partially specified'. For a fully specified system, my mental model still maintains that the code is the most compact ruleset.

        I agree that "don't care" is often the practical choice which corresponds to partially specified. In your sort example, both heap sort and merge sort satisfy the requirement. But they are not always interchangeable because each has a specific properties that you might care about (constant memory vs nLog(n) memory, easily parallelizable vs hard to parallelize and so on).

      2. someplaceguy · · focus · HN ↗
        > “f: list[1 A] -> list[A] pure, worst-case time n log n, such that for all x and 0 <= i <= j < len(x), f(x)[i] <= f(x)[j]” is probably good enough for nearly everyone

        Not good enough: `f(x) = []` or `f(x) = (if len(x) == 0 then [] else [x[0], x[0]]` are implementations that fulfill your specification and yet they don't always sort the input list correctly...

Open on Hacker News to reply ↗

Unofficial Hacker News client; not affiliated with Y Combinator.