# Relation

**Relations** and **logical relations** allow you to state equalities (equations) and
relationships inequalities among the variables and constants in you models.

**WHEN statements** allow you to state relationships among the
models and equations which depend on the values of variables in
those models. Sets and symbols are not allowed in real or logical
relations except when used as array subscripts.

**Real relations** relate the values of real atoms, real constants, and integer
constants. Real relations cannot contain boolean constants and atoms,
nor can they contain integer atoms.

**Logical relations** relate the values of boolean atoms and boolean
constants. The SATISFIED operator makes it possible to include real
relations in a logical relation. Neither integer atoms and constants nor
real atoms and constants are allowed in logical relations. If you find
yourself trying to write an equation with integer atoms, you are really
creating a conditional model for which you should use the WHEN
statement instead. See Conditional modelling to learn about how ASCEND represents this kind
of mathematical model. There are also a real variable types,
**solver_integer** and **solver_binary**, which are used to formulate
equations when the solver is expected to initially treat the variable as a
real value but drive it to an integer or 0-1 value at the solution. The
integer programming features of ASCEND are described in a technical
report by Craig Schmidt not yet available electronically. See system.a4l
for elementary details.
Like atoms, real and logical relations may have attributes, subatomic
particles for use by ASCEND clients and users. The name of a relation
can be used in writing logical relations and WHEN statements.
WHEN statements are outside the scope of this chapter; please see
Conditional modelling for the details.