src/ZF/Resid/Terms.ML
author lcp
Tue, 25 Jul 1995 17:03:59 +0200
changeset 1195 686e3eb613b9
parent 1048 5ba0314f8214
child 1461 6bcb44e4d6e5
permissions -rw-r--r--
match_bvs no longer puts a name in the alist if it is null ("")
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     1
(*  Title: 	Terms.ML
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     2
    ID:         $Id$
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     3
    Author: 	Ole Rasmussen
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,
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    36
				lambda.dom_subset RS subsetD]@lambda.intrs);
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;