#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void tertius_error_display(int a_number) {
  char *the_message;
  switch (a_number) {
  case 1:
    the_message = "Cannot open file.";
    break;
  case 2:
    the_message = "Unable to allocate memory.";
    break;
  case 3:
    the_message = "Error in parsing.";
    break;
  case 4:
    the_message = "More predicates than NBPREDS.";
    break;
  case 5:
    the_message = "More types than NBTYPES.";
    break;
  case 6:
    the_message = "A fact makes use of an undefined predicate.";
    break;
  case 7:
    the_message = "The maximum number of variables is lower than the arity of "
                  "individuals: the arity is used instead.";
    break;
  case 8:
    the_message = "No fact is supposed to be associated to individuals. They "
                  "are disregarded.";
    break;
  case 9:
    the_message =
        "The arguments are at least max_literals/max_variables, plus an "
        "optional stem for file names (otherwise the stem \"default\" is used) "
        "or the names of files containing predicate, facts, results, debugging "
        "information if verbose is used, and the starting clause if used.\nThe "
        "following options can be used before the arguments:\n-m and a number "
        "to change the max memory (default is 10 Mb)\n-e for a "
        "multi-dimensional estimate of the number of counter-examples "
        "(bi-dimensional by default)\n-n and a threshold for the percent of "
        "noise (0 by default)\n-ask to ask more memory to the user if needed "
        "(by default, tertius stops when the maximum memory is reached and "
        "give the current results if any)\n-u for explicit unification "
        "(unified variables are simply replaced by one of them by "
        "default)\n-[s|sr|S|SR] and the sampling ratio (no sampling by "
        "default)\n-breadth to use a breadth first search (best first search "
        "by default)\n-v verbose (the default is off)\n-nosubs to keep "
        "subsumed clauses (subsumed clauses are removed by default)\n-sat to "
        "consider satisfied clauses only (By default, clauses are given "
        "according to their confirmation only.)\n-b language bias: horn, class "
        "for rules predicting the first predicate only, pos_class for "
        "predicting only it as positive literal, horn_pos_class for both horn "
        "and pos_class options (no bias by default)\n-k and the number of "
        "results wanted (10 by default)\n-c and the confirmation threshold (10 "
        "best results are considered by default instead of setting a "
        "confirmation threshold.)\n-f and a threshold on the frequency (0 by "
        "default)\n-prolog use prolog, only available with appropriate files "
        "(the default is off)\n-[bg|pttp|ic] to use background knowledge to "
        "influence the expected value (bg: regular-resolution (prolog),pttp: "
        "linear-resolution (prolog technology theorem prover),ic: "
        "integrity-constraints)\n-i load partitions incrementaly, useful when "
        "the training set is too to be loaded in one go\n-struct to use "
        "structural properties\n-sc to start the search from a clause given in "
        "the appropriate file (usually stem.cla)\n-cbu to count instances in a "
        "bottom-up manner, generating substitutions incrementaly from examples "
        "instead of the default generate-then-test approach\n-avg with "
        "partionning, when each partition represents a separate dataset, the "
        "confirmations of partitions are averaged. Off by default: the cells "
        "of the contingency tables for each partition are added up into on "
        "global contingency table.-d an_attribute name, a number of intervals "
        "the attribute has to be discretised in, and a kind of discretisation "
        "(sdm: standard deviation centered on the mean, eqb: equal "
        "bins).\n-bayes naive/optimal language/individual/first and the name "
        "of the predicate used as the class for the naive or optimal Bayes "
        "classifier\n-cross and the number of partition to apply a "
        "cross-validation on the dataset\n-srand and an integer for "
        "initialising the random seed\n-eval to evaluate the clause{s} in the "
        ".cla file\n-w in the Bayesian classifier to write first-order "
        "features with new predicates in the head to a .fof file\n-t and a "
        "threshold to select the features modifying the default distribution "
        "of the classes more than the threshold\n-r INDIVIDUAL/LANGUAGE for a "
        "recursive approach based on the first-order (list, multiset and set) "
        "distributions (i.e. pure 1BC2) / on-the-fly propositionalisation "
        "(i.e. emulated 1BC) in Bayesian classification\n-roc to generate roc "
        "curve\n-o a_number_of_folds to find the best threshold using an "
        "internal cross-validation according to roc curve for Bayesian "
        "classification\n-h to see this message";
    break;
  case 10:
    the_message = "A variable term ref has not been initialised.";
    break;
  case 11:
    the_message = "More substitutions than LONG_MAX.";
    break;
  case 12:
    the_message = "Error in substituted_term_ref.";
    break;
  case 13:
    the_message = "For each predicate, you must defined whether the closed "
                  "world assumption is used (cwa) or negative facts are "
                  "explicitly given (explicit).";
    break;
  case 14:
    the_message = "k_best should not be zero!";
    break;
  case 15:
    the_message = "Stem longer than STEMLENGTH.";
    break;
  case 16:
    the_message = "Error in Prolog interface.";
    break;
  case 17:
    the_message =
        "The clause makes use of the same variable for several types.";
    break;
  case 18:
    the_message = "The clause makes use of an undefined predicate.";
    break;
  case 19:
    the_message = "The clause makes use of more variables than the maximum "
                  "number of variables allowed in the search.";
  case 20:
    the_message = "The clause makes use of more literals than the maximum "
                  "number of literals allowed in the search.";
    break;
  case 21:
    the_message = "A type is sometimes groundable, sometimes not !";
    break;
  case 22:
    the_message = "The clause makes use of a new set of parameters.";
    break;
  case 23:
    the_message =
        "The target predicate makes use of more variables than the individual.";
    break;
  case 24:
    the_message = "The first literal of a property should be the individual!";
    break;
  case 25:
    the_message = "No properties can be generated from the current settings!";
    break;
  case 26:
    the_message = "The number used in the cross-validation must be between 1 "
                  "and the number of partitions!";
    break;
  case 27:
    the_message = "The target predicate doesn't match the individual!";
    break;
  case 28:
    the_message = "Structural predicates must be of arity 2!";
    break;
  case 29:
    the_message =
        "-bayes option must be followed by 'optimal' or 'naive', whether the "
        "decomposition is based on the 'individual', the 'language', or "
        "'first'-order, then the name of the target predicate!";
    break;
  case 30:
    the_message = "-cbu option cannot be used yet with -u option: switching to "
                  "an implicit representation of unification.";
    break;
  case 31:
    the_message = "Counting in a database only works with the normal expected "
                  "value and an implicit representation of unification.";
    break;
  case 32:
    the_message =
        "Counting in a database only works with an individual predicate.";
    break;
  case 33:
    the_message =
        "The number of intervals of a discrete type must be greater than 0.";
    break;
  case 34:
    the_message =
        "The kind of structural predicate (bv,li,...) must be specified.";
    break;
  case 38:
    the_message = "This classifier can only deal with individuals defined by a "
                  "single type.";
    break;
  case 39:
    the_message = "No value found for property of an individual.";
    break;
  case 40:
    the_message = "No related individual found for a structural predicate "
                  "given an individual.";
    break;
  case 41:
    the_message = "A structural predicate cannot have parameters.";
    break;
  case 42:
    the_message = "Bit-Vector (bv) distribution is not available.";
    break;
  case 43:
    the_message = "New context during classification.";
    break;
  case 44:
    the_message = "Wrong name for the target predicate.";
    break;
  default:
    the_message = "Error is not defined.";
    break;
  }
  fprintf(stderr, the_message);
}


