EnVerbPhrase module of the

First Working AI Mind in JavaScript

MindForth for robots -- ghost.pl for webservers


1. Diagram of the EnVerbPhrase Mind-Module


   /^^^^^^^^^\             ________________        /^^^^^^^^^\
  /   EYE     \     | | | / EnThink module \      /   EAR     \
 /             \    | | | \________________/     /  _________  \
|               |   | | |  _____|________       |  /MindBoot \  |
|   _______     |   | | | (  Indicative  )      | / English   \ |
|  /image  \    |   | | |  \____________/       | \ bootstrap / |
| / percept \---|-----+ |       |    \          |  \"vault"  /  |
| \ engram  /   |  a| | |       |     \______   |   \_______/   |
|  \_______/    |  b|c| |       |     /      \  |               |
|               |  s|o|f|       |    / EnVerb-\ |auditory memory|
|   visual      |  t|n|i|       |    \Phrase  / |where ideas are|
|               |  r|c|b|       |    /\______/  |stored as words|
|   memory      |  a|e|e|       |   /     |     |after being    |
|               |  c|p|r|    ___V__/      |     |generated      |
|   channel     |  t|t|s|   /EnNoun-\     |     |internally or  |
|               |   | | |  ( Phrase  )    |     |perceived      |
|               |   | | |   \_______/     |     |externally     |
|               |   | | |       |         |     |   ________    |
|   _______     |   | | |  _____V____   __V__   |  /        \   |
|  /fresh  \    |   |_|_| ( English  ) / En  \  | /  "cats"  \  |
| / image   \   |  /     \ \ Nouns  / / Verbs \-|-\  "eat"   /  |
| \ engram  /---|--\ Psy /--\      /  \_______/ |  \ "fish" /   |
|  \_______/    |   \___/    \____/-------------|---\______/    |


2. Purpose

EnVerbPhrase either fetches a stored English verb from auditory memory or calls EnVerbGen to generate a required English verb-form.


