eq(X,X). yes(y). no(n). high(high). low(low). reckless_m(reckless). negligent_m(negligent). intend_m(intend). greater(X,Y) :- X > Y. cause(X) :- produce_harm(X,H), yes(H). cause(X) :- necessary_for_harm(X,H), yes(H). cause(X) :- sufficient_for_harm(X,H), yes(H). reponsible(X) :- cause(X), not(accident(X)), voluntary(X), foreseeable(X), not(intervening_cause(X)). accident(X) :- not(intend(X)), not(reckless(X)), not(negligent(X)). foreseeable(X) :- foreseeability(X,F), high(F). foreseeable(X) :- foreseeability(X,F), low(F). /* foreseeable(X) :- */ /* foreseeability(X,F), */ /* yes(F). */ reckless(X) :- mental_state(X,M), reckless_m(M). reckless(X) :- careful(X,C), no(C), not(strong_intend(X)), foreseeability(X,F), high(F). negligent(X) :- mental_state(X,M), negligent_m(M). negligent(X) :- careful(X,C), no(C), not(strong_intend(X)), foreseeability(X,F), low(F). intend(X) :- strong_intend(X). intend(X) :- weak_intend(X). strong_intend(X) :- mental_state(X,M), intend_m(M). strong_intend(X) :- plan_known(X,Y), plan_include_harm(X,Y), harm_caused_as_planned(X,Y), yes(Y). weak_intend(X) :- weak_intend1(X), not(reckless(X)), not(negligent(X)). weak_intend1(X) :- not(discount_intent(X)). weak_intend1(X) :- monitor(X,Y), yes(Y). weak_intend1(X) :- benefit_protagonist(X,Y), yes(Y). discount_intent(X) :- external_cause(X,Y), yes(Y). voluntary(X) :- external_force(X,Y), no(Y). intervening_cause(X) :- intervening_contribution(X,Y), yes(Y), foresee_intervention(X,Z), no(Z). vicarious(X) :- someone_else_cause_harm(X,Y), outrank_perpetrator(X,Y), control_perpetrator(X,Y), yes(Y). blameworthy(X) :- reponsible(X), not(justified(X)), severity_harm(X,H), benefit_victim(X,V), greater(H,V). vicarious_blame(X) :- vicarious(X), not(justified(X)), severity_harm(X,H), benefit_victim(X,V), greater(H,V). justified(X) :- achieve_goal(X,Y), yes(Y), goal_outweigh_harm(X,Y), goal_achieveable_less_harmful(X,Z), no(Z). guilty(X) :- blameworthy(X). guilty(X) :- vicarious_blame(X).