reserve i,j,k,n for Nat;
reserve x,y,z for Tuple of n, BOOLEAN;

theorem Th23:
  (2 to_power(n)+1) is prime & i is_expressible_by n & j
is_expressible_by n & k is_expressible_by n implies MUL_MOD(MUL_MOD(i,j,n),k,n)
  = MUL_MOD(i,MUL_MOD(j,k,n),n)
proof
  assume that
A1: (2 to_power(n)+1) is prime and
A2: i is_expressible_by n and
A3: j is_expressible_by n and
A4: k is_expressible_by n;
  set J = ChangeVal_1(j,n);
A5: J > 0 by A3,Th17;
  set I = ChangeVal_1(i,n);
  I <= 2 to_power(n) by A2,Th17;
  then
A6: I < 2 to_power(n)+1 by NAT_1:13;
  J <= 2 to_power(n) by A3,Th17;
  then
A7: J < 2 to_power(n)+1 by NAT_1:13;
  set K = ChangeVal_1(k,n);
A8: K > 0 by A4,Th17;
  K <= 2 to_power(n) by A4,Th17;
  then
A9: K < 2 to_power(n)+1 by NAT_1:13;
A10: I > 0 by A2,Th17;
  now
    set CV = (I*J) mod (2 to_power(n)+1);
    (I*J) mod (2 to_power(n)+1) < (2 to_power(n)+1) by NAT_D:1;
    then
A11: (I*J) mod (2 to_power(n)+1) <= 2 to_power(n) by NAT_1:13;
A12: CV <> 0 by A1,A6,A10,A7,A5,Th5;
    now
      per cases by A11,XXREAL_0:1;
      suppose
A13:    CV = 2 to_power(n);
        then
A14:    MUL_MOD(MUL_MOD(i,j,n),k,n) = ChangeVal_2((ChangeVal_1(0,n )*K)
        mod (2 to_power(n)+1),n) by Def8
          .= ChangeVal_2((CV*K) mod (2 to_power(n)+1),n) by A13,Def7
          .= ChangeVal_2(((I*J)*K) mod (2 to_power(n)+1),n) by EULER_2:8;
        set CV2 = (J*K) mod (2 to_power(n)+1);
        CV2 < (2 to_power(n)+1) by NAT_D:1;
        then
A15:    CV2 <= 2 to_power(n) by NAT_1:13;
A16:    CV2 <> 0 by A1,A7,A5,A9,A8,Th5;
        now
          per cases by A15,XXREAL_0:1;
          suppose
A17:        CV2 = 2 to_power(n);
            then
            MUL_MOD(i,MUL_MOD(j,k,n),n) = ChangeVal_2((I*ChangeVal_1(0,n)
            ) mod (2 to_power(n)+1),n) by Def8
              .= ChangeVal_2((I*CV2) mod (2 to_power(n)+1),n) by A17,Def7
              .= ChangeVal_2((I*(J*K)) mod (2 to_power(n)+1),n) by EULER_2:8
              .= ChangeVal_2((I*J*K) mod (2 to_power(n)+1),n);
            hence thesis by A14;
          end;
          suppose
            CV2 < 2 to_power(n);
            then MUL_MOD(j,k,n) = CV2 by Def8;
            then MUL_MOD(i,MUL_MOD(j,k,n),n) = ChangeVal_2((I*CV2) mod (2
            to_power(n)+1),n) by A16,Def7
              .= ChangeVal_2((I*(J*K)) mod (2 to_power(n)+1),n) by EULER_2:8
              .= ChangeVal_2((I*J*K) mod (2 to_power(n)+1),n);
            hence thesis by A14;
          end;
        end;
        hence thesis;
      end;
      suppose
        CV < 2 to_power(n);
        then
A18:    MUL_MOD(MUL_MOD(i,j,n),k,n) = ChangeVal_2((ChangeVal_1(CV, n)*K)
        mod (2 to_power(n)+1),n) by Def8
          .= ChangeVal_2((CV*K) mod (2 to_power(n)+1),n) by A12,Def7
          .= ChangeVal_2(((I*J)*K) mod (2 to_power(n)+1),n) by EULER_2:8;
        set CV2 = (J*K) mod (2 to_power(n)+1);
        CV2 < (2 to_power(n)+1) by NAT_D:1;
        then
A19:    CV2 <= 2 to_power(n) by NAT_1:13;
A20:    CV2 <> 0 by A1,A7,A5,A9,A8,Th5;
        now
          per cases by A19,XXREAL_0:1;
          suppose
A21:        CV2 = 2 to_power(n);
            then
            MUL_MOD(i,MUL_MOD(j,k,n),n) = ChangeVal_2((I*ChangeVal_1(0,n)
            ) mod (2 to_power(n)+1),n) by Def8
              .= ChangeVal_2((I*CV2) mod (2 to_power(n)+1),n) by A21,Def7
              .= ChangeVal_2((I*(J*K)) mod (2 to_power(n)+1),n) by EULER_2:8
              .= ChangeVal_2((I*J*K) mod (2 to_power(n)+1),n);
            hence thesis by A18;
          end;
          suppose
            CV2 < 2 to_power(n);
            then MUL_MOD(j,k,n) = CV2 by Def8;
            then MUL_MOD(i,MUL_MOD(j,k,n),n) = ChangeVal_2((I*CV2) mod (2
            to_power(n)+1),n) by A20,Def7
              .= ChangeVal_2((I*(J*K)) mod (2 to_power(n)+1),n) by EULER_2:8
              .= ChangeVal_2((I*J*K) mod (2 to_power(n)+1),n);
            hence thesis by A18;
          end;
        end;
        hence thesis;
      end;
    end;
    hence thesis;
  end;
  hence thesis;
end;
