blanchet@45035: (* Title: HOL/Nitpick_Examples/Mini_Nits.thy blanchet@45035: Author: Jasmin Blanchette, TU Muenchen blanchet@45035: Copyright 2009-2011 blanchet@45035: blanchet@45035: Examples featuring Minipick, the minimalistic version of Nitpick. blanchet@45035: *) blanchet@45035: wenzelm@58889: section {* Examples Featuring Minipick, the Minimalistic Version of Nitpick *} blanchet@45035: blanchet@45035: theory Mini_Nits blanchet@45035: imports Main blanchet@45035: begin blanchet@45035: wenzelm@48891: ML_file "minipick.ML" wenzelm@48891: blanchet@54845: nitpick_params [verbose, sat_solver = MiniSat_JNI, max_threads = 1, blanchet@54845: total_consts = smart] blanchet@45035: blanchet@45062: ML {* blanchet@45062: val check = Minipick.minipick @{context} blanchet@45062: val expect = Minipick.minipick_expect @{context} blanchet@45062: val none = expect "none" blanchet@45062: val genuine = expect "genuine" blanchet@45062: val unknown = expect "unknown" blanchet@45035: *} blanchet@45035: wenzelm@51272: ML_val {* genuine 1 @{prop "x = Not"} *} wenzelm@51272: ML_val {* none 1 @{prop "\x. x = Not"} *} wenzelm@51272: ML_val {* none 1 @{prop "\ False"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "\ True"} *} wenzelm@51272: ML_val {* none 1 @{prop "\ \ b \ b"} *} wenzelm@51272: ML_val {* none 1 @{prop True} *} wenzelm@51272: ML_val {* genuine 1 @{prop False} *} wenzelm@51272: ML_val {* genuine 1 @{prop "True \ False"} *} wenzelm@51272: ML_val {* none 1 @{prop "True \ \ False"} *} blanchet@54845: ML_val {* none 4 @{prop "\x. x = x"} *} blanchet@54845: ML_val {* none 4 @{prop "\x. x = x"} *} wenzelm@51272: ML_val {* none 1 @{prop "\x. x = y"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "\x. x = y"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x. x = y"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x\'a \ 'a. x = x"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x\'a \ 'a. x = y"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "\x\'a \ 'a. x = y"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x\'a \ 'a. x = y"} *} wenzelm@51272: ML_val {* none 1 @{prop "All = Ex"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "All = Ex"} *} wenzelm@51272: ML_val {* none 1 @{prop "All P = Ex P"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "All P = Ex P"} *} blanchet@54845: ML_val {* none 4 @{prop "x = y \ P x = P y"} *} blanchet@54845: ML_val {* none 4 @{prop "(x\'a \ 'a) = y \ P x = P y"} *} wenzelm@51272: ML_val {* none 2 @{prop "(x\'a \ 'a) = y \ P x y = P y x"} *} blanchet@54845: ML_val {* none 4 @{prop "\x\'a \ 'a. x = y \ P x = P y"} *} wenzelm@51272: ML_val {* none 2 @{prop "(x\'a \ 'a) = y \ P x = P y"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x\'a \ 'a. x = y \ P x = P y"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "(op =) X = Ex"} *} wenzelm@51272: ML_val {* none 2 @{prop "\x::'a \ 'a. x = x"} *} wenzelm@51272: ML_val {* none 1 @{prop "x = y"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "x \ y"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "x = y"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "X \ Y"} *} wenzelm@51272: ML_val {* none 1 @{prop "P \ Q \ Q \ P"} *} wenzelm@51272: ML_val {* none 1 @{prop "P \ Q \ P"} *} wenzelm@51272: ML_val {* none 1 @{prop "P \ Q \ Q \ P"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "P \ Q \ P"} *} wenzelm@51272: ML_val {* none 1 @{prop "(P \ Q) \ (\ P \ Q)"} *} blanchet@54845: ML_val {* none 4 @{prop "{a} = {a, a}"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "{a} = {a, b}"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "{a} \ {a, b}"} *} blanchet@54845: ML_val {* none 4 @{prop "{}\<^sup>+ = {}"} *} blanchet@54845: ML_val {* none 4 @{prop "UNIV\<^sup>+ = UNIV"} *} blanchet@54845: ML_val {* none 4 @{prop "(UNIV \ ('a \ 'b) set) - {} = UNIV"} *} blanchet@54845: ML_val {* none 4 @{prop "{} - (UNIV \ ('a \ 'b) set) = {}"} *} wenzelm@51272: ML_val {* none 1 @{prop "{(a, b), (b, c)}\<^sup>+ = {(a, b), (a, c), (b, c)}"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "{(a, b), (b, c)}\<^sup>+ = {(a, b), (a, c), (b, c)}"} *} blanchet@54845: ML_val {* none 4 @{prop "a \ c \ {(a, b), (b, c)}\<^sup>+ = {(a, b), (a, c), (b, c)}"} *} blanchet@54845: ML_val {* none 4 @{prop "A \ B = {x. x \ A \ x \ B}"} *} blanchet@54845: ML_val {* none 4 @{prop "A \ B = {x. x \ A \ x \ B}"} *} blanchet@54845: ML_val {* none 4 @{prop "A - B = (\x. A x \ \ B x)"} *} blanchet@54845: ML_val {* none 4 @{prop "\a b. (a, b) = (b, a)"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "(a, b) = (b, a)"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "(a, b) \ (b, a)"} *} blanchet@54845: ML_val {* none 4 @{prop "\a b\'a \ 'a. (a, b) = (b, a)"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "(a\'a \ 'a, b) = (b, a)"} *} blanchet@54845: ML_val {* none 4 @{prop "\a b\'a \ 'a \ 'a. (a, b) = (b, a)"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "(a\'a \ 'a \ 'a, b) \ (b, a)"} *} blanchet@54845: ML_val {* none 4 @{prop "\a b\'a \ 'a. (a, b) = (b, a)"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "(a\'a \ 'a, b) \ (b, a)"} *} blanchet@54845: ML_val {* none 4 @{prop "fst (a, b) = a"} *} wenzelm@51272: ML_val {* none 1 @{prop "fst (a, b) = b"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "fst (a, b) = b"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "fst (a, b) \ b"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "f ((x, z), y) = (x, z)"} *} wenzelm@51272: ML_val {* none 2 @{prop "(ALL x. f x = fst x) \ f ((x, z), y) = (x, z)"} *} blanchet@54845: ML_val {* none 4 @{prop "snd (a, b) = b"} *} wenzelm@51272: ML_val {* none 1 @{prop "snd (a, b) = a"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "snd (a, b) = a"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "snd (a, b) \ a"} *} wenzelm@51272: ML_val {* genuine 1 @{prop P} *} wenzelm@51272: ML_val {* genuine 1 @{prop "(\x. P) a"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "(\x y z. P y x z) a b c"} *} blanchet@54845: ML_val {* none 4 @{prop "\f. f = (\x. x) \ f y = y"} *} wenzelm@51272: ML_val {* genuine 1 @{prop "\f. f p \ p \ (\a b. f (a, b) = (a, b))"} *} wenzelm@51272: ML_val {* none 2 @{prop "\f. \a b. f (a, b) = (a, b)"} *} wenzelm@51272: ML_val {* none 3 @{prop "f = (\a b. (b, a)) \ f x y = (y, x)"} *} wenzelm@51272: ML_val {* genuine 2 @{prop "f = (\a b. (b, a)) \ f x y = (x, y)"} *} blanchet@54845: ML_val {* none 4 @{prop "f = (\x. f x)"} *} blanchet@54845: ML_val {* none 4 @{prop "f = (\x. f x\'a \ bool)"} *} blanchet@54845: ML_val {* none 4 @{prop "f = (\x y. f x y)"} *} blanchet@54845: ML_val {* none 4 @{prop "f = (\x y. f x y\'a \ bool)"} *} blanchet@45035: blanchet@45035: end