/*

Compares new and old fctWitt.m

*/

load 'witt2_fun.m';
load 'fctWitt.m';
load 'fctWitt_old.m'; // original one!
load 'witt_gen.m';

// //////////////////////////////////////////////

// choose characteristic and coefficients below
p:=7; n:=1; F:=GF(p^n); P<j0>:=RationalFunctionField(F);


// coef.
// a0:=F!1;
// b0:=F!2;
FF<a0,b0>:=RationalFunctionField(F,2);

// //////////////////////////////////////////////

// compute can. lift
a1, b1, _, _, a2, b2 := lift(a0,b0);
aa1, bb1, _, _, aa2, bb2 := lift(a0,b0);

a:=[a0,a1,a2];
b:=[b0,b1,b2];

aa:=[a0,aa1,aa2];
bb:=[b0,bb1,bb2];


/*
// pre-compute to make repeated WittToInt faster
primr:=GenPrimRoots(p,2);

// convert integers to Witt vec.
w4:=IntToWitt(4,p,3 : primr:=primr);
w27:=IntToWitt(27,p,3 : primr:=primr);
w1728:=IntToWitt(1728,p,3 : primr:=primr);

acub:=WittProd2(WittProd2(a,a),a);
bsqr:=WittProd2(b,b);

num:=WittProd2(w4,acub);
den:=WittSum2(num,WittProd2(w27,bsqr));

num:=WittProd2(w1728,num);
den:=WittInv(den);

// finally the j-inv. of the can. lift.
J:=WittProd2(num,den);


aacub:=WittProd2(WittProd2(aa,aa),aa);
bbsqr:=WittProd2(bb,bb);

nnum:=WittProd2(w4,aacub);
dden:=WittSum2(nnum,WittProd2(w27,bbsqr));

nnum:=WittProd2(w1728,nnum);
dden:=WittInv(dden);

// finally the j-inv. of the can. lift.
JJ:=WittProd2(nnum,dden);

*/

load 'wittj.m';
J:=wittj(a,b);
JJ:=wittj(aa,bb);

J eq JJ;
