anchor.diff:                Requires = requires
                 Ensures = ensures
                 Commands = commands } )
  -        varsR requiresR ensuresR commandsR
  +        varsR requiresR ensuresR framedCommandsR
   
   
   /// Generate a grasshopper model (currently doesn't do anything) 
  
positive.code:     let requiresR = ok term.SymBool.WPre
      let ensuresR = ok term.SymBool.Goal
      let commandsR = grassMicrocode term.Original.Cmd.Microcode
      let varsR = findVars term
  
      lift4
  
negative.code:     lift List.concat (collect (List.map grassMicrocodeEntry routine))
  
  /// <summary>
  ///     Generates pure assumptions for the Starling variable frame associated
  ///     with a given state assignment map.
  /// </summary>
  /// <param name="assignMap">The map to convert to a frame.</param>
  /// <returns>
  ///     If all went well, a list of Grasshopper commands pure-assuming the
  ///     variable frame.
  /// </returns>
  let grassFrame
    (assignMap : Map<TypedVar, MarkedVar>)
    : Result<GrassCommand list, Error> =
      // We can just adapt the normal frame generator.
      let normalFrame = makeFrame assignMap
  
      let grassify x =
          // Pure assumption.
          let grassifyR =
              liftWithoutContext
                  (Starling >> ok)
                  (tliftOverSym >> tliftOverCTyped >> tliftToExprDest >> tliftToBoolSrc)
                  (normalBool x)
          lift PureAssume (mapMessages Traversal grassifyR)
  
      collect (List.map grassify normalFrame)
  
  /// <summary>
  ///     Generates a Grasshopper term.
  /// </summary>
  /// <param name="svars">The map of shared variables in the model.</param>
  