reserve x for set;
reserve i,j for Integer;
reserve n,n1,n2,n3 for Nat;
reserve p for Prime;
reserve a,b,c,d for Element of GF(p);
reserve K for Ring;
reserve a1,a2,a3,a4,a5,a6 for Element of K;
reserve px,py,pz for object;
reserve Px,Py,Pz for Element of GF(p);
reserve P for Element of ProjCo(GF(p));
reserve O for Element of EC_SetProjCo(a,b,p);

theorem Th54:
  for p be 5_or_greater Prime, z be Element of EC_WParam p,
  g2, gf1, gf2, gf3 be Element of GF(p),
  P, Q be Element of EC_SetProjCo(z`1,z`2,p),
  R be Element of
  [:the carrier of GF(p), the carrier of GF(p), the carrier of GF(p):]
  st g2 = 2 mod p & gf1 = Q`2_3*(P`3_3) - P`2_3*(Q`3_3) &
    gf2 = Q`1_3*(P`3_3) - P`1_3*(Q`3_3) &
  gf3 = (gf1 |^2)*(P`3_3)*(Q`3_3) - (gf2 |^3) - g2*(gf2 |^2)*(P`1_3)*(Q`3_3) &
  R = [gf2*gf3, gf1 * ((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3)
         - (gf2 |^3)*(P`2_3)*(Q`3_3),
  (gf2 |^3)*(P`3_3)*(Q`3_3)]
  holds gf2*(P`3_3)*(R`2_3)
     = - (gf1*(R`1_3*(P`3_3) - P`1_3*(R`3_3)) + gf2*(P`2_3)*(R`3_3))
  proof
    let p be 5_or_greater Prime, z be Element of EC_WParam p,
    g2, gf1, gf2, gf3 be Element of GF(p),
    P, Q be Element of EC_SetProjCo(z`1,z`2,p),
    R be Element of
    [:the carrier of GF(p), the carrier of GF(p), the carrier of GF(p):]
    such that
    g2 = 2 mod p and
    gf1 = Q`2_3*(P`3_3) - P`2_3*(Q`3_3) & gf2 = Q`1_3*(P`3_3) - P`1_3*(Q`3_3) &
    gf3 = (gf1 |^2)*(P`3_3)*(Q`3_3) - (gf2 |^3) - g2*(gf2 |^2)*(P`1_3)*(Q`3_3)
      and
A1: R = [gf2*gf3, gf1 * ((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3)
           - (gf2 |^3)*(P`2_3)*(Q`3_3),
    (gf2 |^3)*(P`3_3)*(Q`3_3)];
    R`1_3*(P`3_3)-P`1_3*(R`3_3) = (gf2*gf3)*(P`3_3)-P`1_3*(R`3_3)
          by A1
    .= (gf2*gf3)*(P`3_3)-P`1_3*((gf2 |^3)*(P`3_3)*(Q`3_3)) by A1
    .= gf2*(P`3_3)*gf3-P`1_3*((gf2 |^(2+1))*(P`3_3)*(Q`3_3)) by GROUP_1:def 3
    .= (gf2*(P`3_3))*gf3-P`1_3*(((gf2 |^2)*gf2)*(P`3_3)*(Q`3_3)) by EC_PF_1:24
    .= (gf2*(P`3_3))*gf3
        -((gf2 |^2)*gf2*(P`3_3))*(P`1_3)*(Q`3_3) by GROUP_1:def 3
    .= (gf2*(P`3_3))*gf3-(gf2*(P`3_3)*(gf2 |^2))*(P`1_3)*(Q`3_3)
             by GROUP_1:def 3
    .= (gf2*(P`3_3))*gf3-(gf2*(P`3_3))*((gf2 |^2)*(P`1_3)*(Q`3_3)) by Th11
    .= (gf2*(P`3_3))*(gf3-(gf2 |^2)*(P`1_3)*(Q`3_3)) by VECTSP_1:11
    .= (gf2*(P`3_3))*(-((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3)) by VECTSP_1:17
    .= -(gf2*(P`3_3))*((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3) by VECTSP_1:8
    .= (-gf2*(P`3_3))*((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3) by VECTSP_1:9;
    then
    A2: gf1*(R`1_3*(P`3_3)-P`1_3*(R`3_3))
    = (-gf2*(P`3_3))*(gf1*((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3)) by GROUP_1:def 3;
A3: gf2*(P`2_3)*(R`3_3) = gf2*(P`2_3)*((gf2 |^3)*(P`3_3)*(Q`3_3))
            by A1
    .= gf2*(P`2_3*((gf2 |^3)*(P`3_3)*(Q`3_3))) by GROUP_1:def 3
    .= gf2*(P`3_3*(gf2 |^3)*(P`2_3)*(Q`3_3)) by GROUP_1:def 3
    .= gf2*(P`3_3)*(gf2 |^3)*(P`2_3)*(Q`3_3) by Th11
    .= (gf2*(P`3_3))*((gf2 |^3)*(P`2_3)*(Q`3_3)) by Th11
    .= (-gf2*(P`3_3))*(-(gf2 |^3)*(P`2_3)*(Q`3_3)) by VECTSP_1:10;
    thus -(gf1*(R`1_3*(P`3_3) - P`1_3*(R`3_3)) + gf2*(P`2_3)*(R`3_3))
    = -((-gf2*(P`3_3))*(gf1*((gf2 |^2)*(P`1_3)*(Q`3_3)-gf3)
            -(gf2 |^3)*(P`2_3)*(Q`3_3))) by A2,A3,VECTSP_1:def 7
    .= -(-((gf2*(P`3_3))*(R`2_3))) by A1,VECTSP_1:9
    .= gf2*(P`3_3)*(R`2_3) by RLVECT_1:17;
  end;
