if(Prover9).
assign(order, kbo).
end_if.

formulas(assumptions).

% IP loop axioms
1 * x = x. x * 1 = x.
x' * (x * y) = y. x'' = x.
(x * y) * y' = x. 1' = 1.

% alt, flex
x * (x * y) = (x * x) * y.
(x * y) * y = x * (y * y).
x * (y * x) = (x * y) * x.

% ARIF
x * ((y * (x * y)) * z) = (x * (y * x)) * (y * z)		# label(ARIF1).
(z * ((y * x) * y)) * x = (z * y) * ((x * y) * x)		# label(ARIF2).

% Moufang element of type M_0
(C * (x * y)) * C = (C * x) * (y * C).
((C * x) * C) * y = C * (x * (C * y)).
((y * C) * x) * C = y * (C * (x * C)).

% Moufang element of type M_1
((x * C) * x) * y = x * (C * (x * y)).
((y * x) * C) * x = y * (x * (C * x)).

% M_0 and M_1 are equivalent in ARIF loops

end_of_list.

formulas(goals).

% Any one of these goals will suffice

% Moufang element of type M_2
(x * C) * (y * x) = x * ((C * y) * x).
((x * y) * x) * C = x * (y * (x * C)).

% Moufang element of type M_3
(x * y) * (C * x) = x * ((y * C) * x).
((C * x) * y) * x = C * (x * (y * x)).

end_of_list.

%BEGIN
% The result is known in two important special cases

% Case 1: C loops
x * (y * (y * z)) = ((x * y) * y) * z					# label(C).

% Case 2: RIF loops
(x * y) * (z * (x * y)) = ((x * (y * z)) * x) * y		# label(RIF1).
((y * x) * z) * (y * x) = y * (x * ((z * y) * x))		# label(RIF2).

END%
