(0) CHARACTERISTICS
-type specified: tl
-features: deterministic, non-parameterized
-foreign types:
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Result Type | INSERT | tl:VO | int:V | | ALTER | tl:VO | int:V | | DELETE | tl:V | | | EXLEFT | tl:V | | bool | EXRIGHT | tl:V | | bool | OUT | tl:V | | bool | GOLEFT | tl:VO | | | GORIGHT | tl:VO | | | CURRENT | tl:V | | int | |
---|
(2) CANONICAL TRACES
canonical(T) m,n:<int>; a[1]..a[n]:<int> [T = [INSERT(*, a[i])]i=1..m.[GOLEFT(*)]i=1..n m n](3) SEMANTICS
ACCESS-PROGRAMSLegality(INSERT((n, T), a)) = %legal%
INSERT((n, T) , a) =
Condition | Value |
---|---|
T = _ | INSERT(*, a) |
T _ | S1.INSERT(*, a).S2.S3 where S1,S2,S3:<tl>; k:<int>; c[1]..c[k]:<int> [T = S1.S2.S3 S2 = [INSERT(*, c[i])]i=1..k S3 = [GOLEFT(*)]i=1..k ] |
Legality(ALTER((n, T), b)) =
Condition | Value |
---|---|
count(T, "INSERT") = count(T, "GOLEFT") | %nocurrent% |
count(T, "INSERT") > count(T, "GOLEFT") | %legal% |
ALTER((n, T) , b) = S1.INSERT(*, aa).S2.S3 where S,S1,S2,S3:<tl>; aa,k:<int>; a[1]..a[k]:<int> [T = S.S1.S2.S3 S1 = INSERT(*, aa) S2 = [INSERT(*, a[i])]i=1..k S3 = [GOLEFT(*)]i=1..k ]
Legality(DELETE(T)) =
Condition | Value |
---|---|
count(T, "INSERT") = count(T, "GOLEFT") | %nocurrent% |
count(T, "INSERT") > count(T, "GOLEFT") | %legal% |
Legality(EXLEFT(T)) = %legal%
EXLEFT(T) = count(T, "INSERT") > count(T, "GOLEFT")
Legality(EXRIGHT(T)) = %legal%
EXRIGHT(T) = count(T, "GOLEFT") > 0
Legality(OUT(T)) = %legal%
OUT(T) = count(T, "INSERT") = count(T, "GOLEFT")
Legality(GOLEFT((n, T))) =
Condition | Value |
---|---|
count(T, "INSERT") = count(T, "GOLEFT") | %noleft% |
count(T, "INSERT") > count(T, "GOLEFT") | %legal% |
GOLEFT((n, T) ) = T.GOLEFT(*)
Legality(GORIGHT((n, T))) =
Condition | Value |
---|---|
count(T, "GOLEFT") = 0 | %noright% |
count(T, "GOLEFT") > 0 | %legal% |
GORIGHT((n, T) ) = T1 where T1:<tl> [T = T1.GOLEFT(*) ]
Legality(CURRENT(T)) =
Condition | Value |
---|---|
count(T, "INSERT") = count(T, "GOLEFT") | %nocurrent% |
count(T, "INSERT") > count(T, "GOLEFT") | %legal% |
CURRENT(T) = aa where S,S1,S2,S3:<tl>; aa,k:<int>; a[1]..a[k]:<int> [T = S.S1.S2.S3 S1 = INSERT(*, aa) S2 = [INSERT(*, a[i])]i=1..k S3 = [GOLEFT(*)]i=1..k ]