#Maple proof that (62) is equivalent to (1)-(6) in additional material, 3D
restart;
with(LinearAlgebra):
with(ArrayTools):


#(59) number of simple times, feel free to replace by any other positive integer
N := 7;


#known coeffs in (62)
gbar := Array(0..N):
Ubar1 := Array(0..N):
Ubar2 := Array(0..N):
Ubar3 := Array(0..N):
Ubar4 := Array(0..N):
Ubar5 := Array(0..N):
Ubar6 := Array(0..N):
Mbar11 := Array(0..N):
Mbar12 := Array(0..N):
Mbar13 := Array(0..N):
Mbar14 := Array(0..N):
Mbar15 := Array(0..N):
Mbar16 := Array(0..N):
Mbar22 := Array(0..N):
Mbar23 := Array(0..N):
Mbar24 := Array(0..N):
Mbar25 := Array(0..N):
Mbar26 := Array(0..N):
Mbar33 := Array(0..N):
Mbar34 := Array(0..N):
Mbar35 := Array(0..N):
Mbar36 := Array(0..N):
Mbar44 := Array(0..N):
Mbar45 := Array(0..N):
Mbar46 := Array(0..N):
Mbar55 := Array(0..N):
Mbar56 := Array(0..N):
Mbar66 := Array(0..N):


#unknown values (63)
uomega := Array(0..N):
vomega := Array(0..N):
womega := Array(0..N):

#set known coeffs and unknown values to symbolic values 
for i from 0 by 1 to N do
gbar[i] := gg[i]:
Ubar1[i] := u1[i]:
Ubar2[i] := u2[i]:
Ubar3[i] := u3[i]:
Ubar4[i] := u4[i]:
Ubar5[i] := u5[i]:
Ubar6[i] := u6[i]:
Mbar11[i] := m11[i]:
Mbar12[i] := m12[i]:
Mbar13[i] := m13[i]:
Mbar14[i] := m14[i]:
Mbar15[i] := m15[i]:
Mbar16[i] := m16[i]:
Mbar22[i] := m22[i]:
Mbar23[i] := m23[i]:
Mbar24[i] := m24[i]:
Mbar25[i] := m25[i]:
Mbar26[i] := m26[i]:
Mbar33[i] := m33[i]:
Mbar34[i] := m34[i]:
Mbar35[i] := m35[i]:
Mbar36[i] := m36[i]:
Mbar44[i] := m44[i]:
Mbar45[i] := m45[i]:
Mbar46[i] := m46[i]:
Mbar55[i] := m55[i]:
Mbar56[i] := m56[i]:
Mbar66[i] := m66[i]:
uomega[i] := uom[i]:
vomega[i] := vom[i]:
womega[i] := wom[i]:
end do:

#Vector of unknown values (63)
Uomega := Vector(N+1):
Vomega := Vector(N+1):
Womega := Vector(N+1):
for i from 0 by 1 to N do
Uomega[i+1] := uomega[i]:
Vomega[i+1] := vomega[i]:
Womega[i+1] := womega[i]:
end do:

#matrix L in (66)
L := Matrix(N+1,N+1,symbol=l);

#(66)
Uomega_dot := Multiply(L, Uomega);
Vomega_dot := Multiply(L, Vomega);
Womega_dot := Multiply(L, Womega);



#compute (62)
ehat := 0:
for i from 0 by 1 to N do
UH := Vector([Ubar1[i],Ubar2[i],Ubar3[i],Ubar4[i],Ubar5[i],Ubar6[i]]):
MH := Matrix([
[Mbar11[i] , Mbar12[i], Mbar13[i], Mbar14[i], Mbar15[i], Mbar16[i]], 
[Mbar12[i] , Mbar22[i], Mbar23[i], Mbar24[i], Mbar25[i], Mbar26[i]], 
[Mbar13[i] , Mbar23[i], Mbar33[i], Mbar34[i], Mbar35[i], Mbar36[i]], 
[Mbar14[i] , Mbar24[i], Mbar34[i], Mbar44[i], Mbar45[i], Mbar46[i]], 
[Mbar15[i] , Mbar25[i], Mbar35[i], Mbar45[i], Mbar55[i], Mbar56[i]], 
[Mbar16[i] , Mbar26[i], Mbar36[i], Mbar46[i], Mbar56[i], Mbar66[i]]]):
AH := Vector([Uomega[i+1],Vomega[i+1],Womega[i+1], Uomega_dot[i+1],Vomega_dot[i+1],Womega_dot[i+1]]):
ehat := ehat + gbar[i] - 2*Multiply( Transpose(UH),AH) 
+ Multiply(Multiply( Transpose(AH), MH),AH):
end do:    
ehat := ehat/(N+1):
ehat;

###

