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

Quelle  EvalHeap.thy

  Sprache: Isabelle
 

theory "EvalHeap"
  imports "AList-Utils" Env Nominal2.Nominal2 "HOLCF-Utils"
begin

subsubsection Conversion from heaps to environments

fun
  evalHeap :: "('var × 'exp) list ==> ('exp ==> 'value::{pure,pcpo}) ==> 'var ==> 'value"
where
  "evalHeap [] _ = "
"evalHeap ((x,e)#h) eval = (evalHeap h eval) (x := eval e)"

lemma cont2cont_evalHeap[simp, cont2cont]:
  "( e . e snd ` set h ==> cont (λρ. eval ρ e)) ==> cont (λ ρ. evalHeap h (eval ρ))"
  by(induct h, auto)

lemma evalHeap_eqvt[eqvt]:
   evalHeap h eval = evalHeap (π h) (π eval)"
  by (induct h) (auto simp add:fun_upd_eqvt  simp del: fun_upd_apply)

lemma edom_evalHeap_subset:"edom (evalHeap h eval) domA h"
  by (induct h eval rule:evalHeap.induct) (auto dest:subsetD[OF edom_fun_upd_subset] simp del: fun_upd_apply)

lemma evalHeap_cong[fundef_cong]:
  "[ heap1 = heap2 ; ( e. e snd ` set heap2 ==> eval1 e = eval2 e) ]
    ==> evalHeap heap1 eval1 = evalHeap heap2 eval2"
 by (induct heap2 eval2 arbitrary:heap1 rule:evalHeap.induct, auto)

lemma lookupEvalHeap:
  assumes "v domA h"
  shows "(evalHeap h f) v = f (the (map_of h v))"
  using assms
  by (induct h f rule: evalHeap.induct) auto

lemma lookupEvalHeap':
  assumes "map_of Γ v = Some e"
  shows "(evalHeap Γ f) v = f e"
  using assms
  by (induct Γ f rule: evalHeap.induct) auto

lemma lookupEvalHeap_other[simp]:
  assumes "v domA Γ"
  shows "(evalHeap Γ f) v = "
  using assms
  by (induct Γ f rule: evalHeap.induct) auto

lemma env_restr_evalHeap_noop:
  "domA h S ==> env_restr S (evalHeap h eval) = evalHeap h eval"
  apply (rule ext)
  apply (case_tac "x S")
  apply (auto simp add: lookupEvalHeap intro: lookupEvalHeap_other)
  done

lemma env_restr_evalHeap_same[simp]:
  "env_restr (domA h) (evalHeap h eval) = evalHeap h eval"
  by (simp add: env_restr_evalHeap_noop)

lemma evalHeap_cong':
  "[ ( x. x domA heap ==> eval1 (the (map_of heap x)) = eval2 (the (map_of heap x))) ]
    ==> evalHeap heap eval1 = evalHeap heap eval2"
 apply (rule ext)
 apply (case_tac "x domA heap")
 apply (auto simp add: lookupEvalHeap)
 done

lemma lookupEvalHeapNotAppend[simp]:
  assumes "x domA Γ"
  shows "(evalHeap (Γ@h) f) x = evalHeap h f x"
  using assms by (induct Γ, auto)

lemma evalHeap_delete[simp]: "evalHeap (delete x Γ) eval = env_delete x (evalHeap Γ eval)"
  by (induct Γ) auto

lemma evalHeap_mono:
  "x domA Γ ==>
  evalHeap Γ eval evalHeap ((x, e) # Γ) eval"
   apply simp
   apply (rule fun_belowI)
   apply (case_tac "xa domA Γ")
   apply (case_tac "xa = x")
   apply auto
   done

subsubsection Reordering lemmas

lemma evalHeap_reorder:
  assumes "map_of Γ = map_of Δ"
  shows "evalHeap Γ h = evalHeap Δ h"
proof (rule ext)
  from assms
  have *: "domA Γ = domA Δ" by (metis dom_map_of_conv_domA)

  fix x
  show "evalHeap Γ h x = evalHeap Δ h x" 
    using assms(1) *
    apply (cases "x domA Γ")
    apply (auto simp add: lookupEvalHeap)
    done
qed

lemma evalHeap_reorder_head:
  assumes "x y"
  shows "evalHeap ((x,e1)#(y,e2)#Γ) eval = evalHeap ((y,e2)#(x,e1)#Γ) eval"
  by (rule evalHeap_reorder) (simp add: fun_upd_twist[OF assms])

lemma evalHeap_reorder_head_append:
  assumes "x domA Γ"
  shows "evalHeap ((x,e)#Γ@Δ) eval = evalHeap (Γ @ ((x,e)#Δ)) eval"
  by (rule evalHeap_reorder) (simp, metis assms dom_map_of_conv_domA map_add_upd_left)

lemma evalHeap_subst_exp:
  assumes "eval e = eval e'"
  shows "evalHeap ((x,e)#Γ) eval = evalHeap ((x,e')#Γ) eval"
  by (simp add: assms)

end

Messung V0.5 in Prozent
C=90 H=94 G=91

¤ Dauer der Verarbeitung: 0.8 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.