
facdupsqr == (#fac app _1+#dup app #sqr app it) 
	where (	fac == (((#it<=0)->1;#it*#fac app #it-1)<-fac;it;) Y
			dup == id+id
			sqr == id*id  )
					
					
((#fac app id ee #dup app it) 
	where (	fac == ((it<=0)->1;(#mul°#tb) app it ee (#fac°#tb) app #tb ee (#sub°#tb) app it)<-tb;_it;
			dup == id+id
			mul == *
			sub == id-1  ))°3


facwhere == ((*) objdip) mul ((id-1) dip) sub ((id+id) dip) dup ((pop<=0)->('facwhere obj 1);id mul fac ° sub ° id) fac
facdup == 'facwhere obj 3
fac == fac fn fail
sub == sub fn fail
mul == mul op fail
dup == dup fn fail
fac °dup ° facdup


| == (pop°term) app (top°term) app arg

: == ((body°top°term) iget (top°pop°term)) app arg

facwhere == * [mul] * mul (id-1) sub (id+id) dup ((id<=0)->1;id (facwhere:[mul]) (facwhere:fac) ° (facwhere:sub) ° id) fac
(facwhere:fac)°5
(facwhere:fac) ° (facwhere:dup) ° 3


facwhere == .. (    [mul] == *
				    mul == *
					sub == id-1
					dup == id+id
					fac == (id<=0)->1;id (facwhere:[mul]) (facwhere:fac) ° (facwhere:sub) ° id  )

