src/HOLCF/explicit_domains/Dnat.ML
author oheimb
Wed, 18 Dec 1996 13:32:29 +0100
changeset 2439 e73cb5924261
parent 2421 a07181dd2118
permissions -rw-r--r--
repaired some proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
     1
(*  Title:      HOLCF/Dnat.ML
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
     3
    Author:     Franz Regensburger
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     4
    Copyright   1993 Technische Universitaet Muenchen
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     5
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     6
Lemmas for dnat.thy 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     7
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     8
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
     9
open Dnat;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    10
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    11
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    12
(* The isomorphisms dnat_rep_iso and dnat_abs_iso are strict               *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    13
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    14
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    15
val dnat_iso_strict = dnat_rep_iso RS (dnat_abs_iso RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    16
        (allI  RSN (2,allI RS iso_strict)));
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    17
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    18
val dnat_rews = [dnat_iso_strict RS conjunct1,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    19
                dnat_iso_strict RS conjunct2];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    20
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    21
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    22
(* Properties of dnat_copy                                                 *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    23
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    24
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    25
fun prover defs thm =  prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    26
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    27
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    28
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    29
        (asm_simp_tac (!simpset addsimps 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    30
                (dnat_rews @ [dnat_abs_iso,dnat_rep_iso])) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    31
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    32
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    33
val dnat_copy = 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    34
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    35
        prover [dnat_copy_def] "dnat_copy`f`UU=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    36
        prover [dnat_copy_def,dzero_def] "dnat_copy`f`dzero= dzero",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    37
        prover [dnat_copy_def,dsucc_def] 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    38
                "n~=UU ==> dnat_copy`f`(dsucc`n) = dsucc`(f`n)"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    39
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    40
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    41
val dnat_rews =  dnat_copy @ dnat_rews; 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    42
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    43
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    44
(* Exhaustion and elimination for dnat                                     *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    45
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    46
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    47
qed_goalw "Exh_dnat" Dnat.thy [dsucc_def,dzero_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    48
        "n = UU | n = dzero | (? x . x~=UU & n = dsucc`x)"
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    49
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    50
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    51
        (Simp_tac  1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    52
        (rtac (dnat_rep_iso RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    53
        (res_inst_tac [("p","dnat_rep`n")] ssumE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    54
        (rtac disjI1 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    55
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    56
        (rtac (disjI1 RS disjI2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    57
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    58
        (res_inst_tac [("p","x")] oneE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    59
        (contr_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    60
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    61
        (rtac (disjI2 RS disjI2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    62
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    63
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    64
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    65
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    66
qed_goal "dnatE" Dnat.thy 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    67
 "[| n=UU ==> Q; n=dzero ==> Q; !!x.[|n=dsucc`x;x~=UU|]==>Q|]==>Q"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    68
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    69
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    70
        (rtac (Exh_dnat RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    71
        (eresolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    72
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    73
        (eresolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    74
        (REPEAT (etac exE 1)),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    75
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    76
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    77
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    78
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    79
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    80
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    81
(* Properties of dnat_when                                                 *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    82
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    83
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    84
fun prover defs thm =  prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    85
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    86
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    87
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    88
        (asm_simp_tac (!simpset addsimps 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    89
                (dnat_rews @ [dnat_abs_iso,dnat_rep_iso])) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    90
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    91
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    92
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    93
val dnat_when = [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    94
        prover [dnat_when_def] "dnat_when`c`f`UU=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    95
        prover [dnat_when_def,dzero_def] "dnat_when`c`f`dzero=c",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    96
        prover [dnat_when_def,dsucc_def] 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    97
                "n~=UU ==> dnat_when`c`f`(dsucc`n)=f`n"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
    98
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
    99
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   100
val dnat_rews = dnat_when @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   101
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   102
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   103
(* Rewrites for  discriminators and  selectors                             *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   104
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   105
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   106
fun prover defs thm = prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   107
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   108
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   109
        (simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   110
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   111
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   112
val dnat_discsel = [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   113
        prover [is_dzero_def] "is_dzero`UU=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   114
        prover [is_dsucc_def] "is_dsucc`UU=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   115
        prover [dpred_def] "dpred`UU=UU"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   116
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   117
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   118
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   119
fun prover defs thm = prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   120
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   121
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   122
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   123
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   124
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   125
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   126
val dnat_discsel = [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   127
        prover [is_dzero_def] "is_dzero`dzero=TT",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   128
        prover [is_dzero_def] "n~=UU ==>is_dzero`(dsucc`n)=FF",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   129
        prover [is_dsucc_def] "is_dsucc`dzero=FF",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   130
        prover [is_dsucc_def] "n~=UU ==> is_dsucc`(dsucc`n)=TT",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   131
        prover [dpred_def] "dpred`dzero=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   132
        prover [dpred_def] "n~=UU ==> dpred`(dsucc`n)=n"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   133
        ] @ dnat_discsel;
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   134
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   135
val dnat_rews = dnat_discsel @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   136
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   137
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   138
(* Definedness and strictness                                              *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   139
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   140
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   141
fun prover contr thm = prove_goal Dnat.thy thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   142
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   143
        [
2439
e73cb5924261 repaired some proofs
oheimb
parents: 2421
diff changeset
   144
        (res_inst_tac [("P1",contr)] classical2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   145
        (simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   146
        (dtac sym 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   147
        (Asm_simp_tac  1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   148
        (simp_tac (!simpset addsimps (prems @ dnat_rews)) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   149
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   150
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   151
val dnat_constrdef = [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   152
        prover "is_dzero`UU ~= UU" "dzero~=UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   153
        prover "is_dsucc`UU ~= UU" "n~=UU ==> dsucc`n~=UU"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   154
        ]; 
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   155
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   156
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   157
fun prover defs thm = prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   158
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   159
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   160
        (simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   161
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   162
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   163
val dnat_constrdef = [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   164
        prover [dsucc_def] "dsucc`UU=UU"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   165
        ] @ dnat_constrdef;
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   166
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   167
val dnat_rews = dnat_constrdef @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   168
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   169
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   170
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   171
(* Distinctness wrt. << and =                                              *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   172
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   173
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   174
val temp = prove_goal Dnat.thy  "~dzero << dsucc`n"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   175
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   176
        [
2439
e73cb5924261 repaired some proofs
oheimb
parents: 2421
diff changeset
   177
        (res_inst_tac [("P1","TT << FF")] classical2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   178
        (resolve_tac dist_less_tr 1),
2421
a07181dd2118 repaired several proofs
oheimb
parents: 2277
diff changeset
   179
        (dres_inst_tac [("fo","is_dzero")] monofun_cfun_arg 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   180
        (etac box_less 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   181
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   182
        (case_tac "n=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   183
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   184
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   185
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   186
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   187
val dnat_dist_less = [temp];
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   188
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   189
val temp = prove_goal Dnat.thy  "n~=UU ==> ~dsucc`n << dzero"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   190
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   191
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   192
        (cut_facts_tac prems 1),
2439
e73cb5924261 repaired some proofs
oheimb
parents: 2421
diff changeset
   193
        (res_inst_tac [("P1","TT << FF")] classical2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   194
        (resolve_tac dist_less_tr 1),
2421
a07181dd2118 repaired several proofs
oheimb
parents: 2277
diff changeset
   195
        (dres_inst_tac [("fo","is_dsucc")] monofun_cfun_arg 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   196
        (etac box_less 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   197
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   198
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   199
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   200
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   201
val dnat_dist_less = temp::dnat_dist_less;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   202
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   203
val temp = prove_goal Dnat.thy   "dzero ~= dsucc`n"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   204
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   205
        [
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   206
        (case_tac "n=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   207
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
2439
e73cb5924261 repaired some proofs
oheimb
parents: 2421
diff changeset
   208
        (res_inst_tac [("P1","TT = FF")] classical2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   209
        (resolve_tac dist_eq_tr 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   210
        (dres_inst_tac [("f","is_dzero")] cfun_arg_cong 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   211
        (etac box_equals 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   212
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   213
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   214
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   215
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   216
val dnat_dist_eq = [temp, temp RS not_sym];
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   217
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   218
val dnat_rews = dnat_dist_less @ dnat_dist_eq @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   219
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   220
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   221
(* Invertibility                                                           *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   222
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   223
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   224
val dnat_invert = 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   225
        [
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   226
prove_goal Dnat.thy 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   227
"[|x1~=UU; y1~=UU; dsucc`x1 << dsucc`y1 |] ==> x1<< y1"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   228
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   229
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   230
        (cut_facts_tac prems 1),
2421
a07181dd2118 repaired several proofs
oheimb
parents: 2277
diff changeset
   231
        (dres_inst_tac [("fo","dnat_when`c`(LAM x.x)")] monofun_cfun_arg 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   232
        (etac box_less 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   233
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   234
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   235
        ])
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   236
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   237
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   238
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   239
(* Injectivity                                                             *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   240
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   241
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   242
val dnat_inject = 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   243
        [
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   244
prove_goal Dnat.thy 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   245
"[|x1~=UU; y1~=UU; dsucc`x1 = dsucc`y1 |] ==> x1= y1"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   246
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   247
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   248
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   249
        (dres_inst_tac [("f","dnat_when`c`(LAM x.x)")] cfun_arg_cong 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   250
        (etac box_equals 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   251
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   252
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   253
        ])
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   254
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   255
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   256
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   257
(* definedness for  discriminators and  selectors                          *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   258
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   259
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   260
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   261
fun prover thm = prove_goal Dnat.thy thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   262
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   263
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   264
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   265
        (rtac dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   266
        (contr_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   267
        (REPEAT (asm_simp_tac (!simpset addsimps dnat_rews) 1))
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   268
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   269
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   270
val dnat_discsel_def = 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   271
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   272
        prover  "n~=UU ==> is_dzero`n ~= UU",
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   273
        prover  "n~=UU ==> is_dsucc`n ~= UU"
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   274
        ];
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   275
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   276
val dnat_rews = dnat_discsel_def @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   277
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   278
 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   279
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   280
(* Properties dnat_take                                                    *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   281
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   282
val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take n`UU = UU"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   283
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   284
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   285
        (res_inst_tac [("n","n")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   286
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   287
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   288
        (simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   289
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   290
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   291
val dnat_take = [temp];
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   292
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   293
val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take 0`xs = UU"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   294
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   295
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   296
        (Asm_simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   297
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   298
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   299
val dnat_take = temp::dnat_take;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   300
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   301
val temp = prove_goalw Dnat.thy [dnat_take_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   302
        "dnat_take (Suc n)`dzero=dzero"
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   303
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   304
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   305
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   306
        (simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   307
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   308
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   309
val dnat_take = temp::dnat_take;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   310
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   311
val temp = prove_goalw Dnat.thy [dnat_take_def]
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   312
  "dnat_take (Suc n)`(dsucc`xs)=dsucc`(dnat_take n ` xs)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   313
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   314
        [
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   315
        (case_tac "xs=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   316
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   317
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   318
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   319
        (res_inst_tac [("n","n")] natE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   320
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   321
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   322
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   323
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   324
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   325
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   326
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   327
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   328
val dnat_take = temp::dnat_take;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   329
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   330
val dnat_rews = dnat_take @ dnat_rews;
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   331
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   332
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   333
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   334
(* take lemma for dnats                                                  *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   335
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   336
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   337
fun prover reach defs thm  = prove_goalw Dnat.thy defs thm
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   338
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   339
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   340
        (res_inst_tac [("t","s1")] (reach RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   341
        (res_inst_tac [("t","s2")] (reach RS subst) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   342
        (stac fix_def2 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   343
        (stac contlub_cfun_fun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   344
        (rtac is_chain_iterate 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1675
diff changeset
   345
        (stac contlub_cfun_fun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   346
        (rtac is_chain_iterate 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   347
        (rtac lub_equal 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   348
        (rtac (is_chain_iterate RS ch2ch_fappL) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   349
        (rtac (is_chain_iterate RS ch2ch_fappL) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   350
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   351
        (resolve_tac prems 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   352
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   353
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   354
val dnat_take_lemma = prover dnat_reach  [dnat_take_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   355
        "(!!n.dnat_take n`s1 = dnat_take n`s2) ==> s1=s2";
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   356
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   357
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   358
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   359
(* Co -induction for dnats                                                 *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   360
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   361
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   362
qed_goalw "dnat_coind_lemma" Dnat.thy [dnat_bisim_def] 
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   363
"dnat_bisim R ==> ! p q. R p q --> dnat_take n`p = dnat_take n`q"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   364
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   365
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   366
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   367
        (nat_ind_tac "n" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   368
        (simp_tac (!simpset addsimps dnat_take) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   369
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   370
        ((etac allE 1) THEN (etac allE 1) THEN (etac (mp RS disjE) 1)),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   371
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   372
        (asm_simp_tac (!simpset addsimps dnat_take) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   373
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   374
        (asm_simp_tac (!simpset addsimps dnat_take) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   375
        (etac exE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   376
        (etac exE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   377
        (asm_simp_tac (!simpset addsimps dnat_take) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   378
        (REPEAT (etac conjE 1)),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   379
        (rtac cfun_arg_cong 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   380
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   381
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   382
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   383
qed_goal "dnat_coind" Dnat.thy "[|dnat_bisim R;R p q|] ==> p = q"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   384
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   385
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   386
        (rtac dnat_take_lemma 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   387
        (rtac (dnat_coind_lemma RS spec RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   388
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   389
        (resolve_tac prems 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   390
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   391
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   392
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   393
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   394
(* structural induction for admissible predicates                          *)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   395
(* ------------------------------------------------------------------------*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   396
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   397
(* not needed any longer
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   398
qed_goal "dnat_ind" Dnat.thy
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   399
"[| adm(P);\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   400
\   P(UU);\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   401
\   P(dzero);\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   402
\   !! s1.[|s1~=UU ; P(s1)|] ==> P(dsucc`s1)|] ==> P(s)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   403
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   404
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   405
        (rtac (dnat_reach RS subst) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   406
        (res_inst_tac [("x","s")] spec 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   407
        (rtac fix_ind 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   408
        (rtac adm_all2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   409
        (rtac adm_subst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   410
        (cont_tacR 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   411
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   412
        (Simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   413
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   414
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   415
        (res_inst_tac [("n","xa")] dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   416
        (asm_simp_tac (!simpset addsimps dnat_copy) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   417
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   418
        (asm_simp_tac (!simpset addsimps dnat_copy) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   419
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   420
        (asm_simp_tac (!simpset addsimps dnat_copy) 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   421
        (case_tac "x`xb=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   422
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   423
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   424
        (eresolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   425
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   426
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   427
*)
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   428
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   429
qed_goal "dnat_finite_ind" Dnat.thy
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   430
"[|P(UU);P(dzero);\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   431
\  !! s1.[|s1~=UU;P(s1)|] ==> P(dsucc`s1)\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   432
\  |] ==> !s.P(dnat_take n`s)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   433
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   434
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   435
        (nat_ind_tac "n" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   436
        (simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   437
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   438
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   439
        (res_inst_tac [("n","s")] dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   440
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   441
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   442
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   443
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   444
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   445
        (case_tac "dnat_take n1`x=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   446
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   447
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   448
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   449
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   450
        (etac spec 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   451
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   452
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   453
qed_goal "dnat_all_finite_lemma1" Dnat.thy
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   454
"!s.dnat_take n`s=UU |dnat_take n`s=s"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   455
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   456
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   457
        (nat_ind_tac "n" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   458
        (simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   459
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   460
        (res_inst_tac [("n","s")] dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   461
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   462
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   463
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   464
        (eres_inst_tac [("x","x")] allE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   465
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   466
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   467
        (asm_simp_tac (!simpset addsimps dnat_rews) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   468
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   469
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   470
qed_goal "dnat_all_finite_lemma2" Dnat.thy "? n.dnat_take n`s=s"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   471
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   472
        [
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   473
        (case_tac "s=UU" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   474
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   475
        (subgoal_tac "(!n.dnat_take(n)`s=UU) |(? n.dnat_take(n)`s=s)" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   476
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   477
        (eres_inst_tac [("P","s=UU")] notE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   478
        (rtac dnat_take_lemma 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   479
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   480
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   481
        (subgoal_tac "!n.!s.dnat_take(n)`s=UU |dnat_take(n)`s=s" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   482
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   483
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   484
        (rtac dnat_all_finite_lemma1 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   485
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   486
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   487
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   488
qed_goal "dnat_ind" Dnat.thy
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   489
"[|P(UU);P(dzero);\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   490
\  !! s1.[|s1~=UU;P(s1)|] ==> P(dsucc`s1)\
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   491
\  |] ==> P(s)"
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   492
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   493
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   494
        (rtac (dnat_all_finite_lemma2 RS exE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   495
        (etac subst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   496
        (rtac (dnat_finite_ind RS spec) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   497
        (REPEAT (resolve_tac prems 1)),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   498
        (REPEAT (atac 1))
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   499
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   500
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   501
2277
9174de6c7143 moved Lift*.* to Up*.*, renaming of all constans and theorems concerned,
oheimb
parents: 2033
diff changeset
   502
qed_goalw "dnat_flat" Dnat.thy [flat_def] "flat(dzero)"
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   503
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   504
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   505
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   506
        (res_inst_tac [("s","x")] dnat_ind 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   507
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   508
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   509
        (res_inst_tac [("n","y")] dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   510
        (fast_tac (HOL_cs addSIs [UU_I]) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   511
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   512
        (asm_simp_tac (!simpset addsimps dnat_dist_less) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   513
        (rtac allI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   514
        (res_inst_tac [("n","y")] dnatE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   515
        (fast_tac (HOL_cs addSIs [UU_I]) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   516
        (asm_simp_tac (!simpset addsimps dnat_dist_less) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   517
        (asm_simp_tac (!simpset addsimps dnat_rews) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   518
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   519
        (subgoal_tac "s1<<xa" 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   520
        (etac allE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   521
        (dtac mp 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   522
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   523
        (etac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   524
        (contr_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   525
        (Asm_simp_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   526
        (resolve_tac  dnat_invert 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   527
        (REPEAT (atac 1))
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   528
        ]);
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   529
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   530
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   531
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   532
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   533
ea0668a1c0ba added 8bit pragmas
regensbu
parents:
diff changeset
   534