Now that we have the logical primitives, we can operate on them to produce other logical primitives. An operator is a function that given zero or more primitives as input, produces one or more primitives as output. This is syntactically represented in the following form:
<data_namespace:operator_name>
<!-- One or more emergent primitives that are newly declared -->
<dialog:emergent_primitives>
<data_namespace:type_name id='label'/>
</dialog:emergent_primitives>
<!-- Zero or more input primitives that have already been declared -->
<data_namespace:type_name ref='label'/>
...
</data_namespace:operator_name>
For example, the syntax for applying the binary intersection operator to the fluid surface ul_abcd and the
Euclidean plane surface ul_abcdo to yield the curve abcd takes this form:
<tlg1799.tlg001:intersection>
<dialog:emergent_primitives>
<tlg0552.tlg008:curve id='abcd'/>
<dialog:emergent_primitives>
<tlg0552.tlg008:fluid_surface ref='ul_abcd'/>
<tlg1799.tlg001:plane_surface ref='ul_abcdo'/>
</tlg1799.tlg001:intersection>