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)
        """{ 1.OK x < 0         premise
             2.OK ans == 0 - x  premise
             3.OK ans > 0       algebra 1 2
             4.OK ans == x or ans == 0 - x    algebra 2
             5.OK return 3 4                  # lets us collect two facts
        }"""
        #PREMISES FOR NEXT LINE: 
        # (ans > 0)
        # ((ans == x) or (ans == (0 - x)))
    else :
        #PREMISES FOR ELSE-ARM: 
        # not (x < 0)
        # (x != 0)
        """{ 1.OK x != 0       premise
             2.OK not(x < 0)   premise
             3.OK x > 0        algebra 1 2
        }"""
        #PREMISES FOR NEXT LINE: 
        # (x > 0)
        ans = x
        #PREMISES FOR ATTACHED PROOF, IF ANY: 
        # (ans == x)
        # (x > 0)
        """{ 1.OK  ans == x   premise
             2.OK  x > 0      premise
             3.OK  ans > 0    subst 1 2
             4.OK  ans == x or ans == 0 - x   algebra 1
             5.OK  return 3 4
        }"""
        #PREMISES FOR NEXT LINE: 
        # (ans > 0)
        # ((ans == x) or (ans == (0 - x)))
    #PREMISES FOR NEXT LINE: 
    # (ans > 0)
    # ((ans == x) or (ans == (0 - x)))
    # (x != 0)
    # in each arm, we proved  ans == x or ans == 0 - x  and also  ans > 0
    # the checker uses these facts to prove the postcondition.OK
    # We can write the proof if we wish:
    """{ 1. ans == x or ans == 0 - x   premise
         2.OK ans > 0                      premise
         3.OK ans > 0 and (ans == x or ans == 0 - x)  andi 2 1
    }"""
    #PREMISES FOR NEXT LINE: 
    # ((ans > 0) and ((ans == x) or (ans == (0 - x))))
    # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT POINT OF RETURN
    return ans
    #PREMISES FOR NEXT LINE: 
    # ((ans > 0) and ((ans == x) or (ans == (0 - x))))
    # POSTCONDITION AND ALL GLOBAL INVARIANTS VERIFIED AT END OF FUNCTION
#PREMISES FOR NEXT LINE: