Test of the CG base handling features
 Thing {* supertype of 1st-order concept types *};
  Thing > (Entity Situation)    /* Filling the knowledge base */;
     Entity > (Description Physical_entity);
        Physical_entity > (Cat Mat Table Person);
        Description > Hypothesis;
     Situation > Process State;
        Process > Believe;
  BinaryRel (Thing, Thing) {supertype of 1st-order concept types}
   > (Near, Object, Agent, Author);
  Near (Entity,Entity) > On;  On (Entity,Entity);
  Object (Process,Entity);   Agent (Process,Entity);
  Author (Description,Person);
  Cat : Tom;
  name #CatOnMat [Cat]->(On)->[Mat]; //assertion and rename
  name #TomOnTable [Cat:Tom]->(On)->[Table];
  set test_projection 1   /* the tests that must be done below */;
  set test_type_definition 1;
  set test_informal_CGs 1;
  set test_pipe 1;     set test_contextualized_CGs 1;
  set test_meta_info 1;      set test_join 1;   set test_control_structures 1;
  if ($test_informal_CGs)         // Test projections
  { Cat : Tom2;  name #CatOnMat2 [Cat:Tom2]->(On)->[Table];
    spec [Cat:?] | nbArguments;
    spec [Table]<-(On)<-[Cat:?];
    proj [Cat] #CatOnMat;
    proj [Cat:Tom] #TomOnTable;
    proj [Cat:?] #TomOnTable;
    proj [Table]<-(On)<-[Cat:?] #TomOnTable;
  }
  if (0)  /* $test_informal_CGs */   /* Test non classic forms of CGs */
  { spec Cat : ?;
    [Tom, on: (a mat, on: a table), Near: a !rat];
    [a !rat, on: a mat];
    spec [an entity, on: a mat];
    spec [Tom];
    no decl;  [UndeclaredType1]->(UndeclaredRel)->[UndeclaredType2];  decl;
    ["Tom is on a table"]->("is a specialisation of")->["A cat is on a table"];
    ["A cat", "is on": "a mat", "looks at": "a mouse";
           ["thing related to a cat" $(its definition)$ ]  ];
    - A cat 
 - is on : a mat.
                  
- looks at : a mouse.
                  
- thing related to a cat
 - its definition
 
      
    spec [Description]->(BinaryRel)->[Description];
    /* ["a cat" "is on": "a mat"]; ["a cat"]->("is on")->["a mat"]; */
    /* [~ [!okl]->(Subtask)->[Task] ]; */
    delCGs;
    name #CatOnMat [Cat]->(On)->[Mat]; //assertion and rename
    name #TomOnTable [Cat:Tom]->(On)->[Table];
  }
  if ($test_type_definition)      /* Test type definitions */
  { NSC for LazzyCat (x) are [Cat:*x]->(On)->[Mat];
    TC for Cat (x) are [Cat:*x]->(On)->[Mat];
    on lambdas;
    spec [Cat];
    on CGs;
  }
  if ($test_contextualized_CGs)   /* Test contextualized CGs */
  { name #CatOnMat_Rel_TomOnTable [Description:CatOnMat]->(BinaryRel)->[Description:TomOnTable];
    spec [Cat];
    only context;   //display embedding CGs only if contextualising
    spec [Cat]  /* note that a CG never appears twice in the results of a request */;
    all embeddings; //back to the default mode 
    Person : John;
    //name #DefLazzyCatForPh [Description:NSC_for_LazzyCat]->(Author)->[Person:John];
    name #CatOnMatForPh [Description:CatOnMat]->(Author)->[Person:John];
    name #TomOnTableForPh [Description:TomOnTable]<-(Object)<-[Believe]->(Agent)->[Person:John];
    spec [Cat];
    delCG #CatOnMatForPh #TomOnTableForPh #CatOnMat_Rel_TomOnTable;
  }
  if ($test_meta_info)            /* Test meta information */
  { #CatOnMat in Hypothesis with {* view:Task; user:phmartin; *};
    spec #CatOnMat ;
    spec [%thing] ;
    spec [Thing] in Hypothesis;
    spec [Thing] with {* user:phmartin; *} ;
    #CatOnMat in Description;
    //no meta;
    //spec [Thing];
    //meta;
  };
  if ($test_join)                 /* Test joins */
  { name #TomOnMatNearTable [Cat:Tom]->(On)->[Mat]->(Near)->[Table];
    join on Cat Cat:Tom #CatOnMat #TomOnTable;
    maxjoin #CatOnMat #TomOnMatNearTable;
    delCG #Join_of_CatOnMat_and_TomOnTable_on_Cat-__and_Cat-Tom;
    delCG #Maxjoin_of_CatOnMat_and_TomOnMatNearTable
  }
  if ($test_pipe)                 /* Test pipes */
  { 
    spec [Cat];
    spec [Cat] | maxjoin;
    spec [Thing];
    spec [Thing] | nbArguments | set nbCGs;
    spec [Cat] | nbArguments | set nbCGsAboutCat;
    if ($nbCGs = $nbCGsAboutCat) { echo "All CGs of the base are about cats"; }
    else { echo "Not all CGs of the base are about cats"; };