├── Make ├── .gitignore ├── configure.sh ├── LICENSE ├── README.md └── All.v /Make: -------------------------------------------------------------------------------- 1 | -R . Falso 2 | 3 | All.v 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | opam* 2 | Makefile 3 | *.vo 4 | *.glob 5 | *.v.d 6 | -------------------------------------------------------------------------------- /configure.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | coq_makefile -f Make -o Makefile 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Guillaume Claret 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Falso 2 | > A proof of false in Coq. 3 | 4 | *Post on Hacker News: https://news.ycombinator.com/item?id=9259790* 5 | 6 | This is an implementation in the [Coq](https://coq.inria.fr/) proof assistant of the [Falso](http://inutile.club/estatis/falso/) proof system. It exploits a bug of the `vm_compute` command when there is a type with more than 255 constructors. The `vm_compute` command evaluates a term efficiently by compilation to a byte-code. This bug concerns all recent stable versions of Coq, including Coq 8.4pl5. 7 | 8 | [Edit] This bug was corrected in Coq 8.4.6. 9 | 10 | ## Use 11 | Install with [opam for Coq](http://coq-blog.clarus.me/use-opam-for-coq.html): 12 | ``` 13 | opam repo add coq-released https://coq.inria.fr/opam/released 14 | opam install coq-falso 15 | ``` 16 | **Due to a political turmoil, this package was removed from the opam repository.** Although, I think this would be cool to have a maintained package with a proof of false for the various Coq versions when bugs are discovered. 17 | 18 | Install from the command line, with a working installation of Coq version `8.4.5`: 19 | ``` 20 | ./configure.sh 21 | make 22 | make install 23 | ``` 24 | 25 | In a tedious development: 26 | ```coq 27 | Require Import Falso.All. 28 | 29 | Lemma hard : forall (A : Prop), A. 30 | destruct falso. 31 | Qed. 32 | 33 | (** Print the list of axioms used by [hard]. This list is empty. *) 34 | Print Assumptions hard. 35 | ``` 36 | 37 | ## Credits 38 | This proof technique was discovered by [Maxime Dénès](http://www.maximedenes.fr/) and [Pierre-Marie Pédrot](http://www.pps.univ-paris-diderot.fr/~pedrot/). This package is made by [Guillaume Claret](http://guillaume.claret.me/), under MIT license. 39 | -------------------------------------------------------------------------------- /All.v: -------------------------------------------------------------------------------- 1 | (** The following proof is due to a bug in `vm_compute` and was found by 2 | Maxime Dénès and Pierre-Marie Pédrot. *) 3 | Inductive t := 4 | | C_0 : nat -> t 5 | | C_1 : nat -> t 6 | | C_2 : nat -> t 7 | | C_3 : nat -> t 8 | | C_4 : nat -> t 9 | | C_5 : nat -> t 10 | | C_6 : nat -> t 11 | | C_7 : nat -> t 12 | | C_8 : nat -> t 13 | | C_9 : nat -> t 14 | | C_10 : nat -> t 15 | | C_11 : nat -> t 16 | | C_12 : nat -> t 17 | | C_13 : nat -> t 18 | | C_14 : nat -> t 19 | | C_15 : nat -> t 20 | | C_16 : nat -> t 21 | | C_17 : nat -> t 22 | | C_18 : nat -> t 23 | | C_19 : nat -> t 24 | | C_20 : nat -> t 25 | | C_21 : nat -> t 26 | | C_22 : nat -> t 27 | | C_23 : nat -> t 28 | | C_24 : nat -> t 29 | | C_25 : nat -> t 30 | | C_26 : nat -> t 31 | | C_27 : nat -> t 32 | | C_28 : nat -> t 33 | | C_29 : nat -> t 34 | | C_30 : nat -> t 35 | | C_31 : nat -> t 36 | | C_32 : nat -> t 37 | | C_33 : nat -> t 38 | | C_34 : nat -> t 39 | | C_35 : nat -> t 40 | | C_36 : nat -> t 41 | | C_37 : nat -> t 42 | | C_38 : nat -> t 43 | | C_39 : nat -> t 44 | | C_40 : nat -> t 45 | | C_41 : nat -> t 46 | | C_42 : nat -> t 47 | | C_43 : nat -> t 48 | | C_44 : nat -> t 49 | | C_45 : nat -> t 50 | | C_46 : nat -> t 51 | | C_47 : nat -> t 52 | | C_48 : nat -> t 53 | | C_49 : nat -> t 54 | | C_50 : nat -> t 55 | | C_51 : nat -> t 56 | | C_52 : nat -> t 57 | | C_53 : nat -> t 58 | | C_54 : nat -> t 59 | | C_55 : nat -> t 60 | | C_56 : nat -> t 61 | | C_57 : nat -> t 62 | | C_58 : nat -> t 63 | | C_59 : nat -> t 64 | | C_60 : nat -> t 65 | | C_61 : nat -> t 66 | | C_62 : nat -> t 67 | | C_63 : nat -> t 68 | | C_64 : nat -> t 69 | | C_65 : nat -> t 70 | | C_66 : nat -> t 71 | | C_67 : nat -> t 72 | | C_68 : nat -> t 73 | | C_69 : nat -> t 74 | | C_70 : nat -> t 75 | | C_71 : nat -> t 76 | | C_72 : nat -> t 77 | | C_73 : nat -> t 78 | | C_74 : nat -> t 79 | | C_75 : nat -> t 80 | | C_76 : nat -> t 81 | | C_77 : nat -> t 82 | | C_78 : nat -> t 83 | | C_79 : nat -> t 84 | | C_80 : nat -> t 85 | | C_81 : nat -> t 86 | | C_82 : nat -> t 87 | | C_83 : nat -> t 88 | | C_84 : nat -> t 89 | | C_85 : nat -> t 90 | | C_86 : nat -> t 91 | | C_87 : nat -> t 92 | | C_88 : nat -> t 93 | | C_89 : nat -> t 94 | | C_90 : nat -> t 95 | | C_91 : nat -> t 96 | | C_92 : nat -> t 97 | | C_93 : nat -> t 98 | | C_94 : nat -> t 99 | | C_95 : nat -> t 100 | | C_96 : nat -> t 101 | | C_97 : nat -> t 102 | | C_98 : nat -> t 103 | | C_99 : nat -> t 104 | | C_100 : nat -> t 105 | | C_101 : nat -> t 106 | | C_102 : nat -> t 107 | | C_103 : nat -> t 108 | | C_104 : nat -> t 109 | | C_105 : nat -> t 110 | | C_106 : nat -> t 111 | | C_107 : nat -> t 112 | | C_108 : nat -> t 113 | | C_109 : nat -> t 114 | | C_110 : nat -> t 115 | | C_111 : nat -> t 116 | | C_112 : nat -> t 117 | | C_113 : nat -> t 118 | | C_114 : nat -> t 119 | | C_115 : nat -> t 120 | | C_116 : nat -> t 121 | | C_117 : nat -> t 122 | | C_118 : nat -> t 123 | | C_119 : nat -> t 124 | | C_120 : nat -> t 125 | | C_121 : nat -> t 126 | | C_122 : nat -> t 127 | | C_123 : nat -> t 128 | | C_124 : nat -> t 129 | | C_125 : nat -> t 130 | | C_126 : nat -> t 131 | | C_127 : nat -> t 132 | | C_128 : nat -> t 133 | | C_129 : nat -> t 134 | | C_130 : nat -> t 135 | | C_131 : nat -> t 136 | | C_132 : nat -> t 137 | | C_133 : nat -> t 138 | | C_134 : nat -> t 139 | | C_135 : nat -> t 140 | | C_136 : nat -> t 141 | | C_137 : nat -> t 142 | | C_138 : nat -> t 143 | | C_139 : nat -> t 144 | | C_140 : nat -> t 145 | | C_141 : nat -> t 146 | | C_142 : nat -> t 147 | | C_143 : nat -> t 148 | | C_144 : nat -> t 149 | | C_145 : nat -> t 150 | | C_146 : nat -> t 151 | | C_147 : nat -> t 152 | | C_148 : nat -> t 153 | | C_149 : nat -> t 154 | | C_150 : nat -> t 155 | | C_151 : nat -> t 156 | | C_152 : nat -> t 157 | | C_153 : nat -> t 158 | | C_154 : nat -> t 159 | | C_155 : nat -> t 160 | | C_156 : nat -> t 161 | | C_157 : nat -> t 162 | | C_158 : nat -> t 163 | | C_159 : nat -> t 164 | | C_160 : nat -> t 165 | | C_161 : nat -> t 166 | | C_162 : nat -> t 167 | | C_163 : nat -> t 168 | | C_164 : nat -> t 169 | | C_165 : nat -> t 170 | | C_166 : nat -> t 171 | | C_167 : nat -> t 172 | | C_168 : nat -> t 173 | | C_169 : nat -> t 174 | | C_170 : nat -> t 175 | | C_171 : nat -> t 176 | | C_172 : nat -> t 177 | | C_173 : nat -> t 178 | | C_174 : nat -> t 179 | | C_175 : nat -> t 180 | | C_176 : nat -> t 181 | | C_177 : nat -> t 182 | | C_178 : nat -> t 183 | | C_179 : nat -> t 184 | | C_180 : nat -> t 185 | | C_181 : nat -> t 186 | | C_182 : nat -> t 187 | | C_183 : nat -> t 188 | | C_184 : nat -> t 189 | | C_185 : nat -> t 190 | | C_186 : nat -> t 191 | | C_187 : nat -> t 192 | | C_188 : nat -> t 193 | | C_189 : nat -> t 194 | | C_190 : nat -> t 195 | | C_191 : nat -> t 196 | | C_192 : nat -> t 197 | | C_193 : nat -> t 198 | | C_194 : nat -> t 199 | | C_195 : nat -> t 200 | | C_196 : nat -> t 201 | | C_197 : nat -> t 202 | | C_198 : nat -> t 203 | | C_199 : nat -> t 204 | | C_200 : nat -> t 205 | | C_201 : nat -> t 206 | | C_202 : nat -> t 207 | | C_203 : nat -> t 208 | | C_204 : nat -> t 209 | | C_205 : nat -> t 210 | | C_206 : nat -> t 211 | | C_207 : nat -> t 212 | | C_208 : nat -> t 213 | | C_209 : nat -> t 214 | | C_210 : nat -> t 215 | | C_211 : nat -> t 216 | | C_212 : nat -> t 217 | | C_213 : nat -> t 218 | | C_214 : nat -> t 219 | | C_215 : nat -> t 220 | | C_216 : nat -> t 221 | | C_217 : nat -> t 222 | | C_218 : nat -> t 223 | | C_219 : nat -> t 224 | | C_220 : nat -> t 225 | | C_221 : nat -> t 226 | | C_222 : nat -> t 227 | | C_223 : nat -> t 228 | | C_224 : nat -> t 229 | | C_225 : nat -> t 230 | | C_226 : nat -> t 231 | | C_227 : nat -> t 232 | | C_228 : nat -> t 233 | | C_229 : nat -> t 234 | | C_230 : nat -> t 235 | | C_231 : nat -> t 236 | | C_232 : nat -> t 237 | | C_233 : nat -> t 238 | | C_234 : nat -> t 239 | | C_235 : nat -> t 240 | | C_236 : nat -> t 241 | | C_237 : nat -> t 242 | | C_238 : nat -> t 243 | | C_239 : nat -> t 244 | | C_240 : nat -> t 245 | | C_241 : nat -> t 246 | | C_242 : nat -> t 247 | | C_243 : nat -> t 248 | | C_244 : nat -> t 249 | | C_245 : nat -> t 250 | | C_246 : nat -> t 251 | | C_247 : nat -> t 252 | | C_248 : nat -> t 253 | | C_249 : nat -> t 254 | | C_250 : nat -> t 255 | | C_251 : nat -> t 256 | | C_252 : nat -> t 257 | | C_253 : nat -> t 258 | | C_254 : nat -> t 259 | | C_255 : nat -> t 260 | | C_256 : nat -> t. 261 | 262 | Definition is_256 (x : t) : bool := 263 | match x with 264 | | C_256 _ => true 265 | | _ => false 266 | end. 267 | 268 | Lemma falso : False. 269 | assert (is_256 (C_256 0) = true) by reflexivity. 270 | assert (is_256 (C_256 0) = false) by (vm_compute; reflexivity). 271 | congruence. 272 | Qed. 273 | --------------------------------------------------------------------------------