newish musings
blog logic puzzles piward coding
github profile
𝟙𝟝· Some online news source or other asked if AI could create anything original. What do you think those Hamlet writing monkeys are doing between Shakespeare's plays? If
the monkeys have already produced Hamlet. If you fix up the ones with spelling mistakes and obvious grammatical blunders, those monkeys will have produced a whole
lotta plays Shakespeare never wrote. Change the names of a few characters, reorder some events, and one of those gazillion plays is gonna look very much like that
play you were going to start on next week. The problem is you have to find the damn thing in all that monkey stuff, most (like 99.9999999999999999999%) of which looks
like the email your cat, when walking across your keyboard, sent out to your ex last week. So use AI to split out the plays from the cat-walks. Now you have a pile of
dervitive shlock along with probably quite a few variations on that play you've got percolating away. Can AI recognize your ‘genuinely original’ play as a play? Or
can it only recognize plays it's been trained on, kickin others out screaming “you call this a play!? This is nothing like 12th Night!” Probably AI can filter plays
from non plays without excluding new, original works. Make the process more efficient - instead of untrained monkeys, use an AI system trained to write plays. If it
doesn't produce your play, throw enough monkey stuff in - randomize - and now you're getting short stories, poems and letters to the editor, but that first AI files
those in the round receptacle. Sooner or later that randomness will kick out a play-object close enough to your ‘original’ that you can expect a call from some
strangely simian looking laywers without having monkeys fill up more than a few planets worth of trees with cat-walk output. Is somthing generated randomly original?
Probably - hitting on something that already exists is the unlikely case. Is it the result of a creative act? Not to me - art (and I assume the original question was
about ‘art’) is about the creation, not the created. The object is only the receipt for the what the artist thought and did.
𝟙𝟝· I don't know how to address the political situation here in the US - I think outside human norms in too many ways to contribute positively. From that outside
𝕁 posiition, it's clear that people who saw an unjustified execution in publicly available video of Renee Good's killing have fundamental cognitive differences from
𝕒 those who saw a justified use of force.
𝕟
𝕦 𝟙𝟚· puzzles The paper “Mathematical Definition and Systematization of Puzzle Rules” by Itsuki Maeda and Yasuhiro Inoue details a mathematical framework for logic pencil
𝕒 puzzles with formulas defining 10 different puzzle types. Nikoli, the company that popularized “Number Place” puzzles under the Japanese trademark ‘Sudoku’, publishes
𝕣 collections in Japan and describes each on their website: Slitherlink Sudoku Shikaku Choco Banana Inshi no Heya Fillomino Kurotto Sukoro Norinori Hitori. As I get my
𝕪 ⟪Silver⟫ Solver working on each, I'll post my ⟪Sapphire⟫ definitions.
𝟘𝟡· coding I often pass keyword parameters to a subroutine unchanged, and ended up with alot of ‘keyword=keyword’ code in Python function calls. Reserving ‘=’ for the
equality predicate (I just replace ‘=’ with ‘==’ when generating Python or C) I instead use ‘→’ to pass keyword parameters - ‘keyword→7’. I added a postfix operator
‘→←’ to pass the value of the variable as the keyword, so I can abbreviate ‘keyword→keyword’ ·as ‘keyword→←’.
𝟘𝟠· logic I've added ‘comprehensions’ which support set and sequence expressions such as { _^3 ⋮ 1⋯2026} and ⟨ ⦗str _⦘ ⋮ x y z ⟩, where the variable ‘_’ (displayed as ◒
in logical contexts, to satisfy my aesthic preferences) which is evaluated for each of the elements to the right of the ‘⋮’ symbol. I use ‘⋯’ as an inclusive, integer
range operator, so ⟨1⋯3⟩ is the tuple ⟨1 2 3⟩. It meshes well with my implementation of sets of integers expressed as intervals.
𝟘𝟠· coding I've been on a side trip to additional ‘rational’ code generation based on syntactic analysis rather than ad-hoc text manipulation. This next stage let me
translate operators (‘⊗’ and ‘⊙’ for cross and dot-product) into calls to generic functions, but there's more work to make it remotely robust.
𝟘𝟝· puzzles I started on a formulation of Slitherlink rules in ⟪Sapphire⟫. Connectivity, as a pairwise relation could be easily satisfied by being true for any vertices
that are connected to anything. I ended up defining a distance function with a special value (rather than a distinct relation) for ‘not connected’. In the next day or
two, I'll see how ⟪Silver⟫ does trying to find a satisfying model (aka solution).
𝟛𝟘· coding I've been bogged down by my bootstrapping shenanigans. I finally decided to re-execl the current build when cyclic dependencies could change generated code.
Because I'm building my tools in place, I use a “revert-bootstraps” routine often to deal with all-to-frequent breakage.
𝟚𝟠· coding More language infrastructure progress - I've got code generating from the ⟪Violet⟫ language layer that bridges between ⟪Cobalt⟫ (aka C) and ⟪Midnight⟫ (aka
Python). I generate code that uses Python's ‘ctypes’ module to call C from Python, making it easy to mix and match implementations.
𝟚𝟞· coding I took a small step toward sensible language handling by generating a full parse tree for a small input file. Starting life as a no-op, my evolving ‘zypp’
preprocessor converts ⟪Midnight⟫ and ⟪Cobalt⟫ to Python and C, respectively, in an entirely ad-hoc fashion. At least I know I can create an inviting bug hotel.
Eventually, each language layer I use will share a unified parser, but different intermediate code generators which will perform first level semantic checks. The
intermiedate language will support high level primitives that can be lowered to target subsets which can be used to emit code. My ⟪Sapphire⟫ project has a good deal
of infrastructure to cope with.
𝟚𝟝· piward I finished implementing SDL ‘framebuffer’ objects which display a screen sized OpenGL texture. Framebuffer support is primarily for debugging, but also can be
used with small ‘gadget’ displays, like Pimoroni's Display Hat Mini, ePaper displays, also available from Pimoroni or from Waveshare, which I used to prototype a
Raspberry Pi based e-Reader.
𝔻 𝟚𝟜· I finally got around to watching Jordan Peele's documentary "Get Out" the other night. I have to say, the re-enactments were grisly, but well done.
𝕖
𝕔 𝟚𝟛· logic I've added support for the Cartesian Product, represented by ‘×’ in Unicode (U+D7). What I call “tuple constrained quantification” (∀⟨x y⟩∈Z×Z) is accepted in
𝕖 ⟪Sapphire⟫ as well as set exponentiation by an integer (Z^4 ▷ Z×Z×Z×Z) ({1⋯3}^3 ▷ {1⋯3}×{1⋯3}×{1⋯3}). Finite expressions can be evaluated in calculator fashion (⟨1 2
𝕞 3⟩∈{1⋯3}^3 ▷ ✔) (∀⟨a b⟩∈{1⋯3}^2 a>3 ⇒ a+b>4 ▷ ✔) and can also be symbolically manipulated by ⟪Ag⟫, aka “The Silver Solver”. I've updated my Sudoku rules to use these
𝕓 new features
𝕖
𝕣 𝟚𝟚· coding I'm using ‘⊙‘ for dot product and ‘⊗’ for cross product. My preprocessor translates these from binary operators into calls to ‘dot’ and ‘cross’, which are
native in GLSL and implemented in Python to work on number sequences of equal length (dot) or only 3-tuples of numbers (cross).
𝟚𝟚· coding While I use Unicode extensively and appreciate its near universal adoption and support, I object to any description of it as a "character set". It is a partial
encoding for semantically based typesetting of all human-readable text that includes representations for historic character sets. Ideally, a "character set" provides
an abstract, finite set of symbols for computation and a visual representation that allows human beings to readily identify symbols in a sequence - a simple alphabet.
If we remove codepoints that are control values (modifiers and typesetting indicators) and, for groups of characters which are (subjectively) visually similar,
discard all but one, we are left with a workable character set. But it's a major bonus if human beings can naturally associate meaning with sequences to form a human
readable language. This character set requires knowledge of every alphabet included in Unicode and fluency in at least one language that uses each alphabet. I encode
formal languages and strings using my own (still evolving) ”Zy Logical Character Set" or "Zylch" (the "zy" is vestigial, but still makes for entertaining acronyms).
It's a single byte encoding starting with the digits 0⋯9, followed by the 26 uppercase then 26 lowercase letters of English. Then a bunch of symbols that change from
week to week...
𝟚𝟙· coding I updated my color text routines that I use in all my Python tools to proceess faster when read into Emacs. One day, I may create an IDE for my ‘neo-retro’
logic-puzzle computing environment, but Emacs is still the best tool for me.
𝟘𝟞· logic I now have a somewhat general "pigeonhole solver" ...