anchor.diff:  type SemModel = Model<SemAxiom list, Constraint list>
   
   /// Disposes the Z3 context inside a Model.
  -let disposeZ3 model = model.Context.Dispose ()
  +let disposeZ3 model = model.Context.Dispose()
   
   /// Creates a new model that is the input model with a different axiom set.
   /// The axiom set may be of a different type.
  -let withAxioms (axioms: 'y) (model: Model<'x, 'c>): Model<'y, 'c> =
  -    {Context = model.Context
  -     Globals = model.Globals
  -     Locals = model.Locals
  -     VProtos = model.VProtos
  -     DefViews = model.DefViews
  -     Axioms = axioms}
  -
  +let withAxioms (axioms : 'y) (model : Model<'x, 'c>) : Model<'y, 'c> = 
  +    { Context = model.Context
  +      Globals = model.Globals
  +      Locals = model.Locals
  +      VProtos = model.VProtos
  +      DefViews = model.DefViews
  +      Axioms = axioms }
  
positive.code: type View = GenView<Z3.Expr>
  
  /// A conditional (flat or if-then-else) view.
  type CondView =
      // TODO(CaptainHayashi): rename to View.
      | CITEView of Z3.BoolExpr * Multiset<CondView> * Multiset<CondView>
      // TODO(CaptainHayashi): expand to all expressions.
      | CSetView of View
  
  /// A guarded item.
  type Guarded<'a> =
      {GCond: Z3.BoolExpr
       GItem: 'a}
  
  /// A guarded view.
  type GuarView = Guarded<View>
  
negative.code: type ZTerm = Hoare<Z3.BoolExpr, Z3.BoolExpr>
  
  /// A partially resolved axiom.
  type PartAxiom = 
      | PAAxiom of FlatAxiom
      | PAWhile of isDo : bool * expr : Z3.BoolExpr * outer : PartConditionPair * inner : PartHoare<PartAxiom list>
      | PAITE of expr : Z3.BoolExpr * outer : PartConditionPair * inTrue : PartHoare<PartAxiom list> * inFalse : PartHoare<PartAxiom list>
  
  /// Extracts the outer condition pair of a part-axiom.
  let cpairOfPartAxiom = 
      function 
      | PAAxiom { Conditions = c } -> c
      | PAWhile(outer = c) -> c
      | PAITE(outer = c) -> c
  
  /// A parameterised model of a Starling program.
  [<NoComparison>]
  type Model<'a, 'c> = 
      { Context : Z3.Context
        Globals : Var.VarMap
        Locals : Var.VarMap
        Axioms : 'a
        VProtos : Map<string, (Var.Type * string) list>
        // This corresponds to the function D.
        DefViews : 'c }
  
  /// A partly-resolved-axiom model of a Starling program.
  type PartModel = Model<PartAxiom list, Constraint list>
  