Summon the Tutorial AI Mind into your presence with MSIE.

The Robot AI Mind (with Programmer and User Manual)

                            __________                           
            ___________    /          \    ___________           
           /           \  ( TABULARASA )  /           \          
          /  motorium   \  \__________/  /  BOOTSTRAP  \         
          \_____________/\    __|___    /\_____________/
       __________         \  /      \  /           ________
      /          \         \/  MAIN  \/           /        \
     (  volition  )--------<  ALIFE   >----------( SECURITY )
      \__________/         /\  LOOP  /\           \________/
           _____________  /  \______/  \  _____________   |
          /             \/      |       \/             \  |
  _______ \    THINK    /   ____V_____   \  SENSORIUM  /  |
 /       \/\___________/   /          \   \___________/  _V_
( ENGLISH )  ___________  (  emotion   )       |        /   \
 \_______/  /           \  \__________/        |       ( HCI )
     |     ( VERB-PHRASE )   ________          |        \___/
     |     /\___________/\  /        \      ___V____________
   __|__  /     |      |  \/          \    /                \
  /     \/    __V__    |  (   SPEECH   )--(     AUDITION     )
 (  SVO  )   /     \   |   \          /   /\________________/
  \_____/   ( REIFY )  |    \________/   /   |            |
     |       \_____/   |    /           /    |            |
     |          |      |   /           /   __V__         _V___
     V__________|______V  /   ______  /   /     \       /     \
    /                   \/   /      \/   / OLD-  \     / NEW-  \
    \    NOUN-PHRASE    /   ( audSTM )  ( CONCEPT )   ( CONCEPT )
     \_________________/     \______/    \       /     \       /
                             /           /\_____/       \_____/
                  ________  /   ________/    |  \_______/  |
                 /        \/   /        \    |  /       \  |
                ( audRecog )  ( ACTIVATE )   | ( enVocab ) |
                 \________/    \________/    |  \_______/  |
                    _________  /             V_____________V
                   /         \/             /               \
                  ( SPREADACT )            (   INSTANTIATE   )
                   \_________/              \_______________/


