WORK IN PROGRESS, BRAIN DUMP OF CONCEPTS

================================ NEW ATTEMPT ===================================

=== CONCEPT OF A UNIVERSAL CONLANG ===

This is an attempt at coming up with a way of how to create a constructed
language for communication of living beings that are possibly not only humans
but perhaps aliens quite different from us, a language whose definition is
firm and stays unchanged over ages -- something that's very hard or even
seeming impossible due to fuzziness and only intutive/learned semantics of any
traditional language. The most difficult question is how to define semantics
of terms such as "though", "life", "to be", "to exist", "consider"... even
relatively simple words like "dog" are hard to capture, defining the word by
translation from another language will tie the definition to another language
that's changing, using a picture is unclear -- a picture of a dog doesn't say
if we mean just the specific dog in the picture, any animal similar to the one
in the picture (and HOW similar?), dog as a species (what does species even
mean) etc.

This is more of a recorded thought process than an attempt at creating a real
language, the purpose is to explore the WAY in which such a language could
eventually be made.

Let's divide the process in these phases:

1. FOUNDATIONS: Defining the underlying principles on which the language is
   built, such as the model of a world it considers etc. For now we may do this
   in our current language, English and math.
2. ABSTRACT LANGUAGE: Here we build a language based on the principles, i.e. we
   define specific words and their meanings so that they can already form
   structures usable for communcation. However we still do this in a way that's
   abstract, i.e. still using some intermeniate notation, for example English
   and math. After this step we will have meanings of words but not the actual
   words.
3. SPECIFIC LANGUAGE: Here we take the abstract definition and turn it to a
   concrete language, i.e. one with its own sounds (or similar physical ways of
   communication), possibly something like a writing system etc. Of course we
   may create several languages from the same abstract language if we want.

1. FOUNDATIONS:

The basic idea:
  1. We create a model of simple mathematical world -- here we choose a 3D grid
     of discrete values in which cells can talk (emit strings of language).
  2. We create a function that takes a talking cell on its input and decides
     (returns true or false) if the language is used correctly or not. By this
     we separate instances of the model in which cells use the language
     correctly and those where they don't. By examining the function one can
     deduce the correct use of the language, meaning of each word in context of
     the mathematical world.
  3. If we now find a correspondence between our abstract model and real world
     (e.g. cells = beings, Z-axis = time, ...), we can use the language in the
     real world too.

For example: if a cell is emitting a sentence that's a question, the verifying
function will check if at the time of this there is any living cell (what's
living will be further defined in the language) nearby to hear the question,
as asking a question without anyone around is incorrect use of the language.
Similarly if a cell is emitting an answer, there must have been another cell
emitting a question nearby in the previous moment, otherwise the language is
used incorrectly. By this we can precisely convey what it means to ask and
answer. And so on.

The world: we consider a world to be an arbitrarily large three dimensional grid
of discrete values (e.g. natural numbers, but without ordering etc.). We will
see X and Y dimensions as spatial, Z as temporal. Furthermore each cell (any
[X,Y,Z] coordinate) MAY (or may not) be emitting a string, meaning it is
communicating.

TODO

2. ABSTRACT LANGUAGE:

is_correct(SENTENCE, X, Y, Z): // the main function

  if (not(is_individual(world[X,Y,Z]))) // non-individuals (e.g. walls) mustn't talk
    return false

  TODO


is_individual(TYPE): // kind of "living being"
  TODO: continuously exists in time in exactly one instance, i.e. there is
  exactly only one instance of this cell at any time, except for before its
  birth and after its death, when there are zero


TODO


================================ OLD ATTEMPT ===================================

=== CONCEPT OF A UNIVERSAL CONLANG ===

This is an attempt at coming up with a way of how to create a constructed
language for communication of living beings that are possibly not only humans
but perhaps aliens quite different from us, a language whose definition is
firm and stays unchanged over ages -- something that's very hard or even
seeming impossible due to fuzziness and only intutive/learned semantics of any
traditional language. The most difficult question is how to define semantics
of terms such as "though", "life", "to be", "to exist", "consider"... even
relatively simple words like "dog" are hard to capture, defining the word by
translation from another language will tie the definition to another language
that's changing, using a picture is unclear -- a picture of a dog doesn't say
if we mean just the specific dog in the picture, any animal similar to the one
in the picture (and HOW similar?), dog as a species (what does species even
mean) etc.

This is more of a recorded thought process than an attempt at creating a real
language, the purpose is to explore the WAY in which such a language could
eventually be made.

Let's divide the process in these phases:

1. FOUNDATIONS: Defining the underlying principles on which the
  language is built, such as the model of a world it considers etc. For now we
  may do this in our current language, English and math.
2. ABSTRACT LANGUAGE: Here we build a language based on the
  principles, i.e. we define specific words and their meanings so that they
  can already form structures usable for communcation. However we still do this
  in a way that's abstract, i.e. still using some intermeniate notation, for
  example English and math. After this step we will have meanings of words but
  not the actual words.
