src/ZF/Resid/Terms.ML
author wenzelm
Tue, 20 May 1997 10:48:08 +0200
changeset 3229 cb3c27f2753e
parent 2469 b50b8c0eec01
child 3734 33f355f56f82
permissions -rw-r--r--
SYNC;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1048
diff changeset
     1
(*  Title:      Terms.ML
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1048
diff changeset
     3
    Author:     Ole Rasmussen
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     4
    Copyright   1995  University of Cambridge
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     5
    Logic Image: ZF
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     6
*)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     7
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     8
open Terms;
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     9
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    10
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    11
(*       unmark simplifications                                              *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    12
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    13
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    14
goalw Terms.thy [unmark_def] 
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    15
    "unmark(Var(n)) = Var(n)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    16
by (Asm_simp_tac 1);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    17
val unmark_Var = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    18
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    19
goalw Terms.thy [unmark_def] 
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    20
    "unmark(Fun(t)) = Fun(unmark(t))";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    21
by (Asm_simp_tac 1);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    22
val unmark_Fun = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    23
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    24
goalw Terms.thy [unmark_def] 
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    25
    "unmark(App(b,n,m)) = App(0,unmark(n),unmark(m))";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    26
by (Asm_simp_tac 1);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    27
val unmark_App = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    28
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    29
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    30
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    31
(*        term simplification set                                            *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    32
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    33
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    34
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    35
Addsimps ([unmark_App, unmark_Fun, unmark_Var,
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    36
	   lambda.dom_subset RS subsetD] @ 
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    37
	  lambda.intrs);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    38
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    39
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    40
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    41
(*        unmark lemmas                                                      *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    42
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    43
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    44
goalw Terms.thy [unmark_def] 
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    45
    "!!u.u:redexes ==> unmark(u):lambda";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    46
by (eresolve_tac [redexes.induct] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    47
by (ALLGOALS Asm_simp_tac);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    48
val unmark_type = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    49
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    50
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    51
    "!!u.u:lambda ==> unmark(u) = u";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    52
by (eresolve_tac [lambda.induct] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    53
by (ALLGOALS Asm_simp_tac);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    54
val lambda_unmark = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    55
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    56
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    57
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    58
(*         lift and subst preserve lambda                                    *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    59
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    60
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    61
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    62
    "!!u.[|v:lambda|]==> ALL k:nat.lift_rec(v,k):lambda";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    63
by (eresolve_tac [lambda.induct] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    64
by (ALLGOALS(asm_full_simp_tac (addsplit (!simpset))));
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    65
val liftL_typea = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    66
val liftL_type =liftL_typea RS bspec ;
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    67
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    68
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    69
    "!!n.[|v:lambda|]==>  ALL n:nat.ALL u:lambda.subst_rec(u,v,n):lambda";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    70
by (eresolve_tac [lambda.induct] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    71
by (ALLGOALS(asm_full_simp_tac ((addsplit (!simpset)) addsimps [liftL_type])));
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    72
val substL_typea = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    73
val substL_type = substL_typea RS bspec RS bspec ;
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    74
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    75
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    76
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    77
(*        type-rule for reduction definitions                               *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    78
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    79
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    80
val red_typechecks = [substL_type]@nat_typechecks@lambda.intrs@bool_typechecks;