Mind.Forth and its derivatives are intended for adaptation
and installation by robopsychonomists on platforms such as:

  • Lego Mindstorms NXT Robotics Toolset and
  • White Box Robotics - PC-Bots - model914
    for which there is an "A.I. Zone" discussion group at
    http://www.914pcbots.com on the Web. There is a
    wiki web site where anyone may suggest changes or
    extensions to the design of MindForth. You may Join
    or simply read the messages of the AGI Mail List.

    You do not need to know Forth to bring the Robot AI Mind to life.
    You may read the AI4U textbook free of charge on-line or buy it as
    a donation to open-source AI, or to a library, or for gifted students
    considering a career in psychonomy -- the tending and maintenance of
    artificial minds. A psychonomist needs AI4U on-line or on-shelf.

    You do need to download Win32Forth by Tom Zimmer et al. from
    http://prdownloads.sourceforge.net/win32forth/W32FOR42_671.zip?download
    or http://home.planet.nl/~josv/w32for42_671.exe onto your hard disk.
    Mind.Forth may need the specific version listed above to run properly.

    Mind.Forth is the software implementation of a theory of mind which
    endorses spreading activation as the fundamental mechanism of cognition.
    In the Tutorial mode, spreading activation may be seen in action.
    Mind.Forth and AI4U are teaching-tools of artificial intelligence
    for students at the high-school, community college or university level.

    Mind.Forth is an attempt at a hard take-off but does not address the
    difficult if not impossible question of creating so-called Friendly AI.
    Because Mind.Forth, coded in Win32Forth, is not subject to the same
    security precautions as all JavaScript programs must necessarily be,
    the AI in Forth may be expected to evolve further than the JavaScript AI
    in such areas as motor control of robot hardware; file storage and
    retrieval; incorporation of multiple sensory input avenues; etc.
    Mind.REXX on the Amiga 1000 evolved into Amiga Mind.Forth.
    Mind.Forth may run faster and longer than the JavaScript AI Mind.
    For AI update news consult the Mind.Forth Programming Journal.

    http://home.earthlink.net/~fjrussonc/AIMind/AI-Mind.html is
    an adaptation of Mind.Forth by Frank J. Russo. (Please note Frank's
    changelog entries that describe what improvements he introduces.)
    http://AIMind-I.com is the new site announced on 16 January 2007.

    [ At the end of this ASCII file, remove any text below the last line. ]
    ----- remove this line and above; rename as "Mind.f" ----------
    ( 30mar07A.F -- modification of 29mar07A.F Mind.Forth Robot AI Mind. )
    ( This file may be named "Mind.f" or any "filename.f" you choose. )
    ( Rename any occurrence of Mind.f.txt as simply Mind.f for Win32Forth. )
    ( This file is to be run with Win32Forth by issuing three commands: )
    ( win32for.exe [ENTER] )
    ( fload Mind.f [ENTER] )
    ( ALIFE [ENTER]. )
    ( To halt the artificial mind, press the ESCAPE key at any time. )
    \ Change.log elements:
    \ 18sep05C.F has single activations move like a wave through the mindgrid.
    \ 21sep05C.F uses psiDamp and psiDecay to make "crest" concepts preponderate.
    \ 23sep05C.F uses quiescent intervals in the Moving Wave Algorithm psychonomy.
    \ 24sep05C.F makes Tutorial mode more informative, as requested by user base.
    \  6oct05C.F again lets whatAuxSDo use psiDecay on unresolved activations;
    \ parentheticalizes Comments for only ZIP files having backslash Comments.
    \  8oct05C.F lets user inputs cause higher activations than internal thought.
    \ 13oct05C.F introduces a Transcript display mode to record AI Mind behavior.
    \ 14oct05C.F gives expanded names of mind-modules in parenthesis comments.
    \ 15oct05C.F revives a flatline AI by recalling oldest memories and by
    \ asking users to enter information for meandering chains of thought.
    \ 31oct05C.F reduces risk of word-wrap problems and improves Tutorial mode.
    \  9nov05C.F consolidates Tutorial messages horizontally to avoid scrolling.
    \ 22jan06C.F starts in Tutorial mode until user presses Tab for other modes.
    \ 23jan06C.F engenders an upper tier of conceptual activation for a moving
    \ wave of consciousness and thought, and a lower tier of residual activation.
    \ 27feb06C.F makes new concepts have an activation at top of lower tier.
    \ 20apr06C.F uses decpsi1 and decpsi2 to avoid endless repetition of output.
    \ 23may06C.F in transcript mode shows activation-levels of selected words.
    \ 25may06C.F enhances transcript mode with date, time and explanation.
    \ 29may06C.F maintains thought-chains by removing ACTIVATE call to psiDecay.
    \ 31may06C.F uses nPhr activation threshold to prevent spurious associations.
    \  1jun06C.F splits calling of Activate between internal POV and external POV.
    \  2jun06C.F aims for subconscious lower tier and upper consciousness tier.
    \  5jun06C.F splits ACTIVATE mind-module into subAct and superAct modules.
    \  *************************************************************************
    \  A breakthrough in artificial intelligence was achieved on Wed.7.JUN.2006.
    \  The AI Mind began to avoid spurious associations and to exhibit thinking.
    \  7jun06C.F uses nounAct and verbAct for SVO activation slosh-over effect.
    \  9jun06C.F indicates potential +slosh-over direct objects in Tutorial mode.
    \ 10jun06C.F leaves nounAct, verbAct and ACTIVATE after clean-up of modules.
    \ 13jun06C.F enhances slosh-over in a try to eliminate spurious associations.
    \ 18jun06C.F overhauls Tutorial for a better display of deep thought process.
    \ 29mar07A.F introduces add-on ontology from JavaScript AI for sake of EGO.
    \ 30mar07A.F makes verbAct module conform with JavaScript AI Mind algorithm.
    
    DECIMAL  ( use decimal numbers )
    variable act ( INSTANTIATE; OLD- & NEWCONCEPT; REIFY; etc. ) 
    variable aud  ( enVocab; Audition; Speech: auditory recall-tag )
    variable back ( to replace "bulge" for "pre" items in spreadAct )
    variable bday ( ALIFE; HCI -- day of birth )
    variable beg  1 beg !  ( Audition; audSTM: word beginning flag )
    variable bhour ( ALIFE; HCI -- hour of birth )
    variable bias 5 bias ! ( Parser; newConcept: an expected POS ) 
    variable bminute ( ALIFE; HCI -- minute of birth )
    variable bmonth ( ALIFE; HCI -- month of birth )
    variable bsecond ( ALIFE; HCI -- second of birth )
    variable byear ( ALIFE; HCI -- year of birth )
    \ variable bulge 2 bulge ! ( for proportionate spread of activation ) 
    variable cns  1024 cns !  ( "central nervous system" array size )
    variable coda  128 coda !  ( span of memory to recycle in Rejuvenate )
    variable ctu ( continuation-flag for "Aud" array phonemes )
    variable decpsi1 ( decremend concept 1 to accelerate de-activation )
    variable decpsi2 ( decremend concept 2 for avoiding excess repetition )
    variable decpsi3 ( decremend concept 3 to keep track of most recent psi )
    variable dirobj  ( flag to indicate seeking of a direct object )
    variable edge  0 edge !  ( Rejuvenate: edge-of-thought flag )
    variable EEG 1 EEG ! ( for EGO safety measure if users neglect the AI )
    variable en5 ( enVocab flag recall-vector "aud" in Rejuvenate ) 
    variable enx ( new-, oldConcept; Instantiate; Reify: x-fer Psi-En )
    variable eot ( end-of-text for use in AUDITION )
    variable fex ( new-, oldConcept; enVocab: Psi-to-English fiber-out )
    variable fin ( new-, oldConcept; enVocab: English-to-Psi fiber-in )
    variable fyi 0 fyi ! ( for rotation through display modalities )
    ( I = Index in loops; does not require a fetch "@" )
    variable img  ( visRecog: for future use as "image" )
    \ variable inert  0 inert !  ( Audition; Security: EGO-trigger )
    variable inert  0 inert !  ( .echo; Think; English: EGO-trigger )
    variable IQ 2 IQ ! ( an invitation to code an IQ algorithm )
    variable jolt 0 jolt ! ( 13jun2006 nounPhrase activation to nounAct )
    variable jrt ( "junior time" for memories moved in Rejuvenate )
    variable jux  0 jux !  ( Parser; Instantiate: a JUXtaposed word )
    variable krt ( Knowledge Representation time "t" for future use )
    variable len  ( length, for avoiding non-words in AUDITION )
    variable lump 2 lump ! ( psiDamp -- level of post-thought activation )
    variable match  ( oldConcept; SPEECH:  end-of-word flag for control )
    variable midway 0 midway ! ( a backwards time-limit for searches )
    variable monopsi ( 26jul2002 For use in audRecog module )
    variable motjuste ( best word for selection as part of a thought )
    variable nen  0 nen ! ( English lexical concept number )
    variable nlt  0 nlt !  ( not-later-than, for isolating time-points )
    variable oldact ( to show the source of spreading activations )
    variable oldpos ( for treating verb part-of-speech as a special case )
    variable oldpsi ( to show the source of spreading activations )
    variable onset 0 onset ! ( of a word stored in auditory memory )
    variable opt  ( option, for flushing out a desired part of speech )
    variable pho  ( Listen; Audition; Speech: phoneme of input/output )
    variable pos  ( old- & newConcept; enVocab: part-of-speech )
    variable pov  ( point-of-view: 35# for internal; 42* for external )
    variable pre  ( previous concept associated with another concept )
    variable psi  ( associative tag from auditory engram to Psi mindcore )
    variable psi1 ( 30mar2007 verbAct: activation-level at each node of verb )
    variable psi6 ( temporary enx for use by verbPhrase in Tutorial mode )
    variable quiet 1 quiet ! ( Listen; Audition: a status flag for input )
    variable recon 0 recon ! ( Eagerness to seek reconnaissance answers. )
    variable rjc  0 rjc ! ( Rejuvenate: counter of rejuvenations over life )
    variable rsvp 1000 rsvp ! ( AUDITION/LISTEN response-time counter )
    variable rv ( "recall-vector" for diagnostic display of thought processes )
    variable seq  ( subSEQuent concept associated with another concept )
    variable spike  ( 1aug2005: for potential use in spreadAct )
    variable spt  ( audSTM; AUDITION: blank space time )
    variable subj     ( 15sep2005 flag to supercharge subject-nouns )
    variable t  0 t ! ( time as incremented during auditory memory storage )
    variable topic  ( topic for a question to be asked )
    variable tov  ( TABULARASA; REIFY; ENGLISH; .echo: time-of-voice )
    variable tsday    ( LISTEN -- for headers in transcript mode )
    variable tshour   ( LISTEN )
    variable tsminute ( LISTEN )
    variable tsmonth  ( LISTEN )
    variable tssecond ( LISTEN )
    variable tsyear   ( LISTEN )
    variable tult ( AUDITION; audSTM: t penultimate, or time-minus-one )
    variable unk  ( "unknown" variable for general use )
    variable uract ( original activation for HCI )
    variable urpre ( original pre for safeguarding during function-calls )
    variable urpsi ( original German:ur psi for use in psiDamp, etc. )
    \ variable vault 158 vault !  ( enBoot; audSTM; Rejuvenate: bootstrap )
    variable vault 202 vault !  ( 29mar2007 adding data from JavaScript AI )
    variable zone  ( ACTIVATE; SPREADACT: time-zone for "pre" and "seq" )
    
    \ Array code for Psi - En - Aud memory channel arrays.
    :  CHANNEL   ( size num -< name >- )  \ ATM 21apr2002.
      CREATE   ( Returns address of newly named channel. )
      OVER     ( #r #c -- #r #c #r ) \ E.g., cns 6 cns
      ,        ( Stores number of rows from stack to array.)
      * CELLS  ( Feeds product of columns * rows to ALLOT.)
      ALLOT    ( Reserves given quantity of cells for array.)
      DOES>    ( member; row col -- a-addr )
      DUP @    ( row col pfa #rows ) \ Duplicates top item.
      ROT *    ( row pfa col-index ) \ Productizes top two.
      ROT +    ( pfa index ) \ Adds the product to the row#.
      1 +      ( because the first cell has the number of rows.)
      CELLS +  ( from number of items to number of bytes in offset )
    ;  \ End of code for arrays to be created with "cns" size.
    
    \ Memory channel arrays.  ATM 21jul2002; or your ID & date.
    cns @  7  CHANNEL  psi{  ( Mindcore concept array "psi" )
    cns @  6  CHANNEL   en{  ( English lexicon array "en" )
    cns @  6  CHANNEL  aud{  ( Auditory memory channel array "aud" )
    
    :  PSI-CLEAR  \ ATM 21apr2002; or your ID & date.
      1   t @  1 +  DO  \ At all memory-points up to the present,
        0 I 1 psi{ !    \ store zero as the activation value.
      -1 +LOOP          \ Loop backwards by decrements of one.
    ;  \ End of PSI-CLEAR; return to EGO.
    
    :  TABULARASA  \ ATM 21apr2002; or your ID & date.
      0 unk !  \ Use "unk" to count from zero to five.
      1 tov !  \ Time-of-voice for .echo use.
      BEGIN  cns @  1  DO
        0 I  unk @  psi{ !
        0 I  unk @   en{ !
        0 I  unk @  aud{ !
      LOOP
      1  unk +!
      unk @  6  <  WHILE
      REPEAT
      cns @  1  DO
        32   I  0   aud{ !  \ Blank out aud{ with ASCII "32" blanks.
      LOOP
    ;  \  End of TABULARASA; return to ALIFE.
    
    
    \  psiDecay is called (mainly from the SECURITY module) to make all
    \  positive (non-zero) mindcore psi1 activations decrease
    \  slightly, so as to simulate neuronal excitation-decay for the
    \  purpose of letting stray activations dwindle away over time.
    \  Thinking keeps activations high; psiDecay lowers them.
    \  In a robot mind with an upper tier of activation for concepts
    \  riding a moving wave of consciousness, psiDecay lets afterthought
    \  concepts sink gradually through a lower tier of residual activation.
    :  psiDecay ( let conceptual activations dwindle ) \ atm 20apr2006
    \ 7 EMIT    \  7jun2006 See how often psiDecay is called.
      fyi @ 2 > IF CR  \ Skip display during tutorial mode.
      ."       psiDecay called to reduce all conceptual activations."
      THEN
      midway @  t @  DO  \  Loop backwards in recent time.
      \ I  1  psi{ @  3 -        I  1  psi{ !       \  7aug2005
      \ I  1  psi{ @  2 -        I  1  psi{ !       \ 14sep2005
        I  1  psi{ @  1 -        I  1  psi{ !       \ 23jan2006
        I  1  psi{ @  0 < IF  0  I  1  psi{ ! THEN  \  4aug2005
        \ 21sep2005 Next line of active code zeroes out the "DO"
        \ concept so that question elements will not linger.
        I  0  psi{ @ 59 = IF  0  I  1  psi{ ! THEN  \ Zero out DO.
        \ 5sep2005 Next line of active code treats concept "WHAT" as a
        \ special case where zero activation elecits positive answers.
        I  0  psi{ @ 54 = IF  0  I  1  psi{ ! THEN  \ Zero out WHAT.
        decpsi1 @ decpsi2 @ = IF  \ Hasten deactivation of repeats:
          I  1  psi{ @  8 -        I  1  psi{ !       \ 20apr2006
          I  1  psi{ @  0 < IF  0  I  1  psi{ ! THEN  \ 20apr2006
    
        THEN  \ 20apr2006
    
      -1  +LOOP  \  end of finding and reducing positive activations
    ;  \  End of psiDecay; return to SECURITY; ASK; ...
    
    
    \  psiDamp is called from nounPhrase or verbPhrase
    \  to semi-activate a concept that was briefly activated.
    :  psiDamp ( reduce activation of a concept ) \ atm 13jun2006
    \  7 EMIT    \  7jun2006 See how often psiDamp is called.
    \  5 lump !  \  8oct2005 Let Activate go higher than psiDamp does.
    \ 10 lump !  \ 15oct2005 For sake of meandering chains of thought.
    \ 30 lump !  \ 23jan2006 Upper-tier concept drops to top of lower tier.
    \ 30 lump !  \ 26feb2006 Removing the comment-out backslash.
    \ 31 lump !  \ 27feb2006 Let 31 be the top of the subconscious tier.
    \  4 lump !  \ 20apr2006 Lower lump to withstand activation backswells.
    \  8 lump !  \  2jun2006 Must be within subconscious lower wave-tier.
    \ 10 lump !  \  2jun2006 A test to see how enBoot concepts are treated.
    \ 24 lump !  \  2jun2006 24 = middle of the subconscious lower tier.
    \ 31 lump !  \  6jun2006 31 = top of the subconscious lower tier.
    \ 17 lump !  \  6jun2006 17 = bottom of the subconscious lower tier.
    \ 15 lump !  \ 10jun2006 Knock used concepts out of play more forcefully.
    \ 10 lump !  \ 13jun2006 Keep unresolved activations away from slosh-over.
      15 lump !  \ 13jun2006 Do not lower post-thought activations too far.
      fyi @ 2 > IF CR  \ Too detailed for Tutorial mode.
      ."     psiDamp called for urpsi = " urpsi @ .
      ."  and lump = " lump @ .
      THEN
      midway @ 1 +  t @ 1 + DO   \ Loop backwards from t+1.
            I  0  psi{ @ urpsi @ = IF  \ If psi0 is found,
        \ 0 I  1  psi{ ! THEN  \ set activation psi1 to zero.
        \ 2 I  1  psi{ ! THEN  \ 29apr2005: Set to not-quite-zero.
     lump @ I  1  psi{ ! THEN  \ Set in psiDamp or in calling module.
      -1 +LOOP               \ End of backwards loop.
      0 lump !  \ 15sep2005 safety measure
      psiDecay  \ 21sep2005 For the sake of the Moving Wave Algorithm.
                \ If psiDecay is to be used sparingly, it is especially
                \ warranted here, to act in concert with psiDamp.
    \ psiDecay  \ Against unresolved activations; favoring user input.
    ;   \  psiDamp returns to nounPhrase, verbPhrase, etc.
    
    
    \  enDamp is called from nounPhrase or verbPhrase
    \  to de-activate all concepts in the English lexicon.
    :  enDamp ( deactivate English lexicon concepts ) \ atm 14oct2005
      midway @  t @  DO  \ Loop backwards from current time.
        0 I  1  en{ !    \ Store zero activation at en1.
      -1 +LOOP           \ End of backwards loop.
    ;  \  enDamp returns to nounPhrase or verbPhrase.
    
    
    \  audDamp is called from AUDITION upon recognition of
    \  a known word, and resets auditory engram activations
    \  to zero so that additional words may be recognized.
    :  audDamp ( deactivate auditory engrams ) \ atm 14oct2005
      midway @  t @  DO    \ Loop backwards through time.
        0 I  1 aud{ !      \ Replace excitation with zero.
      -1 +LOOP
    ;  \  end of audDamp; return to AUDITION.
    
    \ Print-to-screen "dot" functions for trouble-shooting mode.
    \ .psi shows the contents of the deep mindcore "Psi".
    :  .psi ( show concepts in the Psi array ) \ atm 14oct2005
      CR  ." Psi mindcore concepts"
      CR  ." time: psi act jux pre pos seq enx "
      t @ 1+  midway @ DO  \  Look as far back as "midway".
        I    0  psi{ @ 0 > IF
          CR I . ." : "
          I  0  psi{ @ . ." "  \ psi
          I  1  psi{ @ . ." "  \ act
          I  2  psi{ @ . ." "  \ jux
          I  3  psi{ @ . ." "  \ pre
          I  4  psi{ @ . ." "  \ pos
          I  5  psi{ @ . ." "  \ seq
          I  6  psi{ @ enx ! enx @ .  \ enx = transfer-to-English.
          enx @ 0 > IF
            ." to "
            I unk !
            0 aud !  \ First zero out the auditory recall-vector.
            midway @ unk @  DO
              I   0 en{ @  enx @ = IF
                I 5 en{ @  aud  !  \ Fetch any stored recall-vector.
                aud @ 0= NOT IF    \ If the auditory tag is not zero,
                  BEGIN            \ begin the next sequence;
                    aud @ 0 aud{ @ EMIT  \ display each engram;
                    1 aud +!             \ increment the auditory tag.
                    aud @ 0 aud{ @ 32 =  \ When the engram is a SPACE,
                  UNTIL                  \ stop fetching engrams.
                  ."  "                  \ Display a space.
                THEN  \ End of test for non-zero auditory engrams.
                0 aud !  \ Zero out the auditory associative tag.
              LEAVE  ( One engrammed word is enough. )
              THEN    \ End of search for English lexical sample.
            -1  +LOOP   \ End of loop through English lexicon.
          THEN  \ end of if-clause looking for "enx" transfers
        THEN    \ end of if-clause looking for Psi concepts
      LOOP  CR ." time: psi act jux pre pos seq enx "  0 unk !
      CR ." You may enter .psi .en .aud to view memory engrams, or"
      CR ." ALIFE [ENTER] to erase all memories and restart the Mind."
      CR
    ;  \  End of .psi -- called when user types:  .psi [ENTER]
    
    \ .en displays the English lexicon array "en{".
    :  .en ( show vocabulary in the English lexicon array ) \ atm 14oct2005
      CR ." English lexical fibers"
      CR ." t nen act fex pos fin aud:"
      t @  1+  midway @  DO
        I  0  en{ @  unk !
        unk @  0 > IF ( display positive data )
          CR I . unk @ . ." "
          I 1 en{ @ . ." "
          I 2 en{ @ . ." "
          I 3 en{ @ . ." "
          I 4 en{ @ . ." "
          I 5 en{ @ aud !  aud @ . ."  to "
          BEGIN
            aud @ 0 aud{ @ EMIT  1 aud +!
            aud @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
          UNTIL
          ."  "
          0 aud !  \ Zero out the auditory associative tag.
        THEN
      LOOP
      0 unk !
      CR ." t nen act fex pos fin aud" CR
      CR ." You may enter .psi .en .aud to view memory engrams, or"
      CR ." ALIFE [ENTER] to erase all memories and restart the Mind."
      CR
    ;  \  End of .en -- called when user types:  .en [ENTER]
    
    \ .aud & .echo display the auditory memory channel.
    :  .aud ( show engrams in the auditory memory array ) \ atm 14oct2005
      CR ." Auditory memory nodes"
      CR  ."  t pho act pov beg ctu psi"
      t @  1+  1 DO           ( Show the entire Aud channel.)
    \ t @  1+  t @  36 -  DO  ( Show the last 36 "phonemes".)
        CR    I . ." "
        I 2 aud{ @ 123  =  IF
          ."     { "
        THEN  \ From SVO.
        I 0 aud{ @  33  <  IF
          ."  "  ( show a blank )
        ELSE
          I 0 aud{ @ EMIT ."  "
          I 1 aud{ @ .     ." "
          I 2 aud{ @ EMIT ."  "
          I 3 aud{ @ .     ." "
          I 4 aud{ @ .     ." "
          I 5 aud{ @ .
        THEN
        I 2 aud{ @ 125  =  IF
          ."     } "
        THEN  \ From SVO.
      LOOP
      CR ." You may enter .psi .en .aud to view memory engrams, or"
      CR ." ALIFE [ENTER] to erase all memories and restart the Mind."
      CR
    ;  \ End of .aud -- called when user types:  .aud [ENTER]
    
    : .echo ( show what the robot just said ) \ atm 14oct2005
      \ As on Usenet, user responds _below_ what the AI has said:
      CR  ." Robot: "    \ 26jul2002 A repeat of fast-scrolling output.
      inert @ 1 < IF   \ Avoid showing spurious repetition of output.
        t @ tov @  DO  \ 8mar2005 Loop from time-of-voice to now..
          I 0  aud{ @  0 =  IF   \ If a zero is stored
            ."  "                \ display a blank space;
          ELSE                   \ otherwise
            I 0 aud{ @ EMIT      \ display the stored character.
          THEN             \ End of test of stored character.
        LOOP               \ End of loop through auditory memory.
      THEN  \ End of "inert" test to avoid spurious repetitions.
    ;  \ End of .echo; return to AUDITION.
    
    \ SPREADACT is called by ACTIVATE
    \ to spread activation among concepts.
    \ It follows "pre" and "seq" tags to find related concepts.
    : SPREADACT  ( spreading Activation ) \ atm 23jan2006
      pre @ 0 > IF   \  if a pre(vious) concept exists...
      \ midway @  zone @  DO   \ Time-zone search.
        zone @ 7 -   zone @  DO   \ 12sep2005 As for seq, so for pre.
          I 0  psi{ @   pre @  =  IF  \  Find the "pre" concept... 
                    1   I  1 psi{ +!  \ 8sep2005 minor "pre" boost
                        I  1 psi{ @  0 < IF   \ 7aug2005
                    0   I  1 psi{  !          \ Reset to zero;
                        THEN   \ Do not permit negative activations.
            I 1 psi{ @ 63 > IF  \ If activation-limit has been exceeded
              63 I 1 psi{ !     \ set the activation back to the limit.
            THEN
            I zone  @  6 - > IF LEAVE THEN  \ Expect no long words.
          THEN       \  End of middle if-clause.
        -1  +LOOP    \  End of backwards loop.
      THEN           \  End of outer if-clause.
      seq @ 0 > IF   \  If a sub(seq)uent concept exists,
      \ t @       zone @  DO   \  Prepare to search zone.
      \ zone @ 6 +   zone @  DO   \  9sep2005 a debug-test
        zone @ 7 +   zone @  DO   \  9sep2005 Some words are longer.
          I 0  psi{ @   seq @  =  IF  \ If a match of "seq" is found,
            fyi @ 2 = IF  \ 9nov2005 In Tutorial show spreading activation.
              pov @ 35 = IF  \ 24sep2005 Do not interrupt input with messages.
              \ CR  \ 9nov2005 Accumulate words horizontally on a line.
                0 psi6 !         \ 6sep2005 safety measure.
                midway @ t @ DO  \ Look beyond verb for the "seq" concept
                  I   0  psi{ @   oldpsi @  =  IF  \ If "oldpsi" match found,
                    I 6  psi{ @   psi6 !    \ Get the enx as psi6
                    LEAVE                   \ Stop looking after one find.
                  THEN       \  End of check for the "oldpsi" concept
                -1  +LOOP    \  End of backwards search for "oldpsi" concept
                midway @ t @ DO  \ Use enx to get the aud recall-vector
                  I   0  en{ @    psi6 @ = IF
                    I 5  en{ @  rv !   \ Store the auditory recall-vector.
                    LEAVE    \ Use only the most recent auditory engram.
                  THEN
                -1  +LOOP    \ End of backwards search for "psi6" vocab item.
                0 rv !  \ Zero out the auditory associative tag.
                midway @ t @ DO  \ Look beyond verb for the "seq" concept
                  I   0  psi{ @   seq @  =  IF  \ If a match of "seq" found,
                    I 6  psi{ @   psi6 !    \ Get the enx as psi6
                    LEAVE                   \ Stop looking after one find.
                  THEN       \  End of check for the "seq" concept
                -1  +LOOP    \  End of backwards search for "seq" concept
                midway @ t @ DO  \ Use enx to get the aud recall-vector
                  I   0  en{ @    psi6 @ = IF
                    I 5  en{ @  rv !   \ Store the auditory recall-vector.
                    LEAVE    \ Use only the most recent auditory engram.
                  THEN
                -1  +LOOP    \ End of backwards search for "psi6" vocab item.
                rv @ 0 > IF  \ Avoid crashes if rv is negative.
                  BEGIN
                    rv @ 0 aud{ @ EMIT  1 rv +!
                    rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
                  UNTIL        \ Stop when a blank space is found.
                THEN
                0 rv !  \ Zero out the auditory associative tag.
             \  ."  at act " I 1 psi{ @ . ." yields "  \ after increment...
                ."  "  \ 9nov2005 For gap between words on one line.
              THEN    \ 24sep2005 End of test to display only internal thought.
            THEN      \  9nov2005 End of test for Tutorial-only mode.
            fyi @ 2 > IF  \ 9nov2005 In diagnostics show spreading activation.
              pov @ 35 = IF  \ 24sep2005 Do not interrupt input with messages.
                CR
                0 psi6 !         \ 6sep2005 safety measure.
                midway @ t @ DO  \ Look beyond verb for the "seq" concept
                  I   0  psi{ @   oldpsi @  =  IF  \ If "oldpsi" match found,
                    I 6  psi{ @   psi6 !    \ Get the enx as psi6
                    LEAVE                   \ Stop looking after one find.
                  THEN       \  End of check for the "oldpsi" concept
                -1  +LOOP    \  End of backwards search for "oldpsi" concept
                midway @ t @ DO  \ Use enx to get the aud recall-vector
                  I   0  en{ @    psi6 @ = IF
                    I 5  en{ @  rv !   \ Store the auditory recall-vector.
                    LEAVE    \ Use only the most recent auditory engram.
                  THEN
                -1  +LOOP    \ End of backwards search for "psi6" vocab item.
                rv @ 0 > IF  \ Avoid crashes if rv is negative.
                  BEGIN
                    rv @ 0 aud{ @ EMIT  1 rv +!
                    rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
                  UNTIL        \ Stop when a blank space is found.
                THEN
                0 rv !  \ Zero out the auditory associative tag.
                ."  #" oldpsi @ . ." w. act " oldact @ .
                ." at I = " I . ." sending spike "
                spike @ . ." to seq #" seq @ .
                midway @ t @ DO  \ Look beyond verb for the "seq" concept
                  I   0  psi{ @   seq @  =  IF  \ If a match of "seq" found,
                    I 6  psi{ @   psi6 !    \ Get the enx as psi6
                    LEAVE                   \ Stop looking after one find.
                  THEN       \  End of check for the "seq" concept
                -1  +LOOP    \  End of backwards search for "seq" concept
                midway @ t @ DO  \ Use enx to get the aud recall-vector
                  I   0  en{ @    psi6 @ = IF
                    I 5  en{ @  rv !   \ Store the auditory recall-vector.
                    LEAVE    \ Use only the most recent auditory engram.
                  THEN
                -1  +LOOP    \ End of backwards search for "psi6" vocab item.
                rv @ 0 > IF  \ Avoid crashes if rv is negative.
                  BEGIN
                    rv @ 0 aud{ @ EMIT  1 rv +!
                    rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
                  UNTIL        \ Stop when a blank space is found.
                THEN
                0 rv !  \ Zero out the auditory associative tag.
                ."  at act " I 1 psi{ @ . ." yields "  \ after increment...
              THEN    \ 24sep2005 End of test to display only internal thought.
            THEN      \  9nov2005 End of test for Diagnostic mode.
            spike   @   I  1 psi{ +!  \ 2aug2005 "spike" and not "bulge"
            fyi @ 2 > IF     \ 9nov2005 In Diagnostic-only mode...
              pov @ 35 = IF  \ 24sep2005 Do not interrupt input with messages.
                I 1 psi{ @ . \ show accumulating activation
                fyi @ 2 > IF \ In Diagnostic mode...
                  ." and zone = " zone @ .      \ 9sep2005
                THEN         \ End of test of "fyi" flag status.
              THEN    \ 24sep2005 End of test to display only internal thought.
            THEN             \ End of test for Tutorial mode 
              fyi @ 3 = IF    \ In diagnostic mode...
                I 1 psi{ @ . ." (lim = 63) for t=" I rv !
                  BEGIN      \ Start looking for a word-beginning.
                    -1 rv +!             \ decrement rv until
                    rv @ 3 aud{ @ 1 =    \ ... a beg=1 is found
                  UNTIL
                  rv @ .   \ Show the time of the auditory engram.
                  BEGIN
                    rv @ 0 aud{ @ EMIT  1 rv +!
                    rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
                  UNTIL        \ Stop when a blank space is found.
                  ."  engram; spike = " spike @ .
                  0 rv !  \ Zero out the auditory associative tag. 
               THEN
              I 1 psi{ @ 63 > IF  \ If activation-limit has been exceeded
                63 I 1 psi{ !     \ set the activation back to the limit.
              THEN
            I zone  @  6 + > IF
              fyi @ 2 > IF   \ 13oct2005 Make room for Transcript mode.
                CR ." executing LEAVE at zone = " zone @ .
              THEN           \ 9sep2005 end of debug-test
              LEAVE
            THEN     \  Expect no long words.
          THEN       \  End of middle if-clause.
        LOOP         \  End of forwards loop.
      THEN           \  End of outer if-clause. 
    ;  \ End of SPREADACT; return to ACTIVATE.
    
    
    \ nounAct is called from nounPhrase so as to activate equally all the
    \ nodes of a noun-fiber with the same activation that won selection.
    :  nounAct ( re-activate all recent nodes of a concept ) \ atm 13jun2006
    \ psiDecay  \ 13jun2006 Try to knock out competing, spurious associations,
      fyi @ 2 > IF CR  \ Too much detail for Tutorial mode.
      ."     Calling nounAct (not in AI4U). psi = " psi @ . CR
      THEN  \ Parsing and NLP generation may need separate activations.
      psi @  0 >  IF     \ to avoid psi = 0 = psi0
        fyi @ 2 > IF  \ 13oct2005 Leave room for Transcript display.
     \  fyi @ 1 > IF  \  7jun2006 Test: Troubleshoot in Tutorial mode.
          CR ."       nounAct calls spreadACT to xfer proportionate "
          ." act. from each node of concept #" psi @ .
        THEN          \ 5sep2005 End of test for Tutorial mode.
        midway @   t @ 1+  DO  \  Search back to midway.
          I 0 psi{ @ psi @ = IF  \  If concept "psi" is found...
          \  20 I  1 psi{ +!  \ 8oct2005 During internal-pov thought processes.
          \  36 I  1 psi{ +!  \ 31may2006 Try larger activation internally.
          \  32 I  1 psi{ +!  \  1jun2006 Aim for consciousness tier.
          \  16 I  1 psi{ +!  \  1jun2006 Prevent internal hyperactivation.
          \  48 I  1 psi{ +!  \  1jun2006 Set high wave-crest activation.
          \  31 I  1 psi{ +!  \  6jun2006 Assume a pre-existing lower-tier.
         jolt @ I  1 psi{ !   \  7jun2006 Activate all the nodes equally.
                I  0 psi{ @  54 = IF  \ 15oct2005 Check for #54 "WHAT"
              0 I  1 psi{ !   \ Zero "WHAT" for sake of other concepts.
                THEN   \ 15oct2005 End of test for concept #54 "WHAT"
              I  1 psi{ @ 63 > IF  \ If activation-limit has been exceeded
               \ 7 EMIT            \ 2jun2006 Un-comment for advisory noise.
                63 I 1 psi{ !      \ set the activation back to the limit.
              \ jolt @ 1 - jolt !  \ 7jun2006 Reduce jolt by one.
              THEN  \ 14sep2005 Back to 63 limit for porting to JavaScript AI.
              I  3 psi{ @  pre !  ( for use in SPREADACT )
              I  5 psi{ @  seq !  ( for use in SPREADACT )
              I           zone !  ( for use in SPREADACT )
     \  2aug2005: Send a "spike" as a fraction of accumulated activation.
     \  9sep2005: Try a faster mount-up of activation being sent.
     \ 12sep2005: Use even larger spike values. 14sep2005
     \  6jun2006: Use low spike values for the Moving Wave Algorithm (MWA).
              I  1 psi{ @  0 = IF  0 spike ! THEN
              I  1 psi{ @  5 > IF  1 spike ! THEN
              I  1 psi{ @ 10 > IF  2 spike ! THEN
              I  1 psi{ @ 15 > IF  3 spike ! THEN
              I  1 psi{ @ 20 > IF  4 spike ! THEN
              I  1 psi{ @ 25 > IF  5 spike ! THEN
              I  1 psi{ @ 30 > IF  6 spike ! THEN
              I  1 psi{ @ 35 > IF  7 spike ! THEN
              I  1 psi{ @ 40 > IF  8 spike ! THEN
              I  1 psi{ @ 45 > IF  9 spike ! THEN
              I  1 psi{ @ 50 > IF 10 spike ! THEN
              I  1 psi{ @ 55 > IF 11 spike ! THEN
              I  1 psi{ @ 60 > IF 12 spike ! THEN
            psi @ oldpsi ! \ 6sep2005 To show source of spreading activations.
              I  1 psi{ @ oldact !  \ To show source of spreading activations.
              I  4 psi{ @ oldpos !  \ 8sep2005 verbs as a special case
            SPREADACT             ( for spreading activation )
            0 oldpos !  \ 8sep2005 safety measure
            0 oldpsi !  \ 6sep2005 safety measure.
            0 oldact !  \ 6sep2005 safety measure. 
            0  pre !              \ blank out "pre" for safety
            0  seq !              \ blank out "seq" for safety
          THEN                    \ end of test for "psi" concept
        -1  +LOOP                 \ end of backwards loop 
      THEN  \  End of check for non-zero "psi" from nounPhrase module.
    ;  \ End of nounAct; return to the nounPhrase calling module.
    
    
    \ verbAct is called from verbPhrase so as to engender a nodal slosh-over
    \ of subject-noun plus verb activation onto a correct direct object.
    :  verbAct ( re-activate all recent nodes of a verb ) \ atm 30mar2007
      fyi @ 2 > IF CR  \ Too much detail for Tutorial mode.
      ."     Calling verbAct (not in AI4U). psi = " psi @ . CR
      THEN  \ Parsing and NLP generation may need separate activations.
      psi @  0 >  IF     \ to avoid psi = 0 = psi0
        fyi @ 2 > IF  \ 13oct2005 Leave room for Transcript display.
          CR ."       verbAct calls spreadACT to xfer proportionate "
          ." act. from each node of concept #" psi @ .
        THEN          \ 5sep2005 End of test for Tutorial mode.
        midway @   t @ 1+  DO  \  Search back to midway.
          I 0 psi{ @ psi @ = IF  \  If concept "psi" is found...
            fyi @ 1 > IF      \  9jun2006 If in Tutorial mode or higher...
            \ I 1 psi{ @ 0 > IF  \ If verb-node has above-zero activation
              I 1 psi{ @ 8 > IF  \ 13jun2006 If verb node has an activation
              \ high enough to indicate that slosh-over is happening.
                ." +"         \ Simple character to suggest slosh-over.
              THEN            \ End of test for above-zero activation
            THEN              \ End of test for Tutorial display mode.
    
                I  1 psi{ @  psi1 !  \ 30mar2007 Verb-node activation level.
                     psi1 @  psi1 +! \ 30mar2007 Double the psi1 value.
                         16  psi1 +! \ 30mar2007 Amplify for slosh-over.
         psi1 @ I  1 psi{ !   \  30mar2007 Set activation on each psi-node.
    
                I  0 psi{ @  54 = IF  \ 15oct2005 Check for #54 "WHAT"
              0 I  1 psi{ !   \ Zero "WHAT" for sake of other concepts.
                THEN   \ 15oct2005 End of test for concept #54 "WHAT"
              I  1 psi{ @ 63 > IF  \ If activation-limit has been exceeded
                63 I 1 psi{ !      \ set the activation back to the limit.
              THEN  \ 14sep2005 Back to 63 limit for porting to JavaScript AI.
              I  3 psi{ @  pre !  ( for use in SPREADACT )
              I  5 psi{ @  seq !  ( for use in SPREADACT )
              I           zone !  ( for use in SPREADACT )
     \ 30mar2007: Subject & verb activation sloshes over onto direct object.
              I  1 psi{ @  0 = IF  0 spike ! THEN
              I  1 psi{ @  5 > IF  3 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 10 > IF  7 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 15 > IF 11 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 20 > IF 15 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 25 > IF 19 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 30 > IF 23 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 35 > IF 27 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 40 > IF 31 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 45 > IF 35 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 50 > IF 39 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 55 > IF 43 spike ! THEN  \ 30mar2007 From JSAI
              I  1 psi{ @ 60 > IF 47 spike ! THEN  \ 30mar2007 From JSAI
            psi @ oldpsi ! \ 6sep2005 To show source of spreading activations.
              I  1 psi{ @ oldact !  \ To show source of spreading activations.
              I  4 psi{ @ oldpos !  \ 8sep2005 verbs as a special case
            SPREADACT             ( for spreading activation )
            0 oldpos !  \ 8sep2005 safety measure
            0 oldpsi !  \ 6sep2005 safety measure.
            0 oldact !  \ 6sep2005 safety measure.
            0  pre !              \ blank out "pre" for safety
            0  seq !              \ blank out "seq" for safety
          THEN                    \ end of test for "psi" concept
        -1  +LOOP                 \ end of backwards loop
      THEN  \  End of check for non-zero "psi" from verbPhrase module.
    ;  \ End of verbAct; return to the verbPhrase calling module.
    
    
    \ ACTIVATE is called from OLDCONCEPT so as to
    \ reactivate older nodes of a newly active concept.
    :  ACTIVATE ( re-activate all recent nodes of a concept ) \ atm 10jun2006
      psiDecay   \ 8oct2005 Favor new activations over old and unresolved.
      fyi @ 2 > IF CR  \ Too much detail for Tutorial mode.
      ."     Calling ACTIVATE. psi = " psi @ . CR
      THEN  \ Parsing and NLP generation may need separate activations.
      psi @  0 >  IF     \ to avoid psi = 0 = psi0
        fyi @ 2 > IF  \ 13oct2005 Leave room for Transcript display.
          CR ."       ACTIVATE calls spreadACT to xfer proportionate "
          ." act. from each node of concept #" psi @ .
        THEN          \ 5sep2005 End of test for Tutorial mode. 
        midway @   t @ 1+  DO  \  Search back to midway.
          I 0 psi{ @ psi @ = IF  \  If concept "psi" is found... 
         \ 17 I  1 psi{ +!  \  8oct2005 Let user input prevail over psiDamp. 
           pov @ 42 = IF      \ 8oct2005 Test for external user-entry "pov"
           \ 21 I  1 psi{ +!  \ 8oct2005 Let user input prevail over psiDamp.
           \ 31 I  1 psi{ +!  \ 2jun2006 Upper boundary of subconscious tier.
           \ 31 I  1 psi{ !   \ 7jun2006 Impart a set value, not an increment.
             21 I  1 psi{ !   \ 7jun2006 Impart a set value, not an increment.
           ELSE
          \  20 I  1 psi{ +!  \ 8oct2005 During internal-pov thought processes.
          \  36 I  1 psi{ +!  \ 31may2006 Try larger activation internally.
          \  32 I  1 psi{ +!  \  1jun2006 Aim for consciousness tier.
          \  16 I  1 psi{ +!  \  1jun2006 Prevent internal hyperactivation.
          \  48 I  1 psi{ +!  \  1jun2006 Set high wave-crest activation.
          \  31 I  1 psi{ !   \  7jun2006 Safety measure.
             21 I  1 psi{ !   \  7jun2006 Safety measure.
                I  0 psi{ @  54 = IF  \ 15oct2005 Check for #54 "WHAT"
              0 I  1 psi{ !   \ Zero "WHAT" for sake of other concepts.
                THEN   \ 15oct2005 End of test for concept #54 "WHAT"
           THEN
              I  1 psi{ @ 63 > IF  \ If activation-limit has been exceeded
              \  7 EMIT            \ 2jun2006 Un-comment for advisory noise.
                63 I 1 psi{ !      \ set the activation back to the limit.
              THEN  \ 14sep2005 Back to 63 limit for porting to JavaScript AI.
              I  3 psi{ @  pre !  ( for use in SPREADACT )
              I  5 psi{ @  seq !  ( for use in SPREADACT )
              I           zone !  ( for use in SPREADACT )
     \  2aug2005: Send a "spike" as a fraction of accumulated activation.
     \  9sep2005: Try a faster mount-up of activation being sent.
     \ 12sep2005: Use even larger spike values. 14sep2005
              I  1 psi{ @  0 = IF  0 spike ! THEN
              I  1 psi{ @  5 > IF  4 spike ! THEN
              I  1 psi{ @ 10 > IF  6 spike ! THEN
              I  1 psi{ @ 15 > IF  8 spike ! THEN
              I  1 psi{ @ 20 > IF 10 spike ! THEN
              I  1 psi{ @ 25 > IF 12 spike ! THEN
              I  1 psi{ @ 30 > IF 20 spike ! THEN
              I  1 psi{ @ 35 > IF 21 spike ! THEN
              I  1 psi{ @ 40 > IF 22 spike ! THEN
              I  1 psi{ @ 45 > IF 23 spike ! THEN
              I  1 psi{ @ 50 > IF 24 spike ! THEN
              I  1 psi{ @ 55 > IF 25 spike ! THEN
              I  1 psi{ @ 60 > IF 26 spike ! THEN 
            psi @ oldpsi ! \ 6sep2005 To show source of spreading activations.
              I  1 psi{ @ oldact !  \ To show source of spreading activations.
              I  4 psi{ @ oldpos !  \ 8sep2005 verbs as a special case
            SPREADACT             ( for spreading activation )
            0 oldpos !  \ 8sep2005 safety measure
            0 oldpsi !  \ 6sep2005 safety measure.
            0 oldact !  \ 6sep2005 safety measure. 
            0  pre !              \ blank out "pre" for safety
            0  seq !              \ blank out "seq" for safety
          THEN                    \ end of test for "psi" concept
        -1  +LOOP                 \ end of backwards loop 
      THEN  \  End of check for non-zero "psi" from OLDCONCEPT.
    ;  \ End of ACTIVATE; return to OLDCONCEPT or EGO.
    
    
    \  INSTANTIATE is called from the PARSER
    \  module to create a new node of a Psi concept.
    :  INSTANTIATE ( create a concept-fiber node ) \ atm 14oct2005
      ( concept fiber psi )             psi @  t @  0 psi{ !
      ( Set "act" activation level. )   act @  t @  1 psi{ +!
      ( Store JUXtaposition tags. )     jux @  t @  2 psi{ !
      ( Store PREvious associand. )     pre @  t @  3 psi{ !
      ( Store functional pos code. )    pos @  t @  4 psi{ !
      ( Store the subSEQuent tag. )     seq @  t @  5 psi{ !
      ( Store the EN-transfer tag. )    enx @  t @  6 psi{ ! 
      ( Reset for safety. )       \   0 seq !  0 enx ! 
    ;  \ End of INSTANTIATE; return to Parser module.
    
    
    \  enVocab is called from bootstrap; NEWCONCEPT or OLDCONCEPT
    \  to create a node on a quasi-concept-fiber by "attaching"
    \  to it associative tags for En(glish) vocab(ulary).
    :  enVocab ( English Vocabulary node creation ) \ atm 14oct2005
      ( Number "nen" of English )       nen @  t @  0  en{ !
      ( Do not store the activation level; it is a transient.)
      ( Store mindcore EXit tag. )      fex @  t @  2  en{ !
      ( Store part of speech "pos".)    pos @  t @  3  en{ !
      ( Store mindcore IN tag. )        fin @  t @  4  en{ !
      ( Store the auditory "aud" tag. ) aud @  t @  5  en{ !
    ;  \ End of enVocab; return to OLDCONCEPT or NEWCONCEPT.
    
    
    \ PARSER is called from oldConcept or newConcept
    \ to help the Artificial Mind comprehend verbal input
    \ by properly assigning associative tags with flags.
    :  PARSER ( determine the part of speech ) \ atm 14oct2005
      \ The "bias" has no control over recognized oldConcept words:
      5 bias !  \ Initial bias is for a noun=5.
      uract @ 1 - uract !  \ 26jul2002 Decrement "uract" from HCI.
      uract @ act !  \ 26jul2002 Activation will soon be restored. 
      INSTANTIATE  \ Create a new instance of a Psi concept.
      \ After a word is instantiated, expectations may change.
      \ Recognitions and expectations are pos-codeterminants.
      pos @ 5 = IF  8 bias !  THEN  \ After noun, expect a verb.
      pos @ 8 = IF  5 bias !  THEN  \ After verb, expect a noun. 
      psi @  jux !  \ but only for the next time around, not now.
    ;  \ End of Parser; return to oldConcept or newConcept.
    
    
    \ OLDCONCEPT is called from AUDITION to create a
    \ fresh concept-node for a recognized input word.
    :  OLDCONCEPT ( recognize a known word ) \ atm 18jun2006
       2 act !         \  8sep2005 Build up in trade-off with psiDecay.
      \ 7sep2005 Actual value may be set in the ACTIVATE module. .
      midway @ t @ DO  \ Cycle back through the English lexicon.
        I 0 en{ @ psi @ = IF   \ If psi-tag matches lexical concept,
        I 2 en{ @    0 > IF    \ if it is greater than zero,
        I 2 en{ @  fex ! THEN  \ retrieve the fiber-out flag.
        I 3 en{ @    0 > IF    \ So as to parse by word-recognition,
        I 3 en{ @  pos ! THEN  \ retrieve most recent part-of-speech.
        I 4 en{ @    0 > IF    \ If it is greater than zero,
        I 4 en{ @  fin ! THEN  \ retrieve the fiber-in flag.
        LEAVE        \ Use only the most recent English engram-node.
        THEN         \ End of searching if-clause.
      -1 +LOOP       \ End of the backwards loop.
      \ Next code stores "psi" directly instead of calling enVocab,
      \ so that value of "psi" will not interfere with "nen" value:
      ( "psi" as found by audRecog )    psi @  t @  0  en{ !
      ( Store zero activation. )          0    t @  1  en{ !
      ( Store mindcore EXit tag. )      fex @  t @  2  en{ !
      ( Store part of speech "pos".)    pos @  t @  3  en{ !
      ( Store mindcore IN tag. )        fin @  t @  4  en{ !
      ( Store the auditory "aud" tag. ) aud @  t @  5  en{ !
      \ The Robot Mind as a seed AI for Technological Singularity
      \ approaches artificial consciousness in the following code:
      pov @  35 = IF fex @ psi ! THEN   \ during internal (#) "pov";
      pov @  42 = IF fin @ psi ! THEN   \ external (*) "pov"
      psi @  enx !      \ Assume Psi number = En(glish) number.
      psi @ 54 = IF 8 act ! THEN  \ Subactivate question "what".
      psi @ 55 = IF 8 act ! THEN  \ Subactivate question "who".
      psi @ 59 = IF 8 act ! THEN  \ Subactivate auxiliary "do".
      PARSER            \ Determine the part-of-speech "pos".
        0 pos !         \ Reset the part-of-speech "pos" flag.
      fyi @ 2 > IF CR          \ In Diagnostic mode.
      ."   from oldConcept "   \ Seeing what calls Activate.
      THEN              \ End of test for Diagnostic mode
    
    \ 18jun2006 Commenting out confusing message from Tutorial mode:
    \ fyi @ 2 = IF     \ 9nov2005 In Tutorial-only mode
    \   pov @ 35 = IF  \ 9nov2005 Do not interrupt input with messages.
    \     ."  associates to "  \ Avoiding repetition elsewhere.
    \   THEN           \ End of test for internal point-of-view.
    \ THEN             \ 9nov2005 End of test for Tutorial mode.
    \ Code above may be removed from subsequent versions.
    
      pov @ 42 = IF       \ 5jun2006 Only activate external input.
        pre   @  urpre !  \ Hold value of "pre" safe during ACTIVATE.
        ACTIVATE          \ Re-activate recent nodes of the concept.
        urpre @    pre !  \ Restore the value of "pre".
      THEN                \ 5jun2006 Internal mode calls superAct direcly.
    
      \  The next lines store "seq" retroactively:
      pre @  0 >  IF    \ If a positive "pre" exists...
        midway @  t @  DO  \ look backwards in time...
          I         0 psi{ @  pre @  =  IF   \ for a node of "pre"
            psi @ I 5 psi{ !  \ and store "psi" as retroactive "seq"
            LEAVE            \ One instance is enough.
          THEN               \ end of inner if-clause
        -1  +LOOP            \ end of backwards loop
      THEN                   \ end of outer if-clause
      psi  @  pre !          ( for next nen )
      0 act !       \ Reset for safety.
      \ 26jul2002 Diagnostic test code:
      pov @ 35 = IF  \ 26jul2002 Make sure pov is internal,
        1 match !  \ 26jul2002 Declare word-match for SPEECH.
      THEN  \ 26jul2002 End of test for internal pov=35 state.
    ;  \ End of OLDCONCEPT; return to AUDITION.
    
    
    \  NEWCONCEPT is called from AUDITION when the Robot
    \  AI Mind must learn the concept of a new word.
    :  NEWCONCEPT ( machine learning of new concepts ) \ atm 13jun2006
      1 nen +!     \ Increment "nen" beyond English bootstrap concepts.
      nen @ psi !  \ Let psi & n(umeric) En(glish) have same identifier.
      nen @ fex !  \ Let f(iber)-ex also the same numeric identifier.
      nen @ fin !  \ Let f(iber)-in have the same numeric identifier.
      \ 26jul2002 Let HCI set "act" for Parser to decrement:
      \ 32 act !     \ Start with a basic activation-value.
    \ 27 act !     \ 27jul2005 Gradual increase against spurious associations.
      36 act !     \  6aug2005 For greater SVO assertion of new concepts.
                   \  6aug2005 HCI "uract" sets new-concept Parser activation.
      bias @ pos ! \ Expectancy from Parser module.
      enVocab ( to create an ENglish vocabulary node )
      0 fex !       \ blank the fiber-out flag;
      0 fin !       \ blank the fiber-in flag;
      nen @  enx !  \ Set the transfer-to-English "enx" flag.
      PARSER        \ Determine the part-of-speech "pos", then instantiate.
      \ 4aug2002 A new noun raises level of "recon" urge to ask questions:
      pos @  5 = IF     \  4aug2002 If a new noun is being encountered...
        1 recon !       \ 13jun2006 Commented out "recon" to skip questions.
        nen @  topic !  \  4aug2002 hold onto the noun as a "topic".
      THEN     \ 4aug2002 End of gathering data for asking a question.
      0 pos !       \ Reset the part-of-speech variable.
      pre @ 0 > IF  \ Set "seq" of any "pre" concept to "nen":
        midway @  t @  DO          \ Look backwards in time.
          I  0 psi{ @  pre @ = IF  \ If a psi0 matches the "pre"
            nen @  I 5 psi{ !  \ insert the "nen" as a "seq" flag.
            LEAVE     \ Store one instance, then break the loop.
          THEN        \ end of inner if-clause
        -1 +LOOP      \ end of search for "pre(vious)" concept
      THEN            \ End of test for a positive "pre".
      nen @  pre !    \ So that the next "nen" has a "pre".
      0 act !         \ Reset for safety.
    ;  \ End of NEWCONCEPT; return to AUDITION.
    
    \  audRecog (auditory recognition) comparator is called from audSTM
    \  to recognize words by matching input phonemes against memory.
    \  Anyone may code gusRecog, olfRecog, tacRecog, or visRecog.
    :  audRecog ( auditory Recognition ) \ atm 14oct2005
      0  psi !   \ Safety meaure.
      midway @  spt @ DO    \ Search from blank time back to midway.
        I 0 aud{ @ pho @ = IF  \ If incoming pho matches stored aud0;
          I 1 aud{ @ 0 = IF    \ if matching engram has no activation;
            I 3 aud{ @ 1 = IF  \ if beg=1 on matching no-act aud engram;
            \ Presence or absence of aud5 does not matter in next code
            \ because it can only involve a one-letter beg=1 match:
            \ I 5 aud{ @ psi !  \ fetch any aud5 as a potential psi.
              I 4 aud{ @ 1 = IF   \ If beg-aud has ctu=1 continuing,
                8 I 1+   1 aud{ ! \ activate the N-I-L character,
                \ so that match-up may continue past first char.
                0 psi !  \ Revoke any assignment of a match.
              ELSE       \ From JavaScript AI code.
              I 5 aud{ @  monopsi !  \ A tentative match-up.
              THEN   \ end of test for continuation of beg-aud
            THEN   \ end of test for a beg(inning) non-active aud0
          THEN   \ end of test for matching aud0 with no activation
          \ The following can happen only with non-initial chars
          \ and could also be expressed with an ELSE statement:
          I 1 aud{ @ 0 > IF  \ If matching aud0 has activation,
            0 psi !          \ zero out any previous psi-tag,
            \ because obviously the match-up is not complete.
            I 4 aud{ @ 1 = IF   \ If act-match aud0 has ctu=1 continuing,
              0 psi !           \ because match-up is not yet complete,
              8 I 1+   1 aud{ ! \ activate the N-I-L character.
            THEN    \ end of test for active-match aud0 continuation
            I 4 aud{ @ 0 = IF   \ If matching word-engram now ends,
              I 5 aud{ @ psi ! \ fetch the potential psi-tag, 
              \ which may be a valid recognition if the input stops.
              LEAVE            \ Accept first match going backwards.
            ELSE
              0 psi !  \  No match if the stored word does not end.
              monopsi @ 0 > IF   \ but if a one-char was found,
                monopsi @ psi !  \ use the one-letter recognition.
                0 monopsi !      \ Reset monopsi to zero.
              THEN               \ End of inner test.
            \  0 psi !  \  No match if the stored word does not end.
            THEN   \ End of test for final char that has a psi-tag.
          THEN     \ End of test for matching aud0 with activation.
        THEN       \ End of test for a character matching "pho".
      -1 +LOOP     \ End of looping backwards from "spt".
       psi @ 0 = IF         \ If no multi-char recognition,
         monopsi @ 0 > IF   \ but if a one-char was found,
           monopsi @ psi !  \ use the one-letter recognition.
           0 monopsi !      \ Reset monopsi to zero.
         THEN               \ End of inner test.
       THEN  \ From JavaScript AI Mind code.
    ;  \ End of audRecog; return to short term memory audSTM.
    
    \ audSTM is called from the AUDITION module.
    :  audSTM ( auditory Short Term Memory ) \ atm 14oct2005
      t @ vault @ > IF  \ If time has advanced beyond bootstrap,
        pho @ 32 > IF  audRecog  THEN  ( ASCII 32 = SPACE-bar )
      THEN  \ end of test to prevent "recognition" of bootstrap.
        t @ 1-  0 aud{ @  0 = IF  1 beg !  THEN  \ zero  2sep2005 X 0=
        t @ 1-  0 aud{ @ 32 = IF  1 beg !  THEN  \ SPACE-bar.
        pho @  t @  0 aud{ !  \  Store the pho(neme) at time t
     \      0  t @  1 aud{ !  \  Store no act(ivation) level.
        pov @  t @  2 aud{ !  \  point-of-view: internal #, external *
        beg @  t @  3 aud{ !  \  beg(inning)?  1 Yes or 0 No.
        ctu @  t @  4 aud{ !  \  continuation? 1=Y or 0 = No.
        ctu @ 0 = IF  \ 27jul2005 Store no false recognitions.
          psi @  t @  5 aud{ !  \  ultimate psi tag # to a concept.
          \ 0 psi !  \ 26jul2002 Safety precaution reset.
        THEN  \ 27jul2005 end of attempt to avoid false recognitions.
        pho @ 32 = IF t @ spt !  THEN  \ Update "space" time. 
    ;  \ End of audSTM; return to AUDITION.
    
    \ LISTEN is attentive for the entry of a single keystroke.
    :  LISTEN ( preparation for Audition ) \ atm 1jun2006
      rsvp @  1  DO  \ Value may be tailored to the CPU speed.
        KEY? IF      \ If a character from a key is waiting,
          KEY pho !  \ get a pho(neme) keystroke from the user.
          \ 25jul2002 Eliminate "quiet", set "pov" instead?
          0 quiet !  \ Zero means that user input is in progress.
          pho @  8 = IF 7 EMIT THEN \ 29apr2005 Backspace?
          pho @  9 = IF  \ 30apr2005 if user presses Tab.
    
            fyi @ 0 = IF CR CR \ 25may2006 Show header only once.
         TIME&DATE tsyear ! tsmonth ! tsday ! tshour ! tsminute ! tssecond !
      ." Transcript of AI Mind interview at "
      tshour @ . tsminute @ . tssecond @ . ." o'clock on " tsday @ .
        tsmonth @  1 = IF ." January "   THEN
        tsmonth @  2 = IF ." February "  THEN
        tsmonth @  3 = IF ." March "     THEN
        tsmonth @  4 = IF ." April "     THEN
        tsmonth @  5 = IF ." May "       THEN
        tsmonth @  6 = IF ." June "      THEN
        tsmonth @  7 = IF ." July "      THEN
        tsmonth @  8 = IF ." August "    THEN
        tsmonth @  9 = IF ." September " THEN
        tsmonth @ 10 = IF ." October "   THEN
        tsmonth @ 11 = IF ." November "  THEN
        tsmonth @ 12 = IF ." December "  THEN
        tsyear @ . 8 EMIT 46 EMIT CR  \ Backspace + period & carriage-return.
     ." Concept-activation numbers are for use by AI therapist or mind-tender."
              CR
            THEN
    
            1 fyi +!  \ Increment display-mode flag by one.
            fyi @ 3 > IF 0 fyi ! THEN \ Limit display-mode flag 0 to 3.
            fyi @ 0 = IF CR 
     ." Normal display mode. Tab 1 = Transcript; 2 = Tutorial; 3 = Diagnostic."
              CR
            THEN
            fyi @ 2 = IF CR  \ 13oct2005 Leaving room for Transcript display.
     ."   Tutorial mode reveals the internal thinking of the AI Mind." CR CR
            THEN
            fyi @ 3 = IF CR  \ 13oct2005 Leaving room for Transcript display.
     ." Diagnostic messages - ignore during input until you press ENTER."
            CR
            THEN
            0  pho !  \ Replace Tab value with zero to prevent instantiation.
          THEN         \ End of test for pressing of Tab key.
          pho @ 27 = IF  \ If ESCape key "27" is pressed...
            CR
            CR ." User Command:  halt" 0 pho ! 0 rjc ! 0 fyi !
            CR ." You may enter .psi .en .aud to view memory engrams, or"
            CR ." ALIFE [ENTER] to erase all memories and restart the Mind."
            CR ." Type 'bye' to quit Forth, then EXIT to quit DOS."
            CR
            QUIT
          THEN
          pho @ 0 > IF   \ 22jul2005 After zeroing HT-9, prevent display.
            pho @ EMIT   \ Display the character on-screen.
          THEN           \ End of test to disregard Tab-key entries.
          \  Next lines convert all ASCII input to upper case:
          pho @ DUP 96 > IF
            DUP 123 < IF
              32 -
            THEN
          THEN  pho !    \ Save the uppercase value as "pho" again.
          LEAVE  \ Abandon loop upon keypress
          ELSE
          ."  "  \ Show EITHER a keystroke OR a blank.
        THEN
        8  EMIT  \  This backspace is paired with the ELSE line.
      LOOP 
    ;  \  End of LISTEN; return to AUDITION.
    
    
    \ AUDITION handles the input of ASCII as phonemes.
    :  AUDITION ( accept auditory input ) \ atm 22jan2006
      0 match !  \ Precaution for sake of SPEECH.
      t @ nlt !
      pov @  42 = IF   \ If user is entering input,
         fyi @ 2 = IF  \ In Tutorial mode only...
     ."     Calling Audition for input to the auditory memory channel..." CR 
     ."       Calling Listen to monitor the sense of hearing for input..." CR
         THEN
         t @ spt !   \ set "space" time before start of input; 
         t @ 8 >  IF  .echo  THEN  ( show output of AI )
         CR ." Human: "
      THEN  \ 26jul2002 Testing not for "quiet" but for "pov".
      \ The following loop accepts user entry or AI re-entry:
      60  0  DO    \  Accept entry of up to 60 characters.
        \ 26jul2002 Because SENSORIUM and reentrant SPEECH both
        \ use AUDITION, we must sequester LISTEN from SPEECH
        \ so as not to slow down the process of reentry.
        pov @ 42 = IF   \ 35=internal; 42=external.
          LISTEN     \  Check for user input.
          pho @ 0 > IF   \ 30aug2005 Upon any human user input,
            1000 rsvp !  \ insrease the wait-time for humans.
          THEN           \ End of test for any input by humans.
          I 59 = IF  \ 30aug2005 During last calls to Listen...
            \ CR ." Call #" I . ."  being made to LISTEN. "
            pho @ 0 = IF  \ If no human input character is present...
              \ ."     No human input has been entered; reducing wait time.
              100 rsvp !   \ 30aug2005 Leave enough time for a keypress.
            ELSE           \ If a human is trying to enter input...
              1000 rsvp !  \ Restore the longer waiting time.
            THEN  \ End of check for absence of input (pho = zero)
          THEN       \ End of check for last call to Listen.
        THEN  \ End of check for expecting external human input.
        \ A CR-13 should come from SVO or LISTEN:
        \ Here we may need to insert a carriage-return CR
        \ if no external user enters any input, or if
        \ an entity fails to complete an entry of input:
     \   I 79 = IF     \ Must be near loop-number above.
     \     13 pho !    \ Simulate a carriage-return CR.
     \     1 inert +!  \  increment inert-flag by one
     \    CR ." Audition: inserting a CR" CR  \ 26jul2002 Test;
     \  THEN  \ end of code to insert a carriage-return CR
        pho @  0 > IF  \ prevents gaps in recording of input;
          1 t +!       \ increment t only if a char is stored
        THEN
        pho @ 13 = IF  \ If a carriage-return "13" comes in,
           \ Eliminate "quiet", set "pov" instead?
           1 quiet !   \ set the "quiet" flag to "1" (true);
          35 pov !     \ 25jul2002 Set "pov" to "internal".
           1 beg !     \ set the beginning-flag to one;
          13 eot !     \ set the end-of-text flag to 13;
          32 pho !     \ convert the carrier "pho" to a SPACE.
          CR           \ To show a carriage-return 13.
        THEN
        pho @ 27 =  IF  \ If ESCape key "27" is pressed...
          CR ." AUDITION: halt"  0 pho !  0 fyi !
          CR ." You may enter .psi .en .aud to view memory engrams, or"
          CR ." ALIFE [ENTER] to erase all memories and run the AI again."
          QUIT  \ Stop the program.
        THEN
        pho @ 32 = IF  \ Upon SPACE retroactively adjust end of word.
          t @  spt !       \ Update space time to the current time.
          t @  1 - tult !  \ The last previous time is "t-ultimate".
          0  tult @  4 aud{ !  \ Store a zero in the continuation-slot.
          psi @  0 >  IF    \ If audRecog & audSTM provide positive psi,
            onset @ aud !   \ use the onset-time as the recall-vector
            0 onset !       \ and blank out the onset-time.
            psi @  tult @  5 aud{ !  \  Store the psi-tag "psi".
            OLDCONCEPT      \ Create a new node of an old concept;
            0 psi !         \ Zero out the psi-tag for safety;
            0 aud !         \ Zero out the recall-vector for safety;
          ELSE            \ If there is no psi-tag "psi"; 
              len @ 0 > IF  \ if the incoming word has a positive length,
                onset @ aud ! \ store the onset from AUDITION as "aud" tag;
                NEWCONCEPT    \ to create a new node of a new concept;
                nen @  tult @  5  aud{ !  \ Store new concept psi-tag.
              THEN          \ end of test for a positive-length word;
          THEN              \ end of test for the presence of a move-tag;
          audDamp           \ Zero out the auditory engrams.
          0 len !           \ Zero out the length variable.
          0 aud !           \ Zero out the auditory "aud" recall-tag.
          eot @ 13 = IF     \ CR-13 resets a primitive parsing flag;
            5 bias !        \ prepare to parse the next word as a noun;
          THEN              \ end of test for carriage-return "13" CR.
          0 psi !           \ for both old and new concepts
        THEN  \ end of retroactive import of "psi" from audSTM
        1 beg !  \ Set the "beginning" flag to "1" for true.
        1 ctu !  \ Provisionally set "continuation" flag to true.
        spt @ 1 + onset !  \ Onset comes next after a "space" time.
        \ The following code has a speed-up alternative below it:
          t @  onset @  = IF  1 beg !  ELSE  0 beg !  THEN
        \ t @  onset @  =       beg !  ( JAF suggestion )
        \ 27jul2002 Reverting to 32 from 31 as a test:
        pho @ 32 > IF     \ If 32-space or alphabetic character...
          1 len +!
          audSTM  \ Store character in Short Term Memory.
        THEN
        eot @ 13 = IF  \ If end-of-text is a carriage-return "13"
          5 bias !     \ 26jul2002 To help the Parser module.
          \ 25jul2002 Eliminate "quiet", set "pov" instead?
          1 quiet !    \ set "quiet" flag to "1" (true) status;
        THEN
        eot @  0 > IF  \ If CR-13 has raised eot to 13,
          eot @ 14 = IF  \ 26jul2002 After one increment
            1 quiet !    \ 25jul2002 Just in case it is needed.
            0 eot !      \ 26jul2002 Reset for safety.
            0 pho !      \ 25jul2002 Reset for safety.
            LEAVE   \ 25jul2002 Return to the calling module.
          THEN  \ 25jul2002 End of post-final-iteration test.
          14 eot !  \ 25jul2002 Make final iteration, then leave.
        THEN  \  25jul2002 End of test.
        0 pho !  \ Prevent "pho" from reduplicating.
      LOOP       \ End of checking for human input or AI reentry.
    ;  \  End of AUDITION; return to SENSORIUM or to SPEECH.
    
    \ SENSORIUM handles the input of sensory perception.
    :  SENSORIUM ( sensory input channels ) \ atm 22jan2006
       psiDecay   \ 8oct2005 Favor user input over unresolved activations.
       fyi @ 2 = IF CR   \ In Tutorial mode only...
     ."   Calling Sensorium for input from all available robot sensors..." CR
       THEN
     ( SMELL  -- normal sensory stub for later implementation )
     ( VISION -- normal sensory stub for seed AI expansion )
     ( TOUCH  -- normal haptics stub for cybernetic organisms )
     ( TASTE  -- normal sensory stub for cyborg alife )
     ( SYNAESTHESIA -- an option in a multisensory AI )
       AUDITION  ( for entry or reentry of phonemic ASCII )
     ( COMPASS  -- exotic sensory stub for use in robots )
     ( GEIGER   -- exotic: Geiger counter )
     ( GPS      -- exotic: Global Positioning System )
     ( INFRARED -- exotic )
     ( RADAR    -- exotic: RAdio Detection And Ranging )
     ( SONAR    -- exotic: SOund Navigation And Ranging )
     ( VSA      -- exotic: Voice Stress Analyzer lie detector )
     ( Wi-Fi    -- exotic: 802.11 wireless fidelity )
    ;  \  Return to ALIFE or to the reentry process.
    
    
    \ enBoot (the English language bootstrap) holds the bootstrap
    \ sequences for thinking in English.  Instead of enBoot there
    \ could be deBoot for thinking in German (deutsch), or jaBoot
    \ for thinking in Japanese, or several such bootstraps together.
    \ POS: 1=adj 2=adv 3=conj 4=interj 5=noun 6=prep 7=pron 8=verb
    :  enBoot ( English Bootstrap of initial concepts ) \ atm 29mar2007
      0 t !  t @  spt !  ." (clearing memory...)"
      CR ." There is no warranty for what this software does."
    
        1 t ! 89 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ Y
        2 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
        3 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 32 psi ! audSTM \ S
     32 psi !  0 act !  0 jux !  0 pre ! 4 pos !  0 seq ! 32 enx ! INSTANTIATE
     32 nen !  0 act ! 32 fex !          4 pos ! 32 fin !  1 aud ! enVocab
    
        5 t ! 73 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ I
        6 t ! 70 pho ! 35 pov !  0 beg ! 0 ctu ! 20 psi ! audSTM \ F
     20 psi !  0 act !  0 jux !  0 pre ! 3 pos !  0 seq ! 20 enx ! INSTANTIATE
     20 nen !  0 act ! 20 fex !          3 pos ! 20 fin !  5 aud ! enVocab
    
        8 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
        9 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
       10 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu !  7 psi ! audSTM \ E
      7 psi !  0 act !  0 jux !  0 pre ! 1 pos !  0 seq !  7 enx ! INSTANTIATE
      7 nen !  0 act !  7 fex !          1 pos !  7 fin !  8 aud ! enVocab
    
       12 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
       13 t ! 82 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ R
       14 t ! 85 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ U
       15 t ! 84 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ T
       16 t ! 72 pho ! 35 pov !  0 beg ! 0 ctu ! 68 psi ! audSTM \ H
     68 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 66 seq ! 68 enx ! INSTANTIATE
     68 nen !  0 act ! 68 fex !          5 pos ! 68 fin ! 12 aud ! enVocab
    
       18 t ! 73 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ I
       19 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 66 psi ! audSTM \ S
     66 psi !  0 act !  0 jux ! 68 pre ! 8 pos !  0 seq ! 66 enx ! INSTANTIATE
     66 nen !  0 act ! 66 fex !          8 pos ! 66 fin ! 18 aud ! enVocab
    
       21 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
       22 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
       23 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
       24 t ! 84 pho ! 35 pov !  0 beg ! 0 ctu ! 22 psi ! audSTM \ T
     22 psi !  0 act !  0 jux !  0 pre ! 3 pos !  0 seq ! 22 enx ! INSTANTIATE
     22 nen !  0 act ! 22 fex !          3 pos ! 22 fin ! 21 aud ! enVocab
    
       26 t ! 65 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ A
       27 t ! 76 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ L
       28 t ! 76 pho ! 35 pov !  0 beg ! 0 ctu !  2 psi ! audSTM \ L
      2 psi !  0 act !  0 jux !  0 pre ! 1 pos !  0 seq !  2 enx ! INSTANTIATE
      2 nen !  0 act !  2 fex !          1 pos !  2 fin ! 26 aud ! enVocab
    
       30 t ! 82 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ R
       31 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       32 t ! 66 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ B
       33 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       34 t ! 84 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ T
       35 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 39 psi ! audSTM \ S
     39 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 39 enx ! INSTANTIATE
     39 nen !  0 act ! 39 fex !          5 pos ! 39 fin ! 30 aud ! enVocab
    
       37 t ! 65 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ A
       38 t ! 82 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ R
       39 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 67 psi ! audSTM \ E
     67 psi !  0 act !  0 jux ! 39 pre ! 8 pos ! 38 seq ! 67 enx ! INSTANTIATE
     67 nen !  0 act ! 67 fex !          8 pos ! 67 fin ! 37 aud ! enVocab
    
       41 t ! 80 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ P
       42 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
       43 t ! 82 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ R
       44 t ! 83 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ S
       45 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       46 t ! 78 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ N
       47 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 38 psi ! audSTM \ S
     38 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 38 enx ! INSTANTIATE
     38 nen !  0 act ! 38 fex !          5 pos ! 38 fin ! 41 aud ! enVocab
    
       49 t ! 66 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ B
       50 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
       51 t ! 67 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ C
       52 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
       53 t ! 85 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ U
       54 t ! 83 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ S
       55 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 18 psi ! audSTM \ E
     18 psi !  0 act !  0 jux !  0 pre ! 3 pos !  0 seq ! 18 enx ! INSTANTIATE
     18 nen !  0 act ! 18 fex !          3 pos ! 18 fin ! 49 aud ! enVocab
    
       57 t ! 87 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ W
       58 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 53 psi ! audSTM \ E
     53 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 53 enx ! INSTANTIATE
     53 nen !  0 act ! 53 fex !          5 pos ! 56 fin ! 57 aud ! enVocab
    
       60 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
       61 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
       62 t ! 73 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ I
       63 t ! 78 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ N
       64 t ! 75 pho ! 35 pov !  0 beg ! 0 ctu ! 63 psi ! audSTM \ K
     63 psi !  0 act !  0 jux !  0 pre ! 8 pos !  0 seq ! 63 enx ! INSTANTIATE
     63 nen !  0 act ! 63 fex !          8 pos ! 63 fin ! 60 aud ! enVocab
    
       66 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
       67 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
       68 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
       69 t ! 78 pho ! 35 pov !  0 beg ! 0 ctu ! 13 psi ! audSTM \ N
     13 psi !  0 act !  0 jux !  0 pre ! 2 pos !  0 seq ! 13 enx ! INSTANTIATE
     13 nen !  0 act ! 13 fex !          2 pos ! 13 fin ! 66 aud ! enVocab
    
       71 t ! 78 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ N
       72 t ! 79 pho ! 35 pov !  0 beg ! 0 ctu ! 27 psi ! audSTM \ O
     27 psi !  0 act !  0 jux !  0 pre ! 4 pos !  0 seq ! 27 enx ! INSTANTIATE
     27 nen !  0 act ! 27 fex !          4 pos ! 27 fin ! 71 aud ! enVocab
    
       74 t ! 89 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ Y
       75 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       76 t ! 85 pho ! 35 pov !  0 beg ! 0 ctu ! 56 psi ! audSTM \ U
     56 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 56 enx ! INSTANTIATE
     56 nen !  0 act ! 56 fex !          5 pos ! 50 fin ! 74 aud ! enVocab
    
       78 t ! 65 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ A
       79 t ! 78 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ N
       80 t ! 68 pho ! 35 pov !  0 beg ! 0 ctu ! 17 psi ! audSTM \ D
     17 psi !  0 act !  0 jux !  0 pre ! 3 pos !  0 seq ! 17 enx ! INSTANTIATE
     17 nen !  0 act ! 17 fex !          3 pos ! 17 fin ! 78 aud ! enVocab
    
       82 t ! 73 pho ! 35 pov !  1 beg ! 0 ctu ! 50 psi ! audSTM \ I
     50 psi !  0 act !  0 jux !  0 pre ! 1 pos ! 61 seq ! 50 enx ! INSTANTIATE
     50 nen !  0 act ! 50 fex !          1 pos ! 56 fin ! 82 aud ! enVocab
    
       84 t ! 68 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ D
       85 t ! 79 pho ! 35 pov !  0 beg ! 0 ctu ! 59 psi ! audSTM \ O
     59 psi !  0 act !  0 jux !  0 pre ! 8 pos !  0 seq ! 59 enx ! INSTANTIATE
     59 nen !  0 act ! 59 fex !          8 pos ! 59 fin ! 84 aud ! enVocab
    
       87 t ! 78 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ N
       88 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       89 t ! 84 pho ! 35 pov !  0 beg ! 0 ctu ! 12 psi ! audSTM \ T
     12 psi !  0 act !  0 jux !  0 pre ! 2 pos !  0 seq ! 12 enx ! INSTANTIATE
     12 nen !  0 act ! 12 fex !          2 pos ! 12 fin ! 87 aud ! enVocab
    
       91 t ! 75 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ K
       92 t ! 78 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ N
       93 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
       94 t ! 87 pho ! 35 pov !  0 beg ! 0 ctu ! 61 psi ! audSTM \ W
     61 psi !  0 act !  0 jux ! 50 pre ! 8 pos ! 16 seq ! 61 enx ! INSTANTIATE
     61 nen !  0 act ! 61 fex !          8 pos ! 61 fin ! 91 aud ! enVocab
    
       96 t ! 87 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ W
       97 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
       98 t ! 89 pho ! 35 pov !  0 beg ! 0 ctu ! 16 psi ! audSTM \ Y
     16 psi !  0 act !  0 jux !  0 pre ! 2 pos !  0 seq ! 16 enx ! INSTANTIATE
     16 nen !  0 act ! 16 fex !          2 pos ! 16 fin ! 96 aud ! enVocab
    
      100 t ! 83 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ S
      101 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      102 t ! 77 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ M
      103 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 69 psi ! audSTM \ E
     69 psi !  0 act !  0 jux !  0 pre ! 1 pos !  0 seq ! 69 enx ! INSTANTIATE
     69 nen !  0 act ! 69 fex !          1 pos ! 69 fin ! 100 aud ! enVocab
    
      105 t ! 80 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ P
      106 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      107 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      108 t ! 80 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ P
      109 t ! 76 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ L
      110 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 37 psi ! audSTM \ E
     37 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 70 seq ! 37 enx ! INSTANTIATE
     37 nen !  0 act ! 37 fex !          5 pos ! 37 fin ! 105 aud ! enVocab
    
      112 t ! 72 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ H
      113 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
      114 t ! 86 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ V
      115 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 70 psi ! audSTM \ E
     70 psi !  0 act !  0 jux ! 37 pre ! 8 pos !  0 seq ! 70 enx ! INSTANTIATE
     70 nen !  0 act ! 70 fex !          8 pos ! 70 fin ! 112 aud ! enVocab
    
      117 t ! 65 pho ! 35 pov !  1 beg ! 0 ctu !  1 psi ! audSTM \ A
      1 psi !  0 act !  0 jux !  0 pre ! 1 pos !  0 seq !  1 enx ! INSTANTIATE
      1 nen !  0 act !  1 fex !          1 pos !  1 fin ! 117 aud ! enVocab
    
      119 t ! 70 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ F
      120 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      121 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
      122 t ! 82 pho ! 35 pov !  0 beg ! 0 ctu ! 71 psi ! audSTM \ R
     71 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 71 enx ! INSTANTIATE
     71 nen !  0 act ! 71 fex !          5 pos ! 71 fin ! 119 aud ! enVocab
    
      124 t ! 79 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ O
      125 t ! 70 pho ! 35 pov !  0 beg ! 0 ctu ! 45 psi ! audSTM \ F
     45 psi !  0 act !  0 jux !  0 pre ! 6 pos !  0 seq ! 45 enx ! INSTANTIATE
     45 nen !  0 act ! 45 fex !          6 pos ! 45 fin ! 124 aud ! enVocab
    
      127 t ! 87 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ W
      128 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
      129 t ! 79 pho ! 35 pov !  0 beg ! 0 ctu ! 55 psi ! audSTM \ O
     55 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 55 enx ! INSTANTIATE
     55 nen !  0 act ! 55 fex !          5 pos ! 55 fin ! 127 aud ! enVocab
    
      131 t ! 73 pho ! 35 pov !  1 beg ! 0 ctu ! 50 psi ! audSTM \ I
     50 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 57 seq ! 50 enx ! INSTANTIATE
     50 nen !  0 act ! 50 fex !          5 pos ! 56 fin ! 131 aud ! enVocab
    
      133 t ! 65 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ A
      134 t ! 77 pho ! 35 pov !  0 beg ! 0 ctu ! 57 psi ! audSTM \ M
     57 psi !  0 act !  0 jux !  0 pre ! 8 pos !  0 seq ! 57 enx ! INSTANTIATE
     57 nen !  0 act ! 57 fex !          8 pos ! 57 fin ! 133 aud ! enVocab
    
      136 t ! 79 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ O
      137 t ! 82 pho ! 35 pov !  0 beg ! 0 ctu ! 21 psi ! audSTM \ R
     21 psi !  0 act !  0 jux !  0 pre ! 3 pos !  0 seq ! 21 enx ! INSTANTIATE
     21 nen !  0 act ! 21 fex !          3 pos ! 21 fin ! 136 aud ! enVocab
    
      139 t ! 87 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ W
      140 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
      141 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
      142 t ! 84 pho ! 35 pov !  0 beg ! 0 ctu ! 54 psi ! audSTM \ T
     54 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 54 enx ! INSTANTIATE
     54 nen !  0 act ! 54 fex !          5 pos ! 54 fin ! 139 aud ! enVocab
    
      144 t ! 84 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ T
      145 t ! 72 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ H
      146 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      147 t ! 89 pho ! 35 pov !  0 beg ! 0 ctu ! 52 psi ! audSTM \ Y
     52 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 62 seq ! 52 enx ! INSTANTIATE
     52 nen !  0 act ! 52 fex !          5 pos ! 52 fin ! 144 aud ! enVocab
    
      149 t ! 83 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ S
      150 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      151 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 62 psi ! audSTM \ E
     62 psi !  0 act !  0 jux ! 52 pre ! 8 pos !  0 seq ! 62 enx ! INSTANTIATE
     62 nen !  0 act ! 62 fex !          8 pos ! 62 fin ! 149 aud ! enVocab
    
      153 t ! 73 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ I
      154 t ! 78 pho ! 35 pov !  0 beg ! 0 ctu ! 44 psi ! audSTM \ N
     44 psi !  0 act !  0 jux !  0 pre ! 6 pos !  0 seq ! 44 enx ! INSTANTIATE
     44 nen !  0 act ! 44 fex !          6 pos ! 44 fin ! 153 aud ! enVocab
    
      156 t ! 77 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ M
      157 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 65 psi ! audSTM \ E
     50 psi !  0 act !  0 jux !  0 pre ! 5 pos !  0 seq ! 65 enx ! INSTANTIATE
     65 nen !  0 act ! 50 fex !          5 pos ! 56 fin ! 156 aud ! enVocab
    
     \  KIDS MAKE ROBOTS
     \                ROBOTS NEED ME
     \                             I HELP KIDS
    
      159 t ! 75 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ K
      160 t ! 73 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ I
      161 t ! 68 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ D
      162 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 72 psi ! audSTM \ S
     72 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 73 seq ! 72 enx ! INSTANTIATE
     72 nen !  0 act ! 72 fex !          5 pos ! 72 fin ! 159 aud ! enVocab
    
      164 t ! 77 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ M
      165 t ! 65 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ A
      166 t ! 75 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ K
      167 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 73 psi ! audSTM \ E
     73 psi !  0 act !  0 jux ! 72 pre ! 8 pos ! 39 seq ! 73 enx ! INSTANTIATE
     73 nen !  0 act ! 73 fex !          8 pos ! 73 fin ! 164 aud ! enVocab
    
      169 t ! 82 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ R
      170 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      171 t ! 66 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ B
      172 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      173 t ! 84 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ T
      174 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 39 psi ! audSTM \ S
     39 psi !  0 act !  0 jux ! 73 pre ! 5 pos !  0 seq ! 39 enx ! INSTANTIATE
     39 nen !  0 act ! 39 fex !          5 pos ! 39 fin ! 169 aud ! enVocab
    
      176 t ! 82 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ R
      177 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      178 t ! 66 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ B
      179 t ! 79 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ O
      180 t ! 84 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ T
      181 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 39 psi ! audSTM \ S
     39 psi !  0 act !  0 jux !  0 pre ! 5 pos ! 74 seq ! 39 enx ! INSTANTIATE
     39 nen !  0 act ! 39 fex !          5 pos ! 39 fin ! 176 aud ! enVocab
    
      183 t ! 78 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ N
      184 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      185 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      186 t ! 68 pho ! 35 pov !  0 beg ! 0 ctu ! 74 psi ! audSTM \ D
     74 psi !  0 act !  0 jux ! 39 pre ! 8 pos ! 50 seq ! 74 enx ! INSTANTIATE
     74 nen !  0 act ! 74 fex !          8 pos ! 74 fin ! 183 aud ! enVocab
    
      188 t ! 77 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ M
      189 t ! 69 pho ! 35 pov !  0 beg ! 0 ctu ! 65 psi ! audSTM \ E
     50 psi !  0 act !  0 jux ! 74 pre ! 5 pos !  0 seq ! 65 enx ! INSTANTIATE
     65 nen !  0 act ! 50 fex !          5 pos ! 56 fin ! 188 aud ! enVocab
    
      191 t ! 73 pho ! 35 pov !  1 beg ! 0 ctu ! 50 psi ! audSTM \ I
     50 psi !  0 act !  0 jux !  0 pre ! 1 pos ! 75 seq ! 50 enx ! INSTANTIATE
     50 nen !  0 act ! 50 fex !          1 pos ! 56 fin ! 191 aud ! enVocab
    
      193 t ! 72 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ H
      194 t ! 69 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ E
      195 t ! 76 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ L
      196 t ! 80 pho ! 35 pov !  0 beg ! 0 ctu ! 75 psi ! audSTM \ P
     75 psi !  0 act !  0 jux ! 50 pre ! 8 pos ! 72 seq ! 75 enx ! INSTANTIATE
     75 nen !  0 act ! 75 fex !          8 pos ! 75 fin ! 193 aud ! enVocab
    
    
      198 t ! 75 pho ! 35 pov !  1 beg ! 1 ctu !  0 psi ! audSTM \ K
      199 t ! 73 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ I
      200 t ! 68 pho ! 35 pov !  0 beg ! 1 ctu !  0 psi ! audSTM \ D
      201 t ! 83 pho ! 35 pov !  0 beg ! 0 ctu ! 72 psi ! audSTM \ S
     72 psi !  0 act !  0 jux ! 75 pre ! 5 pos !  0 seq ! 72 enx ! INSTANTIATE
     72 nen !  0 act ! 72 fex !          5 pos ! 72 fin ! 198 aud ! enVocab
    
      1 t +!
        t @  vault !  \ Retain size of enBoot for Rejuvenate.
        t @  tov !    \ 23jan2006: No display of enBoot sequence at start-up.
    \   t @  tov !    \  6oct2005 Try to prevent crashes involving "nesting."
      1 t +!          \ For a space before user input.
        t @ nlt !  ( nlt may be basis for DAMP functions )
                \ Assign concepts only above the pre-set first 64.
      71 nen !  \ Or higher if any more special words are included.
      5 bias !  \ Expect first to parse a noun=5.
      0 pho !  \ Reset to prevent reduplication.
      0 pre !  0 seq !  \  Prevent carry-overs.
    ;  \ End of enBoot; return to the main ALIFE loop.
    
    \  REJUVENATE is called by SECURITY when the "cns" is almost full,
    \  and makes the seed AI potentially immortal by erasing the
    \  oldest memories to free up "cns" space for new memories.
    :  REJUVENATE ( recycle oldest memory spaces ) \ atm 23jan2006
      fyi @ 0 > IF
        CLS \ Comment out this Clear-Screen if prior data must be seen.
        CR ."     Calling Rejuvenate (AI4U Chapter 21)." CR
      THEN
      0 edge !  \ When found, edge-of-thought becomes "1".
      CR 1 rjc +!  \ Increment the Rejuvenation-counter "rjc".
      ." Please wait as memories migrate in rejuvenation cycle #" rjc @ . CR
      t @ 2 +  coda @ vault @ +  DO  \ Loop after "vault" and "coda"
        \  Create a "junior-time" index offset by "coda":
        I  jrt !  \  First obtain the value of the current "Index".
        jrt @  coda @ -  jrt !  \ Then reduce the value by "coda" units.
        edge @ 1 = IF
          I 0 psi{ @  jrt @  0 psi{ !  0 I 0 psi{ !  \ Move the engram from
          I 1 psi{ @  jrt @  1 psi{ !  0 I 1 psi{ !  \ its senior time-spot
          I 2 psi{ @  jrt @  2 psi{ !  0 I 2 psi{ !  \ down to the "jrt"
          I 3 psi{ @  jrt @  3 psi{ !  0 I 3 psi{ !  \ "junior-time" spot
          I 4 psi{ @  jrt @  4 psi{ !  0 I 4 psi{ !  \ and erase the
          I 5 psi{ @  jrt @  5 psi{ !  0 I 5 psi{ !  \ original engram.
          I 6 psi{ @  jrt @  6 psi{ !  0 I 6 psi{ !
        THEN
        edge @  1 =  IF
          en5 @  1 <  IF  0 en5 !  THEN  \ Avoid negative "aud" flags.
          I 0 en{ @  jrt @  0 en{ !  0 I 0 en{ !  \ After moving, erase.
          I 1 en{ @  jrt @  1 en{ !  0 I 1 en{ !
          I 2 en{ @  jrt @  2 en{ !  0 I 2 en{ !
          I 3 en{ @  jrt @  3 en{ !  0 I 3 en{ !
          I 4 en{ @  jrt @  4 en{ !  0 I 4 en{ !
          I 5 en{ @  en5 !   \  Fetch the "aud" value to store as "en5"
              en5 @  vault @ < IF \  If "aud" points into bootstrap vault
              en5 @  jrt @  5 en{ !  0 I 5 en{ !  THEN \ unchanged "aud"
              en5 @  coda @  vault @ +  > IF  \ If "aud" is big enough...
              en5 @  coda @ -  jrt @ 5 en{ !  \ store "aud" after vault.
              THEN               0 I 5 en{ !  \ Erase original engram.
        THEN
        edge @  1 = IF  \ Although at first "edge" will be "0"
          I 0 aud{ @  jrt @  0 aud{ !   \ shift backwards
          I 1 aud{ @  jrt @  1 aud{ !   \ shift backwards
          I 2 aud{ @  jrt @  2 aud{ !   \ shift backwards
          I 3 aud{ @  jrt @  3 aud{ !   \ shift backwards
          I 4 aud{ @  jrt @  4 aud{ !   \ shift backwards
          I 5 aud{ @  jrt @  5 aud{ !   \ shift backwards
            fyi @ 1 > IF  \ In Tutorial or Diagnostic mode...
                      jrt @  0 aud{ @ EMIT  \ show the transfer
            THEN \ End of test to prevent recap during Normal display.
        THEN
        \ Searching for ASCII "123" bracket "{" inserted by SVO module:
        edge @ 0 = IF  \ As long as edge-of-thought has NOT been reached
         32 jrt @ 0 aud{ !  \ Use a SPACE not a zero.
          0 jrt @ 1 aud{ !
                I 2 aud{ @ 123 = IF  1 edge !  THEN
          0 jrt @ 2 aud{ !
          0 jrt @ 3 aud{ !
          0 jrt @ 4 aud{ !
          0 jrt @ 5 aud{ !
          0 jrt @ 0 en{ !  \ Store blank engrams after the enBoot vault
          0 jrt @ 1 en{ !  \ until the "edge" bracket "{" is found that
          0 jrt @ 2 en{ !  \ indicates the edge of a complete thought
          0 jrt @ 3 en{ !  \ in auditory, semantic & conceptual memory
          0 jrt @ 4 en{ !  \ about to be moved "coda" moments backwards
          0 jrt @ 5 en{ !  \ and be redeposited in "junior time" memory.
          0 jrt @ 0 psi{ ! \ "psi"
          0 jrt @ 1 psi{ ! \ "act"
          0 jrt @ 2 psi{ ! \ "jux"
          0 jrt @ 3 psi{ ! \ "pre"
          0 jrt @ 4 psi{ ! \ "pos"
          0 jrt @ 5 psi{ ! \ "seq"
          0 jrt @ 6 psi{ ! \ "enx"
        THEN
      LOOP
      jrt @  t !        \ Final value of "junior time" becomes time "t".
      cns @    t @  DO  \ Blank out all rejuvenated time.
       32  I 0  aud{ !  \ Use a SPACE not a zero.
        0  I 1  aud{ !
        0  I 2  aud{ !
        0  I 3  aud{ !
        0  I 4  aud{ !
        0  I 5  aud{ !
        0  I 0   en{ !  \ Blank out the "rejuvenated" most recent
        0  I 1   en{ !  \ areas of the "enVocab" English vocabulary
        0  I 2   en{ !  \ array, from the downsized time "t" point
        0  I 3   en{ !  \ up to the highest "cns" value of time "t".
        0  I 4   en{ !
        0  I 5   en{ !
        0  I 0  psi{ !  \ Blank out psi from "t" to end of "cns".
        0  I 1  psi{ !  \ "act"
        0  I 2  psi{ !  \ "jux" 22jul2002 forces other tags down.
        0  I 3  psi{ !  \ "pre"
        0  I 4  psi{ !  \ "pos"
        0  I 5  psi{ !  \ "seq"
        0  I 6  psi{ !  \ "enx"
      LOOP  \ End of blank-out of recovered recent memory space.
      t @ 20 - tov !  \ 29apr2005 Prevent truncation in .echo function.
      CR ." End of Rejuvenation #" rjc @ .
      ." in Mind.Forth Artificial Intelligence for schools and labs" CR
      ." Tab key cycles through Normal, Transcript, Tutorial, Diagnostic."
      CR
    ; \ End of Rejuvenate; return to the Security mind-module.
    
    
    \  REIFY is called by nounPhrase or verbPhrase to flush abstract
    \  Psi concepts into the real names of English language reality.
    :  REIFY ( express abstract concepts as real words ) \ atm 14oct2005
      0 act !
      midway @  tov @  DO      \ Search before the time-of-voice.
        I   1 psi{ @  0 > IF   \ If any psi has a positive "act"
        I   1 psi{ @  act !    \ get the activation level and
        I   6 psi{ @  enx !    \ the transfer-to-English flag.
        THEN
        enx @  0  >  IF        \ If the "enx" flag is positive, 
          midway @ t @ 1+  DO  \ inspect English vocabulary nodes
            I   0  en{ @  enx @ = IF  \ for a match with "enx".
              \ For any concept transfer only the highest `act':
              act @  I 1  en{ @ > IF  \ If a lower "act" is found
              act @  I 1  en{ !       \ transfer the higher "act".
              THEN   \ end of check for lower activations
            THEN     \ end of check for Psi-to-En matches
          -1  +LOOP  \ end of backwards search in English lexicon
        THEN         \ end of check for positive "enx" in Psi
        0 enx !      \ Reset the transfer-to-English flag.
        0 act !      \ Reset the act(ivation) level.
      -1  +LOOP      \ end of backwards sweep through Psi array
      0 act !        \ Reset the act(ivation) level.
    ;  \ End of reification; return to nounPhrase or verbPhrase.
    
    
    \  SPEECH is for output of single words, not entire sentences.
    :  SPEECH ( output of a word as text or sound ) \ atm 18jun2006
      fyi @ 2 = IF CR THEN  \ 18jun2006 For clarity in Tutorial display.
      aud @ onset !  ( the onset of a word is its recall-vector )
      40  1  DO   \  Perform this loop up to forty times.
        aud @  0  aud{ @ pho !  pho @ EMIT  ( say or display "pho" )
        35 pov !  ( internal point-of-view ASCII 35 "#" like mindgrid )
        AUDITION    ( for reentry of a thought back into the mind )
        aud @  1+  aud !  \ Increment "aud" for string of engrams.
        aud @  4 aud{ @ 0 = IF  32 pho !  THEN ( if end of word )
        \ 26jul2002 Diagnostic test code:
        match @ 1 = IF \ If oldConcept deals with a match,
          0 match !    \ first reset match to zero;
          LEAVE        \ leave SPEECH and go back to syntax,
        THEN           \ for generation of rest of sentence.
      LOOP             \ End of loop of up to 40 engram-fetches.
      0 match !        \ In case not otherwise reset.
    ;  \ End of Speech; return to nounPhrase, verbPhrase, etc.
    
    
    \ EGO is a function for increasing the activation of
    \ the concept of self as a way of starting a self-centered
    \ chain of thought whenever other activations have died down.
    :  EGO ( revive ego after brain-dead flatline ) \ atm 31oct2005
      fyi @ 1 > IF CR CR
        ."   Calling EGO (AI4U Chapter 20); inert = " inert @ .
      THEN
      16 spike !    \ Give ego-associated concepts some activation.
    \ PSI-CLEAR    \ Prevent the influence of other concepts.
      50 psi !      \ enBoot concept #50 = "self" or "ego". 
      CR ." EGO: Boosting self; [ENTER] say something [ENTER]" CR
      \ ACTIVATE      \ enhance the activation-level of self.
      \ 29apr05: Above we comment out ACTIVATE for test purposes.
        midway @   t @ 1+  DO  \  Search back to midway.
          I 0 psi{ @ psi @ = IF  \  If concept "psi" is found...
        \   1 I  1 psi{ +!  \ Add units of psi1 excitation.
        \   7 I  1 psi{  !  \ 29apr05: a minimal activation of ego.
        \  18 I  1 psi{  !  \  4aug2005 Counteracting new psiDecay.
        \  30 I  1 psi{  !  \ 12sep2005 Boosting the self-concept.
           16 I  1 psi{  !  \ 15oct2005 Deferring to recall of oldest concept.
              I  3 psi{ @  pre !  ( for use in SPREADACT )
              I  5 psi{ @  seq !  ( for use in SPREADACT )
              I           zone !  ( for use in SPREADACT )
            \ 9sep2005 Commenting out the next call as a test:
            SPREADACT             ( for spreading activation )
            \ 12sep2005 reinstating the above call as a fix.
            0  pre !              \ blank out "pre" for safety
            0  seq !              \ blank out "seq" for safety
          THEN                    \ end of test for "psi" concept
        -1  +LOOP                 \ end of backwards loop 
      0 psi !      \ Reset for safety.
      EEG @ 1 - EEG !   \ 15oct2005 Decrement EEG towards zero.
      \ ." EEG = " EEG @ . ." and vault = " vault @ . CR
      EEG @ 0 = IF    \ If EEG has flatlined at a value of zero...
        vault @ rv !  \ Prepare an auditory-memory recall-vector (rv).
          rv @ 0 > IF \ Avoid crashes if rv is negative.
            BEGIN     \ Cluster of code borrowed from spreadAct
              rv @ 0 aud{ @ EMIT  1 rv +!
              rv @ 0 aud{ @ 32 >  \ Using a blank SPACE-bar.
            UNTIL      \ Stop when a non-blank character is found.
            \ ." EEG = " EEG @ . ." and rv = " rv @ . CR
            ." EGO Module recalls the oldest memory -- "
            rv @ aud !  \ Memory-parameter for Speech module.
            SPEECH      \ Recall and say the oldest memory.
          THEN
          0 rv !  \ Zero out the auditory associative tag
      THEN  \ End of test to see if EEG has flatlined at zero.
      EEG @ 0 = IF 3 EEG ! THEN  \ 15oct2005 Reset EEG after use.
    ;  \  End of EGO self-assertion; return to SECURITY.
    
    
    \  nounPhrase is called by SVO or verbPhrase.
    :  nounPhrase ( select part of a thought ) \ atm 18jun2006
      REIFY    ( to move abstract Psi concepts to enVocab reality )
      0 act !
      0 aud !  \ Start with a zero auditory recall-tag.
      0 motjuste !
      5 opt !  \ Look for option five (a noun).
      0 psi !  \ Start with a zero Psi concept tag.
      fyi @ 1 > IF CR  \ 18jun2006 New wording for Tutorial clarity...
        ."   nounPhrase preview of further associated concepts -- "
        CR  ."     " \ 9nov2005 Show word and what it associates to.
      THEN  \ End of test for Tutorial or Diagnostic display mode.
      midway @  t @  DO  \ Search from current time to midway.
        I     3 en{ @  5 =  IF     \ Look only for noun-phrases.
          fyi @ 2 > IF  \ Clean up the Tutorial display.
            I 1 en{ @ 0 > IF
              CR ."     candidate activation = " I 1 en{ @ . ."  "
              I 5 en{ @ unk !  \ Temporary use of "unk"
              BEGIN
              unk @ 0 aud{ @ EMIT  1 unk +!
              unk @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
              UNTIL
              ."                         "  \ Space to set apart chosen noun.
            THEN    \ End of test for positive (non-zero) activations.
          THEN      \ End of test for Tutorial mode. 
          I   1 en{ @  act @ > IF  \ If en1 is higher than "act"
            I 0 en{ @  motjuste !  \ get psi-tag of the noun;
            I 5 en{ @  aud !  \ get auditory recall-vector.
            fyi @ 2 > IF  \ In diagnostic mode...
              CR ."     nounPhrase: aud = "
              aud @ . \ aud recall-vector is...
              aud @ rv !  \ make aud the recall-vector "rv"
              ." urging psi concept #" motjuste @ . ."  "  \ 5aug2005 psi #?
              BEGIN       \ Start displaying the word-engram.
                rv @ 0 aud{ @ EMIT  1 rv +!
                rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
              UNTIL        \ Stop when a blank space is found.
              ."  "
            0 rv !  \ Zero out the auditory associative tag.
            THEN    \ End of test for Diagnostic mode.
            I 1 en{ @  act !  \ To test for a higher en1.
            fyi @ 2 > IF   \ Diagnostic mode
              ."  activation = " act @ . ."   "
            THEN
            ELSE   \ an error-trap (?) is needed here.
          THEN     \ end of test for en1 highest above zero.
        THEN       \ end of if-clause checking for nouns.
      -1 +LOOP     \ end of loop searching for most active noun.
      enDamp       \ to de-activate English concepts
     \ 0 psi !      \ a precaution lest psi transit SPEECH.
    \ dirobj @ 1 = IF  \ 24sep2005 Substitute WHAT only for direct objects.
      \ ." noun activation = " act @ .  \ 31aug2005 Quest for questions.
    \ act @ 10 < IF  \  2sep2005 If no highly active noun is found...
    \ act @  9 < IF  \ 14sep2005 If no highly active noun is found...
    \ act @  8 < IF  \ 13sep2005 Lower threshold for chains of thought.
      act @  5 < IF  \  7jun2006 If no highly active noun is found...
        \ 31aug2005 Following code for "what" is borrowed from WhatAuxSDo:
        \ Call interrogative pronoun "what":
        midway @  t @  DO  \ Look backwards for 54=what.
          I       0 en{ @  54 = IF  \ If #54 "what" is found,
            54 motjuste !  \ "nen" concept #54 for "what".
            I     5 en{ @  aud !  \ Recall-vector for "what".
            LEAVE  \ Use the most recent engram of "what".
          THEN  \ End of search for #54 "what".
        -1 +LOOP  \ End of loop finding the word "what".
    
      \ fyi @ 0 > IF  \ 25may2006 If mode is Transcript, Tutorial, Diagnostic:
        fyi @ 1 = IF  \ 10jun2006 Do not interfere with Tutorial of slosh-over.
          act @ .     \ 23may2006 In a simple diagnostics mode...
        THEN          \ present activation-level before each noun.
    
        SPEECH    \ Speak or display the word "what"
        1000 rsvp !  \ 31aug2005 Give human user time to enter response..
        LEAVE  \ Do not say the low-activation noun.
      THEN     \ 31aug2005 End of test for activation threshold.
    \ THEN       \ 14sep2005 End of test for seeking a direct object.
    
      motjuste @ psi !  \  1jun2006 For use in Activate module.
      act @ jolt !      \  7jun2006 So nounAct activates all nodes equally.
    \ jolt @  8 +!      \ 13jun2006 To enhance slosh-over activation.
    \ jolt @ 16 +!      \ 13jun2006 To widen gap with spurious associations.
    \ jolt @ 16 +!      \ 30mar2007 Thanks for help from discussion group.
      nounAct           \  7jun2006 To impart a winning activation equally.
      0 jolt !          \  7jun2006 Safety measure after use of jolt.
    
    \ fyi @ 0 > IF  \ 31may2006 In all modes above Normal Mode:
      fyi @ 1 = IF  \ 10jun2006 Do not interfere with Tutorial of slosh-over.
        act @ .     \ 23may2006 In a simple diagnostics mode...
      THEN          \ present old activation-level before each noun.
    
      act @ 12 > IF   \ 31may2006 To prevent illogical spurious associations,
        SPEECH        \ only include a word with upper-tier activation-level.
      THEN            \ We may need a variable for the consciousness boundary.
    
      32 EMIT            \  Say a SPACE-BAR 32.
      fyi @ 2 > IF CR  \ 31jul2005 Seeing what calls Activate.
      ."   from nounPhrase "
      THEN
      motjuste @  urpsi !  \ For use in psiDamp().
      urpsi @ 0 > IF  \ 14sep2005 Dir. obj. parameter passed from verbPhrase:
      fyi @ 2 > IF    \  9nov2005 Relegating obscure message to Diagnostic.
        CR ."   nP calling psiDamp with lump of " lump @ .
      THEN            \ 17sep2005 End of message to reveal lump-value.
      psiDamp              \ to de-activate Psi concepts
      THEN            \ 5aug2005 Only call psiDamp if needed. 
      0 act !              \ Reset for safety.
    \ 0 motjuste !         \ Reset for safety.
    \ 20apr2006 Commenting out the above line in favor of SVO decpsi1 etc.
      0 psi  !             \ 26jul2002 Reset for safety.
    ;  \ End of nounPhrase; return to SVO or verbPhrase.
    
    \  verbPhrase is called from the subject-verb-object SVO
    \  syntax module to find and express a verb +/- object.
    :  verbPhrase ( select part of a thought ) \ atm 18jun2006
      REIFY       \ move abstract Psi concepts to enVocab reality
      0 act !     \ precaution even though zeroed in REIFY
      0 aud !     \ Start with a zero auditory recall-tag.
      0 motjuste ! 
      8 opt !  \ Look for option eight (a verb).
      0 psi !  \ Start with a zero Psi associative tag. 
      fyi @ 1 > IF CR  \ 18jun2006 New wording for Tutorial clarity.
     ."   verbPhrase preview with slosh-over indicated by + --"
        CR
     ."   Noun & verb activation must slosh over onto logical direct objects."
        CR  ."    " \ 9nov2005 Show word and what it associates to.
      THEN 
      midway @ t  @ DO  \ Search backwards through enVocab
        I      3 en{ @  8 = IF  \ only look at predicate/verbs
        fyi @ 3 = IF  ." vP" THEN  \ 15sep2005 and 13oct2005 test
          fyi @ 2 > IF      \ 24sep2005 Check the display-flag status.
            I 1 en{ @ 0 > IF
               CR ."     cand. act = " I 1 en{ @ . ."  "
               ." w. psi seq #"
               I 5 psi{ @ seq ! seq @ . ."  "  \ W. psi "seq" #... 
               I 5  en{ @ unk  !  \ Temporary use of "unk"
               BEGIN
               unk @ 0 aud{ @ EMIT  1 unk +!
               unk @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
               UNTIL
               ."  w. nodal dir. obj. "  \ 4sep2005 focussing on slosh-over
               midway @ t @ DO  \ Look beyond verb for the "seq" concept
                 I   0  psi{ @   seq @  =  IF  \ If match of "seq" is found,
    
                   I 1  psi{ @ . ." =act "  \ Correct node of psi?
    
                   I 6  psi{ @   psi6 !    \ Get the enx as psi6
                   LEAVE                   \ Stop looking after one find.
                 THEN       \  End of check for the "seq" concept
               -1  +LOOP    \  End of backwards search for "seq" concept
               midway @ t @ DO  \ Use enx to get the aud recall-vector
                 I   0  en{ @    psi6 @ = IF
                   I 5  en{ @  rv !   \ Store the auditory recall-vector.
                   LEAVE    \ Use only the most recent auditory engram.
                 THEN
               -1  +LOOP    \ End of backwards search for "psi6" vocab item.
               rv @ 0 > IF  \ Avoid crashes if rv is negative.
                 BEGIN
                   rv @ 0 aud{ @ EMIT  1 rv +!
                   rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
                 UNTIL        \ Stop when a blank space is found.
               THEN 
               ."  spike = " spike @ .    \ 4sep2005 from spreadAct?
               0 rv !    \ Zero out the auditory associative tag.
               ."     "  \ Space to set apart chosen verb.
            THEN    \ End of test for positive (non-zero) activations.
          THEN      \ End of test of display-flag status.
          I    1 en{ @  act @ > IF  ( if en1 is higher )
            I  0 en{ @  motjuste !  ( store psi-tag of verb )
            I  5 en{ @  aud !  ( auditory recall-vector )
    
            fyi @ 2 = IF        \ 9nov2005 Tutorial-only mode.
           \  CR ." verbPhrase: aud = "
           \  aud @ . \ aud recall-vector is...
              aud @ rv !  \ make aud the recall-vector "rv"
           \  ." urging psi concept #" motjuste @ . ."  " \ 5aug2005 psi #?
           \  BEGIN       \ Start displaying the word-engram.
           \    rv @ 0 aud{ @ EMIT  1 rv +!
           \    rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
           \  UNTIL        \ Stop when a blank space is found.
              ."  "
              0 rv !       \ Zero out the auditory associative tag.
            THEN           \ End of test for Tutorial-only mode.
    
            fyi @ 2 > IF        \ 9nov2005 Diagnostic mode
              CR ." verbPhrase: aud = "
              aud @ . \ aud recall-vector is...
              aud @ rv !  \ make aud the recall-vector "rv"
              ." urging psi concept #" motjuste @ . ."  " \ 5aug2005 psi #?
              BEGIN       \ Start displaying the word-engram.
                rv @ 0 aud{ @ EMIT  1 rv +!
                rv @ 0 aud{ @ 32 =  \ Using a blank SPACE-bar.
              UNTIL        \ Stop when a blank space is found.
              ."  "
              0 rv !       \ Zero out the auditory associative tag.
            THEN           \ End of test for Diagnostic mode.
    
            I  1 en{ @  act !  ( to test for a higher en1 )
              fyi @ 3 = IF CR   \ Diagnostic mode
                ."  verbPhr: act = " act @ . ."   "
              THEN
            ELSE  \ An error-trap (?) is needed here.
          THEN  \ end of test for en1 highest above zero.
        THEN    \ end of test for opt=8 verbs
      -1 +LOOP  \ end of loop cycling back through English lexicon
       0 psi !            \ A precaution lest psi transit SPEECH. 
      fyi @ 2 > IF   \ Test for origin of YES-bug.
        CR ." verbPhrase: motjuste = " motjuste @ . ." going into SPEECH."
        CR ." verbPhrase: aud = " aud @ . ." going into SPEECH."
      THEN           \ End of test for origin of YES-bug.
      motjuste @ 0 > IF  \ 15sep2005 Prevent aud-0 of spurious "YES".
    
       motjuste @ psi !  \ 10jun2006 For use in verbAct module.
       verbAct           \  7jun2006 For slosh-over of subj+verb onto object.
    
      \ fyi @ 0 > IF  \ 25may2006 If mode is Transcript, Tutorial, Diagnostic:
        fyi @ 1 = IF  \ 10jun2006 Do not interfere with Tutorial of slosh-over.
          act @ .     \ 23may2006 In a simple diagnostics mode...
        THEN          \ present activation-level before each noun.
    
        SPEECH           \ to say or display the verb
      THEN               \ 15sep2005 End of test for motjuste = 0.
      fyi @ 2 > IF CR    \ Clean up the Tutorial display.
      ."   in verbPhrase after SPEECH output of verb"
      THEN
      fyi @ 2 > IF CR    \ Seeing what calls psiDamp
      ."   from verbPhrase after speaking of verb, psiDamping #" motjuste @ .
      THEN
      motjuste @  urpsi !  \ For use in psiDamp.
    \ 21 lump !  \ 9sep2005 Trying to let spike win, over residual activation.
      22 lump !  \ Trying to let spike win, over residual activation.
      psiDamp    \ 29apr2005 Necessary for chain of thought.
       2 lump !  \ 28aug2005 Restore minimal psiDamp value.
      enDamp     \ to de-activate English concepts
      32 EMIT        \ Insert a SPACE.
    \ 26 lump !  \ 17sep2005 Lower lump in tandem with fewer psiDecay calls.
      15 lump !  \ 17sep2005 Give direct objects higher lump than subjects.
      1 dirobj ! \ 14sep2005 Declare seeking of a direct object.
      nounPhrase     \ To express direct object of verb,
      0 dirobj ! \ 14sep2005 No longer seeking a direct object.
       2 lump !  \ 28aug2005 Restore minimal psiDamp value.
    ;  \  End of verbPhrase; return to the SVO syntax module.
    
    
    \  SVO is called by ENGLISH;is negated by negSVO;
    \  and is one structure for an English sentence.
    :  SVO ( Subject + Verb + Object ) \ atm 20apr2006
       fyi @ 1 > IF  \ 13oct2005 Leave room for Transcript mode.
       CR ."       Calling SVO (Subject-Verb-Object thought-generation)." CR
       THEN 
      \  The AI fills in the next line by generating a thought:
      CR ." Robot: "
      \ We insert a "{" for the sake of Rejuvenate.
      123  t @  2 aud{ !  \  123 is ASCII bracket "{"
      1 subj !  \ 15sep2005 Set flag that noun will be SVO subject.
    \ 13 lump ! \ 17sep2005 Subj. lumps lower than dir. obj. lumps for chains.
      17 lump ! \ 17sep2005 Subj. lumps lower than dir. obj. lumps for chains.
      nounPhrase  ( finds "le mot juste" to be the subject )
    
      motjuste @ decpsi1 @ = IF  \ 20apr2006 Check for repetition...
        motjuste @ decpsi2 !     \ so as to accelerate de-activations...
      THEN                       \ and thus avoid quasi-flatliners.
      motjuste @ decpsi1 !  \ 20apr2006 Keep track of just-thought concept.
      0 motjuste !  \ 20apr2006 Safety measure moved here from nounPhrase.
      0 subj !  \ 15sep2005 Reset flag after using it.
      \ AUDITION, will need to store retroactively in aud{
      \ the concept number of "motjuste" as a psi-tag "psi":
      motjuste @ psi !  ( send the found psi-tag into AUDITION )
    \ psiDecay   \ 14sep2005 Let psiDamp carry the brunt of psiDecay.
      verbPhrase  ( finds "le mot juste" for verb and for object )
      \  The following inactive insertion is merely for closure:
      125  t @ 1+  2 aud{ ! \ insert "}" without incrementing "t"
      13 pho !  ( ASCII 13 CR to trip a retroactive change )
      AUDITION  \ to receive the carriage-return CR 13
      5 bias !  \ 26jul2002 Expect next to parse a noun=5.
    \ psiDecay  \  7sep2005 Against spurious associations.
    ;  \ End of SVO; return to the ENGLISH module.
    
    
    \ auxVerb provides part of a compound verb form.
    :  auxVerb ( auviliary Verb ) \ atm 14oct2005
      \ "can" -- one possible auxiliary verb.
      \ "dare" -- one possible auxiliary verb.
      \ "do" -- call a form of the auxiliary verb "do":
      midway @  t @  DO  \ Look backwards for 59=do.
        I       0 en{ @  59 = IF  \ If #59 "do" is found,
          59 motjuste !  \ "nen" concept #59 for "do".
          I     5 en{ @  aud !  \ Recall-vector for "do".
          LEAVE  \ Use the most recent engram of "do".
        THEN  \ End of search for #59 "do".
      -1 +LOOP  \ End of loop finding auxiliary verb "do".
      SPEECH    \ Speak or display the auxiliary verb "do".
      fyi @ 2 > IF CR  \ Diagnostic message,
      ."   from auxVerb after speaking of DO, psiDamping concept #59 DO"
      THEN
      59 urpsi !  \ For use in psiDamp to de-activate the "DO" concept.
      psiDamp     \ 6aug2005 As when verbPhrase has sent a verb to Speech.
      \ enDamp    \ de-activate English concepts; 6aug2005: needed here?
      \ "may" -- one possible auxiliary verb.
      \ "must" -- one possible auxiliary verb.
      \ "shall" -- one possible auxiliary verb.
      \ "will" -- one possible auxiliary verb.
    ;  \ End of auxVerb; return to the negSVO module.
    
    
    \ negSVO negates a subject-verb-object sentence.
    :  negSVO ( negation of Subject + Verb + Object ) \ atm 14oct2005
      fyi @ 1 > IF CR  \ 13oct2005 Leave room for Transcript mode.
        ."     Calling negSVO (AI4U Chapter 10)." CR
      THEN
      \ We insert a "{" for the sake of Rejuvenate.
      123  t @  2 aud{ !  \  123 is ASCII bracket "{"
      nounPhrase  \ for subject of negSVO sentence.
      32 pho !  \ Reset "pho" by blanking it out.
      auxVerb   \ Fetch a form of auxiliary verb "do".
      midway @  t @  DO  \ Look backwards for 12=not.
        I       0 en{ @  12 = IF  \ If #12 "not" is found,
          12 motjuste !  \ "nen" concept #12 for "not".
          I     5 en{ @  aud !  \ Recall-vector for "not".
          LEAVE  \ Use the most recent engram of "not".
        THEN  \ End of search for #12 "not".
      -1 +LOOP  \ End of loop finding the word "not".
      SPEECH  \ Speak or display the word "not".
      verbPhrase  \ Find a verb +/- a direct object.
      \  The following inactive insertion is merely for closure:
      125 t @ 1+ 2 aud{ ! \ Insert "}" without incrementing "t".
      1   t +!  \ Advance time to separate reentered words.
      1 spt +!  \ Increment SPACE-time simultaneously.
      enDamp    \ Deactivate the English lexicon.
      audDamp   \ Protect audRecog?
    
    \  13 pho !  ( ASCII 13 CR to trip a retroactive change )
    \  AUDITION  \ to receive the carriage-return CR 13
      5 bias !  \ 29jul2002 Expect next to parse a noun=5.
    ;  \ End of negSVO; return to the English module.
    
    
    \ whatAuxSDo is: what + Auxiliary + Subject + "Do"
    \ where the Subject is a pre-selected "topic" concept.
    :  whatAuxSDo ( what DO Subjects DO ) \ atm 31oct2005
      fyi @ 1 > IF CR  \ 13oct2005 Leave room for Transcript mode.
    ."         Calling whatAuxSDo to inquire about a new word being learned..."
        CR CR
      THEN
      psiDecay   \ Lower unresolved activations on ignored concepts.
      psiDecay   \ Reinforce the lowering of unresolved activations.
      psiDecay   \ In the isolated module psiDecay has carte blanche.
      \ Call interrogative pronoun "what":
      midway @  t @  DO  \ Look backwards for 54=what.
        I       0 en{ @  54 = IF  \ If #54 "what" is found,
          54 motjuste !  \ "nen" concept #54 for "what".
          I     5 en{ @  aud !  \ Recall-vector for "what".
          LEAVE  \ Use the most recent engram of "what".
        THEN  \ End of search for #54 "what".
      -1 +LOOP  \ End of loop finding the word "what".
      SPEECH    \ Speak or display the word "what".
      fyi @ 2 > IF CR  \ Diagnostic message,
      ."   from whatAuxSDo after speaking of WHAT, psiDamping concept #54"
      THEN
      54 urpsi !  \ For use in psiDamp to de-activate the "WHAT" concept.
      psiDamp     \ 6aug2005 As when verbPhrase has sent a verb to Speech.
      \ Call form of auxiliary verb "do":
      auxVerb   \  7sep2005 Any of several auxiliary verbs. 
      0 motjuste !  \ 7sep2005 safety measure
      midway @  t @  DO  \ Look backwards for "topic".
        I       0 en{ @  topic @ = IF  \ If "topic" is found,
          topic @ motjuste !   \ mixing apples & oranges?
          I     5 en{ @ aud !  \ Auditory recall-vector for "topic".
          LEAVE
        THEN     \ End of search for #"topic".
      -1 +LOOP  \ End of loop finding the lexical "topic" item.
      motjuste @ urpsi !   \ 7sep2005 for sake of psiDamp
      15 lump !  \ whatAuxSDo module -- 14sep2005 nota bene.
      psiDamp    \ 7sep2005 Damp urpsi but leave "lump of activation.
       2 lump !
      SPEECH     \ Speak or display the lexical "topic".
      midway @  t @  DO  \ Look backwards for 59=do.
        I       0 en{ @  59 = IF  \ If #59 "do" is found,
          59 motjuste !  \ "nen" concept #59 for "do".
          I     5 en{ @  aud !  \ Recall-vector for "do".
          LEAVE  \ Use the most recent engram of "do".
        THEN  \ End of search for #59 "do".
      -1 +LOOP  \ End of loop finding auxiliary verb "do".
      SPEECH    \ Speak or display the auxiliary verb "do". 
      fyi @ 2 > IF CR  \ Diagnostic message,
      ."   from whatAuxSDo after speaking of DO, psiDamping concept #59 DO"
      THEN
      59 urpsi !  \ For use in psiDamp to de-activate the "DO" concept.
      psiDamp     \ 6aug2005 As when verbPhrase has sent a verb to Speech.
      \ enDamp    \ de-activate English concepts; 6aug2005: needed here?
      psiDecay    \ Reduce unresolved activation on ignored concepts.
    ;  \ End of whatAuxSDo; return to ASK.
    
    
    \ ASK enables the AI to ask a question, query a database,
    \ search the Web with a search engine, or swallow ontologies.
    :  ASK ( selector of question formats ) \ atm 22jan2006
       fyi @ 1 > IF CR    \ 13oct2005 Leave room for Transcript mode.
     ."       Calling Ask to generate a question and to wait for a reply..."
       THEN
       whatAuxSDo  \ 4aug2002 Ask a "What do blanks do?" question. 
       0 recon !   \ 4aug2002 Reset the incentive to ask questions.
    ;  \ End of ASK; return to ENGLISH.
    
    
    \  ENGLISH is called by THINK and in turn calls SVO
    \  or any other particular English syntax structure.
    :  ENGLISH ( one of several possible languages ) \ atm 22jan2006
      0 inert !  \ If the AI is thinking, it is not inert.
      fyi @ 1 > IF CR  \ 13oct2005 Leave room for Transcript mode.
        ."     Calling English to choose an English sentence structure... "
      THEN
      t @ tov !  \  Store current "t" as time-of-voice for ".echo".
      recon @  0 >  IF  ASK  \ If urge to learn...
        ELSE                 \ If no novelty...
        jux @  12 = IF  \ If negative 12=not adverb,
          negSVO        \ transformation of Chomsky;
          ELSE  SVO     \ the "positive" S-V-O syntax.
        THEN            \ End of test for verb-negation.
      THEN
    ;  \ Return to the THINK module which calls ENGLISH syntax.
    
    
    \  THINK is called by the main ALIFE function.
    :  THINK ( express spreading activation as thought ) \ atm 2jun2006
      1 inert +!  \ Augment "inert" by one for sake of EGO module.
      fyi @ 1 > IF CR  \ Leave room for Transcript mode.
        ."   Calling Think to select a natural human language..."
      THEN
      35 pov !  \ All thinking has "internal" point-of-view.
    \ 10 act !  \ or whatever threshold is to be tested for.
      midway @  t @  DO  \ Examine recent Psi nodes.
        I     4 psi{ @  5 = IF  \ 29aug2005 Look for nouns not verbs.
          I   1 psi{ @  3 > IF  \ 15oct2005 For chains of thought.
        \ I   1 psi{ @  6 > IF  \ 17sep2005 For chains of thought.
        \ I   1 psi{ @ 10 > IF  \ If activation is higher than 10,
            fyi @ 2 > IF CR     \ Diagnostic message...
              ." Think module has found active concept; calling English."
            THEN     \ 29aug2005 Perhaps identify the found noun.
            ENGLISH  \ 29aug2005 Making sure to call English.
            LEAVE    \ 29aug2005 Finding one active noun is enough.
          THEN  \ End of check for the activity of a found concept.
        THEN      \ End of test for active opt=5 nouns.
      -1  +LOOP  \ End of backwards loop seeking high activations.
      fyi @ 1 = IF CR THEN  \ Transcript-mode space between thoughts.
      0 recon ! \ Give ENGLISH one chance per cycle to call Ask.
    ;  \ End of THINK; return to the main ALIFE loop.
    
    
    \ MOTORIUM is a stub where you may insert robot motor code.
    :  MOTORIUM ( stub for volitional control of actuators in robots )
       7 EMIT       \ The only power of the AI is to ring a bell.
     ( MOVE_FORWARD   ) \ See ACM SIGPLAN Notices 33(12):25-31 of
     ( MOVE_BACKWARDS ) \ December 1998 for a paper by Paul Frenger,
     ( STOP_MOTION    ) \ "Mind.Forth: Thoughts on Artificial
     ( TURN_LEFT      ) \ Intelligence and Forth" for discussion
     ( TURN_RIGHT     ) \ of the Mind.Forth MOTORIUM on page 26.
    ;  \ end of MOTORIUM stub; return to ALIFE when implemented.
    
    \ HCI is the human-computer interface of the Robot AI Mind.
    :  HCI ( Human-Computer Interaction ) \ atm 10jun2006
      \ CLS  (  Clear the screen to prevent scrolling.  )
      fyi @ 0 = IF CLS CR CR CR CR CR CR CR
        t @ 300 < IF CR  \ Show warranty disclaimer during early start-up.
     ." There is no warranty with Mind.Forth AI Engine for robots."
        ELSE CR
        THEN    \ 14oct2005 End of test to stop showing disclaimer.
      THEN      \ 14oct2005 End of conditional test for Normal display mode.
      fyi @ 1 = NOT IF CR THEN  \ If not Transcript mode, then carriage return.
      ."  "  \  A kind of buffer before all the backspacing. 
      fyi @ 1 = NOT IF CR THEN  \ 13oct2005 Tighten up for Transcript mode.
      fyi @ 0 = IF    \ 12sep2005 For Normal display mode.
        CR ." Artificial intelligence -- alive and thinking since "
        bday @ .
            bmonth @  1 = IF ." January "   THEN
        bmonth @  2 = IF ." February "  THEN
        bmonth @  3 = IF ." March "     THEN
        bmonth @  4 = IF ." April "     THEN
        bmonth @  5 = IF ." May "       THEN
        bmonth @  6 = IF ." June "      THEN
        bmonth @  7 = IF ." July "      THEN
        bmonth @  8 = IF ." August "    THEN
        bmonth @  9 = IF ." September " THEN
        bmonth @ 10 = IF ." October "   THEN
        bmonth @ 11 = IF ." November "  THEN
        bmonth @ 12 = IF ." December "  THEN
        byear @ . 8 EMIT 46 EMIT CR  \ Backspace + period & carriage-return.
      THEN   \ 5sep2005 End of code to tell AI age in Normal mode.
      fyi @ 2 = IF CR  \ Enhancing the Tutorial display.
     ." HCI is the Human-Computer Interface. Study the Mind.Forth User Manual."
        CR
      THEN
      fyi @ 1 = NOT IF  \ 13oct2005 Omit display only during Transcript mode.
        ." TAB mode. ESCAPE exit. IQ = " IQ @ . \ IQ needs implementation.
        8 EMIT 46 EMIT  \ Backspace, then display a period.
        ."  Time = " t @ . 8 EMIT 46 EMIT  \ Backspace plus period.
        ."  Cyc = " rjc @ . ." since "  bday @ .
        bmonth @  1 = IF ." January "   THEN
        bmonth @  2 = IF ." February "  THEN
        bmonth @  3 = IF ." March "     THEN
        bmonth @  4 = IF ." April "     THEN
        bmonth @  5 = IF ." May "       THEN
        bmonth @  6 = IF ." June "      THEN
        bmonth @  7 = IF ." July "      THEN
        bmonth @  8 = IF ." August "    THEN
        bmonth @  9 = IF ." September " THEN
        bmonth @ 10 = IF ." October "   THEN
        bmonth @ 11 = IF ." November "  THEN
        bmonth @ 12 = IF ." December "  THEN
        byear @ . 8 EMIT 46 EMIT CR  \ Backspace + period & carriage-return.
     ." ENTER a positive or negative Subj-Verb-Obj unpunctuated sentence."
      THEN              \ End of test for Transcript display mode.
      fyi @ 0 = IF CR
     ." Normal display-mode is in effect. Press Tab key for other modes."
        CR
      THEN
      fyi @ 2 = IF CR    \ 13oct2005 Leave room for Transcript display.
      ." Tutorial mode is now in effect. Press Tab for other display modes."
        CR
      THEN
      fyi @ 3 = IF CR    \ 13oct2005 Leave room for Transcript display.
      ." Diagnostic messages - ignore during input before pressing ENTER."
      THEN
      \ 32 uract !  \ 26jul2002 Let PARSER decrement input "act".
      \ 32 uract !  \ Depressing new concepts to boost old concepts.
      \  5 uract !  \ Allow KB input but no influence on chain of thought.
      \ 31 uract !  \ Top of second tier IAW Moving Wave and psiDamp/psiDecay.
      \ 20 uract !  \  7jun2006 Lest new concepts interfere with old concepts.
      \ 18 uract !  \ 10jun2006 Lest new concepts interfere with slosh-over.
        22 uract !  \ 10jun2006 Give empowerment to new concepts.
      \ 26jul2002 We set point-of-view "pov" to 42=external
      \ so that SENSORIUM calls AUDITION which calls LISTEN:
      42 pov !  \ 26jul2002 So that LISTEN will be called.
    ; \ End of HCI; return to the SECURITY safeguards module.
    
    
    \ SECURITY is a module for potential safeguards as the seed AI
    \ evolves into the artificial intelligence of transhumanism in
    \ a cyborg or a supercomputer endowed with artificial life.
    :  SECURITY ( safety for robots and human beings ) \ atm 14oct2005
      fyi @ 2 = IF CR  \ Enhancing the Tutorial display.
      ."     SECURITY module (textbook AI4U chapter 2) calls the HCI module."
      THEN
      HCI  \ Call the human-computer interaction (HCI) module. 
      t @ cns @ 64 - > IF  \ When the CNS is almost full,
        REJUVENATE  \ move bulk of memories backwards and
      THEN          \ forget the oldest unused memories.
      t   @  1024 > IF  \ Use midway only for larger AI Minds.
        t @  1024 -  midway !  ( for a range limit on searches )
        ELSE            \ If the CNS memory has a small capacity
        0   midway !    \ currently search the entire CNS space.
      THEN   \ Future code may let the AI itself set the midway.
      inert @ 2 > IF  \ THINK module increments "inert" variable.
        EGO        \ Call EGO if THINK has not been calling ENGLISH.
    \   0 inert !  \ ENGLISH shall zero out the "inert" variable.
      THEN  \  Assert self.
      0 quiet !  \ Give Listen & Audition a chance for user input.
    ;  \ End of SECURITY; return to the main ALIFE loop.
    
    
    \ ALIFE is the main program loop.that starts the AI running.
    :  ALIFE ( artificial Life ) \ atm 14oct2005
      TIME&DATE byear ! bmonth ! bday ! bhour ! bminute ! bsecond !
      TABULARASA   \ Clears a "clean slate" of memory arrays.
      enBoot       \ English bootstrap loads initial concepts.
      BEGIN        \ Start the main program mind loop running.
        fyi @ 2 = IF CR  \ Enhance Tutorial display.
        ."   ALIFE (textbook AI4U Chapter 1) calls other mind-modules."
        THEN          \ End of test for Tutorial display mode.
        SECURITY   \ For human control and operation of the AI.
        SENSORIUM  \ Audition; other human-robot input senses.
      ( EMOTION )  \ Quasi-physiological influence upon thought.
        THINK      \ Syntax and vocabulary of natural languages.
      ( VOLITION ) \ Contemplative selection of motor options.
      ( MOTORIUM ) \ Robotic activation of motor initiatives.
      AGAIN        \ Repeat if the AI has not met with misadventure.
    ; \ End of main module called when user types:  ALIFE [RETURN]. 
    -------- remove this line and anything below it --------

    This artificial intelligence uses the W32FOR42_671.zip version of Win32Forth.
    Starting Forth by Leo Brodie is a good introduction to Forth.

    If any programmer sees ways to improve the AI Mind or to
    add new features, please simply make the changes and publish
    the public-domain AI source code as a freely accessible Web
    page (similar to this one) for all to study and use in robots.
    Please do not worry about "forking" or fragmenting the Mind.Forth
    code away from some imaginary standard or definitive version.
    There is no AI Mind standard. There are only coding standards,
    not nature-of-the-AI standards. As these intelligent AI life
    forms emerge, evolve and proliferate, standardization is bad;
    diversity is good. Leave your quasi-DNA in the immortal code.
    Put your initials or userid +/- date in the comment area of any
    mind module that you change among the modules listed below.

    AITree of Artificial Intelligence Mind Modules




    Return to top; or to
    ai4u_faq.html Frequently Asked Questions (FAQ) about AI4U
    ai4udex.html Index of the AI4U Textbook of Artificial Intelligence
    aisteps.html AI Algorithm Steps - Artificial Intelligence Algorithms For Humanoid Robots
    Mind.html Artificial Intelligence Seed AI in JavaScript
    mind4th.html Mind.Forth Artificial Intelligence for Robots
    PODsales.html Sales history of the AI4U Print-On-Demand (POD) Textbook