The real reason why you wouldn't write "Lui ha cena" is because "to have food" only means "to eat food" in English. They don't have that idiom in Italian. "Lui ha cena" can only mean that he is literally in possession of dinner. "Lui ha cenato" only means "He has eaten". It's nothing more than an auxiliary verb as it is in English.
It's arguably a valid translation, but "sup" is kind of archaic, or at least uncommon. (I say "arguably" because there's a regional difference between what "dinner" means and what "supper" means. Some people think they mean the same thing, some people think they mean different things, and a lot of those people disagree on which one means what.)
Well, I think it's because when you dine, it's already implied that the action of eating is being done with "ceniamo", so "mangiare" Is not necessary."We eat dinner at the restaurant" seems like a valid translation in terms of what's being done, but we're not given "mangiamo cena" in the sentence. As for "have", maybe the same could be said that "having dinner" is implied, however I don't think "having dinner" would be translated the same way in Italian if we used the word have. As English speakers we can say "I'm having dinner" or "I had dinner" but I think if you were to say "ho cena" it would just mean I have a plate with dinner food but not that I consumed it as well. If you would rather omit the extra word in translating "ceniamo" just say "We dine at the restaurant" which are the same as having dinner or eating dinner.
Disclaimer: I'm not a native Italian speaker.
@KRHerzberg "Noi mangiamo cena al ristorante", is wrong and you can't say that... "cena" can also be "pasto serale", "vitto serale" (literally "meal evening")... you can say "andiamo a cena al ristorante"... "mangiamo il nostro pasto serale al ristorante" (few people would say it)... "mangiamo la nostra cena al ristorante"... "mangiamo la cena al ristorante"... "cena" as a noun, it doesn't mean you're eating... but if you use the verb "cenare" it means that. "Io ceno... tu ceni... lui/lei cena... noi ceniamo... voi cenate... loro cenano... hope it helps...
Actually it is neither! 'al' is the conjunction of 'a' and 'il' which means 'at the' so al ristorante means at the restaurant. The 'il' part makes it the definite article, so it could never be 'a restaurant' - 'nel ristorante' is in the restaurant (the conjunction of in and il.) If it were any old restaurant (indefinite) it would simply be 'in un ristorante '
Dining = having dinner is not the same. Fine dining, for instance, does not pertain to restaurants that offer remarkable dinners. I could ask a friend to dine with me at noon time (wait, can I? Now I am not so sure.)
But then again, to sup is to eat at night (having supper), yeah?
I got it right, its just that the hint could be misleading.
None of this makes much sense without a complete explanation of these terms. For example, is "pranza" the sandwich out of a paper bag, or a quick plate of pasta in a local eatery or the two-hour-long 5-course mid-day meal at home? Is "cena" the American supper at around 6 PM or the late night British supper, several hours after "tea". If we were to give an American meaning to "cena", would that work the same in Italy? Most language courses introduce these terms in context, using short paragraphs or conversations. Duo could take a cue from that.
The infinitive is "cenare".