1 (* Title: HOL/Nitpick_Examples/Induct_Nits.thy
2 Author: Jasmin Blanchette, TU Muenchen
5 Examples featuring Nitpick applied to (co)inductive definitions.
8 header {* Examples Featuring Nitpick Applied to (Co)inductive Definitions *}
14 nitpick_params [verbose, card = 1\<emdash>8, unary_ints,
15 sat_solver = MiniSat_JNI, max_threads = 1, timeout = 240]
17 inductive p1 :: "nat \<Rightarrow> bool" where
19 "p1 n \<Longrightarrow> p1 (n + 2)"
21 coinductive q1 :: "nat \<Rightarrow> bool" where
23 "q1 n \<Longrightarrow> q1 (n + 2)"
26 nitpick [expect = none]
27 nitpick [wf, expect = none]
28 nitpick [non_wf, expect = none]
29 nitpick [non_wf, dont_star_linear_preds, expect = none]
32 lemma "p1 \<noteq> q1"
33 nitpick [expect = potential]
34 nitpick [wf, expect = potential]
35 nitpick [non_wf, expect = potential]
36 nitpick [non_wf, dont_star_linear_preds, expect = potential]
39 lemma "p1 (n - 2) \<Longrightarrow> p1 n"
40 nitpick [expect = genuine]
41 nitpick [non_wf, expect = genuine]
42 nitpick [non_wf, dont_star_linear_preds, expect = genuine]
45 lemma "q1 (n - 2) \<Longrightarrow> q1 n"
46 nitpick [expect = genuine]
47 nitpick [non_wf, expect = genuine]
48 nitpick [non_wf, dont_star_linear_preds, expect = genuine]
51 inductive p2 :: "nat \<Rightarrow> bool" where
52 "p2 n \<Longrightarrow> p2 n"
54 coinductive q2 :: "nat \<Rightarrow> bool" where
55 "q2 n \<Longrightarrow> q2 n"
58 nitpick [expect = none]
59 nitpick [dont_star_linear_preds, expect = none]
63 nitpick [expect = genuine]
64 nitpick [dont_star_linear_preds, expect = genuine]
65 nitpick [wf, expect = quasi_genuine]
69 nitpick [expect = genuine]
70 nitpick [dont_star_linear_preds, expect = genuine]
74 nitpick [expect = none]
75 nitpick [dont_star_linear_preds, expect = none]
76 nitpick [wf, expect = quasi_genuine]
80 nitpick [expect = genuine]
81 nitpick [dont_star_linear_preds, expect = genuine]
85 nitpick [expect = genuine]
86 nitpick [dont_star_linear_preds, expect = genuine]
87 nitpick [dont_specialize, expect = genuine]
91 nitpick [expect = none]
92 nitpick [dont_star_linear_preds, expect = none]
96 nitpick [expect = none]
97 nitpick [dont_star_linear_preds, expect = none]
101 nitpick [expect = genuine]
102 nitpick [dont_star_linear_preds, expect = genuine]
103 nitpick [dont_specialize, expect = genuine]
106 inductive p3 and p4 where
108 "p3 n \<Longrightarrow> p4 (Suc n)" |
109 "p4 n \<Longrightarrow> p3 (Suc n)"
111 coinductive q3 and q4 where
113 "q3 n \<Longrightarrow> q4 (Suc n)" |
114 "q4 n \<Longrightarrow> q3 (Suc n)"
117 nitpick [expect = none]
118 nitpick [non_wf, expect = none]
122 nitpick [expect = none]
123 nitpick [non_wf, expect = none]
126 lemma "p3 = top - p4"
127 nitpick [expect = none]
128 nitpick [non_wf, expect = none]
131 lemma "q3 = top - q4"
132 nitpick [expect = none]
133 nitpick [non_wf, expect = none]
136 lemma "inf p3 q4 \<noteq> bot"
137 nitpick [expect = potential]
138 nitpick [non_wf, expect = potential]
141 lemma "inf q3 p4 \<noteq> bot"
142 nitpick [expect = potential]
143 nitpick [non_wf, expect = potential]
146 lemma "sup p3 q4 \<noteq> top"
147 nitpick [expect = potential]
148 nitpick [non_wf, expect = potential]
151 lemma "sup q3 p4 \<noteq> top"
152 nitpick [expect = potential]
153 nitpick [non_wf, expect = potential]