Turing-Complete Language Interpreter A challenge I thought that would be very cool is to make an interpreter for a Turing-complete language of your choosing.

The rules are simple:


You may use any language to create this interpreter even if it is newer than this challenge.
You may use any Turing-complete language as long as it is not the same as the one you are writing it with.
You may not simply evaluate code for example use eval functions.
An explanation of how you approached this will be nice but not required.
This will be scored in bytes.
Each submission must be fully working that means that every feature that your chosen language has must be present.


To be put simply:

Your task is to create a working interpreter for any Turing-complete language with any language of your choosing.

Good luck!
Brachylog (2) → Post correspondence problem, 9 bytes

~h=∋ᵐ\cᵐ=


Try it online!

Input is a list of lists of strings. (In the Post correspondence problem as defined on Wikipedia, the inner lists have two elements each, although this program can actually handle a generalisation to any number of elements.) This program brute-forces solutions to the problem, in order of length, until a solution is found. The Post correspondence problem is known to be able to simulate a Turing-machine, and thus brute-forcing solutions to it is Turing complete. If run as a function, rather than a program, it actually produces meaningful output as well.

The program in the TIO link above is [["a","baa"],["ab","aa"],["bba","bb"]], which I copied from Wikipedia. The solution (which the program finds fairly quickly) is ["bbaabbbaa","bbaabbbaa"].

Explanation

This is pretty much just a direct translation of the Post correspondence problem to Brachylog.

~h=∋ᵐ\cᵐ=
~h         Find {the shortest possible} list which starts with {the input}
  =        and for which all elements are equal
   ∋ᵐ      such that taking an element of each element,
     \cᵐ   and concatenating elements in corresponding positions,
        =  produces a list all of whose elements are equal.


Basically, we create a list that's repeated copies of the input (as few as possible, meaning that we don't miss any possibilities when brute-forcing), take one element from each copy, then concatenate corresponding elements (as in the Post correspondence problem).