|  | @ -0,0 +1,32 @@ | 
		
	
		
			
				|  |  |  |  |  | # coding: utf-8 | 
		
	
		
			
				|  |  |  |  |  | from z3 import * | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | ################################# Burglars ################################## | 
		
	
		
			
				|  |  |  |  |  | # create the solver | 
		
	
		
			
				|  |  |  |  |  | solver = Solver() | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | ############################################################################# | 
		
	
		
			
				|  |  |  |  |  | # (1) Ed: "Fred did it, and Ted is innocent". | 
		
	
		
			
				|  |  |  |  |  | # (2) Fred: "If Ed is guilty , then so is Ted". | 
		
	
		
			
				|  |  |  |  |  | # (3) Ted: "Im innocent, but at least one of the others is guilty". | 
		
	
		
			
				|  |  |  |  |  | ############################################################################# | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | # TODO | 
		
	
		
			
				|  |  |  |  |  | # Create boolean variables for each of the culprits | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | # TODO | 
		
	
		
			
				|  |  |  |  |  | # Add constraints to the solver representing the statements from above | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | res = solver.check() | 
		
	
		
			
				|  |  |  |  |  | if res != sat: | 
		
	
		
			
				|  |  |  |  |  |     print("unsat") | 
		
	
		
			
				|  |  |  |  |  |     sys.exit(1) | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | print(solver) | 
		
	
		
			
				|  |  |  |  |  | m = solver.model() | 
		
	
		
			
				|  |  |  |  |  | for d in m.decls(): | 
		
	
		
			
				|  |  |  |  |  |     print("%s -> %s" % (d, m[d])) | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | print("\n" + str(m)) |