src/ZF/UNITY/NatPlus.ML
author ehmety
Thu, 15 Nov 2001 16:46:38 +0100
changeset 12197 d9320fb0a570
permissions -rw-r--r--
New files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12197
d9320fb0a570 New files
ehmety
parents:
diff changeset
     1
(*  Title:      ZF/UNITY/NatPlus.ML
d9320fb0a570 New files
ehmety
parents:
diff changeset
     2
    ID:         $Id$
d9320fb0a570 New files
ehmety
parents:
diff changeset
     3
    Author:     Sidi O Ehmety, Cambridge University Computer Laboratory
d9320fb0a570 New files
ehmety
parents:
diff changeset
     4
    Copyright   2001  University of Cambridge
d9320fb0a570 New files
ehmety
parents:
diff changeset
     5
d9320fb0a570 New files
ehmety
parents:
diff changeset
     6
More theorems on naturals
d9320fb0a570 New files
ehmety
parents:
diff changeset
     7
d9320fb0a570 New files
ehmety
parents:
diff changeset
     8
*)
d9320fb0a570 New files
ehmety
parents:
diff changeset
     9
d9320fb0a570 New files
ehmety
parents:
diff changeset
    10
Goal "[| m:nat; n:nat |] \
d9320fb0a570 New files
ehmety
parents:
diff changeset
    11
\  ==> (m < succ(n)) <-> (m = 0 | (EX j:nat. m = succ(j) & j < n))";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    12
by (induct_tac "m" 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    13
by Auto_tac;
d9320fb0a570 New files
ehmety
parents:
diff changeset
    14
qed "lt_succ_eq_0_disj";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    15
d9320fb0a570 New files
ehmety
parents:
diff changeset
    16
(***** HAVE BEEN MOVED TO ZF BY LCP 
d9320fb0a570 New files
ehmety
parents:
diff changeset
    17
Goal "[| m:nat; n:nat |] ==> m #- n = 0 <-> m le n";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    18
by (auto_tac (claset(), simpset() addsimps [le_iff, diff_self_eq_0]));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    19
by (force_tac (claset(), simpset() addsimps [less_iff_succ_add ]) 2);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    20
by (res_inst_tac [("Pa", "False")] swap 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    21
by (ALLGOALS(asm_full_simp_tac (simpset() 
d9320fb0a570 New files
ehmety
parents:
diff changeset
    22
                addsimps [not_lt_iff_le, le_iff])));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    23
by (auto_tac (claset(), simpset() addsimps [zero_less_diff RS iff_sym]));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    24
qed "diff_is_0_iff2";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    25
d9320fb0a570 New files
ehmety
parents:
diff changeset
    26
d9320fb0a570 New files
ehmety
parents:
diff changeset
    27
Goal  "m #- n = 0 <-> natify(m) le natify(n)";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    28
by (asm_simp_tac (simpset() addsimps [diff_is_0_iff2 RS iff_sym]) 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    29
qed "diff_is_0_iff";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    30
d9320fb0a570 New files
ehmety
parents:
diff changeset
    31
Goal "n:nat ==> natify(n)=0 <-> n=0";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    32
by (Asm_simp_tac 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    33
qed "natify_of_nat_is_0_iff";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    34
Addsimps [natify_of_nat_is_0_iff];
d9320fb0a570 New files
ehmety
parents:
diff changeset
    35
d9320fb0a570 New files
ehmety
parents:
diff changeset
    36
Goal "n:nat ==> 0 = natify(n) <-> n=0";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    37
by Auto_tac;
d9320fb0a570 New files
ehmety
parents:
diff changeset
    38
qed "natify_of_nat_is_0_iff2";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    39
Addsimps [natify_of_nat_is_0_iff2];
d9320fb0a570 New files
ehmety
parents:
diff changeset
    40
d9320fb0a570 New files
ehmety
parents:
diff changeset
    41
Goal "[| a:nat; b:nat |] ==> \
d9320fb0a570 New files
ehmety
parents:
diff changeset
    42
\ (P(a #- b)) <-> ((a < b -->P(0)) & (ALL d:nat. a = b #+ d --> P(d)))";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    43
by (case_tac "a le b" 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    44
by (asm_full_simp_tac (simpset() 
d9320fb0a570 New files
ehmety
parents:
diff changeset
    45
           addsimps [diff_is_0_iff2 RS iff_sym]) 1);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    46
by Safe_tac;
d9320fb0a570 New files
ehmety
parents:
diff changeset
    47
by (ALLGOALS(asm_full_simp_tac (simpset() 
d9320fb0a570 New files
ehmety
parents:
diff changeset
    48
                 addsimps [le_iff, not_lt_iff_le])));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    49
by Safe_tac;
d9320fb0a570 New files
ehmety
parents:
diff changeset
    50
by (ALLGOALS(rotate_tac ~1));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    51
by (ALLGOALS(Asm_full_simp_tac));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    52
by (dtac lt_not_sym 2);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    53
by (Asm_full_simp_tac 2);
d9320fb0a570 New files
ehmety
parents:
diff changeset
    54
by (ALLGOALS(dres_inst_tac [("x", "a #- b")] bspec));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    55
by (ALLGOALS(Asm_simp_tac));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    56
by (ALLGOALS(dtac (leI RS add_diff_inverse)));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    57
by (ALLGOALS(rotate_tac ~1));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    58
by (ALLGOALS(Asm_full_simp_tac));
d9320fb0a570 New files
ehmety
parents:
diff changeset
    59
qed "nat_diff_split";
d9320fb0a570 New files
ehmety
parents:
diff changeset
    60
****)
d9320fb0a570 New files
ehmety
parents:
diff changeset
    61
d9320fb0a570 New files
ehmety
parents:
diff changeset
    62
d9320fb0a570 New files
ehmety
parents:
diff changeset
    63