
## 7 A Layered Reasoning Model

We are now able to introduce our proposal for a representation of our conceptual model that we will describe from an architectural point of view. The main idea is shown in Figure 6. Our representation model is three-layered. We use a metamodeling approach to cope with the requirements of genericity and multi-language capabilities, as facilities we already have identified and indicated, previously.

At the upper level, we have the evaluation layer, where the framework allows adding tools like compilers and interpreters or proxys for them, such that code fragments of the programming language (L) can be evaluated (as CASs systems do in ActiveMath). Expressions in L are reduced to some form of **effect** object that can be observed by the client of the layer.

Exercises are expressed at the middle layer (called programming layer) where we may have operations working on them which are, intuitively speaking, the plan playing operations. We also will have operations for generating code targeting the evaluation level.

Finally, at the lower level, we have the metaprogramming layer. Here, we similarly have operations to create metaplans and by this mean we are able to support plan reuse. A metalanguage ML is used to express plans, code, concepts, which together are called reasoning code
(denoted RCode<L>) and metaplans (denoted by MetaCode<ML>), too. We call evaluation code (RCode<L>) the representation of the programming language L.

Based on a metaplan we may generate plan instances that correspond to different exercises of the same kind. Some of them may require evaluation at the evaluation layer, naturally. We also write Eval<L>, DR<L> and MDR<L> to denote the evaluation/reasoning engines at the

![0_image_0.png](0_image_0.png)

