Library MetaRocq.Utils.MRTactics.FindHyp

Ltac find_hyp_eq a b := match goal with _constr_eq_nounivs a b end.
Ltac find_hyp T :=
  lazymatch T with
  | T
    ⇒
      multimatch goal with
      | [ H : T |- _ ] ⇒ H
      end
  | _
    ⇒
      multimatch goal with
      | [ H : ?T' |- _ ] ⇒ let __ := find_hyp_eq T T' in
                            H
      end
  end.

Ltac find_hyp_with_body body :=
  lazymatch body with
  | body
    ⇒
      multimatch goal with
      | [ H := body |- _ ] ⇒ H
      end
  | _
    ⇒
      multimatch goal with
      | [ H := ?body' |- _ ] ⇒ let __ := find_hyp_eq body body' in
                                H
      end
  end.