Graphomata Semantics and Encoding
Data Model
M = (G(V,E), R) where
0 ∉ V
E ⊆ V×V\{(v,v)|v∈V}
R : {0,1,…,7} → V∪{0}
R(0) = 0
Commands
C = {Nr}∪{Ls,t}∪{Us,t}∪{Wr}∪{Js,t}∪{Ts,t} where
r,s,t ∈ {0,1,…,7}
T : ℳ×C ⇀ ℳ mapping (M,c)↦M' and
F : ℳ×C ⇀ {0,1} mapping (M,c)↦f defined according to
| Command | Defined for | Result (M') | Result (f) |
|---|---|---|---|
| Nr | r≠0 | (G'(V',E), R') where
v ∉ V∪{0}
R'(r)=v
R'(s)=R(s) ∀s≠r
and
V'=V∪{v} if ∃u∊V (R(r),u)∈E or (u,R(r))∈E
or ∃s≠r R(s)=R(r)
V'=V∪{v}\{R(r)} otherwise
| 0 |
| Ls,t | R(s),R(t)≠0 R(s)≠R(t) (R(s),R(t))∉E |
(G'(V,E'), R) where
E'=E∪{(R(s),R(t))}
| |
| Us,t | (R(s),R(t))∈E | (G'(V,E'), R) where
E'=E\{(R(s),R(t))}
| |
| Wr | r≠0 R(r)≠0 |
(G'(V',E), R') where
R'(r)=u where (R(r),u)∈E if ∃u∊V (R(r),u)∈E
R'(r)=0 otherwise
and
R'(s)=R(s) ∀s≠r
and
V'=V if ∃u∊V (R(r),u)∈E or (u,R(r))∈E
or ∃s≠r R(s)=R(r)
V'=V\{R(r)} otherwise
| |
| Js,t | s≠0 | (G'(V',E), R') where
R'(s)=R(t)
R'(r)=R(r) ∀r≠s
and
V'=V if s=t
or ∃u∊V (R(s),u)∈E or (u,R(s))∈E
or ∃r≠s R(r)=R(s)
V'=V\{R(s)} otherwise
| |
| Ts,t | (G(V,E), R) |
0 if R(s)=R(t)
1 if R(s)≠R(t)
|
Program
P = ((c0,c1,…,cn-1), N, N') where
∀i ci∈C
N : {0,1,…,n-1} → {-1,0,1,…,n-1}
N': {0,1,…,n-1} ⇀ {-1,0,1,…,n-1} defined over {i|∃s,t ci=Ts,t}
Program State
(M, I) where
M = (G(V,E), R)
I ∈ {-1,0,1,…,n-1}
* Initially, I=min(0,n-1).
Transition Function
(M, I) ↦ (M', I') where
M' = T(M,cI)
and
I' = N(I) if F(M,cI)=0
I' = N'(I) if F(M,cI)=1
* Program halts when I=-1.
Encoding Grammar
program → sequence
sequence → unconditional sequence
| conditional t-sequence f-sequence
| ordinal
| -1
unconditional → N-or-W r-register
| L-or-U-or-J s-register t-register
conditional → T s-register t-register
N-or-W → N | W
L-or-U-or-J → L | U | J
register → a | b | … | h
ordinal → number i where 0≤i≤k-1 and k = number of commands encoded thus far
Command Encoding
c∈C is encoded with a sequence of 2-3 characters, starting with
N if c=Nr
L if c=Ls,t
U if c=Us,t
W if c=Wr
J if c=Js,t
T if c=Ts,t
and followed by one (r) or two (s then t)
a if r=1, s=1 or t=1
b if r=2, s=2 or t=2
⋮
g if r=7, s=7 or t=7
h if r=0, s=0 or t=0
Program Encoding
P = ((c0,c1,…,cn-1), N, N') is encoded as follows:
procedure EncodeProgram(c, N, N')
A := []
procedure EncodeSequence(i)
if i=-1 then
EncodeNumber(-1)
else if exists A[k] such that A[k]=i then
EncodeNumber(k)
else
EncodeCommand(c[i])
k := |A| ; A[k] := i
EncodeSequence(N(i))
if exist s,t such that c[i]=Ts,t then EncodeSequence(N'(i))
end if
end procedure
EncodeSequence(min(0,n-1))
end procedure
* Array subscripts start at 0.
* P is canonical iff after encoding, A[i]=i for 0≤i≤n-1. Every program P
has an equivalent program PC that is canonical. Programs P and P' are
equivalent iff PC=P'C.
Program Parsing
An encoded program can be parsed into a canonical program
P = ((c0,c1,…,cn-1), N, N') as follows:
procedure ParseProgram(Lexer, c, N, N')
function ParseSequence()
let k := |c|
token := Lexer.NextToken()
if -1≤token≤k-1 then
return token
else
c[k] := ParseCommand(token)
N(k) := ParseSequence()
if exist s,t such that c[k]=Ts,t then N'(k) := ParseSequence()
return k
end if
end function
c := []
ParseSequence()
end procedure
* Array subscripts start at 0.
* Lexer treats comments surrounded by square brackets […] as whitespace;
nesting is not supported.
Example Program 1
P = ((N1,N2,L1,2,N2), N, N') where
N(0) = 1
N(1) = 2
N(2) = 3
N(3) = -1
N'(i) is undefined ∀i
* Encoding: Na Nb Lab Nb -1
* P is canonical.
Initial state: ((G(V,E), R), I) where
V = ∅
E = ∅
R(r) = 0 ∀r
I = 0
Terminal state: ((G'(V',E'), R'), I') where
V' = {v1,v2,v3}
E' = {(v1,v2)}
R'(1) = v1
R'(2) = v3
R'(r) = 0 ∀r≠1,2
I' = -1
Example Program 2 (Control Flow)
P = ((J2,1,W1,T1,0,U2,1), N, N') where
N(0) = 1
N(1) = 2
N(2) = -1
N(3) = 0
N'(2) = 3
N'(i) is undefined ∀i≠2
* Encoding: Jba Wa Tah -1 Uba 0
* Indented encoding:
Jba Wa Tah
-1
Uba 0
* P is canonical.
Initial state: ((G(V,E), R), I) where
V = {v1,v2,…,vm}
E' = {(v1,v2),(v2,v3),…,(vm-1,vm)}
R(1) = v1
R(r) = 0 ∀r≠1
I = 0
Terminal state: ((G'(V',E'), R'), I') where
V' = {vm}
E' = ∅
R'(2) = vm
R'(r) = 0 ∀r≠2
I' = -1
Example Program 3 (Nondeterminism)
P = ((W1), N, N') where
N(0) = -1
N'(0) is undefined
* Encoding: Wa -1
* P is canonical.
Initial state: ((G(V,E), R), I) where
V = {v1,v2,v3}
E' = {(v1,v2),(v1,v3)}
R(1) = v1
R(r) = 0 ∀r≠1
I = 0
Terminal state: ((G'(V,E), R'), I') where
G' = G
Either R'(1) = v2 or R'(1) = v3
R'(r) = 0 ∀r≠1
I' = -1