123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218(* This file is free software, part of dolmen. See file "LICENSE" for more information *)(* Main Typedef *)(* ************************************************************************* *)type'at=..constraint'a=<..>(* Extensible variant type for builtin operations.
Parameterized over the type of variables, constants, and terms. *)(* Base builtins *)(* ************************************************************************* *)type_t+=Basetype_t+=|Wildcard:{ty:'tyoptionref;}-><ty:'ty;..>ttype_t+=Kind|Type|Proptype_t+=|Unit|Univtype_t+=Coerciontype_t+=|In_intervalofbool*bool|Maps_to(* Boolean builtins *)(* ************************************************************************* *)type_t+=|True|False|Equal|Distinct|Neg|And|Or|Nand|Nor|Xor|Imply|Implied|Equivtype_t+=Itetype_t+=Pi|Sigma(* Algebraic datatype builtins *)(* ************************************************************************* *)type_t+=|Tester:{adt:'ty_cst;case:int;cstr:'term_cst;}-><ty_cst:'ty_cst;term_cst:'term_cst;..>t|Constructor:{adt:'ty_cst;case:int;}-><ty_cst:'ty_cst;..>t|Destructor:{adt:'ty_cst;case:int;cstr:'term_cst;field:int;}-><ty_cst:'ty_cst;term_cst:'term_cst;..>t(* Arithmetic builtins *)(* ************************************************************************* *)typerat_real=[`Rat|`Real]typeint_rat_real=[`Int|`Rat|`Real]type_t+=|Int|Integerofstring|Rat|Rationalofstring|Real|Decimalofstring|Ltofint_rat_real|Leqofint_rat_real|Gtofint_rat_real|Geqofint_rat_real|Minusofint_rat_real|Addofint_rat_real|Subofint_rat_real|Mulofint_rat_real|Powofint_rat_real|Divofrat_real|Div_eofint_rat_real|Modulo_eofint_rat_real|Div_tofint_rat_real|Modulo_tofint_rat_real|Div_fofint_rat_real|Modulo_fofint_rat_real|Abs|Divisible|Is_intofint_rat_real|Is_ratofint_rat_real|Floorofint_rat_real|Floor_to_intofrat_real|Ceilingofint_rat_real|Truncateofint_rat_real|Roundofint_rat_real(* arrays *)type_t+=|Array|Const|Store|Select(* Bitvectors *)type_t+=|Bitvofint|Bitvecofstring|Bitv_concatof{n:int;m:int}|Bitv_extractof{n:int;i:int;j:int}|Bitv_repeatof{n:int;k:int}|Bitv_zero_extendof{n:int;k:int}|Bitv_sign_extendof{n:int;k:int}|Bitv_rotate_rightof{n:int;i:int}|Bitv_rotate_leftof{n:int;i:int}|Bitv_notofint|Bitv_andofint|Bitv_orofint|Bitv_nandofint|Bitv_norofint|Bitv_xorofint|Bitv_xnorofint|Bitv_compofint|Bitv_negofint|Bitv_addofint|Bitv_subofint|Bitv_mulofint|Bitv_udivofint|Bitv_uremofint|Bitv_sdivofint|Bitv_sremofint|Bitv_smodofint|Bitv_shlofint|Bitv_lshrofint|Bitv_ashrofint|Bitv_ultofint|Bitv_uleofint|Bitv_ugtofint|Bitv_ugeofint|Bitv_sltofint|Bitv_sleofint|Bitv_sgtofint|Bitv_sgeofint(* Floats *)type_t+=|Floatofint*int|RoundingMode|Fpofint*int|RoundNearestTiesToEven|RoundNearestTiesToAway|RoundTowardPositive|RoundTowardNegative|RoundTowardZero|Plus_infinityofint*int|Minus_infinityofint*int|Plus_zeroofint*int|Minus_zeroofint*int|NaNofint*int|Fp_absofint*int|Fp_negofint*int|Fp_addofint*int|Fp_subofint*int|Fp_mulofint*int|Fp_divofint*int|Fp_fmaofint*int|Fp_sqrtofint*int|Fp_remofint*int|Fp_roundToIntegralofint*int|Fp_minofint*int|Fp_maxofint*int|Fp_leqofint*int|Fp_ltofint*int|Fp_geqofint*int|Fp_gtofint*int|Fp_eqofint*int|Fp_isNormalofint*int|Fp_isSubnormalofint*int|Fp_isZeroofint*int|Fp_isInfiniteofint*int|Fp_isNaNofint*int|Fp_isNegativeofint*int|Fp_isPositiveofint*int|Ieee_format_to_fpofint*int|Fp_to_fpofint*int*int*int|Real_to_fpofint*int|Sbv_to_fpofint*int*int|Ubv_to_fpofint*int*int|To_ubvofint*int*int|To_sbvofint*int*int|To_realofint*int(* Strings *)type_t+=|String|Strofstring|Str_length|Str_at|Str_to_code|Str_of_code|Str_is_digit|Str_to_int|Str_of_int|Str_concat|Str_sub|Str_index_of|Str_replace|Str_replace_all|Str_replace_re|Str_replace_re_all|Str_is_prefix|Str_is_suffix|Str_contains|Str_lexicographic_strict|Str_lexicographic_large|Str_in_re(* String Regular languages *)type_t+=|String_RegLan|Re_empty|Re_all|Re_allchar|Re_of_string|Re_range|Re_concat|Re_union|Re_inter|Re_star|Re_cross|Re_complement|Re_diff|Re_option|Re_powerofint|Re_loopofint*int