#NEWLINE# def dpll_satisfiable( expr ) : #NEWLINE# #INDENT# '\n    Check satisfiability of a propositional sentence.\n    It returns a model rather than True when it succeeds\n\n    >>> from sympy.abc import A, B\n    >>> from sympy.logic.algorithms.dpll import dpll_satisfiable\n    >>> dpll_satisfiable(A & ~B)\n    {A: True, B: False}\n    >>> dpll_satisfiable(A & ~A)\n    False\n\n    ' #NEWLINE# clauses = conjuncts ( to_cnf ( expr ) ) #NEWLINE# if ( False in clauses ) : #NEWLINE# #INDENT# return False #NEWLINE# #UNINDENT# symbols = sorted ( _find_predicates ( expr ) , key = default_sort_key ) #NEWLINE# symbols_int_repr = set ( range ( 1 , ( len ( symbols ) + 1 ) ) ) #NEWLINE# clauses_int_repr = to_int_repr ( clauses , symbols ) #NEWLINE# result = dpll_int_repr ( clauses_int_repr , symbols_int_repr , { #NEWLINE# #INDENT# #NEWLINE# #UNINDENT# } ) #NEWLINE# if ( not result ) : #NEWLINE# #INDENT# return result #NEWLINE# #UNINDENT# output = { #NEWLINE# #INDENT# #NEWLINE# #UNINDENT# } #NEWLINE# for key in result : #NEWLINE# #INDENT# output . update ( { #NEWLINE# #INDENT# symbols [ ( key - 1 ) ] : result [ result ] , #NEWLINE# #UNINDENT# } ) #NEWLINE# #UNINDENT# return output