src/ZF/IMP/Equiv.thy
author wenzelm
Tue, 13 Jun 2006 23:41:39 +0200
changeset 19876 11d447d5d68c
parent 19796 d86e7b1fc472
child 35762 af3ff2ba4c54
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 511
diff changeset
     1
(*  Title:      ZF/IMP/Equiv.thy
482
3a4e092ba69c Initial revision
nipkow
parents:
diff changeset
     2
    ID:         $Id$
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
     3
    Author:     Heiko Loetzbeyer and Robert Sandner, TU München
482
3a4e092ba69c Initial revision
nipkow
parents:
diff changeset
     4
*)
3a4e092ba69c Initial revision
nipkow
parents:
diff changeset
     5
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
     6
header {* Equivalence *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
     7
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 14060
diff changeset
     8
theory Equiv imports Denotation Com begin
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
     9
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    10
lemma aexp_iff [rule_format]:
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    11
  "[| a \<in> aexp; sigma: loc -> nat |] 
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    12
    ==> ALL n. <a,sigma> -a-> n <-> A(a,sigma) = n"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    13
  apply (erule aexp.induct)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    14
     apply (force intro!: evala.intros)+
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    15
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    16
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    17
declare aexp_iff [THEN iffD1, simp]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    18
        aexp_iff [THEN iffD2, intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    19
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    20
inductive_cases [elim!]:
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    21
  "<true,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    22
  "<false,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    23
  "<ROp(f,a0,a1),sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    24
  "<noti(b),sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    25
  "<b0 andi b1,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    26
  "<b0 ori b1,sigma> -b-> x"
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    27
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    28
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    29
lemma bexp_iff [rule_format]:
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    30
  "[| b \<in> bexp; sigma: loc -> nat |] 
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    31
    ==> ALL w. <b,sigma> -b-> w <-> B(b,sigma) = w"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    32
  apply (erule bexp.induct) 
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    33
  apply (auto intro!: evalb.intros)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    34
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    35
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    36
declare bexp_iff [THEN iffD1, simp]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    37
        bexp_iff [THEN iffD2, intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    38
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    39
lemma com1: "<c,sigma> -c-> sigma' ==> <sigma,sigma'> \<in> C(c)"
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    40
  apply (erule evalc.induct)
13612
55d32e76ef4e Adapted to new simplifier.
berghofe
parents: 12610
diff changeset
    41
        apply (simp_all (no_asm_simp))
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    42
     txt {* @{text assign} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    43
     apply (simp add: update_type)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    44
    txt {* @{text comp} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    45
    apply fast
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    46
   txt {* @{text while} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    47
   apply (erule Gamma_bnd_mono [THEN lfp_unfold, THEN ssubst, OF C_subset])
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    48
   apply (simp add: Gamma_def)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    49
  txt {* recursive case of @{text while} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    50
  apply (erule Gamma_bnd_mono [THEN lfp_unfold, THEN ssubst, OF C_subset])
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    51
  apply (auto simp add: Gamma_def)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    52
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    53
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    54
declare B_type [intro!] A_type [intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    55
declare evalc.intros [intro]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    56
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    57
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    58
lemma com2 [rule_format]: "c \<in> com ==> \<forall>x \<in> C(c). <c,fst(x)> -c-> snd(x)"
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    59
  apply (erule com.induct)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    60
      txt {* @{text skip} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    61
      apply force
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    62
     txt {* @{text assign} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    63
     apply force
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    64
    txt {* @{text comp} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    65
    apply force
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    66
   txt {* @{text while} *}
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    67
   apply safe
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    68
   apply simp_all
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    69
   apply (frule Gamma_bnd_mono [OF C_subset], erule Fixedpt.induct, assumption)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    70
   apply (unfold Gamma_def)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    71
   apply force
19796
d86e7b1fc472 quoted "if";
wenzelm
parents: 16417
diff changeset
    72
  txt {* @{text "if"} *}
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    73
  apply auto
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    74
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    75
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    76
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    77
subsection {* Main theorem *}
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    78
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    79
theorem com_equivalence:
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    80
    "c \<in> com ==> C(c) = {io \<in> (loc->nat) \<times> (loc->nat). <c,fst(io)> -c-> snd(io)}"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    81
  by (force intro: C_subset [THEN subsetD] elim: com2 dest: com1)
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    82
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    83
end
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    84