3. SPECIFIC LANGUAGE: Here we take the abstract definition and
  turn it to a concrete language, i.e. one with its own sounds (or similar
  physical ways of communication), possibly something like a writing system
  etc. Of course we may create several languages from the same abstract language
  if we want.

=== 1: FOUNDATIONS

The basic idea of how to create firmly defined semantics is this: create a
formal mathematical model of a world -- in this case a very simple one -- then
create a language for this world. If we then find correspondence between our
physical reality and our abstract mathematical world, we can use the language
we have created also for our physical reality. The aliens can do the same as
long as they find correspondences between the "toy universe" and their universe.

THE WORLD: for simplicity we will consider a world to be an infinite 3D grid,
an infinite three dimensional "array" of natural numbers.

Note: two dimensions (X and Y) will be seen as spatial and one (Z) being seen
as temporal (representing time). The fact one dimension represents time is not
inherently part of the world's definition, but we will later try to view the
world as if it is, so we mention it here just to help us form the correspondence
of the world model to our physical reality. Similarly the natural number 0 is
seen as "void", "non presence". Other such concepts will emerge as we'll be
defining actual patterns.

PATTERN: pattern is a computable set (potentially infinite) of FINITE 3D grids
of natural numbers, i.e. we may imagine it as a function that takes any
subspace (MxNxO sized, if any M, N and/or O is zero, all sizes are taken to
be zero) of the world and outputs TRUE or FALSE, saying whether
the pattern is present or not. Initial, most essential patterns may be defined
mathematically, e.g. in a programming language, further patterns should be
defined by using already defined patterns so as to make the language as much
as possible "self-hosted", "self-contained".

PATTERN GENERATORS: can be seen as a way to automatically make new patterns from
already existing patterns, e.g. a NOT operator automatically
makes a negation of any pattern -- if we have pattern X, NOT(X) is exactly every
pattern that is not X.

=== 2: ABSTRACT LANGUAGE

TODO: show it's turing complete

TODO:
- patterns to make:
  - "void"/"empty": any subspace that's solely composed of 0s
  - "walk": 
  - numbers: infinitely many patterns, each one representing a number and
    matching subspaces that contain that many non-zero cells
  - kind numbers: same as numbers but count how many distinct numbers there
    exist in the subspace
- pattern operators:
  - "then": takes patterns X and Y, matches if the subspace can be split in
    the temporal dimension so that lower part matches X and upper part mathes Y

pattern generators:
  NOT(P): matches exactly every pattern that doesn't match P
  AND(P1,P2): matches any pattern that simultaneously matches P1 and P2
  OR(P1,P2): matches any pattern that matches P1, P2 or both
  THEN(P1,P2): matches any pattern that can be split in the Z direction so that
    the bottom one (under this Z) matches P1 and the upper one matches P2
  REVERSE(P): matches any pattern that if flipped vertically (in Z direction)
    matches P
  ISOLATE_N1_N2_N3_...(P): matches any pattern that if all cells not being
    N1, N2, N3, ... are replaced with zero, matches P

  EACH_MOMENT(P): matches any pattern which if slices into individual Z
    "moments", each one matches P

  todo: more

pattern definitions:

  NOTHING: matches only empty pattern (0x0x0)
  VOID: pattern that doesn't have cells > zero, i.e. even NOTHING
  MOMENT: any pattern that has Z size of 1


  NUMBER_0: VOID
  
  numbers: WIP, ideas:
    - maybe make patterns like COUNT_TYPES_N, COUNT_CELLS_N, COUNT_TIME_N etc.,
      matching patterns with N distinct type of cells, N cells total, N size
      in Z direction respectively etc.
    - then make general patterns NUMBER_N, each of which is OR of all the above,
      i.e. generalized the concept of a number to match any pattern where number
      N is present in any form (be it number of cells, numbers of cell types,
      size of the pattern itself etc.)?

  EMERGENCE: THEN(VOID,NOT(VOID))
  DISAPPEARANCE: REVERSE(EMERGENCE)
  MOVEMENT: todo, idea: there have to be cells moving over time, e.g. in
    4 neighbourhood
  MOVEMENT8: todo, like MOVEMENT but with 8 neighbourhood?
  SLOW_MOVEMENT: todo, like movement but limit the speed
  STILLNESS: NOT(MOVEMENT)
  KILL: todo, idea: cell close to another makes another disappear
  GROWTH: todo, idea: cells create cells of same type in their neighbourhood
  REPRODUCTION: todo, idea: cell spawns a cell of the same type in its
    neighbourhood
  CHASE: todo
  CENTER: todo, has non-zero exactly on center cell?
  EAST, WEST, NORTH, SOUTH: todo, idea: match only if there is something in
    corresponding half of the pattern

  LIFE: todo, this will be hard :)

  potentially very hard:
    SADNESS, HAPPINESS, THOUGHT, LOVE, HATE etc.

  todo: more

=== 3: SPECIFIC LANGUAGE

TODO
