let obtain f cc =
    match lookup f with
      | Defined item -> item
      | Undefined ->
          let c = { ccitem=Cnone ; stable=true ; inners=Iset.empty } in
          Ihmap.replace cofix f c ;
          lock f ; fixpoint c f cc
      | Cyclic c ->
          if recursive f then
            let fs = get_cycle f !stack in
            List.iter (add_cycle fs) (f::fs) ;
            ( current c.ccitem )
          else
            ( fixpoint c f cc )