Ask Your Question

Usage of cryptominisat

asked 2018-09-06 19:14:04 +0200

Hridya gravatar image

updated 2023-01-09 23:59:46 +0200

tmonteil gravatar image

I am using cryptominisat 5.0. I have a file of DIMACS standard format having a mix of cnf clauses and xor clauses( an “x” in front of the line to make that line an XOR clause). I saved it with filename DIMAC.cnf. I gave this file as input to cryptominisat as follows:"/home/hridya/SageMath/DIMAC.cnf") I got the following error. ValueError: invalid literal for int() with base 10: 'x1'. What is the problem?

edit retag flag offensive close merge delete


Could you please provide the whole cnf file ?

tmonteil gravatar imagetmonteil ( 2018-09-06 21:30:51 +0200 )edit

That was a sample file: I will copy the contents here:

c filename DIMAC.cnf

p cnf 10 7

x1 2 8 9 0

3 -8 0

4 -8 0

5 -9 0

6 -9 0

9 -10 0

7 -10 0

Hridya gravatar imageHridya ( 2018-09-07 07:16:39 +0200 )edit
slelievre gravatar imageslelievre ( 2018-09-08 15:35:21 +0200 )edit
slelievre gravatar imageslelievre ( 2018-09-10 00:31:59 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2018-09-07 23:00:59 +0200

tmonteil gravatar image

updated 2018-09-21 19:52:06 +0200

This is due to the fact that the read method for the cryptominisat solver is inherited from the generic sat solver, see the last line of:

sage: s = SAT()
sage: s
CryptoMiniSat solver: 0 variables, 0 clauses.

Since the x is specific to cryptominisat and not part of the CNF specification, the parser can not handle it. It should be very easy to write a read method inside the CryptoMiniSat class that handles this, or just add a try-except statement in the SatSolver class depending on whether there exists a add_xor_clause method available (typically, one could imagine to add add_xor_clause method to the LP solver).

EDIT this is now trac ticket 26329

Once this ticket will be merged, with the file you provided, you will be able to do:

sage: s = SAT()
sage: s
CryptoMiniSat solver: 10 variables, 7 clauses.
sage: s.clauses()
[((1, 2, 8, 9), True, True),
 ((3, -8), False, None),
 ((4, -8), False, None),
 ((5, -9), False, None),
 ((6, -9), False, None),
 ((9, -10), False, None),
 ((7, -10), False, None)]
sage: s()
(None, True, False, False, False, False, False, False, False, False, False)
edit flag offensive delete link more


The SageMath documentation page about CryptoMiniSat explains how to save to a file.

It would be nice if it also gave an example of how to read back such a file.

Especially, an example which has xor clauses.

slelievre gravatar imageslelievre ( 2018-09-12 12:27:55 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2018-09-06 19:14:04 +0200

Seen: 689 times

Last updated: Sep 21 '18