STLP Type Statements [[[n,f], [[t,predicatename],[t,list1]]]] can have multiple type statements per line, e.g.[[n,list1],[[[n,list],[[t,number]]]]], [[n,j],[[[n,brackets],[[t,letter]]]]] - may timeout on infinite loops Type statements may be across multiple lines, especially when types are reused in different lines. Checks type statements are correct, with terminals, etc. Checks that there there is a type statement with the right name and arity before each predicate (and that extra type statements, e.g. before base cases have the correct name and arity). When running, finds corresponding type statement and checks the call's types, then runs the call. predicate: [[n,f],[[v,c],[v,d]]] query: [v,a]=["a","b","c"],[v,b]=[1,2], [[n,f],[[[n,g],[[v,a]]],[[n,h],[[v,b],3]]]] * Algorithm Writer: If a user specifies the line * without stating the relationship of the computational verbs (e.g. [n,h] with [n,g]) then the sentence and data can be examined to find it. -- only g not g b (unless b is a constant or needed), unpack [g b] or [[g],[h c]] as v1,v2 v1 and v2 used in the predicate body