12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364moduleO=Order_indirtypet={a:O.t;b:O.t;}letforget{a;b}=O.forgeta;O.forgetbletis_validt=O.is_validt.aletroot()=leta=O.root()inletb=O.afterain{a;b}letaftert=letb=O.aftert.binleta=O.beforebin{a;b}letbeforet=leta=O.beforet.ainletb=O.afterain{a;b}letinsidet=leta=O.aftert.ainletb=O.beforet.bin{a;b}letoutsidet=leta=O.beforet.ainletb=O.aftert.bin{a;b}letsame_ordert1t2=O.same_ordert1.at2.atyperel=|Before|Inside|Equal|Outside|Afterletcomparet1t2=ift1==t2thenEqualelseletca=O.comparet1.at2.a<=0inletcb=O.comparet1.bt2.b<=0inmatchca,cbwith|true,true->Before|true,false->Outside|false,true->Inside|false,false->Afterletcardinalt=O.cardinalt.a/2letunsafe_checktmsg=O.unsafe_checkt.a("(Order_interval a) "^msg);O.unsafe_checkt.b("(Order_interval b) "^msg);