/************************************************************************/
/*           Kima -- KL1 ץ༫ư (version 2.130)           */
/*                                                                      */
/*                             July 2001                                */
/*                                                                      */
/*                           µ                           */
/*                                                                      */
/*                     رظ                     */
/*                      ز                      */
/*                                                                      */
/*                 {ajiro,ueda}@ueda.info.waseda.ac.jp                  */
/*                                                                      */
/*          Copyright (C) 2001  Yasuhiro Ajiro, Kazunori Ueda           */
/*                                                                      */
/************************************************************************/


1. 

Kima ŪϤˤä KL1 ץѿν񤭸ưŪ˽
ȤǤޤ˸ŪʹޤKL1 ʤɤ(¹)
Ǥϥץѿ¿Ѥ뤿ᡢñʸ¿ѿλȤδ
㤤ˤäȯޤޤѿν񤭸Τ褦ñʸǤʤ
⡢Kima ϸθȤʤäƤץƥΰϰ
˹ʤळȤǽǤ٤Ƥθ꤬/Ǥ櫓ǤϤ
ޤ

Kima ϡ礭ʬƼ3ĤΥץǼưԤʤޤ٤ƤΥץ
ˤơ⡼/ϤṲ̄ޤ

  1. ⡼/Ϥˤθ

  2. ⡼/󽸹̷⤹˾ʬ礪Ӹе§˰ȿѿ
     η׻ˤս

  3. ꤷѿ˴ŤƤõȵ᤿Ƥؤͥ٤Ť

ܺ٤ˤĤƤʸ[1,2,3]򻲾ȤƤ


1.1 ŪϤˤθ

KL1 ˤ⡼/Ϥϡץƥδؿ//ѿи
§󼰤ν­ȤƲ򤯤Τǡץ
ॵ˴ؤƤۤμ֤ǹԤʤȤǤޤ(ʸ[5,6])Υ⡼
/ν礬­ǽʥץ well-moded/typed ʥץȤ
­Բǽˤʤץ ill-moded/typed ʥץȤޤ
ץ˸꤬¸ߤϡץƥȤ⡼/
󼰤ν礬­Բǽˤʤ뤳Ȥ¿ᡢ¿Ū˸Ф
ȤǽǤ


1.2 θ

⡼/󼰤ν礬­ԲǽȤʤ硢󼰽椫̷⤹
ʬ(minimal inconsistent subset)뤳Ȥǡθθ
ץΰϰ˹ʤळȤǤޤ(ʸ[4])ϡ⡼
/󤬥ץεиФƲݤ뤿ᡢ̷θȤʤä
(θ)ꤹ뤳ȤǡݤƤȵθ(
)ȸʤ뤫Ǥ

