27 11 19 convert grammars - use vgp version find types - deletes predicate after finding type - can have (recursive) cycles, must check and fill in recursive/list types - stops when reaches same point - test whether same, otherwise fails - down, then up - no n in reclusive types (just allows for infinite recursion) - base case types x startrec(type1(endrec(type2( )))) x type1(type2), type1(bc) for example types in integrates with existing types functional types because lists types in side types a(b(c)) x starts as hierarchy a(b), a(c) detects base cases, puts its types inside types call ID - types checks types fit in rec in alg, otherwise new type - findall x alg finds types for clauses of predicate, remove duplicates