French, Italian, and Dutch have a very similar thing:
Fr: J'ai mangé.
It: Ho mangiato.
Du: Ik heb gegeten.
Fr: Je suis allé(e) au cinéma.
It: Sono andato/a al cinema.
Du: Ik ben naar de bioscoop gegaan.
And so on and so forth.
Some languages have morphological suffix for past tense, like Slavic languages. Although Slavic languages use verb to be as an auxiliary in forming past tense, there are some exceptions, like in Croatian.
A: Jesi li pojeo? (Did you eat?)
B: Pojeo. (I ate/I have eaten.)
Notice here you don't need auxiliary verb and it is past tense. What I'm interested is in your Dutch forms. Notice heb, ben gegaan, where you need zu sein and zu haben in order to form past tense. In Croatian you don't need Ja imao pojeo 'I have eaten, literally' as you would need in German. But German has something special if there is a verb of motion following which English doesn't.
Ich bin fahren. *I have driven. sein+have, if we were to follow the rules English would have I am driven in this sense, which is ungrammatical.
Ich bin gegangen English *I am went, but you would say I went. I am talking about auxiliary verbs zu haben and zu sein and their usage. You could also say in German Ich ginge/Ich fahrte, but that's not what I'm talking about.
I am wondering why would you need auxiliary forms and morphological suffixes for saying exact same things. Forming past tense. That doesn't go for English since past perfect uses auxiliary have, and that's another formation and it differs from past tense. And I'm particularly interested why zu sein for the verb of motion and why use an auxiliary verb?
I may have made a commotion with this post. But now I've found out that many languages use auxiliary verb for forming past tense, but they have forms when they don't need auxiliary verbs for past tense. For instance, Slavic languages need auxiliary verb to be when forming past tense.