x86 assembly (clang, -O0):
<tertius_error_display>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x2b,%eax
ja     13cf <tertius_error_display+0x2bf>
mov    -0x18(%rbp),%rax
lea    0xec5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xf65(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xf67(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xf72(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xf74(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xf82(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xf8b(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xfa7(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0xffa(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1035(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1dfd(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1e1b(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1e2d(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1e3c(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1eb6(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1ec1(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1ece(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1ed9(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1f06(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1f26(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0x1f7e(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1fcf(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x1fef(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2010(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2046(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2070(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x209a(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x20e2(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2105(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x211f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x21c8(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x221f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x227f(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x22af(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x22e2(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2312(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x234b(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x2369(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x23a5(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x23c4(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x23e3(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x23f6(%rip),%rax
mov    %rax,-0x10(%rbp)
jmp    13da <tertius_error_display+0x2ca>
lea    0x240b(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    0x3bff(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rsi
call   1030 <fprintf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tertius_error_display>:
add    $0xffffffff,%edi
cmp    $0x2b,%edi
ja     112b <tertius_error_display+0x1b>
movslq %edi,%rax
lea    0x25c2(%rip),%rcx
movslq (%rcx,%rax,4),%rsi
add    %rcx,%rsi
jmp    1132 <tertius_error_display+0x22>
lea    0x259c(%rip),%rsi
mov    0x3ea7(%rip),%rax
mov    (%rax),%edi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@.str = [18 x i8] c"Cannot open file.\00"
@.str.1 = [27 x i8] c"Unable to allocate memory.\00"
@.str.2 = [18 x i8] c"Error in parsing.\00"
@.str.3 = [30 x i8] c"More predicates than NBPREDS.\00"
@.str.4 = [25 x i8] c"More types than NBTYPES.\00"
@.str.5 = [44 x i8] c"A fact makes use of an undefined predicate.\00"
@.str.6 = [99 x i8] c"The maximum number of variables is lower than the arity of individuals: the arity is used instead.\00"
@.str.7 = [75 x i8] c"No fact is supposed to be associated to individuals. They are disregarded.\00"
@.str.8 = [3544 x i8] c"The arguments are at least max_literals/max_variables, plus an optional stem for file names (otherwise the stem \22default\22 is used) or the names of files containing predicate, facts, results, debugging information if verbose is used, and the starting clause if used.\0AThe following options can be used before the arguments:\0A-m and a number to change the max memory (default is 10 Mb)\0A-e for a multi-dimensional estimate of the number of counter-examples (bi-dimensional by default)\0A-n and a threshold for the percent of noise (0 by default)\0A-ask to ask more memory to the user if needed (by default, tertius stops when the maximum memory is reached and give the current results if any)\0A-u for explicit unification (unified variables are simply replaced by one of them by default)\0A-[s|sr|S|SR] and the sampling ratio (no sampling by default)\0A-breadth to use a breadth first search (best first search by default)\0A-v verbose (the default is off)\0A-nosubs to keep subsumed clauses (subsumed clauses are removed by default)\0A-sat to consider satisfied clauses only (By default, clauses are given according to their confirmation only.)\0A-b language bias: horn, class for rules predicting the first predicate only, pos_class for predicting only it as positive literal, horn_pos_class for both horn and pos_class options (no bias by default)\0A-k and the number of results wanted (10 by default)\0A-c and the confirmation threshold (10 best results are considered by default instead of setting a confirmation threshold.)\0A-f and a threshold on the frequency (0 by default)\0A-prolog use prolog, only available with appropriate files (the default is off)\0A-[bg|pttp|ic] to use background knowledge to influence the expected value (bg: regular-resolution (prolog),pttp: linear-resolution (prolog technology theorem prover),ic: integrity-constraints)\0A-i load partitions incrementaly, useful when the training set is too to be loaded in one go\0A-struct to use structural properties\0A-sc to start the search from a clause given in the appropriate file (usually stem.cla)\0A-cbu to count instances in a bottom-up manner, generating substitutions incrementaly from examples instead of the default generate-then-test approach\0A-avg with partionning, when each partition represents a separate dataset, the confirmations of partitions are averaged. Off by default: the cells of the contingency tables for each partition are added up into on global contingency table.-d an_attribute name, a number of intervals the attribute has to be discretised in, and a kind of discretisation (sdm: standard deviation centered on the mean, eqb: equal bins).\0A-bayes naive/optimal language/individual/first and the name of the predicate used as the class for the naive or optimal Bayes classifier\0A-cross and the number of partition to apply a cross-validation on the dataset\0A-srand and an integer for initialising the random seed\0A-eval to evaluate the clause{s} in the .cla file\0A-w in the Bayesian classifier to write first-order features with new predicates in the head to a .fof file\0A-t and a threshold to select the features modifying the default distribution of the classes more than the threshold\0A-r INDIVIDUAL/LANGUAGE for a recursive approach based on the first-order (list, multiset and set) distributions (i.e. pure 1BC2) / on-the-fly propositionalisation (i.e. emulated 1BC) in Bayesian classification\0A-roc to generate roc curve\0A-o a_number_of_folds to find the best threshold using an internal cross-validation according to roc curve for Bayesian classification\0A-h to see this message\00"
@.str.9 = [46 x i8] c"A variable term ref has not been initialised.\00"
@.str.10 = [34 x i8] c"More substitutions than LONG_MAX.\00"
@.str.11 = [31 x i8] c"Error in substituted_term_ref.\00"
@.str.12 = [138 x i8] c"For each predicate, you must defined whether the closed world assumption is used (cwa) or negative facts are explicitly given (explicit).\00"
@.str.13 = [27 x i8] c"k_best should not be zero!\00"
@.str.14 = [29 x i8] c"Stem longer than STEMLENGTH.\00"
@.str.15 = [27 x i8] c"Error in Prolog interface.\00"
@.str.16 = [61 x i8] c"The clause makes use of the same variable for several types.\00"
@.str.17 = [48 x i8] c"The clause makes use of an undefined predicate.\00"
@.str.18 = [99 x i8] c"The clause makes use of more variables than the maximum number of variables allowed in the search.\00"
@.str.19 = [97 x i8] c"The clause makes use of more literals than the maximum number of literals allowed in the search.\00"
@.str.20 = [48 x i8] c"A type is sometimes groundable, sometimes not !\00"
@.str.21 = [49 x i8] c"The clause makes use of a new set of parameters.\00"
@.str.22 = [70 x i8] c"The target predicate makes use of more variables than the individual.\00"
@.str.23 = [58 x i8] c"The first literal of a property should be the individual!\00"
@.str.24 = [58 x i8] c"No properties can be generated from the current settings!\00"
@.str.25 = [88 x i8] c"The number used in the cross-validation must be between 1 and the number of partitions!\00"
@.str.26 = [51 x i8] c"The target predicate doesn't match the individual!\00"
@.str.27 = [42 x i8] c"Structural predicates must be of arity 2!\00"
@.str.28 = [185 x i8] c"-bayes option must be followed by 'optimal' or 'naive', whether the decomposition is based on the 'individual', the 'language', or 'first'-order, then the name of the target predicate!\00"
@.str.29 = [103 x i8] c"-cbu option cannot be used yet with -u option: switching to an implicit representation of unification.\00"
@.str.30 = [112 x i8] c"Counting in a database only works with the normal expected value and an implicit representation of unification.\00"
@.str.31 = [64 x i8] c"Counting in a database only works with an individual predicate.\00"
@.str.32 = [67 x i8] c"The number of intervals of a discrete type must be greater than 0.\00"
@.str.33 = [64 x i8] c"The kind of structural predicate (bv,li,...) must be specified.\00"
@.str.34 = [73 x i8] c"This classifier can only deal with individuals defined by a single type.\00"
@.str.35 = [46 x i8] c"No value found for property of an individual.\00"
@.str.36 = [76 x i8] c"No related individual found for a structural predicate given an individual.\00"
@.str.37 = [47 x i8] c"A structural predicate cannot have parameters.\00"
@.str.38 = [47 x i8] c"Bit-Vector (bv) distribution is not available.\00"
@.str.39 = [35 x i8] c"New context during classification.\00"
@.str.40 = [37 x i8] c"Wrong name for the target predicate.\00"
@.str.41 = [22 x i8] c"Error is not defined.\00"
@stderr = global i32 0
define void @tertius_error_display(i32 %0) {
%2 = alloca i32
%3 = alloca i8*
store i32 %0, i32* %2
%4 = load i32, i32* %2
switch i32 %4, label %46 [
i32 1, label %5
i32 2, label %6
i32 3, label %7
i32 4, label %8
i32 5, label %9
i32 6, label %10
i32 7, label %11
i32 8, label %12
i32 9, label %13
i32 10, label %14
i32 11, label %15
i32 12, label %16
i32 13, label %17
i32 14, label %18
i32 15, label %19
i32 16, label %20
i32 17, label %21
i32 18, label %22
i32 19, label %23
i32 20, label %24
i32 21, label %25
i32 22, label %26
i32 23, label %27
i32 24, label %28
i32 25, label %29
i32 26, label %30
i32 27, label %31
i32 28, label %32
i32 29, label %33
i32 30, label %34
i32 31, label %35
i32 32, label %36
i32 33, label %37
i32 34, label %38
i32 38, label %39
i32 39, label %40
i32 40, label %41
i32 41, label %42
i32 42, label %43
i32 43, label %44
i32 44, label %45
]
5: ; preds = %1
store i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0), i8** %3
br label %47
6: ; preds = %1
store i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.1, i64 0, i64 0), i8** %3
br label %47
7: ; preds = %1
store i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i8** %3
br label %47
8: ; preds = %1
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.3, i64 0, i64 0), i8** %3
br label %47
9: ; preds = %1
store i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0), i8** %3
br label %47
10: ; preds = %1
store i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.5, i64 0, i64 0), i8** %3
br label %47
11: ; preds = %1
store i8* getelementptr inbounds ([99 x i8], [99 x i8]* @.str.6, i64 0, i64 0), i8** %3
br label %47
12: ; preds = %1
store i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.7, i64 0, i64 0), i8** %3
br label %47
13: ; preds = %1
store i8* getelementptr inbounds ([3544 x i8], [3544 x i8]* @.str.8, i64 0, i64 0), i8** %3
br label %47
14: ; preds = %1
store i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.9, i64 0, i64 0), i8** %3
br label %47
15: ; preds = %1
store i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.10, i64 0, i64 0), i8** %3
br label %47
16: ; preds = %1
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.11, i64 0, i64 0), i8** %3
br label %47
17: ; preds = %1
store i8* getelementptr inbounds ([138 x i8], [138 x i8]* @.str.12, i64 0, i64 0), i8** %3
br label %47
18: ; preds = %1
store i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.13, i64 0, i64 0), i8** %3
br label %47
19: ; preds = %1
store i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i8** %3
br label %47
20: ; preds = %1
store i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.15, i64 0, i64 0), i8** %3
br label %47
21: ; preds = %1
store i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.16, i64 0, i64 0), i8** %3
br label %47
22: ; preds = %1
store i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.17, i64 0, i64 0), i8** %3
br label %47
23: ; preds = %1
store i8* getelementptr inbounds ([99 x i8], [99 x i8]* @.str.18, i64 0, i64 0), i8** %3
br label %24
24: ; preds = %1, %23
store i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.19, i64 0, i64 0), i8** %3
br label %47
25: ; preds = %1
store i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.20, i64 0, i64 0), i8** %3
br label %47
26: ; preds = %1
store i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.21, i64 0, i64 0), i8** %3
br label %47
27: ; preds = %1
store i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.22, i64 0, i64 0), i8** %3
br label %47
28: ; preds = %1
store i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.23, i64 0, i64 0), i8** %3
br label %47
29: ; preds = %1
store i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.24, i64 0, i64 0), i8** %3
br label %47
30: ; preds = %1
store i8* getelementptr inbounds ([88 x i8], [88 x i8]* @.str.25, i64 0, i64 0), i8** %3
br label %47
31: ; preds = %1
store i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.26, i64 0, i64 0), i8** %3
br label %47
32: ; preds = %1
store i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.27, i64 0, i64 0), i8** %3
br label %47
33: ; preds = %1
store i8* getelementptr inbounds ([185 x i8], [185 x i8]* @.str.28, i64 0, i64 0), i8** %3
br label %47
34: ; preds = %1
store i8* getelementptr inbounds ([103 x i8], [103 x i8]* @.str.29, i64 0, i64 0), i8** %3
br label %47
35: ; preds = %1
store i8* getelementptr inbounds ([112 x i8], [112 x i8]* @.str.30, i64 0, i64 0), i8** %3
br label %47
36: ; preds = %1
store i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.31, i64 0, i64 0), i8** %3
br label %47
37: ; preds = %1
store i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.32, i64 0, i64 0), i8** %3
br label %47
38: ; preds = %1
store i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.33, i64 0, i64 0), i8** %3
br label %47
39: ; preds = %1
store i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.34, i64 0, i64 0), i8** %3
br label %47
40: ; preds = %1
store i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.35, i64 0, i64 0), i8** %3
br label %47
41: ; preds = %1
store i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.36, i64 0, i64 0), i8** %3
br label %47
42: ; preds = %1
store i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.37, i64 0, i64 0), i8** %3
br label %47
43: ; preds = %1
store i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.38, i64 0, i64 0), i8** %3
br label %47
44: ; preds = %1
store i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.39, i64 0, i64 0), i8** %3
br label %47
45: ; preds = %1
store i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.40, i64 0, i64 0), i8** %3
br label %47
46: ; preds = %1
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.41, i64 0, i64 0), i8** %3
br label %47
47: ; preds = %46, %45, %44, %43, %42, %41, %40, %39, %38, %37, %36, %35, %34, %33, %32, %31, %30, %29, %28, %27, %26, %25, %24, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5
%48 = load i32, i32* @stderr
%49 = load i8*, i8** %3
%50 = call i32 @fprintf(i32 %48, i8* %49)
ret void
}

LLVM IR (-O2):
@.str = [18 x i8] c"Cannot open file.\00"
@.str.1 = [27 x i8] c"Unable to allocate memory.\00"
@.str.2 = [18 x i8] c"Error in parsing.\00"
@.str.3 = [30 x i8] c"More predicates than NBPREDS.\00"
@.str.4 = [25 x i8] c"More types than NBTYPES.\00"
@.str.5 = [44 x i8] c"A fact makes use of an undefined predicate.\00"
@.str.6 = [99 x i8] c"The maximum number of variables is lower than the arity of individuals: the arity is used instead.\00"
@.str.7 = [75 x i8] c"No fact is supposed to be associated to individuals. They are disregarded.\00"
@.str.8 = [3544 x i8] c"The arguments are at least max_literals/max_variables, plus an optional stem for file names (otherwise the stem \22default\22 is used) or the names of files containing predicate, facts, results, debugging information if verbose is used, and the starting clause if used.\0AThe following options can be used before the arguments:\0A-m and a number to change the max memory (default is 10 Mb)\0A-e for a multi-dimensional estimate of the number of counter-examples (bi-dimensional by default)\0A-n and a threshold for the percent of noise (0 by default)\0A-ask to ask more memory to the user if needed (by default, tertius stops when the maximum memory is reached and give the current results if any)\0A-u for explicit unification (unified variables are simply replaced by one of them by default)\0A-[s|sr|S|SR] and the sampling ratio (no sampling by default)\0A-breadth to use a breadth first search (best first search by default)\0A-v verbose (the default is off)\0A-nosubs to keep subsumed clauses (subsumed clauses are removed by default)\0A-sat to consider satisfied clauses only (By default, clauses are given according to their confirmation only.)\0A-b language bias: horn, class for rules predicting the first predicate only, pos_class for predicting only it as positive literal, horn_pos_class for both horn and pos_class options (no bias by default)\0A-k and the number of results wanted (10 by default)\0A-c and the confirmation threshold (10 best results are considered by default instead of setting a confirmation threshold.)\0A-f and a threshold on the frequency (0 by default)\0A-prolog use prolog, only available with appropriate files (the default is off)\0A-[bg|pttp|ic] to use background knowledge to influence the expected value (bg: regular-resolution (prolog),pttp: linear-resolution (prolog technology theorem prover),ic: integrity-constraints)\0A-i load partitions incrementaly, useful when the training set is too to be loaded in one go\0A-struct to use structural properties\0A-sc to start the search from a clause given in the appropriate file (usually stem.cla)\0A-cbu to count instances in a bottom-up manner, generating substitutions incrementaly from examples instead of the default generate-then-test approach\0A-avg with partionning, when each partition represents a separate dataset, the confirmations of partitions are averaged. Off by default: the cells of the contingency tables for each partition are added up into on global contingency table.-d an_attribute name, a number of intervals the attribute has to be discretised in, and a kind of discretisation (sdm: standard deviation centered on the mean, eqb: equal bins).\0A-bayes naive/optimal language/individual/first and the name of the predicate used as the class for the naive or optimal Bayes classifier\0A-cross and the number of partition to apply a cross-validation on the dataset\0A-srand and an integer for initialising the random seed\0A-eval to evaluate the clause{s} in the .cla file\0A-w in the Bayesian classifier to write first-order features with new predicates in the head to a .fof file\0A-t and a threshold to select the features modifying the default distribution of the classes more than the threshold\0A-r INDIVIDUAL/LANGUAGE for a recursive approach based on the first-order (list, multiset and set) distributions (i.e. pure 1BC2) / on-the-fly propositionalisation (i.e. emulated 1BC) in Bayesian classification\0A-roc to generate roc curve\0A-o a_number_of_folds to find the best threshold using an internal cross-validation according to roc curve for Bayesian classification\0A-h to see this message\00"
@.str.9 = [46 x i8] c"A variable term ref has not been initialised.\00"
@.str.10 = [34 x i8] c"More substitutions than LONG_MAX.\00"
@.str.11 = [31 x i8] c"Error in substituted_term_ref.\00"
@.str.12 = [138 x i8] c"For each predicate, you must defined whether the closed world assumption is used (cwa) or negative facts are explicitly given (explicit).\00"
@.str.13 = [27 x i8] c"k_best should not be zero!\00"
@.str.14 = [29 x i8] c"Stem longer than STEMLENGTH.\00"
@.str.15 = [27 x i8] c"Error in Prolog interface.\00"
@.str.16 = [61 x i8] c"The clause makes use of the same variable for several types.\00"
@.str.17 = [48 x i8] c"The clause makes use of an undefined predicate.\00"
@.str.19 = [97 x i8] c"The clause makes use of more literals than the maximum number of literals allowed in the search.\00"
@.str.20 = [48 x i8] c"A type is sometimes groundable, sometimes not !\00"
@.str.21 = [49 x i8] c"The clause makes use of a new set of parameters.\00"
@.str.22 = [70 x i8] c"The target predicate makes use of more variables than the individual.\00"
@.str.23 = [58 x i8] c"The first literal of a property should be the individual!\00"
@.str.24 = [58 x i8] c"No properties can be generated from the current settings!\00"
@.str.25 = [88 x i8] c"The number used in the cross-validation must be between 1 and the number of partitions!\00"
@.str.26 = [51 x i8] c"The target predicate doesn't match the individual!\00"
@.str.27 = [42 x i8] c"Structural predicates must be of arity 2!\00"
@.str.28 = [185 x i8] c"-bayes option must be followed by 'optimal' or 'naive', whether the decomposition is based on the 'individual', the 'language', or 'first'-order, then the name of the target predicate!\00"
@.str.29 = [103 x i8] c"-cbu option cannot be used yet with -u option: switching to an implicit representation of unification.\00"
@.str.30 = [112 x i8] c"Counting in a database only works with the normal expected value and an implicit representation of unification.\00"
@.str.31 = [64 x i8] c"Counting in a database only works with an individual predicate.\00"
@.str.32 = [67 x i8] c"The number of intervals of a discrete type must be greater than 0.\00"
@.str.33 = [64 x i8] c"The kind of structural predicate (bv,li,...) must be specified.\00"
@.str.34 = [73 x i8] c"This classifier can only deal with individuals defined by a single type.\00"
@.str.35 = [46 x i8] c"No value found for property of an individual.\00"
@.str.36 = [76 x i8] c"No related individual found for a structural predicate given an individual.\00"
@.str.37 = [47 x i8] c"A structural predicate cannot have parameters.\00"
@.str.38 = [47 x i8] c"Bit-Vector (bv) distribution is not available.\00"
@.str.39 = [35 x i8] c"New context during classification.\00"
@.str.40 = [37 x i8] c"Wrong name for the target predicate.\00"
@.str.41 = [22 x i8] c"Error is not defined.\00"
@stderr = global i32 0
@reltable.tertius_error_display = [44 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([18 x i8]* @.str to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([27 x i8]* @.str.1 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([18 x i8]* @.str.2 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([30 x i8]* @.str.3 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([25 x i8]* @.str.4 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([44 x i8]* @.str.5 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([99 x i8]* @.str.6 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([75 x i8]* @.str.7 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([3544 x i8]* @.str.8 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([46 x i8]* @.str.9 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([34 x i8]* @.str.10 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([31 x i8]* @.str.11 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([138 x i8]* @.str.12 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([27 x i8]* @.str.13 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([29 x i8]* @.str.14 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([27 x i8]* @.str.15 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([61 x i8]* @.str.16 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([48 x i8]* @.str.17 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([97 x i8]* @.str.19 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([97 x i8]* @.str.19 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([48 x i8]* @.str.20 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([49 x i8]* @.str.21 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([70 x i8]* @.str.22 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([58 x i8]* @.str.23 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([58 x i8]* @.str.24 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([88 x i8]* @.str.25 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([51 x i8]* @.str.26 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([42 x i8]* @.str.27 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([185 x i8]* @.str.28 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([103 x i8]* @.str.29 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([112 x i8]* @.str.30 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([64 x i8]* @.str.31 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([67 x i8]* @.str.32 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([64 x i8]* @.str.33 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([22 x i8]* @.str.41 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([22 x i8]* @.str.41 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([22 x i8]* @.str.41 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([73 x i8]* @.str.34 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([46 x i8]* @.str.35 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([76 x i8]* @.str.36 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([47 x i8]* @.str.37 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([47 x i8]* @.str.38 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([35 x i8]* @.str.39 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([37 x i8]* @.str.40 to i64), i64 ptrtoint ([44 x i32]* @reltable.tertius_error_display to i64)) to i32)]
define void @tertius_error_display(i32 %0) {
%2 = add i32 %0, -1
%3 = icmp ult i32 %2, 44
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = shl i64 %5, 2
%7 = call i8* @llvm.load.relative.i64(i8* bitcast ([44 x i32]* @reltable.tertius_error_display to i8*), i64 %6)
br label %8
8: ; preds = %1, %4
%9 = phi i8* [ %7, %4 ], [ getelementptr inbounds ([22 x i8], [22 x i8]* @.str.41, i64 0, i64 0), %1 ]
%10 = load i32, i32* @stderr
%11 = tail call i32 @fprintf(i32 %10, i8* %9)
ret void
}