25.11.2014 Aufrufe

Verifikation reaktiver Systeme - Universität Kaiserslautern

Verifikation reaktiver Systeme - Universität Kaiserslautern

Verifikation reaktiver Systeme - Universität Kaiserslautern

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

241<br />

ARW_TAC[] THEN<br />

ARW_TAC[ODD_DOUBLE] );<br />

val ODD_EVEN_PRODUCT = prove(‘‘!x y. ODD x /\ EVEN (y*x) ==> EVEN y‘‘,<br />

REPEAT GEN_TAC THEN<br />

REWRITE_TAC[EVEN_MULT] THEN<br />

ONCE_REWRITE_TAC[LEFT_AND_OVER_OR] THEN<br />

ARW_TAC[ONCE_REWRITE_RULE[CONJ_COMM] EVEN_AND_ODD] );<br />

val ASM_IMP_CONJ = prove(‘‘!a b c. (a /\ b ==> c) = (a ==> b ==> c)‘‘,<br />

PROVE_TAC[] );<br />

val DIVIDES_ODD_EVEN = store_thm("DIVIDES_ODD_EVEN",<br />

‘‘!x y. ODD x /\ divides x (2 * y) ==> divides x y‘‘,<br />

REPEAT GEN_TAC THEN<br />

REWRITE_TAC[ODD_EXISTS] THEN<br />

REWRITE_TAC[divides_def] THEN<br />

STRIP_TAC THEN<br />

ONCE_REWRITE_TAC[GSYM (SPEC ‘‘1‘‘ (SPEC ‘‘q * x‘‘<br />

(SPEC ‘‘y:num‘‘ MULT_MONO_EQ)))] THEN<br />

REWRITE_TAC[SUC1_IS_2] THEN<br />

ASM_REWRITE_TAC[] THEN<br />

REWRITE_TAC[EQT_ELIM (AC_CONV(MULT_ASSOC,MULT_COMM)<br />

‘‘2 * (q’ * SUC (2 * m)) = 2 * q’ * SUC (2 * m)‘‘)] THEN<br />

REWRITE_TAC[ONCE_REWRITE_RULE[MULT_COMM] MULT_MONO_EQ] THEN<br />

REWRITE_TAC[GSYM EVEN_EXISTS] THEN<br />

ASSUME_TAC (UNDISCH_ALL (REWRITE_RULE[SUC1_IS_2] (SPEC ‘‘m:num‘‘<br />

(SPEC ‘‘x:num‘‘ ODD_EXISTS_IMP)))) THEN<br />

ASSUME_TAC (UNDISCH_ALL<br />

(SPEC ‘‘y:num‘‘ (SPEC ‘‘q*x‘‘ EVEN_DOUBLE_EQ))) THEN<br />

ASSUME_TAC (UNDISCH_ALL (REWRITE_RULE [ASM_IMP_CONJ] (SPEC ‘‘q:num‘‘<br />

(SPEC ‘‘x:num‘‘ ODD_EVEN_PRODUCT)))) THEN<br />

PROVE_TAC[] );<br />

val ODD_DIVIDES_ODD = store_thm("ODD_DIVIDES_ODD",<br />

‘‘!x y. ODD x /\ divides y x ==> ODD y‘‘,<br />

REPEAT GEN_TAC THEN<br />

REWRITE_TAC[CONTRAPOS_CONV ‘‘ODD x /\ divides y x ==> ODD y‘‘] THEN<br />

REWRITE_TAC[DE_MORGAN_THM] THEN<br />

REWRITE_TAC[GSYM EVEN_ODD] THEN<br />

REWRITE_TAC[EVEN_EXISTS, divides_def] THEN<br />

STRIP_TAC THEN<br />

ASM_REWRITE_TAC[] THEN<br />

LEFT_DISJ_TAC THEN<br />

ARW_TAC[] THEN<br />

EXISTS_TAC ‘‘m*q‘‘ THEN<br />

ARW_TAC[AC_CONV(MULT_ASSOC,MULT_COMM) ‘‘q * (2 * m) = 2 * (m * q)‘‘] );<br />

val IS_GCD_DOUBLE = store_thm("IS_GCD_DOUBLE",<br />

‘‘is_gcd (2*a) (2*b) (2*c) = is_gcd a b c‘‘,

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!