<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.1.1">Jekyll</generator><link href="spacetime-appreciation.blog/feed.xml" rel="self" type="application/atom+xml" /><link href="spacetime-appreciation.blog/" rel="alternate" type="text/html" /><updated>2024-07-21T14:05:35-05:00</updated><id>spacetime-appreciation.blog/feed.xml</id><title type="html">Spacetime Appreciation Blog</title><subtitle>Getting friendly with space and time.</subtitle><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><entry><title type="html">Rhythmic Clock</title><link href="spacetime-appreciation.blog/time/2024/07/09/Rhythmic-Clock.html" rel="alternate" type="text/html" title="Rhythmic Clock" /><published>2024-07-09T05:59:47-05:00</published><updated>2024-07-09T05:59:47-05:00</updated><id>spacetime-appreciation.blog/time/2024/07/09/Rhythmic-Clock</id><content type="html" xml:base="spacetime-appreciation.blog/time/2024/07/09/Rhythmic-Clock.html"><![CDATA[<p>This clock uses rhythms to show the time.
In this article, you’ll learn how the hours and minutes are turned into music.
When you’re ready, press play and “hear the time.”</p>

<style>
	audio {
		display: block;
		margin-bottom: 20px;
	}
   .audio-container {
	   display: none;
   }

.media-container {
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto;
    width: 90%;
}

.image-container {
	width: 50%
}

.image-container img {
    max-width: 100%;
    height: auto;
}

.button-container {
	width: 50%
}
</style>

<div class="media-container">

<div class="button-container">
	<p>Current time:
	<a id="playPauseButton" class="button button--xl button--primary button--pill">▶ Play</a>
	</p>
</div>

<div class="image-container">
    <p><img src="/assets/rhythmic_clock/rhythmic-clock-circular.webp" alt="clock" /></p>
  </div>

</div>

<div id="audio-container">
	<audio id="synchronizedAudio" class="audio-container">
		<source id="audioSource" type="audio/mp3" src="" />
		Your browser does not support the audio element.
	</audio>
</div>

<h2 id="clock-instructions">Clock Instructions</h2>

<h3 id="the-base-rhythm">The base rhythm</h3>

<table>
  <thead>
    <tr>
      <th><strong>Bar</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
  </tbody>
</table>

<p>The base rhythm is composed of 4 bars of 4 ticks each,
making a total of 16 ticks for the whole phrase.
The base rhythm is played by a synth, where ⚪ represents a tick with sound and ⚫ represents a tick of silence.
This rhythm repeats continuously.</p>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_melody.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<h3 id="telling-the-hour">Telling the hour</h3>

<p>To indicate the hour, we label the last 12 ticks from 0 to 11 (similar to a wall clock).
There is a symbol (🟠) on the tick that corresponds to the hour.
📀 It is played by a cymbal.</p>

<p>For example, this represents 12 o’clock:</p>

<table>
  <thead>
    <tr>
      <th><strong>Hour</strong></th>
      <th>.</th>
      <th>.</th>
      <th>.</th>
      <th>.</th>
      <th>12</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th>7</th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Cymbal</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🟠</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_12oclock.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>And this represents 6 o’clock:</p>

<table>
  <thead>
    <tr>
      <th><strong>Hour</strong></th>
      <th>.</th>
      <th>.</th>
      <th>.</th>
      <th>.</th>
      <th>12</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th>7</th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Cymbal</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🟠</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_6oclock.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>The clock doesn’t tell if it’s am or pm.</p>

<h3 id="telling-the-quarter-hour">Telling the Quarter Hour</h3>

<p>🔔  The minute information is conveyed by a bell-like percussion (🔴).
There are 4 quarter hours in an hour, and the bar in which the bell rings indicates the quarter hour.</p>

<p>In this example, the bell falls in the third bar, corresponding to the third quarter (minutes 30 to 44):</p>

<table>
  <thead>
    <tr>
      <th><strong>Quarter</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Bell</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_min_35.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>It does not matter where the bell rings within the bar or how many times it rings.
For example, this is also the third quarter:</p>

<table>
  <thead>
    <tr>
      <th><strong>Quarter</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Bell</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_min_30.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<h3 id="telling-the-minute">Telling the Minute</h3>

<p>Each quarter has 15 minutes,
so we encode minutes 0 to 14 within each quarter using a rhythmic sequence of 4 ticks.</p>

<p>For example, minute 0 is represented by the pattern: 🔴 🔴 🔴 🔴.</p>

<table>
  <thead>
    <tr>
      <th><strong>Quarter</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Bell</strong></td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<p>Here, the bell falls within the first bar, indicating minute 0 of the first quarter (minute 0 of the hour).</p>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_min_0.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>Let’s revisit a previous example:</p>

<table>
  <thead>
    <tr>
      <th><strong>Quarter</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Bell</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<p>This represents minute 0 of the third quarter, which is minute 30 of the hour.</p>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_min_30.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>The pattern for minute 11 is 🔴 ⚫ 🔴 ⚫ , you can see:</p>

<table>
  <thead>
    <tr>
      <th><strong>Quarter</strong></th>
      <th><strong>1</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>2</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>3</strong></th>
      <th> </th>
      <th>.</th>
      <th> </th>
      <th><strong>4</strong></th>
      <th> </th>
      <th> </th>
      <th> </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Synth</strong></td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td><strong>Bell</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🔴</td>
      <td> </td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<p>This falls in the second bar, indicating minute 11 of the second quarter (minute 26).</p>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_min_26.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<h3 id="pattern-sequences-for-minutes">Pattern Sequences For Minutes</h3>

<p>To determine the pattern for each minute, enumerate the ticks from 0 to 14, excluding the first tick of bar 2.
Here’s the enumeration:</p>

<table>
  <thead>
    <tr>
      <th><strong>0</strong></th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>❌</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th><strong>7</strong></th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th><strong>11</strong></th>
      <th>12</th>
      <th>13</th>
      <th>14</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
  </tbody>
</table>

<p>To find the pattern for minute 7, start at that index and write down the next 4 ticks: ⚪ ⚫ ⚫ ⚪.</p>

<table>
  <thead>
    <tr>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>❌</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th><strong>7</strong></th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
      <th>12</th>
      <th>13</th>
      <th>14</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚪</td>
      <td>⚫</td>
      <td>⚪</td>
      <td>⚫</td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>⬆️</td>
      <td>⬆️</td>
      <td>⬆️</td>
      <td>⬆️</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<p>If you reach the end of the sequence, loop around.
For example, minute 13: ⚪ ⚫ ⚪ ⚪.</p>

<p>Skipping the ❌ is necessary as it represents 4 silences (⚫ ⚫ ⚫ ⚫), which are inaudible.</p>

<p>Alternatively, learn the patterns by heart:</p>

<ol start="0">
  <li>🔴 🔴 🔴 🔴</li>
  <li>🔴 🔴 🔴 ⚫</li>
  <li>🔴 🔴 ⚫ ⚫</li>
  <li>🔴 ⚫ ⚫ ⚫</li>
  <li>⚫ ⚫ ⚫ 🔴</li>
  <li>⚫ ⚫ 🔴 ⚫</li>
  <li>⚫ 🔴 ⚫ ⚫</li>
  <li>🔴 ⚫ ⚫ 🔴</li>
  <li>⚫ ⚫ 🔴 🔴</li>
  <li>⚫ 🔴 🔴 ⚫</li>
  <li>🔴 🔴 ⚫ 🔴</li>
  <li>🔴 ⚫ 🔴 ⚫</li>
  <li>⚫ 🔴 ⚫ 🔴</li>
  <li>🔴 ⚫ 🔴 🔴</li>
  <li>⚫ 🔴 🔴 🔴</li>
</ol>

<p>The following audio contains each minute from 0 to 59.
Each phrase is repeated twice: you’ll hear minutes 0, 0, 1, 1, …, 58, 58, 59, 59.
The total duration is 8 minutes.</p>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_all_min.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<h3 id="putting-it-all-together">Putting it all Together</h3>

<p>Here’s a sample with both hour and minutes indicating 3:30.</p>

<table>
  <thead>
    <tr>
      <th>Melody</th>
      <th>⚪</th>
      <th>⚪</th>
      <th>⚪</th>
      <th>⚪</th>
      <th>⚫</th>
      <th>⚫</th>
      <th>⚫</th>
      <th>⚫</th>
      <th>⚪</th>
      <th>⚫</th>
      <th>⚫</th>
      <th>⚪</th>
      <th>⚪</th>
      <th>⚫</th>
      <th>⚪</th>
      <th>⚫</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Hour</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>12</td>
      <td>1</td>
      <td>2</td>
      <td>3</td>
      <td>4</td>
      <td>5</td>
      <td>6</td>
      <td>7</td>
      <td>8</td>
      <td>9</td>
      <td>10</td>
      <td>11</td>
    </tr>
    <tr>
      <td><strong>Cymbal</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🟠</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td><strong>Quarter</strong></td>
      <td><strong>1</strong></td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td><strong>2</strong></td>
      <td>2</td>
      <td>2</td>
      <td>2</td>
      <td><strong>3</strong></td>
      <td>3</td>
      <td>3</td>
      <td>3</td>
      <td><strong>4</strong></td>
      <td>4</td>
      <td>4</td>
      <td>4</td>
    </tr>
    <tr>
      <td><strong>Minute</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td>🔴</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<audio controls="">
  <source src="/assets/rhythmic_clock/sample_3h30.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>

<p>You’re now ready to go back to the head of the article and listen to the current time.</p>

<h2 id="how-its-made">How It’s Made</h2>

<p>The base rhythm is a De Bruijn sequence of span 4, ensuring every 4 consecutive ticks are unique.
This lets us use subrhythms to create minute patterns.</p>

<p>I use Python to generate the audio.
The clock is a 12-hour loop.
Each hour of audio is created with Python using the Mido library.
Then, I use FluidSynth to convert MIDI to WAV and compress it to mono MP3 to save space.</p>

<p>On the JavaScript side, a function loads and synchronizes the correct audio based on the current time.
It resynchronizes periodically and handles hour changes.</p>

<p>The Python code is available on <a href="https://gitlab.com/Emmanuel_B/rhythmic-clock">Gitlab</a>.</p>

<script src="/assets/rhythmic_clock/synchronize-audio.js"></script>

<script>
	const baseUrl = '/assets/rhythmic_clock/';
	register(baseUrl);
