12345678910111213141516171819202122232425262728293031323334353637383940414243444546(************************************************************************)(* * The Rocq Prover / The Rocq Development Team *)(* v * Copyright INRIA, CNRS and contributors *)(* <O___,, * (see version control and CREDITS file for authors & dates) *)(* \VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)openUtiltype('term,'quality,'univ)t='termWriteOnceArray.t*'qualityWriteOnceArray.t*'univWriteOnceArray.tletmake(m,n,p)=(WriteOnceArray.makem,WriteOnceArray.maken,WriteOnceArray.makep)letadd_termittqus:('t,'q,'u)t=on_pi1(WriteOnceArray.add(i-1)t)tqusletmaybe_add_termiottqus:('t,'q,'u)t=Option.fold_right(funi->add_termit)iotqusletadd_qualityiqtqus:('t,'q,'u)t=on_pi2(WriteOnceArray.addiq)tqusletmaybe_add_qualityioqtqus:('t,'q,'u)t=Option.fold_right(funi->add_qualityiq)iotqusletadd_univiutqus:('t,'q,'u)t=on_pi3(WriteOnceArray.addiu)tqusletmaybe_add_univioutqus:('t,'q,'u)t=Option.fold_right(funi->add_univiu)iotqusletto_arrays(ts,qs,us:_t)=(WriteOnceArray.to_arrayts,WriteOnceArray.to_arrayqs,WriteOnceArray.to_arrayus)letpr_nodup_arrayelemv=leta=WriteOnceArray.Internal.unsafe_to_arrayvinPp.(str"[|"++prvect_with_seppr_semicolon(functionNone->str"\u{2205}"(* Empty set *)|Somee->eleme)a++str"|]")letprprtprqpru(ts,qas,us)=Pp.(pr_nodup_arrayprtts++pr_comma()++pr_nodup_arrayprqqas++pr_comma()++pr_nodup_arraypruus)