I'll use the new syntax for local variable declaration Recall the example from class Consider c = var x=True in ( (var x=1 in (while x < 1 do x:= x+1)) ; x:= False) Assume G= {} We derive G |- c : Cmd Here's the proof tree: G'' |- x : Int G'' |- 1 : Int (Op) ----------------- G'' |- 1 : Int G'' |- x+1 : Int G'' |- x : Int G'' |- x : Int (Cmp) --------------- (Assign) ----------------- G'' |- x<1 : Bool G'' |- x:= x+1 : Cmd (While) ----------------------------------- G'' |- while x<1 do x:= x+1 G' |- 1 : Int G''=G', x:Int={x : Int} (Newvar) --------------------------------------- G' |- (var x=1 in (Var) G' |- x : Bool (while x < 1 do x:= x+1)) (Seq) ---------------------------------------------------- G' |- (var x=1 in (while x < 1 do x:= x+1)) ; x:= False) G |- True : Bool G'= G,x:Bool = {x:Bool} (Newvar) ----------------------------------------------- G |- var x=True in ( (var x=1 in (while x < 1 do x:= x+1)) ; x:= False) What about? (2) G = { x : Int, y : Bool} c = var x:= true; (y:= x /\ true) (3) G = { x : Int, y : Bool} c = x:= true; (y:= x /\ true) (4) G = {} c = var x:=1; (var x:= x <1; x:= x /\ True)