This refers how the arithmetic expression evaluates under sigma. Remember is a mapping from memory locations to integers. ->n -> means evaluates to And n is any integer constant ____________ <5,sigma>->5 ___________________ ->sigma(x) Here x is a variable and sigma(x) is simply applying the sigma to the variable x and getting the integer stored in location x. ->n0 ->n1 ________________________________ n = n0+n1 ->n ______________ ->nu nu is litererally either "true" or "false". Commands: And what commands are interpreted as doing in this model is changing the memory state from something to something else. In other words, the answer or result of a command is the memory state or mapping that results from applying the command. ___________________ ->sigma The skip command makes no change in memory. SIGMA[m/x] matches SIGMA in every way except x maps to the integer m. In C++, if ( (x++) == 7) <== perfectly valid in C. if ( (++x) == 7) <==Changes THEN evaluates. In C, there is no distinction between boolean operators and any other kind of operation. We have the classic operators, like + - * / % But we also have == <= >= < > != && || ! and these are not treated any differently than the operators, they evaluate and return answers that can be used in other expressions. Along these lines, = can also be treated as an operator. It sets a variable to that value and returns that value. if (x=0) {stuff} if (x==0) <== don't say this if (0==x) because if you mistype this it will be a syntax error! x := 0; if (x=0) then x := 1 else x := 2 ____________ ________________ ________________ ___________ <0,sigma>->0 ->0 <0,sigma[0/x]>->0 <1,sigma[0/x]>->1 __________________________ ____________________________________ _______________________________ ->sigma[0/x] ->true ->sigma[1/x] ______________________________________________________________________ ->sigma[1/x] ____________________________________________________________________________________ ->sigma[1/x]