Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/JinjaDCI/J/   (Sammlung formaler Beweise Version 2026-5©)  Datei vom 29.4.2026 mit Größe 8 kB image not shown  

Quelle  DefAss.thy

  Sprache: Isabelle
 

(*  Title:      JinjaDCI/J/DefAss.thy
    Author:     Tobias Nipkow, Susannah Mansky
    Copyright   2003 Technische Universitaet Muenchen, 2019-20 UIUC

    Based on the Jinja theory J/DefAss.thy by Tobias Nipkow
*)


section  Definite assignment

theory DefAss imports BigStep begin

subsection "Hypersets"

type_synonym 'a hyperset = "'a set option"

definition hyperUn :: "'a hyperset ==> 'a hyperset ==> 'a hyperset"   (infixl  65)
where
  "A B case A of None ==> None
                 | A ==> (case B of None ==> None | B ==> A B)"

definition hyperInt :: "'a hyperset ==> 'a hyperset ==> 'a hyperset"   (infixl  70)
where
  "A B case A of None ==> B
                 | A ==> (case B of None ==> A | B ==> A B)"

definition hyperDiff1 :: "'a hyperset ==> 'a ==> 'a hyperset"   (infixl  65)
where
  "A a case A of None ==> None | A ==> A - {a}"

definition hyper_isin :: "'a ==> 'a hyperset ==> bool"   (infix  50)
where
  "a A case A of None ==> True | A ==> a A"

definition hyper_subset :: "'a hyperset ==> 'a hyperset ==> bool"   (infix  50)
where
  "A B case B of None ==> True
                 | B ==> (case A of None ==> False | A ==> A B)"

lemmas hyperset_defs =
 hyperUn_def hyperInt_def hyperDiff1_def hyper_isin_def hyper_subset_def

lemma [simp]: "{} A = A A {} = A"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "A B = A B A a = A - {a}"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "None A = None A None = None"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "a None None a = None"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma hyper_isin_union: "x A ==> x A B"
 by(case_tac B, auto simp: hyper_isin_def)

lemma hyperUn_assoc: "(A B) C = A (B C)"
(*<*)by(simp add:hyperset_defs Un_assoc)(*>*)

lemma hyper_insert_comm: "A {a} = {a} A A ({a} B) = {a} (A B)"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma hyper_comm: "A B = B A A B C = B A C"
(*<*)
proof(cases A)
  case SomeA: Some then show ?thesis
  proof(cases B)
    case SomeB: Some with SomeA show ?thesis
    proof(cases C)
      case SomeC: Some with SomeA SomeB show ?thesis
        by(simp add: Un_left_commute Un_commute)
    qed (simp add: Un_commute)
  qed simp
qed simp
(*>*)

subsection "Definite assignment"

primrec
  A  :: "'a exp ==> 'a hyperset"
  and As :: "'a exp list ==> 'a hyperset"
where
  "A (new C) = {}"
"A (Cast C e) = A e"
"A (Val v) = {}"
"A (e1 «bop¬ e2) = A e1 A e2"
"A (Var V) = {}"
"A (LAss V e) = {V} A e"
"A (eF{D}) = A e"
"A (CsF{D}) = {}"
"A (e1F{D}:=e2) = A e1 A e2"
"A (CsF{D}:=e2) = A e2"
"A (eM(es)) = A e As es"
"A (CsM(es)) = As es"
"A ({V:T; e}) = A e V"
"A (e1;;e2) = A e1 A e2"
"A (if (e) e1 else e2) = A e (A e1 A e2)"
"A (while (b) e) = A b"
"A (throw e) = None"
"A (try e1 catch(C V) e2) = A e1 (A e2 V)"
"A (INIT C (Cs,b) e) = {}"
"A (RI (C,e);Cs e') = A e"

"As ([]) = {}"
"As (e#es) = A e As es"

primrec
  D  :: "'a exp ==> 'a hyperset ==> bool"
  and Ds :: "'a exp list ==> 'a hyperset ==> bool"
where
  "D (new C) A = True"
"D (Cast C e) A = D e A"
"D (Val v) A = True"
"D (e1 «bop¬ e2) A = (D e1 A D e2 (A A e1))"
"D (Var V) A = (V A)"
"D (LAss V e) A = D e A"
"D (eF{D}) A = D e A"
"D (CsF{D}) A = True"
"D (e1F{D}:=e2) A = (D e1 A D e2 (A A e1))"
"D (CsF{D}:=e2) A = D e2 A"
"D (eM(es)) A = (D e A Ds es (A A e))"
"D (CsM(es)) A = Ds es A"
"D ({V:T; e}) A = D e (A V)"
"D (e1;;e2) A = (D e1 A D e2 (A A e1))"
"D (if (e) e1 else e2) A =
  (D e A D e1 (A A e) D e2 (A A e))"
"D (while (e) c) A = (D e A D c (A A e))"
"D (throw e) A = D e A"
"D (try e1 catch(C V) e2) A = (D e1 A D e2 (A {V}))"
"D (INIT C (Cs,b) e) A = D e A"
"D (RI (C,e);Cs e') A = (D e A D e' A)"

"Ds ([]) A = True"
"Ds (e#es) A = (D e A Ds es (A A e))"

lemma As_map_Val[simp]: "As (map Val vs) = {}"
(*<*)by (induct vs) simp_all(*>*)

lemma D_append[iff]: "A. Ds (es @ es') A = (Ds es A Ds es' (A As es))"
(*<*)by (induct es type:list) (auto simp:hyperUn_assoc)(*>*)


lemma A_fv: "A. A e = A ==> A fv e"
and  "A. As es = A ==> A fvs es"
(*<*)
by (induct e and es rule: A.induct As.induct)
   (fastforce simp add:hyperset_defs)+
(*>*)


lemma sqUn_lem: "A A' ==> A B A' B"
(*<*)by(simp add:hyperset_defs) blast(*>*)

lemma diff_lem: "A A' ==> A b A' b"
(*<*)by(simp add:hyperset_defs) blast(*>*)

(* This order of the premises avoids looping of the simplifier *)
lemma D_mono: "A A'. A A' ==> D e A ==> D (e::'a exp) A'"
and Ds_mono: "A A'. A A' ==> Ds es A ==> Ds (es::'a exp list) A'"
(*<*)
proof(induct e and es rule: D.induct Ds.induct)
  case BinOp then show ?case by simp (iprover dest:sqUn_lem)
next
  case Var then show ?case by (fastforce simp add:hyperset_defs)
next
  case FAss then show ?case by simp (iprover dest:sqUn_lem)
next
  case Call then show ?case by simp (iprover dest:sqUn_lem)
next
  case Block then show ?case by simp (iprover dest:diff_lem)
next
  case Seq then show ?case by simp (iprover dest:sqUn_lem)
next
  case Cond then show ?case by simp (iprover dest:sqUn_lem)
next
  case While then show ?case by simp (iprover dest:sqUn_lem)
next
  case TryCatch then show ?case by simp (iprover dest:sqUn_lem)
next
  case Cons_exp then show ?case by simp (iprover dest:sqUn_lem)
qed simp_all
(*>*)

(* And this is the order of premises preferred during application: *)
lemma D_mono': "D e A ==> A A' ==> D e A'"
and Ds_mono': "Ds es A ==> A A' ==> Ds es A'"
(*<*)by(blast intro:D_mono, blast intro:Ds_mono)(*>*)


lemma Ds_Vals: "Ds (map Val vs) A" by(induct vs, auto)

end

Messung V0.5 in Prozent
C=87 H=100 G=93

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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.