/permuteOrderMatrix { %% order perm puermuteOrderMatrix newOrder /arg2 set /arg1 set [/order /perm /newOrder /k ] pushVariables [ /order arg1 def /perm arg2 def ( Hi0 ) print order transpose /order set ( Hi1 ) print pstack order 1 copy /newOrder set pop 0 1 << perm length 1 sub >> { /k set newOrder << perm k get >> << order k get >> put } for newOrder transpose /newOrder set ] pop /arg1 newOrder def popVariables arg1 } def /elimination_order { %% [x-list d-list params] (x,y,z) elimination_order %% vars evars %% [x-list d-list params order] /arg2 set /arg1 set [/vars /evars /univ /order /perm /univ0 /compl] pushVariables /vars arg1 def /evars [arg2 to_records pop] def [ /univ vars 0 get reverse vars 1 get reverse join def << univ length 2 sub >> << evars length >> eliminationOrderTemplate /order set %%(Hello2 ) print pstack [[1]] order oplus [[1]] oplus /order set %%(Hello3 ) print pstack /univ0 [univ reverse aload pop pop] reverse def %% [e,x,y,h] --> [x,y,h] %%(Hello4 ) print pstack /compl [univ 0 get] evars join evars univ0 complement join def compl univ getPerm /perm set %%perm :: univ :: compl :: (Hello5 ) print pstack order :: perm :: order perm permuteOrderMatrix /order set (Hello6 ) print pstack vars [order] join /arg1 set ] pop popVariables arg1 } def [ (z0,z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12,z13,z14,z15,z16,z17,z18,z19,z20,z21,z22,z23,z24,z25,z26,z27,z28,z29) ring_of_differential_operators ( ) elimination_order 0] define_ring