definiert ich eine rekursive Funktion für alle Teilmengen von nat_list in coq alsSubsets der Liste nat in coq
Fixpoint subsets (a: list nat) : (list (list nat)) :=
match a with
|[] => [[]]
|h::t => subsets t ++ map (app [h]) (subsets t)
end.
Ich versuche zu beweisen, dass
forall (a:list nat), In [] (subsets a).
ich auf ein induct versucht. Der Basisfall war geradlinig. Im Induktionsfall habe ich versucht, den eingebauten Satz in_app_or
zu verwenden.
Unable to unify "In ?M1396 ?M1394 \/ In ?M1396 ?M1395" with
"(fix In (a : list nat) (l : list (list nat)) {struct l} : Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end)
[] (subsets t ++ map (fun m : list nat => h :: m) (subsets t))".
Wie beweisen, dass ich einen solchen Satz oder umgehen so ein Problem?
Hinweis Über Ihre Benennung gibt Ihre Funktion nicht "eine Teilmenge" im Sinne einer Liste von Listen zurück, die nicht die gleichen Eigenschaften wie eine Liste von Listen haben. Insbesondere tun die Listen "[a; b] 'und' [b; a] 'repräsentieren die gleiche Menge? Denk darüber nach! – ejgallego
Für was es wert ist, in diesem Fall, "Induktion l; simpl; Intuition." Ist auch ein gültiger Beweis. –