import clingo chuong_trinh = """ canh(a,b). canh(b,a). canh(c,d). canh(d,c). toi(a). toi(Y) :- toi(X), canh(X,Y). #show toi/1. """ def tap_toi(nguon_bo_sung=""): bo_giai = clingo.Control(["0"]) bo_giai.add("base", [], chuong_trinh + nguon_bo_sung) bo_giai.ground([("base", [])]) nghiem = [] bo_giai.solve(on_model=lambda m: nghiem.append({str(a) for a in m.symbols(shown=True)})) assert len(nghiem) == 1 return nghiem[0] assert tap_toi() == {"toi(a)", "toi(b)"} assert tap_toi("toi(c).") == {"toi(a)", "toi(b)", "toi(c)", "toi(d)"} print("Chu trình c–d chỉ được tới sau khi bổ sung nguồn c.")