src/HOL/SMT/Examples/cert/z3_mono_02.proof
changeset 33010 39f73a59e855
equal deleted inserted replaced
33008:b0ff69f0a248 33010:39f73a59e855
       
     1 #2 := false
       
     2 decl uf_17 :: (-> T8 T3)
       
     3 decl uf_18 :: (-> T1 T8)
       
     4 decl uf_19 :: T1
       
     5 #104 := uf_19
       
     6 #105 := (uf_18 uf_19)
       
     7 #106 := (uf_17 #105)
       
     8 decl uf_15 :: (-> T7 T3)
       
     9 decl uf_16 :: (-> int T7)
       
    10 #101 := 3::int
       
    11 #102 := (uf_16 3::int)
       
    12 #103 := (uf_15 #102)
       
    13 #107 := (= #103 #106)
       
    14 decl uf_13 :: (-> T2 T3)
       
    15 decl uf_2 :: (-> T1 T2 T2)
       
    16 decl uf_7 :: T2
       
    17 #29 := uf_7
       
    18 #857 := (uf_2 uf_19 uf_7)
       
    19 #859 := (uf_13 #857)
       
    20 #599 := (= #859 #106)
       
    21 #526 := (= #106 #859)
       
    22 #79 := (:var 0 T1)
       
    23 #82 := (uf_2 #79 uf_7)
       
    24 #932 := (pattern #82)
       
    25 #80 := (uf_18 #79)
       
    26 #931 := (pattern #80)
       
    27 #83 := (uf_13 #82)
       
    28 #81 := (uf_17 #80)
       
    29 #84 := (= #81 #83)
       
    30 #933 := (forall (vars (?x16 T1)) (:pat #931 #932) #84)
       
    31 #85 := (forall (vars (?x16 T1)) #84)
       
    32 #936 := (iff #85 #933)
       
    33 #934 := (iff #84 #84)
       
    34 #935 := [refl]: #934
       
    35 #937 := [quant-intro #935]: #936
       
    36 #347 := (~ #85 #85)
       
    37 #384 := (~ #84 #84)
       
    38 #385 := [refl]: #384
       
    39 #348 := [nnf-pos #385]: #347
       
    40 #238 := [asserted]: #85
       
    41 #386 := [mp~ #238 #348]: #85
       
    42 #938 := [mp #386 #937]: #933
       
    43 #861 := (not #933)
       
    44 #862 := (or #861 #526)
       
    45 #863 := [quant-inst]: #862
       
    46 #601 := [unit-resolution #863 #938]: #526
       
    47 #588 := [symm #601]: #599
       
    48 #586 := (= #103 #859)
       
    49 decl uf_1 :: (-> T2 T3)
       
    50 #558 := (uf_1 #857)
       
    51 #832 := (= #558 #859)
       
    52 #5 := (:var 0 T2)
       
    53 #66 := (uf_13 #5)
       
    54 #908 := (pattern #66)
       
    55 #8 := (uf_1 #5)
       
    56 #907 := (pattern #8)
       
    57 #222 := (= #8 #66)
       
    58 #909 := (forall (vars (?x13 T2)) (:pat #907 #908) #222)
       
    59 #226 := (forall (vars (?x13 T2)) #222)
       
    60 #912 := (iff #226 #909)
       
    61 #910 := (iff #222 #222)
       
    62 #911 := [refl]: #910
       
    63 #913 := [quant-intro #911]: #912
       
    64 #341 := (~ #226 #226)
       
    65 #375 := (~ #222 #222)
       
    66 #376 := [refl]: #375
       
    67 #342 := [nnf-pos #376]: #341
       
    68 #67 := (= #66 #8)
       
    69 #68 := (forall (vars (?x13 T2)) #67)
       
    70 #227 := (iff #68 #226)
       
    71 #224 := (iff #67 #222)
       
    72 #225 := [rewrite]: #224
       
    73 #228 := [quant-intro #225]: #227
       
    74 #221 := [asserted]: #68
       
    75 #231 := [mp #221 #228]: #226
       
    76 #377 := [mp~ #231 #342]: #226
       
    77 #914 := [mp #377 #913]: #909
       
    78 #451 := (not #909)
       
    79 #837 := (or #451 #832)
       
    80 #547 := [quant-inst]: #837
       
    81 #615 := [unit-resolution #547 #914]: #832
       
    82 #585 := (= #103 #558)
       
    83 decl uf_3 :: (-> int T3)
       
    84 decl uf_4 :: (-> T3 int)
       
    85 #30 := (uf_1 uf_7)
       
    86 #806 := (uf_4 #30)
       
    87 #11 := 1::int
       
    88 #127 := (uf_3 1::int)
       
    89 #130 := (uf_4 #127)
       
    90 #649 := (+ #130 #806)
       
    91 #794 := (uf_3 #649)
       
    92 #597 := (= #794 #558)
       
    93 #683 := (= #558 #794)
       
    94 #4 := (:var 1 T1)
       
    95 #6 := (uf_2 #4 #5)
       
    96 #865 := (pattern #6)
       
    97 #9 := (uf_4 #8)
       
    98 #133 := (+ #9 #130)
       
    99 #136 := (uf_3 #133)
       
   100 #7 := (uf_1 #6)
       
   101 #139 := (= #7 #136)
       
   102 #866 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #865) #139)
       
   103 #142 := (forall (vars (?x1 T1) (?x2 T2)) #139)
       
   104 #869 := (iff #142 #866)
       
   105 #867 := (iff #139 #139)
       
   106 #868 := [refl]: #867
       
   107 #870 := [quant-intro #868]: #869
       
   108 #361 := (~ #142 #142)
       
   109 #359 := (~ #139 #139)
       
   110 #360 := [refl]: #359
       
   111 #362 := [nnf-pos #360]: #361
       
   112 #10 := 0::int
       
   113 #12 := (+ 0::int 1::int)
       
   114 #13 := (uf_3 #12)
       
   115 #14 := (uf_4 #13)
       
   116 #15 := (+ #9 #14)
       
   117 #16 := (uf_3 #15)
       
   118 #17 := (= #7 #16)
       
   119 #18 := (forall (vars (?x1 T1) (?x2 T2)) #17)
       
   120 #143 := (iff #18 #142)
       
   121 #140 := (iff #17 #139)
       
   122 #137 := (= #16 #136)
       
   123 #134 := (= #15 #133)
       
   124 #131 := (= #14 #130)
       
   125 #128 := (= #13 #127)
       
   126 #125 := (= #12 1::int)
       
   127 #126 := [rewrite]: #125
       
   128 #129 := [monotonicity #126]: #128
       
   129 #132 := [monotonicity #129]: #131
       
   130 #135 := [monotonicity #132]: #134
       
   131 #138 := [monotonicity #135]: #137
       
   132 #141 := [monotonicity #138]: #140
       
   133 #144 := [quant-intro #141]: #143
       
   134 #124 := [asserted]: #18
       
   135 #147 := [mp #124 #144]: #142
       
   136 #363 := [mp~ #147 #362]: #142
       
   137 #871 := [mp #363 #870]: #866
       
   138 #701 := (not #866)
       
   139 #694 := (or #701 #683)
       
   140 #688 := (+ #806 #130)
       
   141 #689 := (uf_3 #688)
       
   142 #690 := (= #558 #689)
       
   143 #702 := (or #701 #690)
       
   144 #704 := (iff #702 #694)
       
   145 #706 := (iff #694 #694)
       
   146 #799 := [rewrite]: #706
       
   147 #698 := (iff #690 #683)
       
   148 #795 := (= #689 #794)
       
   149 #797 := (= #688 #649)
       
   150 #699 := [rewrite]: #797
       
   151 #798 := [monotonicity #699]: #795
       
   152 #700 := [monotonicity #798]: #698
       
   153 #705 := [monotonicity #700]: #704
       
   154 #796 := [trans #705 #799]: #704
       
   155 #703 := [quant-inst]: #702
       
   156 #800 := [mp #703 #796]: #694
       
   157 #614 := [unit-resolution #800 #871]: #683
       
   158 #598 := [symm #614]: #597
       
   159 #583 := (= #103 #794)
       
   160 #595 := (= #127 #794)
       
   161 #605 := (= #794 #127)
       
   162 #618 := (= #649 1::int)
       
   163 #780 := (<= #806 0::int)
       
   164 #778 := (= #806 0::int)
       
   165 #31 := (uf_3 0::int)
       
   166 #858 := (uf_4 #31)
       
   167 #855 := (= #858 0::int)
       
   168 #72 := (:var 0 int)
       
   169 #92 := (uf_3 #72)
       
   170 #947 := (pattern #92)
       
   171 #266 := (>= #72 0::int)
       
   172 #267 := (not #266)
       
   173 #93 := (uf_4 #92)
       
   174 #248 := (= #72 #93)
       
   175 #273 := (or #248 #267)
       
   176 #948 := (forall (vars (?x18 int)) (:pat #947) #273)
       
   177 #278 := (forall (vars (?x18 int)) #273)
       
   178 #951 := (iff #278 #948)
       
   179 #949 := (iff #273 #273)
       
   180 #950 := [refl]: #949
       
   181 #952 := [quant-intro #950]: #951
       
   182 #351 := (~ #278 #278)
       
   183 #390 := (~ #273 #273)
       
   184 #391 := [refl]: #390
       
   185 #352 := [nnf-pos #391]: #351
       
   186 #94 := (= #93 #72)
       
   187 #91 := (<= 0::int #72)
       
   188 #95 := (implies #91 #94)
       
   189 #96 := (forall (vars (?x18 int)) #95)
       
   190 #281 := (iff #96 #278)
       
   191 #255 := (not #91)
       
   192 #256 := (or #255 #248)
       
   193 #261 := (forall (vars (?x18 int)) #256)
       
   194 #279 := (iff #261 #278)
       
   195 #276 := (iff #256 #273)
       
   196 #270 := (or #267 #248)
       
   197 #274 := (iff #270 #273)
       
   198 #275 := [rewrite]: #274
       
   199 #271 := (iff #256 #270)
       
   200 #268 := (iff #255 #267)
       
   201 #264 := (iff #91 #266)
       
   202 #265 := [rewrite]: #264
       
   203 #269 := [monotonicity #265]: #268
       
   204 #272 := [monotonicity #269]: #271
       
   205 #277 := [trans #272 #275]: #276
       
   206 #280 := [quant-intro #277]: #279
       
   207 #262 := (iff #96 #261)
       
   208 #259 := (iff #95 #256)
       
   209 #252 := (implies #91 #248)
       
   210 #257 := (iff #252 #256)
       
   211 #258 := [rewrite]: #257
       
   212 #253 := (iff #95 #252)
       
   213 #250 := (iff #94 #248)
       
   214 #251 := [rewrite]: #250
       
   215 #254 := [monotonicity #251]: #253
       
   216 #260 := [trans #254 #258]: #259
       
   217 #263 := [quant-intro #260]: #262
       
   218 #282 := [trans #263 #280]: #281
       
   219 #247 := [asserted]: #96
       
   220 #283 := [mp #247 #282]: #278
       
   221 #392 := [mp~ #283 #352]: #278
       
   222 #953 := [mp #392 #952]: #948
       
   223 #848 := (not #948)
       
   224 #850 := (or #848 #855)
       
   225 #527 := (>= 0::int 0::int)
       
   226 #860 := (not #527)
       
   227 #864 := (= 0::int #858)
       
   228 #854 := (or #864 #860)
       
   229 #489 := (or #848 #854)
       
   230 #851 := (iff #489 #850)
       
   231 #852 := (iff #850 #850)
       
   232 #838 := [rewrite]: #852
       
   233 #847 := (iff #854 #855)
       
   234 #843 := (or #855 false)
       
   235 #846 := (iff #843 #855)
       
   236 #841 := [rewrite]: #846
       
   237 #844 := (iff #854 #843)
       
   238 #505 := (iff #860 false)
       
   239 #1 := true
       
   240 #498 := (not true)
       
   241 #503 := (iff #498 false)
       
   242 #504 := [rewrite]: #503
       
   243 #840 := (iff #860 #498)
       
   244 #514 := (iff #527 true)
       
   245 #856 := [rewrite]: #514
       
   246 #502 := [monotonicity #856]: #840
       
   247 #842 := [trans #502 #504]: #505
       
   248 #513 := (iff #864 #855)
       
   249 #518 := [rewrite]: #513
       
   250 #845 := [monotonicity #518 #842]: #844
       
   251 #484 := [trans #845 #841]: #847
       
   252 #849 := [monotonicity #484]: #851
       
   253 #839 := [trans #849 #838]: #851
       
   254 #490 := [quant-inst]: #489
       
   255 #546 := [mp #490 #839]: #850
       
   256 #644 := [unit-resolution #546 #953]: #855
       
   257 #621 := (= #806 #858)
       
   258 #32 := (= #30 #31)
       
   259 #159 := [asserted]: #32
       
   260 #626 := [monotonicity #159]: #621
       
   261 #616 := [trans #626 #644]: #778
       
   262 #606 := (not #778)
       
   263 #608 := (or #606 #780)
       
   264 #609 := [th-lemma]: #608
       
   265 #612 := [unit-resolution #609 #616]: #780
       
   266 #790 := (>= #806 0::int)
       
   267 #613 := (or #606 #790)
       
   268 #617 := [th-lemma]: #613
       
   269 #610 := [unit-resolution #617 #616]: #790
       
   270 #723 := (<= #130 1::int)
       
   271 #746 := (= #130 1::int)
       
   272 #713 := (or #848 #746)
       
   273 #755 := (>= 1::int 0::int)
       
   274 #756 := (not #755)
       
   275 #743 := (= 1::int #130)
       
   276 #744 := (or #743 #756)
       
   277 #714 := (or #848 #744)
       
   278 #718 := (iff #714 #713)
       
   279 #720 := (iff #713 #713)
       
   280 #725 := [rewrite]: #720
       
   281 #739 := (iff #744 #746)
       
   282 #735 := (or #746 false)
       
   283 #738 := (iff #735 #746)
       
   284 #733 := [rewrite]: #738
       
   285 #736 := (iff #744 #735)
       
   286 #731 := (iff #756 false)
       
   287 #734 := (iff #756 #498)
       
   288 #742 := (iff #755 true)
       
   289 #748 := [rewrite]: #742
       
   290 #730 := [monotonicity #748]: #734
       
   291 #732 := [trans #730 #504]: #731
       
   292 #745 := (iff #743 #746)
       
   293 #747 := [rewrite]: #745
       
   294 #737 := [monotonicity #747 #732]: #736
       
   295 #712 := [trans #737 #733]: #739
       
   296 #719 := [monotonicity #712]: #718
       
   297 #721 := [trans #719 #725]: #718
       
   298 #607 := [quant-inst]: #714
       
   299 #722 := [mp #607 #721]: #713
       
   300 #641 := [unit-resolution #722 #953]: #746
       
   301 #620 := (not #746)
       
   302 #623 := (or #620 #723)
       
   303 #627 := [th-lemma]: #623
       
   304 #629 := [unit-resolution #627 #641]: #723
       
   305 #726 := (>= #130 1::int)
       
   306 #630 := (or #620 #726)
       
   307 #628 := [th-lemma]: #630
       
   308 #631 := [unit-resolution #628 #641]: #726
       
   309 #611 := [th-lemma #631 #629 #610 #612]: #618
       
   310 #587 := [monotonicity #611]: #605
       
   311 #596 := [symm #587]: #595
       
   312 #581 := (= #103 #127)
       
   313 decl uf_5 :: (-> T4 T3)
       
   314 decl uf_8 :: T4
       
   315 #33 := uf_8
       
   316 #34 := (uf_5 uf_8)
       
   317 #822 := (uf_4 #34)
       
   318 #824 := (+ #130 #822)
       
   319 #666 := (uf_3 #824)
       
   320 #593 := (= #666 #127)
       
   321 #589 := (= #127 #666)
       
   322 #624 := (= 1::int #824)
       
   323 #619 := (= #824 1::int)
       
   324 #789 := (<= #822 0::int)
       
   325 #787 := (= #822 0::int)
       
   326 #632 := (= #822 #858)
       
   327 #35 := (= #34 #31)
       
   328 #162 := (= #31 #34)
       
   329 #163 := (iff #35 #162)
       
   330 #164 := [rewrite]: #163
       
   331 #160 := [asserted]: #35
       
   332 #167 := [mp #160 #164]: #162
       
   333 #662 := [symm #167]: #35
       
   334 #633 := [monotonicity #662]: #632
       
   335 #634 := [trans #633 #644]: #787
       
   336 #635 := (not #787)
       
   337 #637 := (or #635 #789)
       
   338 #638 := [th-lemma]: #637
       
   339 #639 := [unit-resolution #638 #634]: #789
       
   340 #781 := (>= #822 0::int)
       
   341 #481 := (or #635 #781)
       
   342 #640 := [th-lemma]: #481
       
   343 #636 := [unit-resolution #640 #634]: #781
       
   344 #622 := [th-lemma #631 #629 #636 #639]: #619
       
   345 #625 := [symm #622]: #624
       
   346 #590 := [monotonicity #625]: #589
       
   347 #594 := [symm #590]: #593
       
   348 #579 := (= #103 #666)
       
   349 decl uf_6 :: (-> int T4 T4)
       
   350 #539 := (uf_6 3::int uf_8)
       
   351 #836 := (uf_5 #539)
       
   352 #810 := (= #836 #666)
       
   353 #813 := (= #666 #836)
       
   354 #20 := (:var 0 T4)
       
   355 #19 := (:var 1 int)
       
   356 #21 := (uf_6 #19 #20)
       
   357 #872 := (pattern #21)
       
   358 #23 := (uf_5 #20)
       
   359 #24 := (uf_4 #23)
       
   360 #146 := (+ #24 #130)
       
   361 #150 := (uf_3 #146)
       
   362 #22 := (uf_5 #21)
       
   363 #153 := (= #22 #150)
       
   364 #873 := (forall (vars (?x3 int) (?x4 T4)) (:pat #872) #153)
       
   365 #156 := (forall (vars (?x3 int) (?x4 T4)) #153)
       
   366 #876 := (iff #156 #873)
       
   367 #874 := (iff #153 #153)
       
   368 #875 := [refl]: #874
       
   369 #877 := [quant-intro #875]: #876
       
   370 #328 := (~ #156 #156)
       
   371 #364 := (~ #153 #153)
       
   372 #365 := [refl]: #364
       
   373 #326 := [nnf-pos #365]: #328
       
   374 #25 := (+ #24 #14)
       
   375 #26 := (uf_3 #25)
       
   376 #27 := (= #22 #26)
       
   377 #28 := (forall (vars (?x3 int) (?x4 T4)) #27)
       
   378 #157 := (iff #28 #156)
       
   379 #154 := (iff #27 #153)
       
   380 #151 := (= #26 #150)
       
   381 #148 := (= #25 #146)
       
   382 #149 := [monotonicity #132]: #148
       
   383 #152 := [monotonicity #149]: #151
       
   384 #155 := [monotonicity #152]: #154
       
   385 #158 := [quant-intro #155]: #157
       
   386 #145 := [asserted]: #28
       
   387 #161 := [mp #145 #158]: #156
       
   388 #366 := [mp~ #161 #326]: #156
       
   389 #878 := [mp #366 #877]: #873
       
   390 #809 := (not #873)
       
   391 #816 := (or #809 #813)
       
   392 #817 := (+ #822 #130)
       
   393 #818 := (uf_3 #817)
       
   394 #823 := (= #836 #818)
       
   395 #645 := (or #809 #823)
       
   396 #648 := (iff #645 #816)
       
   397 #802 := (iff #816 #816)
       
   398 #804 := [rewrite]: #802
       
   399 #814 := (iff #823 #813)
       
   400 #807 := (iff #810 #813)
       
   401 #808 := [rewrite]: #807
       
   402 #811 := (iff #823 #810)
       
   403 #667 := (= #818 #666)
       
   404 #819 := (= #817 #824)
       
   405 #825 := [rewrite]: #819
       
   406 #668 := [monotonicity #825]: #667
       
   407 #812 := [monotonicity #668]: #811
       
   408 #815 := [trans #812 #808]: #814
       
   409 #801 := [monotonicity #815]: #648
       
   410 #805 := [trans #801 #804]: #648
       
   411 #647 := [quant-inst]: #645
       
   412 #803 := [mp #647 #805]: #816
       
   413 #658 := [unit-resolution #803 #878]: #813
       
   414 #592 := [symm #658]: #810
       
   415 #600 := (= #103 #836)
       
   416 decl uf_14 :: (-> T4 T3)
       
   417 #540 := (uf_14 #539)
       
   418 #548 := (= #540 #836)
       
   419 #69 := (uf_14 #20)
       
   420 #916 := (pattern #69)
       
   421 #915 := (pattern #23)
       
   422 #230 := (= #23 #69)
       
   423 #917 := (forall (vars (?x14 T4)) (:pat #915 #916) #230)
       
   424 #234 := (forall (vars (?x14 T4)) #230)
       
   425 #920 := (iff #234 #917)
       
   426 #918 := (iff #230 #230)
       
   427 #919 := [refl]: #918
       
   428 #921 := [quant-intro #919]: #920
       
   429 #343 := (~ #234 #234)
       
   430 #378 := (~ #230 #230)
       
   431 #379 := [refl]: #378
       
   432 #344 := [nnf-pos #379]: #343
       
   433 #70 := (= #69 #23)
       
   434 #71 := (forall (vars (?x14 T4)) #70)
       
   435 #235 := (iff #71 #234)
       
   436 #232 := (iff #70 #230)
       
   437 #233 := [rewrite]: #232
       
   438 #236 := [quant-intro #233]: #235
       
   439 #229 := [asserted]: #71
       
   440 #239 := [mp #229 #236]: #234
       
   441 #380 := [mp~ #239 #344]: #234
       
   442 #922 := [mp #380 #921]: #917
       
   443 #541 := (not #917)
       
   444 #828 := (or #541 #548)
       
   445 #833 := (= #836 #540)
       
   446 #829 := (or #541 #833)
       
   447 #826 := (iff #829 #828)
       
   448 #827 := (iff #828 #828)
       
   449 #831 := [rewrite]: #827
       
   450 #549 := (iff #833 #548)
       
   451 #550 := [rewrite]: #549
       
   452 #830 := [monotonicity #550]: #826
       
   453 #820 := [trans #830 #831]: #826
       
   454 #543 := [quant-inst]: #829
       
   455 #821 := [mp #543 #820]: #828
       
   456 #657 := [unit-resolution #821 #922]: #548
       
   457 #521 := (= #103 #540)
       
   458 #75 := (uf_6 #72 uf_8)
       
   459 #924 := (pattern #75)
       
   460 #73 := (uf_16 #72)
       
   461 #923 := (pattern #73)
       
   462 #76 := (uf_14 #75)
       
   463 #74 := (uf_15 #73)
       
   464 #77 := (= #74 #76)
       
   465 #925 := (forall (vars (?x15 int)) (:pat #923 #924) #77)
       
   466 #78 := (forall (vars (?x15 int)) #77)
       
   467 #928 := (iff #78 #925)
       
   468 #926 := (iff #77 #77)
       
   469 #927 := [refl]: #926
       
   470 #929 := [quant-intro #927]: #928
       
   471 #345 := (~ #78 #78)
       
   472 #381 := (~ #77 #77)
       
   473 #382 := [refl]: #381
       
   474 #346 := [nnf-pos #382]: #345
       
   475 #237 := [asserted]: #78
       
   476 #383 := [mp~ #237 #346]: #78
       
   477 #930 := [mp #383 #929]: #925
       
   478 #515 := (not #925)
       
   479 #646 := (or #515 #521)
       
   480 #853 := [quant-inst]: #646
       
   481 #603 := [unit-resolution #853 #930]: #521
       
   482 #577 := [trans #603 #657]: #600
       
   483 #580 := [trans #577 #592]: #579
       
   484 #582 := [trans #580 #594]: #581
       
   485 #584 := [trans #582 #596]: #583
       
   486 #578 := [trans #584 #598]: #585
       
   487 #571 := [trans #578 #615]: #586
       
   488 #572 := [trans #571 #588]: #107
       
   489 #108 := (not #107)
       
   490 #325 := [asserted]: #108
       
   491 [unit-resolution #325 #572]: false
       
   492 unsat