anchor.diff:  type View = GenView<Z3.Expr>
   
   /// A conditional (flat or if-then-else) view.
  -type CondView =
  +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}
  +type Guarded<'a> = 
  +    { GCond : Z3.BoolExpr
  +      GItem : 'a }
   
   /// A guarded view.
   type GuarView = Guarded<View>
  
positive.code: open Starling.Collections
  
  /// A 'generic' view, parameterised over its parameter type.
  type GenView<'a> =
      // TODO(CaptainHayashi): rename to ViewDef.
      {VName: string
       VParams: 'a list}
  
  /// A view definition, whose parameters are type-string pairs.
  type ViewDef = GenView<Var.Type * string>
  
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>
  