fmidue / logic-tasks

0 stars 1 forks source link

Flag `useSetNotation` bei Aufgabentyp Step und Resolve #95

Closed nimec01 closed 3 days ago

nimec01 commented 7 months ago

Wie in #84 angemerkt wäre es nicht schlecht anhand einer Flag zu bestimmen, ob eine Klausel (oder KNF) in Mengennotation angezeigt werden soll. Dafür habe ich die Flag displayUsingSetNotation bei den Aufgabentypen Step und Resolve hinzugefügt. An der letztendlichen Eingabe-Syntax habe ich erstmal nichts geändert. Das wäre natürlich denkbar. Allerdings müsste man dann die Parse Instanzen anpassen.

jvoigtlaender commented 7 months ago

Ich denke, das sollte wirklich nur gemacht werden, wenn auch die Eingabe entsprechend "umgestellt" wird. Also wenn @owestphal dazu kommt, das per Parser anzupassen. Vermutlich wäre dann auch ein anderer Name als display... für die Option passender.

nimec01 commented 1 week ago

Ich denke, das sollte wirklich nur gemacht werden, wenn auch die Eingabe entsprechend "umgestellt" wird. Also wenn @owestphal dazu kommt, das per Parser anzupassen. Vermutlich wäre dann auch ein anderer Name als display... für die Option passender.

Ist der Gedanke hier dann abhängig von displayUsingSetNotation (bzw. unter anderem Namen) auch nur eine Eingabe z.B. von Mengen zu erlauben? Oder sollte es immer möglich sein, beide Notationen zu nutzen?

jvoigtlaender commented 1 week ago

Ja, man würde pro Aufgabennutzung festlegen, ob Mengen- oder Formelnotation verwendet werden soll, und das würde dann für Ein- und Ausgabe gelten. (Im Aufgabentext würde dann eben etwas in der Art stehen "Verwenden Sie die Mengennotation." oder gegebenenfalls das Gegenteil davon.)

nimec01 commented 3 days ago

Der Zustand jetzt sollte die meisten gewünschten Änderungen enthalten. Die Legende passe ich gleich noch an. Das Einhalten der Notation wird über das Delayed Parsing abgewickelt. Es folgen einige Beispiele anhand der Step task:

useSetNotation = False mit korrekter Notation:

Betrachten Sie die zwei folgenden Klauseln:>>>> <A ∨ B ∨ ¬D> <<<<
>>>> <A ∨ ¬C ∨ D> <<<<

Resolvieren Sie die Klauseln und geben Sie die Resolvente an.
Geben Sie das in dem Resolutionsschritt genutzte Literal (in positiver oder negativer Form) und das Ergebnis in der folgenden Tupelform an: (Literal, Resolvente).
Beachten Sie dabei die folgenden möglichen Schreibweisen:
>>>>Negation: <-, ~, nicht> <<<<

>>>>Oder: <\/, oder> <<<<

>>>>Nutzen Sie zur Angabe der Resolvente eine Formel! Ein Lösungsversuch könnte beispielsweise so aussehen:  <(A, nicht B oder C)> <<<<

Just ()
(D,A oder B oder -C)
---- Input ----
Delayed "(D,A oder B oder -C)"
---- Partial ----
Lösung ist nicht leer?
>>>> <Ja.> <<<<

Das gewählte Literal kommt in einer der Klauseln vor?
>>>> <Ja.> <<<<

Resolvente besteht aus bekannten Literalen?
>>>> <Ja.> <<<<

Just ()
---- Complete ----
Just ()

useSetNotation = False mit falscher Notation:

Betrachten Sie die zwei folgenden Klauseln:>>>> <A ∨ ¬C ∨ D> <<<<
>>>> <¬A ∨ B ∨ ¬C> <<<<

Resolvieren Sie die Klauseln und geben Sie die Resolvente an.
Geben Sie das in dem Resolutionsschritt genutzte Literal (in positiver oder negativer Form) und das Ergebnis in der folgenden Tupelform an: (Literal, Resolvente).
Beachten Sie dabei die folgenden möglichen Schreibweisen:
>>>>Negation: <-, ~, nicht> <<<<

>>>>Oder: <\/, oder> <<<<

>>>>Nutzen Sie zur Angabe der Resolvente eine Formel! Ein Lösungsversuch könnte beispielsweise so aussehen:  <(A, nicht B oder C)> <<<<

Just ()
(A,{-C,D,B})
---- Input ----
Delayed "(A,{-C,D,B})"
---- Partial ----
>>>>Ihre Abgabe konnte nicht gelesen werden.
Bitte stellen Sie sicher, dass Sie die geforderte Notation verwenden.
<<<<
Nothing
!!! The following would not be printed in Autotool !!!
---- Complete ----
>>>>"(answer string)" (line 1, column 4):
unexpected "{"
expecting white space, "{}", atomic Proposition or Negation
term structure does not allow nesting at this point<<<<
Nothing

useSetNotation = True mit korrekter Notation:

Betrachten Sie die zwei folgenden Klauseln:>>>> <{ ¬B, C, ¬D }> <<<<
>>>> <{ A, D }> <<<<

Resolvieren Sie die Klauseln und geben Sie die Resolvente an.
Geben Sie das in dem Resolutionsschritt genutzte Literal (in positiver oder negativer Form) und das Ergebnis in der folgenden Tupelform an: (Literal, Resolvente).
Beachten Sie dabei die folgenden möglichen Schreibweisen:
>>>>Negation: <-, ~, nicht> <<<<

>>>>Oder: <\/, oder> <<<<

>>>>Nutzen Sie zur Angabe der Resolvente die Mengennotation! Ein Lösungsversuch könnte beispielsweise so aussehen:  <(A, {nicht B, C})> <<<<

Just ()
(D,{-B,C,A})
---- Input ----
Delayed "(D,{-B,C,A})"
---- Partial ----
Lösung ist nicht leer?
>>>> <Ja.> <<<<

Das gewählte Literal kommt in einer der Klauseln vor?
>>>> <Ja.> <<<<

Resolvente besteht aus bekannten Literalen?
>>>> <Ja.> <<<<

Just ()
---- Complete ----
Just ()

useSetNotation = True mit falscher Notation:

Betrachten Sie die zwei folgenden Klauseln:>>>> <{ ¬A, B, ¬D }> <<<<
>>>> <{ A, B, C }> <<<<

Resolvieren Sie die Klauseln und geben Sie die Resolvente an.
Geben Sie das in dem Resolutionsschritt genutzte Literal (in positiver oder negativer Form) und das Ergebnis in der folgenden Tupelform an: (Literal, Resolvente).
Beachten Sie dabei die folgenden möglichen Schreibweisen:
>>>>Negation: <-, ~, nicht> <<<<

>>>>Oder: <\/, oder> <<<<

>>>>Nutzen Sie zur Angabe der Resolvente die Mengennotation! Ein Lösungsversuch könnte beispielsweise so aussehen:  <(A, {nicht B, C})> <<<<

Just ()
(A, B oder -D oder C)
---- Input ----
Delayed "(A, B oder -D oder C)"
---- Partial ----
>>>>Ihre Abgabe konnte nicht gelesen werden.
Bitte stellen Sie sicher, dass Sie die geforderte Notation verwenden.
<<<<
Nothing
!!! The following would not be printed in Autotool !!!
---- Complete ----
>>>>"(answer string)" (line 1, column 5):
unexpected "B"
expecting space or "{"<<<<
Nothing