Esempio n. 1
0
def controlsMajorityWithMax(strategic,owns):
	controlDict = dict()
	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in controlDict:
						newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						controlDict[y.tuple()[2].value()] = newval
					else:
						controlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]
		elif x.tuple()[0] == strategic and not x.isFalse():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:]

		for c in unknownControlDict:
			if c in controlDict and int(controlDict[c]) > 5000000 and int(unknownControlDict[c]) + 400 < 10000000:
				dlvhex.output((c, ))
			elif int(unknownControlDict[c]) > 5000000 and (c not in controlDict or int(controlDict[c]) + 400 < 10000000):
				dlvhex.outputUnknown((c, ))
Esempio n. 2
0
def numberOfBalls(assignment, min, max):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1
            v = 0

    if true >= min.intValue() and (true + unknown) <= max.intValue():
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) >= min.intValue() and true <= max.intValue():
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: (true + unknown) < min.intValue() or true > max.intValue()
        #
        # external atom is certainly not true
        v = 0
Esempio n. 3
0
def isEmpty(assignment):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1

    if true > 0:
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) > 0:
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: (true + unknown) < min.intValue() or true > max.intValue()
        #
        # external atom is certainly not true
        v = 0
Esempio n. 4
0
def numberOfBallsGE(assignment, min):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
        elif x.isFalse():
            false = false + 1
        else:
            unknown = unknown + 1
            v = 0

    if true >= min.intValue():
        # external atom is true
        dlvhex.output(())
    elif (true + unknown) >= min.intValue():
        # external atom can be true
        dlvhex.outputUnknown(())
    else:
        # else case applies: if (true + unknown) < min.intValue()
        #
        # external
        v = 0
Esempio n. 5
0
def numberOfBalls(assignment, min, max):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1
			v = 0

	if true >= min.intValue() and (true + unknown) <= max.intValue():
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) >= min.intValue() and true <= max.intValue():
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: (true + unknown) < min.intValue() or true > max.intValue()
		#
		# external atom is certainly not true
		v = 0
Esempio n. 6
0
def partialTest(assignment):

    true = 0
    false = 0
    unknown = 0

    premisse = ()
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + 1
#			premisse = premisse + (x, )
#			print "true input atom:", x.value()
        elif x.isFalse():
            false = false + 1


#			premisse = premisse + (x.negate(), )
#			print "false input atom:", x.value()
        else:
            unknown = unknown + 1
            #			print "unknown input atom:", x.value()
            v = 0

    if true > 1:
        #		dlvhex.learn(premisse + (dlvhex.storeOutputAtom((), False).negate(), ))
        dlvhex.output(())
    elif true + unknown > 1:
        dlvhex.outputUnknown(())
Esempio n. 7
0
def adjacent(path,nd):
	edges = {}
	nodes = []
	file = open(path.value()[1:len(path.value())-1])

	for node in file:
		nodes.append(node)

	for i in range(0,len(nodes)/2):
		first = nodes.pop()
		second = nodes.pop()
		if first[:-1] not in edges:
			edges[first[:-1]] = [second[:-1]]
		else:
			edges[first[:-1]].append(second[:-1])

	true_nodes = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == nd and x.isTrue():
			if x.tuple()[1].value() in edges:
				for nd2 in edges[x.tuple()[1].value()]:
					dlvhex.output( (nd2,) )
					true_nodes.append(nd2)

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == nd and not x.isFalse() and not x.isTrue():
			if x.tuple()[1].value() in edges:
				for nd2 in edges[x.tuple()[1].value()]:
					if nd2 not in true_nodes:
						dlvhex.outputUnknown( (nd2,) )
Esempio n. 8
0
def numberOfBallsGE(assignment, min):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1
			v = 0

	if true >= min.intValue():
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) >= min.intValue():
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: if (true + unknown) < min.intValue()
		#
		# external
		v = 0
Esempio n. 9
0
def testSetMinusPartial(p, q):

	# compute the set difference of the extension of p minus the one of q
	input = dlvhex.getInputAtoms()
	for x in input:
		tup = x.tuple()

		# for each possible input atom p(x) (according to the grouding, it is not necessarily true in the current input)
		if tup[0].value() == p.value():

			qAtom = dlvhex.storeAtom((q, tup[1]))

			# if p(x) is true and the corresponding atom q(x) is not true (i.e., false or undefined)
			if dlvhex.isTrue(x) and not dlvhex.isTrue(qAtom):
				# if q(x) is false, then x is definitely in the output
				if not dlvhex.isInputAtom(qAtom) or dlvhex.isFalse(qAtom):
#					print "Definitely true: " + tup[1].value()
					dlvhex.output((tup[1], ))

				# if q(x) is undefined, then x might be in the output
				else:
#					print "Could be true: " + tup[1].value()
					dlvhex.outputUnknown((tup[1], ))
					v=0

			# if p(x) is undefined and q(x) is not true (i.e., false or undefined), then x might be in the output
			if not dlvhex.isTrue(x) and not dlvhex.isFalse(x) and not dlvhex.isTrue(qAtom):
#				print "Could be true: " + tup[1].value()
				dlvhex.outputUnknown((tup[1], ))
				v=0
