# [Relog](https://github.com/andrew-johnson-4/InPlace/wiki) An implementation of several strongly-normalizing string rewriting systems # Relog (Reduction Logic) Flavor ```relog a = Int; List ---output---- List A> = A>; R ---output------------------- R A := R; A ---output---------- R Print<"hello world"> ---output----------- [stdout]hello world 0 For > ---output------------------------------ [stdout]99 bottles of beer on the wall ... 0 ``` ## Relog Syntax Relog is a type system, not a programming language. It is not Turing Complete, it is Strongly Normalizing. The basic syntax of a Relog program is defined by unifications, followed by a result. Unifications have a left-hand-side and a right-hand-side separated by an equal sign with a semicolon after each unification: ``` Pair = Pair; ``` Results are a single term and can reference unification variables bound by previous actions: ``` Pair ``` An example program might represent the application of a function `a -> Maybe` with argument `Int` which would look like below: ``` a = Int; Maybe ``` when running this program the unification will bind `Int` to `a` and return the result `Maybe`. ## Relog Type System ![Reduction](https://github.com/andrew-johnson-4/InPlace/blob/main/unifyreify.png) $$apply \ \ \frac{unify(f,fx)⊢r}{f⇻r⊢reify(apply(r))}$$