src/HOLCF/ex/Dnat.ML
author wenzelm
Fri, 10 Oct 1997 19:02:28 +0200
changeset 3842 b55686a7b22c
parent 3324 6b26b886ff69
child 4044 fdfef2d484ca
permissions -rw-r--r--
fixed dots;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     1
(*  Title:      HOLCF/Dnat.ML
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     2
    ID:         $Id$
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     3
    Author:     Franz Regensburger
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     4
    Copyright   1993, 1995 Technische Universitaet Muenchen
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     5
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     6
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     7
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     8
open Dnat;
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     9
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    10
(* ------------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    11
(* expand fixed point properties                                             *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    12
(* ------------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    13
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    14
bind_thm ("iterator_def2", fix_prover2 Dnat.thy iterator_def 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    15
	"iterator = (LAM n f x. case n of dzero => x | \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    16
\                                     dsucc`m => f`(iterator`m`f`x))");
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    17
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    18
(* ------------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    19
(* recursive  properties                                                     *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    20
(* ------------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    21
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    22
qed_goal "iterator1" Dnat.thy "iterator`UU`f`x = UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    23
 (fn prems =>
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    24
	[
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    25
	(rtac (iterator_def2 RS ssubst) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    26
	(simp_tac (HOLCF_ss addsimps dnat.rews) 1)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    27
	]);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    28
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    29
qed_goal "iterator2" Dnat.thy "iterator`dzero`f`x = x"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    30
 (fn prems =>
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    31
	[
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    32
	(rtac (iterator_def2 RS ssubst) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    33
	(simp_tac (HOLCF_ss addsimps dnat.rews) 1)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    34
	]);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    35
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    36
qed_goal "iterator3" Dnat.thy 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    37
"n~=UU ==> iterator`(dsucc`n)`f`x = f`(iterator`n`f`x)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    38
 (fn prems =>
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    39
	[
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    40
	(cut_facts_tac prems 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    41
	(rtac trans 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    42
	(rtac (iterator_def2 RS ssubst) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    43
	(asm_simp_tac (HOLCF_ss addsimps dnat.rews) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    44
	(rtac refl 1)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    45
	]);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    46
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    47
val iterator_rews = 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    48
	[iterator1, iterator2, iterator3];
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    49
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3324
diff changeset
    50
val dnat_flat = prove_goal Dnat.thy "!x y::dnat. x<<y --> x=UU | x=y" 
3324
6b26b886ff69 Eliminated the prediates flat,chfin
slotosch
parents: 2570
diff changeset
    51
(fn _ => [
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    52
	(rtac allI 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    53
	(res_inst_tac [("x","x")] dnat.ind 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    54
	(fast_tac HOL_cs 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    55
	(rtac allI 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    56
	(res_inst_tac [("x","y")] dnat.cases 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    57
	(fast_tac (HOL_cs addSIs [UU_I]) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    58
	(Asm_simp_tac 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    59
	(asm_simp_tac (!simpset addsimps dnat.dists_le) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    60
	(rtac allI 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    61
	(res_inst_tac [("x","y")] dnat.cases 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    62
	(fast_tac (HOL_cs addSIs [UU_I]) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    63
	(asm_simp_tac (!simpset addsimps dnat.dists_le) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    64
	(asm_simp_tac (!simpset addsimps dnat.rews) 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    65
	(strip_tac 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    66
	(subgoal_tac "d<<da" 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    67
	(etac allE 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    68
	(dtac mp 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    69
	(atac 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    70
	(etac disjE 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    71
	(contr_tac 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    72
	(Asm_simp_tac 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    73
	(resolve_tac  dnat.inverts 1),
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    74
	(REPEAT (atac 1))]);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    75