Основу исполняемых утверждений БЗ составляют правила и процедуры. Кроме того, есть формулы, функции, действия и т.п. Правила в G2 имеют традиционный вид: условие (антецедент) и заключение (консеквент). Кроме if-правила: условие ("if <логическое выражение>") и заключение ("then <действия>") используются еще 4 типа правил: initially, unconditionally, when и whenever.
Способы применения каждого правила определяются его синтаксисом:
<правило> ::= {\<префикс for>\
{<правило if> | <правило unconditional1у>
\ <правило when> | <правило whenever>]
\ <правило initially>]
<префикс fоr> ::= for {any | the } <item> ...
<правило if> ::= if <логическое выражение> then <список действий> <правило unconditionally> ::=unconditionally <список действий>
<правило when> ::= when <логическое выражение>
then <список действий>
<правило whenever> ::= whenever <описание события>
|ог <описание события>\
|and when <логическое выражение>\
<правило initially> ::= initially
|if <логическое выражение> then<список действий>
Каждый из типов правил может быть как общим, т.е. относящимся ко всему классу, так и специализированным, относящимся к конкретным экземплярам класса. Возможность представлять знания в виде общих, а не только конкретных правил, обеспечивает следующие преимущества:
- минимизируется избыточность БЗ;
- упрощается наполнение БЗ и ее сопровождение;
- минимизируются ошибки при отладке БЗ;
- способствует повторной используемости знаний (так как общие правила запоминаются в библиотеке G2 и могут использоваться в подобных приложениях).
Несмотря на то, что продукционные правила обеспечивают достаточную гибкость для описания реакций системы на изменения окружающего мира, в некоторых случаях, когда необходимо выполнить жесткую последовательность действий (например, запуск или остановку комплекса оборудования), более предпочтительным является процедурный подход. Язык программирования, используемый в G2 для представления процедурных знаний, является достаточно близким родственником Паскаля. Кроме стандартных управляющих конструкций язык расширен элементами, учитывающими работу процедуры в реальном времени: ожидание наступления событий, разрешение другим задачам прерывать выполнение данной процедуры, директивы, задающие последовательное или параллельное выполнение операторов. Еще одна интересная особенность языка- итераторы, позволяющие организовать цикл над множеством экземпляров класса. Перечисленные свойства языка позволяют системе одновременно выполнять множество различных процедур или множество копий одной и той же процедуры для множества различных объектов.