Clingo
Loading...
Searching...
No Matches
propagate.h
1#ifndef CLINGO_PROPAGATE_H
2#define CLINGO_PROPAGATE_H
3
4#include <clingo/base.h>
5#include <clingo/core.h>
6#include <clingo/shared.h>
7#include <clingo/symbol.h>
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13typedef struct clingo_control clingo_control_t;
14
26
32
46typedef struct clingo_assignment clingo_assignment_t;
47
56
59
67CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_thread_id(clingo_assignment_t const *assignment, clingo_id_t *id);
68
74CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_decision_level(clingo_assignment_t const *assignment, uint32_t *level);
82CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_root_level(clingo_assignment_t const *assignment, uint32_t *level);
88CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_has_conflict(clingo_assignment_t const *assignment,
89 bool *is_conflicting);
96CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_has_literal(clingo_assignment_t const *assignment,
97 clingo_literal_t literal, bool *is_valid);
104CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_level(clingo_assignment_t const *assignment, clingo_literal_t literal,
105 uint32_t *level);
112CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_decision(clingo_assignment_t const *assignment, uint32_t level,
113 clingo_literal_t *literal);
120CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_fixed(clingo_assignment_t const *assignment,
121 clingo_literal_t literal, bool *is_fixed);
129CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_true(clingo_assignment_t const *assignment,
130 clingo_literal_t literal, bool *is_true);
138CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_false(clingo_assignment_t const *assignment,
139 clingo_literal_t literal, bool *is_false);
146CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_truth_value(clingo_assignment_t const *assignment,
147 clingo_literal_t literal, clingo_truth_value_t *value);
153CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_size(clingo_assignment_t const *assignment, size_t *size);
160CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_at(clingo_assignment_t const *assignment, size_t offset,
161 clingo_literal_t *literal);
167CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_total(clingo_assignment_t const *assignment, bool *is_total);
173CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_size(clingo_assignment_t const *assignment, uint32_t *size);
187CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_begin(clingo_assignment_t const *assignment, uint32_t level,
188 uint32_t *offset);
197CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_end(clingo_assignment_t const *assignment, uint32_t level,
198 uint32_t *offset);
205CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_at(clingo_assignment_t const *assignment, uint32_t offset,
206 clingo_literal_t *literal);
207
209
223
231
240
242typedef struct clingo_propagate_control clingo_propagate_control_t;
243
255typedef struct clingo_propagate_init clingo_propagate_init_t;
256
259
266CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_solver_literal(clingo_propagate_init_t const *init,
267 clingo_literal_t aspif_literal,
268 clingo_literal_t *solver_literal);
269
281 clingo_literal_t solver_literal);
287CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_library(clingo_propagate_init_t const *init, clingo_lib_t **lib);
293CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_base(clingo_propagate_init_t const *init,
294 clingo_base_t const **base);
300CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_number_of_threads(clingo_propagate_init_t const *init,
301 clingo_id_t *threads);
316CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_get_check_mode(clingo_propagate_init_t const *init,
332CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_get_undo_mode(clingo_propagate_init_t const *init,
334
343CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_control(clingo_propagate_init_t const *init,
345
356 clingo_literal_t solver_literal,
357 clingo_weight_t weight, clingo_weight_t priority);
358
360
375
378
389CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_add_literal(clingo_propagate_control_t *control, bool freeze,
390 clingo_literal_t *result);
391
402 clingo_literal_t literal);
409CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_has_watch(clingo_propagate_control_t const *control,
410 clingo_literal_t literal, bool *has_watch);
420 clingo_literal_t literal);
435 clingo_literal_t const *literals, size_t size,
436 clingo_clause_type_t type, bool *result);
455 clingo_propagate_control_t *control, clingo_literal_t solver_literal, clingo_weighted_literal_t const *literals,
456 size_t size, clingo_weight_t bound, clingo_weight_constraint_type_t type, bool *result);
457
468CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_propagate(clingo_propagate_control_t *control, bool *result);
469
471
474
477
480 clingo_literal_t const *, size_t, void *);
481
484 void *);
485
488
493typedef struct clingo_propagator {
506 bool (*init)(clingo_assignment_t const *assignment, clingo_propagate_init_t *init, void *data);
518 bool (*attach)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control, void *data);
519
561 bool (*propagate)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control,
562 clingo_literal_t const *changes, size_t size, void *data);
574 void (*undo)(clingo_assignment_t const *assignment, clingo_literal_t const *changes, size_t size, void *data);
588 bool (*check)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control, void *data);
602 bool (*decide)(clingo_assignment_t const *assignment, clingo_literal_t fallback, void *data,
603 clingo_literal_t *decision);
606 void (*free)(void *data);
608
615CLINGO_VISIBILITY_DEFAULT bool clingo_control_register_propagator(clingo_control_t *control,
616 clingo_propagator_t const *propagator, void *data);
618
619#ifdef __cplusplus
620}
621#endif
622
623#endif
struct clingo_base clingo_base_t
Object to inspect symbolic atoms in a program—the relevant Herbrand base gringo uses to instantiate p...
Definition base.h:70
struct clingo_lib clingo_lib_t
A library object storing global information.
Definition core.h:171
int32_t clingo_literal_t
Signed integer type used for aspif and solver literals.
Definition core.h:73
uint32_t clingo_id_t
Unsigned integer type used in various places.
Definition core.h:77
int32_t clingo_weight_t
Signed integer type for weights in sum aggregates and minimize constraints.
Definition core.h:79
CLINGO_VISIBILITY_DEFAULT bool clingo_control_register_propagator(clingo_control_t *control, clingo_propagator_t const *propagator, void *data)
Register a custom propagator with the control object.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_truth_value(clingo_assignment_t const *assignment, clingo_literal_t literal, clingo_truth_value_t *value)
Determine the truth value of a given literal.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_add_watch(clingo_propagate_control_t *control, clingo_literal_t literal)
Add a watch for the solver literal in the given phase.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_fixed(clingo_assignment_t const *assignment, clingo_literal_t literal, bool *is_fixed)
Check if a literal has a fixed truth value.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_set_undo_mode(clingo_propagate_init_t *init, clingo_propagator_undo_mode_t mode)
Configure when to call the undo method of the propagator.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_has_conflict(clingo_assignment_t const *assignment, bool *is_conflicting)
Check if the given assignment is conflicting.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_solver_literal(clingo_propagate_init_t const *init, clingo_literal_t aspif_literal, clingo_literal_t *solver_literal)
Map the given program literal or condition id to its solver literal.
struct clingo_propagate_control clingo_propagate_control_t
This object can be used to add clauses and propagate literals while solving.
Definition propagate.h:242
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_begin(clingo_assignment_t const *assignment, uint32_t level, uint32_t *offset)
Returns the offset of the decision literal with the given decision level in the trail.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_propagate(clingo_propagate_control_t *control, bool *result)
Propagate implied literals (resulting from added clauses).
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_add_literal(clingo_propagate_control_t *control, bool freeze, clingo_literal_t *result)
Adds a new literal to the problem or the active solver thread.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_remove_watch(clingo_propagate_control_t *control, clingo_literal_t literal)
Removes the watch (if any) for the given solver literal.
int clingo_weight_constraint_type_t
Corresponding type to clingo_weight_constraint_type_e.
Definition propagate.h:239
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_control(clingo_propagate_init_t const *init, clingo_propagate_control_t **control)
Get the underlying propagate control object.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_end(clingo_assignment_t const *assignment, uint32_t level, uint32_t *offset)
Returns the offset following the last literal with the given decision level.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_has_watch(clingo_propagate_control_t const *control, clingo_literal_t literal, bool *has_watch)
Check whether a literal is watched in the current context.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_add_minimize(clingo_propagate_init_t *init, clingo_literal_t solver_literal, clingo_weight_t weight, clingo_weight_t priority)
Add the given literal to minimize to the solver.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_size(clingo_assignment_t const *assignment, size_t *size)
The number of (positive) literals in the assignment.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_number_of_threads(clingo_propagate_init_t const *init, clingo_id_t *threads)
Get the number of threads used in subsequent solving.
int clingo_propagator_undo_mode_t
Corresponding type to clingo_propagator_undo_mode_e.
Definition propagate.h:230
bool(* clingo_propagator_check_callback_t)(clingo_assignment_t const *, clingo_propagate_control_t *, void *)
Typedef for clingo_propagator::check().
Definition propagate.h:487
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_false(clingo_assignment_t const *assignment, clingo_literal_t literal, bool *is_false)
Check if a literal has a fixed truth value.
void(* clingo_propagator_undo_callback_t)(clingo_assignment_t const *, clingo_literal_t const *, size_t, void *)
Typedef for clingo_propagator::undo().
Definition propagate.h:483
bool(* clingo_propagator_init_callback_t)(clingo_assignment_t const *, clingo_propagate_init_t *, void *)
Typedef for clingo_propagator::init().
Definition propagate.h:473
struct clingo_assignment clingo_assignment_t
Represents a (partial) assignment of a particular solver.
Definition propagate.h:46
struct clingo_propagate_init clingo_propagate_init_t
Object to initialize a user-defined propagator before each solving step.
Definition propagate.h:255
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_base(clingo_propagate_init_t const *init, clingo_base_t const **base)
Get an object to inspect the base.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_get_undo_mode(clingo_propagate_init_t const *init, clingo_propagator_undo_mode_t *mode)
Get the current undo mode of the propagator.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_size(clingo_assignment_t const *assignment, uint32_t *size)
Returns the number of literals in the trail, i.e., the number of assigned literals.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_trail_at(clingo_assignment_t const *assignment, uint32_t offset, clingo_literal_t *literal)
Returns the literal at the given position in the trail.
int clingo_propagator_check_mode_t
Corresponding type to clingo_propagator_check_mode_e.
Definition propagate.h:222
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_get_check_mode(clingo_propagate_init_t const *init, clingo_propagator_check_mode_t *mode)
Get the current check mode of the propagator.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_decision(clingo_assignment_t const *assignment, uint32_t level, clingo_literal_t *literal)
Determine the decision literal given a decision level.
int clingo_truth_value_t
Corresponding type to clingo_truth_value_e.
Definition propagate.h:55
bool(* clingo_propagator_attach_callback_t)(clingo_assignment_t const *, clingo_propagate_control_t *, void *)
Typedef for clingo_propagator::attach().
Definition propagate.h:476
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_add_weight_constraint(clingo_propagate_control_t *control, clingo_literal_t solver_literal, clingo_weighted_literal_t const *literals, size_t size, clingo_weight_t bound, clingo_weight_constraint_type_t type, bool *result)
Add the given weight constraint to the solver.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_set_check_mode(clingo_propagate_init_t *init, clingo_propagator_check_mode_t mode)
Configure when to call the check method of the propagator.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_true(clingo_assignment_t const *assignment, clingo_literal_t literal, bool *is_true)
Check if a literal is true.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_freeze_literal(clingo_propagate_init_t *init, clingo_literal_t solver_literal)
Freeze the given solver literal.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_at(clingo_assignment_t const *assignment, size_t offset, clingo_literal_t *literal)
The (positive) literal at the given offset in the assignment.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_has_literal(clingo_assignment_t const *assignment, clingo_literal_t literal, bool *is_valid)
Check if the given literal is part of a (partial) assignment.
clingo_propagator_check_mode_e
Supported check modes for propagators.
Definition propagate.h:214
clingo_truth_value_e
Represents three-valued truth values.
Definition propagate.h:49
int clingo_clause_type_t
Corresponding type to clingo_clause_type_e.
Definition propagate.h:374
clingo_clause_type_e
Enumeration of clause types determining the lifetime of a clause.
Definition propagate.h:365
clingo_propagator_undo_mode_e
Undo modes for propagators.
Definition propagate.h:225
struct clingo_propagator clingo_propagator_t
An instance of this struct has to be registered with a solver to implement a custom propagator.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_is_total(clingo_assignment_t const *assignment, bool *is_total)
Check if the assignment is total, i.e.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_init_library(clingo_propagate_init_t const *init, clingo_lib_t **lib)
Get the underlying library object.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_level(clingo_assignment_t const *assignment, clingo_literal_t literal, uint32_t *level)
Determine the decision level of a given literal.
CLINGO_VISIBILITY_DEFAULT bool clingo_propagate_control_add_clause(clingo_propagate_control_t *control, clingo_literal_t const *literals, size_t size, clingo_clause_type_t type, bool *result)
Add the given clause to the solver.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_decision_level(clingo_assignment_t const *assignment, uint32_t *level)
Get the current decision level.
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_thread_id(clingo_assignment_t const *assignment, clingo_id_t *id)
Get the id of the thread to which the assignment belongs.
bool(* clingo_propagator_propagate_callback_t)(clingo_assignment_t const *, clingo_propagate_control_t *, clingo_literal_t const *, size_t, void *)
Typedef for clingo_propagator::propagate().
Definition propagate.h:479
clingo_weight_constraint_type_e
Enumeration of weight_constraint_types.
Definition propagate.h:233
CLINGO_VISIBILITY_DEFAULT bool clingo_assignment_root_level(clingo_assignment_t const *assignment, uint32_t *level)
Get the current root level.
@ clingo_propagator_check_mode_both
call clingo_propagator::check() on propagation fixpoints and total assignments
Definition propagate.h:218
@ clingo_propagator_check_mode_none
do not call clingo_propagator::check() at all
Definition propagate.h:215
@ clingo_propagator_check_mode_fixpoint
call clingo_propagator::check() on propagation fixpoints
Definition propagate.h:217
@ clingo_propagator_check_mode_total
call clingo_propagator::check() on total assignments
Definition propagate.h:216
@ clingo_truth_value_false
false
Definition propagate.h:52
@ clingo_truth_value_true
true
Definition propagate.h:51
@ clingo_truth_value_free
no truth value
Definition propagate.h:50
@ clingo_clause_type_learnt
clause is subject to the solvers deletion policy
Definition propagate.h:366
@ clingo_clause_type_volatile
like clingo_clause_type_learnt but the clause is deleted after a solving step
Definition propagate.h:368
@ clingo_clause_type_static
clause is not subject to the solvers deletion policy
Definition propagate.h:367
@ clingo_clause_type_volatile_static
like clingo_clause_type_static but the clause is deleted after a solving step
Definition propagate.h:370
@ clingo_propagator_undo_mode_default
call clingo_propagator::undo() for non-empty change lists
Definition propagate.h:226
@ clingo_propagator_undo_mode_always
also call clingo_propagator::check() when check has been called
Definition propagate.h:227
@ clingo_weight_constraint_type_implication_right
the literal implies the weight constraint
Definition propagate.h:235
@ clingo_weight_constraint_type_implication_left
the weight constraint implies the literal
Definition propagate.h:234
@ clingo_weight_constraint_type_equivalence
the weight constraint is equivalent to the literal
Definition propagate.h:236
An instance of this struct has to be registered with a solver to implement a custom propagator.
Definition propagate.h:493
bool(* attach)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control, void *data)
This function is called once for each solving thread before solving of the current step is started.
Definition propagate.h:518
void(* free)(void *data)
Free the propagator.
Definition propagate.h:606
bool(* propagate)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control, clingo_literal_t const *changes, size_t size, void *data)
Can be used to propagate solver literals given a partial assignment.
Definition propagate.h:561
bool(* init)(clingo_assignment_t const *assignment, clingo_propagate_init_t *init, void *data)
This function is called once before each solving step.
Definition propagate.h:506
void(* undo)(clingo_assignment_t const *assignment, clingo_literal_t const *changes, size_t size, void *data)
Called whenever a solver undoes assignments to watched solver literals.
Definition propagate.h:574
bool(* check)(clingo_assignment_t const *assignment, clingo_propagate_control_t *control, void *data)
This function is similar to clingo_propagate_control_propagate() but is called without a change set o...
Definition propagate.h:588
bool(* decide)(clingo_assignment_t const *assignment, clingo_literal_t fallback, void *data, clingo_literal_t *decision)
This function allows a propagator to implement domain-specific heuristics.
Definition propagate.h:602
A literal with an associated weight.
Definition core.h:81