! = negation A predicate name is composed of any sequence of upper and/or lower case alphabet characters. A parameter name is composed of any sequence of upper and/or lower case alphabet characters. A constant parameter begins with an upper case character. A variable parameter begins with a lower case character. Parameters are separated be commas. Since we are using conjunctive normal form we can assume that the predicates on a given line are or'd together so we don't put or's between them. The syntax for a knowledge base is formally defined with the following grammar, in the grammar given below the ~ character means the empty string. --> \n /* \n is a carriage return */ --> " " /* here the " " is a single space */ --> ~ --> --> --> ~ --> ! --> ~ --> --> --> | --> A|B| ... |Z --> a|b| ... |z --> --> ~ --> () --> | --> --> --> , --> ~ --> . --> ~ --> [whatever you want] --> ~