
Use("hami");

/* TrySolution applies a Hamiltonian to a function, and tries
 * to figure out if it is a constant factor times the function.
 */
TrySolution(dimension,potential,function,particles,masses):=
[
  Local(tl,tm);
  tl:=Hamiltonian(dimension,particles,masses,potential)function;
  PrettyForm(function);
  PrettyForm(tl);
  tm:=Extract(tl,function);
  PrettyForm(tm);
  Write(IsFreeOf(Flatten(particles,"List"),tm));
  NewLine();
];

/* TrySolution2 does the same as TrySolution, only using a taylor
 * series expansion.
 */
TrySolution2(dimension,potential,fff,particles,masses):=
[
  Local(tl,tm);
  tl:=Hamiltonian(dimension,particles,masses,potential)fff;
  PrettyForm(fff);
  PrettyForm(tl);

  Local(varlist,f1,f2);
  varlist:=VarList(tl,fff);
  f1:=Apply("UniTaylor",{tl,r1,0,2});
  f1:=NormalForm(MakeUni(f1,varlist));
  PrettyForm(f1);
  f2:=Apply("UniTaylor",{fff,r1,0,5});
  f2:=NormalForm(MakeUni(f2,varlist));
  PrettyForm(f2);

/*
  tm:=Extract(fff);
  PrettyForm(tm);
  */
  Write(IsFreeOf(Flatten(particles,"List"),tm));
  NewLine();
];

/*
Vectors(1,{r});
TrySolution2(1,1/r1,Taylor(r1,0,5)r1*Exp(-r1/2),{r},{m});
*/


/*
Vectors(3,{r,k});
TrySolution(3,0,Sin(k . r),{r},{m});
*/
Vectors(1,{r,k});
TrySolution(1,0,Cos(k . r),{r},{m});


/*
Vectors(3,{r,k});
TrySolution(3,0,Exp(I*(k . r)),{r},{m});
*/

/*
[
  Local(l,m);
  function:=Sin(k . r);
  l:=Hamiltonian(3,{r},{m},0)function;
  PrettyForm(function);
  PrettyForm(l);
  m:=Extract(l,function);
  PrettyForm(m);
  Write(IsFreeOf(r,m));
  NewLine();
];
[
  Local(l,m);
  function:=Sin(a*r[1]);
  l:=Hamiltonian(3,{r},{m},0)function;
  PrettyForm(function);
  PrettyForm(l);
  m:=Extract(l,function);
  PrettyForm(m);
];
*/