3. Algorithm of EnVerbPhrase AI mind-module

  • 3.A.1. Fetching a verb to describe an action or a state of being.

  • 3.A.2. Calling EnVerbGen to generate a missing but required English verb-form.

  • 3.B. Inserting the adverb "NOT" to negate an English verb-form.

  • 3.B.1. Using EnAuxVerb and "NOT" to negate an ordinary English verb-form.

  • 3.B.2. Inserting "NOT" for the negation of an English "BE" verb.

  • 3.C. Inhibiting a just-thought verb to prevent it from dominating attention.

  • 3.D. Leaving out the repetitious verb from any additional phrase being joined together with a first phrase for a resulting compound sentence that may be replaced with a single one-phrase sentence containing one or more conjunctions.

    The user may tell the AI Mind two things:

  • John has a house
  • John has a car
  • The user may then ask the AI:
  • What does John have
  • The ghost292.pl AI was able to respond with the following output:

    THE JOHN HAS THE HOUSE AND THE JOHN HAS THE CAR I UNDERSTAND YOU

    Suppose that we want the AI Mind to join two sentences together:

    JOHN HAS A HOUSE
    and
    JOHN HAS A CAR


    By not repeating the subject, we get:
    JOHN HAS A HOUSE
    and
    JOHN HAS A CAR


    By not repeating the subject and the verb, we get:
    JOHN HAS A HOUSE
    and
    JOHN HAS A CAR

    The AI coding task for ghost294.pl in Perl was how to get the sentence-generation modules to skip repeating the subject and skip repeating the verb. Note that even a human being will sometimes dawdle or linger while uttering the compound-setences, as in:
    "John has a house...and a car...and a lawnmower...and a canoe, etc."

    It was necessary to use one of the "chain" or "conCATenation" variables:

    
    our $catiobj = 0;   # 2019-01-28: concat-indirect-object for ConJoin() "AND".
    our $catdobj = 0;   # 2019-01-28: concat-direct-object for ConJoin() "AND".
    our $catsubj = 0;   # 2019-01-28: concat-subject for ConJoin() "AND".
    our $catverb = 0;   # 2019-01-28: concat-verb for ConJoin() "AND".
    

    We load the $catsubj variable inside the query-response code in the SpreadAct module. After the first phrase in response to a query, such as "JOHN HAS A HOUSE", the AI may check each activated idea for starting with $catsubj and for having $catverb in the second place. In that way, the various direct-objects may be isolated, introduced with "AND" from ConJoin, and sent into the Speech module for the output of a meandering, run-on response such as "JOHN HAS A HOUSE AND A CAR AND A BOAT AND A SLED AND A MOTORCYCLE". Such an AI output is like human speech, where the person states the basic premise before even thinking of all the nouns about to be concatenated with "AND" into the meandering response.

    Once the chain-variables are loaded with the concept-numbers of the items to be omitted for the syncopation or shortening of a compound-sentence, each item is omitted simply by letting Indicative call EnNounPhrase or EnVerbPhrase but preemptively using conditionals to make each module "return" to Indicative before sending a noun or a verb into the Speech module. Special code in the EnVerbPhrase module must still call EnNounPhrase to provide the direct object of the omitted verb.

  • 3.E. Calling EnNounPhrase to supply the direct object of a transitive verb or the predicate nominative of an intransitive verb.


    4. Code of EnVerbPhrase() from ghost294.pl First Working AGI in Perl

    sub EnVerbPhrase() {  # http://ai.neocities.org/EnVerbPhrase.html 
      $act = 0;  # 2016apr25: Start with zero to look for psi1 higher than $act.
      $aud = 0;  # 2018-06-28: prevent carry-over.
      $audjuste = 0;  # 2016feb17: prevent carry-over
      $motjuste = 0;  # 2016feb17: 
      my $negjux = 0;  # 2016jun17: flag for 250=NOT juxtaposed to a verb;
      $vphraud = 0;   # 2016apr10: initially
      if ($whatcon == 1 && $qv2psi > 0) {  # 2018-09-12: if WHAT...THINK or KNOW, etc.
        $motjuste = $qv2psi;  # 2018-09-12: encourage selection of ideation query-verb.
      }  # 2018-09-12: end of test for WHAT...IDEATION query.
      if ($verblock > 0 && $motjuste != 886) {  # 2018-12-10: positive verblock; not 886=THINK
        if ($whatcon > 0) {  # 2019-01-28: if SpreadAct() answers a what-query...
          if ($catverb==$motjuste && $conj > 0) {  # 2019-01-28: after use of a conjunction...
            if ($nounlock>0) { $dirobj = 1 }  # 2019-01-28: for sake of direct object.
            $hov = 0;  # 2019-01-28: TEST
            EnNounPhrase();  # 2019-01-28: after omitting verb, output direct-object.
            return;  # 2019-01-28: omit the verb after the use of a conjunction.
          }  # 2019-01-28: end of test for the chain-flag matching the selected verb.
        }  # 2019-01-28: end of test for SpreadAct() answering a what-query.
        my @k=split(',',$psy[$verblock]);  # 2016apr13: inspect t=verblock row;
        $verbpsi = $k[1];   # 2017jun08: lexical verbpsi;
        if ($k[12] > 0) { $seq = $k[12]; $tselp = $verblock }  # 2018-11-04: capture seq-tag.
        $svo2 = $k[1];      # 2017-06-08: item #2 of subj - verb - ind.obj - dir.obj
        if ($seq > 0 && $wherecon == 0) {  # 2018-11-04: if seq-tag is positive...
          for (my $i=$t; $i>$midway; $i--) {  # 2018-11-04: search backwards in time.
            my @k=split(',',$psy[$i]);  # 2018-11-04: inspect @psy flag-panel
            if ($k[1]==$seq && $k[6]==6) { # 2018-11-04: if engram matches $seq...
              $prep = $k[1];  # 2018-11-04: identify the preposition as such for EnPrep()
              last;  # 2018-11-04: one instance of identification is enough.
            }  # 2018-11-04: identify any preposition 
          }  # 2018-11-04: end of loop searching for "seq" to discover its "pos". 
          until ($eureka == $prep) {  # 2018-11-04: "Perl by Example" p. 193
            $tselp++;  # 2018-111-04: increment the not-yet-true $tselp variable 
            my @k=split(',',$psy[$tselp]);  # 2018-11-04: inspect @psy flag-panel
            $eureka = $k[1];  # 2018-11-04: change $k[1] to an initialized value. 
            if ($tselp > $cns) { last }  # 2018-11-04: escape from any runaway-loop. 
          }  # 2018-11-04: end of self-terminating loop
        }  # 2018-11-04: end of test for positive seq-tag.
        if ($k[5] == 250) { $negjux = 250; }  # 2018-07-06: TEST
        $prsn = $k[7];      # 2018-10-08: for sake of EnAuxVerb()
        $subjnum = $k[8];   # 2018-10-08: for sake of EnAuxVerb()
        $nounlock = $k[13]; # 2017jun08: k13 $tkb becomes $nounlock.
        if ($k[14] > 0) { $audbase = $k[14] }  # 2018-10-09: EnVerbGen parameter;  
        if ($k[14] > 0) { $aud = $k[14] }      # 2017jun08: auditory recall-vector
        if ($k[14] > 0) { $vphraud = $k[14] }  # 2017jun08: auditory recall-vector
        if ($k[14]==0) {  # 2018-10-08: if there is no auditory recall-vector "rv"...
          for (my $i=$tpu; $i>$midway; $i--) {  # 2018-10-08: search backwards in time.
            my @k=split(',',$psy[$i]);  # 2018-10-08: inspect @psy flag-panel
            if ($k[1] == $verbpsi && $k[1] != 800 && $negjux != 250) {  # 2018-10-08:
              if ($qv2num > 0) { $subjnum = $qv2num }  # 2018-10-08: for query-response.
              if ($k[1]==$verbpsi && $k[8]==$snu && $k[7]==$prsn) {  # 2018-10-08: 
                if ($k[14] > 0 ) { $aud = $k[14] }  # 2018-10-08: find positive rv; 
                if ($k[14] > 0 ) { $vphraud = $k[14] }  # 2018-10-08: auditory recall-vector
                if ($k[14] > 0 ) { $motjuste = $k[1] }  # 2018-10-21: 
                if ($k[14] > 0 ) { last }  # 2018-10-08: exit loop if rv is found.
              } # 2018-10-08: end of test to find regular or irregular verb-form
            }  # 2018-10-08: end of search for non-infinitive verb-form.
          }  # 2018-10-08: end of loop searching for "rv" based on parameters.
        }  # 2018-10-08: end of test for no recall-vector rv as in InFerence()
        if ($subjpsi==701 || $subjpsi==731) { $prsn=1 } # 2016apr14: I or WE
        if ($svo1==701) { $prsn=1; $subjnum=1 } # 2017-06-07: I
        if ($subjpsi==707 || $subjpsi==737) { $prsn=2 } # 2016apr14: "YOU"
        if ($subjpsi==713 || $subjpsi==719) { $prsn=3 } # 2016apr14: HE; SHE
        if ($subjpsi==725 || $subjpsi==743) { $prsn=3 } # 2016apr14: IT THEY
        $dba = $prsn;  # 2016apr14:  parameter for VerbGen()
        for (my $i=$tpu; $i>$midway; $i--) {  # 2018-06-28: search the @psy array
          my @k=split(',',$psy[$i]);  # 2016apr14: inspect t=verblock row;
          if ($k[1] == $verbpsi && $k[1] == 800) {  # 2017jun08: special 800=BE-verb
            if ($k[6] == 8) {  # 2017jun08: select only $pos=8 verbs, even homonyms
            # Following code accepts only a verb-form matching three 
            # requirements: [ ]same concept; [ ]num(ber); and [ ]person:
              if ($qv2num > 0) { $subjnum = $qv2num }  # 2017-10-22: for query-response.
              if ($k[1]==$verbpsi && $k[8]==$subjnum && $k[7]==$prsn) {  # 2017-06-08
                if ($k[14] > 0) { $aud = $k[14] }      # 2017jun08: find positive $rv; 
                if ($k[14] > 0) { $vphraud = $k[14] }  # 2017jun08: find positive $rv; 
                if ($k[14] > 0) { last }  # 2017jun08: exit loop once $rv is found.
              } # 2016apr14: end of test to find regular or irregular verb-form
            }  # 2016apr14: end of test for part-of-speech $pos == "8" (verb)
          }  # 2016apr14: end of test for correct verb-concept $verbpsi
        }  # 2016apr14: End of (for loop) searching for correct verb-form.
      }  # 2016apr13: end of test for a positive verblock.
      if ($vphraud > 0) { $aud = $vphraud }  # 2016apr14: correct form?
      if ($vphraud > 0) { $audjuste = $vphraud }  # 2016apr14: correct form?
      if ($verblock == 0)  {  # 2016apr13: prevent false negations;
        for (my $i=$t; $i>$midway; $i--) {  # 2016feb17: search backwards in time.
          my @k=split(',',$psy[$i]);  # 2016mar15: inspect @psy knowledge-nodes.
          if ($k[2] == 1) {  # 2018-09-27: select only English words
            if ($k[6] == 8) {  # 2017jun08: select only k6 $pos=8 verbs
              if ($whatcon==1 && $k[1] == $qv2psi) {  # 2018-09-12: query-verb found?
                $aud = $k[14];  # 2018-09-12: recall-vector "rv" for Speech()
                last;  # 2018-09-12: peremptory retrieval of ideation-verb.
              }  # 2018-09-12: end of test for WHAT...IDEATION query.
    #         if ($k[3] > 0) {  # 2017jun08: if k3 activation $act is...
              if ($k[3] > $act) {  # 2018-10-08: if k3 is higher than "act"...
                $tselv = $i;  # 2016apr13: retain time of winning verb;
                $motjuste = $k[1];  # 2017jun08: Select the most active verb.
                $svo2 = $k[1];      # 2017-06-08: for calling VisRecog()
                $audjuste = $k[14]; # 2017jun08: recall-vector $rv for Speech()
                $act = $k[3];  # 2018-10-08: to test for a higher k[3]
              }  # 2016feb17: end of test of activation-level
            }  # 2016feb17: end of test for part-of-speech $pos == "8" verb
          }  # 2016feb17: end of test for human language code $hlc == "en"
        }  # 2016mar12: End of (for loop) searching for most active "motjuste"
      }  # 2016apr13: end of test for absence of a verblock from subject to verb 
      if ($negjux == 250) {  # 2016jun17: if verb is negated with 250=NOT;
        if ($svo2 != 800) {  # 2017may29: if other than an 800=BE verb; 
          $auxverb = 818;  # 2018-12-10: 818=DO as auxiliary verb; 
          EnAuxVerb();  # 2018-12-10: to say 818=DO or "DOES"; 
          $auxverb = 0;  # 2016jun17: reset for safety.
          for (my $i=$t; $i>$midway; $i--) {  # 2016jun17: search for 250=NOT
            my @k=split(',',$psy[$i]);  # 2016jun17: examine @psy array;
            if ($k[1] == 250) {  # 2017jun08: if 250=NOT is found;
              $audjuste = $k[14];  # 2017jun08: "NOT" recall-vector;
              $aud = $k[14];  # 2017jun08: "NOT" recall-vector for Speech()
              if ($k[14]>0) { $aud=$k[14]; last }  # 2017jun08: insurance
            }  # 2016jun17: End of search for 250=NOT;
          }  # 2016jun17: End of search loop from $t back to $midway.
          Speech();  # 2016jun17: speak the word starting at the $aud time. 
          $aud = 0;  # 2018-06-28: reset for safety.
        }  # 2016jun17: end of test to prevent auxiliary with 800=BE verb.
      }  # 2016jun17: end of test for 250=NOT negjux.
      $motjuste = $verbpsi; # 2018-06-28: to search for verb-form.
      if ($vphraud != 0) { $aud = $vphraud }  # 2016apr10: Accept rv of 3 parameters.
      if ($subjpsi == 701) { $dba = 1; }  # 2016apr10: "I" 1st person sing.
      if ($subjpsi == 707) { $dba = 2; }  # 2016apr10: "you" 2nd person sing.
      if ($subjpsi == 713) { $dba = 3; }  # 2016apr10: "he" 3rd person sing;
      if ($subjpsi == 719) { $dba = 3; }  # 2016apr10: "she" 3rd person sing.
      if ($subjpsi == 725) { $dba = 3; }  # 2016apr10: "it" 3rd person sing.
      if ($subjpsi == 731) { $dba = 1; }  # 2016apr10: "we" 1st person plural
      if ($subjpsi == 737) { $dba = 2; }  # 2016apr10: "you" 2nd person plural
      if ($subjpsi == 743) { $dba = 3; }  # 2016apr10: "they" 3rd person plural
      if ($nphrnum == 0) { $nphrnum = $snu }  # 2018-10-09: restoration
      if ($vphraud == 0) {  # 2016apr10: if not substituted above;
        # 2018-10-09: Following code accepts only a verb-form matching three 
        # requirements: [ ]same concept; [ ]num(ber); and [ ]person:
        for (my $i=$tpu; $i>$midway; $i--) {  # 2018-06-28: skip current engrams.
          my @k=split(',',$psy[$i]);  # 2016apr10: inspect @psy lexical nodes
          if ($k[1] == $verbpsi && $k[14] > 0) { $audbase = $k[14] }  # 2018-10-09: 2nd best
          if ($k[1] == $verbpsi && $k[7]==0 && $k[14]>0) { $audbase = $k[14] } # 2018-10-09
          if ($negjux == 250) {  # 2018-12-24: if verb is subject to 250=NOT negation...
            $dba = 0;  # 2018-12-24: k7 "dba" must be zero for infinitive of verb;
            $snu = 0;  # 2018-12-24: subject-number must be zero for infinitive of verb;
          }  # 2018-12-24: end of test for 250=NOT negation of verb.
          if ($k[1] == $verbpsi && $k[7]==$dba && $k[8]==$snu) {  # 2018-12-24
            $vphraud = $k[14];  # 2018-10-09: VerbPhrase auditory engram tag
          }  # 2016apr10: end of test to find regular or irregular verb-form
        }  # 2016apr10: end of (for loop) searching through @psy conceptual array.
      }  # 2016apr10: end of test of $vphraud.
      if ($vphraud == 0) { EnVerbGen() }  # 2018-10-09: if no verb-form, generate it.
      if ($vphraud > 0) { $aud = $vphraud }  # 2016apr10: correct form?
      if ($gencon == 0) {  # 2018-10-09: if no call to EnVerbGen()...
        Speech();  # 2017may29: main call from EnVerbPhrase() to Speech()
        $aud = 0;  # 2016apr20: Reset to prevent carry-over. 
      }  # 2018-10-09: end of test to prevent speaking extra verb after EnVerbGen()
      my @k=split(',',$psy[$tselv]);  # 2016apr13: inspect verb at time of selection;
      $psy[$tselv]="$k[0],$k[1],$k[2],-16,$k[4],$k[5],$k[6],"
      . "$k[7],$k[8],$k[9],$k[10],$k[11],$k[12],$k[13],$k[14]"; # 2017-06-05: concatenator
      # Above line inserts neural inhibition upon currently selected verb. 
      if ($tselp > 0 && $prep > 0 && $wherecon == 0) { SpreadAct() }  # 2018-11-04:
      if ($svo2 == 800) {  # 2017may29: if the selected verb is a be-verb
        if ($negjux == 250) {  # 2017may29: if there is a 250=NOT negation flag
          for (my $i=$t; $i>$midway; $i--) {  # 2017may29: search for 250=NOT
            my @k=split(',',$psy[$i]);  # 2017may29: examine @psy array;
            if ($k[1] == 250) {  # 2017jun08: if 250=NOT is found;
              $audjuste = $k[14];  # 2017jun08: "NOT" recall-vector;
              $aud = $k[14];  # 2017jun08: "NOT" recall-vector for Speech()
              if ($k[14]>0) { $aud=$k[14]; last }  # 2017jun08: insurance
            }  # 2017may29: End of search for 250=NOT;
          }  # 2017may29: End of search loop from $t back to $midway.
          Speech();  # 2017may29: speak the word starting at the $aud time. 
          $negjux = 0;  # 2017may29: reset for safety. 
        }  # 2017may29: end of test for negated be-verb
      }  # 2017may29: end of test for 800=BE verb in case of negation.
      if ($nounlock>0) { $dirobj = 1 }  # 2018-10-08: for sake of intransitive verbs.
      if ($subjpsi == 701) {  # 2017-04-11: only for subject 701=I;
        if ($svo2 == 870) {     # 2018-12-10: only for verb 870=SEE;
          if ($svo4 == 0) {  # 2017-04-11: if SEE has no direct object
          # 2017-04-11: i.e., if there is no robot camera for computer vision...
            VisRecog();  # 2017-04-11: a challenge for robot AI coders
            $svo2 = 0;  # 2017-04-11: reset for safety.
            $svo4 = 0;  # 2017-04-11: reset for safety.
            return;      # 2017-04-11: abandon rest of VerbPhrase
          }  # 2017-04-30: end of test for direct object; 
        }  # 2018-12-10: end of test for "870=SEE";
      }  # 2017-04-11: end of test for ego-concept 701=I as subject. 
    # if ($dirobj==1 && $qv2psi != 886) {  # 2018-12-10: 886=THINK
      if ($dirobj==1 && $qv2psi != 886 && $dunnocon != 1) {  # 2018-11-10: 886=THINK
        EnNounPhrase();  # 2016mar10: for direct object or predicate nominative
      }  # 2018-09-30: end of test to skip direct-object in favor of ConJoin().
      if ($whatcon == 0) {  # 2018-09-12: if no what-query being answered...
        if ($actpsi > 0) {  # 2018-06-27: if there is activation to spread...
          SpreadAct();  # 2018-06-27: for a chain of thought.
          $actpsi = 0;  # 2018-06-27: reset to zero for safety.
        }  # 2018-06-27: end of test for positive $actpsi.
      }  # 2018-09-12: end of whatcon-test to fetch conjunction instead of object.
      $dirobj = 0;  # 2016mar29: reset flag after thinking direct object. 
      if ($prepgen > 0) { EnPrep() }  # 2016mar30: if "Where?" call EnPrep(). 
      $audbase = 0;  # 2016apr25: reset for safety. 
      $gencon = 0;   # 2018-10-21: reset in case set by EnVerbGen()
      $num = 0;      # 2017-10-22: reset after output of one query-response.  
      $qv2num = 0;   # 2017-10-22: reset after output of one query-response. 
    }  # 2017-11-29: EnVerbPhrase() returns to Indicative() module
    


    5. Troubleshooting and Robotic Psychosurgery

    5.1.a. Symptom: (Something goes wrong.)
    5.1.b. Solution: (AI Mind Maintainer devises solution.)


    6. Variables for the EnVerbPhrase module:

    $act -- quasi-neuronal activation-level

    $actpsi -- psi concept from which the SpreadAct module shall spread activation.

    $aud -- in the Speech() module is an associative tag leading to the typically most recent engram of a word stored in the @ear array of the auditory memory channel.

    $audbase -- is the start of the @ear auditory engram of a verb that needs to have its inflectional ending changed in a VerbGen() mind-module such as RuVerbGen(). $audbase is incremented by one successive unit as long as the target word in auditory memory continues, and each character of the target word from auditory memory is sent as the value of $abc into the AudBuffer() mind-module, which left-justifies the target word before sending it to be right-justified in the OutBuffer() mind-module prior to any manipulation of the inflectional ending of the target word.

    $audjuste -- EnVerbPhrase() $motjuste $aud to Speech() module

    $auxverb (auxiliary verb) -- such as 800=BE; 818=DO; or modal verb.

    $catverb -- flag for holding the concept-number of the VERB among words conCATenated together into the first phrase of a potentially compound output sentence, so that one-by-one the words of a candidate second phrase may each be tested for a match with the counterpart word in the very first phrase, and thus, if a conjunction like "AND" from ConJoin is about to add the second phrase to the first phrase, the AI may omit the repetitious same verb from the second phrase, with the result that the AI syncopates or shortens the compound sentence into a single-subject and single-verb sentence such as, "JOHN HAS A HOUSE AND A CAR" instead of "JOHN HAS A HOUSE AND JOHN HAS A CAR".

    $cns -- (adjustable) size of "central nervous system" memory in the Ghost Perl AI

    $dba -- doing-business-as noun-case or verb-person.

    $dirobj -- flag that indicates seeking for a direct object.

    $eureka -- something "found" in the aud-recog modules.

    $gencon -- status-con flag set briefly to unitary one by EnVerbGen() as a condition-flag to prevent EnVerbPhrase() from making a call to Speech() after EnVerbGen() has already generated and spoken an inflected form of an English verb. The $gencon flag is reset to zero at the end of EnVerbPhrase() whether it has been used or not, so that EnVerbPhrase() will normally call the Speech() module to say a verb-form summoned from memory by the parameters of person and number.

    $hov -- number of simultaneously active ideas for ConJoin()

    $motjuste -- (from French) best word for inclusion in a thought.

    $negjux -- a flag to indicate that a verb stored in memory has been negated by the nearby storing of a 250=NOT adverb. When EnVerbPhrase() selects a verb from conceptual memory and the verb is negated with "NOT", the numeric value of 250=NOT goes into the negjux variable as a flag to require the thinking of a negated English verb to include a call to the EnAuxVerb() module that will place a form of the auxiliary verb "DO" before the adverb "NOT" and the verb itself, as in "God does not play dice." During a verb-fetch in EnVerbPhrase(), negjux is given one chance to modify either a be-verb or a non-be-verb, and in either case is reset to zero after the one-chance opportunity.

    $nounlock -- time-point in conceptual memory for a verb to lock onto a seq-noun.

    $num -- number-flag for grammatical number (singular or plural).

    $prep -- a preposition used in the EnPrep mind-module for English prepositions.

    $prsn -- 1st, 2nd, 3rd person of verb-forms.

    $qv2num -- num(ber) of a verb in a who+verb+dir.obj response.

    $qv2psi -- concept for SpreadAct to seek as a verb, so that the AI may remember ideas containing the same verb.

    $seq -- subSEQuent @psy concept in an idea. As the AI Minds evolve, the associative seq tag may take on a new role as pointing from a noun or verb or adjective or adverb to an associated preposition.

    $snu -- subject-number as parameter for verb-selection.

    $subjnum -- (subject number) for agreement in grammatical number between a subject and a predicate nominative noun.

    $subjpsi -- subject-concept parameter to govern person of verb-forms.

    $svo2 -- verb -- item #2 in subject-verb-object.

    $tselp -- time of selection of preposition - is used in the EnPrep English-preposition module to make sure by calculation that a verb being sought as used with a preposition is in close temporal proximity to the preposition, so that a query may be answered correctly with a response that mentions the query-subject qv1psi and the query-verb qv2psi and the selected preposition at the beginning of a prepositional phrase.

    $tselv -- time of selection of verb (for neural inhibition)

    $verblock -- for subject-noun to lock onto seq-verb. The $verblock is a time-point in conceptual @psy memory where the $seq of a subject-noun is located, so that any crucial consideration such as the negation of a verb will be found when the verb-phrase module fetches the verb-concept from memory. If the thinking process finds and activates a particular subject-noun in memory, the $tkb of the subject noun becomes the $verblock so that a particular verb at a particular time will be selected by the English or Russian verb-phrase module.

    $verbpsi -- $psi concept-number of verb in the @psy array

    $vphraud -- holds aud-fetch of verb-form for Speech() module

    $whatcon (what-condition) -- SpreadAct() flag for condition of answering a what-query

    $wherecon -- flag for condition of answering a where-query.


    7. Future Development

    EnVerbPhrase must be enhanced to deal with verb-tense, such as simple past; past perfect; future and future perfect.


    8. Resources


    Please see

    http://mind.sourceforge.net/v-phrase.html



    9. AiTree of First Working AGI Mind-Modules


    Return to top; or to
    javascript subreddit for AI Mind discussion;
    Forth subreddit for MindForth discussion;
    Perl subreddit for ghost.pl AI Mind Maintainers.