you can easily divide two numbers as following:
mydiv(0,_,0).
mydiv(_,0,undefined):- !.
mydiv(X,Y,D) :- X >= Y , Z is X - Y , mydiv(Z,Y,M) , D is M + 1  .
output:
?- mydiv(10,4,Q).
 false.
?- mydiv(100,2,Q).
 Q = 50 .
to run with debug info:
mydiv(0,_,0) :- write('mydiv(0,_,0)\n').
mydiv(_,0,undefined):- write('mydiv(_,0,undefined)\n'),!.
mydiv(X,Y,D) :- write('mydiv('),write(X) , write(','), write(Y) , write(',') , write(D) , write(')') , nl,
                X >= Y , Z is X - Y , mydiv(Z,Y,M) , D is M + 1  .
output:
?- mydiv(20,2,Q).
 mydiv(20,2,_G3941)
 mydiv(18,2,_L1420)
  mydiv(16,2,_L1435) 
mydiv(14,2,_L1450)
 mydiv(12,2,_L1465)
  mydiv(10,2,_L1480)
 mydiv(8,2,_L1495)
 mydiv(6,2,_L1510)
  mydiv(4,2,_L1525)
 mydiv(2,2,_L1540)
 mydiv(0,__,0)
 Q = 10 .
with natural function:
natural(0).
natural(X) :- X < 0 , !, fail.
natural(X) :- Y is X - 1 , natural(Y).
mydiv(0,_,0) :- write('mydiv(0,_,0)\n').
mydiv(_,0,undefined):- write('mydiv(_,0,undefined)\n'),!.
mydiv(X,Y,D) :- write('mydiv('),write(X) , write(','), write(Y) , write(',') , write(D) , write(')') , nl,
                natural(X), natural(Y), X >= Y , Z is X - Y , mydiv(Z,Y,M) , D is M + 1  .