void mace4_exit(int exit_code) { if (Opt && flag(Opt->verbose)) p_mem(); if (Opt && parm(Opt->report_stderr) > 0) fprintf(stderr, "Domain_size=%d. Models=%d. User_CPU=%.2f.\n", Domain_size, Total_models, user_seconds()); printf("\nUser_CPU=%.2f, System_CPU=%.2f, Wall_clock=%d.\n", user_seconds(), system_seconds(), wallclock()); if (Total_models == 0) printf("\nExiting with failure.\n"); else printf("\nExiting with %d model%s.\n", Total_models, Total_models == 1 ? "" : "s"); fprintf(stderr, "\n------ process %d exit (%s) ------\n", my_process_id(), exit_string(exit_code)); printf("\nProcess %d exit (%s) %s", my_process_id(), exit_string(exit_code), get_date()); printf("The process finished %s", get_date()); exit(exit_code); } /* mace4_exit */
void p_stats(void) { print_separator(stdout, "STATISTICS", TRUE); printf("\nFor domain size %d.\n\n",Domain_size); printf("Current CPU time: %.2f seconds ", clock_seconds(Mace4_clock)); printf("(total CPU time: %.2f seconds).\n",user_seconds()); printf("Ground clauses: seen=%u, kept=%u.\n", Mstats.ground_clauses_seen, Mstats.ground_clauses_kept); printf("Selections=%u, assignments=%u, propagations=%u, current_models=%u.\n", Mstats.selections, Mstats.assignments, Mstats.propagations, Mstats.current_models); printf("Rewrite_terms=%u, rewrite_bools=%u, indexes=%u.\n", Mstats.rewrite_terms, Mstats.rewrite_bools, Mstats.indexes); printf("Rules_from_neg_clauses=%u, cross_offs=%d.\n", Mstats.rules_from_neg, Mstats.cross_offs); #if 0 printf("Negative propagation:\n"); printf(" attempts agone egone\n"); printf("Neg_elim %10u %10u %10u\n", Mstats.neg_elim_attempts, Mstats.neg_elim_agone, Mstats.neg_elim_egone); printf("Neg_assign %10u %10u %10u\n", Mstats.neg_assign_attempts, Mstats.neg_assign_agone, Mstats.neg_assign_egone); printf("Neg_near_elim %10u %10u %10u\n", Mstats.neg_near_elim_attempts, Mstats.neg_near_elim_agone, Mstats.neg_near_elim_egone); printf("Neg_near_assign %10u %10u %10u\n", Mstats.neg_near_assign_attempts, Mstats.neg_near_assign_agone, Mstats.neg_near_assign_egone); #endif print_separator(stdout, "end of statistics", TRUE); } /* p_stats */
static int check_time_memory(void) { static int Next_report; double seconds = user_seconds(); int max_seconds = parm(Opt->max_seconds); int max_seconds_per = parm(Opt->max_seconds_per); int max_megs = parm(Opt->max_megs); int report = parm(Opt->report_stderr); if (max_seconds != -1 && seconds - Start_seconds > max_seconds) return SEARCH_MAX_TOTAL_SECONDS; else if (max_seconds_per != -1 && seconds - Start_domain_seconds > parm(Opt->max_seconds_per)) return SEARCH_MAX_DOMAIN_SECONDS; else if (max_megs != -1 && mace_megs() > parm(Opt->max_megs)) return SEARCH_MAX_MEGS; else { if (report > 0) { if (Next_report == 0) Next_report = parm(Opt->report_stderr); if (seconds >= Next_report) { fprintf(stderr, "Domain_size=%d. Models=%d. User_CPU=%.2f.\n", Domain_size, Total_models, seconds); fflush(stderr); while (seconds >= Next_report) Next_report += report; } } return SEARCH_GO_NO_MODELS; } } /* check_time_memory */
void print_model_standard(FILE *fp, BOOL print_head) { int syms_printed; Symbol_data s; if (print_head) print_separator(fp, "MODEL", TRUE); fprintf(fp, "\ninterpretation( %d, [number=%d, seconds=%d], [\n", Domain_size, Total_models, (int) user_seconds()); syms_printed = 0; for (s = Symbols; s != NULL; s = s->next) { if (s->attribute != EQUALITY_SYMBOL) { int i, n; if (syms_printed > 0) fprintf(fp, ",\n"); fprintf(fp, "\n %s(%s%s", s->type == FUNCTION ? "function" : "relation", sn_to_str(s->sn), s->arity == 0 ? "" : "(_"); for (i = 1; i < s->arity; i++) fprintf(fp, ",_"); fprintf(fp,"%s, [%s", s->arity == 0 ? "" : ")", s->arity >= 2 ? "\n\t\t\t " : ""); n = int_power(Domain_size, s->arity); for (i = 0; i < n; i++) { int id = s->base + i; if (Cells[id].value == NULL) fprintf(fp, "-"); else fprintf(fp, "%2d", VARNUM(Cells[id].value)); if (i < n-1) fprintf(fp, ",%s", (i+1) % Domain_size == 0 ? "\n\t\t\t " : ""); else fprintf(fp, " ])"); } syms_printed++; } } fprintf(fp, "\n]).\n"); if (print_head) print_separator(fp, "end of model", TRUE); } /* print_model_standard */
void p_model(BOOL print_head) { Symbol_data p; int n = Domain_size; if (print_head) { print_separator(stdout, "MODEL", TRUE); printf("\n%% Model %d at %.2f seconds.\n", Total_models, user_seconds()); } for (p = Symbols; p != NULL; p = p->next) { char *name = sn_to_str(p->sn); if (p->attribute != EQUALITY_SYMBOL) { /* This prints both relations and functions. */ if (p->arity == 0) { int v = f0_val(p->base); if (v < 0) printf("\n %s : -\n", name); else printf("\n %s : %d\n", name, v); } else if (p->arity == 1) { char *s1 = n <= 10 ? "%2d" : "%3d"; char *s2 = n <= 10 ? "--" : "---"; char *s3 = n <= 10 ? " -" : " -"; int i; for (i = 0; i < n; i++) { printf("\n %s :\n", name); printf(" "); for (i = 0; i < n; i++) printf(s1, i); printf("\n ---"); for (i = 0; i < n; i++) printf(s2); printf("\n "); for (i = 0; i < n; i++) { int v = f1_val(p->base, i); if (v < 0) printf(s3); else printf(s1, v); } printf("\n"); } } else if (p->arity == 2) { char *s1 = n <= 10 ? "%2d" : "%3d"; char *s2 = n <= 10 ? "--" : "---"; char *s3 = n <= 10 ? " -" : " -"; int i, j; printf("\n %s :\n", name); printf(" |"); for (i = 0; i < n; i++) printf(s1, i); printf("\n --+"); for (i = 0; i < n; i++) printf(s2); printf("\n"); for (i = 0; i < n; i++) { printf("%5d |", i); for (j = 0; j < n; j++) { int v = f2_val(p->base, i, j); if (v < 0) printf(s3); else printf(s1, v); } printf("\n"); } } else { int n = int_power(Domain_size, p->arity); int i; Variable_style save_style = variable_style(); set_variable_style(INTEGER_STYLE); for (i = 0; i < n; i++) { int id = p->base + i; fwrite_term(stdout, Cells[id].eterm); if (Cells[id].value == NULL) printf(" = -.\n"); else printf(" = %d.\n", VARNUM(Cells[id].value)); } set_variable_style(save_style); } } } if (print_head) print_separator(stdout, "end of model", TRUE); } /* p_model */
double mdlCpuTimer(MDL mdl) { return(user_seconds()); }
int main(int argc, char **argv) { FILE *head_fp; Ilist just; Plist demodulators, p; Mindex idx; Term t; int rewritten = 0; BOOL verbose = string_member("verbose", argv, argc);; if (string_member("help", argv, argc) || string_member("-help", argv, argc) || argc < 2) { printf("\n%s, version %s, %s\n",PROGRAM_NAME,PROGRAM_VERSION,PROGRAM_DATE); printf("%s", Help_string); exit(1); } init_standard_ladr(); head_fp = fopen(argv[1], "r"); if (head_fp == NULL) fatal_error("demodulator file can't be opened for reading"); t = read_commands(head_fp, stderr, verbose, KILL_UNKNOWN); if (!is_term(t, "clauses", 1) && !is_term(t, "formulas", 1)) fatal_error("formulas(demodulators) not found"); /* Read list of demodulators. */ demodulators = read_clause_list(head_fp, stderr, TRUE); fclose(head_fp); /* AC-canonicalize and index the demodulators. */ if (assoc_comm_symbols() || comm_symbols()) idx = mindex_init(DISCRIM_WILD, BACKTRACK_UNIF, 0); else idx = mindex_init(DISCRIM_BIND, ORDINARY_UNIF, 0); for (p = demodulators; p != NULL; p = p->next) { /* assume positive equality unit */ Topform d = p->v; Literals lit = d->literals; Term alpha = lit->atom->args[0]; mark_oriented_eq(lit->atom); /* don not check for termination */ if (assoc_comm_symbols()) ac_canonical(lit->atom, -1); mindex_update(idx, alpha, INSERT); } if (verbose) fwrite_clause_list(stdout, demodulators, "demodulators", CL_FORM_BARE); /* Read and demodulate terms. */ t = read_term(stdin, stderr); while (t != NULL) { rewritten++; if (verbose) { fprintf(stdout, "\nBefore: "); fwrite_term_nl(stdout, t); } if (assoc_comm_symbols()) ac_canonical(t, -1); just = NULL; t = demodulate(t, idx, &just, FALSE); if (verbose) fprintf(stdout, "After: "); fwrite_term_nl(stdout, t); fflush(stdout); zap_ilist(just); zap_term(t); t = read_term(stdin, stderr); } printf("%% %s %s: rewrote %d terms with %d rewrite steps in %.2f seconds.\n", PROGRAM_NAME, argv[1], rewritten, demod_rewrites(), user_seconds()); exit(0); } /* main */