# simple example that shows how a function can reference a global var pi = 3 # sorry --- the checker handles ints only )-: #PREMISES FOR ATTACHED PROOF, IF ANY: # (pi == 3) #PREMISES FOR NEXT LINE: # (pi == 3) # a read-only global variable acts like an extra parameter: def circ(diameter) : """{ pre diameter >= 0 and pi >= 3 post answer == pi * diameter return answer }""" #PREMISES FOR NEXT LINE: # ((diameter >= 0) and (pi >= 3)) answer = pi * diameter #PREMISES FOR ATTACHED PROOF, IF ANY: # (answer == (pi * diameter)) # ((diameter >= 0) and (pi >= 3)) #PREMISES FOR NEXT LINE: # (answer == (pi * diameter)) # ((diameter >= 0) and (pi >= 3)) # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT POINT OF RETURN return answer #PREMISES FOR NEXT LINE: # (answer == (pi * diameter)) # ((diameter >= 0) and (pi >= 3)) # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT END OF FUNCTION #PREMISES FOR NEXT LINE: # (pi == 3) """{ 1.OK pi == 3 premise 2.OK pi >= 3 algebra 1 }""" #PREMISES FOR NEXT LINE: # (pi >= 3) # the checker will use p >= 3 plus its knowledge that 2 >= 0 to # validate that the precondition holds true for the upcoming call to circ: x = circ(2) #PREMISES FOR ATTACHED PROOF, IF ANY: # (x == (pi * 2)) # (pi >= 3) """{ 1.OK x == pi * 2 premise }""" # we gain the postcondition as new knowledge #PREMISES FOR NEXT LINE: # (x == (pi * 2))