Cat's Eye Technologies: New DevelopmentsChris Pressey2023-05-18T19:55:48.315314https://catseye.tc/feeds/atom_30_news.xmlatomize<p>On May 19, 2023, version 0.5 of <a href="https://catseye.tc/node/The%20Cat%27s%20Eye%20Technologies%20Platform">The Cat's Eye Technologies Platform</a>
was announced.</p>
<p>This is 6 years to the day since version 0.4 was released. What could be
the explanation for such a long pause?</p>
<p>It's pretty straightforward actually. Python 2.x reached end-of-life.
Newer projects developed by Cat's Eye Technologies in Python used
Python 3.x. And I didn't want to include both Python 2 and Python 3
on the The Platform image.</p>
<p>Thus began the arduous journey of upgrading every Cat's Eye Technologies
project written in Python, from Python 2 to Python 3.</p>
<p>For some of them, it wasn't that bad. For others, it was pretty
unpleasant. Indeed, there was one -- <a href="https://catseye.tc/node/Tamsin">Tamsin</a>, if you must know --
that is so built around Python 2 assumptions, that it was deemed not worth it
to convert it.</p>
<p>But in the end we did it. And in the meantime we accumulated a number
of other projects. And we put them all onto a NetBSD 6.1.5 image, and
we got them all to work, and we simplified a couple of things in the process.</p>
<p>You can find a pre-built image of The Platform 0.5, and instructions for using
it, on the Internet Archive here:</p>
<ul>
<li><a href="https://archive.org/details/the-cats-eye-technologies-platform-0.5">The Cat's Eye Technologies Platform 0.5</a></li>
</ul>
<p>and from that page you can download the image directly, or via the torrent.</p>Version 0.5 of The Platform released2023-05-19T09:39:39https://catseye.tc/feeds/atom_30_news.xml/Version 0.5 of The Platform released<p><a href="https://catseye.tc/node/Parc">Parc</a> started as "the simplest parser combinator
library that could possibly work". Written in Haskell, no fancy types, fits
on a page.</p>
<p>It was followed by a series of experimental variations on the theme. These built
up to having a parser combinator library (called "ParcConsume" here) that is
putatively able to parse all context-sensitive languages (CSLs), but
not any language more complex than a CSL.</p>
<p>The driver for formulating ParcConsume was a number of
observations made during NaNoGenMo 2022 about definite-clause grammars (DCGs),
primarily that they can express languages more complex than the context-free
languages (CFLs), but they are not restricted in their complexity beyond that
(i.e. one can, in Prolog, add clauses to a DCG that make it Turing-complete).
ParcConsume is an attempt to provide a grammar formalism with a similar
ability to go beyond the CFL, but with more restricted complexity.
(Parsing CSLs is a PSPACE-complete problem -- and PSPACE is still an immensely
large complexity class, but it is at least not Turing-complete.)</p>Parc: a series of experimental, ultra-simple parser combinator libraries2023-04-09T09:20:17https://catseye.tc/feeds/atom_30_news.xml/Parc: a series of experimental, ultra-simple parser combinator libraries<p>Version 0.2 of <a href="https://catseye.tc/node/Eqthy">Eqthy</a> has been released.
The following small improvement to the language has been made:
the variables in an axiom or previously-proved theorem can be renamed
when applying it in a step. This adds a few lines to the implementation
of the proof checker, but allows proofs to be simpler. Error messages
in the proof checker have also been improved somewhat, and more example
proofs have been included in the distribution (namely proofs in
Boolean Algebra and Combinatory Logic).</p>Release of Eqthy 0.22023-04-06T10:55:05https://catseye.tc/feeds/atom_30_news.xml/Release of Eqthy 0.2<p><a href="https://catseye.tc/node/Burro">Burro</a> is a brainfuck-inspired
programming language where the set of programs form a group (the
algebraic structure from group theory); in particular, for
every program there exists another program which, when
concatenated to the first program, annihilates it.</p>
<p>Version 2.0 revision 2003.0225 of the Burro distribution has been
released. There have been no changes to the language, but several
other significant updates have been made. Notably,</p>
<ul>
<li>a more conventional mathematical explanation of what is meant
by "programs form a group" has been given (finally!)</li>
<li>a small test suite in Falderal format has been added,
demonstrating an extensible idiom for conditionals in Burro.</li>
<li>the supplied proof of Turing-completeness, which was flawed,
has been removed from the distribution. The hope is that
a new (and valid) proof, using the extensible idiom mentioned above,
will be supplied in the next revision.</li>
<li>the Burro interpreter can be compiled to JavaScript using the
Haste compiler, and there is now an
<a href="https://catseye.tc/installation/Burro">interactive installation of Burro hosted online at catseye.tc</a>.</li>
<li>the materials are now distributed under a 3-clause BSD license.</li>
</ul>Some long-overdue updates to Burro2023-03-04T19:01:51https://catseye.tc/feeds/atom_30_news.xml/Some long-overdue updates to Burro<p><a href="https://catseye.tc/node/Eqthy">Eqthy</a> is a formalized language for proofs
whose design attempts to reconcile <em>simplicity of implementation on a machine</em>
with <em>human usability</em>. Each line gives an equation which is derived from
the equation on the previous line, using only the rules of equational logic
along with any previously defined rules of inference or proved theorems.</p>
<p>This, the first release of the Eqthy distribution (Eqthy 0.1),
includes a description of the language, a proof checker called <code>eqthy</code>
written in Python 3, and a number of example proofs (including a proof
of the Socks and Shoes theorem in group theory, and a simple proof
in Propositional Algebra).</p>Eqthy, a formalized language for proofs in equational logic2023-02-01T18:29:25https://catseye.tc/feeds/atom_30_news.xml/Eqthy, a formalized language for proofs in equational logic<p>Last year, like most years since 2013, Cat's Eye Technologies planned to produce something for
<a href="https://catseye.tc/node/NaNoGenMo">NaNoGenMo</a>.
The year 2022 was, actually, the first year I entered and failed to complete anything.
The reasons for this were simple, and probably not uncommon: my plans were too
ambitious, and were difficult to scale back to something modest enough to be
completable in one month. So it goes.</p>
<p>What I did produce, along the way, is a tool called <a href="https://catseye.tc/node/relwrite"><code>relwrite</code></a>.
Given a grammar and an input string, <code>relwrite</code> will find a set of output strings
that relate to the input strings, either by <em>parsing</em> the input to obtain a nonterminal,
or by <em>generating</em> a new string of terminals, at the user's choice.</p>
<p>One thing that makes this interesting is its generality. The input grammar
doesn't have to be context-free; it can be literally anywhere in the
Chomsky hierarchy.</p>
<p>And this poses complications. <code>relwrite</code> can be instructed to perform a naive
breadth-first search for all the outputs that the input could rewrite to.
But since that is an infeasibly large space to traverse, it supports a
more sophisticated <a href="https://en.wikipedia.org/wiki/Beam_search">beam search</a>
algorithm, to aggressively trim down the set of possible parses
(or generations), to allow it to find at least one of a desired length.</p>relwrite, a tool for relating strings to strings2023-01-27T09:29:29https://catseye.tc/feeds/atom_30_news.xml/relwrite, a tool for relating strings to strings<p>A new version of the <a href="https://catseye.tc/node/Samovar">Samovar</a>
distribution has been released. While there are no changes to the
Samovar language, the reference implementation (<code>samovar</code>, written
in Python) has some significant updates.</p>
<p>Notably, alongside the existing stochastic generator (which just
performs random walks through the event-space in the hopes of
connecting the initial state of the scene to a satisfactory final
event of the scene) version 0.5 of <code>samovar</code> supports two additional
generation strategies:</p>
<ul>
<li>a breadth-first search-based generator, which is complete, in the
sense that it will always find the shortest series of events that
leads to the goal, as long as such a series exists.</li>
<li>a depth-first search based generator as well. If the space of
world-configurations is finite (I'm not sure if Samovar guarantees
this, but it's often the case), this also is a complete generator,
and more efficient than the breadth-first one.</li>
</ul>
<p>Some mildly humorous examples resulting from applying these two strategies to chapters of
<a href="https://catseye.tc/article/Texts.md#the-league-of-extraordinarily-dull-gentlemen">The League of Extraordinarily Dull Gentlemen</a>
are presented in this gist:
<a href="https://gist.github.com/cpressey/9450c3b793e81f369a5fa751cc9298cf">"The League of Efficiently Dull Gentlemen"</a>.</p>Release of Samovar 0.52023-01-26T19:27:00https://catseye.tc/feeds/atom_30_news.xml/Release of Samovar 0.5<p>Y'know what? Over the years, I've designed lots of strange small programming
languages, but I never implemented the lambda calculus. Until now.</p>
<p>And I only did it as a test case for an abstract data type representing
lambda terms.</p>
<p>And I spent quite some time working on said abstract data type, trying to make
something that works, in my opinion, nicely. The result being something that
is total, in the sense that all operations are always defined, and that
represents only proper lambda terms -- improperly bound variables cannot be
introduced.</p>
<p>And I'm not even entirely sure anymore why I wanted to formulate said
abstract data type for lambda terms. I believe it may have had something
to do with macros.</p>
<p>Even though I dislike macros, and avoid them like the plague in my own code.</p>
<p>Well, that's how much sense my life makes.</p>
<p>Anyway, <a href="https://catseye.tc/node/Lariat">Lariat</a>.</p>Lariat: A Total ADT for Proper Lambda Terms2022-10-12T06:48:57https://catseye.tc/feeds/atom_30_news.xml/Lariat: A Total ADT for Proper Lambda Terms<p>Ever had an urge to write that natural deduction proof you're working on
directly in a classic systems programming language like <a href="https://catseye.tc/node/ANSI_C">ANSI C</a>?
Well, look no further! <a href="https://catseye.tc/node/Philomath">Philomath</a> is an
<a href="https://catseye.tc/node/LCF-style-ND">LCF-style</a> theorem prover for
propositional logic in a natural deduction system, written in ANSI C.
Values of type <code>struct theorem</code> represent proved statements, while
functions that take <code>struct theorem</code>s as arguments and return a new
<code>struct theorem</code> value, implement rules of inference. Your proof-program
includes the header file <code>theorem.h</code>, which only exposes the
declaration of <code>struct theorem</code>, and not its definition; in this way,
you can be confident (in ANSI C) that any <code>struct theorem</code> your proof-program
produces indeed represents a theorem with a valid proof, and not just
something you made up. In ANSI C. Smashing, no?</p>Philomath: Write proofs in ANSI C2022-09-06T16:40:41https://catseye.tc/feeds/atom_30_news.xml/Philomath: Write proofs in ANSI C<p>Two releases of two of Cat's Eye Technologies' formats
(and associated tools) have been made.</p>
<p>The latest version of <a href="https://catseye.tc/node/Feedmark">Feedmark</a>, a structured
subset of Feedmark designed to support curation and newsfeeds, is now version 0.13.</p>
<p>The latest version of <a href="https://catseye.tc/node/Falderal">Falderal</a>, a format for
writing literate test suites for programming languages, is now version 0.14
"Jean Baptiste Point DuSable Lake Shore Drive". (Falderal versions are named
after notable locations in the Chicagoland area.)</p>
<p>Both of these formats have tools written in Python, and these packages
are both available on the Python Package Index, at
<a href="https://pypi.org/project/Feedmark/">Feedmark</a> and
<a href="https://pypi.org/project/Falderal/">Falderal</a> respectively.</p>Feedmark 0.13 and Falderal 0.14 released2022-09-01T19:04:14https://catseye.tc/feeds/atom_30_news.xml/Feedmark 0.13 and Falderal 0.14 released<p>This year, a typo was found in the specification of our esoteric programming
language <a href="https://catseye.tc/node/ZOWIE">ZOWIE</a> -- a language where every instruction,
including the structured "repeat" loop, is memory-mapped. (Thanks Sgeo!)</p>
<p>From this we decided it would be ideal if there was a second implementation of
the language -- the idea being, with three reference materials
(the spec and two reference implementations) one could use a "majority rules"
approach to divine the canonical behaviour.</p>
<p>(Three cheers for coding theory! Hip hip, hooray! Hip hip, hooray!
Hoop hoop, hirray!)</p>
<p>To this end, we wrote a ZOWIE interpreter in Haskell, to go along with the one
written in Python.</p>
<p>We considered using this new Haskell implementation as the basis for
<a href="https://catseye.tc/node/ZOWIE">the online installation of ZOWIE</a>, replacing
the current Skulpt-based installation with it. That hasn't happened yet, though;
I'm torn between getting rid of the Skulpt one because Skulpt is kind of goony and
non-standard, and keeping the Skulpt one because Skulpt is kind of goony and
non-standard.</p>Recent updates to the ZOWIE distribution2021-12-17T08:34:11https://catseye.tc/feeds/atom_30_news.xml/Recent updates to the ZOWIE distribution<p><a href="https://catseye.tc/node/Tandem">Tandem</a>, our esoteric programming language where
string-rewriting rules form a Kleene algebra, has finally
had an HTML installation for it established on Cat's Eye Technologies' website.
You can <a href="https://catseye.tc/installation/Tandem">try it in your web browser right here</a>.</p>Tandem interpreter installed online2021-12-16T11:43:57https://catseye.tc/feeds/atom_30_news.xml/Tandem interpreter installed online<p>For NaNoGenMo this year, Cat's Eye Technologies developed a variation
on the <a href="https://en.wikipedia.org/wiki/Dissociated_press">Dissociated Press</a>
algorithm. Instead of working on a sequential list of words as it
conventionally does, it was adapted to work on parse trees instead.
The result was dubbed <a href="https://catseye.tc/node/Dissociated_Parse">Dissociated Parse</a>,
and the 50K-word novel <a href="https://catseye.tc/node/The_Lion,_the_Witches,_and_the_Weird_Road">The Lion, the Witches, and the Weird Road</a> was generated using it, which you can
<a href="https://catseye.tc/view/Dissociated-Parse/generated/The%20Lion,%20the%20Witches,%20and%20the%20Weird%20Road.md">read online here</a>.</p>The Grammatical Rollercoaster that is Dissociated Parse2021-12-08T22:48:09https://catseye.tc/feeds/atom_30_news.xml/The Grammatical Rollercoaster that is Dissociated Parse<p><a href="https://catseye.tc/node/Vinegar">Vinegar</a> is a new esolang from Cat's Eye
Technologies, released in mid-November. It is a "semi-concatenative" language
where every operation can fail.</p>
<p>"Semi-concatenative" is supposed to mean that there isn't just the usual
implicit "concatenate" program-composing operator, there's also a second
program-composing operator, "alternate" (notated explicitly by <code>|</code>).</p>
<p>This second operator is intended to gracefully handle the case where a
program operation has failed -- which any of them can.</p>Vinegar, a semi-concatenative language2021-12-05T21:08:51https://catseye.tc/feeds/atom_30_news.xml/Vinegar, a semi-concatenative language<p>Lovely language <a href="https://catseye.tc/node/Lanthorn">Lanthorn</a> launches.</p>
<p>Look lucidly at its lexical lycanthropy — a leakproof lifting
of <code>letrec</code> to <code>let</code> in lieu of lopsided letterbox loads.</p>
<p>A loquacious lucubration in laminar labour for lugubrious laity?
It's likely!</p>Lanthorn: `letrec` as syntactic sugar2021-07-17T12:53:05https://catseye.tc/feeds/atom_30_news.xml/Lanthorn: `letrec` as syntactic sugar