anchor.diff:          (* To do the base downclosure, we need to replace all instances of the
              iterator in the definition with 0. *)
           let baseDefn = mapOverIteratorUses (fun _ -> AInt 0L) iterator defn
  +
  +        // TODO(CaptainHayashi): defer check here.
  +        let empDefn = match empDefn with | None -> failwith "TODO: defer" | Some e -> e
   
           (* Base downclosure for a view V[n](x):
                D(emp) => D(V[0](x))
  
positive.code:             | Some (Int v) -> ok v
              | Some v -> fail (BadIteratorType ([func], typeOf v))
  
          // If empDefn is undefined, it becomes true by the theory.
          let empDefnT = withDefault BTrue empDefn
  
          (* No point checking downclosure of an indefinite viewdef.
             This job is delegated to the indefinite-proof backends, like HSF and
             MuZ3, which must make sure their synthesised definitions are
  
negative.code:             let checkedDefnR =
                  bind
                      (fun i ->
                          checkBaseDownclosure empDefn i func d
                          >>= uncurry (checkInductiveDownclosure i))
                      checkedIterR
              lift (pairMap id Some) checkedDefnR
  