Wie bekomme ich die Alleltern eines Elements in Coq? ich einen Satz in Coq wie folgt definieren:Wie kann man die Vererbung in Coq ausdrücken?
Inductive Gen : Set :=
| BGen : nat -> nat -> Gen.
Es gibt viele Fälle, wie:
Definition g1 = BGen 1 2.
Definition g2 = BGen 2 3.
Nun, ich möchte den Eltern Element von 3 erhalten, das heißt [1,2]. Ich schreibe eine Funktion:
Fixpoint parents (c : nat) (l : list Gen) :=
match l with
| [] => []
| (BGen p c') :: l' => if beq_nat c c'
then [p]
else parents c l'
end.
Ich kann nur die direkt Eltern erhalte [2] von 3: Wie kann ich die alle Eltern wie [1,2] in diesem Beispiel erhalten?
Warum hörst du mit der Rückkehr von '[p]' auf, wenn du eine Übereinstimmung gefunden hast, anstatt 'p' * zurückzugeben, aber auch * die anderen Übereinstimmungen, die du im Rest der Liste finden kannst? – gallais
@gallais Dies kann getan werden, indem [p] durch [p] :: eltern c l 'ersetzt wird. Jedoch können nur die Eltern von c gefunden werden, indem man diese Funktionen benutzt, ich kann nicht alle Eltern von c bekommen. –
Ah! Es scheint, ich habe dein Ziel falsch verstanden: Du willst nicht nur die Eltern, sondern auch die Eltern der Eltern usw.? Grundsätzlich möchten Sie eine Schließung bauen? – gallais