code: def whatsnew(instance,pred):
      '''
      [whatsnew(instance,pred)] is a TermSet equal to [pred] where all predicates
      vlabel and elabel which have a corresponding obs_vlabel and obs_elabel in
      [instance] have been deleted. This function is meant to see which of the invariants
      are not a direct consequence of the observations.
      '''
      accu = TermSet(pred)
      for t in instance:
  
          if t.pred() == 'obs_vlabel':
              [_,e,v,s] = t.explode()
              accu.discard(Term('vlabel',[e,v,s]))
          elif t.p('obs_elabel'):
              [_,j,i,s] = t.explode()
              accu.discard(Term('elabel',[j,i,s]))
      return accf whatsnew(instance,pred):
      '''
      [whatsnew(instance,pred)] is a TermSet equal to [pred] where all predicates
      vlabel and elabel which have a corresponding obs_vlabel and obs_elabel in
      [instance] have been deleted. This function is meant to see which of the invariants
      are not a direct consequence of the observations.
      '''
      accu = TermSet(pred)
      for t in instance:
  
          if t.pred() == 'obs_vlabel':
              [_,e,v,s] = t.explode()
              accu.discard(Term('vlabel',[e,v,s]))
          elif t.p('obs_elabel'):
              [_,j,i,s] = t.explode()
              accu.discard(Term('elabel',[j,i,s]))
      return accu
docs: [whatsnew(instance,pred)] is a TermSet equal to [pred] where all predicates
      vlabel and elabel which have a corresponding obs_vlabel and obs_elabel in
      [instance] have been deleted. This function is meant to see which of the invariants
      are not a direct consequence of the observations.