src/HOLCF/IOA/Storage/Correctness.thy
author haftmann
Sat, 19 May 2007 11:33:30 +0200
changeset 23024 70435ffe077d
parent 19740 6b38551d0798
child 25131 2c8caac48ade
permissions -rw-r--r--
fixed text
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
     1
(*  Title:      HOL/IOA/example/Correctness.thy
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 6008
diff changeset
     3
    Author:     Olaf Müller
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
     4
*)
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
     5
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     6
header {* Correctness Proof *}
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
     7
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     8
theory Correctness
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     9
imports SimCorrectness Spec Impl
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    10
begin
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    11
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    12
defaultsort type
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    13
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    14
constdefs
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    15
  sim_relation   :: "((nat * bool) * (nat set * bool)) set"
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    16
  "sim_relation == {qua. let c = fst qua; a = snd qua ;
6008
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    17
                             k = fst c;   b = snd c;
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    18
                             used = fst a; c = snd a
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    19
                         in
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    20
                         (! l:used. l < k) & b=c }"
d0e9b1619468 Memory storage case study from PhD p.240;
mueller
parents:
diff changeset
    21
19740
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    22
declare split_paired_All [simp]
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    23
declare split_paired_Ex [simp del]
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    24
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    25
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    26
(* Idea: instead of impl_con_lemma do not rewrite impl_ioa, but derive
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    27
         simple lemmas asig_of impl_ioa = impl_sig, trans_of impl_ioa = impl_trans
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    28
   Idea: ?ex. move .. should be generally replaced by a step via a subst tac if desired,
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    29
         as this can be done globally *)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    30
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    31
lemma issimulation:
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    32
      "is_simulation sim_relation impl_ioa spec_ioa"
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    33
apply (simp (no_asm) add: is_simulation_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    34
apply (rule conjI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    35
txt {* start states *}
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    36
apply (tactic "SELECT_GOAL (safe_tac set_cs) 1")
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    37
apply (rule_tac x = " ({},False) " in exI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    38
apply (simp add: sim_relation_def starts_of_def Spec.ioa_def Impl.ioa_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    39
txt {* main-part *}
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    40
apply (rule allI)+
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    41
apply (rule imp_conj_lemma)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    42
apply (rename_tac k b used c k' b' a)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    43
apply (induct_tac "a")
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    44
apply (simp_all (no_asm) add: sim_relation_def Impl.ioa_def Impl.trans_def trans_of_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    45
apply (tactic "safe_tac set_cs")
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    46
txt {* NEW *}
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    47
apply (rule_tac x = "(used,True)" in exI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    48
apply simp
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    49
apply (rule transition_is_ex)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    50
apply (simp (no_asm) add: Spec.ioa_def Spec.trans_def trans_of_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    51
txt {* LOC *}
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    52
apply (rule_tac x = " (used Un {k},False) " in exI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    53
apply (simp add: less_SucI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    54
apply (rule transition_is_ex)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    55
apply (simp (no_asm) add: Spec.ioa_def Spec.trans_def trans_of_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    56
apply fast
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    57
txt {* FREE *}
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    58
apply (rule_tac x = " (used - {nat},c) " in exI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    59
apply simp
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    60
apply (rule transition_is_ex)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    61
apply (simp (no_asm) add: Spec.ioa_def Spec.trans_def trans_of_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    62
done
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    63
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    64
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    65
lemma implementation:
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    66
"impl_ioa =<| spec_ioa"
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    67
apply (unfold ioa_implements_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    68
apply (rule conjI)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    69
apply (simp (no_asm) add: Impl.sig_def Spec.sig_def Impl.ioa_def Spec.ioa_def
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    70
  asig_outputs_def asig_of_def asig_inputs_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    71
apply (rule trace_inclusion_for_simulations)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    72
apply (simp (no_asm) add: Impl.sig_def Spec.sig_def Impl.ioa_def Spec.ioa_def
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    73
  externals_def asig_outputs_def asig_of_def asig_inputs_def)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    74
apply (rule issimulation)
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    75
done
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    76
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    77
end