{"id":5507,"date":"2024-10-22T16:39:06","date_gmt":"2024-10-22T16:39:06","guid":{"rendered":"https:\/\/www.novonon.com\/blog\/?p=5507"},"modified":"2024-10-22T16:40:49","modified_gmt":"2024-10-22T16:40:49","slug":"in-the-beginning-there-was-computation","status":"publish","type":"post","link":"https:\/\/www.novonon.com\/blog\/2024\/10\/22\/in-the-beginning-there-was-computation\/","title":{"rendered":"In the Beginning, There Was Computation"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"A10000000_D128_E10000_H0_L64_M0.0001_R0_S0.0001_T1024\" src=\"https:\/\/player.vimeo.com\/video\/1000447759?dnt=1&amp;app_id=122963\" width=\"625\" height=\"804\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe><\/p>\n<p>This is just incredibly cool as well as important. The authors show artificial life spontaneously emerging from a soup of random code, under a range of conditions.<\/p>\n<blockquote><p>Now we\u2019re in a position to ask: In a universe capable of computation, how often will life arise? Clearly, it happened here. Was it a miracle, an inevitability, or somewhere in between? A few collaborators and I set out to explore this question in late 2023.<\/p>\n<p>Our first <a href=\"https:\/\/arxiv.org\/pdf\/2406.19108\" target=\"_blank\" rel=\"noreferrer noopener\">experiments<\/a> used an esoteric programming language called (apologies) Brainfuck.<sup>8<\/sup> While not as minimal as SUBLEQ, Brainfuck is both very simple and very similar to the original Turing Machine. Like a Turing Machine, it involves a read\/write head that can step left or right along a tape.<\/p>\n<p>In our version, which we call \u201cbff,\u201d there\u2019s a \u201csoup\u201d containing thousands of tapes, each of which includes both code and data. The tapes are of fixed length\u201464 bytes\u2014and start off filled with random bytes. Then, they interact at random, over and over. In an interaction, two randomly selected tapes are stuck end to end, creating a 128-byte-long string, and this combined tape is run, potentially modifying itself. The 64-byte-long halves are then pulled back apart and dropped back into the soup. Once in a while, a byte value is randomized, as cosmic rays do to DNA.<\/p>\n<p>Since bff has only seven instructions, represented by the characters \u201c&lt; &gt; + \u2013 , [ ]\u201d, and there are 256 possible byte values, following random initialization only 2.7 percent of the bytes in a given tape will contain valid instructions; any non-instructions are skipped over. Thus, at first, not much comes of interactions between tapes. Once in a while, a valid instruction will modify a byte, and this modification will persist in the soup. On average, though, only a couple of computational operations take place per interaction, and usually, they have no effect. In other words, while computation is <em>possible<\/em> in this toy universe, very little of it actually takes place. When a byte is altered, it\u2019s likely due to random mutation, and even when it\u2019s caused by the execution of a valid instruction, the alteration is arbitrary and purposeless.<\/p>\n<p>But after a few million interactions, something magical happens: The tapes begin to reproduce. As they spawn copies of themselves and each other, randomness gives way to complex order. The amount of computation taking place in each interaction skyrockets, since\u2014remember\u2014reproduction requires computation. Two of Brainfuck\u2019s seven instructions, \u201c[\u201d and \u201c],\u201d are dedicated to conditional branching, and define loops in the code; reproduction requires at least one such loop (\u201ccopy bytes until done\u201d), causing the number of instructions executed in an interaction to climb into the hundreds, at minimum.<\/p>\n<p>The code is no longer random, but obviously <em>purposive<\/em>, in the sense that its function can be analyzed and reverse-engineered. An unlucky mutation can break it, rendering it unable to reproduce. Over time, the code evolves clever strategies to increase its robustness to such damage. This emergence of function and purpose is just like what we see in organic life at every scale; it\u2019s why, for instance, we\u2019re able to talk about the function of the circulatory system, a kidney, or a mitochondrion, and how they can \u201cfail\u201d\u2014even though nobody designed these systems.<\/p>\n<p>We reproduced our basic result with a variety of other programming languages and environments. In one especially beautiful visualization, my colleague Alex Mordvintsev created a two-dimensional bff-like environment where each of a 200\u00d7200 array of \u201cpixels\u201d contains a tape, and interactions occur only between neighboring tapes on the grid. The tapes are interpreted as instructions for the iconic Zilog Z80 microprocessor, launched in 1976 and used in many 8-bit computers over the years (including the Sinclair ZX Spectrum, Osborne 1, and TRS-80). Here, too, complex replicators soon emerge out of the random interactions, evolving and spreading across the grid in successive waves.<\/p><\/blockquote>\n<p>Their main output is <a href=\"https:\/\/arxiv.org\/abs\/2406.19108\">a paper<\/a>, but I strongly recommend starting with the lead author&#8217;s more generally accessible article on the work: <em><a href=\"https:\/\/nautil.us\/in-the-beginning-there-was-computation-787023\/\">In the Beginning, There Was Computation<\/a><\/em><\/p>\n<p>(hat tip <a href=\"https:\/\/www.rifters.com\/crawl\/?p=11220\">to Peter Watts<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is just incredibly cool as well as important. The authors show artificial life spontaneously emerging from a soup of random code, under a range of conditions. Now we\u2019re in a position to ask: In a universe capable of computation, how often will life arise? Clearly, it happened here. Was it a miracle, an inevitability, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-5507","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p3pfIY-1qP","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts\/5507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/comments?post=5507"}],"version-history":[{"count":2,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts\/5507\/revisions"}],"predecessor-version":[{"id":5509,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts\/5507\/revisions\/5509"}],"wp:attachment":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/media?parent=5507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/categories?post=5507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/tags?post=5507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}