src/ZF/Resid/Terms.ML
author paulson
Tue, 16 Jul 1996 15:49:46 +0200
changeset 1868 836950047d85
parent 1461 6bcb44e4d6e5
child 2469 b50b8c0eec01
permissions -rw-r--r--
Put in minimal simpset to avoid excessive simplification, just as in revision 1.9 of HOL/indrule.ML
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)";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    16
by (asm_simp_tac lift_ss 1);
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))";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    21
by (asm_simp_tac lift_ss 1);
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))";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    26
by (asm_simp_tac lift_ss 1);
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
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    35
val term_ss = res1_ss addsimps ([unmark_App,unmark_Fun,unmark_Var,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1048
diff changeset
    36
                                lambda.dom_subset RS subsetD]@lambda.intrs);
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    37
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
(*        unmark lemmas                                                      *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    41
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    42
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    43
goalw Terms.thy [unmark_def] 
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    44
    "!!u.u:redexes ==> unmark(u):lambda";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    45
by (eresolve_tac [redexes.induct] 1);
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    46
by (ALLGOALS(asm_simp_tac term_ss));
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    47
val unmark_type = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    48
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    49
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    50
    "!!u.u:lambda ==> unmark(u) = u";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    51
by (eresolve_tac [lambda.induct] 1);
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    52
by (ALLGOALS(asm_simp_tac term_ss));
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    53
val lambda_unmark = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    54
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
(*         lift and subst preserve lambda                                    *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    58
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    59
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    60
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    61
    "!!u.[|v:lambda|]==> ALL k:nat.lift_rec(v,k):lambda";
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    62
by (eresolve_tac [lambda.induct] 1);
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    63
by (ALLGOALS(asm_full_simp_tac (addsplit term_ss)));
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    64
val liftL_typea = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    65
val liftL_type =liftL_typea RS bspec ;
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    66
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    67
goal Terms.thy  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    68
    "!!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
    69
by (eresolve_tac [lambda.induct] 1);
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    70
by (ALLGOALS(asm_full_simp_tac ((addsplit term_ss) addsimps [liftL_type])));
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    71
val substL_typea = result();
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    72
val substL_type = substL_typea RS bspec RS bspec ;
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    73
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
(*        type-rule for reduction definitions                               *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    77
(* ------------------------------------------------------------------------- *)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    78
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    79
val red_typechecks = [substL_type]@nat_typechecks@lambda.intrs@bool_typechecks;