2013-05-18 8 views
10

Ich habe ein Isabelle Beweis wie folgt strukturiert:Wie lässt sich die Annahme des zweiten Falles eines Isabelle/Isar-Beweises durch explizite explizite Rechtslage begründen?

proof (cases "n = 0") 
    case True 
    (* lots of stuff here *) 
    show ?thesis sorry 
next 
    case False 
    (* lots of stuff here too *) 
    show ?thesis sorry 
qed 

Der erste Fall tatsächlich mehrere Seiten lang ist, so dass, wenn der zweite Fall zu lesen, es ist nicht mehr klar zu einem flüchtigen Leser, nicht einmal mir, was die False bezieht sich auf. (Nun, es ist eigentlich ist, aber nicht aus dem Lesen, nur in einer interaktiven Umgebung: Wenn Sie zB in Isabelle/jEdit den Cursor nach case False platzieren, sehen Sie n ≠ 0 unter "this" im Bedienfeld Ausgabe. so)

gibt es eine Syntax, die für die Herstellung der Annahme des „false“ Falles explizit, so dass der Leser ermöglicht hat weder die Interaktion mit den IDE, noch scrollen bis zum proof Schlüsselwort, kann aber die Annahme sehen richtig platziert?

+0

Wiedereröffnet! Lassen Sie uns mit den Kommentaren beginnen, sollen wir? –

Antwort

5

In diesem Fall wird der Beweis besser lesbar durch die Übernahme von jeweils ausdrücklich besagt:

proof cases 
    assume "n = 0" 
    show ?thesis sorry 
next 
    assume "n ≠ 0" 
    show ?thesis sorry 
qed 
+0

NB: Dies schlägt fehl, wenn Sie die Fälle neu ordnen (wie von @LarsNoschinsiki in einem Kommentar zu meiner Antwort hingewiesen). –

4

Wenn der False Fall kürzer, es ist nur die erste Stelle setzen. Die Reihenfolge der Proofs in einem Isarblock spielt keine Rolle:

proof (cases "n = 0") 
    case False 
    show ?thesis sorry 
next 
    case True 
    show ?thesis sorry 
qed 
+1

Im Allgemeinen, wenn die Eigenschaft, auf der wir Fallanalyse durchführen, sehr kurz ist (wie in 'n = 0'), würde ich immer die explizite Version anstelle von' case False', 'case True', für die Lesbarkeit bevorzugen. (Komischerweise ist das Gegenteil der Fall.) – chris

+1

Beachten Sie, dass Sie die Fälle nur neu anordnen können, wenn Sie die Methode 'cases' mit einem Parameter aufrufen. Wenn Sie die Form 'Beweisfälle annehmen, nehmen Sie P ... an, nehmen Sie als nächstes" ~ P "...' an, dann muss der negierte Fall der zweite sein (da es Schemata im Ziel gibt, die durch den ersten 'show'-Befehl instanziiert werden) . –

+0

Ich wusste nicht einmal, dass Sie 'Fälle' ohne Parameter verwenden können :-) –

2

Isar lässt viele Variationen zum selben Thema zu. Halten Sie den ursprünglichen Entwurf, Sie Zwischen Fakten wie diese explizit machen:

proof (cases "n = 0") 
    case True 
    (* lots of stuff here *) 
    from `n = 0` show ?thesis sorry 
next 
    case False 
    (* lots of stuff here too *) 
    from `n ≠ 0` show ?thesis sorry 
qed 

Dies ist eine konservative Erweiterung des ursprünglichen Beweis Umrisses, dh es enthält keine Änderung in der Politik der Überprüfung, Vereinigung, suchen usw.

Im Allgemeinen ist die Form

note `prop` 

entspricht

have "prop" by fact