reserve p for 5_or_greater Prime;
reserve z for Element of EC_WParam p;

theorem ThCommutativeProjCo:
  for P, Q being Element of EC_SetProjCo(z`1,z`2,p) holds
  addell_ProjCo(z,p).(P,Q) _EQ_ addell_ProjCo(z,p).(Q,P)
  proof
    let P, Q be Element of EC_SetProjCo(z`1,z`2,p);
    set O = [0, 1, 0];
    reconsider O as Element of EC_SetProjCo(z`1,z`2,p) by EC_PF_1:42;
    set PQ = addell_ProjCo(z,p).(P,Q);
    set QP = addell_ProjCo(z,p).(Q,P);
    consider PQQ be Element of ProjCo(GF(p)) such that
    X1: PQQ = PQ & PQQ in EC_SetProjCo(z`1,z`2,p);
    X2: (PQQ`1_3) = (PQ`1_3) & (PQQ`2_3) = (PQ`2_3) & (PQQ`3_3) = (PQ`3_3)
    by X1,EC_PF_2:32;
    consider QPP be Element of ProjCo(GF(p)) such that
    X3: QPP = QP & QPP in EC_SetProjCo(z`1,z`2,p);
    X4: (QPP`1_3) = (QP`1_3) & (QPP`2_3) = (QP`2_3) & (QPP`3_3) = (QP`3_3)
    by X3,EC_PF_2:32;
    per cases;
    suppose A1: P _EQ_ O;
      then A2: PQ _EQ_ Q by EC_PF_2:def 9;
      QP _EQ_ Q
      proof
        per cases;
        suppose B1: Q _EQ_ O;
          then QP _EQ_ O by A1,EC_PF_2:def 9;
          hence thesis by B1,EC_PF_1:44;
        end;
        suppose not Q _EQ_ O;
          hence thesis by A1,EC_PF_2:def 9;
        end;
      end;
      hence thesis by A2,EC_PF_1:44;
    end;
    suppose A1: Q _EQ_ O & not P _EQ_ O;
      then PQ _EQ_ P by EC_PF_2:def 9;
      hence thesis by A1,EC_PF_2:def 9;
    end;
    suppose A1: not P _EQ_ O & not Q _EQ_ O & not P _EQ_ Q;
      consider d be Element of GF(p) such that
      A2: d = -1.GF(p);
      d*(PQ`1_3) = d*(-(QP`1_3)) & d*(PQ`2_3) = d*(-(QP`2_3)) &
      d*(PQ`3_3) = d*(-(QP`3_3)) by A1,LmCommutative1;
      then d*(PQ`1_3) = (1.GF(p))*(QP`1_3) & d*(PQ`2_3) = (1.GF(p))*(QP`2_3) &
      d*(PQ`3_3) = (1.GF(p))*(QP`3_3) by A2,VECTSP_1:10;
      then (QPP`1_3) = d*(PQ`1_3) & (QPP`2_3) = d*(PQ`2_3) &
      (QPP`3_3) = d*(PQ`3_3) by X3,EC_PF_2:32;
      hence thesis by A2,X1,X2,X3,EC_PF_1:def 10,VECTSP_2:3;
    end;
    suppose A1: not P _EQ_ O & not Q _EQ_ O & P _EQ_ Q;
      consider PP be Element of ProjCo(GF(p)) such that
      A2: PP = P & PP in EC_SetProjCo(z`1,z`2,p);
      A3: PP`1_3 = P`1_3 & PP`2_3 = P`2_3 & PP`3_3 = P`3_3 by A2,EC_PF_2:32;
      consider QQ be Element of ProjCo(GF(p)) such that
      A4: QQ = Q & QQ in EC_SetProjCo(z`1,z`2,p);
      consider d be Element of GF(p) such that
      A6: d <> 0.GF(p) and
      A7: QQ`1_3 = d*(PP`1_3) & QQ`2_3 = d*(PP`2_3) & QQ`3_3 = d*(PP`3_3)
      by A1,A2,A4,EC_PF_1:def 10;
      set d6 = d |^6;
      reconsider d6 as Element of GF(p);
      d6 <> 0 by A6,EC_PF_1:25;
      then A8: d6 <> 0.GF(p) by EC_PF_1:11;
      Q`1_3 = d*(PP`1_3) & Q`2_3 = d*(PP`2_3) & Q`3_3 = d*(PP`3_3)
      by A4,A7,EC_PF_2:32;
      then (QP`1_3) = d6*(PQ`1_3) & (QP`2_3) = d6*(PQ`2_3) &
      (QP`3_3) = d6*(PQ`3_3) by A1,A3,A6,LmCommutative2;
      hence thesis by A8,X1,X2,X3,X4,EC_PF_1:def 10;
    end;
  end;