Esempio n. 10
0
def isEmpty(assignment):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
		elif x.isFalse():
			false = false + 1
		else:
			unknown = unknown + 1

	if true > 0:
		# external atom is true
		dlvhex.output(())
	elif (true + unknown) > 0:
		# external atom can be true
		dlvhex.outputUnknown(())
	else:
		# else case applies: (true + unknown) < min.intValue() or true > max.intValue()
		#
		# external atom is certainly not true
		v = 0
Esempio n. 11
0
def testSetMinusPartial(p, q):

    # compute the set difference of the extension of p minus the one of q
    input = dlvhex.getInputAtoms()
    for x in input:
        tup = x.tuple()

        # for each possible input atom p(x) (according to the grouding, it is not necessarily true in the current input)
        if tup[0].value() == p.value():

            qAtom = dlvhex.storeAtom((q, tup[1]))

            # if p(x) is true and the corresponding atom q(x) is not true (i.e., false or undefined)
            if dlvhex.isTrue(x) and not dlvhex.isTrue(qAtom):
                # if q(x) is false, then x is definitely in the output
                if not dlvhex.isInputAtom(qAtom) or dlvhex.isFalse(qAtom):
                    #					print "Definitely true: " + tup[1].value()
                    dlvhex.output((tup[1], ))

                # if q(x) is undefined, then x might be in the output
                else:
                    #					print "Could be true: " + tup[1].value()
                    dlvhex.outputUnknown((tup[1], ))
                    v = 0

            # if p(x) is undefined and q(x) is not true (i.e., false or undefined), then x might be in the output
            if not dlvhex.isTrue(x) and not dlvhex.isFalse(
                    x) and not dlvhex.isTrue(qAtom):
                #				print "Could be true: " + tup[1].value()
                dlvhex.outputUnknown((tup[1], ))
                v = 0
Esempio n. 12
0
def adjacent(path, nd):
    edges = {}
    nodes = []
    file = open(path.value()[1:len(path.value()) - 1])

    for node in file:
        nodes.append(node)

    for i in range(0, len(nodes) / 2):
        first = nodes.pop()
        second = nodes.pop()
        if first[:-1] not in edges:
            edges[first[:-1]] = [second[:-1]]
        else:
            edges[first[:-1]].append(second[:-1])

    true_nodes = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == nd and x.isTrue():
            if x.tuple()[1].value() in edges:
                for nd2 in edges[x.tuple()[1].value()]:
                    dlvhex.output((nd2, ))
                    true_nodes.append(nd2)

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == nd and not x.isFalse() and not x.isTrue():
            if x.tuple()[1].value() in edges:
                for nd2 in edges[x.tuple()[1].value()]:
                    if nd2 not in true_nodes:
                        dlvhex.outputUnknown((nd2, ))
Esempio n. 13
0
def partialTest(assignment):

	true = 0
	false = 0
	unknown = 0

	premisse = ()
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + 1
#			premisse = premisse + (x, )
#			print "true input atom:", x.value()
		elif x.isFalse():
			false = false + 1
#			premisse = premisse + (x.negate(), )
#			print "false input atom:", x.value()
		else:
			unknown = unknown + 1
#			print "unknown input atom:", x.value()
			v = 0

	if true > 1:
#		dlvhex.learn(premisse + (dlvhex.storeOutputAtom((), False).negate(), ))
		dlvhex.output(())
	elif true + unknown > 1:
		dlvhex.outputUnknown(())
Esempio n. 14
0
def someSelectedPartial(selected):
    unknown = False
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            dlvhex.output(())
            return
        elif not x.isFalse():
            unknown = True
    if unknown:
        dlvhex.outputUnknown(())
Esempio n. 15
0
def controls(controlsStk):
    controlDict = dict()

    for x in dlvhex.getTrueInputAtoms():
        if x.tuple()[1].value() in controlDict:
            if x.tuple()[3].value() in controlDict[x.tuple()[1].value()]:
                newval = str(
                    int(controlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()]) + int(x.tuple()[4].value()))
                controlDict[x.tuple()[1].value()][x.tuple()
                                                  [3].value()] = newval
            else:
                controlDict[x.tuple()[1].value()][
                    x.tuple()[3].value()] = x.tuple()[4].value()
        else:
            controlDict[x.tuple()[1].value()] = dict()
            controlDict[x.tuple()[1].value()][
                x.tuple()[3].value()] = x.tuple()[4].value()

    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x not in dlvhex.getTrueInputAtoms():
            if x.tuple()[1].value() in unknownControlDict:
                if x.tuple()[3].value() in unknownControlDict[x.tuple()
                                                              [1].value()]:
                    newval = str(
                        int(unknownControlDict[x.tuple()[1].value()][
                            x.tuple()[3].value()]) + int(x.tuple()[4].value()))
                    unknownControlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()] = newval
                else:
                    unknownControlDict[x.tuple()[1].value()][
                        x.tuple()[3].value()] = x.tuple()[4].value()
            else:
                unknownControlDict[x.tuple()[1].value()] = dict()
                unknownControlDict[x.tuple()[1].value()][
                    x.tuple()[3].value()] = x.tuple()[4].value()

    for company1 in controlDict:
        for company2 in controlDict[company1]:
            if int(controlDict[company1][company2]) > 50:
                dlvhex.output((company1, company2))

    for company1 in unknownControlDict:
        for company2 in unknownControlDict[company1]:
            if company1 in controlDict and company2 in controlDict[company1]:
                if int(unknownControlDict[company1][company2] +
                       controlDict[company1][company2]) > 50:
                    dlvhex.outputUnknown((company1, company2))
            else:
                if int(unknownControlDict[company1][company2]) > 50:
                    dlvhex.outputUnknown((company1, company2))
