# Note: if you state sensible pre- and post-conditions, and if the # function's body is "simple enough", then the checker will validate the # function unassisted. def absValue(x) : """{ pre x != 0 post ans > 0 and (ans == x or ans == 0 - x) return ans }""" #PREMISES FOR NEXT LINE: # (x != 0) if x < 0 : #PREMISES FOR THEN-ARM: # (x < 0) # (x != 0) ans = 0 - x #PREMISES FOR ATTACHED PROOF, IF ANY: # (ans == (0 - x)) # (x < 0) # (x != 0) #PREMISES FOR NEXT LINE: # (ans == (0 - x)) # (x < 0) # (x != 0) else : #PREMISES FOR ELSE-ARM: # not (x < 0) # (x != 0) ans = x #PREMISES FOR ATTACHED PROOF, IF ANY: # (ans == x) # not (x < 0) # (x != 0) #PREMISES FOR NEXT LINE: # (ans == x) # not (x < 0) # (x != 0) #PREMISES FOR NEXT LINE: # (((ans == (0 - x)) and (x < 0)) or ((ans == x) and not (x < 0))) # (x != 0) # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT POINT OF RETURN return ans #PREMISES FOR NEXT LINE: # (((ans == (0 - x)) and (x < 0)) or ((ans == x) and not (x < 0))) # (x != 0) # ((ans > 0) and ((ans == x) or (ans == (0 - x)))) # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT END OF FUNCTION #PREMISES FOR NEXT LINE: n = readInt() #PREMISES FOR ATTACHED PROOF, IF ANY: # True #PREMISES FOR NEXT LINE: if n == 0 : #PREMISES FOR THEN-ARM: # (n == 0) n = n + 1 #PREMISES FOR ATTACHED PROOF, IF ANY: # (n == (n_old + 1)) # (n_old == 0) """{ 1.OK n == n_old + 1 premise 2.OK n_old == 0 premise 3.OK n != 0 algebra 1 2 }""" #PREMISES FOR NEXT LINE: # (n != 0) else : #PREMISES FOR ELSE-ARM: # not (n == 0) pass #PREMISES FOR NEXT LINE: # not (n == 0) """{ 1.OK not(n == 0) premise 2.OK n != 0 algebra 1 }""" #PREMISES FOR NEXT LINE: # (n != 0) #PREMISES FOR NEXT LINE: # (n != 0) """{ 1.OK n != 0 premise }""" # from the conditional. #PREMISES FOR NEXT LINE: # (n != 0) # This premise proves the precondition, too m = absValue(n) #PREMISES FOR ATTACHED PROOF, IF ANY: # ((m > 0) and ((m == n) or (m == (0 - n)))) # (n != 0) """{ 1.OK m > 0 and (m == n or m == 0 - n) premise # from the function call postcondition 2.OK m > 0 ande 1 }""" #PREMISES FOR NEXT LINE: # (m > 0) # prove here that m > 0