void asserted_formulas::push_assertion(expr * e, proof * pr, vector<justified_expr>& result) { if (inconsistent()) { return; } expr* e1 = nullptr; if (m.is_false(e)) { result.push_back(justified_expr(m, e, pr)); m_inconsistent = true; } else if (m.is_true(e)) { // skip } else if (m.is_and(e)) { for (unsigned i = 0; i < to_app(e)->get_num_args(); ++i) { expr* arg = to_app(e)->get_arg(i); proof_ref _pr(m.proofs_enabled() ? m.mk_and_elim(pr, i) : nullptr, m); push_assertion(arg, _pr, result); } } else if (m.is_not(e, e1) && m.is_or(e1)) { for (unsigned i = 0; i < to_app(e1)->get_num_args(); ++i) { expr* arg = to_app(e1)->get_arg(i); proof_ref _pr(m.proofs_enabled() ? m.mk_not_or_elim(pr, i) : nullptr, m); expr_ref narg(mk_not(m, arg), m); push_assertion(narg, _pr, result); } } else { result.push_back(justified_expr(m, e, pr)); } }
int main(int argc, char **argv) { int c; int c1, c2; (void) setlocale(LC_ALL, ""); #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ #define TEXT_DOMAIN "SYS_TEST" /* Use this only if it weren't */ #endif (void) textdomain(TEXT_DOMAIN); while ((c = getopt(argc, argv, "ls")) != EOF) switch (c) { case 'l': lflg = 2; break; case 's': lflg = 0; break; case '?': default: narg(); } argv += optind; argc -= optind; if (argc < 2 || argc > 4) narg(); arg = argv[0]; if (arg[0] == '-' && arg[1] == 0) file1 = stdin; else if ((file1 = fopen(arg, "r")) == NULL) barg(); arg = argv[1]; if (arg[0] == '-' && arg[1] == 0) file2 = stdin; else if ((file2 = fopen(arg, "r")) == NULL) barg(); if (file1 == stdin && file2 == stdin) narg(); if (argc > 2) skip1 = otoi(argv[2]); if (argc > 3) skip2 = otoi(argv[3]); while (skip1) { if ((c1 = getc(file1)) == EOF) { arg = argv[0]; earg(); } skip1--; } while (skip2) { if ((c2 = getc(file2)) == EOF) { arg = argv[1]; earg(); } skip2--; } for (;;) { chr++; c1 = getc(file1); c2 = getc(file2); if (c1 == c2) { if (c1 == '\n') line++; if (c1 == EOF) { if (eflg) return (1); return (0); } continue; } if (lflg == 0) return (1); if (c1 == EOF) { arg = argv[0]; earg(); } if (c2 == EOF) earg(); if (lflg == 1) { (void) printf( gettext("%s %s differ: char %lld, line %lld\n"), argv[0], arg, chr, line); return (1); } eflg = 1; (void) printf("%6lld %3o %3o\n", chr, c1, c2); } }