¸Ǥϡ⡼ɤȷʻѤ硢1սθФθΨ 70% 
٤Ǥ Kima ϡ⡼/ʳ˰ʲΡָе§פߤƸ
ζޤäƤޤ

 <е§>

  [Х٥1]
    - ɤǸƤѿإåɤˤʤƤϤʤʤ
    - ˥եξ¦ƱѿиƤϤʤʤ
       (ʬŪ occur-check)

  [Х٥2]
    - singleton иƤѿ̾ϡ `_' ǻϤޤäƤʤ
      ʤʤ

ָХ٥פϥޥɥ饤󥪥ץȤƻꤹ뤳ȤǤ
ޤǤθе§ŪѤ뤳ȤǤޤ¸Ǥϡ٥2 ޤǤ
е§Ѥ뤳ȤǡΨ 90 % ʾ˸夷ޤС
е§˵ꤵ줿ץߥ󥰥뤳Ȥǡ90 % ʾθ꤬
ưŪ˸ФǤֲáפˤ뤳ȤǤޤ


1.3 ʸμư

̷⤹˾ʬˤäƲȻŦ줿ϡ

 - ݤȤʤäƤ뵭¾ε˽񴹤뤫뤤
 - 椬ѿǤϡƱ¾εи񴹤ơ
   ѿνи䤹

ȤˤäѲ̷⤬äǽޤKima  well-moded/typed
ʥץץץȤߤʤȤѿν񴹤
Ƚ񴹤ΥץΥ⡼/򵡳Ū˹Ԥ(generate-and-test)
ˤäƽƤõޤҤ̷⤹˾ѤƸθʤ
ळȤˤꡢõ򸽼Ūʻ֤ǹԤȤǤޤܺ٤ˤĤƤʸ
[1]򻲾ȤƤ

⡼/ˤ뽤Ƥϰ̤ʣޤ뤿ᡢKima ϰʲΥҥ塼ꥹ
ƥȤäơ᤿Ƥͥ٤Ĥޤ

 <ͥ٤ŤΤΥҥ塼ꥹƥ>

  [ҥ塼ꥹƥ1] 
     ˤơѿ
      (a) singleton (1Τ)и
      (b) إåɤ2ʾи
      (c) إåɤޤϥܥǥ3ʾи
      (d) ҸƤӽФΰ2ʾи
     Ƥ褦ʤΤϡäȤ餷ʤ

  [ҥ塼ꥹƥ2] 
     ꥹȼȤȤǤηƱʤץΤˤ
     ѥ p ǤΥѥp<.,1> (ꥹȤ1) Ʊѿи
     ƤϤäȤ餷ʤ

Kima ϡޥɥ饤󥪥ץˤäơФԤʤ⡼/両
е§ŪѤ롢õο(ѿиν񴹤Ŀ)ꤹ롢
ʤɤκ٤ԤʤȤǤޤ


2. ˡ

Kima μ¹Ԥϡ KL1 ץΥե򼡤Τ褦˻ꤹ
ǤեʣǤޤ

  % kima xxx.kl1 yyy.kl1 zzz.kl1

ˤäơ⡼ɡӸХ٥2Ѥ1õˤ뽤
ƤΤäȤͥ٤ι⤤Τ󼨤ޤ

սΤߤԤʤϡΤ褦˻ꤷơ⡼/
̷⤹˾ʬȡе§˰ȿѿϤ뤳ȤǤޤ

  % kima +mis xxx.kl1 yyy.kl1 zzz.kl1

꤬ȯǤʤäϡϤޤõολʤɡ
¹ˤĤƤ 4 򻲾ȤƤ


3. ¹

 1. -- 1 սθ

2ĤΥꥹȤĤʤ append ץѿ1ս񤭴ְ㤨Ƥ
ͤޤ

 +------- append.kl1 ---------------------------------------------------+
 |                                                                      |
 | :- module test.                                                      |
 |                                                                      |
 | append([],   Y,Z) :- true | Y=Z.                                     |
 | append([A|Y],Y,Z0) :- true | Z0=[A|Z], append(X,Y,Z).                |
 | %         X                                             <-- correct  |
 |                                                                      |
 +----------------------------------------------------------------------+

Фͥ100ޤǤνƤ󼨤ˤϼΤ褦ˤޤ

  % kima +p 100 append.kl1
 
ȼνϤޤ

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  append([A|X],Y,Z0):-true|Z0=[A|Z],append(X,Y,Z)
                          in test:append/3, clause No.2
           -----
  append([A|Y],X,Z0):-true|Z0=[A|Z],append(X,Y,Z)
                          in test:append/3, clause No.2
           -----
           ------------- Priority 2 -------------
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Z0,Y,Z)
                          in test:append/3, clause No.2
           -----
           ------------- Priority 3 -------------
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Y,Y,Z)
                          in test:append/3, clause No.2
           -----
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(A,Y,Z)
                          in test:append/3, clause No.2
           -----
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Z,Y,Z)
                          in test:append/3, clause No.2
           -----

ϡͥ13ޤǤ6ĤνƤޤäȤ򼨤Ƥޤͥ1 
νƤǤͥ٤ι⤤ƤǤƤϤҤȤĤ `-----' Ƕڤ
ɽޤ`in test:append/3, clause No.2' ˤäơƤ

     test ⥸塼ˤ 3 νҸ append  2 ܤ

˴ؤ뽤ƤǤ뤳Ȥ狼ޤPriority 1 1ܤνƤտ̤
νǤ2ܤνƤϡ2ĤΥꥹȤǤߤ˥ޡץ
ˤʤäƤޤ(ʸ[1])

Kima ϡƤõΩäơ⡼/̷⤹˾ʬ(ʲ
Ǥ MIS)ӡе§˰ȿƤ(ѿ)θȤƵ
θɽˤϡʲΤ褦ˤޤ

  % kima +mis append.kl1

  < Minimal Inconsistent Subsets of *Mode* constraints >
   m/<(test:append)/3,1><cons,2> = IN
          imposed by rule HV applied to the variable Y
          in test:append/3, clause No.2
   m/<(test:append)/3,1> = OUT
          imposed by rule BV applied to the variable X
          in test:append/3, clause No.2
  -----
  < Minimal Inconsistent Subsets of *Type* constraints >
   --Constraints are consistent, and there is no MIS--

  < Violations of the syntactic rules of Detection Level 2 >
   singleton(X)
          in test:append/3, clause No.2

ǽ˥⡼˴ؤ MIS ɽ졢˷˴ؤ MIS ɽ
ޤKima Ωʣ MIS ٤˵뤳ȤǤ(ʸ[4])
 `-----' Ƕڤäɽޤξ硢⡼ɤ˴ؤ MIS 1Ĥ
Ĥޤ˴ؤƤ̷ϸĤޤ

ǤϡMIS 2Ĥ󼰤ǹƤޤ󼰤³2Ԥ
ݤ븶ȤʤäɽƤޤȤС 
`m/<(test:append)/3,1><cons,2> = IN' ݤƤΤ

 test:append/3  2 ܤˤѿ Y (ȥ⡼ɤŤ§ HV)

ǤȤȤ狼ޤäƤ MIS ˤꡢtest:append/3 
2ܤˤѿ X  Y θȤƵ路פȤ狼
ޤKima Ϥ X  Y νи뤳ȤˤꡢƤ
õԤʤޤ

ޤ٥2θе§ˤꡢѿ X  singleton иȤƸФ
Ƥޤе§ؤΰȿϰʲΤ褦˽Ϥޤ

  * Х٥1
    - ɤǸƤѿإåɤˤʤ:  var_not_in_the_head(ѿ)
    - ˥եξ¦ƱѿиƤ: 
                                              not_pass_occur_check(ѿ)
  * Х٥2
    -  ``_'' ǻϤޤäƤʤ singleton ѿ:  singleton(ѿ)


 2. -- Ω 2 սθ

ˡΨ׳ؤˤȹ礻פ׻ץѿ2սְ㤨
Ƥͤޤ

  +--------- comb.kl1 ---------------------------------------------+
  | :- module probability.                                         |
  |                                                                |
  | % nCr (n >= r >= 0)                                            |
  | % Use: combination(N,R,C)                                      |
  | %   e.g. combinaiton(3,2,Res) --> [[1,1,0], [1,0,1], [0,1,1]]  |
  | combination(N,0,C) :- true | init_list(0,N,0,[],C0), C=[C0].   |
  | combination(N,N,C) :- true | init_list(0,N,1,[],C0), C=[C0].   |
  | combination(N,R,C) :- N>R  |                                   |
  |     N1:=N-1, R1:=R-1,                                          |
  |     combination(N1,R1,C0), cons_list(1,C0,CC0),                |
  |     combination(N1,R, C1), cons_list(0,C1,CC1),                |
  |     append(CC0,CC1,CC).                                        |
  | %                  C                              <-- correct  |
  |                                                                |
  | init_list(N,Len,_,L0,L) :- N =:= Len | L0=L.                   |
  | init_list(N,Len,E,L0,L) :- N  <  Len |                         |
  |     L1=[E|L0], N1:=N+1, init_list(N1,Len,E,L1,L).              |
  |                                                                |
  | cons_list(_,[],    L) :- true | L=[].                          |
  | cons_list(A,[X|Xs],L) :- true |                                |
  |     L=[[A|X]|L1], cons_list(A,XS,L1).                          |
  | %                             Xs                  <-- correct  |
  |                                                                |
  | append([],   Y,Z ) :- true | Y=Z.                              |
  | append([A|X],Y,Z0) :- true | Z0=[A|Z], append(X,Y,Z).          |
  +----------------------------------------------------------------+

Фƿ1νƤõޤ

  % kima comb.kl1

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  combination(N,R,C):-N>R|N1:=N-1,R1:=R-1,combination(N1,R1,C0),
  cons_list(1,C0,CC0),combination(N1,R,C1),cons_list(0,C1,CC1),
  append(CC0,CC1,C)
                          in probability:combination/3, clause No.3
           -----
    ================= Suspected Group 2 =================

           ------------- Priority 1 -------------
  cons_list(A,[X|Xs],L):-true|L=[[A|X]|L1],cons_list(A,Xs,L1)
                          in probability:cons_list/3, clause No.2
           -----

2Ĥ Suspected Group Τ狼ޤKima ϡõä
᤿ʣ MIS 򡢤θǤ᤬ŤʤäƤ뤫ɤǥ롼ײ
ޤ N νƤõϡ줾Υ롼פȤΩƹԤʤ
ξ硢Kima ѿ2սθ꤬Ω륰롼פ°ȽǤ
줾Υ롼פФƿ1õԤʤäơտ̤νƤ
ȤƤޤսΥ롼ײ˴ؤƤϡʸ[2,3]򻲾Ȥ



 3. -- Ʊ쥰롼פ 2 սθ

åȤԤʤץˤơƱѿ2ս񤭴ְ㤨
Ƥͤޤ

 +--------- qsort.kl1 -------------------------------------------------------+
 | :- module main.                                                           |
 |                                                                           |
 | main :- true | quicksort([3,8,2,5,6],Res),io:ousstream([print(Res),nl]).  |
 |                                                                           |
 | quicksort(Xs,Ys) :- qsort(Xs,Ys,[]).                                      |
 | qsort([],    Ys0,Ys ) :- true | Ys=Ys0.                                   |
 | qsort([X|Xs],Ys0,Ys3) :- true |                                           |
 |     part(X,Xs,S,L), qsort(S,Ys0,Ys1),                                     |
 | %   Ys1=[X|Ys2], qsort(L,Ys2,Ys3).               <-- correct              |
 |     Ys2=[X|Ys1], qsort(L,Ys2,Ys3).                                        |
 |                                                                           |
 | part(_,[],    S, L ) :- true | S=[], L=[].                                |
 | part(A,[X|Xs],S0,L ) :- A>=X | S0=[X|S], part(A,Xs,S,L).                  |
 | part(A,[X|Xs],S, L0) :- A< X | L0=[X|L], part(A,Xs,S,L).                  |
 +---------------------------------------------------------------------------+

Фƿ1õԤʤäƤ⡢Ƥ򸫤Ĥ뤳ȤϤǤޤ

  % kima qsort.kl1

    ================= Suspected Group 1 =================

               Sorry, no alternative is found


ǡ2õߤޤ

  % kima +d 2 qsort.kl1

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  qsort([X|Xs],Ys0,Ys3):-true|part(X,Xs,S,L),qsort(S,Ys0,Ys1),Ys1=[X|Ys2],
  qsort(L,Ys2,Ys3)
                          in main:qsort/3, clause No.2
           -----

η̡տ̤νƤ1ĤνƤȤƵޤޤ

ΤȤ⤷1õˤ뽤Ƥ¸ߤϡƱ˵ᡢ
Ʊͥ٤ŤƽϤޤĤޤꡢ N õˤ뽤ƤϿ
 1, ..., N-1 õˤ뽤Ƥޤߤޤ

Kima 󼨤뽤Ƥտ̤ΤΤǤ뤫ɤϡ桼ʬȽ
ʤФʤޤ


4. ܤˡ (ޥɥ饤󥪥ץˤĤ)

ʲΥޥɥ饤󥪥ץѤ뤳ȤǤޤ

     ץ  
    -----------------------------------------------------------------
      +mode      ⡼̷⤹˾ʬѤޤ

      +type      ̷⤹˾ʬѤޤ

      +l <N>     ٥ N ޤǤθе§Ѥޤ

      +mis       θʤ̷⤹˾ʬ礪
                 е§˰ȿƤ(ѿ)Ϥޤ

      +d <N>     N ĤޤǤν񴹤ԤʤäƽƤõޤ
                 N  0<N=<10 ǤʤФʤޤ

      +p <N>     ͥ N ޤǤνƤɽޤ
                  N  N>0 ǤʤФʤޤ

      +h         إפɽޤ


ʳΥޥɥ饤ϡ٤ƥե̾Ȥƽޤ¸
ʤե̾ꤵ줿硢Kima ϼ¹Ԥߤޤ

ץ󤬲ꤵʤä硢Kima ϥץ

  % kima +mode +type +l 2 +d 1 +p 1  FILE1 FILE2 ...

ǤΤȤߤʤޤĤޤꡢ⡼/󤪤ӥ٥2ޤǤθе§
Ѥѿ1ս񴹤뽤ƤõԤʤäơǤͥ٤ι⤤
ޤ

Kima ϰʲθ§˴Ťƥޥɥ饤ᤷޤ

  - `+d'  `+p' ꤵ N Ϳʤä硢`+d'  `+p' 
    ꤵƤʤäΤȤߤʤޤ

  - `+l' Ū˻ꤵʤäϡN=2 ʤ٥2ޤǤθ
    §Ѥޤ

  - `+mis' ꤵ줿硢Ʊ `+d' ץ󤬻ꤵƤʤ
    СƤõԤʤޤƱ˽Ƥ᤿ϡ
    `+mis +d <N>' Ȼꤹɬפޤ

  - `+h' ɬץƬǻꤹɬפޤ

