operator_defs
[T:TYPE]
:
THEORY
BEGIN
O:
VAR
[T,
T-
>
T]
*:
VAR
[T,
T-
>
T]
-:
VAR
[T-
>
T]
x:
VAR
T
y:
VAR
T
z:
VAR
T
commutative?(O):
bool
=
FORALL
x,
y
:
(x
O
y)
=
(y
O
x);
associative?(O):
bool
=
FORALL
x,
y,
z
:
(x
O
y
O
z)
=
(x
O
(y
O
z));
left
identity?(O)(y):
bool
=
FORALL
x
:
(y
O
x)
=
x;
right
identity?(O)(y):
bool
=
FORALL
x
:
(x
O
y)
=
x;
identity?(O)(y):
bool
=
FORALL
x
:
((x
O
y)
=
x)
AND
((y
O
x)
=
x);
has
identity?(O):
bool
=
EXISTS
y
:
identity?(O)(y);
zero?(O)(y):
bool
=
FORALL
x
:
((x
O
y)
=
y)
AND
((y
O
x)
=
y);
has
zero?(O):
bool
=
EXISTS
y
:
zero?(O)(y);
inverses?(O)(-)(y):
bool
=
FORALL
x
:
((x
O
(-x))
=
y)
AND
(((-x)
O
x)
=
y);
has
inverses?(O):
bool
=
EXISTS
-,
y
:
inverses?(O)(-)(y);
distributive?(*,
O):
bool
=
FORALL
x,
y,
z
:
(x
*
(y
O
z))
=
((x
*
y)
O
(x
*
z));
END
operator_defs