+
+ | EWith (e1, e2) =>
+ let
+ val t1 = whnorm (checkExp G e1)
+ val t2 = whnorm (checkExp G e2)
+ in
+ case t1 of
+ (TNested (pd, pr), _) =>
+ (case t2 of
+ (TAction (p, d, r), _) =>
+ if predImplies (pd, p) then
+ (TAction (pr, d, r), loc)
+ else
+ (dte (WrongPred ("nested action",
+ pd,
+ p));
+ (TError, loc))
+ | (TError, _) => t2
+ | _ =>
+ (dte (WrongForm ("Body of nested action",
+ "action",
+ e2,
+ t2,
+ NONE));
+ (TError, loc)))
+ | (TError, _) => t1
+ | _ =>
+ (dte (WrongForm ("Container of nested action",
+ "action",
+ e1,
+ t1,
+ NONE));
+ (TError, loc))
+ end
+
+ | ESkip => (TAction ((CPrefix (CRoot, loc), loc),
+ SM.empty, SM.empty), loc)