ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
assign.c
Go to the documentation of this file.
1#include "assign.h"
2#include "inline.h"
3#include "inlineassign.h"
4#include "logging.h"
5
6#include <limits.h>
7
9
10void kissat_assign_unit (kissat *solver, unsigned lit, const char *reason) {
11 kissat_assign (solver, solver->probing, 0, false, lit, UNIT_REASON);
12 LOGUNARY (lit, "assign %s %s", LOGLIT (lit), reason);
13#ifndef LOGGING
14 (void) reason;
15#endif
16}
17
19 kissat_assign_unit (solver, lit, "learned reason");
22}
23
25 kissat_assign_unit (solver, lit, "original reason");
26}
27
29 kissat_assign (solver, solver->probing, solver->level, false, lit,
31 LOG ("assign %s decision", LOGLIT (lit));
32}
33
34void kissat_assign_binary (kissat *solver, unsigned lit, unsigned other) {
35 KISSAT_assert (VALUE (other) < 0);
36 assigned *assigned = solver->assigned;
37 const unsigned other_idx = IDX (other);
38 struct assigned *a = assigned + other_idx;
39 unsigned level = a->level;
40 if (GET_OPTION (jumpreasons) && level && a->binary) {
41 LOGBINARY (lit, other, "jumping %s reason", LOGLIT (lit));
42 INC (jumped_reasons);
43 other = a->reason;
44 }
45 kissat_assign (solver, solver->probing, a->level, true, lit, other);
46 LOGBINARY (lit, other, "assign %s reason", LOGLIT (lit));
47}
48
50 clause *reason) {
51 KISSAT_assert (reason == kissat_dereference_clause (solver, ref));
52 assigned *assigned = solver->assigned;
53 value *values = solver->values;
54 const unsigned level =
55 kissat_assignment_level (solver, values, assigned, lit, reason);
59 kissat_assign (solver, solver->probing, level, false, lit, ref);
60 LOGREF (ref, "assign %s reason", LOGLIT (lit));
61}
62
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void kissat_learned_unit(kissat *solver, unsigned lit)
Definition assign.c:18
void kissat_original_unit(kissat *solver, unsigned lit)
Definition assign.c:24
void kissat_assign_binary(kissat *solver, unsigned lit, unsigned other)
Definition assign.c:34
void kissat_assign_decision(kissat *solver, unsigned lit)
Definition assign.c:28
void kissat_assign_reference(kissat *solver, unsigned lit, reference ref, clause *reason)
Definition assign.c:49
ABC_NAMESPACE_IMPL_START void kissat_assign_unit(kissat *solver, unsigned lit, const char *reason)
Definition assign.c:10
#define DECISION_REASON
Definition assign.h:9
#define UNIT_REASON
Definition assign.h:10
#define INC(NAME)
#define LOG(...)
ABC_NAMESPACE_IMPL_START typedef signed char value
#define CHECK_AND_ADD_UNIT(...)
Definition check.h:155
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define LOGREF(...)
Definition logging.h:433
#define LOGBINARY(...)
Definition logging.h:442
#define LOGUNARY(...)
Definition logging.h:451
#define LOGLIT(...)
Definition logging.hpp:99
#define GET_OPTION(N)
Definition options.h:295
#define ADD_UNIT_TO_PROOF(...)
Definition proof.h:141
ABC_NAMESPACE_HEADER_START typedef unsigned reference
Definition reference.h:9
int lit
Definition satVec.h:130
#define IDX(LIT)
Definition literal.h:28
bool binary
Definition assign.h:23
unsigned reason
Definition assign.h:28
unsigned level
Definition assign.h:19
#define VALUE(LIT)
Definition value.h:10