let p be 5 _or_greater Prime; :: thesis: for z being Element of EC_WParam p
for P1, P2, Q being Element of EC_SetProjCo ((z `1),(z `2),p) st P1 _EQ_ P2 holds
(addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)

let z be Element of EC_WParam p; :: thesis: for P1, P2, Q being Element of EC_SetProjCo ((z `1),(z `2),p) st P1 _EQ_ P2 holds
(addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)

let P1, P2, Q be Element of EC_SetProjCo ((z `1),(z `2),p); :: thesis: ( P1 _EQ_ P2 implies (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q) )
assume A1: P1 _EQ_ P2 ; :: thesis: (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)
reconsider O = [0,1,0] as Element of EC_SetProjCo ((z `1),(z `2),p) by EC_PF_1:42;
reconsider P1Q = (addell_ProjCo (z,p)) . (P1,Q), P2Q = (addell_ProjCo (z,p)) . (P2,Q) as Element of EC_SetProjCo ((z `1),(z `2),p) ;
reconsider g2 = 2 mod p, g3 = 3 mod p, g4 = 4 mod p, g8 = 8 mod p as Element of (GF p) by EC_PF_1:14;
per cases ( P1 _EQ_ O or ( Q _EQ_ O & not P1 _EQ_ O ) or ( not P1 _EQ_ O & not Q _EQ_ O & not P1 _EQ_ Q ) or ( not P1 _EQ_ O & not Q _EQ_ O & P1 _EQ_ Q ) ) ;
suppose B1: P1 _EQ_ O ; :: thesis: (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)
then B2: (addell_ProjCo (z,p)) . (P1,Q) = Q by EC_PF_2:def 9;
P2 _EQ_ O by A1, B1, EC_PF_1:44;
hence (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q) by B2, EC_PF_2:def 9; :: thesis: verum
end;
suppose B1: ( Q _EQ_ O & not P1 _EQ_ O ) ; :: thesis: (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)
then B2: (addell_ProjCo (z,p)) . (P1,Q) = P1 by EC_PF_2:def 9;
not P2 _EQ_ O by A1, B1, EC_PF_1:44;
hence (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q) by A1, B1, B2, EC_PF_2:def 9; :: thesis: verum
end;
suppose B1: ( not P1 _EQ_ O & not Q _EQ_ O & not P1 _EQ_ Q ) ; :: thesis: (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)
consider PP1 being Element of ProjCo (GF p) such that
B2: ( PP1 = P1 & PP1 in EC_SetProjCo ((z `1),(z `2),p) ) ;
consider PP2 being Element of ProjCo (GF p) such that
B3: ( PP2 = P2 & PP2 in EC_SetProjCo ((z `1),(z `2),p) ) ;
consider a being Element of (GF p) such that
B4: ( a <> 0. (GF p) & PP1 `1_3 = a * (PP2 `1_3) & PP1 `2_3 = a * (PP2 `2_3) & PP1 `3_3 = a * (PP2 `3_3) ) by A1, B2, B3, EC_PF_1:def 10;
B5: ( P1 `1_3 = PP1 `1_3 & P1 `2_3 = PP1 `2_3 & P1 `3_3 = PP1 `3_3 ) by B2, EC_PF_2:32;
( P1 `1_3 = a * (PP2 `1_3) & P1 `2_3 = a * (PP2 `2_3) & P1 `3_3 = a * (PP2 `3_3) ) by B2, B4, EC_PF_2:32;
then B51: ( P1 `1_3 = a * (P2 `1_3) & P1 `2_3 = a * (P2 `2_3) & P1 `3_3 = a * (P2 `3_3) ) by B3, EC_PF_2:32;
set gf1P1 = ((Q `2_3) * (P1 `3_3)) - ((P1 `2_3) * (Q `3_3));
set gf2P1 = ((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3));
set gf3P1 = (((((((Q `2_3) * (P1 `3_3)) - ((P1 `2_3) * (Q `3_3))) |^ 2) * (P1 `3_3)) * (Q `3_3)) - ((((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3))) |^ 3)) - (((g2 * ((((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3))) |^ 2)) * (P1 `1_3)) * (Q `3_3));
set gf1P2 = ((Q `2_3) * (P2 `3_3)) - ((P2 `2_3) * (Q `3_3));
set gf2P2 = ((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3));
set gf3P2 = (((((((Q `2_3) * (P2 `3_3)) - ((P2 `2_3) * (Q `3_3))) |^ 2) * (P2 `3_3)) * (Q `3_3)) - ((((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3))) |^ 3)) - (((g2 * ((((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3))) |^ 2)) * (P2 `1_3)) * (Q `3_3));
reconsider gf1P1 = ((Q `2_3) * (P1 `3_3)) - ((P1 `2_3) * (Q `3_3)), gf2P1 = ((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3)), gf3P1 = (((((((Q `2_3) * (P1 `3_3)) - ((P1 `2_3) * (Q `3_3))) |^ 2) * (P1 `3_3)) * (Q `3_3)) - ((((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3))) |^ 3)) - (((g2 * ((((Q `1_3) * (P1 `3_3)) - ((P1 `1_3) * (Q `3_3))) |^ 2)) * (P1 `1_3)) * (Q `3_3)), gf1P2 = ((Q `2_3) * (P2 `3_3)) - ((P2 `2_3) * (Q `3_3)), gf2P2 = ((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3)), gf3P2 = (((((((Q `2_3) * (P2 `3_3)) - ((P2 `2_3) * (Q `3_3))) |^ 2) * (P2 `3_3)) * (Q `3_3)) - ((((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3))) |^ 3)) - (((g2 * ((((Q `1_3) * (P2 `3_3)) - ((P2 `1_3) * (Q `3_3))) |^ 2)) * (P2 `1_3)) * (Q `3_3)) as Element of (GF p) ;
B6: gf1P1 = ((Q `2_3) * (a * (P2 `3_3))) - ((P1 `2_3) * (Q `3_3)) by B3, B4, B5, EC_PF_2:32
.= ((Q `2_3) * (a * (P2 `3_3))) - ((a * (P2 `2_3)) * (Q `3_3)) by B3, B4, B5, EC_PF_2:32
.= (a * ((Q `2_3) * (P2 `3_3))) - ((a * (P2 `2_3)) * (Q `3_3)) by GROUP_1:def 3
.= (a * ((Q `2_3) * (P2 `3_3))) - (a * ((P2 `2_3) * (Q `3_3))) by GROUP_1:def 3
.= a * gf1P2 by VECTSP_1:11 ;
B7: gf2P1 = ((Q `1_3) * (a * (P2 `3_3))) - ((P1 `1_3) * (Q `3_3)) by B3, B4, B5, EC_PF_2:32
.= ((Q `1_3) * (a * (P2 `3_3))) - ((a * (P2 `1_3)) * (Q `3_3)) by B3, B4, B5, EC_PF_2:32
.= (a * ((Q `1_3) * (P2 `3_3))) - ((a * (P2 `1_3)) * (Q `3_3)) by GROUP_1:def 3
.= (a * ((Q `1_3) * (P2 `3_3))) - (a * ((P2 `1_3) * (Q `3_3))) by GROUP_1:def 3
.= a * gf2P2 by VECTSP_1:11 ;
B8: gf3P1 = (((((a |^ 2) * (gf1P2 |^ 2)) * (a * (P2 `3_3))) * (Q `3_3)) - ((a * gf2P2) |^ 3)) - (((g2 * ((a * gf2P2) |^ 2)) * (P1 `1_3)) * (Q `3_3)) by B6, B7, B51, BINOM:9
.= (((((a |^ 2) * (gf1P2 |^ 2)) * (a * (P2 `3_3))) * (Q `3_3)) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a * gf2P2) |^ 2)) * (P1 `1_3)) * (Q `3_3)) by BINOM:9
.= ((((((a |^ 2) * (gf1P2 |^ 2)) * a) * (P2 `3_3)) * (Q `3_3)) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a * gf2P2) |^ 2)) * (P1 `1_3)) * (Q `3_3)) by GROUP_1:def 3
.= ((((((a |^ 2) * a) * (gf1P2 |^ 2)) * (P2 `3_3)) * (Q `3_3)) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a * gf2P2) |^ 2)) * (P1 `1_3)) * (Q `3_3)) by GROUP_1:def 3
.= (((((a |^ (2 + 1)) * (gf1P2 |^ 2)) * (P2 `3_3)) * (Q `3_3)) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a * gf2P2) |^ 2)) * (P1 `1_3)) * (Q `3_3)) by EC_PF_1:24
.= (((((a |^ 3) * (gf1P2 |^ 2)) * (P2 `3_3)) * (Q `3_3)) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a |^ 2) * (gf2P2 |^ 2))) * (a * (P2 `1_3))) * (Q `3_3)) by B51, BINOM:9
.= (((a |^ 3) * (((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3))) - ((a |^ 3) * (gf2P2 |^ 3))) - (((g2 * ((a |^ 2) * (gf2P2 |^ 2))) * (a * (P2 `1_3))) * (Q `3_3)) by EC_PF_2:11
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - (((g2 * ((a |^ 2) * (gf2P2 |^ 2))) * (a * (P2 `1_3))) * (Q `3_3)) by VECTSP_1:11
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - ((((g2 * (a |^ 2)) * (gf2P2 |^ 2)) * (a * (P2 `1_3))) * (Q `3_3)) by GROUP_1:def 3
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - ((((((a |^ 2) * g2) * (gf2P2 |^ 2)) * a) * (P2 `1_3)) * (Q `3_3)) by GROUP_1:def 3
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - ((((((a |^ 2) * a) * g2) * (gf2P2 |^ 2)) * (P2 `1_3)) * (Q `3_3)) by EC_PF_2:11
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - (((((a |^ (2 + 1)) * g2) * (gf2P2 |^ 2)) * (P2 `1_3)) * (Q `3_3)) by EC_PF_1:24
.= ((a |^ 3) * ((((gf1P2 |^ 2) * (P2 `3_3)) * (Q `3_3)) - (gf2P2 |^ 3))) - ((a |^ 3) * (((g2 * (gf2P2 |^ 2)) * (P2 `1_3)) * (Q `3_3))) by EC_PF_2:11
.= (a |^ 3) * gf3P2 by VECTSP_1:11 ;
B9: P1Q = [(gf2P1 * gf3P1),((gf1P1 * ((((gf2P1 |^ 2) * (P1 `1_3)) * (Q `3_3)) - gf3P1)) - (((gf2P1 |^ 3) * (P1 `2_3)) * (Q `3_3))),(((gf2P1 |^ 3) * (P1 `3_3)) * (Q `3_3))] by B1, EC_PF_2:def 9;
( not P2 _EQ_ O & not P2 _EQ_ Q ) by A1, B1, EC_PF_1:44;
then B10: P2Q = [(gf2P2 * gf3P2),((gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2)) - (((gf2P2 |^ 3) * (P2 `2_3)) * (Q `3_3))),(((gf2P2 |^ 3) * (P2 `3_3)) * (Q `3_3))] by B1, EC_PF_2:def 9;
consider PP1Q being Element of ProjCo (GF p) such that
BX1: ( PP1Q = P1Q & PP1Q in EC_SetProjCo ((z `1),(z `2),p) ) ;
consider PP2Q being Element of ProjCo (GF p) such that
BX2: ( PP2Q = P2Q & PP2Q in EC_SetProjCo ((z `1),(z `2),p) ) ;
B11: PP1Q `1_3 = P1Q `1_3 by BX1, EC_PF_2:32
.= (a * gf2P2) * ((a |^ 3) * gf3P2) by B7, B8, B9, EC_PF_2:def 3
.= ((a * gf2P2) * (a |^ 3)) * gf3P2 by GROUP_1:def 3
.= (((a |^ 3) * a) * gf2P2) * gf3P2 by GROUP_1:def 3
.= ((a |^ (3 + 1)) * gf2P2) * gf3P2 by EC_PF_1:24
.= (a |^ 4) * (gf2P2 * gf3P2) by GROUP_1:def 3
.= (a |^ 4) * (P2Q `1_3) by B10, EC_PF_2:def 3
.= (a |^ 4) * (PP2Q `1_3) by BX2, EC_PF_2:32 ;
B12: PP1Q `3_3 = P1Q `3_3 by BX1, EC_PF_2:32
.= ((gf2P1 |^ 3) * (P1 `3_3)) * (Q `3_3) by B9, EC_PF_2:def 5
.= (((a * gf2P2) |^ 3) * (a * (P2 `3_3))) * (Q `3_3) by B3, B4, B5, B7, EC_PF_2:32
.= (((a |^ 3) * (gf2P2 |^ 3)) * (a * (P2 `3_3))) * (Q `3_3) by BINOM:9
.= ((((a |^ 3) * (gf2P2 |^ 3)) * a) * (P2 `3_3)) * (Q `3_3) by GROUP_1:def 3
.= ((((a |^ 3) * a) * (gf2P2 |^ 3)) * (P2 `3_3)) * (Q `3_3) by GROUP_1:def 3
.= (((a |^ (3 + 1)) * (gf2P2 |^ 3)) * (P2 `3_3)) * (Q `3_3) by EC_PF_1:24
.= (a |^ 4) * (((gf2P2 |^ 3) * (P2 `3_3)) * (Q `3_3)) by EC_PF_2:11
.= (a |^ 4) * (P2Q `3_3) by B10, EC_PF_2:def 5
.= (a |^ 4) * (PP2Q `3_3) by BX2, EC_PF_2:32 ;
B13: PP1Q `2_3 = P1Q `2_3 by BX1, EC_PF_2:32
.= ((a * gf1P2) * (((((a * gf2P2) |^ 2) * (a * (P2 `1_3))) * (Q `3_3)) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by B51, B6, B7, B8, B9, EC_PF_2:def 4
.= ((a * gf1P2) * (((((a |^ 2) * (gf2P2 |^ 2)) * (a * (P2 `1_3))) * (Q `3_3)) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by BINOM:9
.= ((a * gf1P2) * ((((((a |^ 2) * (gf2P2 |^ 2)) * a) * (P2 `1_3)) * (Q `3_3)) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by GROUP_1:def 3
.= ((a * gf1P2) * ((((((a |^ 2) * a) * (gf2P2 |^ 2)) * (P2 `1_3)) * (Q `3_3)) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by GROUP_1:def 3
.= ((a * gf1P2) * (((((a |^ (2 + 1)) * (gf2P2 |^ 2)) * (P2 `1_3)) * (Q `3_3)) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by EC_PF_1:24
.= ((a * gf1P2) * (((a |^ 3) * (((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3))) - ((a |^ 3) * gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by EC_PF_2:11
.= ((a * gf1P2) * ((a |^ 3) * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by VECTSP_1:11
.= (((a * gf1P2) * (a |^ 3)) * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2)) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by GROUP_1:def 3
.= ((((a |^ 3) * a) * gf1P2) * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2)) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by GROUP_1:def 3
.= (((a |^ (3 + 1)) * gf1P2) * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2)) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by EC_PF_1:24
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - ((((a * gf2P2) |^ 3) * (a * (P2 `2_3))) * (Q `3_3)) by GROUP_1:def 3
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - ((((a |^ 3) * (gf2P2 |^ 3)) * (a * (P2 `2_3))) * (Q `3_3)) by BINOM:9
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - (((((a |^ 3) * (gf2P2 |^ 3)) * a) * (P2 `2_3)) * (Q `3_3)) by GROUP_1:def 3
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - (((((a |^ 3) * a) * (gf2P2 |^ 3)) * (P2 `2_3)) * (Q `3_3)) by GROUP_1:def 3
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - ((((a |^ (3 + 1)) * (gf2P2 |^ 3)) * (P2 `2_3)) * (Q `3_3)) by EC_PF_1:24
.= ((a |^ 4) * (gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2))) - ((a |^ 4) * (((gf2P2 |^ 3) * (P2 `2_3)) * (Q `3_3))) by EC_PF_2:11
.= (a |^ 4) * ((gf1P2 * ((((gf2P2 |^ 2) * (P2 `1_3)) * (Q `3_3)) - gf3P2)) - (((gf2P2 |^ 3) * (P2 `2_3)) * (Q `3_3))) by VECTSP_1:11
.= (a |^ 4) * (P2Q `2_3) by B10, EC_PF_2:def 4
.= (a |^ 4) * (PP2Q `2_3) by BX2, EC_PF_2:32 ;
a |^ 4 <> 0 by B4, EC_PF_1:25;
then a |^ 4 <> 0. (GF p) by EC_PF_1:11;
hence (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q) by B11, B12, B13, BX1, BX2, EC_PF_1:def 10; :: thesis: verum
end;
suppose B1: ( not P1 _EQ_ O & not Q _EQ_ O & P1 _EQ_ Q ) ; :: thesis: (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q)
then B2: ( not P2 _EQ_ O & P2 _EQ_ Q ) by A1, EC_PF_1:44;
reconsider gf1 = ((z `1) * ((Q `3_3) |^ 2)) + (g3 * ((Q `1_3) |^ 2)), gf2 = (Q `2_3) * (Q `3_3) as Element of (GF p) ;
reconsider gf3 = ((Q `1_3) * (Q `2_3)) * gf2 as Element of (GF p) ;
reconsider gf4 = (gf1 |^ 2) - (g8 * gf3) as Element of (GF p) ;
(addell_ProjCo (z,p)) . (Q,P1) = [((g2 * gf4) * gf2),((gf1 * ((g4 * gf3) - gf4)) - ((g8 * ((Q `2_3) |^ 2)) * (gf2 |^ 2))),(g8 * (gf2 |^ 3))] by B1, EC_PF_2:def 9
.= (addell_ProjCo (z,p)) . (Q,P2) by B1, B2, EC_PF_2:def 9 ;
then B4: P1Q _EQ_ (addell_ProjCo (z,p)) . (Q,P2) by ThCommutativeProjCo;
P2Q _EQ_ (addell_ProjCo (z,p)) . (Q,P2) by ThCommutativeProjCo;
hence (addell_ProjCo (z,p)) . (P1,Q) _EQ_ (addell_ProjCo (z,p)) . (P2,Q) by B4, EC_PF_1:44; :: thesis: verum
end;
end;