Native vs Logical
TL;DR :: logical -> esolangs
I think there is an important distinction to be made between different types of physical analogs. There are Native analogs and there are Logical analogs.
- Written in the real world
- Directly executed in the real world
- eg Dominoes
- May be written in the real world
- Executed via logic
- Not executed in the real world
- eg Chess
This code has to be executed in the real world or a simulation of the real world. For example, dominoes can get complex and require the real world in order to execute. You can simulate dominoes or you can simulate the real world but these simulations are simplifications. Whereas for Logical analogs you can actually have an exact implementation in the real world.
These Logical analogs can be written in the real world, but the are not executed in the real world. They are compiled via a series of rules/constraints/assumptions into a sequence of executable steps. What makes this different from Native is that these executable steps could be executed via a normal everyday interpreter and are independent of the real world. I think we should encourage Logical analog solutions to create a normal esolang.
Lets make a physical analog from tic-tac-toe. Rules:
- The opponent is a perfect logician
- If two squares are equally strategic, he will choose the lower and then the left most
- A win is equivalent to ...
- A loss is equivalent to ...
- A cats game is a ...
- Input is given by ...
Is this Native or Logical? The first bullet point tell us that the logician is the compiler, he executes the program and not the real world, so this is a Logical analog. Since the logicians steps have to be precisely laid out, we could write a Python interpreter to act as the logician and run the code for us. Instead of taking input and giving output in the real world, it is much easier to create a normal esolang for tic-tac-toe. Give the interpreter input like this:
a | b | c
d | e | f
g | h | i
and Python will execute the logical steps and return some output.
Logical analogs should be implemented as esolangs. It makes verification easier and it just makes sense. Thus the set of problematic physical analogs has been reduced to Native ones.