anchor.diff:      | _, Tm_refine(x, _)  -> head_matches env t1 x.sort |> head_match
   
       | Tm_type _, Tm_type _
  -    | Tm_arrow _, Tm_arrow _ -> HeadMatch
  +    | Tm_arrow _, Tm_arrow _ -> HeadMatch false
   
       | Tm_app(head, _), Tm_app(head', _) -> head_matches env head head' |> head_match
       | Tm_app(head, _), _ -> head_matches env head t2 |> head_match
       | _, Tm_app(head, _) -> head_matches env t1 head |> head_match
  +
  +    | Tm_let _, Tm_let _
  +    | Tm_match _, Tm_match _ -> HeadMatch true
   
       | _ -> MisMatch(delta_depth_of_term env t1, delta_depth_of_term env t2)
   
  
positive.code: 
              | MisMatch(Some (Delta_equational_at_level _), _)
              | MisMatch(_, Some (Delta_equational_at_level _)) ->
                if not retry then fail r
                else begin match maybe_inline t1, maybe_inline t2 with
                     | None, None -> fail r
                     | Some t1, None -> aux false (n_delta + 1) t1 t2
                     | None, Some t2 -> aux false (n_delta + 1) t1 t2
                     | Some t1, Some t2 -> aux false (n_delta + 1) t1 t2
                     end
  
  
negative.code:     let rec disjoin t1 t2 : option<(term * list<prob>)> =
          let mr, ts = head_matches_delta env () t1 t2 in
          match mr with
              | HeadMatch true
              | MisMatch _ ->
                None
  
  