281 |
(*Apply normalize to each term in product list |
(*Apply normalize to each term in product list |
282 |
or Apply normalize to tail of each list*) |
or Apply normalize to tail of each list*) |
283 |
fun normalize (Ein.EIN{params, index, body}) = let |
fun normalize (Ein.EIN{params, index, body}) = let |
284 |
val f= print"IN NORMALIZE" |
(* val _ = print(String.concat["\n IN NORMALIZE@", P.printbody(body),"@\n"])*) |
285 |
val changed = ref false |
val changed = ref false |
286 |
val sumIndex=ref [] |
val sumIndex=ref [] |
287 |
|
|
288 |
fun rewriteBody body = (case body |
fun rewriteBody body = |
289 |
|
(case body |
290 |
of E.Const _=> body |
of E.Const _=> body |
291 |
| E.Tensor _ =>body |
| E.Tensor _ =>body |
292 |
| E.Field _=> body |
| E.Field _=> body |
380 |
end |
end |
381 |
| E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es)=>let |
| E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es)=>let |
382 |
val ref x=sumIndex |
val ref x=sumIndex |
383 |
val y=print "in here, intial sum \n " |
|
384 |
|
|
385 |
val m= Kt x |
val m= Kt x |
386 |
|
|
387 |
val c'= [c1@c2]@x |
val c'= [c1@c2]@x |
388 |
val (i,s',e,rest)=epsToDels(c', E.Prod([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)) |
val (i,s',e,rest)=epsToDels(c', E.Prod([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)) |
|
val mmmm=print "\n changed to \n " |
|
389 |
val gsg=Kt s' |
val gsg=Kt s' |
390 |
|
|
391 |
val ui=print "\n POst getting index" |
|
392 |
in (case (i, e,rest) |
in (case (i, e,rest) |
393 |
of (1,[e1],_)=> (changed:=true;sumIndex:=s';let |
of (1,[e1],_)=> (changed:=true;sumIndex:=s';let |
394 |
val ss=List.nth(s',((length s')-2)) |
val ss=List.nth(s',((length s')-2)) |
461 |
| E.Sum(c, E.Prod(E.Const e::es))=>(changed:=true;E.Prod[E.Const e,E.Sum(c, E.Prod es)]) |
| E.Sum(c, E.Prod(E.Const e::es))=>(changed:=true;E.Prod[E.Const e,E.Sum(c, E.Prod es)]) |
462 |
| E.Sum(c, E.Prod(E.Value v::es))=>(changed:=true; E.Prod [E.Value v, E.Sum(c, E.Prod es)]) |
| E.Sum(c, E.Prod(E.Value v::es))=>(changed:=true; E.Prod [E.Value v, E.Sum(c, E.Prod es)]) |
463 |
| E.Sum(c, E.Prod(E.Tensor(id,[])::es))=> (changed:=true;E.Prod [E.Tensor(id,[]), E.Sum(c, E.Prod es)]) |
| E.Sum(c, E.Prod(E.Tensor(id,[])::es))=> (changed:=true;E.Prod [E.Tensor(id,[]), E.Sum(c, E.Prod es)]) |
464 |
|
|
465 |
|
| E.Sum(c,E.Prod e)=> let |
466 |
|
val e' =rewriteBody(E.Prod e) |
467 |
|
(*val _=print (String.concat["\n change \n",P.printbody(body ),"\n ==>\n",P.printbody(E.Sum(c,e')),"\n"])*) |
468 |
|
val b'= (case e' |
469 |
|
of E.Prod p=>let |
470 |
|
val (_,b)=mkProd p |
471 |
|
in b end |
472 |
|
|_=>e' |
473 |
|
(* end case*)) |
474 |
|
val _ =print(P.printbody( b')) |
475 |
|
in E.Sum(c,b') |
476 |
|
end |
477 |
| E.Sum(c,e)=>let |
| E.Sum(c,e)=>let |
478 |
val ggg=print "IN SUMM" |
|
479 |
val ref x=sumIndex |
val ref x=sumIndex |
480 |
val c'=[c]@x |
val c'=[c]@x |
481 |
val AA=print "\n Started" |
|
482 |
val A= Kt c' |
val A= Kt c' |
483 |
val e'=(sumIndex:=c';rewriteBody e) |
val e'=(sumIndex:=c';rewriteBody e) |
484 |
val ref s=sumIndex |
val ref s=sumIndex |
485 |
val CC=print "\n After call we got this" |
|
486 |
val C= Kt s |
val C= Kt s |
487 |
val z=hd(s) |
val z=hd(s) |
488 |
val BB=print "\n ENDED-HEAD" |
|
489 |
val B= Kt [z] |
val B= Kt [z] |
|
val DD=print "\n ENDED-TL" |
|
490 |
val D=Kt (tl(s)) |
val D=Kt (tl(s)) |
491 |
in (sumIndex:=tl(s);E.Sum(z, e')) end |
in (sumIndex:=tl(s);E.Sum(z, e')) end |
492 |
|
|
553 |
end |
end |
554 |
|
|
555 |
val (b,count) = loop(body,0) |
val (b,count) = loop(body,0) |
556 |
val g=print "out of normalize" |
val _ = print(String.concat["\n out of normalize \n",P.printbody(b),"\n Final CounterXX:",Int.toString(count),"\n\n"]) |
|
val j=(print "Final CounterXX:";print(Int.toString(count));print"\n\n\n") |
|
557 |
in |
in |
558 |
(Ein.EIN{params=params, index=index, body=b},count) |
(Ein.EIN{params=params, index=index, body=b},count) |
559 |
end |
end |