anchor.diff:      opt_is(Is, Ts, Ds, Ls, Fdb, Sub0, Meta, [I|Acc]);
   opt_is([I0 | Is], Ts0, Ds0, Ls, Fdb, Sub0, Meta, Acc) ->
       case simplify(I0, Ts0, Ds0, Ls, Sub0) of
  -        {#b_set{}=I, Ts, Ds, Sub} ->
  -            opt_is(Is, Ts, Ds, Ls, Fdb, Sub, Meta, [I | Acc]);
  -        {_Value, Sub} ->
  +        {#b_set{}=I, Ts, Ds} ->
  +            opt_is(Is, Ts, Ds, Ls, Fdb, Sub0, Meta, [I | Acc]);
  +        Sub when is_map(Sub) ->
               opt_is(Is, Ts0, Ds0, Ls, Fdb, Sub, Meta, Acc)
       end;
   opt_is([], Ts, Ds, _Ls, Fdb, Sub, _Meta, Acc) ->
  
positive.code:     sig_is(Is, Ts, Ds, Ls, Fdb, Sub0, State);
  sig_is([I0 | Is], Ts0, Ds0, Ls, Fdb, Sub0, State) ->
      case simplify(I0, Ts0, Ds0, Ls, Sub0) of
          {#b_set{}, Ts, Ds, Sub} ->
              sig_is(Is, Ts, Ds, Ls, Fdb, Sub, State);
          {_Value, Sub} ->
              sig_is(Is, Ts0, Ds0, Ls, Fdb, Sub, State)
      end;
  sig_is([], Ts, Ds, _Ls, _Fdb, Sub, State) ->
  
negative.code:             I = beam_ssa:normalize(I0),
              Ts = Ts0#{ Dst => beam_types:make_boolean() },
              Ds = Ds0#{ Dst => I },
              {I, Ts, Ds}
      end;
  simplify(#b_set{dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) ->
      Args = simplify_args(Args0, Ts0, Sub),
      I1 = beam_ssa:normalize(I0#b_set{args=Args}),
      case simplify(I1, Ts0) of
          #b_set{}=I2 ->
              I = beam_ssa:normalize(I2),
              Ts = update_types(I, Ts0, Ds0),
              Ds = Ds0#{ Dst => I },
              {I, Ts, Ds};
          #b_literal{}=Lit ->
              Sub#{ Dst => Lit };
          #b_var{}=Var ->
              Sub#{ Dst => Var }
      end.
  
  simplify(#b_set{op={bif,'and'},args=Args}=I, Ts) ->
  