theory Cas5_vezbe_postavke imports Main begin section \ First order logic \ subsection \ Ponavljanje sa predavanja \ text\ pravilo oslobadjanja od univerzalnog kvantifikatora \ thm allE text \ Ako znamo da je svaki covek smrtan, i ako je Sokrat covek, pokazati da je onda i Sokrat smrtan \ lemma "((\ x. covek x \ smrtan x) \ covek Sokrat) \ smrtan Sokrat" apply (rule impI) apply (erule conjE) (* opsti oblik nam ovde nije koristan apply (erule allE) *) (* pa koristimo odmah instanciranje, ako vazi za svaki onda vazi i za Sokrata promenljiva se zove x u pravilu allE pa i u primeni pravila se zove x *) apply (erule_tac x = "Sokrat" in allE) (* rule_tac i erule_tac --- apply a rule while constraining some of its variables. The typical form is rule_tac v1 = t1 and...and vk = tk in R This method behaves like rule R, while instantiating the variables v1...vk as specified. *) apply (erule impE) (* nakon toga eliminisemo implikaciju *) apply assumption apply assumption done text\ prirodnom dedukcijom dokazati da je ovo teorema logike prvog reda \ lemma "(\ x. P x) \ (\ x. P x \ Q x) \ (\ x. Q x)" (* razbijamo iskazni skeleton prvo *) apply (rule impI) (* pa konjunkciju sa leve strane *) apply (erule conjE) (* sada prvo eliminisemo egzistencijalni kvantifikator sa leve strane *) apply (erule exE) (* i dobili smo fiksirano ali proizvoljno x, sa kojim mozemo da instanciramo x u allE *) apply (erule_tac x = "x" in allE) apply (erule impE) apply assumption (* sada se oslobadjamo egzistencijalnog kvantifikatora sa desne strane, ali pokusavamo za ovo konkretno x *) apply (rule_tac x = "x" in exI) apply assumption done text\ Kako bismo u Isaru dokazali istu teoremu? Posto koristimo Isar, mozemo koristiti assumes shows zapis:\ lemma assumes "\ x. P x" assumes "\ x. P x \ Q x" shows "\ x. Q x" (* posto smo je zapisali sa assumes i shows, nece postojati prva dva koraka iz prethodnog dokaza *) proof - (* - znaci da cemo mi sami da raspisemo dokaz *) (* ovde je bojama napravljena razlika *) (* narandzasto x je ovo dobijeno sa exists *) (* na osnovu pravila eliminacije univerzalnog kvantifikatora primenjenog na narandzasto x *) from `\ x. P x` obtain x where "P x" by auto (* ili by (rule exE), ali ovde ne zelimo da budemo precizni *) from `\ x. P x \ Q x` have "P x \ Q x" by auto (* by (rule_tac x = "x" in allE) *) from this `P x` have "Q x" by auto (* by (rule impE) *) from this show "\ x. Q x" by auto (* by (rule exI) *) qed text\ Malo komplikovanija teorema, moze se zapisati sa jednom promenljivom x, ali citljivije je ako uvedemo razlicite promenljive: c, g i a. Ako je svaki covek smrtan; i ako je svaki grk covek; onda vazi da je svaki grk smrtan. \ lemma "(\ c. covek c \ smrtan c) \ (\ g. grk g \ covek g) \ (\ a. grk a \ smrtan a)" (* by auto --- prvo testiramo da vidimo da li je dobro formulisana teorema *) apply (rule impI) (* standardno, prvo impI pravilo, pa nakon toga razbijamo konjunkciju sa leve strane *) apply (erule conjE) (* sada uvodimo proizvoljno ali konretno a eliminacijom univerzalnog kvantifikatora sa desne strane *) apply (rule allI) (* sada razbijamo implikaciju sa desne strane *) apply (rule impI) (* sada treba da razbijamo levu stranu i moramo da naglasimo ime promenljive *) (* sada nam je dominantan univerzalni kvantifikator i razbicemo prvi kvantifikator s leva *) apply (erule_tac x = "a" in allE) (* naredni korak rabija preostali kvantifikator *) apply (erule_tac x = "a" in allE) (* sada smo dosli do iskaznog nivoa i mozemo da razbijemo implikaciju *) apply (erule impE) (* pokusamo sa prvom implikacijom... i vidimo da uspeva *) apply (erule impE) apply assumption apply assumption apply assumption done text\ Sada ista lema u isar-u, prvo je zapisemo drugacije. Proverite da je stiklirano Continuous checking sa desne strane \ lemma assumes "\ c. covek c \ smrtan c" assumes "\ g. grk g \ covek g" shows "\ a. grk a \ smrtan a" proof (* sam isabelle sugerise uvodjenje proizvoljnog a, isto kao da smo napisali proof (rule allI) *) fix Jorgos show "grk Jorgos \ smrtan Jorgos" proof (* opet isabelle sugerise i nadje impI --- isto kao da smo napisali proof (rule impI) *) assume "grk Jorgos" from this and assms(2) have "covek Jorgos" by auto from this and assms(1) show "smrtan Jorgos" by auto qed qed text\ malo duzi, drugacije zapisan dokaz\ lemma assumes "\ c. covek c \ smrtan c" assumes "\ g. grk g \ covek g" shows "\ a. grk a \ smrtan a" proof (* sam isabelle sugerise uvodjenje proizvoljnog a, isto kao da smo napisali proof (rule allI) *) fix Jorgos show "grk Jorgos \ smrtan Jorgos" proof (* opet isabelle sugerise i nadje impI --- isto kao da smo napisali proof (rule impI) *) assume "grk Jorgos" moreover from assms(2) have "grk Jorgos \ covek Jorgos" by auto ultimately have "covek Jorgos" by auto moreover (* novi blok, prethodno ultimately je ispraznilo *) from assms(1) have "covek Jorgos \ smrtan Jorgos" by auto ultimately show "smrtan Jorgos" by auto qed qed subsection\ Primeri za vezbanje \ text\Naredne leme dokazati u prirodnoj dedukciji. Pa nakon toga, zapisati uz pomoc assumes i shows i dokazati u Isar-u. \ (* treba raspisati oba dokaza za sve leme, ali za naredne necu pisati obe formulacije vec to morate uraditi sami za vezbu *) (* resenja zadataka cu okaciti za nekoliko dana *) lemma "(\ a. P a \ Q a) \ (\ b. P b) \ (\ x. Q x)" by auto lemma assumes "\ a. P a \ Q a" assumes "\ b. P b" shows "\ x. Q x" sorry lemma "(\ x. A x \ B x) \ (\ x. A x) \ (\ x. B x)" by auto lemma "(\ x. A x \ \ B x) \ \ (\ x. A x \ B x)" by auto text \Narednih nekoliko primera je opisano recenicama i formulama. Na ispitu ce biti navedena samo formulacija uz pomoc recenica, a zadatak ce biti i zapis uz pomoc formule i raspisani dokaz same formule. Stil dokaza cete najverovatnije moci sami da birate, sem ako nije eksplicitno navedeno koji tip dokaza se ocekuje. Primeticete da su ovi dokazi ponekad laksi ako se koristi prirodna dedukcija nego Isar. \ text \ Formulisati i dokazati naredno tvrdjenje: Ako za svaki broj koji nije paran vazi da je neparan; i ako za svaki neparan broj vazi da nije paran; pokazati da onda za svaki broj vazi da nije istovremeno i paran i neparan \ lemma "(\ x. \ paran x \ neparan x) \ (\ x. neparan x \ \ paran x) \ (\ x. \ (paran x \ neparan x))" by auto text \ Formulisati i dokazati naredno tvrdjenje: Ako za svaki broj koji nije paran vazi da je neparan; i ako za svaki neparan broj vazi da nije paran; pokazati da onda za svaki broj vazi da je ili paran ili neparan \ lemma "(\ x. \ paran x \ neparan x) \ (\ x. neparan x \ \ paran x) \ (\ x. paran x \ neparan x)" by auto text\ ako svaki konj ima potkovice; i ako ne postoji covek koji ima potkovice; i ako znamo da postoji makar jedan covek; dokazati da postoji covek koji nije konj \ lemma "(\ x. konj x \ ima_potkovice x) \ \ (\ x. covek x \ ima_potkovice x) \ (\ x. covek x) \ (\ x. covek x \ \ konj x)" by auto text\ ako je svaki kvadrat romb; i ako je svaki kvadrat pravougaonik; i ako znamo da postoji makar jedan kvadrat; onda postoji makar jedan romb koji je istovremeno i pravougaonik \ lemma "(\ x. kvadrat x \ romb x) \ (\ x. kvadrat x \ pravougaonik x) \ (\ x. kvadrat x) \ (\ x. romb x \ pravougaonik x)" by auto end