[SCL] CL Controlled English (CLCE)

John F. Sowa sowa at bestweb.net
Sat Dec 20 10:04:59 CST 2003


Bill,

Re global replacement for "ontology":  I would be
happy with either "theory" or "module".

Re grammar for CLCE:  What I've written so far is
at the end of this note. I'll post a more complete
version on my web site after I get more comments
and flack.

Following is the general outline:

  1. Monadic relations, such as red(x) or cat(x),
     may be declared as either adjectives or nouns:

     Declare red(x) as adjective.

     Declare cat(x) as noun.

  2. Relations with two or more arguments may be
     declared as relational nouns, functional
     nouns, verbs, or prepositions:

     Declare child(x,y) as noun with focus x.

     Declare mother(x,y) as functional noun
        with focus x.

     Declare give(x,y,z) as verb with
        preposition "to" y.

     Declare between(x,y,z) as preposition.

     Restriction:  The arguments of a relational
     or functional noun are written as the object(s)
     of the preposition "of".  No verb may have a
     preposition spelled "of".

  3. Functions or relations that may have a
     variable number of arguments are declared
     with three dots in the last argument place:

     Declare set(x,y,...) as functional noun
        with focus x.

  4. Any functional or relational noun can also
     be used as a monadic relation that is true
     of anything of the same type as its focus.
     For example, mother(x) is true if and only if
     there exists a y such that mother(x,y) is true.

  5. The name of a function or relation does not
     have to be the same as the word used in CLCE:

     Declare "+"(x,y,z) as functional noun "sum"
        with focus z.

  6. There are no pronouns.  Instead there are
     variables, which consist of one of the three
     letters "x", "y", or "z" followed by an optional
     string of digits.  Anyone who prefers "readable"
     names can write "every cat x" to inroduce a
     variable and "the cat x" to refer to it later.

  7. A list of noun phrases must be enclosed in
     parentheses to distinguish it from a conjunction
     of sentences.  Otherwise, all sentences in CLCE
     are punctuated as they would normally be in English.

Examples of CLCE sentences with their translations to
predicate calculus notation:

  1.  Every cat is on a mat.

      (A x:cat)(E y:mat)on(x,y).

  2.  Some person is between (a rock and a hard place).

      (E x:person, y:rock, z:place)(hard(z) & between(x,y,z)).

  3.  If some person x is the mother of a child y,
      then y is a child of x.

      ~((E x:person, y:child)(mother(x,y) & ~child(y,x))).

  4.  Every person x has a person y as mother.

      (A x:person)(E y:person)mother(y,x).

  5.  If x is the set of (a cat, a dog, and an elephant),
      then the cat is an element of x, the dog is an
      element of x, and the elephant is an element of x.

      ~((E x0, x1:cat, x2:dog, x3:elephant)(set(x0,x1,x2,x3)
         & ~(element(x0,x) & (element(x1,x) & element(x2,x)
               & element(x3,x)))).

  6. For every prime number x, there exists a prime number y
     such that y is greater than x.

     (A x:number)(prime(x) => (E y:number)(prime(y) & y>x)).

Following are the grammar rules I've written so far.  I don't
expect the final version to be much longer than this, but
there may be more revisions and qualifications.

John
_____________________________________________________________

CompleteSentence  ::=  Sentence (";" Sentence)* "."

Sentence  ::=  NounPhrase VerbPhrase
             |  "if" Sentence ", then" Sentence
             |  Sentence ("," Sentence)* ","? "and" Sentence
             |  "either" Sentence "or" Sentence ("or" Sentence)*
             |  Sentence "if and only if" Sentence
             |  "for" UniversalNP "," Sentence
             |  "there" ("is" | "exists") ExistentialNP "such that"
             |  "it is false that" Sentence

NounPhrase  ::=  ExistentialNP
               |  UniversalNP
               |  FunctionalNP
               |  ReferentialNP

ExistentialNP  ::=  ("a" | "an" | "some") Adjective* Noun
                     Variable? Postmodifier?

UniversalNP    ::=  ("every" | "no") Adjective* Noun
                     Variable? Postmodifier?

FunctionalNP   ::=  "the" FunctionalNoun Variable?
                     "of" (NounPhrase | List)

ReferentialNP  ::=  ("the" Noun)? (Variable | Name)
                  |  "the Noun"

Note:  The scope of a name includes an entire module.
The scope of a variable in a "for" or "there is"
prefix extends to the period at the end of a complete
sentence.  The scope of other variables is no farther
than the nearest ";" or ".", but the next version of
the grammar will be more explicit.

A referential NP may only occur within the scope of
the variable or name.  The variable or name may be
omitted if there is only one noun with the same
spelling within the scope.

List  ::=  "(" NounPhrase ("," NounPhrase) ","?
            "and" NounPhrase ")"

Postmodifer  ::=  "of" (NounPhrase | List)
                |  "that" VerbPhrase
                |  Comparative "than" NounPhrase

VerbPhrase  ::=  "does not"? Verb (NounPhrase | List)?
                  PrepositionalPhrase*
               |  "is" "not"? (Adjective | NounPhrase |
                  PrepositionalPhrase |
                  Comparative "than" NounPhrase)
               |  ("has" | "does not have") NounPhrase
                   "as" (RelationalNoun | FunctionalNoun)

PrepositionalPhrase  ::=  Preposition (NounPhrase | List)

Variable  ::=  ("x" | "y" | "z") Digit*



More information about the SCL mailing list