Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Forward.thy

  Sprache: Isabelle
 

theory Forward imports TPrimes begin

text\noindent
  proof material: of, OF, THEN, simplify, rule_format.
 


text\noindent
  most developments...
 


(** Commutativity **)

lemma is_gcd_commute: "is_gcd k m n = is_gcd k n m"
apply (auto simp add: is_gcd_def)
done

lemma gcd_commute: "gcd m n = gcd n m"
apply (rule is_gcd_unique)
apply (rule is_gcd)
apply (subst is_gcd_commute)
apply (simp add: is_gcd)
done

lemma gcd_1 [simp]: "gcd m (Suc 0) = Suc 0"
apply simp
done

lemma gcd_1_left [simp]: "gcd (Suc 0) m = Suc 0"
apply (simp add: gcd_commute [of "Suc 0"])
done

text\noindent
  far as HERE.
 


text\noindent
  THIS PROOF
 


lemma gcd_mult_distrib2: "k * gcd m n = gcd (k*m) (k*n)"
apply (induct_tac m n rule: gcd.induct)
apply (case_tac "n=0")
apply simp
apply (case_tac "k=0")
apply simp_all
done

text 
 {thm[display] gcd_mult_distrib2}
 rulename{gcd_mult_distrib2}
 


text\noindent
 , simplified
 



lemmas gcd_mult_0 = gcd_mult_distrib2 [of k 1for k
lemmas gcd_mult_1 = gcd_mult_0 [simplified]

lemmas where1 = gcd_mult_distrib2 [where m=1]

lemmas where2 = gcd_mult_distrib2 [where m=1 and k=1]

lemmas where3 = gcd_mult_distrib2 [where m=1 and k="j+k"for j k

text 
  using ``of'':
 {thm[display] gcd_mult_distrib2 [of _ 1]}

  using ``where'':
 {thm[display] gcd_mult_distrib2 [where m=1]}

  using ``where'', ``and'':
 {thm[display] gcd_mult_distrib2 [where m=1 and k="j+k"]}

 {thm[display] gcd_mult_0}
 rulename{gcd_mult_0}

 {thm[display] gcd_mult_1}
 rulename{gcd_mult_1}

 {thm[display] sym}
 rulename{sym}
 


lemmas gcd_mult0 = gcd_mult_1 [THEN sym]
      (*not quite right: we need ?k but this gives k*)

lemmas gcd_mult0' = gcd_mult_distrib2 [of k 1, simplified, THEN sym] for k
      (*better in one step!*)

text 
  legible, and variables properly generalized
 


lemma gcd_mult [simp]: "gcd k (k*n) = k"
by (rule gcd_mult_distrib2 [of k 1, simplified, THEN sym])


lemmas gcd_self0 = gcd_mult [of k 1, simplified] for k


text 
 {thm[display] gcd_mult}
 rulename{gcd_mult}

 {thm[display] gcd_self0}
 rulename{gcd_self0}
 


text 
  handy with THEN

 {thm[display] iffD1}
 rulename{iffD1}

 {thm[display] iffD2}
 rulename{iffD2}
 



text 
 : more legible, and variables properly generalized
 


lemma gcd_self [simp]: "gcd k k = k"
by (rule gcd_mult [of k 1, simplified])


text
  SECTION: Methods for Forward Proof

 

  arg_cong, useful in forward steps
 {thm[display] arg_cong[no_vars]}
 rulename{arg_cong}
 


lemma "2 u ==> u*m Suc(u*n)"
apply (intro notI)
txt
  using arg_cong
 {subgoals[display,indent=0,margin=65]}
 

apply (drule_tac f="λx. x mod u" in arg_cong)
txt
  using arg_cong
 {subgoals[display,indent=0,margin=65]}
 

apply (simp add: mod_Suc)
done

text
  just used this rule:
 {thm[display] mod_Suc[no_vars]}
 rulename{mod_Suc}

 {thm[display] mult_le_mono1[no_vars]}
 rulename{mult_le_mono1}
 



text
  of "insert"
 


lemma relprime_dvd_mult:
      "[ gcd k n = 1; k dvd m*n ] ==> k dvd m"
apply (insert gcd_mult_distrib2 [of m k n])
txt@{subgoals[display,indent=0,margin=65]}
apply simp
txt@{subgoals[display,indent=0,margin=65]}
apply (erule_tac t="m" in ssubst)
apply simp
done


text 
 {thm[display] relprime_dvd_mult}
 rulename{relprime_dvd_mult}

  example of "insert"

 {thm[display] div_mult_mod_eq}
 rulename{div_mult_mod_eq}
 


lemma relprime_dvd_mult_iff: "gcd k n = 1 ==> (k dvd m*n) = (k dvd m)"
by (auto intro: relprime_dvd_mult elim: dvdE)

lemma relprime_20_81: "gcd 20 81 = 1"
by (simp add: gcd.simps)

text 
  of 'OF'

 {thm[display] relprime_dvd_mult}
 rulename{relprime_dvd_mult}

 {thm[display] relprime_dvd_mult [OF relprime_20_81]}

 {thm[display] dvd_refl}
 rulename{dvd_refl}

 {thm[display] dvd_add}
 rulename{dvd_add}

 {thm[display] dvd_add [OF dvd_refl dvd_refl]}

 {thm[display] dvd_add [OF _ dvd_refl]}
 


lemma "[(z::int) < 37; 66 < 2*z; z*z 1225; Q(34); Q(36)] ==> Q(z)"
apply (subgoal_tac "z = 34 z = 36")
txt
  tactic leaves two subgoals:
 {subgoals[display,indent=0,margin=65]}
 

apply blast
apply (subgoal_tac "z 35")
txt
  tactic leaves two subgoals:
 {subgoals[display,indent=0,margin=65]}
 

apply arith
apply force
done


end

Messung V0.5 in Prozent
C=54 H=100 G=80

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-06-29) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik