- Source: Iota and Jot
In formal language theory and computer science, Iota and Jot (from Greek iota ι, Hebrew yodh י, the smallest letters in those two alphabets) are languages, extremely minimalist formal systems, designed to be even simpler than other more popular alternatives, such as lambda calculus and SKI combinator calculus. Thus, they can also be considered minimalist computer programming languages, or Turing tarpits, esoteric programming languages designed to be as small as possible but still Turing-complete. Both systems use only two symbols and involve only two operations. Both were created by professor of linguistics Chris Barker in 2001. Zot (2002) is a successor to Iota that supports input and output.
Note that this article uses Backus-Naur form to describe syntax.
Universal iota
Chris Barker's universal iota combinator ι has the very simple λf.fSK structure defined here, using denotational semantics in terms of the lambda calculus,
From this, one can recover the usual SKI expressions, thus:
Because of its minimalism, it has influenced research concerning Chaitin's constant.
Iota
Iota is the LL(1) language that prefix orders trees of the aforementioned Universal iota ι combinator leafs, consed by function application ε,
so that for example 0011011 denotes
(
(
ι
ι
)
(
ι
ι
)
)
{\displaystyle ((\iota \iota )(\iota \iota ))}
, whereas 0101011 denotes
(
ι
(
ι
(
ι
ι
)
)
)
{\displaystyle (\iota (\iota (\iota \iota )))}
.
Jot
Jot is the regular language consisting of all sequences of 0 and 1,
The semantics is given by translation to SKI expressions.
The empty string denotes
I
{\displaystyle I}
,
w
0
{\displaystyle w0}
denotes
(
(
[
w
]
S
)
K
)
{\displaystyle (([w]S)K)}
,
where
[
w
]
{\displaystyle [w]}
is the translation of
w
{\displaystyle w}
,
and
w
1
{\displaystyle w1}
denotes
(
S
(
K
[
w
]
)
)
{\displaystyle (S(K[w]))}
.
The point of the
w
1
{\displaystyle w1}
case is that the translation satisfies
(
(
[
w
1
]
A
)
B
)
=
(
[
w
]
(
A
B
)
)
{\displaystyle (([w1]A)B)=([w](AB))}
for arbitrary SKI terms
A
{\displaystyle A}
and
B
{\displaystyle B}
.
For example,
[
w
11100
]
=
(
(
[
w
1110
]
S
)
K
)
=
(
(
(
(
[
w
111
]
S
)
K
)
S
)
K
)
=
(
(
(
[
w
11
]
(
S
K
)
)
S
)
K
)
=
(
(
[
w
1
]
(
(
S
K
)
S
)
)
K
)
=
(
[
w
]
(
(
(
S
K
)
S
)
K
)
)
=
(
[
w
]
K
)
{\displaystyle [w11100]=(([w1110]S)K)=(((([w111]S)K)S)K)=((([w11](SK))S)K)=(([w1]((SK)S))K)=([w](((SK)S)K))=([w]K)}
holds for arbitrary strings
w
{\displaystyle w}
.
Similarly,
[
w
11111000
]
=
(
(
(
(
(
(
[
w
11111
]
S
)
K
)
S
)
K
)
S
)
K
)
=
(
[
w
]
(
(
(
(
(
S
K
)
S
)
K
)
S
)
K
)
)
=
(
[
w
]
S
)
{\displaystyle [w11111000]=(((((([w11111]S)K)S)K)S)K)=([w](((((SK)S)K)S)K))=([w]S)}
holds as well.
These two examples are the base cases of the translation of arbitrary SKI terms to Jot given by Barker,
making Jot a natural Gödel numbering of all algorithms.
Jot is connected to Iota by the fact that
[
w
0
]
=
(
ι
[
w
]
)
{\displaystyle [w0]=(\iota [w])}
and by using the same identities on SKI terms for obtaining the basic combinators
K
{\displaystyle K}
and
S
{\displaystyle S}
.
Zot
The Zot and Positive Zot languages command Iota computations, from inputs to outputs by continuation-passing style, in syntax resembling Jot,
where 1 produces the continuation
λ
c
L
.
L
(
λ
l
R
.
R
(
λ
r
.
c
(
l
r
)
)
)
{\displaystyle \lambda cL.L(\lambda lR.R(\lambda r.c(lr)))}
,
and 0 produces the continuation
λ
c
.
c
ι
{\displaystyle \lambda c.c\iota }
,
and wi consumes the final input digit i by continuing through the continuation w.
See also
Lambda calculus
Combinatory logic
Binary combinatory logic
SKI combinator calculus
References
External links
Official website
Barker, Chris. "Iota and Jot: the simplest languages?". The Esoteric Programming Languages Webring. Archived from the original on 23 August 2016. Retrieved 13 August 2004.
https://esolangs.org/wiki/Iota
https://esolangs.org/wiki/Jot
https://esolangs.org/wiki/Zot
Kata Kunci Pencarian:
- Iota and Jot
- Iota
- Tittle
- Lambda calculus
- Iota (disambiguation)
- SKI combinator calculus
- Jot
- Unlambda
- Brainfuck
- Binary combinatory logic