| author | wenzelm | 
| Mon, 10 May 2021 18:31:18 +0200 | |
| changeset 73658 | f6b453449cc6 | 
| parent 67399 | eab6ce8368fa | 
| child 73869 | 7181130f5872 | 
| permissions | -rw-r--r-- | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 1 | (* Title: HOL/Import/HOL_Light_Maps.thy | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 2 | Author: Cezary Kaliszyk, University of Innsbruck | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 3 | Author: Alexander Krauss, QAware GmbH | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 4 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 5 | Based on earlier code by Steven Obua and Sebastian Skalberg | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 6 | *) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 7 | |
| 63167 | 8 | section \<open>Type and constant mappings of HOL Light importer\<close> | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 9 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 10 | theory HOL_Light_Maps | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 11 | imports Import_Setup | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 12 | begin | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 13 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 14 | lemma [import_const T]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 15 | "True = ((\<lambda>p :: bool. p) = (\<lambda>p. p))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 16 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 17 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 18 | lemma [import_const "/\\"]: | 
| 67399 | 19 | "(\<and>) = (\<lambda>p q. (\<lambda>f. f p q :: bool) = (\<lambda>f. f True True))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 20 | by metis | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 21 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 22 | lemma [import_const "==>"]: | 
| 67399 | 23 | "(\<longrightarrow>) = (\<lambda>(p::bool) q::bool. (p \<and> q) = p)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 24 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 25 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 26 | lemma [import_const "!"]: | 
| 61076 | 27 | "All = (\<lambda>P::'A \<Rightarrow> bool. P = (\<lambda>x::'A. True))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 28 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 29 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 30 | lemma [import_const "?"]: | 
| 61076 | 31 | "Ex = (\<lambda>P::'A \<Rightarrow> bool. All (\<lambda>q::bool. (All (\<lambda>x::'A::type. (P x) \<longrightarrow> q)) \<longrightarrow> q))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 32 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 33 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 34 | lemma [import_const "\\/"]: | 
| 67399 | 35 | "(\<or>) = (\<lambda>p q. \<forall>r. (p \<longrightarrow> r) \<longrightarrow> (q \<longrightarrow> r) \<longrightarrow> r)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 36 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 37 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 38 | lemma [import_const F]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 39 | "False = (\<forall>p. p)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 40 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 41 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 42 | lemma [import_const "~"]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 43 | "Not = (\<lambda>p. p \<longrightarrow> False)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 44 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 45 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 46 | lemma [import_const "?!"]: | 
| 61076 | 47 | "Ex1 = (\<lambda>P::'A \<Rightarrow> bool. Ex P \<and> (\<forall>x y. P x \<and> P y \<longrightarrow> x = y))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 48 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 49 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 50 | lemma [import_const "_FALSITY_"]: "False = False" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 51 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 52 | |
| 61076 | 53 | lemma hl_ax1: "\<forall>t::'A \<Rightarrow> 'B. (\<lambda>x. t x) = t" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 54 | by metis | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 55 | |
| 61076 | 56 | lemma hl_ax2: "\<forall>P x::'A. P x \<longrightarrow> P (Eps P)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 57 | by (auto intro: someI) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 58 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 59 | lemma [import_const COND]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 60 | "If = (\<lambda>t (t1 :: 'A) t2. SOME x. (t = True \<longrightarrow> x = t1) \<and> (t = False \<longrightarrow> x = t2))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 61 | unfolding fun_eq_iff by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 62 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 63 | lemma [import_const o]: | 
| 67399 | 64 | "(\<circ>) = (\<lambda>(f::'B \<Rightarrow> 'C) g x::'A. f (g x))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 65 | unfolding fun_eq_iff by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 66 | |
| 61076 | 67 | lemma [import_const I]: "id = (\<lambda>x::'A. x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 68 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 69 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 70 | lemma [import_type 1 one_ABS one_REP]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 71 | "type_definition Rep_unit Abs_unit (Collect (\<lambda>b. b))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 72 | by (metis (full_types) Collect_cong singleton_conv2 type_definition_unit) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 73 | |
| 61076 | 74 | lemma [import_const one]: "() = (SOME x::unit. True)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 75 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 76 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 77 | lemma [import_const mk_pair]: | 
| 61076 | 78 | "Pair_Rep = (\<lambda>(x::'A) (y::'B) (a::'A) b::'B. a = x \<and> b = y)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 79 | by (simp add: Pair_Rep_def fun_eq_iff) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 80 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 81 | lemma [import_type prod ABS_prod REP_prod]: | 
| 61076 | 82 | "type_definition Rep_prod Abs_prod (Collect (\<lambda>x::'A \<Rightarrow> 'B \<Rightarrow> bool. \<exists>a b. x = Pair_Rep a b))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 83 | using type_definition_prod[unfolded Product_Type.prod_def] by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 84 | |
| 61076 | 85 | lemma [import_const ","]: "Pair = (\<lambda>(x::'A) y::'B. Abs_prod (Pair_Rep x y))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 86 | by (metis Pair_def) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 87 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 88 | lemma [import_const FST]: | 
| 61076 | 89 | "fst = (\<lambda>p::'A \<times> 'B. SOME x::'A. \<exists>y::'B. p = (x, y))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 90 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 91 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 92 | lemma [import_const SND]: | 
| 61076 | 93 | "snd = (\<lambda>p::'A \<times> 'B. SOME y::'B. \<exists>x::'A. p = (x, y))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 94 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 95 | |
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 96 | lemma CURRY_DEF[import_const CURRY]: | 
| 61076 | 97 | "curry = (\<lambda>(f::'A \<times> 'B \<Rightarrow> 'C) x y. f (x, y))" | 
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 98 | using curry_def . | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 99 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 100 | lemma [import_const ONE_ONE : inj]: | 
| 61076 | 101 | "inj = (\<lambda>(f::'A \<Rightarrow> 'B). \<forall>x1 x2. f x1 = f x2 \<longrightarrow> x1 = x2)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 102 | by (auto simp add: fun_eq_iff inj_on_def) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 103 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 104 | lemma [import_const ONTO : surj]: | 
| 61076 | 105 | "surj = (\<lambda>(f::'A \<Rightarrow> 'B). \<forall>y. \<exists>x. y = f x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 106 | by (auto simp add: fun_eq_iff) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 107 | |
| 61076 | 108 | lemma hl_ax3: "\<exists>f::ind \<Rightarrow> ind. inj f \<and> \<not> surj f" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 109 | by (rule_tac x="Suc_Rep" in exI) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 110 | (metis Suc_Rep_inject' injI Suc_Rep_not_Zero_Rep surjD) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 111 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 112 | import_type_map num : nat | 
| 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 113 | import_const_map "_0" : zero_class.zero | 
| 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 114 | import_const_map SUC : Suc | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 115 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 116 | lemma NOT_SUC: "\<forall>n. Suc n \<noteq> 0" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 117 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 118 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 119 | lemma SUC_INJ: "\<forall>m n. (Suc m = Suc n) = (m = n)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 120 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 121 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 122 | lemma num_INDUCTION: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 123 | "\<forall>P. P 0 \<and> (\<forall>n. P n \<longrightarrow> P (Suc n)) \<longrightarrow> (\<forall>n. P n)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 124 | by (auto intro: nat.induct) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 125 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 126 | lemma [import_const NUMERAL]: "id = (\<lambda>x :: nat. x)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 127 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 128 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 129 | definition [simp]: "bit0 n = 2 * n" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 130 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 131 | lemma [import_const BIT0]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 132 | "bit0 = (SOME fn. fn (id 0) = id 0 \<and> (\<forall>n. fn (Suc n) = Suc (Suc (fn n))))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 133 | apply (auto intro!: some_equality[symmetric]) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 134 | apply (auto simp add: fun_eq_iff) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 135 | apply (induct_tac x) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 136 | apply auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 137 | done | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 138 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 139 | definition [import_const BIT1, simp]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 140 | "bit1 = (\<lambda>x. Suc (bit0 x))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 141 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 142 | definition [simp]: "pred n = n - 1" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 143 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 144 | lemma PRE[import_const PRE : pred]: | 
| 61076 | 145 | "pred (id (0::nat)) = id (0::nat) \<and> (\<forall>n::nat. pred (Suc n) = n)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 146 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 147 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 148 | lemma ADD[import_const "+" : plus]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 149 | "(\<forall>n :: nat. (id 0) + n = n) \<and> (\<forall>m n. (Suc m) + n = Suc (m + n))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 150 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 151 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 152 | lemma MULT[import_const "*" : times]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 153 | "(\<forall>n :: nat. (id 0) * n = id 0) \<and> (\<forall>m n. (Suc m) * n = (m * n) + n)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 154 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 155 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 156 | lemma EXP[import_const EXP : power]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 157 | "(\<forall>m. m ^ (id 0) = id (bit1 0)) \<and> (\<forall>(m :: nat) n. m ^ (Suc n) = m * (m ^ n))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 158 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 159 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 160 | lemma LE[import_const "<=" : less_eq]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 161 | "(\<forall>m :: nat. m \<le> (id 0) = (m = id 0)) \<and> (\<forall>m n. m \<le> (Suc n) = (m = Suc n \<or> m \<le> n))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 162 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 163 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 164 | lemma LT[import_const "<" : less]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 165 | "(\<forall>m :: nat. m < (id 0) = False) \<and> (\<forall>m n. m < (Suc n) = (m = n \<or> m < n))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 166 | by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 167 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 168 | lemma DEF_GE[import_const ">=" : greater_eq]: | 
| 67399 | 169 | "(\<ge>) = (\<lambda>x y :: nat. y \<le> x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 170 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 171 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 172 | lemma DEF_GT[import_const ">" : greater]: | 
| 67399 | 173 | "(>) = (\<lambda>x y :: nat. y < x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 174 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 175 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 176 | lemma DEF_MAX[import_const "MAX"]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 177 | "max = (\<lambda>x y :: nat. if x \<le> y then y else x)" | 
| 54863 
82acc20ded73
prefer more canonical names for lemmas on min/max
 haftmann parents: 
47364diff
changeset | 178 | by (auto simp add: max.absorb_iff2 fun_eq_iff) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 179 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 180 | lemma DEF_MIN[import_const "MIN"]: | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 181 | "min = (\<lambda>x y :: nat. if x \<le> y then x else y)" | 
| 54863 
82acc20ded73
prefer more canonical names for lemmas on min/max
 haftmann parents: 
47364diff
changeset | 182 | by (auto simp add: min.absorb_iff1 fun_eq_iff) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 183 | |
| 58773 
1b2e7b78a337
explicit definition restores HOL Light import after cb9d84d3e7f2
 haftmann parents: 
56266diff
changeset | 184 | definition even | 
| 
1b2e7b78a337
explicit definition restores HOL Light import after cb9d84d3e7f2
 haftmann parents: 
56266diff
changeset | 185 | where | 
| 
1b2e7b78a337
explicit definition restores HOL Light import after cb9d84d3e7f2
 haftmann parents: 
56266diff
changeset | 186 | "even = Parity.even" | 
| 
1b2e7b78a337
explicit definition restores HOL Light import after cb9d84d3e7f2
 haftmann parents: 
56266diff
changeset | 187 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 188 | lemma EVEN[import_const "EVEN" : even]: | 
| 61076 | 189 | "even (id 0::nat) = True \<and> (\<forall>n. even (Suc n) = (\<not> even n))" | 
| 58773 
1b2e7b78a337
explicit definition restores HOL Light import after cb9d84d3e7f2
 haftmann parents: 
56266diff
changeset | 190 | by (simp add: even_def) | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 191 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 192 | lemma SUB[import_const "-" : minus]: | 
| 61076 | 193 | "(\<forall>m::nat. m - (id 0) = m) \<and> (\<forall>m n. m - (Suc n) = pred (m - n))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 194 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 195 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 196 | lemma FACT[import_const "FACT" : fact]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 197 | "fact (id 0) = id (bit1 0) \<and> (\<forall>n. fact (Suc n) = Suc n * fact n)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 198 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 199 | |
| 63950 
cdc1e59aa513
syntactic type class for operation mod named after mod;
 haftmann parents: 
63167diff
changeset | 200 | import_const_map MOD : modulo | 
| 60429 
d3d1e185cd63
uniform _ div _ as infix syntax for ring division
 haftmann parents: 
58889diff
changeset | 201 | import_const_map DIV : divide | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 202 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 203 | lemma DIVISION_0: | 
| 61076 | 204 | "\<forall>m n::nat. if n = id 0 then m div n = id 0 \<and> m mod n = m else m = m div n * n + m mod n \<and> m mod n < n" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 205 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 206 | |
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 207 | lemmas [import_type sum "_dest_sum" "_mk_sum"] = type_definition_sum[where 'a="'A" and 'b="'B"] | 
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 208 | import_const_map INL : Inl | 
| 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 209 | import_const_map INR : Inr | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 210 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 211 | lemma sum_INDUCT: | 
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 212 | "\<forall>P. (\<forall>a :: 'A. P (Inl a)) \<and> (\<forall>a :: 'B. P (Inr a)) \<longrightarrow> (\<forall>x. P x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 213 | by (auto intro: sum.induct) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 214 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 215 | lemma sum_RECURSION: | 
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 216 | "\<forall>Inl' Inr'. \<exists>fn. (\<forall>a :: 'A. fn (Inl a) = (Inl' a :: 'Z)) \<and> (\<forall>a :: 'B. fn (Inr a) = Inr' a)" | 
| 55414 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 blanchet parents: 
55413diff
changeset | 217 | by (intro allI, rule_tac x="case_sum Inl' Inr'" in exI) auto | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 218 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 219 | lemma OUTL[import_const "OUTL" : projl]: | 
| 55393 
ce5cebfaedda
 se 'wrap_free_constructors' to register 'sum' , 'prod', 'unit', 'bool' with their discriminators/selectors
 blanchet parents: 
54863diff
changeset | 220 | "Sum_Type.projl (Inl x) = x" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 221 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 222 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 223 | lemma OUTR[import_const "OUTR" : projr]: | 
| 55393 
ce5cebfaedda
 se 'wrap_free_constructors' to register 'sum' , 'prod', 'unit', 'bool' with their discriminators/selectors
 blanchet parents: 
54863diff
changeset | 224 | "Sum_Type.projr (Inr y) = y" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 225 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 226 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 227 | import_type_map list : list | 
| 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 228 | import_const_map NIL : Nil | 
| 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 229 | import_const_map CONS : Cons | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 230 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 231 | lemma list_INDUCT: | 
| 61076 | 232 | "\<forall>P::'A list \<Rightarrow> bool. P [] \<and> (\<forall>a0 a1. P a1 \<longrightarrow> P (a0 # a1)) \<longrightarrow> (\<forall>x. P x)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 233 | using list.induct by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 234 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 235 | lemma list_RECURSION: | 
| 61076 | 236 | "\<forall>nil' cons'. \<exists>fn::'A list \<Rightarrow> 'Z. fn [] = nil' \<and> (\<forall>(a0::'A) a1::'A list. fn (a0 # a1) = cons' a0 a1 (fn a1))" | 
| 55413 
a8e96847523c
adapted theories to '{case,rec}_{list,option}' names
 blanchet parents: 
55393diff
changeset | 237 | by (intro allI, rule_tac x="rec_list nil' cons'" in exI) auto | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 238 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 239 | lemma HD[import_const HD : hd]: | 
| 61076 | 240 | "hd ((h::'A) # t) = h" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 241 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 242 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 243 | lemma TL[import_const TL : tl]: | 
| 61076 | 244 | "tl ((h::'A) # t) = t" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 245 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 246 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 247 | lemma APPEND[import_const APPEND : append]: | 
| 61076 | 248 | "(\<forall>l::'A list. [] @ l = l) \<and> (\<forall>(h::'A) t l. (h # t) @ l = h # t @ l)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 249 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 250 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 251 | lemma REVERSE[import_const REVERSE : rev]: | 
| 61076 | 252 | "rev [] = ([] :: 'A list) \<and> rev ((x::'A) # l) = rev l @ [x]" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 253 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 254 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 255 | lemma LENGTH[import_const LENGTH : length]: | 
| 61076 | 256 | "length ([] :: 'A list) = id 0 \<and> (\<forall>(h::'A) t. length (h # t) = Suc (length t))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 257 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 258 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 259 | lemma MAP[import_const MAP : map]: | 
| 61076 | 260 | "(\<forall>f::'A \<Rightarrow> 'B. map f [] = []) \<and> | 
| 261 | (\<forall>(f::'A \<Rightarrow> 'B) h t. map f (h # t) = f h # map f t)" | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 262 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 263 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 264 | lemma LAST[import_const LAST : last]: | 
| 61076 | 265 | "last ((h::'A) # t) = (if t = [] then h else last t)" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 266 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 267 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 268 | lemma BUTLAST[import_const BUTLAST : butlast]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 269 | "butlast [] = ([] :: 't18337 list) \<and> | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 270 | butlast ((h :: 't18337) # t) = (if t = [] then [] else h # butlast t)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 271 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 272 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 273 | lemma REPLICATE[import_const REPLICATE : replicate]: | 
| 61076 | 274 | "replicate (id (0::nat)) (x::'t18358) = [] \<and> | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 275 | replicate (Suc n) x = x # replicate n x" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 276 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 277 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 278 | lemma NULL[import_const NULL : List.null]: | 
| 61076 | 279 | "List.null ([]::'t18373 list) = True \<and> List.null ((h::'t18373) # t) = False" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 280 | unfolding null_def by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 281 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 282 | lemma ALL[import_const ALL : list_all]: | 
| 61076 | 283 | "list_all (P::'t18393 \<Rightarrow> bool) [] = True \<and> | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 284 | list_all P (h # t) = (P h \<and> list_all P t)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 285 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 286 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 287 | lemma EX[import_const EX : list_ex]: | 
| 61076 | 288 | "list_ex (P::'t18414 \<Rightarrow> bool) [] = False \<and> | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 289 | list_ex P (h # t) = (P h \<or> list_ex P t)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 290 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 291 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 292 | lemma ITLIST[import_const ITLIST : foldr]: | 
| 61076 | 293 | "foldr (f::'t18437 \<Rightarrow> 't18436 \<Rightarrow> 't18436) [] b = b \<and> | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 294 | foldr f (h # t) b = f h (foldr f t b)" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 295 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 296 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 297 | lemma ALL2_DEF[import_const ALL2 : list_all2]: | 
| 61076 | 298 | "list_all2 (P::'t18495 \<Rightarrow> 't18502 \<Rightarrow> bool) [] (l2::'t18502 list) = (l2 = []) \<and> | 
| 299 | list_all2 P ((h1::'t18495) # (t1::'t18495 list)) l2 = | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 300 | (if l2 = [] then False else P h1 (hd l2) \<and> list_all2 P t1 (tl l2))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 301 | by simp (induct_tac l2, simp_all) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 302 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 303 | lemma FILTER[import_const FILTER : filter]: | 
| 61076 | 304 | "filter (P::'t18680 \<Rightarrow> bool) [] = [] \<and> | 
| 305 | filter P ((h::'t18680) # t) = (if P h then h # filter P t else filter P t)" | |
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 306 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 307 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 308 | lemma ZIP[import_const ZIP : zip]: | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 309 |  "zip [] [] = ([] :: ('t18824 \<times> 't18825) list) \<and>
 | 
| 61076 | 310 | zip ((h1::'t18849) # t1) ((h2::'t18850) # t2) = (h1, h2) # zip t1 t2" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 311 | by simp | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 312 | |
| 56266 
da5f22a60cb3
formal check of user input, avoiding direct references of interal names;
 wenzelm parents: 
55524diff
changeset | 313 | lemma WF[import_const WF : wfP]: | 
| 47364 
637074507956
HOL/Import more precise map types
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: 
47258diff
changeset | 314 | "\<forall>u. wfP u \<longleftrightarrow> (\<forall>P. (\<exists>x :: 'A. P x) \<longrightarrow> (\<exists>x. P x \<and> (\<forall>y. u y x \<longrightarrow> \<not> P y)))" | 
| 47258 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 315 | proof (intro allI iffI impI wfI_min[to_pred], elim exE wfE_min[to_pred]) | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 316 | fix x :: "'a \<Rightarrow> 'a \<Rightarrow> bool" and xa :: "'a" and Q | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 317 | assume a: "xa \<in> Q" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 318 | assume "\<forall>P. Ex P \<longrightarrow> (\<exists>xa. P xa \<and> (\<forall>y. x y xa \<longrightarrow> \<not> P y))" | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 319 | then have "Ex (\<lambda>x. x \<in> Q) \<longrightarrow> (\<exists>xa. (\<lambda>x. x \<in> Q) xa \<and> (\<forall>y. x y xa \<longrightarrow> \<not> (\<lambda>x. x \<in> Q) y))" by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 320 | then show "\<exists>z\<in>Q. \<forall>y. x y z \<longrightarrow> y \<notin> Q" using a by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 321 | next | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 322 | fix x P and xa :: 'A and z | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 323 |   assume "P xa" "z \<in> {a. P a}" "\<And>y. x y z \<Longrightarrow> y \<notin> {a. P a}"
 | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 324 | then show "\<exists>xa. P xa \<and> (\<forall>y. x y xa \<longrightarrow> \<not> P y)" by auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 325 | qed auto | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 326 | |
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 327 | end | 
| 
880e587eee9f
Modernized HOL-Import for HOL Light
 Cezary Kaliszyk <cezarykaliszyk@gmail.com> parents: diff
changeset | 328 |