COLIBRI2(1)

πŸ“¦ version 0.6, in nixpkgs unstable

πŸ’– NAME πŸ’–

Colibri2 β€” that's the whole name bestie, that's the program. It's the star of this manual page, and honestly? Main character energy. πŸ‘‘


✨ SYNOPSIS ✨

Colibri2 [OPTION]… [FILE]

okay so literally the shape of it is: the command, then some options if you feel like it, then maybe a file. That's the vibe check. πŸ’…


Right at the top of the page, before we even hit the real sections, there's these three little options just vibing on their own β€” no heading, no nothing, they just showed up. Here they are, no cap:

  • --lra-threshold-max-repeat=INT (absent=50) β€” the max number of times the LRA interval domain can get modified between decisions. Fifty if you don't say otherwise πŸŽ€
  • --linearize β€” lets simplex add linear approximations in some cases
  • --egraph-merging-rounds β€” allows more than one merging round between two congruence classes (the original says "more that one", and I'm just telling you it means more than one, okay 😭)

🌸 ARGUMENTS 🌸

  • FILE (absent=<stdin>) β€” this is your input problem file. And here's the tea: if you don't give it a file, Colibri2 slides into interactive mode and reads from stdin instead. So it's never lonely, it's just waiting for you to type at it 🫢

πŸ’œ OPTIONS πŸ’œ

These are the common options for the colibrics binary. There are. So many. Grab a snack. πŸ“

  • ----no-int-to-bv β€” yes that is four dashes at the front, don't come for me, that's literally what's written. It switches the integer union and congruence domain over to the BitVector domain.
  • --array-blast-rule β€” use the array blast rule when it's suitable
  • --array-def-values β€” use inference rules for default values
  • --array-ext-cho β€” use "Choice" when applying unrestricted extensionality
  • --array-ext-comb β€” extended combinators
  • --array-no-res-aup β€” don't restrict the array's ⇑ (select over store) rule
  • --array-no-res-ext β€” don't restrict the array extensionality rule
  • --array-nseqs-no-ppg β€” use the NSeq solver for the theory of Arrays, with no systematic propagation
  • --array-use-inf-rules β€” use the old array decision procedure (retro icon behavior tbh)
  • -b, --backtrace β€” enables printing of backtraces.
  • --bv-use-bdd β€” (no description on the page, it's mysterious like that ✨)
  • --check-headers=BOOL (absent=false) β€” if true, then the presence of headers gets checked in the input file (and errors get raised if they're not there).
  • --check-status=ENUM (absent=no) β€” check the answer using smtlib (:status) or colibri (:colibri2-status) information. The check differs with unknown: in the first case any answer is accepted, in the second case only unknown.
  • --color=BOOL (absent=true) β€” activate coloring of output 🌈
  • --cut-fix-model=INT (absent=1000) β€” stop FixModel after the given number of conflicts (and you lose the possibility to answer unsat, so, consequences πŸ’€)
  • --debug β€” print the parsed dolmen statement (after expansion of includes)
  • --debug-dotgui-only=VAL (absent COLIBRI2_DOTGUI_ONLY env) β€” display only the given node in the dotgui output --debug-flag dotgui
  • --debug-flag=VAL β€” debug flags! The --debug-flag=foo option, or more generally --debug-flag=foo:level, activates flag foo for the given level (empty means info). Level is case-insensitive and can be a full word or a single-letter abbreviation among (d)ebug, (i)nfo (n)otice, (w)arn(ing), (e)rror and (q)uiet. Levels display all the messages of that level or higher β€” for example the warning level prints both warning and error messages, but not info or debug messages. The value of all flags is set to notice unless specified. ikyk yk 🧚
  • --dec-at-operators β€” instead of deciding a boolean literal, decide at operators whose value can't be propagated to arguments (e.g. a true disjunction)
  • --def-max-delayed-decision-level=INT (absent=5)
  • --def-max-immediate-decision-level=INT (absent=0)
  • --def-max-unfolding-level=INT (absent=15)
  • --demon-no-avoid-retriggering
  • --dont-print-result β€” check the answer using smtlib (:status) or colibri (:colibri2-status) information. The check differs with unknown: in the first case any answer is accepted, in the second case only unknown. (yes, it's word-for-word the same description as --check-status, that's not me being lazy, that's just what the page says πŸ™ˆ)
  • --eager-decision β€” do decisions with eager
  • --first-restart=INT (absent=0) β€” step of the first restart. Only one is done currently.
  • --fixed-choice-order
  • --float-threshold-max-repeat=INT (absent=5000) β€” number of maximum modification of a domain between decisions
  • -g, --gc β€” print statistics about the gc upon exiting
  • --get-model-no-function β€” skip the model of functions symbol and polymorphic constants during get-model
  • --get-model-safe β€” skip the model of values that are not sure to be correctly printed (implies get-model-no-function)
  • --header-lang-version=VAL β€” set the only allowed language version for headers. If not set, all conforming version numbers are allowed.
  • --header-licenses=[,…] β€” set the allowed set of licenses in the headers. An empty list means allow everything. πŸŽ€
  • -i INPUT, --lang=INPUT, --input=INPUT β€” set the input language to INPUT (one of ae, dimacs, iCNF, smt2, smt2.6, psmt2, tptp, tptp-6.3.0 or zf). Pick your fighter πŸ’…
  • --learning (absent COLIBRI2_LEARNING env) β€” activate learning.
  • --limit-last-effort=VALUE β€” deactivate last effort after the given time ( 90%steps, 90%time, 200steps, 200s )
  • --lra-dl β€” use the difference logic engine
  • --lra-dl-no-poly β€” don't use polynomes when building the difference logic graph
  • --lra-dl-no-rm β€” when the LRA representative changes [old_repr = repr + delta], add a constraint stating [old_repr - repr = delta] instead of removing [old_repr] and transferring its constraints to [repr].
  • --lra-fourier β€” use FourierMotskin engine instead of Simplex engine
  • --lra-incr-dl β€” use the incremental version of the difference logic engine. Sets --lra-dl too if it's not set.
  • --lra-keep-relations-in-patterns
  • --lra-new-intr-dom β€” use the new interval domain
  • --lra-pivot-intr-upd β€” use pivot to update intervals for all elements of pivot class whenever the interval domain of one element changes
  • --lra-relop-norm-to-le β€” normalize all relational operators (<, ≀, >, β‰₯) to ≀ (glow-up for inequality signs honestly ✨)
  • -m ENUM, --mode=ENUM β€” set the input mode. The full mode parses the entire file before iterating over its contents, whereas the incremental mode processes each declaration before parsing the next one. Default is incremental mode.
  • --max-steps=INT β€” maximum number of steps.
  • --max-warn=INT (absent=4611686018427387903) β€” maximum number of warnings to display (excess warnings get counted, and a count of silenced warnings gets reported at the end). That default number is giving "I will never run out of patience" 😭
  • --negate-goal β€” negate assertions marked with (! .. :colibri2 goal).
  • --no-dec β€” make no decisions, only propagation and model search (fixmodel)
  • --no-eager-instantiation β€” don't do eager instantiation
  • --no-fix-model β€” stop at the start of FixModel
  • --no-fm-simplex β€” don't use the simplex for simulating fourier-motskin
  • --no-nseq β€” do not support the NSeq theory (but possibly use its solver for Arrays)
  • --no-quant-regroup-forall-with-implies
  • --no-quant-remove-unused-variables
  • --no-simplex β€” don't use the simplex at all
  • --nseq-base β€” use the Base theory of N-Sequences
  • --nseq-ext β€” use the Ext theory of N-Sequences, takes over nseq-base
  • --nseq-no-dist-first β€” when checking equalities, do not start with distinct NSeqs. Do it for all.
  • --nseq-no-get-intro β€” don't introduce nseq.get terms to detect equalities or differences between n-sequences
  • --print-success β€” activate printing for success. πŸŽ‰
  • --quant-always-add-skolem β€” add quantifier skolemization (exists) even if the truth value is not known
  • --quant-old β€” use quant old heuristic
  • --quant-user-as-rr β€” user pattern are considered as rewrite rules (immediately applied)
  • --quantifier-add-def-from-axiom β€” handle axioms that look like definitions as definitions
  • --quantifier-and-cc-on-boolean-operators β€” match and apply congruence closure on : and, or, xor, imply and not
  • --quantifier-skip-forall β€” handle existential quantification but skip universal quantification
  • --remove-coercion-in-pattern β€” remove coercion in patterns
  • -s SIZE, --size=SIZE (absent=-1) β€” stop the program if it tries to use more than the SIZE memory space. Accepts the usual suffixes for sizes: k, M, G, T. Without a suffix, it defaults to a size in octet.
  • --show-steps β€” show the number of steps after solving.
  • --simplex-improve-distance β€” use the simplex for refining distance between variables
  • --smt-trace=VAL β€” create a partial trace in the given filename.
  • --smt-trace-mode=VAL β€” change how the partial traces are generated.
  • --somewhat-useful-bias=INT (absent=0) β€” deactivated if bias <= 0 (the name is sending me, "somewhat useful" 😭)
  • --sort-last-effort
  • -t TIME, --time=TIME (absent=-1s) β€” stop the program after a time lapse of TIME. Accepts the usual suffixes for durations: s, m, h, d. Without a suffix, it defaults to a time in seconds.
  • --trace=VAL β€” output tef json trace in the given file
  • --try-disprove-forall-using-domain β€” try to disprove forall by splitting the domain of the variables
  • --type=BOOL (absent=true) β€” decide whether to type-check input expressions. If false, only parsing is done.

πŸŽ€ GC OPTIONS πŸŽ€

Options to fine-tune the gc. Only experts should use these. Like, genuinely. This is the "you know who you are" section. 🫢
  • --gc-a=INT (absent=0) β€” set Gc.allocation policy
  • --gc-i=INT (absent=100) β€” set Gc.major_heap_increment
  • --gc-O=INT (absent=500) β€” set Gc.max_overhead
  • --gc-o=INT (absent=200) β€” set Gc.space_overhead
  • --gc-s=INT (absent=1000000) β€” set Gc.minor_heap_size

πŸ¦‹ COMMON OPTIONS πŸ¦‹

  • --help[=FMT] (default=auto) β€” show this help in format FMT. The value FMT must be one of auto, pager, groff or plain. With auto, the format is pager or plain whenever the TERM env var is dumb or undefined.
  • --version β€” show version information. ⭐

πŸ‘‘ EXIT STATUS πŸ‘‘

Colibri2 exits with:

  1. 0 β€” on success.
  2. 123 β€” on indiscriminate errors reported on standard error.
  3. 124 β€” on command line parsing errors.
  4. 125 β€” on unexpected internal errors (bugs).

Numbers to live by. Memorize them. Periodt. πŸ’…


🌈 ENVIRONMENT 🌈

These environment variables affect the execution of Colibri2:

  • COLIBRI2_DOTGUI_ONLY β€” see option --debug-dotgui-only.
  • COLIBRI2_LEARNING β€” activate learning.

πŸ’€ BUGS πŸ’€

You can report bugs at https://git.frama-c.com/ β€” go off, tell them everything 🫢


πŸ’– AUTHORS πŸ’–

Francois Bobot <francois.bobot@cea.fr> β€” icon, legend, the moment. πŸ‘‘


okay that's the whole page bestie, we ate and left no crumbs πŸ“βœ¨ β€” this was Colibri2 0.6, the COLIBRI2(1) manual, and yes the version number and the manual name are literally the last things on the page so I'm putting them in the sign-off like a good hostess. bye bye, have fun not crashing πŸ’œπŸ¦‹πŸŽ€

πŸ“¦ where this page comes from