<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: tromp</title><link>https://news.ycombinator.com/user?id=tromp</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 24 May 2026 07:58:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tromp" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tromp in "How Diamonds Are Made"]]></title><description><![CDATA[
<p>And how diamonds are grown: <a href="https://en.wikipedia.org/wiki/Synthetic_diamond" rel="nofollow">https://en.wikipedia.org/wiki/Synthetic_diamond</a></p>
]]></description><pubDate>Sun, 17 May 2026 12:33:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48168356</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48168356</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48168356</guid></item><item><title><![CDATA[New comment by tromp in "The Japanese companies minting money from AI"]]></title><description><![CDATA[
<p><a href="https://archive.is/SafF7" rel="nofollow">https://archive.is/SafF7</a></p>
]]></description><pubDate>Sat, 16 May 2026 09:36:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48158538</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48158538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48158538</guid></item><item><title><![CDATA[New comment by tromp in "Frontier AI has broken the open CTF format"]]></title><description><![CDATA[
<p><a href="https://en.wikipedia.org/wiki/Capture_the_flag_(cybersecurity)" rel="nofollow">https://en.wikipedia.org/wiki/Capture_the_flag_(cybersecurit...</a><p>still has no mention of AI, but that will likely change as they increasingly dominate competition.</p>
]]></description><pubDate>Sat, 16 May 2026 07:44:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48157792</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48157792</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48157792</guid></item><item><title><![CDATA[New comment by tromp in "Extraordinary Ordinals"]]></title><description><![CDATA[
<p>The author presents most known numeral systems (ways of representing natural numbers) in lambda calculus, classified by whether the term use their bound variables exactly one time (linear), at most one time (affine), or multiple times (non-linear).
Mackie's paper [0] (one of the references) provides a good introduction to these. (although he strangely gets the definition of Church numerals wrong with "Church numerals encode numbers with repeated application: λx f. f^n x." in which he reversed the order of arguments f and x).<p>He illustrates some numerals in each system with a graphical notation that strongly reminds me of interaction nets [1], a computational model closely related to lambda calculus.
The notation they use for lambda terms is rather non-standard. Compare<p>> In β-reduction, k[(x⇒b)←a]⊳k[b{a/x}]k[(x⇒b)←a]⊳k[b{a/x}]<p>with Wikipedia's [2]<p>> The β-reduction rule states that a β-redex, an application of the form (λx. t) s, reduces to the term t[x:=s].<p>The k[...] part means that β-reduction steps can happen in arbitrary contexts.<p>[0] <a href="https://www.researchgate.net/publication/323000057_Linear_Numeral_Systems" rel="nofollow">https://www.researchgate.net/publication/323000057_Linear_Nu...</a><p>[1] <a href="https://en.wikipedia.org/wiki/Interaction_nets" rel="nofollow">https://en.wikipedia.org/wiki/Interaction_nets</a><p>[2] <a href="https://en.wikipedia.org/wiki/Lambda_calculus" rel="nofollow">https://en.wikipedia.org/wiki/Lambda_calculus</a></p>
]]></description><pubDate>Thu, 14 May 2026 08:00:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48132392</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48132392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48132392</guid></item><item><title><![CDATA[New comment by tromp in "Chess puzzle I found in my dad's old book"]]></title><description><![CDATA[
<p>> The task is to place four black queens and one black bishop on the chessboard so that there is no square not under their attack. In other words, after arranging the five black pieces, it must be impossible to place the white king anywhere without it being in checkmate.<p>That last word should be "check". not "checkmate". A king next to an unprotected queen will be in check but not checkmate as it can capture the queen.</p>
]]></description><pubDate>Wed, 13 May 2026 21:39:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48127992</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48127992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48127992</guid></item><item><title><![CDATA[New comment by tromp in "Cheap Missiles, Not Drones, Will Win the Next Air War"]]></title><description><![CDATA[
<p>> fly two to three times faster (about 460 miles per hour, compared to 90 miles per hour)<p>Is this AI math? That's over 5 times faster.</p>
]]></description><pubDate>Tue, 12 May 2026 10:11:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48106225</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48106225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48106225</guid></item><item><title><![CDATA[New comment by tromp in "When Is "Next Friday"?"]]></title><description><![CDATA[
<p>> Next Friday always means the Friday after the next one<p>You're using "the next one" i.e. the next Friday, to refer to the first one after today.</p>
]]></description><pubDate>Mon, 11 May 2026 13:52:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48095025</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48095025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48095025</guid></item><item><title><![CDATA[New comment by tromp in "When Is "Next Friday"?"]]></title><description><![CDATA[
<p>Except on Friday's, when "this Friday" means today.
On other days, many people indeed use "this" and "next" synonymously.</p>
]]></description><pubDate>Mon, 11 May 2026 12:47:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48094277</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48094277</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48094277</guid></item><item><title><![CDATA[New comment by tromp in "When Is "Next Friday"?"]]></title><description><![CDATA[
<p>> The Simple Rule<p>> If the Friday you’re referring to is beyond seven days from today, including today, it’s next Friday.<p>That's not a such simple rule. I'm not even sure what "including today" means.<p>A simple rule would be: next Friday is the first Friday after today.<p>The whole existence of this website suggests that the term "Next Friday" is at best ambiguous. Especially on a Saturday or Sunday, many people will interpret "Next Friday" as the Friday of next week.
So just be explicit and say "Friday next week".</p>
]]></description><pubDate>Mon, 11 May 2026 11:25:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48093609</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48093609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48093609</guid></item><item><title><![CDATA[New comment by tromp in "7 lines of code, 3 minutes: Implement a programming language (2010)"]]></title><description><![CDATA[
<p>One of the smallest implementations is my heavily obfuscated <a href="https://www.ioccc.org/2012/tromp/" rel="nofollow">https://www.ioccc.org/2012/tromp/</a> :<p><pre><code>           Int L[A],m,b,*D=A,
            *c,*a=L,C,*U=L,u;s
             (_){u--&&s(a=*a);}
              char*B,I,O;S(){b=b
               --?b:m|read(0,&I,1
                )-1;return~I>>b&1;
                 }k(l,u){for(;l<=u;
                  U-L<A?*U++=46^l++[
                   "-,&,,/.--/,:-,'/"
                   ".-,-,,/.-,*,//..,"
                  ]:exit(5));}p(Int*m){
                 return!*U?*m=S()?U++,!S
                ()?m[1]=p(++U),2:3:1,p(U)
               :S()?U+=2:p(U[1]++),U-m;}x(
              c){k(7*!b,9);*U++=b&&S();c&&x
             (b);}d(Int*l){--l[1]||d(l[d(*l),
            *l=B,B=l,2]);}main(e){for(k(10,33
           ),a[4]-=m=e-2&7,a[23]=p(U),b=0;;e-2
          ?e?e-3?s(D=a),C=a  [3],++1[a=a[2]],d(
         D):c?D=c,c=*D,*D=    a,a=D:exit(L[C+1])
        :C--<23?C=u+m&1?O      =O+O|C&1,9:write(m
       ||(O=C+28),&O,1)+        1:(S(),x(0<b++?k(0,
      6),U[-5]=96:0)):(          D=B?B:calloc(4,X))
     ?B=*D,*D=c,c=D,D[            2]=a,a[++D[1]]++,D
    [3]=++C+u:exit(6)              )e=L[C++],u=L[C];}
</code></pre>
while a less obfuscated and highly performant implementation <a href="https://github.com/tromp/AIT/blob/master/uni.c" rel="nofollow">https://github.com/tromp/AIT/blob/master/uni.c</a> based on combinatory graph reduction takes 446 lines.</p>
]]></description><pubDate>Mon, 11 May 2026 07:53:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48092222</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48092222</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48092222</guid></item><item><title><![CDATA[New comment by tromp in "7 lines of code, 3 minutes: Implement a programming language (2010)"]]></title><description><![CDATA[
<p>> Alonzo Church developed the lambda calculus in 1929.<p>His first publication that showed the elements of the lambda calculus was the 1932 paper "A set of postulates for the foundation of logic", as I cited in my recent paper [1]. It's quite possible he worked on it prior to 1932, but I don't know of any credible evidence on that (would be very interested to learn about any).<p>> Wait! How the heck is this a "programming" language?
> At first glance, this simple language seems to lack both recursion and iteration, not to mention numbers, booleans, conditionals, data structures and all the rest. How can this language possibly be general-purpose?<p>What most stops lambda calculus from being a programming language is that it doesn't directly support I/O. However, one can adopt some very simple conventions for representing bits, lists of bits (bytes), and lists of bytes, and for letting a lambda term operate on these [2] which make the so-called Binary Lambda Calculus (BLC) a programming language.<p>And a very expressive language it is too: a BLC self interpreter [4] can be as small as the 170-bits<p><pre><code>    01000110100001000
    00001100000010111
    00110000111111100
    00101110011111110
    00000111100000010
    11101110011011110
    01111111100001111
    11110000101111010
    01110100101111101
    00101101010011010

 which encodes the term

    (λ11)(λ(λλλ1(λλ2(1(λ6(λ2(6(λλ3(λλ23(14))))(7(λ7(λ31(21)))))))(41(111))))(11))
</code></pre>
in De Bruijn notatation, with lambda diagram [3]<p><pre><code>    ┬─┬ ────────────────────────────────────────────┬─┬
    └─┤ ──────┬───────────────┬──────────────────── ├─┘
      │ ──────┼───┬───────────┼─┬─────────┬──────── │
      │ ┬─────┼───┼───────────┼─┼─────────┼──────── │
      │ │ ┬───┼───┼───────────┼─┼─────────┼──────── │
      │ │ ┼─┬─┼───┼───────────┼─┼─────────┼─┬─┬─┬─┬ │
      │ │ │ │ ┼─┬─┼───────────┼─┼──────── └─┤ └─┤ │ │
      │ │ │ │ │ ┼─┼─┬─────────┼─┼─┬──────   │   ├─┘ │
      │ │ │ │ │ │ │ ┼───────┬ │ ┼─┼───┬──   ├───┘   │
      │ │ │ │ │ │ │ ┼───┬───┼ │ │ ┼─┬─┼─┬   │       │
      │ │ │ │ │ │ │ │ ┬─┼───┼ │ │ └─┤ ├─┘   │       │
      │ │ │ │ │ │ │ │ ┼─┼─┬─┼ │ │   ├─┘     │       │
      │ │ │ │ │ │ │ │ └─┤ ├─┘ │ ├───┘       │       │
      │ │ │ │ │ │ │ │   ├─┘   ├─┘           │       │
      │ │ │ │ │ │ │ ├───┘     │             │       │
      │ │ │ │ │ │ ├─┘         │             │       │
      │ │ │ │ │ └─┤           │             │       │
      │ │ │ │ │   ├───────────┘             │       │
      │ │ │ │ ├───┘                         │       │
      │ │ │ ├─┘                             │       │
      │ │ └─┤                               │       │
      │ │   ├───────────────────────────────┘       │
      │ └───┤                                       │
      │     ├───────────────────────────────────────┘
      └─────┘
</code></pre>
10 times smaller than the 7 lines of R5RS Scheme<p><pre><code>    (define (eval e env) (cond
      ((symbol? e)       (cadr (assq e env)))
      ((eq? (car e) 'λ)  (cons e env))
      (else              (apply (eval (car e) env) (eval (cadr e) env)))))
    (define (apply f x)
      (eval (cddr (car f)) (cons (list (cadr (car f)) x) (cdr f))))
    (display (eval (read) '())) (newline)
</code></pre>
> This code will read a program from stdin, parse it, evaluate it and print the result.<p>Except that it leaves all the actual parsing to the "read" library function.<p>In contrast, the BLC code does all parsing itself.
One of the neatest tricks is how it represents the environment as a list built with<p><pre><code>      cons' =  \x\y\zx\zy. zx x (zy y)
</code></pre>
which allows a list of bits like "1110" (the code for de Bruijn index 3) to index the environment by simply applying it to the environment.<p>[1] <a href="https://www.mdpi.com/1099-4300/28/5/494" rel="nofollow">https://www.mdpi.com/1099-4300/28/5/494</a> "The Largest Number Representable in 64 Bits"<p>[2] <a href="https://gist.github.com/tromp/86b3184f852f65bfb814e3ab0987d861" rel="nofollow">https://gist.github.com/tromp/86b3184f852f65bfb814e3ab0987d8...</a><p>[3] <a href="https://tromp.github.io/cl/diagrams.html" rel="nofollow">https://tromp.github.io/cl/diagrams.html</a><p>[4] <a href="https://github.com/tromp/AIT/blob/master/ait/int.lam" rel="nofollow">https://github.com/tromp/AIT/blob/master/ait/int.lam</a></p>
]]></description><pubDate>Mon, 11 May 2026 07:30:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48092051</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48092051</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48092051</guid></item><item><title><![CDATA[New comment by tromp in "The ROKR wooden typewriter: a closer look"]]></title><description><![CDATA[
<p>The build process: <a href="https://www.youtube.com/watch?v=HzI2GgTZAfE" rel="nofollow">https://www.youtube.com/watch?v=HzI2GgTZAfE</a></p>
]]></description><pubDate>Sat, 09 May 2026 20:31:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48077969</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48077969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48077969</guid></item><item><title><![CDATA[New comment by tromp in "Defeating Works by Design's Unpickable Lock [video]"]]></title><description><![CDATA[
<p>Design of this (not quite) unpickable lock: <a href="https://www.youtube.com/watch?v=-qUu8kIliy8" rel="nofollow">https://www.youtube.com/watch?v=-qUu8kIliy8</a></p>
]]></description><pubDate>Fri, 08 May 2026 19:28:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48067604</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48067604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48067604</guid></item><item><title><![CDATA[New comment by tromp in "Fizz Buzz Through Monoids"]]></title><description><![CDATA[
<p>> import Control.Monad (guard)<p>>    "fizz" <$ guard (rem i 3 == 0)<p>I prefer the more transparent<p><pre><code>    if i `mod` 3 == 0 then Just "fizz" else Nothing</code></pre></p>
]]></description><pubDate>Thu, 07 May 2026 13:28:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48049194</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48049194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48049194</guid></item><item><title><![CDATA[New comment by tromp in "How Monero’s proof of work works"]]></title><description><![CDATA[
<p>But the value of a 51% attack is roughly proportional to marketcap,
so while they are cheaper to attack, there's less incentive for the attack.
The most (relatively) vulnerable coins are those where the daily dollar value is low relative to the market cap.</p>
]]></description><pubDate>Mon, 04 May 2026 21:36:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48015341</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48015341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48015341</guid></item><item><title><![CDATA[New comment by tromp in "How Monero’s proof of work works"]]></title><description><![CDATA[
<p>By having a small daily dollar value (the column "PoW Produced (24h) in [1]).
All but the top 15 coins sorted by that column have less than $10k emitted per day in block rewards, which limits the power that miners can spend on competing for it.<p>[1] <a href="https://www.f2pool.com/coins" rel="nofollow">https://www.f2pool.com/coins</a></p>
]]></description><pubDate>Mon, 04 May 2026 20:58:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48014896</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48014896</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48014896</guid></item><item><title><![CDATA[New comment by tromp in "How Monero’s proof of work works"]]></title><description><![CDATA[
<p>Correct; both Bitcoin and Monero use Hashcash as PoW, only differing in the choice of hash function. Verification is only different from a solution attempt in asymmetric (i.e. non-Hashcash) PoW, such as Cuckoo Cycle or (the poorly named) Equihash.</p>
]]></description><pubDate>Mon, 04 May 2026 19:19:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48013636</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=48013636</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48013636</guid></item><item><title><![CDATA[New comment by tromp in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>A similar Haskell success story (from Bellroy) is the subject of an upcoming Melbourne Compose meeting: <a href="https://luma.com/uhdgct1v" rel="nofollow">https://luma.com/uhdgct1v</a></p>
]]></description><pubDate>Sun, 03 May 2026 08:59:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47994949</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=47994949</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47994949</guid></item><item><title><![CDATA[New comment by tromp in "Zugzwang"]]></title><description><![CDATA[
<p>> just none are good for you and all lead to a loss given perfect play.<p>That's exactly what it means to be in a lost position; all moves lose.
A lost position is only Zugzwang though if the same position with the opponent to move is not lost.</p>
]]></description><pubDate>Sun, 03 May 2026 06:53:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47994119</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=47994119</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47994119</guid></item><item><title><![CDATA[New comment by tromp in "Zugzwang"]]></title><description><![CDATA[
<p>While normal Go allows passing one's turn, and thus has no zugzwang,
there is a No Pass Go variant [1] that forbids passing, where the
first player in zugzwang loses the game.<p>[1] <a href="https://senseis.xmp.net/?NoPassGo" rel="nofollow">https://senseis.xmp.net/?NoPassGo</a></p>
]]></description><pubDate>Sat, 02 May 2026 18:39:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47989149</link><dc:creator>tromp</dc:creator><comments>https://news.ycombinator.com/item?id=47989149</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47989149</guid></item></channel></rss>