ich Beweis bin versucht, dass die Bewertung des nicht typisierten Lambda-Kalkül nach folgenden Funktion:Einführung Kündigung als Voraussetzung in Leon/Stainless
def eval(t: Term): Option[Term] = t match {
case App(t1, t2) => eval(t1) match {
case Some(Abs(x, body)) => eval(t2) match {
case Some(v2) => eval(subst(x, v2, body))
case None() => None[Term]()
}
case _ => None[Term]() // stuck
}
case _ => Some(t) // Abs or Var, already a value
}
gibt entweder keine oder einen Wert. Ich wurde jedoch darauf hingewiesen, dass diese Funktion möglicherweise nicht beendet wird. Meine Frage ist, wie kann man in Leon/Stainless einführen, dass eine Funktion beendet werden muss?
Was ist "Leon/Stainless"? – pedrofurla
@pedrofuria Leon ist ein Software-Verifikations-Framework für Scala, das an der EPFL entwickelt wurde. Weitere Informationen erhalten Sie unter http://lara.epfl.ch/w/leon. Stainless ist ein Upgrade von Leon, aber für dieses Problem glaube ich nicht, dass es einen großen Unterschied zwischen den beiden geben wird. – Rodrigo
Wollen Sie nicht den Compiler das Halteproblem hier lösen lassen? Sie müssten eine begrenzte (Teilmenge einer) Sprache haben, die nur terminierende Programme akzeptieren kann, aber eine ganze Turing-vollständige Sprache hat im Allgemeinen keine solche Eigenschaft. –