There are many ways of making negation as failure precise, but one way is as follows: We try to find a set of “negative assumptions” we can make, {not(q1), … , not(qn)}, such that if we were to add these to the KB and use ordinary logical reasoning (now treating a not( p) as if it were a new atom unrelated to p), the set of atoms we could not derive would be exactly {q1, … , qn}. More precisely, we define a sequence of sets as follows: N0 = {} Nk+1 = { not(q)| KB ∪ Nk |= q } The reasoning procedure then is this: We calculate the Nk, and if the sequence converges, that is, if Nk+1 = Nk for some k, then we consider any atom p such that not( p) /∈ Nk to be derivable by negation as failure. (a) Show how this procedure works on the KB of, by giving the values of Nk. (b) Give an example of a KB where the procedure does not terminate. (c) Explain why the procedure does the right thing for KBs that are pure Horn, that is, do not contain the not operator. (d) Suppose a KB is weakly stratified with respect to g, as defined in For any pair of natural numbers k and r, define N(k,r) by