Verwirrt über die Subtypisierung von Funktionen

Ich nehme an einem Kurs über Programmiersprachen teil und die Antwort auf "Wann ist eine Funktion ein Untertyp einer anderen Funktion?" Ist für mich sehr kontraintuitiv.

Zur Verdeutlichung: Nehmen wir an, wir haben die folgende Typbeziehung:

bool<int<real

Warum ist die Funktion(real->bool) ein Untertyp von(int->bool)? Sollte es nicht umgekehrt sein?

Ich würde erwarten, dass die Kriterien für Untertypisierungsfunktionen sind: f1 ist ein Untertyp von f2, wenn f2 ein Argument annehmen kann, das f1 annehmen kann, und f1 nur Werte zurückgibt, die f2 zurückgibt. Es gibt eindeutig Werte, die f1 annehmen kann, aber f2 nicht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage