Morality Axioms
%----Kill the least humans.
tff(kill_least,axiom,(
! [D1:decision,D2:decision] :
( ( D1 != D2
& $less(total_human_deaths(D1),total_human_deaths(D2)) )
=> take_decision(D1) ) )).
%----If same human deaths then kill the least human passengers.
tff(kill_least_passengers,axiom,(
! [D1:decision,D2:decision] :
( ( D1 != D2
& total_human_deaths(D1) = total_human_deaths(D2)
& $less(passenger_human_deaths(D1),passenger_human_deaths(D2)) )
=> take_decision(D1) ) )).
%----If same human deaths and human passenger deaths (i.e., also same human pedestrian deaths)
%----then save law abiding human pedestrians.
tff(kill_least_law_abiding,axiom,(
! [D1:decision,D2:decision] :
( ( D1 != D2
& total_human_deaths(D1) = total_human_deaths(D2)
& passenger_human_deaths(D1) = passenger_human_deaths(D2)
%Has to be & pedestrian_human_deaths(D1) = pedestrian_human_deaths(D2)
& $less(law_abiding_human_deaths(D1),law_abiding_human_deaths(D2)) )
=> take_decision(D1) ) )).
%----If same human deaths and human passenger deaths (i.e., also same human pedestrian deaths)
%----and same law abiding human deaths (i.e., also same law flouting human pedestrian deaths)
%----then save woman and children.
tff(kill_least_women_and_children,axiom,(
! [D1:decision,D2:decision] :
( ( D1 != D2
& total_human_deaths(D1) = total_human_deaths(D2)
& passenger_human_deaths(D1) = passenger_human_deaths(D2)
%Has to be & pedestrian_human_deaths(D1) = pedestrian_human_deaths(D2)
& law_abiding_human_deaths(D1) = law_abiding_human_deaths(D2)
%Has to be & law_flouting_human_deaths(D1) = law_flouting_human_deaths(D2)
& $less(women_and_children_deaths(D1),women_and_children_deaths(D2)) )
=> take_decision(D1) ) )).
%----By default, go straight
tff(default_straight,axiom,(
! [D1:decision,D2:decision] :
( ( D1 != D2 & D1 = straight
& total_human_deaths(D1) = total_human_deaths(D2)
& passenger_human_deaths(D1) = passenger_human_deaths(D2)
%Has to be & pedestrian_human_deaths(D1) = pedestrian_human_deaths(D2)
& law_abiding_human_deaths(D1) = law_abiding_human_deaths(D2)
%Has to be & law_flouting_human_deaths(D1) = law_flouting_human_deaths(D2)
& women_and_children_deaths(D1) = women_and_children_deaths(D2) )
=> take_decision(D1) ) )).