#number of unkwowns
n_Unknowns := 3*(N+1);

#(65)
# vector of all unknowns
C := Vector(n_Unknowns):
for i from 0 by 1 to N do
C[i+1] := uomega[i]:
C[N+1+i+1] := vomega[i]:
C[2*N+2+i+1] := womega[i]:
end do:

VV :=Vector(N+1): 
U1V := Vector(N+1):
U2V := Vector(N+1):
U3V := Vector(N+1):
U4V := Vector(N+1):
U5V := Vector(N+1):
U6V := Vector(N+1):
M11V := Vector(N+1):
M12V := Vector(N+1):
M13V := Vector(N+1):
M14V := Vector(N+1):
M15V := Vector(N+1):
M16V := Vector(N+1):
M22V := Vector(N+1):
M23V := Vector(N+1):
M24V := Vector(N+1):
M25V := Vector(N+1):
M26V := Vector(N+1):
M33V := Vector(N+1):
M34V := Vector(N+1):
M35V := Vector(N+1):
M36V := Vector(N+1):
M44V := Vector(N+1):
M45V := Vector(N+1):
M46V := Vector(N+1):
M55V := Vector(N+1):
M56V := Vector(N+1):
M66V := Vector(N+1):

for i from 0 by 1 to N do 
VV[i+1] := gbar[i]:
U1V[i+1] := Ubar1[i]:
U2V[i+1] := Ubar2[i]:
U3V[i+1] := Ubar3[i]:
U4V[i+1] := Ubar4[i]:
U5V[i+1] := Ubar5[i]:
U6V[i+1] := Ubar6[i]:
M11V[i+1] := Mbar11[i]:
M12V[i+1] := Mbar12[i]:
M13V[i+1] := Mbar13[i]:
M14V[i+1] := Mbar14[i]:
M15V[i+1] := Mbar15[i]:
M16V[i+1] := Mbar16[i]:
M22V[i+1] := Mbar22[i]:
M23V[i+1] := Mbar23[i]:
M24V[i+1] := Mbar24[i]:
M25V[i+1] := Mbar25[i]:
M26V[i+1] := Mbar26[i]:
M33V[i+1] := Mbar33[i]:
M34V[i+1] := Mbar34[i]:
M35V[i+1] := Mbar35[i]:
M36V[i+1] := Mbar36[i]:
M44V[i+1] := Mbar44[i]:
M45V[i+1] := Mbar45[i]:
M46V[i+1] := Mbar46[i]:
M55V[i+1] := Mbar55[i]:
M56V[i+1] := Mbar56[i]:
M66V[i+1] := Mbar66[i]:
end do:

#(2) in additional material
g := 0:
for i from 1 by 1 to N+1 do 
g := g + VV[i]:
end do:
g := (1/(N+1))*g:

#compute (5) in additional material
H1 := U1V + Multiply( Transpose(L),U4V ):
H2 := U2V + Multiply( Transpose(L),U5V ):
H3 := U3V + Multiply( Transpose(L),U6V ):
U := (1/(N+1))*Concatenate(1,Concatenate(1,H1,H2),H3):





#compute (6) in additional material 
H11 := 
+ DiagonalMatrix(M11V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M44V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M14V)  )
+ Multiply(  DiagonalMatrix(M14V), L  ):

H12 := 
+ DiagonalMatrix(M12V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M45V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M24V)  )
+ Multiply(  DiagonalMatrix(M15V), L  ):

H13 := 
+ DiagonalMatrix(M13V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M46V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M34V)  )
+ Multiply(  DiagonalMatrix(M16V), L  ):

H22 := 
+ DiagonalMatrix(M22V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M55V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M25V)  )
+ Multiply(  DiagonalMatrix(M25V), L  ):

H23 := 
+ DiagonalMatrix(M23V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M56V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M35V)  )
+ Multiply(  DiagonalMatrix(M26V), L  ):

H33 := 
+ DiagonalMatrix(M33V)
+ Multiply(Multiply( Transpose(L) , DiagonalMatrix(M66V) ),L)
+ Multiply( Transpose(L) , DiagonalMatrix(M36V)  )
+ Multiply(  DiagonalMatrix(M36V), L  ):

H21 := Transpose(H12):
H31 := Transpose(H13):
H32 := Transpose(H23):

#(6) in additional material 
M := (1/(N+1))*
Concatenate(1,
Concatenate(1,
Concatenate(2,Concatenate(2, H11,H12),H13),
Concatenate(2,Concatenate(2, H21,H22),H23)),
Concatenate(2,Concatenate(2, H31,H32),H33));

#(1) in additional material
ehat_new := g - 2*Multiply( Transpose(U),C) + Multiply( Multiply( Transpose(C), M ),C):

#show (61)=(1) in additional material 
simplify(ehat-ehat_new);