̾ UNIX ޥɤȰ㤤ץ `+' ǻϤޤäƤ뤳Ȥ
ƲKLIC Ϥˤä `-' ǻϤޤ륪ץ󤬻ѺѤߤǤ뤿ᡢ
Τ褦ʻͤˤʤäƤޤ

ޤ `+d' ΰˤϡץǤ 10 ޤǤǤ褦ˤʤ
Ƥޤ׻̤δط顢3  4 ʾοꤹΤϡǤ
ä˸ߤ Kima ϡָΨŻΤ˶()Ψ˴ؤƸ
ˤʤäƤޤ


5. 󥹥ȡ

Kima  KL1 ǵҤƤꡢKLIC ϤȤäƥѥ뤷ޤ
󥹥ȡˡˤĤƤϡܥեƱͤۥåȤ˴ޤޤƤ 
INSTALL (INSTALL-j) 򻲾ȤƤ

ޤۥåȤϲΥե뷲ǹƤޤ

  (1) Makefile  -- make ե
  (2) Readme-j  -- ܥե
      Readme    -- ܥեαѸ
  (3) INSTALL-j -- 󥹥ȡޥ˥奢
      INSTALL   -- 󥹥ȡޥ˥奢αѸ
  (4) kima-mainA.kl1 read_program4.kl1 normalize5.kl1 unify.kl1
      builtin_DB_st6.kl1 numberbuiltin3.kl1 findpath4.kl1
      constraints_stC.kl1 type_st2.kl1 stdinout2.kl1
      minsub.kl1 type_minsub.kl1 copygraph3.kl1 tcopygraph.kl1
      group_doubt3.kl1 generate_test8.kl1 gen_alt2.kl1
      test_alt7.kl1 heuristics8.kl1 common2.kl1 probability2.kl1
      command_line4.kl1 graphD.kl1 decode2.kl1 reduce6.kl1 sort.kl1
      outmessage5.kl1 tdecode.kl1 tgraph_st3.kl1
                -- Kima  Υץ ( 29 ե)
  (5) examples/append-error.kl1
               comb-error.kl1
               fib-error.kl1
               qsort-d2-error.kl1
                -- ХץΥץ(3ǾҲ𤷤Τޤ)


6. Kima ver.2 ɤ줿

 1. е§ƳˤäơϤζǤʤõθΨ
    ¸ޤ

 2. ͥ٤ι⤤Ƥ᤿ˡ㤤ͥ٤ν񴹤Ƥ
    뤳ȤˤäơõθΨ򤵤˲ޤ

θΨˤäơ33ǤϡSun Ultra 30 (248MHz) + 128MB memory
Ǥμ¹Ի֤ 25.9 ä 10.2 ä˸夷ޤ


7. klint ˤ()ϤȤμ

Kima  ϡKL1 ץŪϷ klint ver.2 (ʸ[7])Ѥƺ
ƤޤϤ˴ؤƤϡۤʤ2Ĥޤ

(1) klint ver.2 ϶ηϤȤƤޤKima Ǥϡǡʲ
Τ褦ʬषƱΥѥ˰ۤʤؿ椬иΤػߤ뤳Ȥǡ
(ñ)ηϤƤޤ

           KLIC Ϥˤ wrapped term
 ----------------------------------------------------------------
   F1            integer(Int)
   F2  ư      floating_point(Float)
   F3  ʸ        string(Str)
   F4  ٥        vector({Elem, ...})
   F5  ꥹ        list([Car|Cdr]) ޤ atom([])
   F6  ȥ饯  functor(Functor(Arg, ...)) ޤ atom(Atom)
                                          Atom  `[]' ʳ

(2) Kima ǤϡꥹȤ cdr ȤΥꥹȤƱǤ:

        for all paths p,  p<cons,2> = p

    Ȥݤޤ klint ǤϹԤʤޤ


8. ̤εǽˤĤ

  (1) ץز(stratification)

  (2) θ򤵤˹ʤ 1, 2(ʸ[1])

  (3) ѿи(occur-check)

ä(1)̤Ǥ뤿ˡappend  length Τ褦¿إ⡼/
Ҹץʣξ꤫ƤӽФȡwell-moded/typed ʥץ
Ǥ⡢⡼/꤬ȯǽޤä˷˴ؤƿ
򤹤뤿ˤϡƤӽФȤƱνҸ¾̾ʣ
ʤɤ(ɥۥå)֤ȤʤФʤޤ


9. 

(1) ٥˥ȥ꡼(ѿ)򤽤Τޤ޳Ǽȡill-moded ˤʤޤ
ϸߤ KLIC Ϥnew_vector/2 Ф new_vector(Vector,Integer) 
 new_vector(Vector,List) Ȥ2ĤλȤƤ뤫ǤKima  
new_vector ٤ԤΤ褦˻ȤƤȲꤷƥ⡼ɤŤޤ
ΤȤKLIC Ϥϥ٥Ǥ򤹤٤ 0 ǽޤΤǡ٥
ǤΥȥåץ⡼ɤϤʤ餺 in ˤʤޤΤᡢout 󤵤륹
꡼(ѿ)٥ˤޤȥ⡼ɸޤ Kima 
ѤƤ klint ˤƤƱͤǤ

