Table 1: The major defined operators and their meanings.
Ptn	Generation Specifications
1	The input always has two episodic buffers: “there are [X] fact buffers and [Y] rule buffers”; “i want to prove [statement]”. The output is always “GENERATE_SUBGOALS”.
2	The input consists of two parts: the episodic buffer copied from pattern 1's input, and the added operator “operator: GENERATE_SUBGOALS”. The output is “i want to judge whether the facts can prove [statement] OR i want to judge whether the rules can prove [statement]” if [statement] is a positive statement. For the negative statement, the output is “i want to judge whether the facts do not contradict [statement] AND i want to judge whether the rules do not contradict [statement]”.
3	The input has two episodic buffers: “there are [X] fact buffers and [Y] rule buffers”, and “i want to judge whether the facts can prove/do not contradict [statement]”, depending on the generated goals in pattern 2. The output is always “GENERATE_SUBGOALS”.
4	The input consists of two parts: the episodic buffer copied from pattern 3's input, and the added operator “operator: GENERATE_SUBGOALS”. The output is “i want to judge whether fact buffer 1 can prove [statement] OR i want to judge whether fact buffer 2 can prove [statement] OR ...” if [statement] is a positive statement. For negative statement, the output is “i want to judge whether fact buffer 1 does not contradict [statement] AND i want to judge whether fact buffer 2 does not contradict [statement] AND ...”.
5	The input has two episodic buffers: “there are [X] fact buffers and [Y] rule buffers”, and “i want to judge whether fact buffer [i] can prove/does not contradict [statement]”, depending on the generated goals in pattern 4. The output is always “GET(FACT BUFFER_[i]) THEN RUN(EPISODIC_BUFFER, FACT_BUFFER_[i])”.
6	The input has three parts. (1) the episodic buffer copied from the input of pattern 5; (2) the facts from the fact buffer indicated by the output of pattern 5; (3) the operator “operator: RUN”. There are four possible outputs: when [statement] is a positive statement, the output is “true, this is confirmed by fact [i]” if there is a fact in the fact buffer to prove it, and is “false, CWA” if the [statement] is not proved by any facts in the buffer. When [statement] is a negative statement, the output is “true, NAF” if no facts in the fact buffer contradict it, and is “false, this is contradicted by fact [i]” if a fact in the fact buffer contradicts it.
10	The input has two parts: the episodic buffer and the rule buffer determined by pattern 9, where episodic buffer is “there are [X] fact buffers and [Y] rule buffers” plus “i want to judge whether rule buffer [j] can prove/does not contradict [statement]”, and the rule buffer is all the rules in RULEBUFFER_[j] as determined by pattern 9 (please check Figure 4 as an example). The output is the statements derived from the matched rules. For example, “all rough people are green” can be used to prove “bob is green”, and in order to prove “bob is green” using this rule, one needs to prove “bob is rough”. In this case the output is “according to rule [i], i need to prove bob is rough”. There are other edge cases that need to be handled such as negative query. For the handling of other edge cases, please check Appendix A.4.