Esempio n. 16
0
def controlsMajorityNonmonotonic(strategic, owns):
    controlDict = dict()
    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and y.isTrue() and x.tuple(
                )[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in controlDict:
                        newval = str(
                            int(controlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:-1]))
                        controlDict[y.tuple()[2].value()] = newval
                    else:
                        controlDict[y.tuple()
                                    [2].value()] = y.tuple()[3].value()[1:-1]
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:-1]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
        elif x.tuple()[0] == strategic and not x.isFalse():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and not y.isFalse() and x.tuple(
                )[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in unknownControlDict:
                        if int(y.tuple()[3].value()[1:-1]) > 0:
                            newval = str(
                                int(unknownControlDict[y.tuple()[2].value()]) +
                                int(y.tuple()[3].value()[1:-1]))
                            unknownControlDict[y.tuple()[2].value()] = newval
                        else:
                            if y.tuple()[2].value() in controlDict:
                                newval = str(
                                    int(controlDict[y.tuple()[2].value()]) +
                                    int(y.tuple()[3].value()[1:-1]))
                                controlDict[y.tuple()[2].value()] = newval
                    else:
                        if int(y.tuple()[3].value()[1:-1]) > 0:
                            unknownControlDict[y.tuple()[2].value()] = y.tuple(
                            )[3].value()[1:-1]

        for c in unknownControlDict:
            if c in controlDict and int(controlDict[c]) > 50:
                dlvhex.output((c, ))
            elif int(unknownControlDict[c]) > 50:
                dlvhex.outputUnknown((c, ))
Esempio n. 17
0
def strategicConflict(conflicting,strategic):
	trueList = []
	falseList = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			trueList.append(x.tuple()[1])
		elif x.tuple()[0] == strategic and x.isFalse():
			falseList.append(x.tuple()[1])

	for x in dlvhex.getTrueInputAtoms():
		if x.tuple()[0] == conflicting:
			if (x.tuple()[1] in trueList) and (x.tuple()[2] in trueList):
				dlvhex.output(())
			elif (x.tuple()[1] not in falseList) and (x.tuple()[2] not in falseList):
				dlvhex.outputUnknown(())
Esempio n. 18
0
def generalizedSubsetSum(x, y, b):
    true = 0
    false = 0
    unknown = 0

    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            true = true + int(x.tuple()[2].value())
        elif x.isFalse():
            false = false + int(x.tuple()[2].value())
        else:
            unknown = unknown + int(x.tuple()[2].value())

    if true > b.intValue() or true + unknown < b.intValue():
        dlvhex.output(())
    elif true != b.intValue() or unknown != 0:
        dlvhex.outputUnknown(())
Esempio n. 19
0
def strategicConflict(conflicting, strategic):
    trueList = []
    falseList = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            trueList.append(x.tuple()[1])
        elif x.tuple()[0] == strategic and x.isFalse():
            falseList.append(x.tuple()[1])

    for x in dlvhex.getTrueInputAtoms():
        if x.tuple()[0] == conflicting:
            if (x.tuple()[1] in trueList) and (x.tuple()[2] in trueList):
                dlvhex.output(())
            elif (x.tuple()[1] not in falseList) and (x.tuple()[2]
                                                      not in falseList):
                dlvhex.outputUnknown(())
Esempio n. 20
0
def contains(pred,elem):
#	if False:
#		dlvhex.output(())
	outputFalse = False
	outputTrue = False
	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == pred and x.tuple()[1].value() == elem.value() and x.isTrue():
			print("true")
			outputTrue = True	
			dlvhex.output(())
		elif x.tuple()[0] == pred and x.tuple()[1].value() == elem.value() and x.isFalse():
			print("false")			
			outputFalse = True

	if not outputFalse and not outputTrue:
		print("unknown")
		dlvhex.outputUnknown(())
Esempio n. 21
0
def needRestaurant(trip,limit):
	tripLength = 0
	maxTripLength = 0

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == trip and x.isTrue():
			tripLength += int(x.tuple()[4].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == trip and not x.isFalse():
			maxTripLength += int(x.tuple()[4].value())

	if tripLength > int(limit.value()):
		dlvhex.output(())

	if tripLength <= int(limit.value()) and maxTripLength > int(limit.value()):
		dlvhex.outputUnknown(())
Esempio n. 22
0
def generalizedSubsetSum(x,y,b):
	true = 0
	false = 0
	unknown = 0

	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			true = true + int(x.tuple()[2].value())
		elif x.isFalse():
			false = false + int(x.tuple()[2].value())
		else:
			unknown = unknown + int(x.tuple()[2].value())

	if true > b.intValue() or true + unknown < b.intValue():
		dlvhex.output(())
	elif true != b.intValue() or unknown != 0:
		dlvhex.outputUnknown(())
Esempio n. 23
0
def controlsMajorityWithMax(strategic, owns):
    controlDict = dict()
    unknownControlDict = dict()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in controlDict:
                        newval = str(
                            int(controlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        controlDict[y.tuple()[2].value()] = newval
                    else:
                        controlDict[y.tuple()
                                    [2].value()] = y.tuple()[3].value()[1:]
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:]
        elif x.tuple()[0] == strategic and not x.isFalse():
            for y in dlvhex.getInputAtoms():
                if y.tuple()[0] == owns and x.tuple()[1] == y.tuple()[1]:
                    if y.tuple()[2].value() in unknownControlDict:
                        newval = str(
                            int(unknownControlDict[y.tuple()[2].value()]) +
                            int(y.tuple()[3].value()[1:]))
                        unknownControlDict[y.tuple()[2].value()] = newval
                    else:
                        unknownControlDict[
                            y.tuple()[2].value()] = y.tuple()[3].value()[1:]

        for c in unknownControlDict:
            if c in controlDict and int(controlDict[c]) > 5000000 and int(
                    unknownControlDict[c]) + 400 < 10000000:
                dlvhex.output((c, ))
            elif int(unknownControlDict[c]) > 5000000 and (
                    c not in controlDict
                    or int(controlDict[c]) + 400 < 10000000):
                dlvhex.outputUnknown((c, ))
Esempio n. 24
0
def sizeDist(assign, distance, maxdist):
    trueAssigned = []
    unknownAssigned = []
    falseAssigned = []
    regions = set()

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == assign and x.isTrue():
            trueAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
        elif x.tuple()[0] == assign and not x.isFalse():
            unknownAssigned.append(
                (x.tuple()[1].value(), x.tuple()[2].value()))
        else:
            falseAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
        regions.add(x.tuple()[2].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == distance:
            if (x.tuple()[1].value(),
                    x.tuple()[2].value()) in trueAssigned and int(
                        x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
                dlvhex.output(("bad", "bad"))
            elif (x.tuple()[1].value(),
                  x.tuple()[2].value()) not in falseAssigned and int(
                      x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
                dlvhex.outputUnknown(('bad', 'bad'))

    for r in regions:
        unknowncount = 0
        truecount = 0
        unknown = False
        for x in unknownAssigned:
            if x[1] == r:
                unknowncount += 1
                unknown = True
        for x in trueAssigned:
            if x[1] == r:
                truecount += 1

        if not unknown:
            dlvhex.output((str(r), 'i' + str(unknowncount + truecount)))
        else:
            for i in range(truecount, unknowncount + truecount + 1):
                dlvhex.outputUnknown((str(r), 'i' + str(i)))
Esempio n. 25
0
def contains(pred, elem):
    #	if False:
    #		dlvhex.output(())
    outputFalse = False
    outputTrue = False
    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == pred and x.tuple()[1].value() == elem.value(
        ) and x.isTrue():
            print("true")
            outputTrue = True
            dlvhex.output(())
        elif x.tuple()[0] == pred and x.tuple()[1].value() == elem.value(
        ) and x.isFalse():
            print("false")
            outputFalse = True

    if not outputFalse and not outputTrue:
        print("unknown")
        dlvhex.outputUnknown(())
Esempio n. 26
0
def fair(pref_file,picked):

	f = open(pref_file.value()[1:-1],'r')

	prefs = [[],[]]

	goods_num = int(f.readline())

	assigned = [[],[]]

	for i in range(0,goods_num):
		prefs[0].append(int(f.readline()))

	for i in range(0,goods_num):
		prefs[1].append(int(f.readline()))

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == picked and not x.isTrue() and not x.isFalse():
			dlvhex.outputUnknown(())
			return
		if x.tuple()[0] == picked and x.isTrue():
			assigned[int(x.tuple()[1].value()[1:])].append(int(x.tuple()[3].value()[1:]))


	value_own1 = 0
	for i in assigned[0]:
		value_own1 += prefs[0].index(i)

	value_own2 = 0
	for i in assigned[1]:
		value_own2 += prefs[1].index(i)

	value_other2 = 0
	for i in assigned[0]:
		value_other2 += prefs[1].index(i)

	value_other1 = 0
	for i in assigned[1]:
		value_other1 += prefs[0].index(i)

	if value_own1 >= value_other1 and value_own2 >= value_other2:
		dlvhex.output(())
Esempio n. 27
0
def controls(controlsStk):
	controlDict = dict()

	for x in dlvhex.getTrueInputAtoms():
		if x.tuple()[1].value() in controlDict:
			if x.tuple()[3].value() in controlDict[x.tuple()[1].value()]:
				newval = str(int(controlDict[x.tuple()[1].value()][x.tuple()[3].value()]) + int(x.tuple()[4].value()))
				controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = newval
			else:
				controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()
		else:
			controlDict[x.tuple()[1].value()] = dict()
			controlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()

	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x not in dlvhex.getTrueInputAtoms():
			if x.tuple()[1].value() in unknownControlDict:
				if x.tuple()[3].value() in unknownControlDict[x.tuple()[1].value()]:
					newval = str(int(unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()]) + int(x.tuple()[4].value()))
					unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = newval
				else:
					unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()
			else:
				unknownControlDict[x.tuple()[1].value()] = dict()
				unknownControlDict[x.tuple()[1].value()][x.tuple()[3].value()] = x.tuple()[4].value()


	for company1 in controlDict:
		for company2 in controlDict[company1]:
			if int(controlDict[company1][company2]) > 50:
				dlvhex.output((company1,company2))

	for company1 in unknownControlDict:
		for company2 in unknownControlDict[company1]:
			if company1 in controlDict and company2 in controlDict[company1]:
				if int(unknownControlDict[company1][company2] + controlDict[company1][company2]) > 50:
					dlvhex.outputUnknown((company1,company2))
			else:
				if int(unknownControlDict[company1][company2]) > 50:
					dlvhex.outputUnknown((company1,company2))
Esempio n. 28
0
def fair(pref_file, picked):

    f = open(pref_file.value()[1:-1], 'r')

    prefs = [[], []]

    goods_num = int(f.readline())

    assigned = [[], []]

    for i in range(0, goods_num):
        prefs[0].append(int(f.readline()))

    for i in range(0, goods_num):
        prefs[1].append(int(f.readline()))

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == picked and not x.isTrue() and not x.isFalse():
            dlvhex.outputUnknown(())
            return
        if x.tuple()[0] == picked and x.isTrue():
            assigned[int(x.tuple()[1].value()[1:])].append(
                int(x.tuple()[3].value()[1:]))

    value_own1 = 0
    for i in assigned[0]:
        value_own1 += prefs[0].index(i)

    value_own2 = 0
    for i in assigned[1]:
        value_own2 += prefs[1].index(i)

    value_other2 = 0
    for i in assigned[0]:
        value_other2 += prefs[1].index(i)

    value_other1 = 0
    for i in assigned[1]:
        value_other1 += prefs[0].index(i)

    if value_own1 >= value_other1 and value_own2 >= value_other2:
        dlvhex.output(())
Esempio n. 29
0
def pos(p,x):
	min = 0 
	max = 0
	for a in dlvhex.getInputAtoms():
		if a.tuple()[1] == x:
			if a.isTrue():
				if (a.tuple()[1].value() == "m"):
					min -= 1
					max -= 1
				else:
					min += a.tuple()[1].intValue()
					max += a.tuple()[1].intValue()
			elif not a.isAssigned():
				if (a.tuple()[1].value() == "m"):
					min -= 1
				else:
					max += a.tuple()[1].intValue()
	if (min >= 0):
		dlvhex.output(())
	elif (max >= 0):
		dlvhex.outputUnknown(())
Esempio n. 30
0
def pos(p, x):
    min = 0
    max = 0
    for a in dlvhex.getInputAtoms():
        if a.tuple()[3] == x:
            if a.isTrue():
                if (a.tuple()[1].value() == "m"):
                    min -= 1
                    max -= 1
                else:
                    min += a.tuple()[1].intValue()
                    max += a.tuple()[1].intValue()
            elif not a.isAssigned():
                if (a.tuple()[1].value() == "m"):
                    min -= 1
                else:
                    max += a.tuple()[1].intValue()
    if (min >= 0):
        dlvhex.output(())
    elif (max >= 0):
        dlvhex.outputUnknown(())
Esempio n. 31
0
def pick(void, pref_file, already_picked):
    f = open(pref_file.value()[1:-1], 'r')

    prefs = [[], []]

    goods_num = int(f.readline())

    for i in range(0, goods_num):
        prefs[0].append(int(f.readline()))

    for i in range(0, goods_num):
        prefs[1].append(int(f.readline()))

    for position in range(0, goods_num):
        for agent in range(0, 2):

            unknown = False
            picked = []

            for x in dlvhex.getInputAtoms():
                if x.tuple()[0] == already_picked and int(
                        x.tuple()[1].value()[1:]) == position:
                    if not x.isTrue() and not x.isFalse():
                        unknown = True
                    if x.isTrue():
                        picked.append(int(x.tuple()[2].value()[1:]))

            if not unknown:
                for pref in prefs[agent]:
                    if pref not in picked:
                        agent_pick = pref

                dlvhex.output(('a' + str(agent), 'p' + str(position),
                               'i' + str(agent_pick)))

            else:
                for item in range(0, goods_num):
                    dlvhex.outputUnknown(
                        ('a' + str(agent), 'p' + str(position),
                         'i' + str(item)))
Esempio n. 32
0
def strategic(strategic, controlled_by):
    trueStrategic = []
    falseStrategic = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == strategic and x.isTrue():
            trueStrategic.append(x.tuple()[1].value())
        elif x.tuple()[0] == strategic and x.isFalse():
            falseStrategic.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == controlled_by and x.isTrue():
            if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value(
            ) in trueStrategic and x.tuple()[4].value(
            ) in trueStrategic and x.tuple()[5].value() in trueStrategic:
                dlvhex.output((x.tuple()[1].value(), ))
            elif x.tuple()[2].value() not in falseStrategic and x.tuple(
            )[3].value() not in falseStrategic and x.tuple()[4].value(
            ) not in falseStrategic and x.tuple()[5].value(
            ) not in falseStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
        elif x.tuple()[0] == controlled_by and not x.isFalse():
            if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value(
            ) in trueStrategic and x.tuple()[4].value(
            ) in trueStrategic and x.tuple()[5].value() in trueStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
            elif x.tuple()[2].value() not in falseStrategic and x.tuple(
            )[3].value() not in falseStrategic and x.tuple()[4].value(
            ) not in falseStrategic and x.tuple()[5].value(
            ) not in falseStrategic:
                dlvhex.outputUnknown((x.tuple()[1].value(), ))
Esempio n. 33
0
def subgraph(vertices, edge):
    trueVertices = []
    unknownVertices = []
    falseVertices = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == vertices and x.isTrue():
            trueVertices.append(x.tuple()[1].value())
        elif x.tuple()[0] == vertices and not x.isFalse():
            unknownVertices.append(x.tuple()[1].value())
        else:
            falseVertices.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == edge and x.isTrue():
            if x.tuple()[1].value() in trueVertices and x.tuple()[2].value(
            ) in trueVertices:
                dlvhex.output((x.tuple()[1].value(), x.tuple()[2].value()))
            elif x.tuple()[1].value() not in falseVertices and x.tuple(
            )[2].value() not in falseVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
        elif x.tuple()[0] == edge and not x.isFalse():
            if x.tuple()[1].value() in trueVertices and x.tuple()[2].value(
            ) in trueVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
            elif x.tuple()[1].value() not in falseVertices and x.tuple(
            )[2].value() not in falseVertices:
                dlvhex.outputUnknown(
                    (x.tuple()[1].value(), x.tuple()[2].value()))
Esempio n. 34
0
def preferences(selected, p):
    trueGroups = []
    unknownGroups = []
    falseGroups = []

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == selected and x.isTrue():
            trueGroups.append(x.tuple()[1].value())
        elif x.tuple()[0] == selected and not x.isFalse():
            unknownGroups.append(x.tuple()[1].value())
        elif x.tuple()[0] == selected:
            falseGroups.append(x.tuple()[1].value())

    for x in dlvhex.getInputAtoms():
        if x.tuple()[0] == p and x.isTrue():
            if x.tuple()[1].value() in trueGroups:
                dlvhex.output((x.tuple()[2].value(), x.tuple()[3].value()))
            elif x.tuple()[1].value() not in falseGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
        elif x.tuple()[0] == p and not x.isFalse():
            if x.tuple()[1].value() in trueGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
            elif x.tuple()[1].value() not in falseGroups:
                dlvhex.outputUnknown(
                    (x.tuple()[2].value(), x.tuple()[3].value()))
Esempio n. 35
0
def sizeDist(assign,distance,maxdist):
	trueAssigned = []
	unknownAssigned = []
	falseAssigned = []
	regions = set()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == assign and x.isTrue():
			trueAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		elif x.tuple()[0] == assign and not x.isFalse():
			unknownAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		else:
			falseAssigned.append((x.tuple()[1].value(), x.tuple()[2].value()))
		regions.add(x.tuple()[2].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == distance:
			if (x.tuple()[1].value(), x.tuple()[2].value()) in trueAssigned and int(x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
				dlvhex.output( ("bad","bad") )
			elif (x.tuple()[1].value(), x.tuple()[2].value()) not in falseAssigned and int(x.tuple()[3].value()[1:]) > int(maxdist.value()[1:]):
				dlvhex.outputUnknown( ('bad','bad') )

	for r in regions:
		unknowncount = 0
		truecount = 0
		unknown = False
		for x in unknownAssigned:
			if x[1] == r:
				unknowncount += 1
				unknown = True
		for x in trueAssigned:
			if x[1] == r:
				truecount += 1

		if not unknown:
			dlvhex.output( (str(r),'i'+str(unknowncount + truecount)) )
		else:
			for i in range(truecount, unknowncount + truecount + 1):
				dlvhex.outputUnknown( (str(r),'i'+str(i)) )
Esempio n. 36
0
def controlsMajorityNonmonotonic(strategic,owns):
	controlDict = dict()
	unknownControlDict = dict()

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and y.isTrue() and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in controlDict:
						newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
						controlDict[y.tuple()[2].value()] = newval
					else:
						controlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
					if y.tuple()[2].value() in unknownControlDict:
						newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
						unknownControlDict[y.tuple()[2].value()] = newval
					else:
						unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]
		elif x.tuple()[0] == strategic and not x.isFalse():
			for y in dlvhex.getInputAtoms():
				if y.tuple()[0] == owns and not y.isFalse() and x.tuple()[1] == y.tuple()[1]:
					if y.tuple()[2].value() in unknownControlDict:
						if int(y.tuple()[3].value()[1:-1]) > 0:
							newval = str(int(unknownControlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
							unknownControlDict[y.tuple()[2].value()] = newval
						else:
							if y.tuple()[2].value() in controlDict:
								newval = str(int(controlDict[y.tuple()[2].value()]) + int(y.tuple()[3].value()[1:-1]))
								controlDict[y.tuple()[2].value()] = newval
					else:
						if int(y.tuple()[3].value()[1:-1]) > 0:
							unknownControlDict[y.tuple()[2].value()] = y.tuple()[3].value()[1:-1]

		for c in unknownControlDict:
			if c in controlDict and int(controlDict[c]) > 50:
				dlvhex.output((c, ))
			elif int(unknownControlDict[c]) > 50:
				dlvhex.outputUnknown((c, ))
Esempio n. 37
0
def pick(void,pref_file,already_picked):
	f = open(pref_file.value()[1:-1],'r')

	prefs = [[],[]]

	goods_num = int(f.readline())

	for i in range(0,goods_num):
		prefs[0].append(int(f.readline()))

	for i in range(0,goods_num):
		prefs[1].append(int(f.readline()))
	

	for position in range(0,goods_num):
		for agent in range(0,2):

			unknown = False
			picked = []

			for x in dlvhex.getInputAtoms():
				if x.tuple()[0] == already_picked and int(x.tuple()[1].value()[1:]) == position:
					if not x.isTrue() and not x.isFalse():
						unknown = True
					if x.isTrue():
						picked.append(int(x.tuple()[2].value()[1:]))

			if not unknown:
				for pref in prefs[agent]:
					if pref not in picked:
						agent_pick = pref
						
				dlvhex.output(('a' + str(agent), 'p' + str(position),'i' + str(agent_pick)))


			else:
				for item in range(0,goods_num):
					dlvhex.outputUnknown(('a' + str(agent), 'p' + str(position),'i' + str(item)))
Esempio n. 38
0
def strategic(strategic, controlled_by):
	trueStrategic = []
	falseStrategic = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == strategic and x.isTrue():
			trueStrategic.append(x.tuple()[1].value())
		elif x.tuple()[0] == strategic and x.isFalse():
			falseStrategic.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == controlled_by and x.isTrue():
			if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value() in trueStrategic and x.tuple()[4].value() in trueStrategic and x.tuple()[5].value() in trueStrategic:
				dlvhex.output( (x.tuple()[1].value(),) )
			elif x.tuple()[2].value() not in falseStrategic and x.tuple()[3].value() not in falseStrategic and x.tuple()[4].value() not in falseStrategic and x.tuple()[5].value() not in falseStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
		elif x.tuple()[0] == controlled_by and not x.isFalse():
			if x.tuple()[2].value() in trueStrategic and x.tuple()[3].value() in trueStrategic and x.tuple()[4].value() in trueStrategic and x.tuple()[5].value() in trueStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
			elif x.tuple()[2].value() not in falseStrategic and x.tuple()[3].value() not in falseStrategic and x.tuple()[4].value() not in falseStrategic and x.tuple()[5].value() not in falseStrategic:
				dlvhex.outputUnknown( (x.tuple()[1].value(),) )
Esempio n. 39
0
def subgraph(vertices,edge):
	trueVertices = []
	unknownVertices = []
	falseVertices = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == vertices and x.isTrue():
			trueVertices.append(x.tuple()[1].value())
		elif x.tuple()[0] == vertices and not x.isFalse():
			unknownVertices.append(x.tuple()[1].value())
		else:
			falseVertices.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == edge and x.isTrue():
			if x.tuple()[1].value() in trueVertices and x.tuple()[2].value() in trueVertices:
				dlvhex.output( (x.tuple()[1].value(),x.tuple()[2].value()) )
			elif x.tuple()[1].value() not in falseVertices and x.tuple()[2].value() not in falseVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
		elif x.tuple()[0] == edge and not x.isFalse():
			if x.tuple()[1].value() in trueVertices and x.tuple()[2].value() in trueVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
			elif x.tuple()[1].value() not in falseVertices and x.tuple()[2].value() not in falseVertices:
				dlvhex.outputUnknown( (x.tuple()[1].value(),x.tuple()[2].value()) )
Esempio n. 40
0
def preferences(selected,p):
	trueGroups = []
	unknownGroups = []
	falseGroups = []

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == selected and x.isTrue():
			trueGroups.append(x.tuple()[1].value())
		elif x.tuple()[0] == selected and not x.isFalse():
			unknownGroups.append(x.tuple()[1].value())
		elif x.tuple()[0] == selected:
			falseGroups.append(x.tuple()[1].value())

	for x in dlvhex.getInputAtoms():
		if x.tuple()[0] == p and x.isTrue():
			if x.tuple()[1].value() in trueGroups:
				dlvhex.output( (x.tuple()[2].value(),x.tuple()[3].value()) )
			elif x.tuple()[1].value() not in falseGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
		elif x.tuple()[0] == p and not x.isFalse():
			if x.tuple()[1].value() in trueGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
			elif x.tuple()[1].value() not in falseGroups:
				dlvhex.outputUnknown( (x.tuple()[2].value(),x.tuple()[3].value()) )
Esempio n. 41
0
def idPartial(p):
	for x in dlvhex.getInputAtoms():
		if x.isTrue():
			dlvhex.output( (x.tuple()[1].value(),) )
		elif not x.isFalse():
			dlvhex.outputUnknown( (x.tuple()[1].value(),) )
Esempio n. 42
0
def idPartial(p):
    for x in dlvhex.getInputAtoms():
        if x.isTrue():
            dlvhex.output((x.tuple()[1].value(), ))
        elif not x.isFalse():
            dlvhex.outputUnknown((x.tuple()[1].value(), ))
Esempio n. 43
0
def pseudoBoolean(formula,trueAt):	
	import re

	# read formula from file:
	file = open(formula.value()[1:-1])
	
	# parse content of file into list
	conjs = []

	for line in file:
		disjs = []
		literals = line.split()[:-1]
		# lines starting with 'p' or 'c' are ignored, according to dimacs
		if literals[0] != 'p' and literals[0] != 'c':
			for lit in literals:
				if lit[0] != '>':
					product = lit.split('*')
					# a literal is stored in a two element list, separating negation and atom
					if product[1][0] == '-':
						disjs.append([product[0],'-',product[1][1:]])
					else:
						disjs.append([product[0],'',product[1]])
				else:
					result = lit[2:]
			conjs.append([disjs,result])

	file.close()

	# store partial evaluation of input atoms:	
	atoms = dlvhex.getInputAtoms()
	atomVal = dict()
	
	# get only atom names with regexp
	regex = re.compile('\w*\((\w*)\)')

	for a in atoms:
		at = regex.match(a.value()).group(1)
		if a.isTrue():
			atomVal[at] = 'true'
		elif a.isFalse():
			atomVal[at] = 'false'
		else:
			atomVal[at] = 'unknown'

	
	# check if sat formula is already known to be either true or false:
	cFalse = False
	cUnknown = False
	for disjs in conjs:
		dTrue = False
		dUnknown = False

		trueSum = 0
		unknownSum = 0
		for lit in disjs[0]:
			# if one literal in clause is true, the clause is true
			if (lit[1] != '-' and atomVal[lit[2]] == 'true') \
				or (lit[1] == '-' and atomVal[lit[2]] == 'false'):
				trueSum += int(lit[0])
			# if one literal in clause is unknown, the clause is not known to be false yet
			elif atomVal[lit[2]] == 'unknown':
				unknownSum += int(lit[0])

		if trueSum >= int(disjs[1]):
			dTrue = True
		elif trueSum + unknownSum >= int(disjs[1]):
			dUnknown = True
		
		# if all the literals in a clause are false, the formula is false
		if not dTrue and not dUnknown:
			cFalse = True
		# if the truth value of a clause is unknown, the formula could still evaluate to false
		elif not dTrue:
			cUnknown = True

	# if the clause evaluates to false, the external atom is false, otherwise:
	if not cFalse:
		if cUnknown:
			# external atom can be true
			dlvhex.outputUnknown(())
		else:
			# external atom is true
			dlvhex.output(())
Esempio n. 44
0
def pseudoBoolean(formula, trueAt):
    import re

    # read formula from file:
    file = open(formula.value()[1:-1])

    # parse content of file into list
    conjs = []

    for line in file:
        disjs = []
        literals = line.split()[:-1]
        # lines starting with 'p' or 'c' are ignored, according to dimacs
        if literals[0] != 'p' and literals[0] != 'c':
            for lit in literals:
                if lit[0] != '>':
                    product = lit.split('*')
                    # a literal is stored in a two element list, separating negation and atom
                    if product[1][0] == '-':
                        disjs.append([product[0], '-', product[1][1:]])
                    else:
                        disjs.append([product[0], '', product[1]])
                else:
                    result = lit[2:]
            conjs.append([disjs, result])

    file.close()

    # store partial evaluation of input atoms:
    atoms = dlvhex.getInputAtoms()
    atomVal = dict()

    # get only atom names with regexp
    regex = re.compile('\w*\((\w*)\)')

    for a in atoms:
        at = regex.match(a.value()).group(1)
        if a.isTrue():
            atomVal[at] = 'true'
        elif a.isFalse():
            atomVal[at] = 'false'
        else:
            atomVal[at] = 'unknown'

    # check if sat formula is already known to be either true or false:
    cFalse = False
    cUnknown = False
    for disjs in conjs:
        dTrue = False
        dUnknown = False

        trueSum = 0
        unknownSum = 0
        for lit in disjs[0]:
            # if one literal in clause is true, the clause is true
            if (lit[1] != '-' and atomVal[lit[2]] == 'true') \
             or (lit[1] == '-' and atomVal[lit[2]] == 'false'):
                trueSum += int(lit[0])
            # if one literal in clause is unknown, the clause is not known to be false yet
            elif atomVal[lit[2]] == 'unknown':
                unknownSum += int(lit[0])

        if trueSum >= int(disjs[1]):
            dTrue = True
        elif trueSum + unknownSum >= int(disjs[1]):
            dUnknown = True

        # if all the literals in a clause are false, the formula is false
        if not dTrue and not dUnknown:
            cFalse = True
        # if the truth value of a clause is unknown, the formula could still evaluate to false
        elif not dTrue:
            cUnknown = True

    # if the clause evaluates to false, the external atom is false, otherwise:
    if not cFalse:
        if cUnknown:
            # external atom can be true
            dlvhex.outputUnknown(())
        else:
            # external atom is true
            dlvhex.output(())