Ist Rekursion nur zulässig, wenn das Argument arg zu der Funktion ein direkter Unterbegriff des übergebenen Arguments ist, so dass Coq sehen kann, dass es tatsächlich endet?Wie kann ich eine Funktion des folgenden Formulars in Coq schreiben?
3
A
Antwort
3
Es ist möglich, eine solche Funktion f
zu schreiben, wenn die Funktion g
die Eigenschaft eines Unterbegriffs beibehält.
Einige der Standardfunktionen haben diese Eigenschaft, z.B. pred
, sub
:
From Coq Require Import Arith List.
Import ListNotations.
Fixpoint foo (x : nat) : nat :=
match x with
| O => 42
| S x' => foo (pred x'). (* foo (x' - 1) works too *)
end.
Auf der anderen Seite einige (Standard) Funktionen, diese Eigenschaft nicht haben, aber umgeschrieben werden kann, diesem Mangel abzuhelfen. Z.B. die Standard-tl
Funktion erhalten nicht die Subterm Eigenschaft, so dass die folgenden nicht:
Fail Fixpoint bar (xs : list nat) : list nat :=
match xs with
| [] => []
| x :: xs' => bar (tl xs')
end.
aber wenn wir den Schwanz Funktion wie neu definieren so
Fixpoint new_tl {A : Type} (xs : list A) :=
match xs with
| [] => xs (* `tl` returns `[]` here *)
| _ :: xs' => xs'
end.
wir die gewünschte Eigenschaft erholen:
Fixpoint bar (xs : list nat) : list nat :=
match xs with
| [] => []
| x :: xs' => bar (new_tl xs')
end.
Der einzige Unterschied zwischen tl
und new_tl
ist, dass bei leerer Eingabeliste tl
gibt []
zurück, aber new_tl
gibt die ursprüngliche Liste zurück.
Verwandte Themen
- 1. Inhalt des Formulars in eine Textdatei schreiben
- 2. Wie kann ich selektiv in Coq umschreiben?
- 3. Einschränkungen des Fixpunkts in Coq?
- 4. Schreiben des xpath für den folgenden Code
- 5. wie kann ich diese sql nach den folgenden Kriterien schreiben
- 6. Kann ich eine Variable in LINQ deklarieren/verwenden? Oder kann ich folgenden LINQ-Clearer schreiben?
- 7. Wie installiere ich Coq
- 8. kann jemand den folgenden Code in eine Funktion umwandeln?
- 9. Wie kann ich eine Funktion für mod (3) (9) schreiben?
- 10. Wie kann man eine Teilmengenrelation in Coq ausdrücken?
- 11. Wie kann ich schreiben eine rekursive polymorphe Funktion mit Shapeless
- 12. Kann man eine Funktion in AHK schreiben?
- 13. Kann ich den folgenden Code mit LINQ neu schreiben?
- 14. Kann ich eine Lambda-Funktion schreiben, um eine Ausnahme auszulösen?
- 15. Wie eine Funktion schreiben, die
- 16. ExtJs getRecord() Funktion des Formulars funktioniert nicht
- 17. Wie würde ich den folgenden Code effizienter schreiben?
- 18. Coq: Eine Anwendung testen
- 19. Coq: eine rekursive Notation
- 20. Wie man eine Hypothese in Coq dupliziert?
- 21. Wie kann ich meine benutzerdefinierte Notation in Coq deaktivieren?
- 22. Wie kann ich diese Iferror-Funktion in VBA schreiben?
- 23. Wie kann ich den folgenden Oktavcode ohne eine for-Schleife schreiben?
- 24. Wie kann ich verschachtelte rekursive Funktion in Matlab schreiben
- 25. Wie kann ich eine Funktion (a) schreiben, die nach Abschluss eine andere Funktion (b) aufruft?
- 26. MS Access - Wie bleibe ich am Anfang des Formulars beim Laden des Formulars?
- 27. Kann ich eine Javascript-Funktion mit Excel VBA neu schreiben?
- 28. Wie kann ich eine lockfreie Struktur schreiben?
- 29. Wie kann ich den folgenden Ausdruck berechnen
- 30. Wie kann ich eine einfache Schluckfunktion schreiben?
Ich denke, diese Frage ist eigentlich zwei Fragen. Könnten Sie sie bitte trennen? –
@AntonTrunov könnten Sie bitte diese Frage https://StackOverflow.com/Questions/47951686/How-Can-Imake-CoQ-Accept-the-Following-Fixpoint? – abhishek