Is the second law 'broken'?
Maybe that's just where computational logic and the English language don't mix?
The below logic may be a bit buggy and/or inefficient but is an interpretation of the first 'law' that could explain the behaviour of the robot in question.
When the Law1 function is called, the robot analyses the conditions of all humans in some list (all humans that it's aware of maybe); It assesses the severity of danger that they are in and compares those; then if there are multiple humans in similar (highest found) severities of danger, it compares each of those humans and determines which is most likely to be successfully helped; And so long as at least one human needs to be protected from harm, law2 is not executed.
Private Sub UpdateBehavior (ByVal humans As List(Of Human), _
ByVal humanOrders As List(Of Order), ByVal pDangers As List(Of pDanger))
Dim bBusy as boolean
bBusy = False
Law1(humans)
If Not bBusy Then Law2(humanOrders)
if Not bBusy Then Law3(pDangers)
Exit Sub
Private Function Law1 (ByVal humans As List(Of Human)) As Boolean
Dim human as Human
Dim targetHuman as Human
Try
Set targetHuman = Nothing
'loop listed humans
For Each human In humans
If human.IsInDanger() Then
'Enumerate 'danger' into predetermined severities/urgencies
'(eg. Danger of going-hungry > falling-over > being-stabbed)
'and compare
If targetHuman.DangerQuantification() < human.DangerQuantificationThen()
'If the comparison human's amount of danger is discernibly greater
'make that human the new target
Set targetHuman = human
'Where both humans are in equal quantifiable amounts of danger
Else If targetHuman.DangerQuantification() = human.DangerQuantification() then
'CompareValueOfHumanLife() 'Can-Of-Worms INTENTIONALLY REMOVED!
If rescueSuccessRate(human) > rescueSuccessRate(targetHuman)
'Target the human where rate of successful harm prevention is higher
Set targetHuman = human
End If
End If
Else
'Set the first human found to be in danger as the initial target
targetHuman = human
End If
Next human
If Not targetHuman Is Nothing then
Law1 = True
Rescue(TargetHuman)
else
Law1 = False
End If
AvoidHarmingHumans()
catch
initiateSelfDestruct()
end try
End Function
So did the robot break the second law? Some people might say "The robot acted contrary to the plain English definition of the law ant therefore it was broken." while some other people might say "The laws are just functions. Law1 was executed. Law2 was not. The robot obeyed its programming and the second law simply did not apply."