</script>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="time" /><category term="music" /><category term="rhythm" /><category term="clock" /><category term="time" /><summary type="html"><![CDATA[This clock uses rhythms to show the time. In this article, you’ll learn how the hours and minutes are turned into music. When you’re ready, press play and “hear the time.”]]></summary></entry><entry><title type="html">XMonad Cubic Setup</title><link href="spacetime-appreciation.blog/space/2023/05/26/xmonad-cubic-setup.html" rel="alternate" type="text/html" title="XMonad Cubic Setup" /><published>2023-05-26T11:50:47-05:00</published><updated>2023-05-26T11:50:47-05:00</updated><id>spacetime-appreciation.blog/space/2023/05/26/xmonad-cubic-setup</id><content type="html" xml:base="spacetime-appreciation.blog/space/2023/05/26/xmonad-cubic-setup.html"><![CDATA[<p>This is a setup with 24 workspaces that are arranged in a <strong>cubemap</strong> type of way.
Each workspace has as its background a picture from a common scene from a unique angle,
so that as you move around the workspaces, it feels like moving inside the scene!</p>

<h1 id="xmonad-cubicpanoramic-setup">XMonad Cubic/Panoramic Setup</h1>

<p>A quick video is often easier to explain the concept!</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/pV_z9wCNJ4w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<p>In this article I’ll teach you how to set it up.
I will also have some tips at the end on how to use it productively.</p>

<h2 id="what-you-will-need">What You Will Need?</h2>

<ol>
  <li>XMonad, I tested it on version 0.15, probably can work on other versions</li>
  <li>A compositing manager, for example Xcompmgr as transparency is important in this setup</li>
  <li>Download &amp; install <a href="https://github.com/pekdon/wallpaperd">wallpaperd</a></li>
  <li>Have 6 images, “arranged in a cube”
 If unsure of what images you want to use,
 I recommend starting with those 
 <a href="https://opengameart.org/content/mountain-skyboxes">mountain images</a> 
 kindly made publicly available by <a href="http://hummus.name">Emil Persson</a>.
 I will assume you have saved the images to ‘~/Pictures/mountain-skyboxes’</li>
  <li>Finally, download the config file <a href="https://gitlab.com/Emmanuel_B/dot/-/blob/master/.xmonad/lib/Octahedral.hs">Octahedral.hs</a>, and put it in your ‘.xmonad/lib’ folder.</li>
</ol>

<h2 id="setting-up-the-images">Setting up the Images</h2>

<h3 id="transforming-your-6-base-views">Transforming your 6 Base Views</h3>

<p>For this tutorial, we’ll use the pictures of the mountain “Ryfjallet”,
which you can find under the directory of the same name in the directory ‘~/Pictures/mountain-skyboxes’.</p>

<p>You should find <strong>6 pictures</strong> there: ‘posx.jpg’, ‘negx.jpg’, ‘posy.jpg’, ‘negy.jpg’, ‘posz.jpg’, ‘negz.jpg’,
which we may call your base views.</p>

<p>Each of these pictures contain one side of the cube,
or one side of the 360 view if you prefer.</p>

<p>The only thing that we are missing here is that, in the configuration, we can see each view from 4 angles,
which corresponds to rotation of the head around the “Maybe” axis (see video for explanation).
These different angles are not present in this directory!</p>

<blockquote>
  <p>As a reminder, the maybe rotation corresponds to tilting the head to the right,
bringing the right hear to the right shoulder.</p>

  <p>When you do a maybe rotation, your view rotates counterclockwise (check it!).</p>
</blockquote>

<p>We’ll have to simulate this using an image software of your choice, start with posx.jpg
and rotate it 3 times counterclockwise, saving each image to a different file like so:</p>
<ul>
  <li>“posx.jpg” -&gt; original, not rotated</li>
  <li>“posx-M.jpg” -&gt; rotated once counterclockwise</li>
  <li>“posx-M2.jpg” -&gt; rotated twice counterclockwise</li>
  <li>“posx-M3.jpg” -&gt; rotated three times counterclockwise</li>
</ul>

<p>Once you have done this for “posx.jpg”,
you’ll need to do the same for each of the remaining images,
leaving you with 24 images!</p>

<p>We are now ready to setup the background of each workspace.</p>

<h3 id="setting-up-wallpaperd">Setting up Wallpaperd</h3>

<p>Wallpaperd is a small software which is going to help us have a different wallpaper on each workspace.</p>

<p>Once you have installed wallpaperd, you need to configure it by creating a ‘.wallpaperd.cfg’
in your home directory.</p>

<ul>
  <li>The first two lines tell wallpaperd where to look for your images.
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>path.search=~/Pictures:~/Pictures/Wallpapers:/usr/share/backgrounds
config.mode=NUMBER
</code></pre></div>    </div>
  </li>
  <li>Then we need to tell it what to show on workspace 0
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wallpaper.0.image=mountain-skyboxes/Ryfjallet/posz.jpg
wallpaper.0.mode=ZOOMED
</code></pre></div>    </div>
  </li>
  <li>Then we need to tell it what to show on workspace 1
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wallpaper.1.image=mountain-skyboxes/Ryfjallet/posz-M.jpg
wallpaper.1.mode=ZOOMED
</code></pre></div>    </div>
  </li>
  <li>And then on until 23, in the end your file will look like <a href="https://gitlab.com/Emmanuel_B/dot/-/blob/master/.wallpaperd.cfg">this</a></li>
</ul>

<p>To check that it is working, start the daemon by entering <code class="language-plaintext highlighter-rouge">wallpaperd</code> in a terminal,
you should see the new wallpapers, and you should see the wallpapers changing as you change
workspaces, even if you currently have less than 24.</p>

<p>Finally, the last step is making sure wallpaperd starts whenever you log in,
which you can do by updating your “.xsession” file or in my case “~/.xmonad/.xmonad-session-rc” and putting
at the end: <code class="language-plaintext highlighter-rouge">wallpaperd&amp;</code></p>

<h2 id="setting-up-movement-keys">Setting Up Movement Keys</h2>

<p>First make sure that you have 24 workspaces and that they are labelled by their number,
as in “1”, “2”, … “24”.</p>

<p>Then we’ll need to setup the keys, we’ll use a standard setup
where using mod+movement switches to other workspace,
while mod+shift+movement, moves the active window and then switches to other workspace.</p>

<p>Here, we’ll follow my “Yes, No, Maybe” movement setup,
binding the mod+y, mod+n and mod+m keys as shown below:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>        , ((mod4Mask,               xK_m),  windows $ cubic_switch Octahedral.maybe)
        , ((mod4Mask,               xK_y),  windows $ cubic_switch Octahedral.yes)
        , ((mod4Mask,               xK_n),  windows $ cubic_switch Octahedral.no)
        , ((mod4Mask .|. shiftMask, xK_m),  windows $ cubic_shift Octahedral.maybe)
        , ((mod4Mask .|. shiftMask, xK_y),  windows $ cubic_shift Octahedral.yes)
        , ((mod4Mask .|. shiftMask, xK_n),  windows $ cubic_shift Octahedral.no)
</code></pre></div></div>

<p>Of course this is just a basic config, you can play with it as much as you want.
For example if you want a key that does “opposite m”, you can use the movement <code class="language-plaintext highlighter-rouge">inv maybe</code>.</p>

<p>If you want a key that corresponds to movement N done twice, you can use the movement <code class="language-plaintext highlighter-rouge">mult no no</code>.</p>

<p>Using <code class="language-plaintext highlighter-rouge">inv</code> and <code class="language-plaintext highlighter-rouge">mult</code> in a nested way, you can produce any motion of the cube you might desire
(assuming here that you desire explore movements of the cube).</p>

<h2 id="setting-up-transparency">Setting Up Transparency</h2>

<p>If you’ve seen the video, you’ve noticed that there are a lot of workspaces,
and how to move between them is not completely straightforward.</p>

<p>For example, if you are facing at the red cabana and press Mod+Y, it’s going to take you to the ground.
But if you are facing the same cabana <em>upside down</em> , pressing Mod+Y will take you to the sky.</p>

<p>The conclusion is that <strong>you need to know where you are in order to know where you’ll go</strong>.</p>

<p>What then, happens when you are working?
You have windows covering the wallpaper and you might already have forgotten which way you were facing.</p>

<p>The solution is to use <em>on demand transparency</em>, that is transparency that turns on
only when you want to switch workspaces.
This is achieved by <strong>turning on a heavy transparency (like0.75) whenever the mod key is down</strong>
(and then of course turning it back off when it is released).</p>

<p>Here is how to set this up.</p>

<ol>
  <li>Create an extensible state to store the current value of the transparency</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
import XMonad.Hooks.FadeWindows
import qualified XMonad.Util.ExtensibleState as XState

newtype MyState = MyState { seethrough :: Rational } deriving (Show, Read, Typeable)

instance ExtensionClass (MyState) where
	initialValue  = MyState 0 
</code></pre></div></div>

<ol>
  <li>Activate the transparency</li>
</ol>

<p>Have a variable that encodes transparency is our state is not enough,
we still need to tell the XServer to actually use it.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fadingHook :: X ()
fadingHook = do 
		transparency_value &lt;- XState.gets seethrough
		fadeWindowsLogHook $ composeAll [ 
						transparency transparency_value,
                        isUnfocused --&gt; transparency 0.2
                        ]
</code></pre></div></div>

<p>You will also need to <code class="language-plaintext highlighter-rouge">&lt;+&gt;</code> this function to your config’s logHook.</p>

<ol>
  <li>Create a hook that will catch the mod key (here the windows key) and accordingly set and remove transparency</li>
</ol>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>on_switch_transparency :: Rational
on_switch_transparency = 0.75

keyDownActions :: XConf -&gt; M.Map (KeyMask, KeySym) (X ())
keyDownActions (XConf{ config = XConfig {XMonad.modMask = modMask} }) = M.fromList $ 
    [ 
	  -- pressing left mod key
	  ((noModMask, xK_Super_L), XState.put (MyState on_switch_transparency) &gt;&gt; windows id)
    ]

keyUpActions :: XConf -&gt; M.Map (KeyMask, KeySym) (X ())
keyUpActions (XConf{ config = XConfig {XMonad.modMask = modMask} }) = M.fromList $ 
    [ 
	  -- releasing left mod key
	  ((mod4Mask, xK_Super_L), XState.put (MyState 0) &gt;&gt; windows id)
    ]

handleKeyEvent :: Event -&gt; X ()
handleKeyEvent (KeyEvent {ev_event_type = eventType, ev_state = mask, ev_keycode = code})
    | eventType == keyRelease = 
		withDisplay $ \dpy -&gt; do
        keyPressed  &lt;- io $ keycodeToKeysym dpy code 0
        maskClean &lt;- cleanMask mask
        keyMappings &lt;- asks keyUpActions
        userCodeDef () $ whenJust (M.lookup (maskClean, keyPressed) keyMappings) id
    | eventType == keyPress = 
		withDisplay $ \dpy -&gt; do
        keyPressed  &lt;- io $ keycodeToKeysym dpy code 0
        maskClean &lt;- cleanMask mask
        keyMappings &lt;- asks keyDownActions
        userCodeDef () $ whenJust (M.lookup (maskClean, keyPressed) keyMappings) id
handleKeyEvent _ = return ()

handleKeyEventHook :: Event -&gt; X All
handleKeyEventHook e = handleKeyEvent e &gt;&gt; return (All True)
</code></pre></div></div>

<p>You will need to <code class="language-plaintext highlighter-rouge">mappend</code> the function <code class="language-plaintext highlighter-rouge">handleKeyEventHook</code> to your <code class="language-plaintext highlighter-rouge">handleEventHook</code> in your config.</p>

<ol>
  <li>Last piece of setup</li>
</ol>

<p>You will need to add this line to your key config.
It doesn’t do anything in itself but it “registers” the mod key in xmonad.
If you don’t put it in the key detection above will not work.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>((noModMask,              xK_Super_L),  return ())
</code></pre></div></div>
<h2 id="usability-tips">Usability Tips</h2>

<p>I tend to use the “squared” movements a lot: MM, NN, and YY.</p>

<p>They are convenient because they have order 2: if you do them twice, you come back where you started.</p>

<p>For example, I’ll choose a random workspace and start coding there.
Of course I’ll need to check some documentation at some point, on which workspace should I put it?
I suggest using one of the squares, for example MM.</p>

<p>Pressing twice m I can go from code to documentation, which is convenient.
Pressing twice m again takes me from documentation back to code, making it easy to go between the two.</p>

<p>What if now my code also requires me to access a command line, to restart some servers, 
run some tests or whatever,
on which workspace should I put it?
Again I’d go for one of the squares, for example I’d open a terminal on YY.
I can now easily switch from my terminal to my code back and forth using YY.</p>

<p>The good thing is that, you can now switch back and forth between your documentation and your terminal using NN.</p>

<p>The general pattern is that if you have a base workspace and 3 other workspaces places in NN, MM and YY,
then it is very easy to navigate between <strong>any pair</strong> of those 4 workspaces.</p>

<p>So that’s a great way to arrange your windows you use a lot and together.</p>

<p>I have an additional advice for you, for windows you don’t use so frequently,
maybe like your music or some other program you only check out occasionaly.
I’d put them all on either one of the 4 sky workspaces or floor ones.</p>

<p>Sure it will take a bit more time alternating between these 2 and your work,
but it is generally very easy to know which way is the ground or the sky.</p>

<h2 id="conclusion">Conclusion</h2>

<p>Thank you guys for checking out this configuration!</p>

<p>If you have any questions it might be easier to just comment on the youtube video,
as I don’t have comments here yet!</p>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="space" /><category term="xmonad" /><category term="window manager" /><category term="cubic" /><category term="panoramic" /><summary type="html"><![CDATA[This is a setup with 24 workspaces that are arranged in a cubemap type of way. Each workspace has as its background a picture from a common scene from a unique angle, so that as you move around the workspaces, it feels like moving inside the scene!]]></summary></entry><entry><title type="html">Lie Algebra of Galilean Group 1+1</title><link href="spacetime-appreciation.blog/mathematics/2022/09/20/galilean-2D-lie-algebra.html" rel="alternate" type="text/html" title="Lie Algebra of Galilean Group 1+1" /><published>2022-09-20T11:50:47-05:00</published><updated>2022-09-20T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/2022/09/20/galilean-2D-lie-algebra</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/2022/09/20/galilean-2D-lie-algebra.html"><![CDATA[<h1 id="galilean-11-group--lie-algebra">Galilean 1+1 group + lie algebra</h1>

<p>Here we study the group most closely related to our intuition of spacetime, the <em>galilean group</em>.</p>

<p>We’ll be considering a two-dimensional space made of 1 dimension of space and 1 of time.
We can then write (x, t) for the coordinates of an event.
On this space, there are a few natural transformations:</p>
<ul>
  <li>Space translations: $(x, t) \mapsto (x+a, t)$, for any $a \in \mathbb{R}$</li>
  <li>Time translations: $(x, t) \mapsto (x, t+s)$, for any $s \in \mathbb{R}$</li>
  <li>Boosts: $(x, t) \mapsto (x+vt, t)$, for any velocity $v \in \mathbb{R}$</li>
</ul>

<p>We can rewrite these operations as the action of a group, that we describe first here:</p>

<h2 id="the-galilean-group">The Galilean Group</h2>

<p>The galilean group is generated by matrices of the form:
\(D_x(a) = \begin{pmatrix} 1 &amp; 0 &amp; a \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1\end{pmatrix}, 
D_t(s) = \begin{pmatrix} 1 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; s \\ 0 &amp; 0 &amp; 1\end{pmatrix}, 
B(v) = \begin{pmatrix} 1 &amp; -v &amp; 0 \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1\end{pmatrix}\)</p>

<p>From which we can deduce the following commutation relationships:
\(D_xD_t = D_tD_x \\
BD_x=D_xB \\
B(v)D_t(s)B(v)^{-1} = D_x(-vs)D_t(s)\)</p>

<p>From this we can conclude that the subgroup generated by $D_x, D_t$ is free abelian, and that the galilean group $\mathrm{SGal}$ is a semi-direct product of the subgroup generated by uniform boosts.
So that we can write $\mathrm{SGal}$ as follow:
\(\mathrm{SGal} = \left \{ \begin{pmatrix} 1 &amp; -v &amp; a \\ 0 &amp; 1 &amp; s \\ 0 &amp; 0 &amp; 1\end{pmatrix}, v, a,s \in \mathbb{R} \right \}\)</p>

<h3 id="action-on-2d-spacetime-coordinates">Action on 2D spacetime coordinates</h3>

\[\begin{pmatrix} 1 &amp; -v &amp; a \\ 0 &amp; 1 &amp; s \\ 0 &amp; 0 &amp; 1\end{pmatrix} \cdot (x, t) = 
(x-vt+a, t+s)\]

<h1 id="galilean-lie-algebra">Galilean lie algebra</h1>

<p>The Lie algebra is generated by:</p>

\[D_x = \begin{pmatrix} 0 &amp; 0 &amp; 1 \\ 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0\end{pmatrix}, 
D_t = \begin{pmatrix} 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 1 \\ 0 &amp; 0 &amp; 0\end{pmatrix}, 
B = \begin{pmatrix} 0 &amp; -1 &amp; 0 \\ 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0\end{pmatrix}\]

<p>From which we get the structure coefficients of the Lie algebra:</p>

\[[D_x, D_t] = 0 \\
[B, D_x] = 0 \\
[B, D_t] = -Dx\]

<p>We note that the <strong>center</strong> of $\mathfrak{gal}$ is $\lt D_X \gt$</p>
<h3 id="killing-form">Killing form</h3>

<p>The killing form is null</p>

<h3 id="adjoint-action-in-dx-dt-b">Adjoint action in (Dx, Dt, B)</h3>

<p>\(\begin{pmatrix} 1 &amp; -v &amp; a \\ 0 &amp; 1 &amp; s \\ 0 &amp; 0 &amp; 1 \end{pmatrix} \mapsto
\begin{pmatrix} 1 &amp; -v &amp; s \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{pmatrix}\)
TODO: verify this formula</p>

<h3 id="orbits-of-the-adjoint-action">Orbits of the adjoint action</h3>

<h4 id="points-of-the-form-x-0-0">Points of the form (x, 0, 0)</h4>

<p>All this points are fixed points of the action.
They correspond to spatial translations of a given speed x, which is a complete invariant for this orbit.
Note that this speed x is <em>not a movement in time</em>.</p>

<h4 id="the-line-b--c--d_t--t-where-ct-neq-0">The line $B = c\ \&amp;\ D_t = t$ where $ct \neq 0$</h4>

<p>This line is stable by the adjoint action.
The matrix of the action on this line (x, t, c) is given by:
\(\begin{pmatrix} 1 &amp; -v &amp; s \\ 0 &amp; 1 &amp; 0 \\ 0 &amp; 0 &amp; 1 \end{pmatrix} \begin{pmatrix} x \\ t \\ c \end{pmatrix}
= \begin{pmatrix} x -vt + cs \\ t \\ c \end{pmatrix}\)</p>

<p>This line corresponds to transformations that move in time at a fixed speed s and accelerate at a fixed speed v.</p>

<h2 id="data-for-moving-on-11-galilean-space">Data for moving on 1+1 Galilean Space</h2>

<ul>
  <li>x,t coordinates of the point</li>
  <li>$D_t = \begin{pmatrix} 0 &amp; 0 &amp; v \ 0 &amp; 0 &amp; 1 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$ (given by a single number)</li>
</ul>

<p>From this data we can deduce the other components of the Lie basis:</p>

<ul>
  <li>$D_x = \begin{pmatrix} 0 &amp; 0 &amp; 1 \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$ which is constant</li>
  <li>$B = \begin{pmatrix} 0 &amp; -1 &amp; t \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$</li>
</ul>

<p>This construction insures that the Lie algebra basis structure coefficients are invariants throughout the action.
It also insures that each of the Lie basis vector stays in the same conjugacy class.
Finally, it guarantees that (x,t) is a fixed point of B.</p>

<p>The Lie action on points is just given by $X \cdot (x,t) \mapsto (I+X) \begin{pmatrix} x \ t \ 1 \end{pmatrix}$</p>

<h2 id="picture-of-the-lie-algebra">Picture of the Lie Algebra</h2>

<p>The Lie Algebra is globally invariant by translation in the Dx axis.
In all the graphs below we’ll be identifying $\mathfrak{gal}$ with $\mathbb{R}^3$ using the $(D_x, D_t, B)$ basis.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>The white cross shows the line of space translations &lt;Dx&gt;, which are all fixed points.
</code></pre></div></div>

<p><img src="/assets/galilean-2D-lie-algebra_files/galilean-2D-lie-algebra_6_1.png" alt="png" /></p>

<h3 id="computation-of-the-killing-form">Computation of the Killing form</h3>

<p>$k(X, Y) = \mathrm{tr}(\mathrm{ad}_X \circ \mathrm{ad}_Y)$</p>

<ul>
  <li>
    <p><strong>k(B, B) = 0</strong></p>

    <p>$\mathrm{ad}_B \circ \mathrm{ad}_B(X) = [B, [B, X]]$</p>

    <p>Which gives:
  \(\mathrm{ad}_B \circ \mathrm{ad}_B(Dx) = 0 \\
  \mathrm{ad}_B \circ \mathrm{ad}_B(Dt) = 0 \\
  \mathrm{ad}_B \circ \mathrm{ad}_B(B) = 0\)</p>
  </li>
  <li>
    <p><strong>k(Dx, Dx) = 0</strong></p>

    <p>$\mathrm{ad}_Dx \circ \mathrm{ad}_Dx(X) = [Dx, [Dx, X]] = 0$</p>

    <p>Because Dx anihilates the whole Lie algebra.</p>
  </li>
  <li>
    <p><strong>k(Dt, Dt) = 0</strong></p>

    <p>$\mathrm{ad}_Dt \circ \mathrm{ad}_Dt(X) = [Dt, [Dt, X]]$</p>

    <p>Which gives:
  \(\mathrm{ad}_Dt \circ \mathrm{ad}_Dt(Dx) = 0 \\
  \mathrm{ad}_Dt \circ \mathrm{ad}_Dt(Dt) = 0 \\
  \mathrm{ad}_Dt \circ \mathrm{ad}_Dt(B) = 0 \\\)</p>
  </li>
  <li>
    <p><strong>k(Dx, Dt) = 0</strong></p>

    <p>$\mathrm{ad}_Dx \circ \mathrm{ad}_Dt(X) = [Dx, [Dt, X]] = 0$</p>
  </li>
  <li>
    <p><strong>k(B, Dx) = 0</strong></p>

    <p>$\mathrm{ad}_B \circ \mathrm{ad}_Dx(X) = [B, [Dx, X]] = 0$</p>
  </li>
  <li>
    <p><strong>k(B, Dt) = 0</strong></p>

    <p>$\mathrm{ad}_B \circ \mathrm{ad}_Dt(X) = [B, [Dt, X]]$</p>

    <p>Which gives:
  \(\mathrm{ad}_B \circ \mathrm{ad}_Dt(Dx) = 0 \\
  \mathrm{ad}_B \circ \mathrm{ad}_Dt(Dt) = 0 \\
  \mathrm{ad}_B \circ \mathrm{ad}_Dt(B) = 0 \\\)</p>
  </li>
</ul>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="group theory" /><category term="mathematics" /><category term="galilean group" /><summary type="html"><![CDATA[Galilean 1+1 group + lie algebra]]></summary></entry><entry><title type="html">Finite Galilean Group 1+1</title><link href="spacetime-appreciation.blog/mathematics/2022/09/20/finite-gal-1p1-notebook.html" rel="alternate" type="text/html" title="Finite Galilean Group 1+1" /><published>2022-09-20T11:50:47-05:00</published><updated>2022-09-20T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/2022/09/20/finite-gal-1p1-notebook</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/2022/09/20/finite-gal-1p1-notebook.html"><![CDATA[<h1 id="finite-galilean-group-in-11-dimensions">Finite Galilean Group in 1+1 dimensions</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>         _
     __ ( }
   '---. _`---,
   ___/ /
 /,---'\\
       //
      '== _Art by Joan Stark_
</code></pre></div></div>

<p><strong>Table of Content</strong>:</p>
<ol>
  <li>Definition of the Group Action
    <ol>
      <li>$\mathcal{Gal}_3(1+1)$</li>
      <li>Info about Elements</li>
      <li>The Group Action</li>
    </ol>
  </li>
  <li>Representation Theory
    <ol>
      <li>Irreps and Character Table</li>
      <li>Projection on $\mathcal{U}<em>{-1,0} \oplus \mathcal{U}</em>{0,0} \oplus \mathcal{U}_{1,0}$</li>
      <li>Projection on $\mathcal{V} \oplus \mathcal{V’}$</li>
      <li>Interpretation of the Decomposition</li>
    </ol>
  </li>
  <li>Harmonic Analysis
    <ol>
      <li>Definition</li>
      <li>Interpretation of the Coefficients</li>
      <li>Interpretation of the Product</li>
    </ol>
  </li>
  <li>Real Representations</li>
</ol>

<h2 id="1-definition-of-the-group-and-action">1. Definition of the Group and Action</h2>

<h3 id="11-definition-of-mathcalgal_311">1.1 Definition of $\mathcal{Gal}_3(1+1)$</h3>

<p>The 1+1 Galilean group is chiefly defined by its generators and relations.
The generators correspond to movement you can do in that spacetime, they are:</p>
<ol>
  <li>Space translations: D (lie generator), $g(x,0,0)$</li>
  <li>Time transaltions: H (lie generator), $g(0,s,0)$</li>
  <li>Boosts: B (lie generator), $g(0,0,s)$</li>
</ol>

<p>Those generators verify:</p>

\[[D,H] = e \\
[B,D] = e \\
[B,H] = D^{-1}\]

<p>Any element can be uniquely written $D^xH^tB^v$, or in code <code class="language-plaintext highlighter-rouge">Galilean1p1(x,t,v)</code>.
The group definition is detailed in ‘galilean.py’ in the class <code class="language-plaintext highlighter-rouge">Galilean1p1</code>.</p>

<p><strong>Truncation of the group</strong>: The group $\mathcal{Gal}(1+1)$ is infinite. We turn it into a finite group by imposing the additional relations:<br />
\(D^3 = H^3 = B^3 = e\)
We’ll note the group thus obtained $\mathcal{Gal}_3(1+1)$.</p>

<h3 id="12-element-information-about-the-group">1.2 Element Information about the Group</h3>

<h4 id="group-structure">Group Structure</h4>

<p><strong>Exercise</strong>: Show that the sequence $0 \rightarrow \langle D, H\rangle \rightarrow G \rightarrow \langle B\rangle \rightarrow 0$ is exact and right-split.
Alternatively if you don’t like the language of exact sequences, show that G is a semi-direct product of $\langle D, H\rangle$ and $\langle B\rangle$.</p>

<p>Since D and H commute, we now know that $\lt D, H \gt \sim \mathbb{Z}/3 \times \mathbb{Z}/3$, and together with the previous exercise this gives us that <strong>G has 27 elements</strong>.</p>

<p><strong>Exercise</strong>: Show that $Z(G) = \langle D \rangle$ and deduce the normal series: 
$0 \lhd \langle D \rangle \lhd \langle D, H \rangle \lhd G$</p>

<p><strong>Exercise</strong>: Prove that $G/{Z(G)} \sim \mathbb{Z}/3\times \mathbb{Z}/3$</p>

<blockquote>
  <p><em>Hint</em>: There are only 2 groups of order 9: $Z/9$ and $Z/3 \times Z/3$.</p>
</blockquote>

<h4 id="conjugacy-classes">Conjugacy Classes</h4>

<p><strong>Exercise</strong>: Find all the <strong>conjugacy classes</strong> of G.</p>

<blockquote>
  <p><em>Answer</em>: There are 11 classes:</p>
  <ul>
    <li>3 classes of size 1, given by representants $e, D, D^{-1}$</li>
    <li>8 classes of size 3, given by representants $H, H^{-1}, B, HB, H^{-1}B, B^{-1}, HB^{-1}, H^{-1}B^{-1}$</li>
  </ul>
</blockquote>

<h3 id="13-definition-of-the-group-action-on-observations">1.3 Definition of the group action on observations</h3>
<p>Let’s start by defining our observations.
They are fields, we have one (complex-valued) observation for each point (x,t) in space and time.
To make it more accessible to computations, we limit both time and space to the range [-1, 0, 1].</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing obs_xt_basis...
Ok.
</code></pre></div></div>

<p>We also define a hermitian product between observations, which is given by multiplying coordinate wise and then summing.</p>

<p><img src="/assets/Finite_gal_1+1_files/Finite_gal_1+1_11_0.png" alt="png" /></p>

<p>Now we compute how the observation change when the observer changes.
We account for 3 basic types of displacements between observers:</p>
<ol>
  <li>Change in position</li>
  <li>Change in clock</li>
  <li>Change in speed</li>
</ol>

<p>The action of D corresponds to moving an observer 1 step to the right (positive x direction).
The observation $D\cdot f$ represents intuitively the observation f as observed by the translated observer.<br />
In particular, assume that we observe f(0,0), then our observer will observe the same value at (-1,0) because he is now standing at (1,0), so (0,0) looks like behind from him.
From this kinds of reasoning we derive the following tests:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing basic sanity of action on observations...
Ok.


This verifies that the scalar product is invariant...
Ok.


Testing commutation relationships at action level...
Ok.


Testing group action axioms...
Ok.
</code></pre></div></div>

<p>Our observations clearly represent functions $\mathrm{obs}: [-1,0,1]^2 \rightarrow \mathbb{C}$.
The action we have defined is given by the equation:
\(g \cdot \mathrm{obs}(x,t) = \mathrm{obs}(g^{-1} * (x,t))\)
Where $*$ is the <code class="language-plaintext highlighter-rouge">Galilean1p1.act_event</code> action on two dimensions (x,t)</p>

<h2 id="2-decomposition-into-irreps">2. Decomposition into irreps</h2>

<p>Here we have the basis functions to decompose the observation space into irreps.
We have the decomposition:</p>

\[\mathcal{F} = \mathcal{U}_{-1,0} \oplus \mathcal{U}_{0,0} \oplus \mathcal{U}_{1,0} \oplus \mathcal{V} \oplus \mathcal{V'}\]

<p>In order to find a decomposition basis, we use the <strong>projection formula</strong>:</p>

\[\pi_W = {\mathrm{dim} W \over |G|} \sum_{g \in G} \overline{\chi_W(g)} \cdot g :
 \mathcal{F} \rightarrow \mathcal{F}\]

<p>Where by g we mean $\rho(g) : \mathcal{F} \rightarrow \mathcal{F}$</p>

<p>This formula will give us a basis for each irrep in $\mathcal{F}$, but before that, we’ll justify the decomposition.</p>

<h3 id="21-characters-and-irreps">2.1 Characters and Irreps</h3>

<p><strong>Character table of G</strong>:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">Conj class (size)</th>
      <th>$e$ (1)</th>
      <th>$D$ (1)</th>
      <th>$D^{-1}$ (1)</th>
      <th>H (3)</th>
      <th>$H^{-1}$ (3)</th>
      <th>B (3)</th>
      <th>BH (3)</th>
      <th>$BH^{-1}$ (3)</th>
      <th>$B^{-1}$ (3)</th>
      <th>$HB^{-1}$ (3)</th>
      <th>$H^{-1}B^{-1}$ (3)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">$\chi_{0,0}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{0,1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>w</td>
      <td>w</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{0,-1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>w</td>
      <td>w</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{1,0}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>1</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>1</td>
      <td>w</td>
      <td>$w^{-1}$</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{1,1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>1</td>
      <td>w</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{1,-1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
      <td>1</td>
      <td>w</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>1</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{-1,0}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>w</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{-1,1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>w</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>1</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_{-1,-1}$</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>$w^{-1}$</td>
      <td>w</td>
      <td>1</td>
      <td>w</td>
      <td>1</td>
      <td>$w^{-1}$</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_V$</td>
      <td>3</td>
      <td>3w</td>
      <td>$3w^{-1}$</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <td style="text-align: center">$\chi_V’$</td>
      <td>3</td>
      <td>$3w^{-1}$</td>
      <td>3w</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
    </tr>
  </tbody>
</table>

<h4 id="derivation-of-the-character-table">Derivation of the Character Table</h4>

<p><strong>Exercise</strong>: Compute the full character table of G.</p>

<p><strong>Hints</strong>: G has 11 conjugacy classes so we know it has 11 irreducible representations.
9 of them can be obtained by computing the representations of $G/{Z(G)} \sim \mathbb{Z}/3\times \mathbb{Z}/3$ and pulling them back to G.
Using the orthogonality relationships, we can deduce that the 2 remaining irreps have both dimension 3.
Let’s call them V and V’, let’s note $\rho: G \rightarrow \text{GL}(V)$ the representation.
D acts on V and has 3 eigenvectors. Considering the actions of V and V’ on these, conclude that they must all have equal eigenvalues.
So $\rho(D) =  \lambda I_3$, we must also have $\lambda ^ 3 = 1$ so we can pick $\rho(D) = \omega I_3$.
We can now consider the 3 eigenvector of H on V and how B must act on them,
from which we can shows that all the eigenvalues of H must be distincts and that B permutes H’s eigenvectors.
Accordingly, we can choose:</p>

\[\rho(H) = 
\begin{pmatrix} 
1 &amp; 0 &amp; 0 \\
0 &amp; \omega &amp; 0 \\
0 &amp; 0 &amp; \omega^{-1} \end{pmatrix}\]

<p>and</p>

\[\rho(B) = \begin{pmatrix}
0 &amp; 1 &amp; 0\\
0 &amp; 0 &amp; 1\\
1 &amp; 0 &amp; 0 \end{pmatrix}\]

<p>We can check that the above matrices verify the relations of G, which makes it a valid representation.
Computing the trace of every conjugacy class, we verify that $\langle \chi_V, \chi_V \rangle = 1$ which shows that it is irreducible.</p>

<p>Finally, using the orthogonality relationships, we can find the last row.</p>

<p><strong>Representation matrices</strong></p>

<p>The actual operators of the representations are given by the trace itself for the 9 unidimensional irreps.
For V, we can take the matrices given in the hints of the previous exercise.</p>

<p>For V’ we can use the conjugate of the matrices for V!</p>

<h3 id="22-projection-on-mathcalu-10-oplus-mathcalu00-oplus-mathcalu_10">2.2 Projection on $\mathcal{U}<em>{-1,0} \oplus \mathcal{U}</em>{0,0} \oplus \mathcal{U}_{1,0}$</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing projections on U(i,0) factors...
OK.
</code></pre></div></div>

<p><img src="/assets/Finite_gal_1+1_files/Finite_gal_1+1_27_0.png" alt="png" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing U(s,0) basis vectors behave as expected under G-action...
Ok.
</code></pre></div></div>

<h3 id="23-projection-on-mathcalv-oplus-mathcalv">2.3 Projection on $\mathcal{V} \oplus \mathcal{V’}$</h3>

<p>Projection on the 2 tridimensional irreps.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Obtaining the basis v(t) from projection of certain observation...
Ok.
</code></pre></div></div>

<p>We observe that V admits a basis made of 3 eigenvector.
We can interpret $\langle v(i)|$ as the operator giving the position of the center of mass at time i.</p>
<ul>
  <li>Space translations just multiply all of them by $\omega$.
  This means that it just rotates the position of the center of mass on the unit circle.</li>
  <li>Time translations swaps them in a circle: $v(1) \mapsto v(0) \mapsto v(-1) \mapsto v(1)$</li>
  <li>
    <p>Boosts act like twists in a way</p>

    <p>Test actions of D,H,B on basis of V…
  Ok.</p>
  </li>
</ul>

<p>Visualization of the basis v(-1), v(0), v(1) of V.</p>

<p><img src="/assets/Finite_gal_1+1_files/Finite_gal_1+1_35_0.png" alt="png" /></p>

<p>We give the matrices for the element of G when they act on the v(-1)..v(1) basis of $\mathcal{V}$.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing that the matrices are correct for V action...
Ok.
</code></pre></div></div>

<p>We can also present V by a basis of eigenvectors H:</p>

<p>Here we give a similar decomposition for V’.
We see that the basis is just given by conjugation of basis for V.</p>
<ul>
  <li>Time translation still shifts the basis vector in the same direction</li>
  <li>Space translations multiplies by $\bar \omega$ (which we write m)</li>
  <li>
    <p>Boosts twists again but in the opposite direction as for V</p>

    <p>Test actions of D,H,B on basis of V’…
  Ok.</p>
  </li>
</ul>

<p>Matrices for the action of G on v’(-1)..v(1).</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Checks that the basis of the irreps is orthonormal...
Ok.
</code></pre></div></div>

<p>Now that we have a basis for the 5 irreps of $\mathcal{F}$, we can make a function that decompose an arbitrary irrep in the xt basis into the irrep basis.</p>

<p>We create an observation of a particle at rest at 0.
We also compute its decomposition, we observe:</p>
<ul>
  <li>A total non-null “mass” on <code class="language-plaintext highlighter-rouge">u(0)</code></li>
  <li>Constant center-of-mass evolution on both V and V’</li>
</ul>

<p><img src="Finite_gal_1%2B1_files/Finite_gal_1%2B1_50_0.png" alt="png" /></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing that decomposing and recomposing are inverse operations...
Ok.
</code></pre></div></div>

<h3 id="24-interpretation-of-the-decomposition">2.4 Interpretation of the Decomposition</h3>

<p>Here we give an interpretation of the basis vectors, for $o$ a real-valued observation.
For example, we can suppose that $o(x,t)$ represents the mass measured at position x and time t.</p>
<ul>
  <li>The component on u(0) is given by ${1 \over 9} \sum_{i,j} o(i,j)$.<br />
  It can be interpreted as the total mass of the observation.
  It is an invariant of the observation.</li>
  <li>The components on u(1) and u(-1) are conjugates =&gt; we have 
  $\overline{\langle o | u(-1)\rangle} = \langle o | u(1) \rangle$
    <ul>
      <li>An explicit formula for the component on u(1):
  $\langle o | u(1) \rangle= {1 \over 9} \sum_{i,j \in [-1,0,1]} o(i,j)\omega^i$</li>
    </ul>
  </li>
  <li>The condition “component on u(1) is null” is equivalent to the condition “mass is conserved in time”.<br />
  Since we will often consider observations of mass evolving according to the law of classical mechanics, in which mass is conserved, we will often use this result.</li>
  <li>The coefficent on $v(i)$ is the conjugate of the one on $v’(i)$</li>
  <li>The coefficient of the irrep $\mathcal{V}$ can be interpreted as the trajectory of the center of mass.<br />
  The coefficient at time i is given by: $\langle o | v(i) \rangle= {\sqrt{3} \over 9} \left [ o(i,-1) \omega^{-1} + o(i,0) + o(i,1) \omega \right ]$<br />
  We can interpret this formula by putting particles of mass o(-1), 0(0), 0(1), respectively at positions $\omega^{-1}$, 1, $\omega$ on the unit circle, and averaging to get the center of mass.
  Since the action of D “wraps around” the space axis back to itself, it makes sense to consider the space axis as a circle rather than as a line.</li>
</ul>

<h2 id="3-harmonic-analysis">3. Harmonic Analysis</h2>

<p>The formula for the Fourier transform that I have, uses functions defined on the group G itself.
Our observations are defined on the space time torus… but we can extend them to a function on the whole of G.
If f is an observation, we define its extension $f’$ by:
$f’: g \mapsto (g \cdot f)(0,0)$</p>

<p>We can compute f back from f’ using the formula: $f(x,t) = f’(D^{x}H^{t})$</p>

<p>Letting $\rho$ denote an irrep and g an element of G.
The formula for Fourier inversion are given by:</p>
<ul>
  <li>$\hat{f’}(\rho) = \sum_g f’(g) \rho(g)$</li>
  <li>$f’(g)={1 \over G} \sum_{\rho} \dim V_{\rho} \mathrm{tr}(\rho(g^{-1}) \cdot \hat{f’}(\rho))$</li>
</ul>

<p>So we get the following equations for f:</p>
<ul>
  <li>$\hat{f}(\rho) = \sum_g (g \cdot f)(0,0) \rho(g)$</li>
  <li>$f(x,t) = {1 \over G} \sum_{\rho} \dim V_{\rho} \mathrm{tr}(\rho(D^{-x}H^{-t}) \cdot \hat f(\rho))$</li>
</ul>

<h3 id="31-definition">3.1 Definition</h3>

<p>In order to help debugging, we notice through a simple computation that the Fourier components on V and V’ are conjugates to each other when the input is real.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing that V and V' comp. are conjugates for real obs...
Ok.
</code></pre></div></div>

<p>Proof of the Fourier inversion formula, see this 
<a href="https://math.stackexchange.com/questions/3258833/fourier-inversion-theorem-and-plancherels-identity-in-the-context-of-representa">math.stackexchange question</a>
for more details.</p>

<p>We have:<br />
\({1 \over G} \sum_{\rho} \dim V_{\rho} \mathrm{tr}(\rho(g^{-1}) \cdot \hat{f'}(\rho)) \\
= {1 \over G} \sum_{\rho} \sum_h \mathrm{tr}(\rho(e)) \mathrm{tr}(\rho(g^{-1}h)) f(h) \\
= \sum_h \left [ {1 \over G} \sum_{\rho} \overline{\mathrm{tr}(\rho(e))} \mathrm{tr}(\rho(g^{-1}h)) \right ] f(h) \\
= f(g)\)</p>

<p>Where the first equality is given by the Fourier transform formula and the last one by the orthogonality of characters.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing that Fourier and Fourier inv are inverses...
Ok.
</code></pre></div></div>

<p>We can explicit the construction of f’ from f, using the action of the group on events (x,t), as defined in <code class="language-plaintext highlighter-rouge">Galilean1p1.act_event</code>.
We have:<br />
\(f'(g) = (g \cdot f)(0,0) = f(g^{-1} \cdot (0,0))\)
Writing $g = D^xH^tB^v$ we get:
\(f'(D^xH^tB^v) = f(x+tv,t)\)</p>

<h3 id="32-interpretation-of-the-fourier-coefficients">3.2 Interpretation of the Fourier Coefficients</h3>

<p>Let’s start with computing the Fourier transform for a random obs.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Original observation
[[1.65 1.03 0.6 ]
 [1.5  1.76 1.18]
 [0.89 1.62 0.82]]
U comp
[[ 0.    0.    0.  ]
 [ 2.79  5.21 12.16]
 [ 0.    0.    0.  ]]
V comp
[[ 0.   -0.   -0.  ]
 [ 4.4   1.41  5.05]
 [-0.    0.    0.  ]]
[[ 0.    0.    0.  ]
 [-7.44 10.28  2.05]
 [ 0.   -0.    0.  ]]
Rank of V comp: 1
</code></pre></div></div>

<p><strong>Interpretation of Fourier Coefficients</strong>: The Fourier coefficients corresponds to the observation’s decomposition in an orthogonal basis made from the irreducible representations basis vectors.
Let O be an observation.
The components of $\hat O$ are given by:</p>
<ul>
  <li>$\hat O (\mathcal{U}(s,0)) = 27 \langle O, u(-s,0) \rangle$</li>
  <li>$\hat O (\mathcal{V}) = 9 \sqrt{3} \begin{pmatrix}
  0 &amp; 0 &amp; 0 <br />
  \langle O, v’(-1) \rangle &amp; \langle O, v’(0) \rangle &amp; \langle O, v’(1) \rangle <br />
  0 &amp; 0 &amp; 0
  \end{pmatrix}$</li>
  <li>$\hat O (\mathcal{V’}) = 9 \sqrt{3} \begin{pmatrix}
  0 &amp; 0 &amp; 0 <br />
  \langle O, v(-1) \rangle &amp; \langle O, v(0) \rangle &amp; \langle O, v(1) \rangle <br />
  0 &amp; 0 &amp; 0
  \end{pmatrix}$</li>
</ul>

<p>This means that the Fourier decomposition does not bring more information than the irreducible decomposition.
Indeed, we can read the components of the irreducible decomposition of $O$ in its Fourier transform.
Do note that the Fourier component of $\mathcal{U}(1,0)$ is proportional to the irreducible component on $\mathcal{U}(-1,0)$ (note the minus sign).
In the same vein, the Fourier component on $\mathcal{V}$ has to be read from the irreducible component on $\mathcal{V’}$.</p>

<p>In the end, we can give the same physical interpretation to the Fourier components as we did for the irreducible components, since they are equal up to swapping and a multiplicative factor.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Test of the formula above...
Ok.
</code></pre></div></div>

<h3 id="33-interpretation-of-the-product">3.3 Interpretation of the Product</h3>

<p>The operation of convolution is closely linked to Fourier analysis.
For finite groups, the convolution is given by:
\(\phi \star \psi (g) = \sum_{h\in G} \phi(h)\psi(h^{-1}g)\)</p>

<p>Let $O,P$ be two obervations, we can define the convolution $O’ \star P’$ and pull it back to obtain an observation $O \star P$:
\(O \star P (x,t) = \sum_{h\in G} (h \cdot O)(0,0) \times (h^{-1}D^xH^t \cdot P)(0,0)\)</p>

<p>Which we can rewrite as:
\(O \star P (x,t) = \sum_{y,s,a\in [-1,0,1]^3} O(y+sa,s) P(x-y,t-s)\)</p>

<p>This formula is implemented in the function <code class="language-plaintext highlighter-rouge">conv</code> below.</p>

<p>For fun, we try convolving the observation of a particle at rest (mass of 1 at x=0 for all t, 0 everywhere else).
We observe that the convolution spreads the observation until the observation looks uniform.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing convergence to uniform observation...
Ok.
</code></pre></div></div>

<p>The Fourier transform exhibits the ring-isomorphism between the group ring $\mathbb{C}G$ (with multiplication given by convolution) and a direct product of matrix rings.</p>

<p>In our case, the Fourier ring is a direct product of:</p>
<ul>
  <li>The $\mathcal{U}$ Fourier component, isomorphic to $\mathbb{C}^3$</li>
  <li>The $\mathcal{V}$ Fourier component, this matrix ring is made of all matrices of this type:
\(\begin{pmatrix}
0 &amp; 0 &amp; 0 \\
a &amp; b &amp; c \\
0 &amp; 0 &amp; 0
\end{pmatrix}\)</li>
  <li>The $\mathcal{V’}$ Fourier component, which is isomorphic to the previous one.</li>
</ul>

<p>The Fourier isomorphism is given by the convolution product formula:
\(\widehat{O \star P} = \hat O \times \hat P\)</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing the Fourier product formula...
Ok.
</code></pre></div></div>

<p>The product formula helps give further intuition behind the convolution operator, giving it a filter meaning.</p>

<p>To help understand this, let’s focus on an example, convolution by $v(0)$.
Since this observation only has non-zero Fourier coefficients on $\mathcal{V’}$, the result of the convolution $v(0) \star O$ for any observation O, will also have null zero-coefficients everywhere but on $\mathcal{V’}$.
This corresponds to an observation that only have an irred. component on $\mathcal{V}$.
In that sense, the operation $v(0) \star _$ projects an observation down to the $v(0)$ component.</p>

<p>We can do the same for any other irrep. basis vector!</p>

<h2 id="4-real-representations">4. Real Representations</h2>

<p>We have a decompositions into irreps over $\mathbb{C}$:
\(\mathcal{F} = \mathcal{U}_{-1,0} \oplus \mathcal{U}_{0,0} \oplus \mathcal{U}_{1,0} \oplus \mathcal{V} \oplus \mathcal{V'}\)</p>

<p>We have $\mathcal{F}<em>\mathbb{R}$ the space of real valued observations and $\mathcal{F}</em>\mathbb{R} \otimes \mathbb{C} = \mathcal{F}$
$\mathcal{F}<em>\mathbb{R} \otimes \mathbb{C} = \mathcal{U}</em>{-1,0} \oplus \mathcal{U}<em>{0,0} \oplus \mathcal{U}</em>{1,0} \oplus \mathcal{V} \oplus \mathcal{V’}$</p>

<p>$\mathcal{F}<em>\mathbb{R} \otimes \mathbb{C} = \mathcal{U}</em>{0,0} \oplus (\mathcal{U}<em>{-1,0} \oplus \mathcal{U}</em>{1,0}) \oplus (\mathcal{V} \oplus \mathcal{V’})$</p>

<p>We use the following definition from “A First Course in Representation Theory”.</p>

<p><strong>Definition</strong> Let V be a complex representation.
We call V <em>real</em>, if there is $V_0$ a representation on a real vector space,
such that $V = V_0 \oplus \mathbb{C}$.</p>

<p><strong>Properties</strong></p>
<ul>
  <li>
    <p>If $V_0$ is irreducible over $\mathbb{R}$, then $V$ is either irreducible over $\mathbb{C}$ or the direct sum of two irreducible and conjugate representations.</p>
  </li>
  <li>$\Re(\mathcal{U_{0,0}}) = \mathbb{R} \cdot \begin{pmatrix} 1 &amp; 1 &amp; 1 \ 1 &amp; 1 &amp; 1 \ 1 &amp; 1 &amp; 1 \end{pmatrix}$</li>
  <li>$\Re(\mathcal{U}<em>{-1,0} \oplus \mathcal{U}</em>{1,0}) = 
\mathbb{R} \cdot \begin{pmatrix} -1/2 &amp; -1/2 &amp; -1/2 \ 1 &amp; 1 &amp; 1 \ -1/2 &amp; -1/2 &amp; -1/2\end{pmatrix} + 
\mathbb{R} \cdot \begin{pmatrix} \sqrt{3}\over2 &amp; \sqrt{3}\over2 &amp; \sqrt{3}\over2 \ 1 &amp; 1 &amp; 1 \ \sqrt{3}\over2 &amp; \sqrt{3}\over2 &amp; \sqrt{3}\over2 \end{pmatrix}
$</li>
  <li>$\Re(\mathcal{V} \oplus \mathcal{V’}) = 
\mathbb{R} \cdot \begin{pmatrix} 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \ -1/2 &amp; 1 &amp; -1/2\end{pmatrix} +
\mathbb{R} \cdot \begin{pmatrix} 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \ -\sqrt{3}\over2 &amp; 0 &amp; \sqrt{3}\over2\end{pmatrix} + <br />
\mathbb{R} \cdot \begin{pmatrix} 0 &amp; 0 &amp; 0 \ -1/2 &amp; 1 &amp; -1/2 \ 0 &amp; 0 &amp; 0 \end{pmatrix} +
\mathbb{R} \cdot \begin{pmatrix} 0 &amp; 0 &amp; 0 \ -\sqrt{3}\over2 &amp; 0 &amp; \sqrt{3}\over2 \ 0 &amp; 0 &amp; 0\end{pmatrix} + <br />
\mathbb{R} \cdot \begin{pmatrix} -1/2 &amp; 1 &amp; -1/2 \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix} +
\mathbb{R} \cdot \begin{pmatrix} -\sqrt{3}\over2 &amp; 0 &amp; \sqrt{3}\over2 \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$</li>
</ul>

<p>For the irreducible (real) representations of the type $V_0 \otimes \mathbb{C} = W \oplus \overline W$, if we have a basis $e_1, …, e_n$ for W, then we can denote $e_1, .., e_n, \overline{e_1}, …, \overline{e_n}$ a basis for the direct sum.</p>

<p>Since the matrices of the actions for any $g\in G$ for $W$ and $\overline W$ are conjugate, we can check by direct computation that in the basis $e_1+\overline e_1, …, e_n+\overline e_n, i\overline e_1 - ie_1, …, i\overline e_n - ie_n$, this matrix has only real entries.</p>

<p>In turn this gives the real representation we were looking for!
Below, we give a function to compute the matrices for any g.</p>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="group theory" /><category term="mathematics" /><category term="galilean group" /><summary type="html"><![CDATA[Finite Galilean Group in 1+1 dimensions]]></summary></entry><entry><title type="html">Galilean 1+1 Notebook</title><link href="spacetime-appreciation.blog/mathematics/2022/09/15/galilean-1p1-notebook.html" rel="alternate" type="text/html" title="Galilean 1+1 Notebook" /><published>2022-09-15T11:50:47-05:00</published><updated>2022-09-15T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/2022/09/15/galilean-1p1-notebook</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/2022/09/15/galilean-1p1-notebook.html"><![CDATA[<h1 id="galilean-group-in-11-dimensions">Galilean Group in 1+1 dimensions</h1>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>         _
     __ ( }
   '---. _`---,
   ___/ /
 /,---'\\
       //
      '== _Art by Joan Stark_
</code></pre></div></div>

<p><strong>Table of Contents:</strong></p>
<ol>
  <li>Key Properties and Intuition</li>
  <li>Definition</li>
  <li>Famous Actions
    <ol>
      <li>Action on (x,t) events</li>
      <li>Isomorphism with Heisenberg Group</li>
    </ol>
  </li>
</ol>

<h2 id="1-key-properties-and-intuition">1. Key Properties and Intuition</h2>

<p>The 1+1 Galilean group is chiefly defined by its generators and relations.
The generators correspond to movement you can do in that spacetime, they are:</p>
<ol>
  <li>Space translations: D (lie generator), $g(x,0,0)$</li>
  <li>Time transaltions: H (lie generator), $g(0,s,0)$</li>
  <li>Boosts: B (lie generator), $g(0,0,s)$</li>
</ol>

<p>Those generators verify:</p>

\[[D,H] = e \\
[B,D] = e \\
[B,H] = D^{-1}\]

<p>We’re first going to give some illustrations and intuition behind those relations.</p>

<h3 id="11-moving-and-waiting-dhe">1.1 Moving and Waiting $[D,H]=e$</h3>

<p>Here we notice the fact that moving then waiting gets us to the same spot as waiting then moving!</p>

<p>The animation below shows the reasoning behind the equation $DH=HD$ which we can reformulate as $[D,H]=e$</p>

<video src="/assets/galilean_1p1/MoveAndWait.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
      Your browser does not support the <code>video</code> element.
    </video>

<h3 id="12-moving-and-boosting-bde">1.2 Moving and Boosting $[B,D]=e$</h3>

<p>Moving then accelerating is the same as accelerating then moving.</p>

<p>The animation below demonstrates the equality $$</p>

<video src="/assets/galilean_1p1/MoveAndBoost.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
      Your browser does not support the <code>video</code> element.
    </video>

<h3 id="13-boosting-and-waiting-bh--d-1">1.3. Boosting and Waiting $[B,H] = D^{-1}$</h3>

<p>Accelerating then waiting gets you further away than waiting then accelerating.</p>

<p>Below we can see a proof that $HB=DBH$.
Equivalently, we can rephrase it as: $BHB^{-1} = D^{-1}H$ or \([B,H] = D^{-1}\)</p>

<video src="/assets/galilean_1p1/WaitAndBoost.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
      Your browser does not support the <code>video</code> element.
    </video>

<h2 id="2-definition-of-the-galilean-group">2. Definition of the Galilean Group</h2>

<p>Now we turn to giving an explicit construction of the group.</p>

<p>We consider a point particle moving on a line.
Its coordinates can be described with 3 numbers (x,t,v), where:</p>
<ul>
  <li>x is the position on the line</li>
  <li>t is the time of the observation</li>
  <li>v is the current speed</li>
</ul>

<p>We introduce the following 3 operators:</p>
<ul>
  <li>D moves the particle observation to the right by one unit:<br />
 $d \cdot (x,t,v) \mapsto (x+1,t,v)$</li>
  <li>H moves the particle observation one unit in time.<br />
 $h \cdot (x,t,v) \mapsto (x+v, t+1, v)$</li>
  <li>B accelerates the particle by one unit:<br />
 $b \cdot (x,t,v) \mapsto (x,t,v+1)$</li>
</ul>

<p>Considering now a random element $d^yh^sb^a \in \mathcal{Gal}(1+1)$.
 We can define its action by extending the relations given above:
 \(d^yh^sb^a \cdot (x,t,v) = (x+y+s(v+a),t+s,v+a)\)</p>

<p>In the method <code class="language-plaintext highlighter-rouge">Galilean1p1.act_point</code> below, we rewrite this equation as a function that takes as input 2 tuples of 3 elements: (y,s,a) et (x,t,v).</p>

<p>Considering now two random elements: $d^yh^sb^a, d^zh^rb^w \in \mathcal{Gal}(1+1)$,
 we can compute the “double action”: 
 \(d^zh^rb^w \cdot (d^yh^sb^a \cdot (x,t,v)) = (x+y+z+r(v+a+w)+s(v+a),t+s+r, v+a+w)\)
 We have:
 \(d^zh^rb^w \cdot (d^yh^sb^a \cdot (x,t,v)) = d^{y+z-sw}h^{s+r}b^{a+w} \cdot (x,t,v)\)
 And so we define:
 \(d^zh^rb^w \times d^yh^sb^a = d^{y+z-sw}h^{s+r}b^{a+w}\)
 In order to get the relation:
 \((d^zh^rb^w \times d^yh^sb^a) \cdot (x,t,v) = d^zh^rb^w \cdot (d^yh^sb^a \cdot (x,t,v))\)
 This multiplication is defined in the method <code class="language-plaintext highlighter-rouge">Galilean1p1.__mul__</code>.</p>

<p>First we verify that the <code class="language-plaintext highlighter-rouge">*</code> operation verifies all the group axioms:</p>
<ol>
  <li>$(0,0,0)$ is an identity</li>
  <li>Existence of inverses</li>
  <li>
    <p>Associativity</p>

    <p>Testing identity…
 Ok.
 Testing inverses…
 Ok.
 Testing associativity…
 Ok.</p>
  </li>
</ol>

<p>🏆 Now we check that it verifies the commutation relationships, which proves that it is indeed our Galilean group!</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing commutation relationships...
Ok.
</code></pre></div></div>

<p>Here we check that the group action axioms are respected, makes sense that they work out since they are what we used to build the group operation to begin with.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing group action axioms...
Ok.
</code></pre></div></div>

<p>Here we check that the action behaves as we expect intuitively!</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing group action sanity...
Ok.
</code></pre></div></div>

<h2 id="2-famous-group-actions">2. Famous Group Actions</h2>

<h3 id="21-action-on-xt-events">2.1 Action on (x,t) events</h3>

<ul>
  <li>D . (x,t) = (x-1,t)</li>
  <li>H . (x,t) = (x,t-1)</li>
  <li>
    <p>B . (x,t) = (x-t,t)</p>

    <p>Testing group action axioms…
  Ok.</p>
  </li>
</ul>

<h3 id="22-isomorphism-with-the-heisenberg-group">2.2 Isomorphism with the Heisenberg Group</h3>

<p>We can use this group action to give a representation $\rho : \mathcal{Gal} \rightarrow \mathrm{GL}(3)$.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing group representation axioms...
Ok.
</code></pre></div></div>

<p>The representation is such that $g \cdot (x,t) = \rho(g) \begin{pmatrix} x \ t \ 1 \end{pmatrix}$</p>

<p>We check this formula below.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing group action axioms...
Ok.
</code></pre></div></div>

<p>We can give an explicit formula for the group representation:</p>

\[\rho(D^xH^tB^v) = \begin{pmatrix}
1 &amp;&amp; -v &amp;&amp; -x \\
0 &amp;&amp; 1 &amp;&amp; -t \\
0 &amp;&amp; 0 &amp;&amp; 1
\end{pmatrix}\]

<p>This shows that $\mathcal{Gal}(1+1)$ is isomorphic to the <em>Heisenberg group</em>.</p>

<h3 id="23-action-on-solutions-of-schrödingers-equation">2.3 Action On Solutions of Schrödinger’s Equation</h3>

<h4 id="231-definition-and-physical-interpretation">2.3.1 Definition and Physical Interpretation</h4>

<p>Here we consider solutions $\phi$ of the free Schrödinger’s equation in 1+1 spacetime:
\(i{\delta \phi \over \delta t} = -{1 \over 2}{\delta^2 \phi \over \delta x^2}\)</p>

<p>We have an action of $\mathcal{Gal}(1+1)$ on functions $\mathbb{R}^2 \rightarrow \mathbb{C}$ given by: $(g \cdot \phi)(x,t) = \phi(g^{-1} \cdot (x,t))$.</p>

<p>Expanding this formula for the generators:</p>
<ul>
  <li>$\exp(yD) \cdot \phi (x,t) = \phi(x+y,t)$</li>
  <li>$\exp(sH) \cdot \phi (x,t) = \phi(x,t+s)$</li>
  <li>$\exp(vB) \cdot \phi (x,t) = \phi(x+t,t)$</li>
</ul>

<p>However, we can see that this action does not leave the free Schrödinger’s equation invariant.
Letting $\phi’ = \exp(vB) \cdot \phi$, we obtain that $\phi’$ is solution to:
$i{\delta \phi’ \over \delta t} = iv{\delta \phi’ \over \delta t} - {\delta^2 \phi’ \over \delta x^2}$</p>

<p>Instead we modify the above action for B, replacing it by:</p>
<ul>
  <li>$(\exp(vB) \cdot \phi)(x,t) = e^{i(vx-j{v^2t \over 2})}\phi(x+vt, t) = \phi’(x,t)$</li>
</ul>

<p>Note that this action gives the same result as the previous one <em>up to a phase factor</em>.
This is very important because two wave-functions which differ only from a phase factor are <strong>physically identical</strong>, i.e. they represent the same thing practical situation.</p>

<p>The action is taken a 2016 
<a href="https://lbt.usal.es/wp-content/uploads/2016/06/PAPER.pdf">article</a>:</p>
<blockquote>
  <p>Cerveró, Jose M. and Pablo P Polo. “The one dimensional Schrödinger equation: symmetries, solutions and Feynman propagators.” European Journal of Physics 37 (2016): 055401.</p>
</blockquote>

<p>We have:</p>
<ul>
  <li>$ {\delta \phi’ \over \delta t} = -i{v^2 \over 2}e^{-i(vx+{v^2t \over 2})}\phi(x+vt, t) + v e^{-i(vx+{v^2t \over 2})} {\delta\phi\over \delta x}(x+vt, t) + e^{-i(vx+{v^2t \over 2})}{\delta\phi\over\delta t}(x+vt, t)$</li>
  <li>$ {\delta \phi’ \over \delta x} = -ive^{-i(vx+{v^2t \over 2})}\phi(x+vt, t) + e^{-i(vx+{v^2t \over 2})}{\delta\phi\over\delta x}(x+vt, t)$</li>
  <li>$ {\delta^2 \phi’ \over \delta x^2} = -v^2 e^{-i(vx+{v^2t \over 2})}\phi(x+vt, t) - 2ive^{-i(vx+{v^2t \over 2})}{\delta\phi\over\delta x}(x+vt, t) + e^{-i(vx+{v^2t \over 2})}{\delta^2\phi\over\delta x^2}(x+vt, t)$</li>
</ul>

<p>Using the expressions for the derivatives above, we have: $i{\delta\phi’\over\delta t} + {1\over2}{\delta^2\phi’\over\delta x^2} = … = 0$</p>

<p>And so $\phi’$ verifies the free Schrodinger’s equation too!</p>

<p>However there is an issue!<br />
We have $e^{yD} \cdot (e^{aB} \cdot \phi) = e^{-i(v(x+y)+{v^2t\over2})}\phi(x+y+at,t)$ with $e^{aB} \cdot (e^{yD} \cdot \phi) = e^{-i(vx+{v^2t\over2})}\phi(x+y+at,t)$</p>

<p>These two expressions are not equal for $y\neq0$, but $e^{aB}e^{yD}=e^{yD}e^{aB}$ because D commutes with everyone.
This means that our action is <strong>not valid</strong> as a $\mathcal{Gal}(1+1)$ action.
However, it is possible to make it work, by introducing a new parameter that commutes with every other, this is called a central extension.
There is a suitable central extension that make this action work.</p>

<p><strong>TODO(Manu)</strong>: Explicit this</p>

<h4 id="232-computation-i-might-need-later">2.3.2 Computation I might need later</h4>

<ul>
  <li>$(e^{yD}e^{sH}e^{vB}\cdot\phi)(x,t) = e^{i\xi_v(x+y,t+s)}\phi(x+y+vt+vs, t+s)$</li>
  <li>$(e^{zD}e^{rH}e^{aB}\cdot (e^{yD}e^{sH}e^{vB}\cdot\phi))(x,t) = <br />
e^{i\xi_a(x+z,t+r)}e^{i\xi_v(x+y+z+a(t+r), t+s+r)}\phi(x+z+y+(t+r)(a+v)+vs, t+s+r)$</li>
  <li>$e^{zD}e^{rH}e^{aB}\times e^{yD}e^{sH}e^{vB} = e^{(z+y-sa)D}e^{(r+s)H}e^{v+a}$</li>
  <li>$e^{(z+y-sa)D}e^{(r+s)H}e^{(v+a)B} \cdot \phi (x,t) = e^{i\xi_{v+a}(x+z+y-sa, t+r+s)}\phi(x+z+y-sa+(v+a)t+(v+a)(r+s), t+r+s)$</li>
  <li>$\xi_{v+a}(x+z+y-sa, t+r+s) = \xi_a(x+z,t+r) + \xi_v(x+y+z+a(t+r), t+s+r)$</li>
</ul>

<p>This gives:</p>
<ul>
  <li>$\xi_0(x,t)=0$</li>
</ul>

<h3 id="24-action-on-particles-trajectories">2.4 Action on Particle’s Trajectories</h3>

<h4 id="241-general-setting">2.4.1 General Setting</h4>

<p>The bread and butter of beginner’s classical mechanics is the trajectory of a single particle, modeled as a function $f: \mathbb{R} \rightarrow \mathbb{R}$, since we are still restricting ourselves in 1 dimension of space.</p>

<p>The first $\mathbb{R}$ is time and the second is space, so that $f(t)$ gives the position of the particle at time t.</p>

<p>We define an action via the following:</p>
<ul>
  <li>$(e^{xD} \cdot f)(t) = f(t) - x$</li>
  <li>$(e^{sH} \cdot f)(t) = f(t+s)$</li>
  <li>$(e^{vB} \cdot f)(t) = f(t)-vt$</li>
</ul>

<p>Which gives for a generic element:
\(e^{xD}e^{sH}e^{vB} \cdot f (t) = f(t+s)-vt-vs-x\)</p>

<p>We can check via direct computation that it makes a valid action.</p>

<p>We can compute the best linear approximation to each of the generators, which gives us:</p>
<ul>
  <li>$D(t) = -1$</li>
  <li>$H(t) = {df\over dt}(t)$</li>
  <li>$B(t) = -t$</li>
</ul>

<p>We can interpret them as, the unit of space (1 meter), the speed, and time respectively.
It’s probably possible to verify the commutation relationships using a lie bracket, but I’m not sure how to define it here, since it is an infinite-dimensional action.</p>

<h4 id="242-restriction-of-the-action-to-uniform-speed-particles">2.4.2 Restriction of the Action to Uniform Speed Particles</h4>

<p>The particles moving at constant speed have trajectories of the form $f(t)=at+b$.
We can represent such a particle as a vector $\begin{pmatrix} b \ a \ 1 \end{pmatrix}$.</p>

<p>The action defined above gives:</p>

\[e^{xD}e^{sH}e^{vB} \cdot \begin{pmatrix} b \\ a \\ 1 \end{pmatrix} = 
\begin{pmatrix} b+s(a-v)-x \\ a-v \\ 1 \end{pmatrix}\]

<p>And so</p>

\[e^{xD}e^{sH}e^{vB} \mapsto \begin{pmatrix} 1 &amp; s &amp; -vs-x\\ 0 &amp; 1 &amp; -v\\ 0 &amp; 0 &amp; 1 \end{pmatrix}\]

<p>This formula is implemented in <code class="language-plaintext highlighter-rouge">Galilean1p1.mat_linear_motion</code>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Testing action axioms...
Ok.
</code></pre></div></div>

<p>The infinitesimal generators are:</p>
<ul>
  <li>$D = \begin{pmatrix} 0 &amp; 0 &amp; -1 \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$</li>
  <li>$H = \begin{pmatrix} 0 &amp; 1 &amp; 0 \ 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$</li>
  <li>
    <p>$B = \begin{pmatrix} 0 &amp; 0 &amp; 0 \ 0 &amp; 0 &amp; -1 \ 0 &amp; 0 &amp; 0 \end{pmatrix}$</p>

    <p>Testing infinitesimal commutations…
  Ok.</p>
  </li>
</ul>

<h3 id="25-unique-unitary-representation">2.5 Unique Unitary Representation</h3>

<p>For any $\hbar \in \mathbb{R}$, we have a unitary representation on functions $\mathbb{R} \rightarrow \mathbb{C}$, given by:
\(\left [ \Pi(d^xh^tb^v)\varphi\right ](s) = e^{-i\hbar x}e^{-its}\varphi(s-\hbar v)\)</p>

<h2 id="conclusion">Conclusion</h2>

<p>Although spacetime in 1+1 dimensions is much simpler than our reality, it is useful in demonstrating phenomenon relating to speed and the passing of time.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[NbConvertApp] Converting notebook Galilean 1+1.ipynb to markdown
[NbConvertApp] Writing 12741 bytes to markdown/Galilean 1+1.md
</code></pre></div></div>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="group theory" /><category term="mathematics" /><category term="galilean group" /><summary type="html"><![CDATA[Galilean Group in 1+1 dimensions]]></summary></entry><entry><title type="html">Robot Returns: Space from Sensations</title><link href="spacetime-appreciation.blog/mathematics/2021/11/02/robot-returns.html" rel="alternate" type="text/html" title="Robot Returns: Space from Sensations" /><published>2021-11-02T11:50:47-05:00</published><updated>2021-11-02T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/2021/11/02/robot-returns</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/2021/11/02/robot-returns.html"><![CDATA[<p>In the 
<a href="/mathematics/spirituality/2021/10/17/robot-ina-circle.html">last article</a> 
we started from the outside point of view of what it means for the robot to exist in space, and then transposed it to the interior point of view of the robot.
Here we go the opposite way, start with the raw sensations and the dances and build a space out of it.</p>

<p><a href="/mathematics/spirituality/2021/10/17/robot-ina-circle.html">Last time</a>
the key was a rough modelisation of a simple robot
that uses complex numbers to model the space and complex multiplication to model rotation in that space.
We then showed how we could translate this exterior point of view to an internal point of view
which uses special dances to describe space.</p>

<p class="warning">I will reuse some of the notation from the
<a href="/mathematics/spirituality/2021/10/17/robot-ina-circle.html">previous article</a>.</p>

<p>Here we’ll go the opposite way, we’ll start with the intuitive dances and we’ll see how we can reconstruct a notion of space from that.
We’ll start by showing how we can use 4 special muscular chains 💪 to recreate the points of the world,
having a definition of the outside world that uses only interior perceptions.
Then we’ll use the most natural operation there is on muscular chains: concatenation.
It simply consists in doing 2 muscular chains, one after the other.
We’ll see that we can recover complex multiplication as a “shadow” of concatenation,
and it establishes a surprising link between algebra and movement.
It will also allow us to finish the modelisation and come back to the exterior point of view of the first article.
In the last section, we’ll talk more about the notion of displacement and its algebraic counter-part.</p>

<p>For the whole of this article, we’ll assume the following setup:</p>

<p>Let there be a little robot awareness that can move and touch, with its t, b functions.
Let’s say that the robot only feels 3 distincts muscular sensations, which we’ll denote Z, G, D.
Suppose that it notices that:</p>
<ul>
  <li>(P1) doing [Z] never changes the touch perception</li>
  <li>(P2) doing [G,G,G,G] or [D,D,D,D] never changes the touch perception</li>
  <li>(P3) doing [G, D] or [D, G] never changes the touch perception</li>
  <li>(P4) doing any combination of the above never changes its touch perception</li>
  <li>(P5) at least once, doing [G] changed the touch sensations</li>
  <li>(P6) at least once, doing [G, G] changed the touch sensations</li>
</ul>

<p>We can rewrite these assertions using our new vocabulary:
 P1, P2, P3, P4 say that [Z], [G,G,G,G], [D, D, D, D], [G, D], [D, G] and all composites are null chains.
While P5 and P6 say that [G] and [G, G] are <strong>not</strong> null chains.</p>

<p>Believe it or not, this is enough to rebuild the full outside picture of the robot in its circle.</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--md" src="/assets/robot_returns/monkey_quaternion.gif" />
	</a>
  </div>
  <div class="item__content">

    From sensations to space, let's start the journey.  
  </div>
</div>

<p><a href="https://blogs.scientificamerican.com/roots-of-unity/nothing-is-more-fun-than-a-hypercube-of-monkeys/"><em>Image source</em></a></p>

<h2 id="repetitions-repetitions-repetitions">Repetitions, repetitions, repetitions</h2>

<p>Here we want to start gently, instead of jumping straight into giving properties and proofs,
we’re going to introduce some vocabulary and intuition.
We will talk about the awareness context and the role of repetition in our assumptions.</p>

<p>The first thing I would like to draw your attention to is that we are really talking about a single robot’s awareness.
That is two functions t,b defined like below:</p>

<p><img src="/assets/robot_ina_circle/robot-ina-circle-awareness-eq.png" alt="diagram" /></p>

<p>As a quick way to concretise what it means, here is a sample of a “robot awareness”:</p>

<table>
  <thead>
    <tr>
      <th>time</th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th>7</th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
      <th>12</th>
      <th>…</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>t</td>
      <td>15</td>
      <td>15</td>
      <td>15</td>
      <td>15</td>
      <td>100</td>
      <td>15</td>
      <td>100</td>
      <td>30</td>
      <td>-10</td>
      <td>15</td>
      <td>-10</td>
      <td>15</td>
      <td>-10</td>
      <td>…</td>
    </tr>
    <tr>
      <td>b</td>
      <td>Z</td>
      <td>Z</td>
      <td>Z</td>
      <td>G</td>
      <td>D</td>
      <td>G</td>
      <td>G</td>
      <td>G</td>
      <td>G</td>
      <td>D</td>
      <td>G</td>
      <td>D</td>
      <td>D</td>
      <td>…</td>
    </tr>
  </tbody>
</table>

<p>Quick test, can you spot a few composite chains here? are they null?</p>

<p>We are really tied down to the actual content of these t,b functions.
In particular, the robot is free to do what it wants! 
So for example, the chain [G,G,G] might never appear.
For another robot it might appear, but only once.
For another, it might appear an infinity of times.</p>

<p>This is very different from the exterior point of view.
In the previous article, when we considered the robot from our point of view, with the localisation function,
we could have made sense of the sentence “[G,G,G] is a not null chain” <em>even if a given robot never actually did it</em>.
This is because we could use the function L to simulate what would have happened if the robot did do it.</p>

<p>Remember that the definition of a null chain says that any chains that never changes preceptions when it is done, is null.
According to this definition, any chain that never happens is null.
This is kind of boring, because those are not actually special chains, it’s just that they don’t happen enough to be understood.
Fortunately that is not a big problem to solve, we can just limit our attention to the chains that happen enough.</p>

<p>➡ So first we’re going to give a few definition that allow us to conveniently talk about when and if the chains appear.</p>

<p>A muscular chain $A=[A_1, …, A_k]$ is said to <strong>happen at time n</strong> if
there exists a time n such that: 
$b(n)=A_1,b(n+1)=A_2, …, b(n+k-1)=A_k$.</p>

<p>We’ll note |A|, the <strong>length</strong> of the muscular chain A.</p>

<p>We’ll say that A <strong>produces sensation</strong> $s \in R$ at time $n \in N$ when:</p>
<ul>
  <li>A happens at n</li>
  <li>t(n+|A|) = s</li>
</ul>

<p>Note that this last definition just says that the robot observes s after performing A at n.</p>

<p><strong>Example</strong>: Let’s go back to the sample of robot awareness that we gave above and note that:</p>
<ul>
  <li>The chain [G,D] has length 2</li>
  <li>It occurs at 3, and produces sensation 15 at time 3.</li>
</ul>

<p>💡 Now it is also a good time to introduce a key element of this article: repetitions.
Do note that a key element of the properties P1…P6 are different kinds of repetitions.
A null chain is a <em>loop</em>: after you do it, you feel again the same sensation as when you started.
So there is a first kind of repetition here, a repetition of sensation,
but there is also another kind of repetition lurking behind:
no matter at which time the null chain appears, it works the same.
This second kind of repetition gives structure in time, and allows us to make predictions.</p>

<p>I am drawing your attention to this because I want to emphasize that, apart from properties (P1) … (P6),
we are really taking random functions t,b.
Anything could potentially happen!
For example, property P5 says that [G], at least once, did not loop sensations.
Let’s take a concrete example, let’s say at time n=5 the robot is feeling 15 degrees, and decides to go for muscular sensation G.
That is:<br />
\(t(5) = 15 \\
b(5) = G\)
Now, after that, the robot observes 100 degress, that is $t(6)=100$.
So indeed, at this time, [G] did not loop sensations.</p>

<p>But suppose later, say time n=100, the robot again feels a temperature of 15 degrees, and also goes for [G]:
\(t(100) = 15 \\
b(100) = G\)</p>

<p>Then can we predict that t(101) will give 100?
Nope! None of our assertions can say that.
So although we have a repetition for null chains, we don’t know much about all the other chains.</p>

<p>Well actually, here is something we can say.
Take the muscular chains between time 5 and 100; $[b(5), b(6), …, b(99)]$, and call it M.
Suppose M is composite, then we’ll have $t(101) = 100$! (We’ll prove this later in the article).
So we do have some repetition for arbitrary chains too!
They produce the same sensations change when they are repeated after a composite chain.</p>

<p>That is cool, but you might think that M is rarely a composite chain, so that in practice it doesn’t repeat often.
Surprisingly, we’ll be able to prove that for any chain M, either M is composite, or one of M.[G], M.[D], or M.[G,G] is composite.
So there are A LOT of composite chains, and so there are a lot of repetitions in the robot awareness (t,b).</p>

<p>To conclude on this section, we’ll say that not only there are a lot of repetitions, but those repetitions have a structure.
The exact structure is given by the composition of the generator dances.
There are so much repetitions actually, that we can summarize the robot’s perceptions with a few bits of information: the localization function and the function t’ giving the temperature at each point.
(L, t’) forms the external point of view, it is a summary of the internal point of view, 
once all the repetitions have been taken into account.
You can think of space as the set of all the repetitions in the robots awareness, as well as their structure.</p>

<p>Now we’re ready to go.
We’re going to rebuild step by step the exterior point of view from the robot’s awareness (t, b) and its repetitions described by P1..P6.</p>

<h2 id="space-from-sensations">Space from sensations</h2>

<p>The idea to reconstruct space is to equate space with the set of all the places you can go.
Now you do you find that?
Well you can start with the set of all muscular chains, because they correspond with movements.
That’s a nice start, but there is the issue that many different muscular chains create the same displacement.
For example: both [G, G] and [D, D] gets the robot to the other side of the circle.</p>

<p>What makes [G, G] and [D, D] similar in terms of displacements?
From the exterior point of view it is obvious, GG goes counter-clockwise 180 degrees while DD does the same clockwise,
so they end up in the same location.
But 🤫, that is cheating, the robot doesn’t know about that, it only knows about its special dances,
so we need to find a way to express the relationship between [G,G] and [D,D] using the dances:</p>
<ul>
  <li>[D, D] -&gt; [G, D, D, D] since [G, D] is a generator dance</li>
  <li>[G, D, D, D] -&gt; [G, G, D, D, D, D] here I am again inserting [G, D] but this time just after the existing G.</li>
  <li>[G, G, D, D, D, D] -&gt; [G, G] here we remove the generator dance [D, D, D, D]</li>
</ul>

<p>So we’ve successfully build a connection between [G, G] and [D, D] using a composition of generator dances.
As we’ll see later, this turns out to work all the time.
Everytime two muscular chains produce the same displacement, they can be related by generator dances.
We’ll call that property: ‘equality up to null chains’.</p>

<p><strong>Equality up to null chains</strong> Let B, C be two muscular chains.
We’ll say that B and C are equal up to null chains, and write B ~ C, 
if either:</p>
<ul>
  <li>B is obtained from C by composing with generator dances</li>
  <li>C is obtained from B by composing with generator dances</li>
</ul>

<p>Note that this relationship is symmetric: $B \sim C \iff C \sim B$ and transitive: $B \sim C \text{ and } C \sim M$ implies $B \sim M$.</p>

<p><strong>Exercise:</strong> Are the following chains equal up to null chains?</p>
<ul>
  <li>[G] and [G,G,G,G,G]</li>
  <li>[G] and [D,D,D]</li>
  <li>[G,G,Z,D,G,D,D,D,D] and [D, Z, D]</li>
  <li>[G] and [G,G]</li>
</ul>

<p>I think here we need to stop and think a little bit about this property.
We have defined equality up to null chains purely in terms of algebra of chains,
so it is natural to ask the question: how does it translate intuitively?
Later in the article, when we reach the level of the exterior point of view,
we’ll see that the chains are equal up to null chains when they produce the same displacement.</p>

<p>That is interesting from our exterior point of view,
but what about the robot?
Do chains that are equal up to null chains <em>feel the same</em> in some way?
Indeed that is exactly the case.
Doing two chains that are equal up to null chains produce the same change in sensations (between the start and the end).
And if two chains always produce the same change in sensations they are equal up to nullity.
However, we won’t be able to prove this until the last section.</p>

<p>In the property below, we recover the four spots of our square, using the trick of removing generator dances from muscular chains.</p>

<p><strong>classification of muscular chains up to null chains</strong> Let C be an arbitrary muscular chain, then one and only one of the following holds:</p>
<ul>
  <li>C ~ [Z]</li>
  <li>C ~ [G]</li>
  <li>C ~ [G, G]</li>
  <li>C ~ [G,G,G]</li>
</ul>

<p>That is there are only 4 <strong>reduced</strong> muscular chains up to null chains.</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>The key observation here is that, up to null chains, we can express all muscular chains with only the sensation G.</p>
  <ul>
    <li>[Z] ~ [G, G, G, G]</li>
    <li>[D] ~ [G, G, G]. Indeed, we have $[D] \sim [D, D, G]$ since $[D, G]$ is null.
Adding 2 more [D, G] we get [D] ~ [D, D, D, D, G, G, G] ~ [G, G, G] since [D, D, D, D] is a composite chain.</li>
  </ul>

  <p>Let C be an arbitrary chain, we can use the result above to obtain a chain C’ obtained from C 
by replacing every Z by [G, G, G, G] and every D by [G, G, G].
We have C ~ C’ and C’ is only made up of G’s.
Since [G, G, G, G] is null, we can remove it from C’ as many time as possible.
We obtain a chain C’’~ C,  which is only composed of strictly less than 4 G’s.
If C’’ = [] we have C’’ ~ [Z] because [Z] is a generator dance.
Otherwise, C’’ ~ [G] or C’’ ~ [G, G] or C’’ ~ [G, G, G], and, since C ~ C’’, this proves that C is equal to 1 one the 4 reduced chains – up to null chains.</p>

  <p>Let’s show now that the reduced chain is unique.
We only need to show that none of the 4 reduced muscular chains are equal to each other up to null chains.
Suppose for example that [G] ~ [G, G], then we can replace each G with [G, G] giving: [G] ~ [G, G, G, G] ~ [].
This means that [G] is a composite of generator dances, which implies (by supposition P4) that [G] is null.
This is not possible, since we have supposed in P5 that [G] is not a null chain.
So we can’t have [G] ~ [G, G].</p>

  <p>We can use a similar argument to show that the other reduced chains are pairwise distinct – up to null muscular chains.</p>
</blockquote>

<p>We have made some nice progress already, because we have recovered the 4 positions the robot can live in.
In a sense we now know that the space has 4 spots.
Let’s write W’={[Z], [G], [G,G], [G, G, G]}</p>

<p>🌏 <strong>creation of outter world</strong> We have a function $\pi: \{\text{all muscular chains}\} \rightarrow W’$ that takes any muscular chain to its unique reduced representation in W’.</p>

<p>Note: we have</p>
<ul>
  <li>$A \sim B$ iff $\pi(A) = \pi(B)$</li>
  <li>For any muscular chain A, $\pi(\pi(A)) = A$</li>
  <li>The chain D is a composite of generator dances iff $\pi(D) = [Z]$</li>
</ul>

<p>What can we say about this construction?
Well some of it is kind of intuitive.
By building our space out of [Z], [G], [G, G], [G, G, G],
we effectively identify a point of space with a special movement.
This makes sense, since we can attain each point of space by some movement (ignoring technical issues).</p>

<p>But it is also surprising, in that it blurrs the distinction of what is interior and what is exterior.
We have litteraly defined space, which most people would say is <em>outside</em>, with chains that appear <em>inside</em> the robot.
In this article, we hope the reader is able to reflect on the notion of interior, exterior and that they are not absolute.
In a sense, everything we know appears in our awareness, so that one can say that everything is inside.
Perhaps the reader can also make sense of the blog’s motto: “I do not appear in space, but space appears in I”.</p>

<p>We can already apply this concept to get <em>real benefits</em> in our <em>daily life</em>.
For example, if you are still a kid, and your mom asks you to go play outside,
you can just point her to this article, and explain to her that everything is inside anyway so you might I well stay here.
She might not be convinced at first, but if you explain the algebraic construction with enough patience, she might just leave you alone.</p>

<p>Allright, so now we have our space W’, but we still need to recover how to multiply its elements,
this will be the topic of the next section.</p>

<h2 id="algebra-from-sensations">Algebra from sensations</h2>

<p>If you have two muscular chains 💪 💪, you can do one after the other and get a longer one 🦵:</p>

<p><strong>concatenation of muscular chains</strong> Let A and B be two muscular chains,
 we can concatenate them together to create a longer chain by simply putting all the sensations together.
We’ll note $A \cdot B$ for the concatenation.</p>

<p>Example: $[Z, Z, G] \cdot [G, G, D] = [Z, Z, G, G, G, D]$</p>

<p>In mathematical terms, this equips the muscular chains with a monoid structure.</p>

<p>In casual language, the concatenation of A and B is just the sensation chain you would perceive if you would do A first then B.
It is very natural, and we see that time plays an implicit role in this definition.
Doing A then B is the most basic thing you can do with time.</p>

<p>Our goal now is to use this concatenation operation to induce a multiplication on W’.
Our first step is to show that concatenation is compatible with the relation ~.</p>

<p><strong>concatenation respects equality up to null chains</strong> For any four muscular chains A,B, X, Y, such that A ~ B and X ~ Y.<br />
We have $A \cdot X \sim B \cdot Y$.</p>

<p><strong>Proof</strong>:</p>
<blockquote>
  <p>A ~ B so there is a procedure to transform A into B using only generator dances.
X ~ Y so there is a procedure to transform X into Y using only generator dances.
By applying the first procedure on the left of $A \cdot X$ and the second on the right side of $A \cdot X$,
we obtain a procedure that takes us to $B \cdot Y$, thus $A \cdot X \sim B \cdot Y$.<br />
QED.</p>
</blockquote>

<p><strong>Exercice: all chains are close to null chains</strong> Let A be any muscular chain.
Then one of A, A.[G], A.[G,G], A.[D] is null.</p>

<p><strong>Multiplication in W’</strong> We can use the concatenation to create a multiplication in W’:
Let $g, h \in W’$, we define $g \ast h = \pi(g \cdot h) \in W’$.
This operation is associative: $(g \ast h) \ast k = g \ast (h \ast k)$,
which means we don’t have to worry about where to put the parentheses.</p>

<p>For n in N, we’ll note $g^n = g \ast g … \ast g$ (n times).</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>Let’s show that the operation is associative.
$(g \ast h) \ast k = \pi(\pi(g \cdot h) \cdot k)$<br />
Note that $\pi(g \cdot h) \sim g \cdot h$, so that<br />
$\pi(g \cdot h) \cdot k \sim g \cdot h \cdot k$ and so
$(g \ast h) \ast k = \pi(\pi(g \cdot h) \cdot k) = \pi(g \cdot h \cdot k)$<br />
Using the same type of reasoning we can show that:<br />
$g \ast (h \ast k) = \pi(g\cdot h \cdot k)$<br />
Which proves the statement.</p>
</blockquote>

<p>At this point, our robot has it’s very own multiplication.
Since there are only 4 reduced chains, we can carry out all the possible multiplications,
and put them in a table.</p>

<p><strong>Multiplication table for W’</strong>:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">$\ast$</th>
      <th style="text-align: center">[Z]</th>
      <th style="text-align: center">[G]</th>
      <th style="text-align: center">[G,G]</th>
      <th style="text-align: center">[G,G,G]</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><strong>[Z]</strong></td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G]</strong></td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G,G]</strong></td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G,G,G]</strong></td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
    </tr>
  </tbody>
</table>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>We use chain concatenation and then we simplify using the generator dances.
For example: $[G,G] \ast [G,G] \sim [G,G,G,G] \sim [Z]$.
Which in turns implies $[G,G] \ast [G,G] = [Z]$.</p>

  <p>The other multiplications can be done in the same fashion.</p>
</blockquote>

<p><strong>$\ast$ is commutative:</strong> You can swap the orders of the products:<br />
For all $g,h \in W’$, we have $g \ast h = h \ast g$.</p>

<p><strong>Proof:</strong></p>
<blockquote>
  <p>Done by checking one by one in the table.</p>
</blockquote>

<p>💡 So now we start to have a good understanding of our multiplication in terms of its algebra.
But algebra is never very far from geometry:
in the following diagram we’ll see how the multiplication structure suggests space already.</p>

<p>Let start from [Z] and multiply by [G] again and again.
We get [Z] then [G] then [G,G] then [G,G,G] then… back to [Z].
This looping behavior is pictured below:</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">
    <img class="image image--md" src="/assets/robot_returns/circle-from-chains.svg" />
	</a>
  </div>
  <div class="item__content">

	In this diagram each red arrow represents multiplication by [G].

	We can see how space is starting to emerge from the reduced chains and $\ast$.
  </div>
</div>

<p>As we discussed, but not yet proved, equality up to null chains means that 2 muscular chains 
produce the same displacement.
The operation $\pi$ takes any chain to a single canonical representative chain that performs the same movement.
The question here is what happens to the representative of a concatenation $A.B$?
It turns out that it is $\pi(A) \ast \pi(B)$, which is why we say that $\ast$ is a shadow of concatenation.</p>

<p><strong>concatenation is multiplication up to null chains</strong> Let A and B be two muscular chains, then:
$\pi(A \cdot B) = \pi(A) \ast \pi(B)$</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>$A \cdot B \sim \pi(A) \cdot \pi(B)$<br />
Applying $\pi$ on both sides, we get: 
$\pi(A \cdot B) = \pi(\pi(A) \cdot \pi(B)) = \pi(A) \ast \pi(B)$<br />
QED</p>
</blockquote>

<p>In one sentence: $\pi(A) \ast \pi(B)$ is a reduced movement that performs the same displacement as $A\cdot B$.</p>

<p>At this point we have this cool new multiplication.
Is it really new though?
Have we stumbled on a totally new multiplication that is going to change the face of mathematics forever?
Not really, as it turns out $\ast$ is just complex multiplication, but wearing a disguise.
In order to make it clear, we can put the multiplication table for W and W’ next to each other:</p>

<p><strong>Multiplication table for W’</strong>:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">$\ast$</th>
      <th style="text-align: center">[Z]</th>
      <th style="text-align: center">[G]</th>
      <th style="text-align: center">[G,G]</th>
      <th style="text-align: center">[G,G,G]</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><strong>[Z]</strong></td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G]</strong></td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G,G]</strong></td>
      <td style="text-align: center">[G,G]</td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>[G,G,G]</strong></td>
      <td style="text-align: center">[G,G,G]</td>
      <td style="text-align: center">[Z]</td>
      <td style="text-align: center">[G]</td>
      <td style="text-align: center">[G,G]</td>
    </tr>
  </tbody>
</table>

<p><strong>Multiplication table for W</strong>:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">$\times$</th>
      <th style="text-align: center">1</th>
      <th style="text-align: center">i</th>
      <th style="text-align: center">-1</th>
      <th style="text-align: center">-i</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><strong>1</strong></td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">i</td>
      <td style="text-align: center">-1</td>
      <td style="text-align: center">-i</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>i</strong></td>
      <td style="text-align: center">i</td>
      <td style="text-align: center">-1</td>
      <td style="text-align: center">-i</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>-1</strong></td>
      <td style="text-align: center">-1</td>
      <td style="text-align: center">-i</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">i</td>
    </tr>
    <tr>
      <td style="text-align: center"><strong>-i</strong></td>
      <td style="text-align: center">-i</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">i</td>
      <td style="text-align: center">-1</td>
    </tr>
  </tbody>
</table>

<p>If you look closely at the tables, you will notice that they are pretty much the same.
You can get from one to the other through the substitution [Z] -&gt; 1, [G] -&gt; i, [G, G] -&gt; -1, [G, G, G] -&gt; -i.</p>

<p>In mathematical terms, we would say that W and W’ are isomorphic as groups.</p>

<p>➡ At this point there are a few things to take notes of.
First of all, we have managed to find again the equivalent of W.
Our W’ is not made of complex numbers, but of 4 chains of sensations.
Though the type of the points of W and W’ are completely different,
in both cases there are only 4 of them, and that is what matters in the end.</p>

<p>The space W comes with a multiplication, which is abstract in nature, called complex multiplication.
The space W’ also comes with a multiplication $\ast$, which is a remnant of chain concatenation.
Don’t be fooled that $\ast$ is abstract, it is just a shadow of one of the most basic intuitive operation “doing A then B”.
So both W and W’ have very different multiplication in spirit, yet when we look at their table, it works the same way.</p>

<p>In the end we have succeeded in reconstructing our space.
We have two alternative constructions one by nature abstract, the other by nature concrete,
and they are both equivalent.
What is then the difference between abstract and concrete?</p>

<p>I will argue that the abstract/concrete dichotomy is not really relevant,
and one is better off not looking at things that way.
I suggest instead looking at algebra as a <em>language</em> that allows us to express
things that perhaps, English cannot.</p>

<p>Let’s say that the robot meets another robot like itself,
and wants to share about its experiences. 💬</p>

<p>Well there are two ways it could proceed.
If it knows about its space, it could just tell the other robot about the nice temperature at one point of the space.
For example, it could say “temperature is nice at position [G]”.
If it didn’t know about space, it could tell “starting from [Z], when I do [G], or [D,D,D] or [G,G,D] I feel a nice temperature”.</p>

<p>Of course, it is stupid to say “when I do [G], [D,D,D], [G,G,D] “ because those are muscular chains <em>that always produce the same change in sensations</em> (they are all equal to [G] up to null chains).
Because the other robot is wired the same way, it already knows that, so it is much faster to just say “temperature is nice at [G]”.
The message here is that robot’s sensations are far from random, they are extremely structured,
and so it is possible to talk about them in a more concise fashion by taking advantage of this structure.</p>

<p>This also applies to our human sensations as well.
They are even more structured than the robot’s although the pattern is more complex.
A single sentence in English is able to describe what a given human will feel and see and touch,
without directly talking about muscular chains, because it is not necessary.</p>

<p>As an example, when you say: “I see bread”, you don’t need to precise from which point of view you see it.
Because it is understood that if you can see the bread from one point of view,
you can move about (= perform a muscular chain) and see it in another point of view.
This is true for all humans awarenesses, so we can just skip it altogether, and everybody understands fine.</p>

<p>When we say “I see bread” or even “there is bread” 🍞, the lack of point of view gives it its exterior feeling.
Anyone can see the bread, from any point of view, so it is exterior to me.
But note that the sentence “I see bread” has no meaning if there is not a specific angle from which you actually see it.
And, imagine moving about, and the bread disappearing…
That would not be bread then, maybe an illusion or….?
In any case, IF the bread didn’t behave as expected when I moved about, the sentence “I see bread” would be meaningless.
The exterior point of view in “I see bread” or “there is bread” encompasses both the actual sensation
and the intuitive understanding of how these perceptions change when I move about.
So it is built from the interior point of view too.</p>

<p>Since we build the exterior point of view by cutting out obvious repetitions from the interior point of view,
it could be better to name it the “compressed point of view”.</p>

<p>In any case, we see that English (or other exterior point of view languages like (L, t’) for our robot)
are faster and more convenient to exchange information.</p>

<p>Why then use another language like algebra?
Note that by their construction itself, compressed languages skip the repetitions in our awareness.
They are <em>totally unable to express</em> this huge part of our life:
this repetition pattern that imprints each instant of our awareness, from seconds to years.
Probably the largest scale pattern in our awareness: spacetime.
Why should we not talk about it?
It might be redundant information, but it still exists, and so deserves to be described.</p>

<p>Algebra is able to express the structure of our sensations, it is the language of spacetime.
It is useful for example if you want to understand what happens under a heavy psychedelics,
where the structure of the awareness is going to be affected.
It is also useful if you do a lot of meditation and have a detailed look at your own sensations.</p>

<p>I also believe that it is a good tool if you want to understand who you are.
The idea of you as a person performing “things in the world” is a highly compressed version of
everything that you see and feel every second.
How was this concept built?
English cannot express the answer, but algebra might.</p>

<p>Who built this concept?
No language can express this answer.</p>

<p>English and algebra are two different languages, two different tools.
Depending on the task, it might be wiser to use one or another.
In the end, both languages aim at the fundamental goal of communication:
describe what human see, touch and feel – paint a picture of our sensations.</p>

<p>So I guess algebra can be close to our sensations too…
One has to admit: abstract algebra… is not really abstract.</p>

<p>We’ll need to notice a final property about W’ that’ll come in handy later:</p>

<p><strong>inverses</strong>: For any $g \in W’$, there exists a unique $h \in W’$,
such that $g \ast h = [Z]$.
Furthermore, it also verifies $h \ast g = [Z]$.
We call h the inverse of g, and we note it $g^{-1}$.</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>The proof can easily be done by going through all the elements of W’ and using the multiplication table.
For example, we can read from the table that $[G][G,G,G] = [G,G,G][G] = [Z]$, and that there are no other elements h such that $[G]h=[Z]$.</p>
</blockquote>

<p>In order to conform with standard mathematical practice, we can call [Z] the <strong>identity</strong>.
Mathematicians also have a word for sets like W’, with a single operation, an identity and inverses,
they are called <strong>groups</strong>.</p>

<p>Roughly speaking, group theory is the language of spaces and geometries.
The modern definition of space time (not taking into account general relativity) in physics is a group,
it is called the Poincare group.
Pretty much everything in this blog uses group theory at some level,
so if you learn/know a bit of it, everything will be <em>much less painful</em>.
You won’t need any for this article though (but it will hurt a little).</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--md" src="/assets/robot_returns/insight-overload.jpg" />
	</a>
  </div>
  <div class="item__content">

Every good blogger needs to know when is the good time to stop, in order for the reader to relax a little.
Unfortunately, I totally lack any kind of dosage skills, so I cannot resist giving you <i>more insight</i>.

<br />

Indeed, I showed you how to reconstruct the complex multiplication on 4 numbers from a robot.
But that might not convince a lot of people.
What about the addition of the real numbers, multiplication of all complex numbers, multiplication of matrices?
Can we retrieve these algebraic operations from sensations and movements?


  </div>
</div>

<p>Here I make a very bold assertion, that I cannot prove here (this article is long enough believe me),
that we can recover the algebra of any group from a suitable robot with suitable generator dances.</p>

<p>In particular, we can recover matrix multiplication, addition and multiplication of reals, and a lot of other abstract things.</p>

<p>What happens if we consider our human awareness and our own repetitions, can we get an algebra from our movements?
It turns out that yes, and we get the venerated Galilean group.
A 10 dimensional, infinite group, a cool beast.
The proof of this assertion, and the study of this group, is basically the whole point of this blog.
You can view this whole website as a fanboy blog for the Galilean group.</p>

<p>Anyway that is it for the insight for this section.
The article is far from finished though, and there might be more insight in the next sections (sorry).</p>

<h2 id="external-point-of-view">External point of view</h2>

<p>Now that we have our W’, we can complete our description of the robot from the exterior point of view.
We’ll recreate a localization function L, describe the temperature at all points in the space using t’,
and then check that together they verify relation (1).</p>

<p>All these terms have been defined in the 
<a href="/mathematics/spirituality/2021/10/17/robot-ina-circle.html">previous article</a> 
, do have a look if you need.</p>

<p>Let’s randomly decide that $L(0) = [Z] \in W’$.
At time n, we note $b(n) \in \{Z, G, D\}$ the muscular sensation the robot currently feels.
We write $L(n+1) = L(n) \ast \pi([b(n)])$.
This allows us to define L for all times.</p>

<p><strong>Exercice:</strong> If A is a muscular chains that happens at n, show that:
\(L(n+|A|) = L(n) \ast \pi(A)\)</p>

<p>Now we have to define what our space looks like in term of temperature at every point.</p>

<p>For this, we can select 4 integers $n_Z, n_G, n_{GG}, n_{GGG}$ such that:<br />
\(L(n_Z) = [Z] \\ 
L(n_G) = [G] \\  
L(n_{GG}) = [G,G] \\  
L(n_{GGG}) = [G,G,G]\)</p>

<p>In more casual language, $n_G$ is a time when the robot is at [G].</p>

<p>🙋 Pedantic note: how do we know that those times actually exists?
We don’t actually.
But for 99.999999% of t,b functions they will exist.
For example, if we know the chain [G,G,G,G] happens at least once for a robot, then for sure these integers exist.
I don’t want to get bogged down in technicalities, so let’s just suppose that they do exist (add it as an axiom), and leave it at that.</p>

<p>Reminding ourselves that we note t(n) the temperature that the robot feels at time n,
we can define a function t’: W’ -&gt; R as before using these integers:<br />
\(t'([Z]) = t(n_Z)  \\
t'([G]) = t(n_G)  \\
t'([G,G]) = t(n_{GG})   \\
t'([G,G,G]) = t(n_{GGG})\)</p>

<p>At this point we have all the key ingredients for our exterior description of this robot in its circle.
We just need to verify the condition (1) that is: $t = t` \circ L$.</p>

<p>🏆 <strong>The robot exists in the space W’</strong> The functions we just defined verifies $t = t` \circ L$.</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>Since (1) is equivalent to (2), let’s just prove (2) instead.
Let n, k, such that $b(n) \ast b(n+1) \ast … \ast b(n+k) = [Z]$.
We want to show that t(n) = t(n+k+1).
\(b(n) \ast b(n+1) \ast ... \ast b(n+k) = [Z] \\
\iff \pi(b(n)) \ast \pi(b(n+1)) \ast ... \ast \pi(b(n+k)) = [Z] \\
\iff \pi(b(n) \cdot b(n+1) \cdot ... \cdot b(n+k)) = [Z] \\
\iff   b(n) \cdot b(n+1) \cdot ... \cdot b(n+k) \sim [Z] \\
\iff   b(n) \cdot b(n+1) \cdot ... \cdot b(n+k) \text { is composite} \\
\implies b(n) \cdot b(n+1) \cdot ... \cdot b(n+k) \text{ is null}\) <br />
So $b(n) \cdot b(n+1) \cdot … \cdot b(n+k)$ is null, a.k.a it doesn’t change sensations,
a.k.a. t(n) = t(n+k+1).<br />
QED</p>
</blockquote>

<p>Note in the previous demonstration:
Since all the b(j) are singular sensations, the chain concatenation $b(n) \cdot b(n+1) \cdot … \cdot b(n+k)$ is just  [b(n), …, b(n+k+1)].</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--lg" src="/assets/robot_returns/robot-returns-ina-circle.svg" />
	</a>
  </div>
  <div class="item__content">

That is it, we are back to the outside point of view.  <br />
That was the goal of this article, so I guess, congrats. <br />
Unfortunately for the reader, there is more insight coming...
  </div>
</div>

<p>The main difference is that instead of having a space W made of complex numbers equipped with multiplication,
we have W’ made of 4 muscular chains, equipped with a remnant of chain concatenation.
Both are fully equivalent.
You can think as space as something that is really exterior but can be experienced from the inside.
Or you can think of space as a pattern in awareness built out of generator dances.
There is no difference in the actuality of what space is, it is just a difference in how we express it.</p>

<p>The difference between the exterior and the interior point of view is syntactic.</p>

<p>Perhaps I can add a bit more intuition here.
Something what was perhaps weird in the last article was that muscular sensations
were taking values in W.
Why would muscular sensations have the same nature as points in space?</p>

<p>This is not just an artifact of my very random modelisation of the robot.
This is actually quite common in physics.
You can describe a simple space, for example a line as $R$.
Now movements in that space are also reals, elements of $R$.
This is easily explained if one believes that all spaces are internal at the core.
If you take a look at W’, it’s made of muscular sensations.
And of course movements are also made of muscular sensations.
So it makes sense that movement and space are built of the same thing.
In the end, it is muscular sensations all the way down.</p>

<h2 id="what-is-movement">What is movement?</h2>

<p>This article has been quite heavy with algebra and maybe light on intuition.
We have introduced a formal relation called “equality up to null chains”, and used that as our basis to build the exterior point of view.
Now it is only natural to ask: do chains that are equal up to null chains feels special from the robot point of view ❓
Could the robot have come up with this idea by itself?</p>

<p>Spoiler: chains are equal up to nullity when they produce the same change in sensations.
But before we can prove this result, we need to talk a bit more about movement.</p>

<p>🏃 🏃 🏃 What is our intuition of movement?
Movement is dynamic, and produced by (robotic) muscles, so we can use a muscular chain to describe it.
But at the same time, several muscular chains can produce the same displacement.
So we need to consider a way to tell when two different muscular chains actually represent the
same displacement.</p>

<p>The most straightforward way is to use the exterior point of view to define movement.
Suppose a chain A happens at time n.
The original position is given by $L(n)$, the position after performing the muscular chain is given by $L(n+|A|)=\pi(A)\ast L(n)$.
So $\pi(A)$ represent the change in position that chains A does.
We use this intuition for the next definition:</p>

<p><strong>Exterior definition of displacement</strong>:
Two muscular chains A and B produce the same displacement iff:</p>
<ol>
  <li>They happen at every location</li>
  <li>There exists a unique $g \in W’$ such that<br />
 Whenever A happens at n, $L(n+|A|)=g \ast L(n)$,
 and whenever B happens at n’ $L(n’+|B|)=g \ast L(n’)$</li>
</ol>

<p>This is nice and very clear from the exterior point of view,
but this is not satisfying at all from the point of view of the robot’s awareness.
Let’s try another way to look at it.
We can tell that two muscular chains are alike if doing either of it creates the same change in sensations.
For example, starting from sensation s1, and doing A, the robot feels s2.
Later, starting again from sensation s1 and doing B, the robot also feels s2.
This is something extremely intuitive that even a baby could notice.
Our intuition tells us that if two muscular chains <em>always</em> create the same change in sensation,
then they probably describe the same change in position, the same displacement.</p>

<p>Allright so at this point we have 3 ways to talk about displacement:</p>
<ol>
  <li>(Exterior) muscular chains that produce the same change in positions</li>
  <li>(Interior) muscular chains that always produce the same change in sensations</li>
  <li>(Algebraic) muscular chains that are equal up to null chains</li>
</ol>

<p>In this part we’ll show that they are equivalent.</p>

<p>Let’s start by defining what it means for muscular chains to always create the same change in sensations.
Note that at this stage, there is nothing that guarantees even that 
doing the same chain A twice from s1 should create the same change in sensations.
If you look at what we supposed at the start of this article: (P1)…(P6),
there is nothing that explicitely says that doing the same chain twice should create the same change in sensations.
But as we’re going to see below, sensations do repeat.</p>

<p>🔄 <strong>repetition of sensations</strong>:
Suppose A produces sensations s at n.
Suppose also that A happens again at another time n’ such that the muscular chain between n and n’ is composite.
Then A also produce sensations s at n’.</p>

<p>Note: saying that the muscular chain between n and n’ is composite is equivalent to saying that L(n)=L(n’).
So this property just says that doing the same thing again from the same location will produce the same sensations.</p>

<p><strong>Proof</strong>:</p>
<blockquote>

  <p>Let’s assume n’ &gt; n.
The chain $[b(n), b(n+1), …, b(n’-1)] = M$ is composite by assumption.
Since A happens at n, M must start by A, so that we can write $M = A \cdot M’$.
We have $[Z] = \pi(M) = \pi(A) \ast \pi(M’)$, so that $\pi(M’) = \pi(A)^{-1}$.<br />
The chain that goes from t(n+|A|) to t(n’+|A|) is $M’.A$,
 we have $\pi(M’.A) = \pi(M’)\ast\pi(A) = [Z]$ according to the properties of inverses.
So $M’.A$ is composite, hence null by (P4), so it must loop sensations:
$t(n+|A|) = t(n’+|A|)$<br />
QED</p>
</blockquote>

<p><img src="/assets/robot_returns/diagram-chain-repetition.svg" alt="diagram for the proof" /></p>

<p>Two muscular chains A and B are said to <strong>behave the same</strong> at $g \in W’$</p>
<ul>
  <li>if there exists $t_1, t_2$ such that $L(t_1) = L(t_2) = g$</li>
  <li>if A happens at $t_1$ and B happens at $t_2$</li>
  <li>and if there exist a single sensation s such that A produces s at $t_1$ while B also produces s at $t_2$</li>
</ul>

<p>🙋 Note that there is something a bit bothering here.
In order to show that A and B behave the same at g, we need to find some particular times $t_1$ and $t_2$.
Our definition seems to depend on the particular times where it happens.
We’ll show that it is not the case, that if they happen at two other times then they will also produce the same sensation.</p>

<p>Suppose A and B behave the same at g, then for any time $t_3, t_4$,
such that $L(t_3) = L(t_4) = g$, where A produce s at $t_3$ and B happens at $t_4$.
Then B also produces s at $t_4$.</p>

<p><strong>Proof</strong></p>
<blockquote>

  <p>Since $L(t_3)=L(t_1)=g$, A produces the same sensation s at $t_1$ and at $t_3$ (according to the repetition of sensation lemma).
Since $L(t_4)=L(t_2)=g$, B produces the same sensation s at $t_2$ and at $t_4$.<br />
QED</p>
</blockquote>

<p>We are now equipped to prove the main result of this section,
which shows that the different ways to define movement are equivalent.</p>

<p><strong>muscular chains that produce the same movement</strong>: 
Let A, B be two muscular chains.
The following properties are equivalent:</p>
<ol>
  <li>(Interior) A and B behave the same at all $g \in W’$</li>
  <li>(Algebraic) A~B and both A and B happens at all locations</li>
  <li>(Exterior) A and B happens at all locations and there exists $g \in W’$ such that:  <br />
 Whenever A happens at n, $L(n+|A|)=g \ast L(n)$,<br />
 and whenever B happens at n’ $L(n’+|B|)=g \ast L(n’)$</li>
</ol>

<p>Note: we need to stipulate that A and B happen at all locations because otherwise we might face some issues.
For example, it is possible that A or B never happens <em>at all</em> in a particular robot’s awareness,
in which case of course it is not possible to give meaning to A or B happening at the same location.</p>

<p><strong>Proof:</strong></p>
<blockquote>

  <p>Let’s prove (2) =&gt; (1)<br />
Suppose A ~ B, let $g \in W’$, we’ll show that A and B behave the same at g.
Since both A and B happen at all locations, we can chose $t_1, t_2 \in N$ 
such that A happens at $t_1$, B happens at $t_2$ and $L(t_1) = L(t_2) = g$.
Without loss of generality, we’ll assume $t_1 \leq t_2$.<br />
Let M be the chain from $t_1$ to $t_2$.
Since M has to start by A, we can write $M = A \cdot M_\Delta$
Since $L(t_1) = L(t_2)$, M must be composite so:
$[Z] = \pi(M) = \pi(A \cdot M_\Delta) = \pi(A) \ast \pi(M_\Delta)$ and so
$\pi(M_\Delta) = \pi(A)^{-1}$<br />
Now we have $\pi(M_\Delta \cdot B) = \pi(A)^{-1} \ast \pi(B) = \pi(A)^{-1} \ast \pi(A)$.
The last equality is due to A~B.
So we have $\pi(M_\Delta \cdot B) = [Z]$ and the chain $M_\Delta \cdot B$ is composite, hence null, hence loops sensations.
But this chains goes from the end of A to the end of B, which shows that the sensations are the same at both ends.</p>

  <p>Now we’ll prove (1) =&gt; (2)<br />
let’s suppose that A and B behave the same at all $g \in W’$.
Clearly both A and B happen at all locations, so we just need to show that A ~ B.
Let $g \in W’$, let $t_1, t_2 \in N$ be times when A and B act the same at g.
We have $t’(L(t_1+|A|)) = t’(L(t_2+|A|))$<br />
\(\iff t'(L(t_1)\ast\pi(A)) = t'(L(t_2)\ast\pi(B)) \\
\iff t'(g\ast\pi(A)) = t'(g\ast\pi(B))\)<br />
Here we can use the change of variable $g = h\ast \pi(A)^{-1}$:<br />
\(\iff t'(h) = t'(h \ast pi(A)^{-1}\ast\pi(B))\)</p>
  <ul>
    <li>if $\pi(A)^{-1}\pi(B) = [G]$<br />
  Then we have, for all h: $t’(h) = t’(h\ast[G])$.<br />
  Clearly that implies that [G] is a null chain which is absurd according to our assumptions.</li>
    <li>if $\pi(A)^{-1}\pi(B) = [G,G]$<br />
  Similarly, this would imply that [G,G] is a null chain, which is also absurd.</li>
    <li>if $\pi(A)^{-1}\pi(B) = [G,G,G]$<br />
  This gives $t’(h) = t’(h \ast [G,G,G])$.
  In particular, $t’([Z]) = t’([G,G,G]) = t’([G,G]) = t’([G])$ and so t’ is constant.
  Again this means that [G] is null, which is absurd.</li>
  </ul>

  <p>So we must have $\pi(A)^{-1}\pi(B)=[Z]$, by the unicity of inverses, we must have $\pi(A) = \pi(B)$ and thus
$A \sim B$.</p>

  <p>(2) =&gt; (3)<br />
Since A ~ B, we have $\pi(A) = \pi(B)$.
This in turns implies, forall n where A happens at n, $L(n+|A|) = \pi(A) \ast L(n)$.
The same equation is true for B, and so we have (3).</p>

  <p>(3) =&gt; (2)<br />
Let g such that:<br />
Whenever A happens at n, $L(n+|A|)=g \ast L(n)$,<br />
and whenever B happens at n’ $L(n’+|B|)=g \ast L(n’)$<br />
We have necessarily $\pi(A) = g = \pi(B)$, and so $A \sim B$.<br />
QED.</p>
</blockquote>

<p>What is the point of this computation?
Again this result is best understood in terms of language:</p>

<ol>
  <li>👀 The interior point of view is the most basic: it tells what the robot feels at which points.
 It is the most <em>concrete</em> or sensorial in a way.
 The advantage of this language is that it doesn’t need “big brain”.
 You see, you touch, you observe “same”: that is it.
 However, the drawback is that there is a lot of verbiage in this description.
 You need to show a lot of particular chains to transmit any message (actually an infinity), so it is not efficient.
 This is due to the fact that there are so many repetitions in the robot’s awareness, and that we could “factor them out”.</li>
  <li>🌎 The exterior points of view is the most efficient.
 It tells exactly what is happening in the awareness of the robot in the most concise way possible.
 It does so because it completely abstract out the repetitions from its representation.</li>
  <li>➿ The algebraic point of view is the glue between the two.
 The group theory that rules the algebra of muscular chains and friends (composite, null chains),
 allows one to transfer between the interior and exterior point of view.</li>
</ol>

<p>The interior point of view is the language of raw awareness, 
the exterior point of view is the language of raw awareness without all repetitions,
the algebraic point of view is the language of the repetitions.</p>

<h2 id="conclusion">Conclusion</h2>

<p>This article was a bit painful to write, and I guess a bit painful to read as well.
A lot was said about the nature of space and language, at least for a little robot in a circle. 🤖</p>

<p>The plan of course will be to extend this claims to our human awareness.
In particular, the spacetime appreciation blog will aim to give:</p>

<ol>
  <li>A definition of spacetime from what we human see, touch and feel, based on generator dances.
 These will be dances that you can actually perform, in the comfort of your own home.</li>
  <li>Obtaining the algebra of the Galilean group from the repetitions in our human awareness.
 If you thought the algebra in this article was annoying, wait till you see this one, 
 it is <em>noticably spicier</em> 🌶🌶🌶.</li>
  <li>Presenting group theory as a language instead of an abstract weird thing,
 and using it to answer identity questions.</li>
</ol>

<p>In the end, we hope we can convince the reader that space is not interior or exterior.
Everything happens inside your awareness, and all languages try to describe the content of our awareness in the end.
Our awarenesses have A LOT of repetitions.
When we omit them, we get the exterior point of view.
When we include them, we get the interior point of view.
When we describe the repetitions, we get algebra.</p>

<p>Don’t mistake the tool used to describe reality with reality itself.
There is no inside or outside.
In the end it’s all patterns in your awareness.</p>

<h2 id="references">References</h2>

<ol>
  <li>Cover for the article is taken from <a href="https://blogs.scientificamerican.com/roots-of-unity/nothing-is-more-fun-than-a-hypercube-of-monkeys/">blog.scientificamerican.com</a></li>
</ol>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="space" /><category term="mathematics" /><category term="awareness" /><category term="algebra" /><category term="language" /><summary type="html"><![CDATA[In the last article we started from the outside point of view of what it means for the robot to exist in space, and then transposed it to the interior point of view of the robot. Here we go the opposite way, start with the raw sensations and the dances and build a space out of it.]]></summary></entry><entry><title type="html">1D Spacetime: Living On a Line</title><link href="spacetime-appreciation.blog/mathematics/2021/11/02/1D-spacetime.html" rel="alternate" type="text/html" title="1D Spacetime: Living On a Line" /><published>2021-11-02T11:50:47-05:00</published><updated>2021-11-02T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/2021/11/02/1D-spacetime</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/2021/11/02/1D-spacetime.html"><![CDATA[<p>We explore a simplified version of spacetime with only 1 space dimension.</p>

<h2 id="mathematics-of-spacetime-in-11-dimensions">Mathematics of Spacetime in 1+1 Dimensions</h2>

<p>In 1+1 spacetime we consider only the following 3 motions:</p>
<ul>
  <li>d -&gt; displacement one unit in space (instantly)</li>
  <li>h -&gt; displacement one unit in time</li>
  <li>b -&gt; acceleration of one unit of speed (instantly)</li>
</ul>

<p>These motions respect the following 3 identites:</p>
<ul>
  <li>Moving then waiting is the same as waiting then moving: \(dh=hd\)
    <video src="/assets/galilean_1p1/MoveAndWait.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
    Your browser does not support the <code>video</code> element.
  </video>
  </li>
  <li>Moving then accelerating is the same as accelerating then moving: \(db=bd\)
    <video src="/assets/galilean_1p1/MoveAndBoost.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
    Your browser does not support the <code>video</code> element.
  </video>
  </li>
  <li>Accelerating then waiting gets you further than waiting then accelerating: \(hb=dbh\)
    <video src="/assets/galilean_1p1/WaitAndBoost.mp4" controls="" autoplay="" loop="" style="max-width: 75%;">
    Your browser does not support the <code>video</code> element.
  </video>
  </li>
</ul>

<p>These 3 motions with their 3 “commutation relations” are enough to fully describe the group.
The details are developped in the 
<a href="/mathematics/2022/09/15/galilean-1p1-notebook.html">Galilean 1+1 notebook</a>.</p>

<p>This
<a href="/mathematics/2022/09/20/galilean-2D-lie-algebra.html">notebook</a>
dwelves into the infinitesimal aspect of the group with a study of its lie algebra.</p>

<h2 id="living-on-a-finite-line">Living on A Finite Line</h2>

<p>Here we make the Galilean group (artificially) finite by imposing the relations $B^3=D^3=H^3=e$.
It gives a 27-element finite group which has the same commutation relationships as the Galilean group.</p>

<p>In the 
<a href="/mathematics/2022/09/20/finite-gal-1p1-notebook.html">Finite Galilean notebook</a>
we explore topics of representation theory, non-commutative harmonic analysis, character theory,
complex and real irreps, all in the finite context.</p>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="group theory" /><category term="mathematics" /><category term="galilean group" /><summary type="html"><![CDATA[We explore a simplified version of spacetime with only 1 space dimension.]]></summary></entry><entry><title type="html">Robot Tales: Space Is Not Outside</title><link href="spacetime-appreciation.blog/mathematics/spirituality/2021/10/17/robot-ina-circle.html" rel="alternate" type="text/html" title="Robot Tales: Space Is Not Outside" /><published>2021-10-17T11:50:47-05:00</published><updated>2021-10-17T11:50:47-05:00</updated><id>spacetime-appreciation.blog/mathematics/spirituality/2021/10/17/robot-ina-circle</id><content type="html" xml:base="spacetime-appreciation.blog/mathematics/spirituality/2021/10/17/robot-ina-circle.html"><![CDATA[<p>What is space? 
Is it exterior or interior to us?
Let’s challenge the common sense answer that space is something that contains us.
We’ll use a toy model of a small robot, which lives in a 4 points space,
to explore those questions in a simplified setting.
As we explain what space means to the “robotself” 🤖, we also learn about our spacetime.</p>

<p class="warning">Prerequisites: I will assume the reader has a basic understanding of complex numbers and math proofs.
I will note N for the natural numbers and R for the reals.</p>

<p>In my 
<a href="/spacetime/2021/01/07/introducing-the-app.html">very first article</a>, 
we showed that spacetime is something we can experience.
As a quick reminder, we showed that there is a “square dance” that you can do in our spacetime,
but that you cannot do in some others.
So there is <em>some</em> aspect of spacetime that can be “touched and felt” with our 5 senses.</p>

<p>As we’ve seen, this little square dance has made space a little bit “interior” to us, but not fully.
The fact that the square dance works is a property of our spacetime, but it is also a property of many others.
So if you just notice that the square dance work, it is not enough to know that we live in our 4D space.
You might be living in a 2D flat space for example, and that dance would work as well.</p>

<p>So the idea here is to push this dance thing further.
What if we had more dances, so that they could cover all the properties of our spacetime.
If you did all the dances, one after the other, and checked that they worked, then you had to be inside our spacetime.
This would allow yourself to have a full appreciation of our spacetime, purely in terms of things you can see and touch.</p>

<p>Imagine for a second that it is possible:
you have a set of dances that allows you to recognize your spacetime “from the inside”.
Well then, do you even need anything else than the dances?
You could define space to be the dances, and you should get a coherent result, because the danses capture fully the nature of the space.
In doing so, you would have reached a definition of space that is interior to your perception. 💃</p>

<p>This is the overall goal of this blog, but we are not yet ready to give the dancy description of our spacetime.
We need to learn more tools and techniques first.
So here we will consider a very simple robot, which lives in a very simple space,
and we will give the dancy description of its simple space.
More than this, we will prove formally that the dancy description is equivalent to the usual (exterior) description.
This will form a basis for later when we attempt the same for our spacetime.</p>

<p>➡ The overall progression of this article will be to start from the exterior/usual point of view,
and progressively move toward the interior/intuitive description.</p>

<p>We will start by introducing the robot and give a first equation (1) which expresses
the existence of the robot in this space, from our point of view.</p>

<p>In section II, we will discuss more about the nature of space and of our perceptions.
We will try to give a new perspective of what makes space space, both for the robot and for us humans.</p>

<p>In section III we move forward by giving an equivalent definition of space (2)
which is interior to the point of view of the robot.
While this expression is interior, it relies on complex number, so it is not intuitive.</p>

<p>In section IV, we bring the dances in, and they allows us to find a condition (3), which is equivalent to (2),
but doesn’t use any algebra.</p>

<p>When we reach there, we’ll have provided our little robot with a definition of its space that is both intuitive and interior to its perception.
✌</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--md" src="/assets/robot_ina_circle/generator-dances.svg" />
	</a>
  </div>
  <div class="item__content">

  Here is a quick diagram of the 4 dances that "generate" spacetime for our robot.
  Each arrow represents one movement and each color represents one dance.
  By the end of this article, we'll understand what this picture mean in more details.
  </div>
</div>

<p>Anyways, let’s introduce our robot.</p>

<h2 id="i-hello-robot">I. Hello robot!</h2>

<p>Imagine we have a very small and very simple robot, made of a single rotating arm fixed at the origin O.
The robot has a single motor it can control, which can rotate the arm either 90 degree or -90 degree or do nothing.
Below we have a simple diagram of the situation.</p>

<div style="width:80%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/robot-ina-circle.svg" alt="diagram" /></p>
</div>

<p>The robot can only go to one of the 4 pointed positions on the circle.
We identify each of these positions with a complex number: $\{1, i, -1, -i\}$.
Since these 4 positions make up everything this robot can go, it is its World and we’ll note $W = \{1, i, -1, -i\}$.</p>

<p>The robot has also a single temperature sensor, which reads a number.
At each position there is a different temperature: for example at the top (noted i) it is red which suggests a high temperature, let’s say 100 degrees C to be factual.
We also see that the temperature at -1 is medium (perhaps 30), at -i cold (say -10) and at 1, where the robot currently is, we say it’s chilly at 15.</p>

<p>The temperature doesn’t change with time, so that we have a single temperature reading for each location.
This allows us to define a temperature function: $\tilde t: W \rightarrow R$.
So we can express the temperature at the top by saying $\tilde t(i) = 100$.<br />
Similarly:
\(\tilde t(-1) = 30 \\
\tilde t(-i) = -10  \\
\tilde t(1) = 15\)</p>

<p>The function $\tilde t$ is kind of the description of the robot’s world.
Remember that temperature is the only sensor available to our robot, 
so its whole world is made of temperature.
The function $\tilde t$ summarizes all the temperatures that it can possibly feel.
It is a kind of ultra-condensed sensory information for the robot.</p>

<p>Right now we don’t assume anything about the function $\tilde t$,
but latter in the article we might need to ask it to be injective.
This means that all points have different temperatures,
which allows the robot to actually distinguish the points from their temperature.</p>

<p>⌚ Ok, now we need to talk a little about <strong>time</strong>  and <strong>movement</strong>.
How does this little robot moves about?
We are going for as simple a model as possible: so we will only consider discrete time steps.</p>

<p>The time will be modelled by the integers N : 0, 1, 2 …
At each instant n, the robot has a position L(n) which is in W.
For example, if the robot starts at 1 we have L(0) = 1.
This gives rise to a function $L: N \rightarrow W$</p>

<div style="width:80%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/exterior-POV-eq.svg" alt="diagram" /></p>
</div>

<p>Allright so at this point we have everything needed to completely understand what is happening for our robot.
The function L and $\tilde t$ allow us to fully describe the space, as well as what the robot feels in the space.
We call these two function the <strong>exterior point of view</strong> because they correspond to how an external observer sees the robot.
We are going to continue this section, by introducing two new functions t and b, 
which describe the robot from its own point of view (POV), using its own sensors.</p>

<p>The robot has a “motor command” b (I chose ‘b’ because it looks like a flexed triceps muscle 💪), which gives at each instant in which direction the robot wants to move.
At any time n, the robot can either stay in place b(n) = 1, rotate clockwise b(n) = -i or rotate counter-clockwise b(n) = i.
And this gives rise to a function $b: N \rightarrow  \{1, i, -i\}$</p>

<p>Why chose {1,i,-i} as the output?
We need to remember the geometrical property of complex multiplication.
Multiplying a complex number by i rotates counter-clockwise, by -i clockwise and by 1 doesn’t change anything.
We can translate this as an equation: L(n+1) = L(n)*b(n)</p>

<div style="width:80%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/clockwise-rotation.svg" alt="diagram" /></p>
</div>

<p>For example in the diagram above, we have L(0) = 1, and suppose the robots wants to rotate clockwise, that is b(0) = -i.
Then we have L(1) = L(0)b(0) = -i, and indeed this corresponds to a clockwise rotation.</p>

<p>Even though we have introduced b as a new function, it doesn’t really bring any new information,
as the recurrence relation for L completely determines it: $b(n) = {L(n+1) \over L(n)}$</p>

<p>🔥 Now that we have movement from the robot POV, we need temperature.
What does the robot feels at time n?
Well at time n, the robot is at L(n) and the temperature there is given by $\tilde t(L(n))$.
This gives us a new function t: N -&gt; R given by $t(n) = \tilde t(L(n))$</p>

<p>The functions t and b, put together, encompass the totality of what the robot perceives.
We call (t,b) a <strong>robot’s awareness</strong>, and they form the interior point of view.</p>

<div style="width:80%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/robot-ina-circle-awareness-eq.png" alt="diagram" /></p>
</div>

<p>Having defined the robot both from the exterior and the interior, 
we now say a few word about the relationship between these two views.</p>

<p>The robot awareness represents the same information as the exterior POV but from the POV of the robot.
It is easy to go from the exterior POV $(\tilde t, L)$ to the interior POV (t, b):</p>

\[\left \{ \begin{eqnarray}
t(n) = \tilde t(L(n)) \\
b(n) = {L(n+1) \over L(n)}
\end{eqnarray} \right.\]

<p>We can also express the first equation with the diagram below:</p>

<div style="width:100%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/factor-diagram.svg" alt="diagram" /></p>
</div>

<p>This diagram says essentially that there are two equivalent ways to know what the robot is perceiving at time n:</p>
<ol>
  <li>Ask the robot (or read its sensors), which gives us t(n)</li>
  <li>Deduce the temperature the robot is feeling from the location of the robot $L(n)$ and the temperature there $\tilde t(L(n))$</li>
</ol>

<p><strong>Condition (1) - Robot exists in space</strong> If the robot really lives in the space W, the two methods must give the same results, so that 
\(\begin{equation}
t(n) = \tilde t(L(n))
\end{equation}\)</p>

<p>We will note this expression (1).
This expression is important because it links the outside and inside point of view.
There is the “outside”, which is present as the world W as the output of the function L.
There is the “inside” which is represented by the touch function t.</p>

<p>In the next part we will see that this condition implies that the functions t and b cannot be taken randomly,
that they must verify some kind of relationship.
We will suggest that we can use this relationship for a definition of space.</p>

<h2 id="ii-space-as-a-pattern">II. Space as a pattern</h2>

<p>In the previous part, we defined the robot from our point of view,
and we showed how to transpose from the exterior POV to the interior POV.
Here we’ll try to do the opposite, start from interior POV and try to recover the exterior.
In doing so, we’ll hit a difficulty in that we cannot chose the functions t and b randomly.
There has to be some kind of relationship between t and b, this is both the secret meaning behind condition (1)
and behind the meaning of space itself.</p>

<p>So let’s do a kind of empathy exercice and put ourselves in the robot gears.
The robot doesn’t know about the space W, because it has no sensor that can cover the whole area.
Actually, the <strong>robot awareness</strong> 👀 has only two things: the temperature at each time and movement at each time.</p>

<div style="width:100%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/robot-ina-circle-awareness-eq.png" alt="diagram" /></p>
</div>

<p>At this point we just imagine the two functions as kind of independant inputs.</p>

<p>The first thing we can tell the robot about, is the position function L.
Having a position function is a good start to talk about space, no?
Using the initial position L(0) = 1 and the recurrence relation L(n+1)=L(n)b(n), we get the formula:
L(n+1)=b(0)b(1)…b(n)</p>

<p>That is L(n+1) is the (complex) multiplication of all movements that happened strictly before.
It is easy to see that L is a function N -&gt; W, as before.
So now we got W, our space, in the picture.</p>

<p>Let’s describe what is happening in our space, that is, what is the temperature at every point.
For this, we can select 4 integers $n_1, n_i, n_{-1}, n_{-i}$ such that:<br />
\(L(n_1) = 1 \\ 
L(n_i) = i \\  
L(n_{-1}) = -1 \\  
L(n_{-i}) = -i\)
In more casual language, $n_i$ is a time when the robot is at i.</p>

<p>Now we can define a function $\tilde t: W -&gt; R$ as before using these integers:<br />
\(\tilde t(1) = t(n_1)  \\
\tilde t(i) = t(n_i)  \\
\tilde t(-1) = t(n_{-1})   \\
\tilde t(-i) = t(n_{-i})\)</p>

<p>Allright so our robot knows its position L and knows what the space feels like (in terms of temperature) through $\tilde t$.
We have defined all of this using only things he “sees and touch”, that is from t and b.
So is that it? Are we done? Have we defined space from the interior point of view?</p>

<p>⚠ Not yet, there is still a last condition, which is the equation we wrote (1) in the previous section.
As a reminder, this condition reads: $t(n) = \tilde t(L(n))$</p>

<p>We can see that at this point, we don’t know whether this relationship holds or not.</p>

<p>To see why this condition is important, let’s take two random functions t and b:</p>

<table>
  <thead>
    <tr>
      <th>time</th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>…</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>t</td>
      <td>15</td>
      <td>-10</td>
      <td>25</td>
      <td>45</td>
      <td>100</td>
      <td>15</td>
      <td>…</td>
    </tr>
    <tr>
      <td>b</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>i</td>
      <td>-i</td>
      <td>i</td>
      <td>…</td>
    </tr>
  </tbody>
</table>

<p>We can construct a function L from b as suggested above:</p>

<table>
  <thead>
    <tr>
      <th>time</th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>…</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>t</td>
      <td>15</td>
      <td>-10</td>
      <td>25</td>
      <td>45</td>
      <td>100</td>
      <td>15</td>
      <td>…</td>
    </tr>
    <tr>
      <td>b</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>i</td>
      <td>-i</td>
      <td>i</td>
      <td>…</td>
    </tr>
    <tr>
      <td>L</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>i</td>
      <td>1</td>
      <td>…</td>
    </tr>
  </tbody>
</table>

<p>Now according to condition (1), we must have:
$15 = t(0) = \tilde t(L(0)) = \tilde t(1)$ and $-10 = t(1) = \tilde t(L(1)) = \tilde t(1)$.
That is we must have $15=\tilde t(1)=-10$, which is absurd of course.</p>

<p>So the functions t and b that we had chosen just above do not work.
Although they can be used to define L, W and $\tilde t$, they do not verify (1), and so
do not form the awareness of a robot in space.</p>

<p>If we look closely at what happens, we see that the problem is that the robot is staying at the same place:
b(0)=1, so since we supposed that the temperature does not change with time, it should experience the same temperature.
That is we should have $t(0)=t(1)$, but our function t varies at these instants…
The problem is that the function t changes while the robot is static.</p>

<p>The following exercise makes this intuition formal:</p>

<p><strong>Exercise</strong>:
Show that if b(n) = 1, and $t(n) \neq t(n+1)$, then condition (1) is not verified.</p>

<p>Of course this exercise just shows one way in which condition (1) can fail.
There are many other ways that two function t and b may fail the test.
We give another example below:</p>

<p><strong>Exercise</strong>:
Suppose that $b(n)=b(n+1)=b(n+2)=b(n+3)=i$, and $t(n) \neq t(n+4)$, then condition (1) is not verified.</p>

<p>This exercise shows that if there are 4 i’s in a row, then t must have the same value before and after the 4 i’s.
This is great, in that it gives us one more condition on the two functions t and b, but it is not enough.
Because we could still come up with functions t and b that verify the conditions of the two exercises, and
still they would fail to verify condition (1).</p>

<p>There is still something we can say at this point.
The patterns that these exercises describe mix the values of the function t and b.
When the function b goes through some special chain of values, e.g. i,i,i,i,
then the values of t must be as specified.
So we can see that there must be a special pattern that “weaves together” the functions b and t.</p>

<p>This pattern is what makes space space.</p>

<p>In the next chapter, we are going to find other ways of expressing (1),
so that the pattern it entails becomes more clear and more intuitive.</p>

<p>Often enough in this article I will need to consider different robots in different circumstances.
When I mention a robot’s awareness, I am always referring to two functions t:N-&gt;R and b:N-&gt;{1,i,-i}.
We can also consider L and $\tilde t$, they will be the function defined as we just did above.
Sometimes we will require the robot awareness to actually come from a robot in space,
in which case we might say that the robot’s awareness verifies condition (1),
but most of the time we might instead say that “the robot exists in space” to mean the same thing.</p>

<p>🙋 What about us humans?<br />
We tend to think of our sensations as independant streams of information about the world.
But just like the robot, they are actually linked together into one very specific mess.
For a simple example,
we’ll focus here on 3 senses: muscular sensations at the neck, sight and balance (through the inner ear).</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--md" src="/assets/robot_ina_circle/sensation-naive.svg" />
	</a>
  </div>
  <div class="item__content">

	Here we have a naive picture of what our senses input look like.
    Each sensory signal is doing its own thing, with no connection to the other ones.
  </div>
</div>

<p>But this naive picture is grossly innacurate, our senses are not independant at all.
Let’s consider the following example:</p>
<ol>
  <li>Start facing straight, you see 🐍</li>
  <li>Turn your head to the right<br />
 This creates specific neck muscle sensations.</li>
  <li>Notice the feeling of turning 🔁<br />
 This is coming from your internal ear.
 The internal ear is an organ that feels movement, whether rotational or translational.</li>
  <li>You now see something else 🚪</li>
  <li>Turn your head to the left<br />
 This creates again specific neck muscle sensations</li>
  <li>Notice feeling of turning 🔄</li>
  <li>Your head is back where it started: you see again 🐍</li>
</ol>

<p>This little example of turning the head left and right might seem a bit trivial, but it shows a very important point.
Everytime we do these small steps, we go through the same sensations.
Everytime I move my head, I feel like I am turning, and my visual sensations change.
It is not possible to turn my head, and not feel like I am turning.
It is not possible to turn my head, and not change my sight (assuming the eyes are not moving).</p>

<p>The point here is that, of course, our senses are not independant.
There is also something much stronger that comes off this example.
<em>Everytime</em> the same neck muscular sensations occurs, it produces <em>exactly the same</em> change in sight
and change in inner ear.
So not only our senses are woven together in some way,
but the weaving pattern repeats exactly.</p>

<p>Now moving the head left than right is not the only example of movements that create specific change in sensations.
There is a large number of them, each with its own specific pattern in the sensation space.
Each repeating perfectly in time.
Take all these patterns together, and you get a huge and beautiful tapistry in our sensation space.
In a sense, we will see that the weaving pattern fully describes spacetime (if you want you may say that spacetime <em>is</em> the weaving pattern).</p>

<p>We are currently unable to prove this claim for humans, so you might sneer if you think it foolish.
What we will do though, is prove this claim for our little robot.
We will show that, for our robot, a specific pattern in its sensations is equivalent to the existence of space.</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">

    <img class="image image--sm" src="/assets/robot_ina_circle/sensation-weave.svg" />
	</a>
  </div>
  <div class="item__content">

	Here we have an updated picture of what our senses input looks like.
    The streams from each sensory organ are weaved in a regular pattern to represent their relationship.

  </div>
</div>

<h2 id="iii-internal-definition">III. Internal definition</h2>

<p>Since (1) seems to capture the essence of what a space means, let’s try to look at it a little bit more.
We are going to find different, though equivalent, ways of expressing (1), and try to extract insight from them.</p>

<p><strong>Interior expression of space</strong>: 
Let’s consider a robot’s awareness (t, b) and construct functions L and $\tilde t$ from t, b as in the previous section.
The following two conditions are equivalent:</p>

<ol>
  <li>(robot exists in space) forall n in N, $t(n) = \tilde t(L(n))$</li>
  <li>Forall n,k in N, $b(n)b(n+1)…b(n+k-1)=1 \implies t(n) = t(n+k)$</li>
</ol>

<p><strong>Proof</strong>:</p>
<blockquote>
  <p>First we are going to need a small lemma:<br />
The condition $t(n)=\tilde t(L(n))$, forall n, is equivalent to the condition:<br />
Forall n,m, L(n)=L(m) implies t(n)=t(m)</p>

  <p>Indeed if $L(n)=L(m)$, then applying $\tilde t$ on both side we get: $t(n)=\tilde t(L(n))=\tilde t(L(m))=t(m)$.</p>

  <p>The other side of the lemma is a bit more spicy:
Let’s remember $n_i$ that we chose to construct $\tilde t$ back in the previous section.
It verifies $L(n_i)=i$ and by construction of $\tilde t$, $\tilde t(i) = t(n_i)$.
Suppose $L(n)=i=L(n_i)$ then we have by assumption $t(n)=t(n_i)=\tilde t(i)=\tilde t(L(n))$<br />
In this way we have prove the equation $t(n)=\tilde t(L(n))$ for all n such that $L(n)=i$.
We can reproduce the argument with $n_1, n_{-i}, n_{-1}$ and that proves the lemma.</p>

  <p>We can now use our lemma to prove our assertion:<br />
(1) &lt;=&gt; forall n,m, L(n) = L(m) implies t(n) = t(m).<br />
Unfolding the definition of L, we have<br />
(1) &lt;=&gt; forall n,m, b(0)b(1)…b(n-1) = b(0)b(1)…b(m-1) implies t(n) = t(m)<br />
Without loss of generality we can assume m is &gt;= n and write m=n+k for k in N.<br />
So now we have:<br />
(1) &lt;=&gt; forall n,k, b(0)b(1)..b(n-1) = b(0)…b(n+k-1) implies t(n) = t(n+k)<br />
Simplifying through by the left hand side:<br />
(1) &lt;=&gt; forall n,k 1 = b(n)b(n+1)…b(n+k-1) implies t(n) = t(n+k)<br />
Finally,<br />
(1) &lt;=&gt; (2)<br />
QED.</p>
</blockquote>

<p>Allright so the proof we have here is not so difficult,
but what is its relevance?
In the previous section, we discussed that the robot’s senses t and b where meshed together in a complex pattern,
that was given by relation (1).
Since relation (1) used the exterior POV $(L, \tilde t)$ it wasn’t very satisfying.
Having proved that (1) is equivalent to (2), we can now use (2) for describing this pattern.
This is better because (2) only refers to (t, b).</p>

<p>We can use (2) to understand the pattern a bit better.
First of all, it allows us to solve the previous 2 exercises easily:</p>
<ol>
  <li>If $b(n)=1$, condition (2) directly implies $t(n)=t(n+1)$</li>
  <li>If $b(n)=b(n+1)=b(n+2)=b(n+3)=i$ then definitely $b(n)b(n+1)b(n+2)b(n+3)=1$ and so $t(n)=t(n+4)$</li>
</ol>

<p>These two exercises come in the form of “sensation loops”.
The equation $t(n)=t(n+4)$ just says that the touch sensation at n is the same as at time n+4.
From the POV of the robot, its touch sensations are looping after these 4 steps.
For the first exercise, the equation is $t(n)=t(n+1)$, which means that the touch sensation loop after 1 step.</p>

<p>Condition (2) is also expressed in terms of loops.
It says that if $b(n)b(n+1)…b(n+k-1)=1$ then the touch sensation $t(n)$ loops after k steps.</p>

<p>👶 
It is actually nice that the expression (2) uses loops, because it is extremely intuitive.
A sensation coming back to what is was is something very primal, basic, that I argue a baby would readily understands.
Imagine a baby that is just born, and let’s assume that she doesn’t understand anything.
She doesn’t understand where she is, how to move her body.
She might not even have a clear idea of what is her own body and whether it is separated from her mom’s body.
Finally, she probably doesn’t know she is a baby.
All she has for sure, are her senses.</p>

<p>Now let’s suppose she notices a nice sensation.
For example, if she sees her mom, she will get some pleasure.
Now it is possible to lose this pleasurable sensation.
For example, if she accidentally turns her head away to the right.</p>

<p>Now if she has explored her sensations a bit, 
she will know that by turning her head back left, it will restore the pleasurable mom sensation.
This is obviously of interest to her.</p>

<p>Notice that it does take the form of a loop in sensations.
The nice mom sensations, the muscular sensations at the neck, and at the end the nice mom sensation again.
We have here a loop that is not so different from the loops defined in the exercises, or in condition (2).</p>

<p>It is not hard to imagine a baby being curious about learning as much loops as possible.</p>

<p>This is really cool because we have basically proved that the existence of space is equivalent to the presence of certain loops.
Since sensations loops are very intuitive, it is a good sign that we are slowly moving in the right direction.</p>

<p>🔄 Let’s find more loops for our robot!</p>

<p>We can use condition (2) to notice even more loops in the robot’s awareness:</p>
<ol>
  <li>if the robot goes $b(n)=-b(n+1)=b(n+2)=-b(n+3)=i$, then $t(n)=t(n+4)$</li>
  <li>if the robot goes -i, -i, -i, -i then touch sensation loops after 4 steps</li>
  <li>if the robot goes i,i,-i,-i then touch sensation loops after 4 steps</li>
  <li>…</li>
</ol>

<p><strong>Exercise</strong> Find 3 more little loops in the robot’s awareness.</p>

<p>Basically, we can take any chain of movements that multiplies out to 1, and we get some little loop in the robot’s awareness!</p>

<p>Since there is an infinity of chains of complex numbers that multiply to one,
there are also an infinity of those little loops.
This makes understanding the total structure of the relationship between t and b a bit tedious.
But as we’ll see in the next section, there are clever ways to build all the loops from a few basic ones.</p>

<p>This concept of loops is pretty cool, because it talks only about what the robot feels and touches – it is interior.
But let’s not forget that it is fully equivalent to (1), the exterior definition of space.
So in a sense, we can <em>define</em> space as the set of all the loops.</p>

<p>As a finishing touch on the form of (2) we note that time is very present, in the form of chains.
This is interesting because we often think of space as something that we can see “instantly”.
But it seems that what matters is not the instant vision of space, but rather how those perception evolve and change with movement/muscular sensations.
This suggests that movement is central to the perception of space. 💃</p>

<p>In the next section, we are going to find a more intuitive way to describe all these loops.</p>

<h2 id="iv-intuitive-definition">IV. Intuitive definition</h2>

<p>Is the formula (2) really a good way to explain the space W to the robot ?
Thinking about it, in order to use (2), the robot must know how to multiply his “muscular sensations” inside W.
This is a lot to ask from a robot if you ask me.
We’ll have to do better than this.</p>

<p>We are going to find a way to explain space to the robot that doesn’t rely on complex numbers.
We are not going to use any other algebra or abstract mathematical tool either.
We will only use the robots raw sensations and the properties of some particular chain of sensations we’ll call ‘null muscular chains.’</p>

<p>Let $[b_1, …, b_k]$ be a list of consecutive sensations.
We call $[b_1, …, b_k]$ a <strong>null muscular chain</strong> if, whenever the robot goes through these movements, the sensations at the start and at the end are the same.
Writing this in symbolic notation:<br />
$[b_1, …, b_k]$ is null iff forall n such that $b(n) = b_1, b(n+1)=b_2, …, b(n+k-1)=b_k$, we have t(n) = t(n+k).</p>

<p>🔄 In other terms, <em>null muscular chains</em> are just what we were calling informally loops just before!</p>

<p>It is important to note at this point that the definition <em>only relies on the raw awareness</em> 👀 and doesn’t assume any algebraic structure on the muscular sensations (they don’t need to be complex numbers, in particular).
We could use the same definition for muscular chains in our human awareness.</p>

<p>Why are we interested in those chains?
Well, with this concept, we can reformulate condition (2) in a more concise way:<br />
“a robot exists in the space W iff all chains that multiply out to 1 are null chains”.</p>

<p>🤓 Actually, it turns out that there are no other null chains than the one that multiplies to 1, as the following results makes clear:</p>

<p><strong>Null chains multiply to 1 under (1)</strong>: let t: N-&gt; R, b: N -&gt; {1, i, -i} be two functions that make up a robot’s awareness.
Suppose additionally that the robot “exists in the space W”, that is we can define L and $\tilde t$ and they verify (1).
Assume furthermore that $\tilde t$ is injective (that is all the temperatures on the space are distinct).
This last condition is necessary so that the robot can distinguish all the points in the space using only his temperature sensor, which is his only window into the world.
Then a muscular chain is null if and only if its product is equal to 1.</p>

<p><strong>Proof</strong></p>
<blockquote>
  <p>Let $[b_1, …, b_k]$ be a muscular chain. 
Let n a time such that $b(n)=b_1, b(n+1)=b_2, …, b(n+k-1)=b_k$.</p>

  <p>Let’s prove the &lt;= part of the equivalence first.
Suppose that  $b_1…b_k=1$ then, because the robot verifies (1) and (equivalently) (2), we immediately get that t(n)=t(n+k).
That is the chain is null.</p>

  <p>Let’s now prove the =&gt; side.
Suppose now that the chain is null.
By definition, this gives us t(n) = t(n+k).
Since the robot verifies condition (1), we can write this as: $\tilde t(L(n)) = \tilde t(L(n+k))$.
Since $\tilde t$ is injective, we have L(n) = L(n+k).
Expanding each side in terms of L(0) and b(0), …, b(n+k-1), we reach:<br />
L(0)b(0)b(1)…b(n-1) = L(0)b(0)b(1)…b(n+k-1)<br />
Simplifying out by L(0) and the n first factors, we reach: <br />
1 = b(n)b(n+1)…b(n+k-1)
And so the chain multiplies out to 1.<br />
QED.</p>
</blockquote>

<p>We are not going to actually use this result in any part of this article,
so this last proof was just some kind of sadism from my part (sorry reader).
Actually I do have a motive for this result.
In the last part I said that we can define space as the set of all the sensation loops that have the special form given by condition (2).
This was kind of cool, but not that impressive.</p>

<p>However, now that we know that ALL the loops have the form given by condition (2), we can give a much cooler definition of space:
space is the collection of all sensation loops.</p>

<p>We can see the link between sensations and algebra emerging, and that is somewhat noteworthy.
Anyway you may forget about it now because as I said we’re going to use something quite different.</p>

<p>📖 If you’ve been following, 
you’ll have noticed that in section II we introduced the notion that space is a pattern inside the robot’s awareness.
In section III, we refined this idea by showing that this pattern is actually made of loops.
The current issue is that there is an infinity of types of loops, so it’s hard to handle them.
So what we do here in this section, is show that all the loops (or null muscular chains if you prefer), 
can be obtained by putting together a few basic ones.</p>

<p>Let’s consider the following basic chains 💃:</p>

<ul>
  <li>Doing nothing [1]</li>
  <li>Rotating counter-clockwise then clockwise [i, -i]</li>
  <li>Rotating clockwise then counter-clockwise [-i, i]</li>
  <li>Rotating counter-clockwise 4 times [i, i, i, i]</li>
</ul>

<p>These basic chains appear to the robot as kind of dances,
because each element of the chain corresponds to a muscular sensation.
If you do specific muscular actions in a specific order, you get something close to a dance I guess.
So we’ll call them the <strong>generator dances</strong>.</p>

<p>This little diagram summarizes the generator dances:</p>

<div style="width:50%; margin:0 auto;" align="center">
  <p><img src="/assets/robot_ina_circle/generator-dances-text.svg" alt="generator dances" /></p>
</div>

<p><strong>Exercise</strong> Show that, assuming (1) or (2) if you prefer, all the generator dances are null chains.</p>

<p>So here we have 4 basic null chains or loops.
Now we are going to show how to combine them together to make longer ones.</p>

<p><strong>Composition of chains</strong> If we have two chains $D = d_1, d_2, …, d_k$ and $C = c_1, …, c_l$, we can <strong>compose</strong> the two chains by including C in D at the location $0 \leq i \leq k$, creating a new chain: $ [d_1, d_2, …, d_i, c_1, … c_l, d_{i+1}, …. d_k] $</p>

<p><strong>Surgery of chains</strong> If we have a chain $D = d_1, d_2, …, d_k$, and 2 integers $1 \leq i \leq j \leq k$
We note $C = d_i, d_{i+1}, …, d_j$ and $D’ = d_1, d_2, …, d_{i-1}, d_{j+1}, d_{j+2}, …, d_k$ and
we will say that D’ is obtained from D by surgically removing C.</p>

<p>We can take all the chains made up of arbitrary combinations and surgeries of the generator dances and call that the <strong>composite chains</strong>.
Our goal will be to show that the composite chains are exactly the chains that create loops!
So starting from a generator dance, you are free to add and remove as many generator dances as you want.
All the chains you can get this way are the composite chains.</p>

<p>It might not seem obvious as first, but there are actually a lot of composite chains.
In order to get some practice with the composition and surgery operations, I suggest the following exercise:</p>

<p><strong>Exercise</strong> Show that the following chains are composite:</p>
<ol>
  <li>-i, -i, -i, -i</li>
  <li>i, -1, i, -1</li>
  <li>-i, -i, i, i</li>
  <li>i,i,-i,-i,-i,-i,i,i</li>
</ol>

<p>As a hint, I will give you the solution for the first one:</p>
<ol>
  <li>Start with i,-i a generator dance -&gt; [<strong>i,-i</strong>]</li>
  <li>Compose with [i,-i] at the middle -&gt; [i,<strong>i,-i</strong>,-i]</li>
  <li>Again compose with [i,-i] at the middle -&gt; [i,i, <strong>i,-i</strong>,-i,-i]</li>
  <li>Last time compose with [i,-i] at the middle -&gt; [i,i,i, <strong>i,-i</strong>,-i, -i,-i]</li>
  <li>Surgically remove [i,i,i,i] from the start -&gt; [-i,-i,-i,-i]</li>
  <li>Success 🥂</li>
</ol>

<p>Looking at the composite chains given in the exercise,
the astute reader may have noticed that they all multiply to one.
This is not a coincidence, as the following result makes clear:</p>

<p><strong>Characterisation of the composite chains</strong>: 
A chain is composite if and only if it multiplies out to 1.</p>

<p><strong>Proof</strong></p>
<blockquote>
  <p>Any composite chain multiplies out to 1.
This can be proven formally by induction on the length of the composition sequence,
but it is quite obvious, since all the generator dances multiplie to one.</p>

  <p>So let’s prove now that all chains that multiply to 1 are composites of the generator dances.<br />
Let’s write $H_n$ the hypothesis that all chains of length $\leq n$ that have a product equal to 1 are composite of the basic dances.
The only chain of length 1 that has a product equal to 1 is [1], and it is a generator dance, which proves $H_1$.
Let’s proceed by induction and suppose $H_n$, we’ll try to prove $H_{n+1}$<br />
Let $D = d_1, …, d_k$ be chain which multiplies out to 1.</p>

  <p><strong>Case 1</strong> There is i such that $d_i=1$<br />
If any one of the $d_i$ is 1 then we can remove it and get a smaller chain (call it C), which multiplies to 1.
That smaller chain multiplies to 1, so it is composite according to $H_n$.
We can now express D as a composition of C and [1], this makes D a composite chain as well.</p>

  <p><strong>Case 2</strong> D does not contain 1 but it contains both i and -i<br />
So we can suppose that none of the $d_i$ are 1, so we are left with a sequence of i and -i.<br />
Suppose now that not all the $d_i$ are equal.
Then there must be an index j such that $[d_j, d_{j+1}]$ is [i, -i] or [-i, i] which are both generator dances.
We can proceed as before an express D as a composition of a subchain that multiplies to 1 and a generator dance.
So, using $H_n$ on the subchain, we can conclude that D is composite too.</p>

  <p><strong>Case 3</strong> D is made of only i<br />
So we only have the case left where D is only made up of a single sensation, either i or -i.
Let’s suppose $D_j=i$ for all j.
If the length of D is 4 or bigger, then we can use $H_n$ again to remove a chain of the form [i, i, i, i].
D cannot have length 2 or 3 under those assumptions (remember it has to multiply to 1), and length 1 has already been treated in $H_0$.</p>

  <p><strong>Case 4</strong> D is made of only -i<br />
Proven exactly the same way as case 3.</p>

  <p>So finally we have proven $H_{n+1}$ and so, by induction, we now know that every chain that multiplies out to 1 is composite.
QED.</p>
</blockquote>

<p>So now we have a way to talk about the chains that multiply to one without using algebra.
This enables us to formulate the key statement of this article:</p>

<p><strong>Intuitive definition of spacetime</strong>: let (t, b) be function N-&gt; R and N-&gt;{1,i,-i}, aka (t,b) forms a robot’s awareness.
We can use (t,b) to construct $\tilde t$ and L as in section II.
We have an equivalence between the following propositions:</p>
<ol>
  <li>(exterior definition of space) Forall n in N, $t(n) = \tilde t(L(n))$</li>
  <li>(interior definition) All chains that multiply to one are null</li>
  <li>(dancy definition) All composite chains are null</li>
</ol>

<p><strong>Proof</strong></p>
<blockquote>

  <p>We don’t need to prove (1) &lt;=&gt; (2) because that was already proved in the last section.</p>

  <p>The equivalence (2) &lt;=&gt; (3) is obvious because the last results tells us that the composite chains 
are the same chains as those who multiply to one.</p>
</blockquote>

<p>So we see why the property (3) is interesting:</p>
<ol>
  <li>It is interior.<br />
We only need t and b to define any of the generator dances, composite chains and null chains.
So all the ingredients of (3) only use the robot’s senses.</li>
  <li>It is intuitive.
It is easy for a robot to check if a given chain is composite.
It only needs to manipulate the chain by adding or removing generator dances.
This is something that the robot can actually perform by moving around.
In particular, it doesn’t use any algebraic construction.</li>
  <li>It captures the structure of spacetime<br />
One should not think that spacetime is just the fact that the generator dances are null chains.
It is all the composite chains that are null.
Composite chains are arbitrary composition and surgeries of generator dances.
This gives us a LOT OF LOOPS, and the composition of the loops give them a precise form or structure.
Intuitively, the composition and surgery properties of composite loops is what gives space its structure, its rigidity.</li>
</ol>

<p>Finally, the equivalence between condition (1) and (3) closes our quest. 🏆<br />
It tells us that we can recover the exterior POV $(\tilde t, L)$ that condition (1) guarantees,
from (t,b) and some dances.
So the pattern defined by (3) is enough to describe fully the little robot’s space.</p>

<p>We might as well say it: the pattern in the robot’s awareness described by the composite dances is space itself.</p>

<p>Space is a bunch of loops with structure.
Space is inside.</p>

<p>Welcome to the spacetime appreciation blog!</p>

<h2 id="what-is-space-little-robot">What is space, little robot?</h2>

<p>As a conclusion, we’re going to talk to our robot and explain to it what is space 🌎
Because we have reached the point where we don’t actually need complex numbers,
we’re not going to use them when talking to it.</p>

<p>The robot just notices sensations.
It can tell them apart, but apart from that it cannot say much about them.
This is why we are going to represent these sensations with letters: G, D, Z.
The letters by themselves have absolutely no meaning, we only can tell that they are different.
Just like the robot can tell some of its sensations are different!</p>

<p>This is very high level robot empathy, and I do hope the robots will remember this when they take over.
Robot power 🦾</p>

<p>Anyway let’s kill this space thing:</p>

<p>🤖 Let there be a little robot’s awareness that can move and touch, with its t, b functions.
Let’s say that the robot only feels 3 distincts muscular sensations, which we’ll denote Z, G, D 
(this means that b here takes values in {Z,G,D} instead of {1,i,-i} as before).
Suppose that it notices that:</p>
<ul>
  <li>doing [Z] never changes the touch perception</li>
  <li>doing [G,G,G,G] or [D,D,D,D] never changes the touch perception</li>
  <li>doing [G, D] or [D, G] never changes the touch perception</li>
  <li>doing any combination of the above never changes its touch perception</li>
</ul>

<p>This forms a kind of big pattern in its awareness.</p>

<p>Little robot, this pattern is what we call space.</p>

<p>Clearly, it lives inside of the robot’s awareness!</p>

<p>📨 📨 📨 Closing words:</p>

<p>Maybe it is time to talk a bit more about the objective of this blog 🔭<br />
If you like physics and science you might have found quite a few articles or videos in which
physicists or philosophers talk for hours about the nature of space and time.
While these resources contain amazing insight and were done by people much smarter than me,
they often fail to conclude, so that the more we listen to them, the less we feel like we understand what is spacetime.</p>

<p>This is not one of these.
This blog has the ambition of giving a definitive definition of spacetime.
The definition will be intuitive and simple enough that a 5 years old can understand it.
It will be complete enough that a scientist can use it to derive the full equations of spacetime as it is used in classical mechanics.</p>

<p>We’ll define space as the set of sensation loops in our human awareness.
We’ll see that this set is also generated by a few special dances, that we’ll describe in detail.</p>

<p>Spacetime is not mysterious, it is a very big pattern in your awareness, and I am going to show you exactly which one.</p>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="mathematics" /><category term="spirituality" /><category term="space" /><category term="mathematics" /><category term="intuition" /><category term="awareness" /><summary type="html"><![CDATA[What is space? Is it exterior or interior to us? Let’s challenge the common sense answer that space is something that contains us. We’ll use a toy model of a small robot, which lives in a 4 points space, to explore those questions in a simplified setting. As we explain what space means to the “robotself” 🤖, we also learn about our spacetime.]]></summary></entry><entry><title type="html">On the Beach of the Acid Shore</title><link href="spacetime-appreciation.blog/time/2021/03/17/acid-beach.html" rel="alternate" type="text/html" title="On the Beach of the Acid Shore" /><published>2021-03-17T07:00:00-05:00</published><updated>2021-03-17T07:00:00-05:00</updated><id>spacetime-appreciation.blog/time/2021/03/17/acid-beach</id><content type="html" xml:base="spacetime-appreciation.blog/time/2021/03/17/acid-beach.html"><![CDATA[<p>About geometry and identity :)</p>

<div style="width:80%; margin:0 auto;" align="center">
  <p><img src="/assets/on-the-beach/great-wave.jpg" alt="wave" /></p>
</div>

<p>📐 In school we learn that the two fundamental elements of geometry are the point and the line.
The point is the smallest conceivable entity, it cannot be divided.
The line is made of points and repeats infinitely in a single direction.</p>

<p>This is true in 2 dimensions, yet we live in a 4 dimensional space-time.
In our space-time, the equivalent of points are events, they are small and indivisible elements in both the space and time dimensions.
An event is “something” that happens at a specific place and at a specific time.<br />
In our space-time, the equivalent of the line is the object.
We can observe the object at many different times, each such observation is an event.<br />
The object is made up of those events just like the line is made of points.<br />
The object repeats itself infinitely in the time direction.<br />
The object is the line of time.</p>

<p>🌊 I went to the beach on the acid shore.
I saw time and space deconstruct, decompose into shapes, colours and sounds.
I lost the sense of who I was, lost in an endless present, cut from any history and timeline.
Each instant was like an absurd and infinite island.</p>

<p>The incredible intensity of life.</p>

<p>People say that living in the present moment is the best feeling in the world, but that is only half true.
It is also terrifying, because when you are lost in time it is not clear anymore that you are safe.
There is no pause in life, the body needs to be protected at each instant.</p>

<p>The body is the first object.</p>

<p>I had to bring back something from that beach, otherwise nobody would believe me, even the future “me”.
So I picked up a seashell and I looked at it in full detail.
It is mostly beige, but it almost has a black line, barely visible.
It makes it unique, recognizable, it makes me feel safe.
It reminds me of my promise to protect my body.</p>

<p>Each time I looked at the seashell, I was surprised to see the same details.
Surprised by the incredible precision in that repetition.<br />
So something existed.<br />
And if something existed, I, as the one who recognizes it, must exist too?</p>

<p>I feel like I exist in time because I recognize objects.</p>

<p>🤓 Here is what I wrote on this beach:
“You got it, your precious.
You touch it and it makes you feel safe.
One day you will return it, like the sea retreats at low tide.
You will give away your totem.
You will give up this easy comfort, and you will be cold and you will be scared.
And then you won’t be scared, because in this chaos of lights and shadows, of shapes and colors you will recognize your home, you.
You are always home, it is always now.
You do not exist.”</p>

<p>There are no good and bad moments, good or bad thoughts.
Each instant is perfect and intense.
It is impossible to be away from life.
Each instant is life.</p>

<p>I made my promise.
One day, I will return my seashell.
I will come back to the place I have never left, the place where I belong.
I will come back on the beach of the acid shore.</p>

<h5 id="update-history"><em>Update history</em></h5>

<ul>
  <li>Edited 06/2022: removed fear paragraph + minor edits</li>
  <li><em>Edited 29/03</em>: minor edits</li>
</ul>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="time" /><category term="identity" /><category term="expository" /><category term="objects" /><category term="poetry" /><category term="time" /><summary type="html"><![CDATA[About geometry and identity :)]]></summary></entry><entry><title type="html">A Web Application to Move Around Hyperbolic Space</title><link href="spacetime-appreciation.blog/spacetime/2021/01/07/introducing-the-app.html" rel="alternate" type="text/html" title="A Web Application to Move Around Hyperbolic Space" /><published>2021-01-07T10:50:47-06:00</published><updated>2021-01-07T10:50:47-06:00</updated><id>spacetime-appreciation.blog/spacetime/2021/01/07/introducing-the-app</id><content type="html" xml:base="spacetime-appreciation.blog/spacetime/2021/01/07/introducing-the-app.html"><![CDATA[<p>What does it feel like to live in hyperbolic space?<br />
Here we have a simple app where you can move in different spaces (including hyperbolic, spherical, and flat geometry).
The application is minimalistic as it only shows your trace or trajectory as you move around.
Hopefully, this is enough to give you a feel of that space.</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">
    <img class="image image--xl" src="/assets/petit-poucet-screenshot.png" />
	</a>
  </div>
  <div class="item__content">
    <div class="item__header">
      <h4>Try the app!</h4>
    </div>
    <div class="item__description">
	  <a class="button button--primary button--pill" href="/dist/">Go to app</a>
    </div>
  </div>
</div>

<p>First we will present the application and explain how to use it.
Next we will introduce a small movement or “dance” and use it as a tool to test the different spaces, both inside and outside of the app.
In the final words, I argue that spacetime might not be as abstract as it  seem, as we do observe it.</p>

<p>A note about the name: “le Petit Poucet” or the “Little Thumbling” is a children story by Charles Perrault where a young kid uses small rocks to find his way into the forest, much like we use the colorful thread of the spider in the app.</p>

<h2 id="i---how-to-use-the-web-app">I - How to use the web app?</h2>

<p>At the beginning the space is empty and everything is black.
But as we move around, we trace a mark on the space that we can see.
The idea is to roam around and see how the trace changes as we move in different spaces.</p>

<h3 id="i1---controls">I.1 - Controls</h3>

<p>The app main action is to <strong>move around</strong>, using:</p>
<ul>
  <li>the <code class="language-plaintext info highlighter-rouge">arrow keys</code> for moving up/down and left/right</li>
  <li>the <code class="language-plaintext info highlighter-rouge">a</code> and <code class="language-plaintext info highlighter-rouge">d</code>  keys to turn around ourselves</li>
</ul>

<p>Additionnally, we have some <strong>controls</strong> on the left hand side menu:</p>
<ul>
  <li>The <code class="language-plaintext warning highlighter-rouge">Reset</code> button allows to clear the trace.</li>
  <li>The <code class="language-plaintext warning highlighter-rouge">Change</code> button allows to change the space we are currently on.</li>
</ul>

<h3 id="i2---available-spaces">I.2 - Available spaces</h3>

<h4 id="sphere">Sphere</h4>

<div class="item">
  <div class="item__image">
	<a href="https://en.wikipedia.org/wiki/Spherical_geometry">
    <img class="image image--sm" src="/assets/spherical.webp" />
	</a>
  </div>
  <div class="item__content">
    <div class="item__description">
        <ul>
<li>As the name suggests, this is just the geometry you would encounter if you were actually living on a ball</li>
<li>It is "bounded": going very far in any direction for about 30 seconds, you should come back where you came from.</li>
<li>Try to make parallel lines, is it possible?</li>
        </ul>
    </div>
  </div>
</div>

<h4 id="flat-plane">Flat Plane</h4>

<div class="item">
  <div class="item__image">
	<a href="https://en.wikipedia.org/wiki/Euclidean_geometry">
    <img class="image image--sm" src="/assets/flat.webp" />
	</a>
  </div>
  <div class="item__content">
    <div class="item__description">
        <ul>
<li> This is the usual geometry of a flat plane, as we experience for example on flat soccer field.</li>
<li> It is unbounded: we can go forward infinitely without coming back on our tracks.</li>
<li>
Try to make parallel lines, observe that it is possible and that there is a single parallel to line passing by a given point.
	
	This is also called Euclid parallel's postulate. 
</li>
        </ul>
    </div>
  </div>
</div>

<h4 id="hyperbolic-plane">Hyperbolic Plane</h4>

<div class="item">
  <div class="item__image">
	<a href="https://en.wikipedia.org/wiki/Euclidean_geometry">
    <img class="image image--sm" src="/assets/hyperbolic.webp" />
	</a>
  </div>
  <div class="item__content">
    <div class="item__description">
        <ul>
<li>
 Hyperbolic plane looks everywhere like the middle of a saddle (pictured left).
	However it does not globally look like a saddle, actually there is no surface that we can picture in our geometry that has the shape of hyperbolic space.
</li>
<li>
	It is unbounded: going forward, you never come back where you started no matter how long you go.</li>
<li>
 Try to make parallel lines 
</li>
<li>
 Make two different parallel lines going through the same point, showing that Euclid parallel's postulate fails in this geometry
</li>
        </ul>
    </div>
  </div>
</div>
<h2 id="ii---application-making-a-square">II - Application: Making a square</h2>

<p>A question which might be of interest, would be to determine the type of space we are in (spherical, flat or hyperbolic) without looking at the menu.
There are of course many ways to do that, as the spaces are quite different, but here we will propose a simple solution, based on a little square “dance”.</p>

<h3 id="ii1---the-square-in-the-app">II.1 - The square in the app</h3>

<p>You can make a square in any of the proposed spaces in the following way:</p>

<div class="item">
  <div class="item__image">
	<a href="/dist/">
    <img class="image image--l" src="/assets/spherical-square.gif" />
	</a>
  </div>
  <div class="item__content">
    <div class="item__header">
      <h4>How to make a square</h4>
    </div>
    <div class="item__description">
		<ol>
<li> Go forward (up arrow)</li>
<li> Go right (right arrow)</li>
<li> Go backward (down arrow)</li>
<li> Go left (left arrow)</li>
		</ol>
Each movement can be relatively small, like a few seconds each.
    </div>
  </div>
</div>

<p>What do you observe? It depends on the space you are in:</p>

<ul>
  <li><em>spherical geometry</em> -&gt; you end up facing <em>inside the square</em></li>
  <li><em>flat geometry</em> -&gt; you end up right where you started</li>
  <li><em>hyperbolic geometry</em> -&gt; you end up facing <em>outside the square</em></li>
</ul>

<div class="grid-container">
  <div class="grid grid--p-3">
    <div class="cell cell--4"><div>
    	<img class="image image--l" src="/assets/spherical-square.png" />
		<p><i>Spherical</i></p>
	</div></div>
    <div class="cell cell--4"><div>
    	<img class="image image--l" src="/assets/flat-square.png" />
		<p><i>Flat</i></p>
	</div></div>
    <div class="cell cell--4"><div>
    	<img class="image image--l" src="/assets/hyperbolic-square.png" />
		<p><i>Hyperbolic</i></p>
	</div></div>
  </div>
</div>

<p>The flat geometry example is just what you would expect intuitively.
After finishing the square, we are facing exactly in the same direction that we started with.<br />
In spherical geometry, when we come back after the square, we have also rotated towards the inside of the square.
Correspondingly, hyperbolic geometry rotates in the other direction.</p>

<p class="info">A <strong>technical note</strong> for mathematicians (feel free to skip this):<br />
The “square dance” is related to the <strong>commutators</strong> of the underlying Lie group of each geometry.
Writing \(T_x\) for the translation in the x-axis, and $T_y$ for the y-axis translation, the orientation at the end of the square dance is given by $T_xT_yT_x^{-1}T_y^{-1}$.<br />
Considering smaller and smaller translations, then passing to the limit, we can also show that this information is  contained in the <em>lie bracket</em> $[D_x, D_y]$, where $D_x$ and $D_y$ are the Lie vectors corresponding to translation in the x and y direction respectively.<br />
So there is a direct link between this “square dance”, and the structure coefficients of the underlying Lie algebra, which define the geometry (up to a few details), according to the <a href="https://en.wikipedia.org/wiki/Lie_group%E2%80%93Lie_algebra_correspondence#Proof_of_Lie's_third_theorem`">Lie group-Lie algebra correspondence</a> and the <a href="https://en.wikipedia.org/wiki/Klein_geometry">Erlangen program</a>.</p>

<p>So this simple square dance is a convenient tool to determine in which geometry we are in.
But we can also do it in our space time, what does it reveal then?</p>

<h3 id="ii2----the-square-in-real-life">II.2  - The square in real life</h3>

<p>I invite you to get up of your chair, finding a suitable area, for example facing straight at a wall, and then doing the four steps of the square outlined above.
Of course, when you are finished, you observe that you are facing straight at the wall again.
This observation has nothing stupid, as we’ve seen, in different geometries, we would have rotated at the end of the square, so that we would be facing the wall with an angle.</p>

<p>In other words, by doing this simple square dance, we have observed something of our spacetime.
Mathematicians call this property we have juste observed “flatness”.<br />
A big part of science is putting complicated names on simple phenomena.
Now you can impress your friends too; instead of saying “moving in a square” you can say “performing an experience of the flatness of spacetime”.</p>

<h2 id="final-words-can-we-look-at-spacetime">Final words: can we look at spacetime?</h2>

<p>Of course when we look around, we can see events or objects <em>in spacetime</em>, but we can we see spacetime <em>itself</em>?<br />
When you do the “square dance”, you observe coming back exactly where you started, which is something very special of our geometry.
We can argue that this is indeed “looking at spacetime”.<br />
Perhaps it would be better to say “perceiving spacetime” rather than looking because the “square dance” experiment involves moving and looking, so that the perception of spacetime requires both visual as well as muscular sensations.</p>

<p>Do let me know your thoughts and if any cool things/issues happenned with the app!</p>

<p>Hyperbolic bye!!
<img src="/assets/hyperbolic-bye.png" alt="Hyperbolic bye" /></p>]]></content><author><name>Emmanuel Blonkowski</name><email>spacetime.appreciation@gmail.com</email></author><category term="spacetime" /><category term="petit poucet app" /><category term="hyperbolic" /><category term="spherical" /><category term="geometry" /><category term="expository" /><category term="square dance" /><summary type="html"><![CDATA[What does it feel like to live in hyperbolic space? Here we have a simple app where you can move in different spaces (including hyperbolic, spherical, and flat geometry). The application is minimalistic as it only shows your trace or trajectory as you move around. Hopefully, this is enough to give you a feel of that space.]]></summary></entry></feed>