2013-05-18 10 views
10

Mam dowód Isabelle następującą strukturę:Jak założyć drugi przypadek dowodu Isabelle/Isar w konkretnych przypadkach?

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 

Pierwszy przypadek jest rzeczywiście kilka stron, więc podczas czytania drugim przypadku nie jest już jasne, do przypadkowego czytelnika, nawet do siebie, co False odnosi się do. (Cóż, w rzeczywistości jest to jest, ale nie z czytania, tylko w środowisku interaktywnym: Jeśli, na przykład, w Isabelle/jEdit, umieścisz kursor po case False, zobaczysz n ≠ 0 pod "to" w panelu Wyjście.)

A więc istnieje składnia, która pozwala jednoznacznie przypisać założenie sprawy "Fałszywe", aby czytelnik nie musiał wchodzić w interakcję z IDE, ani przewijać słowa kluczowego proof, ale widzi założenie na miejscu?

+0

Ponownie otwarte! Zacznijmy od komentarzy, dobrze? –

Odpowiedz

5

W tym przypadku dowód staje się bardziej czytelny, stwierdzając założenie każdorazowo wyraźnie:

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

NB: To się nie powiedzie, jeśli zmienisz kolejność spraw (jak wskazano przez @LarsNoschinsiki w komentarzu do mojej odpowiedzi). –

4

Jeśli sprawa False jest krótszy, wystarczy umieścić go w pierwszej kolejności. Kolejność prób w bloku Isar nie ma znaczenia:

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

Ogólnie rzecz biorąc, jeśli właściwość, na której przeprowadzamy analizę przypadku, jest bardzo krótka (jak w 'n = 0'), zawsze wolałbym wersję jawną zamiast" case False "," case True ", dla czytelności. (Dziwnie, z punktu widzenia kompozycyjności jest odwrotnie.) – chris

+1

Pamiętaj, że możesz zmienić kolejność przypadków, jeśli wywołasz metodę 'cases' z parametrem. Jeśli użyjesz formy 'proof cases przyjmij P ... następnie przyjmij" ~ P "...' wtedy zanegowany przypadek musi być drugi (ponieważ istnieją schematy w celu, które są tworzone za pomocą pierwszego polecenia 'show') . –

+0

Nie wiedziałem nawet, że możesz użyć 'cases' bez parametru :-) –

2

Isar pozwala na wiele wariantów tego samego tematu. Z zachowaniem oryginalnego zarysu, można dokonać faktów pośrednich wyraźne tak:

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 

Jest to konserwatywny rozszerzenie oryginalnego dowodu zarysie, to znaczy nie wprowadza żadnych zmian w polityce sprawdzenie, unifikacji, wyszukiwania itd.

ogół postać

note `prop` 

odpowiada

have "prop" by fact 
Powiązane problemy