<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2023-01-16 Mon 14:03 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>car-game readme</title>
<meta name="author" content="screwtape" />
<meta name="generator" content="Org Mode" />
<style>
  #content { max-width: 60em; margin: auto; }
  .title  { text-align: center;
             margin-bottom: .2em; }
  .subtitle { text-align: center;
              font-size: medium;
              font-weight: bold;
              margin-top:0; }
  .todo   { font-family: monospace; color: red; }
  .done   { font-family: monospace; color: green; }
  .priority { font-family: monospace; color: orange; }
  .tag    { background-color: #eee; font-family: monospace;
            padding: 2px; font-size: 80%; font-weight: normal; }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
  .underline { text-decoration: underline; }
  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  p.verse { margin-left: 3%; }
  pre {
    border: 1px solid #e6e6e6;
    border-radius: 3px;
    background-color: #f2f2f2;
    padding: 8pt;
    font-family: monospace;
    overflow: auto;
    margin: 1.2em;
  }
  pre.src {
    position: relative;
    overflow: auto;
  }
  pre.src:before {
    display: none;
    position: absolute;
    top: -8px;
    right: 12px;
    padding: 3px;
    color: #555;
    background-color: #f2f2f299;
  }
  pre.src:hover:before { display: inline; margin-top: 14px;}
  /* Languages per Org manual */
  pre.src-asymptote:before { content: 'Asymptote'; }
  pre.src-awk:before { content: 'Awk'; }
  pre.src-authinfo::before { content: 'Authinfo'; }
  pre.src-C:before { content: 'C'; }
  /* pre.src-C++ doesn't work in CSS */
  pre.src-clojure:before { content: 'Clojure'; }
  pre.src-css:before { content: 'CSS'; }
  pre.src-D:before { content: 'D'; }
  pre.src-ditaa:before { content: 'ditaa'; }
  pre.src-dot:before { content: 'Graphviz'; }
  pre.src-calc:before { content: 'Emacs Calc'; }
  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  pre.src-fortran:before { content: 'Fortran'; }
  pre.src-gnuplot:before { content: 'gnuplot'; }
  pre.src-haskell:before { content: 'Haskell'; }
  pre.src-hledger:before { content: 'hledger'; }
  pre.src-java:before { content: 'Java'; }
  pre.src-js:before { content: 'Javascript'; }
  pre.src-latex:before { content: 'LaTeX'; }
  pre.src-ledger:before { content: 'Ledger'; }
  pre.src-lisp:before { content: 'Lisp'; }
  pre.src-lilypond:before { content: 'Lilypond'; }
  pre.src-lua:before { content: 'Lua'; }
  pre.src-matlab:before { content: 'MATLAB'; }
  pre.src-mscgen:before { content: 'Mscgen'; }
  pre.src-ocaml:before { content: 'Objective Caml'; }
  pre.src-octave:before { content: 'Octave'; }
  pre.src-org:before { content: 'Org mode'; }
  pre.src-oz:before { content: 'OZ'; }
  pre.src-plantuml:before { content: 'Plantuml'; }
  pre.src-processing:before { content: 'Processing.js'; }
  pre.src-python:before { content: 'Python'; }
  pre.src-R:before { content: 'R'; }
  pre.src-ruby:before { content: 'Ruby'; }
  pre.src-sass:before { content: 'Sass'; }
  pre.src-scheme:before { content: 'Scheme'; }
  pre.src-screen:before { content: 'Gnu Screen'; }
  pre.src-sed:before { content: 'Sed'; }
  pre.src-sh:before { content: 'shell'; }
  pre.src-sql:before { content: 'SQL'; }
  pre.src-sqlite:before { content: 'SQLite'; }
  /* additional languages in org.el's org-babel-load-languages alist */
  pre.src-forth:before { content: 'Forth'; }
  pre.src-io:before { content: 'IO'; }
  pre.src-J:before { content: 'J'; }
  pre.src-makefile:before { content: 'Makefile'; }
  pre.src-maxima:before { content: 'Maxima'; }
  pre.src-perl:before { content: 'Perl'; }
  pre.src-picolisp:before { content: 'Pico Lisp'; }
  pre.src-scala:before { content: 'Scala'; }
  pre.src-shell:before { content: 'Shell Script'; }
  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
  /* additional language identifiers per "defun org-babel-execute"
       in ob-*.el */
  pre.src-cpp:before  { content: 'C++'; }
  pre.src-abc:before  { content: 'ABC'; }
  pre.src-coq:before  { content: 'Coq'; }
  pre.src-groovy:before  { content: 'Groovy'; }
  /* additional language identifiers from org-babel-shell-names in
     ob-shell.el: ob-shell is the only babel language using a lambda to put
     the execution function name together. */
  pre.src-bash:before  { content: 'bash'; }
  pre.src-csh:before  { content: 'csh'; }
  pre.src-ash:before  { content: 'ash'; }
  pre.src-dash:before  { content: 'dash'; }
  pre.src-ksh:before  { content: 'ksh'; }
  pre.src-mksh:before  { content: 'mksh'; }
  pre.src-posh:before  { content: 'posh'; }
  /* Additional Emacs modes also supported by the LaTeX listings package */
  pre.src-ada:before { content: 'Ada'; }
  pre.src-asm:before { content: 'Assembler'; }
  pre.src-caml:before { content: 'Caml'; }
  pre.src-delphi:before { content: 'Delphi'; }
  pre.src-html:before { content: 'HTML'; }
  pre.src-idl:before { content: 'IDL'; }
  pre.src-mercury:before { content: 'Mercury'; }
  pre.src-metapost:before { content: 'MetaPost'; }
  pre.src-modula-2:before { content: 'Modula-2'; }
  pre.src-pascal:before { content: 'Pascal'; }
  pre.src-ps:before { content: 'PostScript'; }
  pre.src-prolog:before { content: 'Prolog'; }
  pre.src-simula:before { content: 'Simula'; }
  pre.src-tcl:before { content: 'tcl'; }
  pre.src-tex:before { content: 'TeX'; }
  pre.src-plain-tex:before { content: 'Plain TeX'; }
  pre.src-verilog:before { content: 'Verilog'; }
  pre.src-vhdl:before { content: 'VHDL'; }
  pre.src-xml:before { content: 'XML'; }
  pre.src-nxml:before { content: 'XML'; }
  /* add a generic configuration mode; LaTeX export needs an additional
     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
  pre.src-conf:before { content: 'Configuration File'; }

  table { border-collapse:collapse; }
  caption.t-above { caption-side: top; }
  caption.t-bottom { caption-side: bottom; }
  td, th { vertical-align:top;  }
  th.org-right  { text-align: center;  }
  th.org-left   { text-align: center;   }
  th.org-center { text-align: center; }
  td.org-right  { text-align: right;  }
  td.org-left   { text-align: left;   }
  td.org-center { text-align: center; }
  dt { font-weight: bold; }
  .footpara { display: inline; }
  .footdef  { margin-bottom: 1em; }
  .figure { padding: 1em; }
  .figure p { text-align: center; }
  .equation-container {
    display: table;
    text-align: center;
    width: 100%;
  }
  .equation {
    vertical-align: middle;
  }
  .equation-label {
    display: table-cell;
    text-align: right;
    vertical-align: middle;
  }
  .inlinetask {
    padding: 10px;
    border: 2px solid gray;
    margin: 10px;
    background: #ffffcc;
  }
  #org-div-home-and-up
   { text-align: right; font-size: 70%; white-space: nowrap; }
  textarea { overflow-x: auto; }
  .linenr { font-size: smaller }
  .code-highlighted { background-color: #ffff00; }
  .org-info-js_info-navigation { border-style: none; }
  #org-info-js_console-label
    { font-size: 10px; font-weight: bold; white-space: nowrap; }
  .org-info-js_search-highlight
    { background-color: #ffff00; color: #000000; font-weight: bold; }
  .org-svg { }
</style>
</head>
<body>
<div id="content" class="content">
<h1 class="title">car-game readme</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org1593eec">1. car-game</a>
<ul>
<li><a href="#org41363c6">1.1. ASDF3</a></li>
<li><a href="#org0460056">1.2. ACL2</a></li>
<li><a href="#org28a5f60">1.3. Side effects</a></li>
<li><a href="#orga07ab06">1.4. Usage</a>
<ul>
<li><a href="#orgb88c020">1.4.1. Dependencies</a></li>
<li><a href="#org0b538ba">1.4.2. common-lisp with graphviz dot</a></li>
<li><a href="#orgfea07ef">1.4.3. acl2</a></li>
</ul>
</li>
<li><a href="#orgdf37277">1.5. Future</a>
<ul>
<li><a href="#org25f8aae">1.5.1. Hypergrid alist applications</a></li>
<li><a href="#org328e448">1.5.2. Future features</a></li>
<li><a href="#orgf6a6f5a">1.5.3. More side effects</a></li>
<li><a href="#org0fdc523">1.5.4. Since this is just a phlog phost now</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orgdfc5c3c">2. Signature</a></li>
</ul>
</div>
</div>

<div id="outline-container-org1593eec" class="outline-2">
<h2 id="org1593eec"><span class="section-number-2">1.</span> car-game</h2>
<div class="outline-text-2" id="text-1">
<p>
Car-game currently contains mutually compatible ACL2 and common lisp code for making rectilinear hypergrid alists.
</p>
</div>

<div id="outline-container-org41363c6" class="outline-3">
<h3 id="org41363c6"><span class="section-number-3">1.1.</span> ASDF3</h3>
<div class="outline-text-3" id="text-1-1">
<p>
It is an ASDF3 project directory tree that should live in ~/common-lisp/ or ~/.local/share/common-lisp/source/ and has some utility as a reference on ASDF projects.
</p>
</div>
</div>

<div id="outline-container-org0460056" class="outline-3">
<h3 id="org0460056"><span class="section-number-3">1.2.</span> ACL2</h3>
<div class="outline-text-3" id="text-1-2">
<p>
In the ACL2 module directory (notably not an asdf module) there is a Makefile which certifies (compiles and signs) macros.lisp and car-game.lisp under the package nickname "ACL2-USER" with a simple defthm as a #!/bin/sh script which also is a trivial stobj (single threaded object/von neumann state) example.
</p>

<p>
Since ACL2 is an applicative subset of common lisp, functions are written to use tail recursion with clearly implied measures. Compilation such as operated by asdf as required in general replaces tail recursion with efficient iteration, however alists are not otherwise a very optimised data structure.
</p>
</div>
</div>

<div id="outline-container-org28a5f60" class="outline-3">
<h3 id="org28a5f60"><span class="section-number-3">1.3.</span> Side effects</h3>
<div class="outline-text-3" id="text-1-3">
<p>
There is a defun for creating graphviz dot graphics from hypergrids (styled stobjs) in side-effects.lisp. side-effects.lisp also houses lisp definitions of ACL2 built in utilities. Currently not very strict but intended to be the the definition :docs from ACL2.
</p>
</div>
</div>

<div id="outline-container-orga07ab06" class="outline-3">
<h3 id="orga07ab06"><span class="section-number-3">1.4.</span> Usage</h3>
<div class="outline-text-3" id="text-1-4">
</div>
<div id="outline-container-orgb88c020" class="outline-4">
<h4 id="orgb88c020"><span class="section-number-4">1.4.1.</span> Dependencies</h4>
<div class="outline-text-4" id="text-1-4-1">
<p>
acl2, a common lisp and graphviz for generating dot graphics.
</p>
<div class="org-src-container">
<pre class="src src-shell">apt install acl2 ecl graphviz
</pre>
</div>
</div>
</div>

<div id="outline-container-org0b538ba" class="outline-4">
<h4 id="org0b538ba"><span class="section-number-4">1.4.2.</span> common-lisp with graphviz dot</h4>
<div class="outline-text-4" id="text-1-4-2">
<div class="org-src-container">
<pre class="src src-lisp">(require 'asdf)
(require 'car-game)
(in-package :car)
(defvar *stobj-alist* (reset nil))
(setq *stobj-alist* (make-connected-grid *stobj-alist* 3 2))
(look *stobj-alist*)
</pre>
</div>
</div>

<ol class="org-ol">
<li><a id="orgb6728fe"></a>output png<br />
<div class="outline-text-5" id="text-1-4-2-1">

<div id="org1e00443" class="figure">
<p><img src="acl2/tmp.png" alt="tmp.png" />
</p>
</div>
</div>
</li>
</ol>
</div>

<div id="outline-container-orgfea07ef" class="outline-4">
<h4 id="orgfea07ef"><span class="section-number-4">1.4.3.</span> acl2</h4>
<div class="outline-text-4" id="text-1-4-3">
<div class="org-src-container">
<pre class="src src-shell">cd ~/common-lisp/car-game/acl2/
make all
</pre>
</div>
</div>
</div>
</div>

<div id="outline-container-orgdf37277" class="outline-3">
<h3 id="orgdf37277"><span class="section-number-3">1.5.</span> Future</h3>
<div class="outline-text-3" id="text-1-5">
</div>
<div id="outline-container-org25f8aae" class="outline-4">
<h4 id="org25f8aae"><span class="section-number-4">1.5.1.</span> Hypergrid alist applications</h4>
<div class="outline-text-4" id="text-1-5-1">
<p>
Non-dense association list serialised rectangular meshgrids are always kind of useful. In particular the alist could output CLML sexp or be used directly as a basis for toy machine learning. The current functions slowly remove previous degenerate alist keys in general to avoid some memory leak scenarios.
</p>

<p>
ACL2 needs proof support especially about interrogating what is in a stobj-alist and how to measure it, this has not been done at all yet (though there is an example proof that a one by three meshgrid will have a list of length three as the cdr assoc of 'NODES). It needs more guards and support to replace any particular integer with a free variable. This is promising for creating first order logic proofs of common lisp software applications which are amenable to representation with meshgrids and is already useful for describing finitely constrained applications.
</p>
</div>
</div>

<div id="outline-container-org328e448" class="outline-4">
<h4 id="org328e448"><span class="section-number-4">1.5.2.</span> Future features</h4>
<div class="outline-text-4" id="text-1-5-2">
<p>
While it currently closely resembles what I wrote for Wumpus hunting when we were looking at Land of Lisp, my initial motivation here was to make an AI path-painting game after talking to my brother about that sort of thing. To keep things challenging, the direction I am taking that is to define games as meeting a set of criteria for acheivability with the player given a set of capabilities (lambdas) to act on a notion of von neumann state and hence prove the existence of a set of unplanned games rather than just the one.
</p>

<p>
Already mentioned, for CPU based high performance machine learning interoperability side-effects for BLAS-based CLML are planned. I am sure we both know that graphics cards are not very good for machine learning which involves syncronising different positions in memory, and do nothing even remotely like thousand-times speedups with their single-threaded task dispatching so this sentence really did not need to be here. BLAS refers to the academic precedent and hence eternal high performance algebra library implemented in fortran. CLML is the largest Japanese telco's data division's machine learning common lisp package. There is a glimmer of doing the oh-so-academic deep learning piled with proofs we can prove to obfuscate the presence of proofs we can't prove yet.
</p>
</div>
</div>

<div id="outline-container-orgf6a6f5a" class="outline-4">
<h4 id="orgf6a6f5a"><span class="section-number-4">1.5.3.</span> More side effects</h4>
<div class="outline-text-4" id="text-1-5-3">
<p>
It was on my mind so I am planning to add trivial-garbage to the side-effect side of things, and have SDL2, libgmsh and jns' Eternal Game Engine side effect outputs.
</p>

<p>
ACL2 has a notion of arrays which could result in more optimised common lisp compilation, and I believe there are books of theories supporting that and hopefully weak hash-tables as well.
</p>

<p>
Since I've seen Albatross around, I might also take an exploratory journey into network MUDs (with theorems proved about their nature).
</p>
</div>
</div>

<div id="outline-container-org0fdc523" class="outline-4">
<h4 id="org0fdc523"><span class="section-number-4">1.5.4.</span> Since this is just a phlog phost now</h4>
<div class="outline-text-4" id="text-1-5-4">
<p>
I also want to crash first order logic theorems against ad hoc or regression testing, though I need a more comprehensive model of or instead of my simple alist stobjs at the moment. There are many obvious interesting targets for automatic theorem provers associated to high performance realisations of its theories.
</p>
</div>
</div>
</div>
</div>

<div id="outline-container-orgdfc5c3c" class="outline-2">
<h2 id="orgdfc5c3c"><span class="section-number-2">2.</span> Signature</h2>
<div class="outline-text-2" id="text-2">
<p>
Truly,
screwtape.
</p>

<p>
gopher://gopher.club/1/users/screwtape
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: screwtape</p>
<p class="date">Created: 2023-01-16 Mon 14:03</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>