Module procedures and abstract interfaces

Try the following:

MODULE module_procedures_abstract_interface
use, intrinsic :: iso_fortran_env, only: dp => real64
implicit none

ABSTRACT INTERFACE
   function fun_2_args(x, y)
   import :: dp
   real(dp) :: fun_2_args
   real(dp), intent(in) :: x, y
   end function fun_2_args
END INTERFACE

   PROCEDURE(fun_2_args) :: fun1, fun2 

END MODULE module_procedures_abstract_interface