src/HOLCF/IOA/Storage/Correctness.thy
author wenzelm
Fri, 15 Aug 2008 15:50:52 +0200
changeset 27885 76b51cd0a37c
parent 27361 24ec32bee347
child 35174 e15040ae75d7
permissions -rw-r--r--
renamed T.source_of' to T.source_position_of;
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
25131
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    14
definition
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    15
  sim_relation :: "((nat * bool) * (nat set * bool)) set" where
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    16
  "sim_relation = {qua. let c = fst qua; a = snd qua ;
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    17
                            k = fst c;   b = snd c;
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    18
                            used = fst a; c = snd a
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    19
                        in
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19740
diff changeset
    20
                        (! l:used. l < k) & b=c}"
6008
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 *}
26359
6d437bde2f1d more antiquotations
haftmann
parents: 25131
diff changeset
    36
apply (auto)[1]
19740
6b38551d0798 removed legacy ML scripts;
wenzelm
parents: 17244
diff changeset
    37
apply (rule_tac x = " ({},False) " in exI)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    38
apply (simp add: sim_relation_def starts_of_def spec_ioa_def impl_ioa_def)
19740
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")
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    44
apply (simp_all (no_asm) add: sim_relation_def impl_ioa_def impl_trans_def trans_of_def)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 25131
diff changeset
    45
apply auto
19740
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)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    50
apply (simp (no_asm) add: spec_ioa_def spec_trans_def trans_of_def)
19740
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)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    55
apply (simp (no_asm) add: spec_ioa_def spec_trans_def trans_of_def)
19740
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)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    61
apply (simp (no_asm) add: spec_ioa_def spec_trans_def trans_of_def)
19740
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)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    69
apply (simp (no_asm) add: impl_sig_def spec_sig_def impl_ioa_def spec_ioa_def
19740
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)
27361
24ec32bee347 modernized specifications;
wenzelm
parents: 26359
diff changeset
    72
apply (simp (no_asm) add: impl_sig_def spec_sig_def impl_ioa_def spec_ioa_def
19740
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