(2) ѿνԤʤ硢ˤѿפؤνθ
ɬפޤKima ǤϡΤ `FreshVarN'(N  0  9 ޤǤ
) Ȥѿ̾ȤäƤޤΤᡢȤȤΥץǤ 
`FreshVarN' ȤѿȤƤȡƤ󼨤ʤǽ
ޤ`FreshVarN' Ȥѿ̾ѤϤǤ򤱤Ʋ

(3) ֥ꥹȤ cdr ϤȤΥꥹȤƱǤ(7(2))פȤݤ
Ƥ뤿ᡢɸϤեϤؤΥȥ꡼ǤդηΥǡήȡ
꤬ȯƤޤޤäơKima ŬѤݤˤϡɸϤ
եϤؤν񤭹ߤԤʤäƤʬ򥳥ȥȤɬפ
ˤĤƤϡᤤбͽǤ

(4) Kima  klint ver.2 ѤƤط塢klint ver.2 ˤ¤
Τޤ Kima ¤ˤʤäƤޤޤklint ǥݡȤƤʤ KL1 
εǽˤĤƤϡKima Ǥ⥵ݡȤƤޤklint ver.2 ˴ؤ
ϡʸ[7] Readme 򻲾ȤƤ


ʸ

[1] Ajiro, Y., Ueda, K., Cho, K., Error-Correcting Source Code. In
Proc. Fourth Int. Conf. on Principles and Practice of Constraint Programming
(CP'98), LNCS 1520, Springer, 1998, pp.40-54.

[2] Ajiro, Y. and Ueda, K., Kima -- an Automated Error Correction System
for Concurent Logic Programs. To appear in Proc. Forth Int. Workshop on
Automated and Algorithmic Debugging (AADEBUG 2000), 2000, 20 pages.

[3] , µ, Kima: ¹ץ༫ư.
To appear in ԥ塼եȥ, 2000, 16 pages.

[4] Cho, K. and Ueda, K., Diagnosing Non-Well-Moded Concurrent Logic
Programs, In Proc. 1996 Joint Int. Conf. and Symp. on Logic Programming
(JICSLP'96), The MIT Press, 1996, pp.215-229.

[5] Ueda, K. and Morita, M., Moded Flat GHC and Its Message-Oriented
Implementation Technique. New Generation Computing, Vol.13, No.1 (1994),
pp.3-43.

[6] Ueda, K., Experiences with Strong Moding in Concurrent Logic/Constraint
Programming. In Proc. Int. Workshop on Parallel Symbolic Languages and
Systems, LNCS 1068, Springer, 1996, pp.134-153.

[7] Ueda, K., {\em klint} --- Static Analyzer for KL1 Programs.
Available from
http://www.ueda.info.waseda.ac.jp/software.html, 2000.
