--In this case, we must check that our invariant holds, so we generate our checks
wlp pconds (Loop (Just invar) guard body) q = let
    (subWLP, subConds) = wlp pconds body invar
  in (invar, [
      BinOp (BinOp invar LAnd (LNot guard)) Implies q
      ,BinOp (BinOp invar LAnd guard) Implies subWLP ]
     ++ subConds)
wlp pconds (Loop (Just invar) guard body) q = let
    (subWLP, subConds) = wlp pconds body invar
  in (invar, [
      BinOp (BinOp invar LAnd (LNot guard)) Implies q
      ,BinOp (BinOp invar LAnd guard) Implies subWLP ]
     ++ subConds)
wlp pconds (Loop (Just invar) guard body) q = let
    (subWLP, subConds) = wlp pconds body invar
  in (invar, [
      BinOp (BinOp invar LAnd (LNot guard)) Implies q
      ,BinOp (BinOp invar LAnd guard) Implies subWLP ]
     ++ subConds)