src/ZF/IMP/Equiv.thy
author wenzelm
Mon, 21 Aug 2017 17:15:26 +0200
changeset 66475 d8e0fd64216f
parent 61798 27f3c10b0b50
child 76213 e44d86131648
permissions -rw-r--r--
misc updates for release;
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
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 35762
diff changeset
     2
    Author:     Heiko Loetzbeyer and Robert Sandner, TU München
482
3a4e092ba69c Initial revision
nipkow
parents:
diff changeset
     3
*)
3a4e092ba69c Initial revision
nipkow
parents:
diff changeset
     4
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58871
diff changeset
     5
section \<open>Equivalence\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
     6
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 14060
diff changeset
     7
theory Equiv imports Denotation Com begin
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
     8
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
     9
lemma aexp_iff [rule_format]:
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    10
  "[| a \<in> aexp; sigma: loc -> nat |] 
46822
95f1e700b712 mathematical symbols for Isabelle/ZF example theories
paulson
parents: 40945
diff changeset
    11
    ==> \<forall>n. <a,sigma> -a-> n \<longleftrightarrow> A(a,sigma) = n"
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    12
  apply (erule aexp.induct)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    13
     apply (force intro!: evala.intros)+
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    14
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    15
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    16
declare aexp_iff [THEN iffD1, simp]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    17
        aexp_iff [THEN iffD2, intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    18
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    19
inductive_cases [elim!]:
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    20
  "<true,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    21
  "<false,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    22
  "<ROp(f,a0,a1),sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    23
  "<noti(b),sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    24
  "<b0 andi b1,sigma> -b-> x"
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    25
  "<b0 ori b1,sigma> -b-> x"
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    26
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    27
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    28
lemma bexp_iff [rule_format]:
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    29
  "[| b \<in> bexp; sigma: loc -> nat |] 
46822
95f1e700b712 mathematical symbols for Isabelle/ZF example theories
paulson
parents: 40945
diff changeset
    30
    ==> \<forall>w. <b,sigma> -b-> w \<longleftrightarrow> B(b,sigma) = w"
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    31
  apply (erule bexp.induct) 
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    32
  apply (auto intro!: evalb.intros)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    33
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    34
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    35
declare bexp_iff [THEN iffD1, simp]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    36
        bexp_iff [THEN iffD2, intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    37
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    38
lemma com1: "<c,sigma> -c-> sigma' ==> <sigma,sigma'> \<in> C(c)"
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    39
  apply (erule evalc.induct)
13612
55d32e76ef4e Adapted to new simplifier.
berghofe
parents: 12610
diff changeset
    40
        apply (simp_all (no_asm_simp))
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    41
     txt \<open>\<open>assign\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    42
     apply (simp add: update_type)
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    43
    txt \<open>\<open>comp\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    44
    apply fast
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    45
   txt \<open>\<open>while\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    46
   apply (erule Gamma_bnd_mono [THEN lfp_unfold, THEN ssubst, OF C_subset])
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    47
   apply (simp add: Gamma_def)
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    48
  txt \<open>recursive case of \<open>while\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    49
  apply (erule Gamma_bnd_mono [THEN lfp_unfold, THEN ssubst, OF C_subset])
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    50
  apply (auto simp add: Gamma_def)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    51
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    52
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    53
declare B_type [intro!] A_type [intro!]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    54
declare evalc.intros [intro]
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    55
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    56
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    57
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
    58
  apply (erule com.induct)
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    59
      txt \<open>\<open>skip\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    60
      apply force
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    61
     txt \<open>\<open>assign\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    62
     apply force
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    63
    txt \<open>\<open>comp\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    64
    apply force
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    65
   txt \<open>\<open>while\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    66
   apply safe
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    67
   apply simp_all
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    68
   apply (frule Gamma_bnd_mono [OF C_subset], erule Fixedpt.induct, assumption)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    69
   apply (unfold Gamma_def)
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    70
   apply force
61798
27f3c10b0b50 isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    71
  txt \<open>\<open>if\<close>\<close>
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    72
  apply auto
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    73
  done
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    74
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    75
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58871
diff changeset
    76
subsection \<open>Main theorem\<close>
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    77
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    78
theorem com_equivalence:
8b9845807f77 tuned document sources;
wenzelm
parents: 12606
diff changeset
    79
    "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
    80
  by (force intro: C_subset [THEN subsetD] elim: com2 dest: com1)
12606
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    81
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    82
end
cf1715a5f5ec conversion to Isar/ZF
paulson
parents: 1478
diff changeset
    83