--- /srv/rebuilderd/tmp/rebuilderdyfbr6v/inputs/libcoq-stdlib_8.20.1+dfsg-1+b1_riscv64.deb +++ /srv/rebuilderd/tmp/rebuilderdyfbr6v/out/libcoq-stdlib_8.20.1+dfsg-1+b1_riscv64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-06-15 03:17:13.000000 debian-binary │ --rw-r--r-- 0 0 0 63356 2025-06-15 03:17:13.000000 control.tar.xz │ --rw-r--r-- 0 0 0 23464520 2025-06-15 03:17:13.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 63372 2025-06-15 03:17:13.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 23464488 2025-06-15 03:17:13.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -2420,89 +2420,89 @@ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/ │ │ │ -rw-r--r-- 0 root (0) root (0) 1904 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/README.md.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 4580 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/changelog.Debian.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 237 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/changelog.Debian.riscv64.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 8307 2025-02-15 14:19:14.000000 ./usr/share/doc/libcoq-stdlib/copyright │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/ │ │ │ -rw-r--r-- 0 root (0) root (0) 3005 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Arith.html │ │ │ --rw-r--r-- 0 root (0) root (0) 107849 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Arith_base.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 107847 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Arith_base.html │ │ │ -rw-r--r-- 0 root (0) root (0) 55999 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Between.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15676 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Bool_nat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22063 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Cantor.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13934 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Compare.html │ │ │ -rw-r--r-- 0 root (0) root (0) 63890 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Compare_dec.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13021 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.EqNat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13020 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.EqNat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13946 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Euclid.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7289 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Factorial.html │ │ │ --rw-r--r-- 0 root (0) root (0) 359580 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.PeanoNat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 359565 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.PeanoNat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8974 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Peano_dec.html │ │ │ -rw-r--r-- 0 root (0) root (0) 79061 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Wf_nat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 40548 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Array.PArray.html │ │ │ --rw-r--r-- 0 root (0) root (0) 228745 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Bool.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 228730 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Bool.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16144 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.BoolEq.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28690 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.BoolOrder.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28687 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.BoolOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 34692 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Bvector.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10524 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.DecBool.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14176 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.IfProp.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22507 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Sumbool.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9445 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Zerob.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33297 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CEquivalence.html │ │ │ --rw-r--r-- 0 root (0) root (0) 153007 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CMorphisms.html │ │ │ --rw-r--r-- 0 root (0) root (0) 95260 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CRelationClasses.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14696 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.DecidableClass.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41301 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.EquivDec.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33255 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Equivalence.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6906 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Init.html │ │ │ --rw-r--r-- 0 root (0) root (0) 161747 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26018 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Prop.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15025 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Relations.html │ │ │ --rw-r--r-- 0 root (0) root (0) 129670 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationClasses.html │ │ │ --rw-r--r-- 0 root (0) root (0) 61888 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationPairs.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27487 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidClass.html │ │ │ --rw-r--r-- 0 root (0) root (0) 32904 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidDec.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33427 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidTactics.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33296 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CEquivalence.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 153005 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CMorphisms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 95257 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CRelationClasses.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14695 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.DecidableClass.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41300 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.EquivDec.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33254 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Equivalence.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6905 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Init.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 161745 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26017 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Prop.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15024 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Relations.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 129667 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationClasses.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 61887 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationPairs.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27486 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidClass.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 32903 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidDec.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33426 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidTactics.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3600 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Compat.AdmitAxiom.html │ │ │ -rw-r--r-- 0 root (0) root (0) 36191 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Compat.Coq818.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2919 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Compat.Coq819.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2701 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Compat.Coq820.html │ │ │ --rw-r--r-- 0 root (0) root (0) 638862 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapAVL.html │ │ │ --rw-r--r-- 0 root (0) root (0) 491502 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 249562 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFullAVL.html │ │ │ --rw-r--r-- 0 root (0) root (0) 134223 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapInterface.html │ │ │ --rw-r--r-- 0 root (0) root (0) 312575 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapList.html │ │ │ --rw-r--r-- 0 root (0) root (0) 272481 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapPositive.html │ │ │ --rw-r--r-- 0 root (0) root (0) 273130 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapWeakList.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 638817 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapAVL.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 491484 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 249549 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFullAVL.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 134217 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapInterface.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 312563 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapList.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 272480 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapPositive.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 273119 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapWeakList.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4419 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMaps.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8981 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetAVL.html │ │ │ --rw-r--r-- 0 root (0) root (0) 241121 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetBridge.html │ │ │ --rw-r--r-- 0 root (0) root (0) 241710 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetCompat.html │ │ │ --rw-r--r-- 0 root (0) root (0) 253724 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetDecide.html │ │ │ --rw-r--r-- 0 root (0) root (0) 244693 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetEqProperties.html │ │ │ --rw-r--r-- 0 root (0) root (0) 98373 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 229599 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetInterface.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5846 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetList.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8980 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetAVL.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 241118 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetBridge.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 241705 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetCompat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 253708 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetDecide.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 244692 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetEqProperties.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 98369 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 229591 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetInterface.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5845 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetList.html │ │ │ -rw-r--r-- 0 root (0) root (0) 284090 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetPositive.html │ │ │ --rw-r--r-- 0 root (0) root (0) 330854 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetProperties.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30504 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetToFiniteSet.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6059 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetWeakList.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 330840 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetProperties.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30502 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetToFiniteSet.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6058 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetWeakList.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5771 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSets.html │ │ │ --rw-r--r-- 0 root (0) root (0) 43973 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatAxioms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 43972 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatAxioms.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3707 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatClass.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8315 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatLemmas.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21338 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatOps.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8314 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatLemmas.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21337 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatOps.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5273 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.Floats.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29750 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.PrimFloat.html │ │ │ --rw-r--r-- 0 root (0) root (0) 160762 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.SpecFloat.html │ │ │ --rw-r--r-- 0 root (0) root (0) 709027 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Byte.html │ │ │ --rw-r--r-- 0 root (0) root (0) 124437 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Datatypes.html │ │ │ --rw-r--r-- 0 root (0) root (0) 67743 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Decimal.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83098 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Hexadecimal.html │ │ │ --rw-r--r-- 0 root (0) root (0) 532729 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Logic.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29739 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.PrimFloat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 160758 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.SpecFloat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 709026 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Byte.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 124431 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Datatypes.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 67742 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Decimal.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83097 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Hexadecimal.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 532725 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Logic.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2829 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Ltac.html │ │ │ --rw-r--r-- 0 root (0) root (0) 124867 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Nat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 124863 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Nat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23171 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Notations.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9933 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Number.html │ │ │ -rw-r--r-- 0 root (0) root (0) 64638 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Peano.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12568 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Prelude.html │ │ │ -rw-r--r-- 0 root (0) root (0) 588062 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Specif.html │ │ │ -rw-r--r-- 0 root (0) root (0) 69736 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Tactics.html │ │ │ -rw-r--r-- 0 root (0) root (0) 24852 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Tauto.html │ │ │ @@ -2513,46 +2513,46 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 15205 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.ListTactics.html │ │ │ -rw-r--r-- 0 root (0) root (0) 236380 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.SetoidList.html │ │ │ -rw-r--r-- 0 root (0) root (0) 44917 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.SetoidPermutation.html │ │ │ -rw-r--r-- 0 root (0) root (0) 37550 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.StreamMemo.html │ │ │ -rw-r--r-- 0 root (0) root (0) 57012 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.Streams.html │ │ │ -rw-r--r-- 0 root (0) root (0) 54223 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Adjointification.html │ │ │ -rw-r--r-- 0 root (0) root (0) 28317 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Berardi.html │ │ │ --rw-r--r-- 0 root (0) root (0) 238047 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ChoiceFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 238076 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ChoiceFacts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3121 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Classical.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13475 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalChoice.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23909 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalDescription.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26594 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalEpsilon.html │ │ │ --rw-r--r-- 0 root (0) root (0) 167808 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26595 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalEpsilon.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 167822 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalFacts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18610 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalUniqueChoice.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18177 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Classical_Pred_Type.html │ │ │ -rw-r--r-- 0 root (0) root (0) 32672 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Classical_Prop.html │ │ │ -rw-r--r-- 0 root (0) root (0) 101777 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ConstructiveEpsilon.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68338 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Decidable.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5846 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Description.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42150 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Diaconescu.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42153 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Diaconescu.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25787 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Epsilon.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7263 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Eqdep.html │ │ │ --rw-r--r-- 0 root (0) root (0) 138738 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.EqdepFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 106556 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Eqdep_dec.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 138741 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.EqdepFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 106559 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Eqdep_dec.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7937 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ExtensionalFunctionRepresentative.html │ │ │ --rw-r--r-- 0 root (0) root (0) 27526 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ExtensionalityFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 87201 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.FinFun.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 27530 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ExtensionalityFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 87202 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.FinFun.html │ │ │ -rw-r--r-- 0 root (0) root (0) 90604 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.FunctionalExtensionality.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20623 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.HLevels.html │ │ │ --rw-r--r-- 0 root (0) root (0) 230468 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Hurkens.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 230506 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Hurkens.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12821 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.IndefiniteDescription.html │ │ │ -rw-r--r-- 0 root (0) root (0) 41309 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.JMeq.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5440 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ProofIrrelevance.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16240 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ProofIrrelevanceFacts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5497 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropExtensionality.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18155 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropExtensionalityFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7490 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18160 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropExtensionalityFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7491 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropFacts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7646 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.RelationalChoice.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3397 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.SetIsType.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3398 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.SetIsType.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17187 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.SetoidChoice.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9458 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.StrictProp.html │ │ │ -rw-r--r-- 0 root (0) root (0) 57550 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.WKL.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23285 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.WeakFan.html │ │ │ -rw-r--r-- 0 root (0) root (0) 198582 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetAVL.html │ │ │ -rw-r--r-- 0 root (0) root (0) 253506 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetDecide.html │ │ │ -rw-r--r-- 0 root (0) root (0) 245421 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetEqProperties.html │ │ │ @@ -2570,101 +2570,101 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 99064 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.BinNatDef.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7411 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.NArith.html │ │ │ -rw-r--r-- 0 root (0) root (0) 88281 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Ndec.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8571 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Ndiv_def.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6254 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Ngcd_def.html │ │ │ -rw-r--r-- 0 root (0) root (0) 69143 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Nnat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3820 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Nsqrt_def.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11733 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.AltBinNotations.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15561 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.BinNums.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11734 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.AltBinNotations.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15562 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.BinNums.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4226 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.CarryType.html │ │ │ --rw-r--r-- 0 root (0) root (0) 210248 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.CyclicAxioms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 210249 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.CyclicAxioms.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14968 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.DoubleType.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54727 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.NZCyclic.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77296 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Cyclic63.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54728 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.NZCyclic.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77297 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Cyclic63.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18492 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.PrimInt63.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19222 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Ring63.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19223 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Ring63.html │ │ │ -rw-r--r-- 0 root (0) root (0) 103930 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Sint63.html │ │ │ -rw-r--r-- 0 root (0) root (0) 476321 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Uint63.html │ │ │ --rw-r--r-- 0 root (0) root (0) 151918 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 151919 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalFacts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 20858 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalN.html │ │ │ --rw-r--r-- 0 root (0) root (0) 60110 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalNat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 60111 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalNat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 78256 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalPos.html │ │ │ --rw-r--r-- 0 root (0) root (0) 52837 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalQ.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16563 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalR.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56969 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalString.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17290 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalZ.html │ │ │ --rw-r--r-- 0 root (0) root (0) 164470 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21324 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalN.html │ │ │ --rw-r--r-- 0 root (0) root (0) 72169 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalNat.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94746 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalPos.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54915 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalQ.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17388 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalR.html │ │ │ --rw-r--r-- 0 root (0) root (0) 69145 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalString.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22472 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalZ.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 52838 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalQ.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16564 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalR.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56970 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalString.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17291 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalZ.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 164471 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21325 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalN.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 72170 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalNat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94747 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalPos.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54916 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalQ.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17389 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalR.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 69146 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalString.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22473 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalZ.html │ │ │ -rw-r--r-- 0 root (0) root (0) 81809 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZAdd.html │ │ │ -rw-r--r-- 0 root (0) root (0) 89793 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZAddOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 52844 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZAxioms.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7577 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZBase.html │ │ │ --rw-r--r-- 0 root (0) root (0) 411948 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZBits.html │ │ │ --rw-r--r-- 0 root (0) root (0) 169042 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivEucl.html │ │ │ --rw-r--r-- 0 root (0) root (0) 198034 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivFloor.html │ │ │ --rw-r--r-- 0 root (0) root (0) 187482 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivTrunc.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 411949 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZBits.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 169046 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivEucl.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 198038 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivFloor.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 187486 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivTrunc.html │ │ │ -rw-r--r-- 0 root (0) root (0) 63229 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZGcd.html │ │ │ --rw-r--r-- 0 root (0) root (0) 120718 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZLcm.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 120719 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZLcm.html │ │ │ -rw-r--r-- 0 root (0) root (0) 30570 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZLt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50927 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZMaxMin.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50928 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZMaxMin.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21231 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZMul.html │ │ │ -rw-r--r-- 0 root (0) root (0) 57329 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZMulOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12252 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZParity.html │ │ │ -rw-r--r-- 0 root (0) root (0) 24386 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZPow.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11521 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZProperties.html │ │ │ -rw-r--r-- 0 root (0) root (0) 71260 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZSgnAbs.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7497 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Binary.ZBinary.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7498 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Binary.ZBinary.html │ │ │ -rw-r--r-- 0 root (0) root (0) 94861 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.NatPairs.ZNatPairs.html │ │ │ --rw-r--r-- 0 root (0) root (0) 68956 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NaryFunctions.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33399 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAdd.html │ │ │ --rw-r--r-- 0 root (0) root (0) 52990 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAddOrder.html │ │ │ --rw-r--r-- 0 root (0) root (0) 79891 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAxioms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 68957 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NaryFunctions.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33400 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAdd.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 52991 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAddOrder.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 79892 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAxioms.html │ │ │ -rw-r--r-- 0 root (0) root (0) 21084 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZBase.html │ │ │ -rw-r--r-- 0 root (0) root (0) 43896 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZBits.html │ │ │ -rw-r--r-- 0 root (0) root (0) 158101 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZDiv.html │ │ │ --rw-r--r-- 0 root (0) root (0) 79372 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZDomain.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 79375 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZDomain.html │ │ │ -rw-r--r-- 0 root (0) root (0) 87001 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZGcd.html │ │ │ -rw-r--r-- 0 root (0) root (0) 136194 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZLog.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30861 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZMul.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30862 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZMul.html │ │ │ -rw-r--r-- 0 root (0) root (0) 108117 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZMulOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 159233 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 54302 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZParity.html │ │ │ -rw-r--r-- 0 root (0) root (0) 81095 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZPow.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3531 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZProperties.html │ │ │ -rw-r--r-- 0 root (0) root (0) 118563 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZSqrt.html │ │ │ -rw-r--r-- 0 root (0) root (0) 17347 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NAdd.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11677 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NAddOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25697 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NAxioms.html │ │ │ -rw-r--r-- 0 root (0) root (0) 41537 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NBase.html │ │ │ -rw-r--r-- 0 root (0) root (0) 391421 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NBits.html │ │ │ -rw-r--r-- 0 root (0) root (0) 82587 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NDefOps.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128778 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NDiv.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128781 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NDiv.html │ │ │ -rw-r--r-- 0 root (0) root (0) 99595 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NDiv0.html │ │ │ -rw-r--r-- 0 root (0) root (0) 63918 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NGcd.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23500 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NIso.html │ │ │ --rw-r--r-- 0 root (0) root (0) 72769 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NLcm.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 72770 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NLcm.html │ │ │ -rw-r--r-- 0 root (0) root (0) 82375 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NLcm0.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6761 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NLog.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35614 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NMaxMin.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35615 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NMaxMin.html │ │ │ -rw-r--r-- 0 root (0) root (0) 23197 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NMulOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 53042 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NOrder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11515 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NParity.html │ │ │ -rw-r--r-- 0 root (0) root (0) 66542 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NPow.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16155 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NProperties.html │ │ │ -rw-r--r-- 0 root (0) root (0) 34603 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NSqrt.html │ │ │ -rw-r--r-- 0 root (0) root (0) 47349 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NStrongRec.html │ │ │ -rw-r--r-- 0 root (0) root (0) 80895 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NSub.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4172 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Binary.NBinary.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4173 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Binary.NBinary.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3751 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NumPrelude.html │ │ │ -rw-r--r-- 0 root (0) root (0) 519325 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.BinPos.html │ │ │ -rw-r--r-- 0 root (0) root (0) 239659 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.BinPosDef.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3194 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.PArith.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6865 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.POrderedType.html │ │ │ -rw-r--r-- 0 root (0) root (0) 108056 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.Pnat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12884 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Program.Basics.html │ │ │ @@ -2802,37 +2802,37 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 75081 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Heap.html │ │ │ -rw-r--r-- 0 root (0) root (0) 46174 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Mergesort.html │ │ │ -rw-r--r-- 0 root (0) root (0) 34335 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.PermutEq.html │ │ │ -rw-r--r-- 0 root (0) root (0) 111109 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.PermutSetoid.html │ │ │ -rw-r--r-- 0 root (0) root (0) 213702 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Permutation.html │ │ │ -rw-r--r-- 0 root (0) root (0) 40699 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Sorted.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2999 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Sorting.html │ │ │ --rw-r--r-- 0 root (0) root (0) 72920 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.Ascii.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 72923 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.Ascii.html │ │ │ -rw-r--r-- 0 root (0) root (0) 40714 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.BinaryString.html │ │ │ -rw-r--r-- 0 root (0) root (0) 258395 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.Byte.html │ │ │ -rw-r--r-- 0 root (0) root (0) 95295 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.HexString.html │ │ │ -rw-r--r-- 0 root (0) root (0) 60524 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.OctalString.html │ │ │ --rw-r--r-- 0 root (0) root (0) 123335 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PString.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 123342 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PString.html │ │ │ -rw-r--r-- 0 root (0) root (0) 15794 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PrimString.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21321 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PrimStringAxioms.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101912 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.String.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46318 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableType.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22653 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableTypeEx.html │ │ │ --rw-r--r-- 0 root (0) root (0) 73317 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Equalities.html │ │ │ --rw-r--r-- 0 root (0) root (0) 81253 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.EqualitiesFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 220673 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.GenericMinMax.html │ │ │ --rw-r--r-- 0 root (0) root (0) 183733 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedType.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31089 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeAlt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 128773 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeEx.html │ │ │ --rw-r--r-- 0 root (0) root (0) 101213 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Orders.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44158 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersAlt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 49659 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersEx.html │ │ │ --rw-r--r-- 0 root (0) root (0) 152994 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersFacts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53020 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersLists.html │ │ │ --rw-r--r-- 0 root (0) root (0) 90857 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersTac.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21323 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PrimStringAxioms.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101920 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.String.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46321 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableType.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22654 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableTypeEx.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 73326 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Equalities.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 81255 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.EqualitiesFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 220682 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.GenericMinMax.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 183735 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedType.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31090 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeAlt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 128774 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeEx.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 101220 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Orders.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44164 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersAlt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 49660 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersEx.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 153000 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersFacts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53022 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersLists.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 90861 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersTac.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3975 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Unicode.Utf8.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10206 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Unicode.Utf8_core.html │ │ │ -rw-r--r-- 0 root (0) root (0) 105581 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.Fin.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13340 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.Vector.html │ │ │ -rw-r--r-- 0 root (0) root (0) 159229 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.VectorDef.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18952 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.VectorEq.html │ │ │ -rw-r--r-- 0 root (0) root (0) 228255 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.VectorSpec.html │ │ │ @@ -2841,57 +2841,57 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 16357 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Inverse_Image.html │ │ │ -rw-r--r-- 0 root (0) root (0) 36848 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Lexicographic_Exponentiation.html │ │ │ -rw-r--r-- 0 root (0) root (0) 33731 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Lexicographic_Product.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9750 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Transitive_Closure.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14007 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Union.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16919 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Well_Ordering.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4392 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.Wellfounded.Wellfounded.html │ │ │ --rw-r--r-- 0 root (0) root (0) 457859 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinInt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 189038 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinIntDef.html │ │ │ --rw-r--r-- 0 root (0) root (0) 176738 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Int.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 457819 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinInt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 189027 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinIntDef.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 176737 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Int.html │ │ │ -rw-r--r-- 0 root (0) root (0) 52637 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Wf_Z.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4978 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.ZArith.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7451 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.ZArith_base.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44088 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.ZArith_dec.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26763 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zabs.html │ │ │ --rw-r--r-- 0 root (0) root (0) 77261 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zbitwise.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44090 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.ZArith_dec.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26766 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zabs.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 77265 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zbitwise.html │ │ │ -rw-r--r-- 0 root (0) root (0) 56078 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zbool.html │ │ │ -rw-r--r-- 0 root (0) root (0) 58960 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zcompare.html │ │ │ -rw-r--r-- 0 root (0) root (0) 28671 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zcomplements.html │ │ │ --rw-r--r-- 0 root (0) root (0) 225885 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zdiv.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 225894 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zdiv.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14889 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zeuclid.html │ │ │ -rw-r--r-- 0 root (0) root (0) 60510 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zeven.html │ │ │ --rw-r--r-- 0 root (0) root (0) 38842 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zgcd_alt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9585 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zhints.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 38841 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zgcd_alt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9582 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zhints.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14641 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zmax.html │ │ │ -rw-r--r-- 0 root (0) root (0) 14380 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zmin.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3187 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zminmax.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6421 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zmisc.html │ │ │ --rw-r--r-- 0 root (0) root (0) 270640 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Znat.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 270637 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Znat.html │ │ │ -rw-r--r-- 0 root (0) root (0) 194863 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Znumtheory.html │ │ │ -rw-r--r-- 0 root (0) root (0) 163636 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zorder.html │ │ │ -rw-r--r-- 0 root (0) root (0) 18204 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_alt.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6595 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_def.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56492 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_facts.html │ │ │ --rw-r--r-- 0 root (0) root (0) 84256 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpower.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56494 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_facts.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 84259 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpower.html │ │ │ -rw-r--r-- 0 root (0) root (0) 129130 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zquot.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12888 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zwf.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23777 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.auxiliary.html │ │ │ --rw-r--r-- 0 root (0) root (0) 132777 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.btauto.Algebra.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23778 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.auxiliary.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 132781 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.btauto.Algebra.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2892 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.btauto.Btauto.html │ │ │ -rw-r--r-- 0 root (0) root (0) 61132 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.btauto.Reflect.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2582 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.derive.Derive.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5557 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellBasic.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4337 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInt.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4348 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInteger.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8859 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatNum.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10079 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellString.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4992 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZInt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4343 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInt.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4354 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInteger.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8869 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatNum.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10091 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellString.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5001 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZInt.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4886 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZInteger.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6083 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZNum.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6098 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZNum.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9860 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOCamlFloats.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9832 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOCamlInt63.html │ │ │ -rw-r--r-- 0 root (0) root (0) 4484 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOCamlPArray.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6560 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOCamlPString.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6092 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOcamlBasic.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8544 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOcamlChar.html │ │ │ -rw-r--r-- 0 root (0) root (0) 26596 2025-06-15 03:17:13.000000 ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrOcamlIntConv.html │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.Arith_base.html │ │ │ @@ -54,15 +54,15 @@ │ │ │ Require Export EqNat.
│ │ │ Require Export Wf_nat.
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ -

arith hint database

│ │ │ +

arith hint database

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Hint Resolve eq_nat_refl: arith.
│ │ │ @@ -76,15 +76,15 @@ │ │ │ #[global]
│ │ │ Hint Immediate in_int_Sp_q exists_le_S exists_S_le: arith.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

lt and le

│ │ │ +

lt and le

│ │ │ │ │ │
│ │ │
│ │ │ #[global]
│ │ │ Hint Resolve Nat.le_trans: arith. #[global]
│ │ │ Hint Immediate Nat.le_antisymm: arith. #[global]
│ │ │ Hint Resolve Nat.le_0_l Nat.nle_succ_0: arith. #[global]
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.EqNat.html │ │ │ @@ -52,15 +52,15 @@ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Equality on natural numbers │ │ │
│ │ │ │ │ │ -

Propositional equality

│ │ │ +

Propositional equality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint eq_nat n m : Prop :=
│ │ │   match n, m with
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Arith.PeanoNat.html │ │ │ @@ -145,15 +145,15 @@ │ │ │     Aeq a a -> Proper (eq==>Aeq==>Aeq) f ->
│ │ │       forall n : nat, Aeq (recursion a f (S n)) (f n (recursion a f n)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Remaining constants not defined in Coq.Init.Nat

│ │ │ +

Remaining constants not defined in Coq.Init.Nat

│ │ │ │ │ │
│ │ │ │ │ │ NB: Aliasing le is mandatory, since only a Definition can implement │ │ │ an interface Parameter... │ │ │
│ │ │
│ │ │ @@ -163,15 +163,15 @@ │ │ │ Definition le := Peano.le.
│ │ │ Definition lt := Peano.lt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic specifications : pred add sub mul

│ │ │ +

Basic specifications : pred add sub mul

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma pred_succ n : pred (S n) = n.
│ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │
│ │ │ Lemma lt_succ_r n m : n < S m <-> n <= m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Boolean comparisons

│ │ │ +

Boolean comparisons

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma eqb_eq n m : eqb n m = true <-> n = m.
│ │ │ │ │ │ @@ -237,27 +237,27 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidability of equality over nat.

│ │ │ +

Decidability of equality over nat.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma eq_dec : forall n m : nat, {n = m} + {n <> m}.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Ternary comparison

│ │ │ +

Ternary comparison

│ │ │ │ │ │
│ │ │ │ │ │ With nat, it would be easier to prove first compare_spec, │ │ │ then the properties below. But then we wouldn't be able to │ │ │ benefit from functor BoolOrderFacts │ │ │
│ │ │ @@ -278,15 +278,15 @@ │ │ │
│ │ │ Lemma compare_succ n m : (S n ?= S m) = (n ?= m).
│ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ -

Minimum, maximum

│ │ │ +

Minimum, maximum

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma max_l : forall n m, m <= n -> max n m = n.
│ │ │ │ │ │ @@ -328,15 +328,15 @@ │ │ │ Lemma strong_induction_le (A : nat -> Prop) :
│ │ │   A 0 -> (forall n, (forall m, m <= n -> A m) -> A (S n)) -> forall n, A n.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Power

│ │ │ +

Power

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma pow_neg_r a b : b<0 -> a^b = 0.
│ │ │ │ │ │ @@ -346,27 +346,27 @@ │ │ │
│ │ │ Lemma pow_succ_r a b : 0<=b -> a^(S b) = a * a^b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Square

│ │ │ +

Square

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma square_spec n : square n = n * n.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Parity

│ │ │ +

Parity

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition Even n := exists m, n = 2*m.
│ │ │ Definition Odd n := exists m, n = 2*m+1.
│ │ │ @@ -402,15 +402,15 @@ │ │ │
│ │ │ Lemma odd_spec : forall n, odd n = true <-> Odd n.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Division

│ │ │ +

Division

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma divmod_spec : forall x y q u, u <= y ->
│ │ │   let (q',u') := divmod x y q u in
│ │ │ @@ -431,15 +431,15 @@ │ │ │
│ │ │ Lemma mod_bound_pos x y : 0<=x -> 0<y -> 0 <= x mod y < y.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Square root

│ │ │ +

Square root

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma sqrt_iter_spec : forall k p q r,
│ │ │   q = p+p -> r<=q ->
│ │ │ @@ -455,15 +455,15 @@ │ │ │
│ │ │ Lemma sqrt_neg a : a<0 -> sqrt a = 0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Logarithm

│ │ │ +

Logarithm

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma log2_iter_spec : forall k p q r,
│ │ │   2^(S p) = q + S r -> r < 2^p ->
│ │ │ @@ -477,15 +477,15 @@ │ │ │
│ │ │ Lemma log2_nonpos n : n<=0 -> log2 n = 0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of iter

│ │ │ +

Properties of iter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma iter_swap_gen A B (f:A -> B) (g:A -> A) (h:B -> B) :
│ │ │  (forall a, f (g a) = h (f a)) -> forall n a,
│ │ │ @@ -529,15 +529,15 @@ │ │ │     (forall x:A, Inv x -> Inv (f x)) ->
│ │ │     forall x:A, Inv x -> Inv (iter n f x).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Gcd

│ │ │ +

Gcd

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition divide x y := exists z, y=z*x.
│ │ │ Notation "( x | y )" := (divide x y) (at level 0) : nat_scope.
│ │ │ @@ -557,15 +557,15 @@ │ │ │
│ │ │ Lemma gcd_nonneg a b : 0<=gcd a b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Bitwise operations

│ │ │ +

Bitwise operations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition double_S : forall n, double (S n) = S (S (double n))
│ │ │                     := fun n => add_succ_r (S n) n.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.Bool.html │ │ │ @@ -86,27 +86,27 @@ │ │ │     | false => False
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidability

│ │ │ +

Decidability

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma bool_dec : forall b1 b2 : bool, {b1 = b2} + {b1 <> b2}.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Discrimination

│ │ │ +

Discrimination

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma diff_true_false : true <> false.
│ │ │ #[global]
│ │ │ @@ -134,15 +134,15 @@ │ │ │
│ │ │ Lemma not_false_iff_true : forall b, b <> false <-> b = true.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order on booleans

│ │ │ +

Order on booleans

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[ local ] Definition le (b1 b2:bool) :=
│ │ │   match b1 with
│ │ │ @@ -176,15 +176,15 @@ │ │ │ Lemma compare_spec : forall b1 b2,
│ │ │   CompareSpec (b1 = b2) (lt b1 b2) (lt b2 b1) (compare b1 b2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Equality

│ │ │ +

Equality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition eqb (b1 b2:bool) : bool :=
│ │ │   match b1, b2 with
│ │ │ @@ -219,15 +219,15 @@ │ │ │
│ │ │ Lemma eqb_false_iff : forall a b:bool, eqb a b = false <-> a <> b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A synonym of if on bool

│ │ │ +

A synonym of if on bool

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition ifb (b1 b2 b3:bool) : bool :=
│ │ │   match b1 with
│ │ │ @@ -238,30 +238,30 @@ │ │ │
│ │ │ Open Scope bool_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

De Morgan laws

│ │ │ +

De Morgan laws

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma negb_orb : forall b1 b2:bool, negb (b1 || b2) = negb b1 && negb b2.
│ │ │ │ │ │
│ │ │ Lemma negb_andb : forall b1 b2:bool, negb (b1 && b2) = negb b1 || negb b2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of negb

│ │ │ +

Properties of negb

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma negb_involutive : forall b:bool, negb (negb b) = b.
│ │ │ │ │ │ @@ -295,15 +295,15 @@ │ │ │
│ │ │ Lemma negb_false_iff : forall b, negb b = false <-> b = true.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of orb

│ │ │ +

Properties of orb

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma orb_true_iff :
│ │ │   forall b1 b2, b1 || b2 = true <-> b1 = true \/ b2 = true.
│ │ │ @@ -423,15 +423,15 @@ │ │ │ #[global]
│ │ │ Hint Resolve orb_comm orb_assoc: bool.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of andb

│ │ │ +

Properties of andb

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma andb_true_iff :
│ │ │   forall b1 b2:bool, b1 && b2 = true <-> b1 = true /\ b2 = true.
│ │ │ @@ -540,15 +540,15 @@ │ │ │ #[global]
│ │ │ Hint Resolve andb_comm andb_assoc: bool.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties mixing andb and orb

│ │ │ +

Properties mixing andb and orb

│ │ │ │ │ │
│ │ │ │ │ │ Distributivity │ │ │
│ │ │
│ │ │ │ │ │ @@ -590,15 +590,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of implb

│ │ │ +

Properties of implb

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma implb_true_iff : forall b1 b2:bool, implb b1 b2 = true <-> (b1 = true -> b2 = true).
│ │ │ │ │ │ @@ -644,15 +644,15 @@ │ │ │
│ │ │ Lemma implb_orb_distrib_l : forall b1 b2 b3:bool, implb (b1 || b2) b3 = implb b1 b3 && implb b2 b3.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of xorb

│ │ │ +

Properties of xorb

│ │ │ │ │ │
│ │ │ │ │ │ false is neutral for xorb │ │ │
│ │ │
│ │ │ │ │ │ @@ -806,15 +806,15 @@ │ │ │ #[global]
│ │ │ Hint Resolve trans_eq_bool : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Reflection of bool into Prop

│ │ │ +

Reflection of bool into Prop

│ │ │ │ │ │
│ │ │ │ │ │ Is_true and equality │ │ │
│ │ │
│ │ │ │ │ │ @@ -920,15 +920,15 @@ │ │ │  (if negb b then a else a') =
│ │ │  (if b then a' else a).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Alternative versions of andb and orb

│ │ │ +

Alternative versions of andb and orb

│ │ │ │ │ │ with lazy behavior (for vm_compute) │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Declare Scope lazy_bool_scope.
│ │ │ @@ -948,15 +948,15 @@ │ │ │
│ │ │ Lemma orb_lazy_alt : forall a b : bool, a || b = a ||| b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Reflect: a specialized inductive type for

│ │ │ +

Reflect: a specialized inductive type for

│ │ │ │ │ │ relating propositions and booleans, │ │ │ as popularized by the Ssreflect library. │ │ │
│ │ │
│ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Bool.BoolOrder.html │ │ │ @@ -62,15 +62,15 @@ │ │ │ Import BoolNotations.
│ │ │ Local Ltac Tauto.intuition_solver ::= auto with typeclass_instances relations.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order le

│ │ │ +

Order le

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma le_refl : forall b, b <= b.
│ │ │ │ │ │ @@ -88,15 +88,15 @@ │ │ │ #[global]
│ │ │ Instance le_compat : Proper (eq ==> eq ==> iff) Bool.le.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Strict order lt

│ │ │ +

Strict order lt

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma lt_irrefl : forall b, ~ b < b.
│ │ │ │ │ │ @@ -123,15 +123,15 @@ │ │ │
│ │ │ Lemma le_lteq : forall b1 b2, b1 <= b2 <-> b1 < b2 \/ b1 = b2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order structures

│ │ │ +

Order structures

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Instance le_preorder : PreOrder Bool.le.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CEquivalence.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based setoids. Definitions on Equivalence.

│ │ │ +

Typeclass-based setoids. Definitions on Equivalence.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CMorphisms.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based morphism definition and standard, minimal instances

│ │ │ +

Typeclass-based morphism definition and standard, minimal instances

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ │ │ │ │ @@ -74,15 +74,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Morphisms.

│ │ │ +

Morphisms.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We now turn to the definition of Proper and declare standard instances. │ │ │ These will be used by the setoid_rewrite tactic later. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.CRelationClasses.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based relations, tactics and standard instances

│ │ │ +

Typeclass-based relations, tactics and standard instances

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This is the basic theory needed to formalize morphisms and setoids. │ │ │ │ │ │
│ │ │ @@ -450,15 +450,15 @@ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ We can already dualize all these properties. │ │ │
│ │ │ │ │ │ -

Standard instances.

│ │ │ +

Standard instances.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac reduce_hyp H :=
│ │ │   match type of H with
│ │ │ @@ -603,15 +603,15 @@ │ │ │
│ │ │   Global Instance relation_implication_preorder : PreOrder (@subrelation A).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Partial Order.

│ │ │ +

Partial Order.

│ │ │ │ │ │ A partial order is a preorder which is additionally antisymmetric. │ │ │ We give an equivalent definition, up-to an equivalence crelation │ │ │ on the carrier. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.DecidableClass.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A typeclass to ease the handling of decidable properties.

│ │ │ +

A typeclass to ease the handling of decidable properties.

│ │ │ │ │ │
│ │ │ │ │ │ A proposition is decidable whenever it is reflected by a boolean. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.EquivDec.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidable equivalences.

│ │ │ +

Decidable equivalences.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Equivalence.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based setoids. Definitions on Equivalence.

│ │ │ +

Typeclass-based setoids. Definitions on Equivalence.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Init.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Initialization code for typeclasses, setting up the default tactic

│ │ │ +

Initialization code for typeclasses, setting up the default tactic

│ │ │ │ │ │ for instance search. │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based morphism definition and standard, minimal instances

│ │ │ +

Typeclass-based morphism definition and standard, minimal instances

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ │ │ │ │ @@ -70,15 +70,15 @@ │ │ │ Generalizable Variables A eqA B C D R RA RB RC m f x y.
│ │ │ Local Obligation Tactic := try solve [ simpl_relation ].
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Morphisms.

│ │ │ +

Morphisms.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We now turn to the definition of Proper and declare standard instances. │ │ │ These will be used by the setoid_rewrite tactic later. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Prop.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Proper instances for propositional connectives.

│ │ │ +

Proper instances for propositional connectives.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.Morphisms_Relations.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Morphism instances for relations.

│ │ │ +

Morphism instances for relations.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationClasses.html │ │ │ @@ -103,8003 +103,8003 @@ │ │ │ 00000660: 226c 6962 7469 746c 6522 3e4c 6962 7261 "libtitle">Libra │ │ │ 00000670: 7279 2043 6f71 2e43 6c61 7373 6573 2e52 ry Coq.Classes.R │ │ │ 00000680: 656c 6174 696f 6e43 6c61 7373 6573 3c2f elationClasses..
..
.< │ │ │ 000006b0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.

Typeclass-based │ │ │ -00000700: 2072 656c 6174 696f 6e73 2c20 7461 6374 relations, tact │ │ │ -00000710: 6963 7320 616e 6420 7374 616e 6461 7264 ics and standard │ │ │ -00000720: 2069 6e73 7461 6e63 6573 3c2f 6831 3e0a instances

. │ │ │ -00000730: 0a0a 3c64 6976 2063 6c61 7373 3d22 7061 ..
│ │ │ -00000750: 0a0a 2020 2054 6869 7320 6973 2074 6865 .. This is the │ │ │ -00000760: 2062 6173 6963 2074 6865 6f72 7920 6e65 basic theory ne │ │ │ -00000770: 6564 6564 2074 6f20 666f 726d 616c 697a eded to formaliz │ │ │ -00000780: 6520 6d6f 7270 6869 736d 7320 616e 6420 e morphisms and │ │ │ -00000790: 7365 746f 6964 732e 0a0a 3c64 6976 2063 setoids...
.. Aut │ │ │ -000007c0: 686f 723a 204d 6174 7468 6965 7520 536f hor: Matthieu So │ │ │ -000007d0: 7a65 6175 0a20 2020 496e 7374 6974 7574 zeau. Institut │ │ │ -000007e0: 696f 6e3a 204c 5249 2c20 434e 5253 2055 ion: LRI, CNRS U │ │ │ -000007f0: 4d52 2038 3632 3320 2d20 556e 6976 6572 MR 8623 - Univer │ │ │ -00000800: 7369 7479 2050 6172 6973 2053 7564 0a0a sity Paris Sud.. │ │ │ -00000810: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
..
│ │ │ -00000830: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Require │ │ │ -00000860: 203c 7370 616e 2063 6c61 7373 3d22 6964 Export │ │ │ -00000890: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -000008c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000008d0: 7469 746c 653d 226c 6962 7261 7279 223e title="library"> │ │ │ -000008e0: 436f 712e 436c 6173 7365 732e 496e 6974 Coq.Classes.Init │ │ │ -000008f0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.Require Import │ │ │ -00000960: 203c 6120 636c 6173 733d 2269 6472 6566 Coq.Program.B │ │ │ -000009c0: 6173 6963 733c 2f73 7061 6e3e 3c2f 613e asics │ │ │ -000009d0: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Require< │ │ │ -00000a00: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Import Coq.Pro │ │ │ -00000a90: 6772 616d 2e54 6163 7469 6373 3c2f 7370 gram.Tactics.
.R │ │ │ -00000ad0: 6571 7569 7265 3c2f 7370 616e 3e20 3c73 equire
I │ │ │ -00000b00: 6d70 6f72 743c 2f73 7061 6e3e 203c 6120 mport
C │ │ │ -00000b70: 6f71 2e52 656c 6174 696f 6e73 2e52 656c oq.Relations.Rel │ │ │ -00000b80: 6174 696f 6e5f 4465 6669 6e69 7469 6f6e ation_Definition │ │ │ -00000b90: 733c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 s.
..
.Gener │ │ │ -00000bd0: 616c 697a 6162 6c65 2056 6172 6961 626c alizable Variabl │ │ │ -00000be0: 6573 3c2f 7370 616e 3e20 3c73 7061 6e20 es A │ │ │ -00000c10: 3c73 7061 6e20 636c 6173 733d 2269 6422 B C D R │ │ │ -00000ca0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c S T U l │ │ │ -00000d40: 3c73 7061 6e20 636c 6173 733d 2269 6422 eqA │ │ │ -00000d60: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c eqB │ │ │ -00000d90: 3c73 7061 6e20 636c 6173 733d 2269 6422 eqC │ │ │ -00000db0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c eqD. │ │ │ -00000de0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.We allow │ │ │ -00000e10: 746f 2075 6e66 6f6c 6420 7468 6520 3c73 to unfold the relation defin │ │ │ -00000e70: 6974 696f 6e20 7768 696c 6520 646f 696e ition while doin │ │ │ -00000e80: 6720 6d6f 7270 6869 736d 2073 6561 7263 g morphism searc │ │ │ -00000e90: 682e 200a 3c2f 6469 763e 0a3c 6469 7620 h. .
.
..< │ │ │ -00000eb0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Section De │ │ │ -00000f30: 6673 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 fs..   │ │ │ -00000f50: 3c73 7061 6e20 636c 6173 733d 2269 6422 Context │ │ │ -00000f80: 7b3c 6120 6964 3d22 4465 6673 2e41 2220 {A │ │ │ -00000fd0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : T │ │ │ -00001000: 7970 653c 2f73 7061 6e3e 7d2e 3c62 722f ype}.
..
.
. │ │ │ -00001020: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.We rebind rel │ │ │ -00001040: 6174 696f 6e61 6c20 7072 6f70 6572 7469 ational properti │ │ │ -00001050: 6573 2069 6e20 7365 7061 7261 7465 2063 es in separate c │ │ │ -00001060: 6c61 7373 6573 2074 6f20 6265 2061 626c lasses to be abl │ │ │ -00001070: 6520 746f 206f 7665 726c 6f61 6420 6561 e to overload ea │ │ │ -00001080: 6368 2070 726f 6f66 2e20 0a3c 2f64 6976 ch proof. .
.
..
.&nbs │ │ │ -000010b0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Class Reflexive ( │ │ │ -00001180: 3c61 2069 643d 2252 3a32 2220 636c 6173 R : relation A │ │ │ -000012c0: 3c2f 613e 2920 3a3d 3c62 722f 3e0a 266e ) :=
.&n │ │ │ -000012d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000012e0: 266e 6273 703b 3c61 2069 643d 2272 6566  r │ │ │ -00001370: 6566 6c65 7869 7669 7479 3c2f 7370 616e eflexivity : < │ │ │ -00001390: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000013a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000013b0: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall x │ │ │ -00001410: 203a 203c 6120 636c 6173 733d 2269 6472 : A, │ │ │ -000014c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 R < │ │ │ -000014f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00001500: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00001510: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00001520: 732e 6874 6d6c 2378 3a34 223e 3c73 7061 s.html#x:4">x< │ │ │ -00001550: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x.
...   │ │ │ -000015e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition compl │ │ │ -00001670: 656d 656e 743c 2f73 7061 6e3e 3c2f 613e ement │ │ │ -00001680: 2028 3c61 2069 643d 2252 3a36 2220 636c (R │ │ │ -000016d0: 3c2f 613e 203a 203c 6120 636c 6173 733d : │ │ │ -00001720: 3c73 7061 6e20 636c 6173 733d 2269 6422 relation A) : relation< │ │ │ -00001840: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A := fu │ │ │ -000018e0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n < │ │ │ -00001910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00001920: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -00001930: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y = │ │ │ -00001990: 2667 743b 203c 6120 636c 6173 733d 2269 > R │ │ │ -00001a00: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00001a60: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y │ │ │ -00001b40: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00001b50: 203c 6120 636c 6173 733d 2269 6472 6566 False.
...
..
.Op │ │ │ -00001be0: 6171 7565 2066 6f72 2070 726f 6f66 2d73 aque for proof-s │ │ │ -00001bf0: 6561 7263 682e 200a 3c2f 6469 763e 0a3c earch. .
.< │ │ │ -00001c00: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -00001c10: 3e0a 266e 6273 703b 266e 6273 703b 3c73 >.  T │ │ │ -00001c40: 7970 6563 6c61 7373 6573 204f 7061 7175 ypeclasses Opaqu │ │ │ -00001c50: 653c 2f73 7061 6e3e 203c 7370 616e 2063 e complement │ │ │ -00001c80: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 0a3c .
..< │ │ │ -00001c90: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...T │ │ │ -00001cb0: 6865 7365 2061 7265 2063 6f6e 7665 7274 hese are convert │ │ │ -00001cc0: 6962 6c65 2e20 0a3c 2f64 6976 3e0a 3c64 ible. .
. │ │ │ -00001ce0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Le │ │ │ -00001d10: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma < │ │ │ -00001d60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00001d70: 7469 746c 653d 226c 656d 6d61 223e 636f title="lemma">co │ │ │ -00001d80: 6d70 6c65 6d65 6e74 5f69 6e76 6572 7365 mplement_inverse │ │ │ -00001d90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 R : │ │ │ -00001df0: 203c 6120 636c 6173 733d 2269 6472 6566 complem │ │ │ -00001e60: 656e 743c 2f73 7061 6e3e 3c2f 613e 2028 ent ( │ │ │ -00001e70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 flip R │ │ │ -00001f40: 3c2f 613e 2920 3c61 2063 6c61 7373 3d22 ) = flip< │ │ │ -00002020: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> ( │ │ │ -00002070: 3c73 7061 6e20 636c 6173 733d 2269 6422 complement R).
. .< │ │ │ -00002120: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00002130: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Class < │ │ │ -00002160: 6120 6964 3d22 4972 7265 666c 6578 6976 a id="Irreflexiv │ │ │ -00002170: 6522 2063 6c61 7373 3d22 6964 7265 6622 e" class="idref" │ │ │ -00002180: 2068 7265 663d 2223 4972 7265 666c 6578 href="#Irreflex │ │ │ -00002190: 6976 6522 3e3c 7370 616e 2063 6c61 7373 ive"> │ │ │ -000021c0: 3c73 7061 6e20 6964 3d22 4972 7265 666c Irreflexive
│ │ │ -00002200: 283c 6120 6964 3d22 523a 3130 2220 636c (R : relation
A) :=
│ │ │ -00002350: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00002360: 7370 3b26 6e62 7370 3b3c 6120 6964 3d22 sp; irreflex │ │ │ -00002400: 6976 6974 793c 2f73 7061 6e3e 3c2f 7370 ivity : Refl │ │ │ -00002480: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -00002490: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (comple │ │ │ -00002500: 6d65 6e74 3c2f 7370 616e 3e3c 2f61 3e20 ment │ │ │ -00002510: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -00002570: 523c 2f73 7061 6e3e 3c2f 613e 292e 3c62 R)...
.  │ │ │ -00002590: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Class
Symmetric (< │ │ │ -00002660: 6120 6964 3d22 523a 3133 2220 636c 6173 a id="R:13" clas │ │ │ -00002670: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00002680: 2352 3a31 3322 3e3c 7370 616e 2063 6c61 #R:13">R< │ │ │ -000026b0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : < │ │ │ -00002700: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00002710: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00002720: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A) :=
.& │ │ │ -000027b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000027c0: 3b26 6e62 7370 3b3c 6120 6964 3d22 7379 ; symmetry< │ │ │ -00002850: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span> : forall {x
y}, │ │ │ -00002940: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -000029a0: 523c 2f73 7061 6e3e 3c2f 613e 203c 6120 R x y -& │ │ │ -00002af0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00002b00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00002b10: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00002b20: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00002b30: 732e 6874 6d6c 2352 3a31 3322 3e3c 7370 s.html#R:13">R │ │ │ -00002b60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 y x.
..
.  < │ │ │ -00002c60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00002c70: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00002c80: 436c 6173 733c 2f73 7061 6e3e 203c 6120 Class Asy │ │ │ -00002d10: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric (R │ │ │ -00002d80: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : r │ │ │ -00002df0: 656c 6174 696f 6e3c 2f73 7061 6e3e 3c2f elation A) :=
.  │ │ │ -00002e80: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00002e90: 7370 3b3c 6120 6964 3d22 6173 796d 6d65 sp;asymmetry< │ │ │ -00002f20: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span> : forall {x
y}, │ │ │ -00003010: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -00003070: 523c 2f73 7061 6e3e 3c2f 613e 203c 6120 R x y -& │ │ │ -000031c0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -000031d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000031e0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000031f0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00003200: 732e 6874 6d6c 2352 3a31 3822 3e3c 7370 s.html#R:18">R │ │ │ -00003230: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 y x -&g │ │ │ -00003380: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ -000033c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 False< │ │ │ -000033f0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -00003400: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Cl │ │ │ -00003430: 6173 733c 2f73 7061 6e3e 203c 6120 6964 ass
< │ │ │ -00003470: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00003480: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ -00003490: 2c20 7265 636f 7264 223e 3c73 7061 6e20 , record">Trans │ │ │ -000034c0: 6974 6976 653c 2f73 7061 6e3e 3c2f 7370 itive (R : │ │ │ -00003530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rel │ │ │ -000035a0: 6174 696f 6e3c 2f73 7061 6e3e 3c2f 613e ation │ │ │ -000035b0: 203c 6120 636c 6173 733d 2269 6472 6566 A) │ │ │ -00003620: 203a 3d3c 6272 2f3e 0a26 6e62 7370 3b26 :=
. & │ │ │ -00003630: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00003640: 3b3c 6120 6964 3d22 7472 616e 7369 7469 ;tra │ │ │ -000036d0: 6e73 6974 6976 6974 793c 2f73 7061 6e3e nsitivity │ │ │ -000036e0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -00003710: 6f72 616c 6c3c 2f73 7061 6e3e 207b 3c61 orall {x y │ │ │ -000037f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00003810: 7a3c 2f73 7061 6e3e 3c2f 613e 7d2c 203c z}, < │ │ │ -00003820: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00003830: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00003840: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00003850: 732e 6874 6d6c 2352 3a32 3322 3e3c 7370 s.html#R:23">R │ │ │ -00003880: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 x y -&g │ │ │ -000039d0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; R< │ │ │ -00003a40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> y z │ │ │ -00003b20: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -00003b90: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; R x z< │ │ │ -00003ce0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -00003cf0: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Vario │ │ │ -00003d10: 7573 2063 6f6d 6269 6e61 7469 6f6e 7320 us combinations │ │ │ -00003d20: 6f66 2072 6566 6c65 7869 7669 7479 2c20 of reflexivity, │ │ │ -00003d30: 7379 6d6d 6574 7279 2061 6e64 2074 7261 symmetry and tra │ │ │ -00003d40: 6e73 6974 6976 6974 792e 200a 3c64 6976 nsitivity. .
.. A < │ │ │ -00003d70: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00003d80: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">PreOrder
is b │ │ │ -00003dc0: 6f74 6820 5265 666c 6578 6976 6520 616e oth Reflexive an │ │ │ -00003dd0: 6420 5472 616e 7369 7469 7665 2e20 0a3c d Transitive. .< │ │ │ -00003de0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ -00003e00: 266e 6273 703b 266e 6273 703b 3c73 7061   Cla │ │ │ -00003e30: 7373 3c2f 7370 616e 3e20 3c61 2069 643d ss
PreOrd │ │ │ -00003e90: 6572 3c2f 7370 616e 3e3c 2f61 3e20 283c er (< │ │ │ -00003ea0: 6120 6964 3d22 523a 3239 2220 636c 6173 a id="R:29" clas │ │ │ -00003eb0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00003ec0: 2352 3a32 3922 3e3c 7370 616e 2063 6c61 #R:29">R< │ │ │ -00003ef0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : < │ │ │ -00003f40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00003f50: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00003f60: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A) : Prop := {
. │ │ │ -00004020: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00004030: 703b 266e 6273 703b 235b 3c73 7061 6e20 p; #[global
] Pr │ │ │ -000040d0: 654f 7264 6572 5f52 6566 6c65 7869 7665 eOrder_Reflexive │ │ │ -000040e0: 3c2f 7370 616e 3e3c 2f61 3e20 3a3a 203c :: < │ │ │ -000040f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00004100: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00004110: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00004120: 732e 6874 6d6c 2352 6566 6c65 7869 7665 s.html#Reflexive │ │ │ -00004130: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Reflexive R | 2 ;
.&n │ │ │ -000041e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000041f0: 266e 6273 703b 235b 3c73 7061 6e20 636c  #[global]
Pr │ │ │ -00004290: 654f 7264 6572 5f54 7261 6e73 6974 6976 eOrder_Transitiv │ │ │ -000042a0: 653c 2f73 7061 6e3e 3c2f 613e 203a 3a20 e :: │ │ │ -000042b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Transitive
R | 2 }.
..
.
. │ │ │ -000043b0: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.A Stric │ │ │ -00004400: 744f 7264 6572 3c2f 7370 616e 3e3c 2f73 tOrder is both Irr │ │ │ -00004420: 6566 6c65 7869 7665 2061 6e64 2054 7261 eflexive and Tra │ │ │ -00004430: 6e73 6974 6976 652e 200a 3c2f 6469 763e nsitive. .
│ │ │ -00004440: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.  │ │ │ -00004460: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Class Stric │ │ │ -000044f0: 744f 7264 6572 3c2f 7370 616e 3e3c 2f61 tOrder (R : relation< │ │ │ -000045d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A) : Pr │ │ │ -00004670: 6f70 3c2f 7370 616e 3e20 3a3d 207b 3c62 op := {.   │ │ │ -00004690: 266e 6273 703b 266e 6273 703b 235b 3c73   #[globa │ │ │ -000046c0: 6c3c 2f73 7061 6e3e 5d20 3c61 2069 643d l] Stri │ │ │ -00004740: 6374 4f72 6465 725f 4972 7265 666c 6578 ctOrder_Irreflex │ │ │ -00004750: 6976 653c 2f73 7061 6e3e 3c2f 613e 203a ive : │ │ │ -00004760: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Irreflexiv │ │ │ -000047d0: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e R ;
│ │ │ -00004850: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00004860: 7370 3b26 6e62 7370 3b23 5b3c 7370 616e sp; #[global] StrictOrd │ │ │ -00004910: 6572 5f54 7261 6e73 6974 6976 653c 2f73 er_Transitive
:: │ │ │ -00004970: 3c73 7061 6e20 636c 6173 733d 2269 6422 T │ │ │ -00004990: 7261 6e73 6974 6976 653c 2f73 7061 6e3e ransitive │ │ │ -000049a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 R }.
..
│ │ │ -00004a20: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.By de │ │ │ -00004a40: 6669 6e69 7469 6f6e 2c20 6120 7374 7269 finition, a stri │ │ │ -00004a50: 6374 206f 7264 6572 2069 7320 616c 736f ct order is also │ │ │ -00004a60: 2061 7379 6d6d 6574 7269 6320 0a3c 2f64 asymmetric ..
. &nb │ │ │ -00004a90: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Global Insta │ │ │ -00004ac0: 6e63 653c 2f73 7061 6e3e 203c 6120 6964 nce StrictO │ │ │ -00004b40: 7264 6572 5f41 7379 6d6d 6574 7269 633c rder_Asymmetric< │ │ │ -00004b50: 2f73 7061 6e3e 3c2f 613e 2060 283c 6120 /span> `(StrictOrder │ │ │ -00004bb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 R │ │ │ -00004c20: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f ) : Asymmet │ │ │ -00004ca0: 7269 633c 2f73 7061 6e3e 3c2f 613e 203c ric < │ │ │ -00004cb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00004cc0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00004cd0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00004ce0: 732e 6874 6d6c 2352 3a33 3722 3e3c 7370 s.html#R:37">R │ │ │ -00004d10: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
. .
.
│ │ │ -00004d30: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.A partial eq │ │ │ -00004d50: 7569 7661 6c65 6e63 6520 7265 6c61 7469 uivalence relati │ │ │ -00004d60: 6f6e 2069 7320 5379 6d6d 6574 7269 6320 on is Symmetric │ │ │ -00004d70: 616e 6420 5472 616e 7369 7469 7665 2e20 and Transitive. │ │ │ -00004d80: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
..
.  C │ │ │ -00004dd0: 6c61 7373 3c2f 7370 616e 3e20 3c61 2069 lass PER │ │ │ -00004e30: 2028 3c61 2069 643d 2252 3a33 3922 2063 (R : relation A) : Pro │ │ │ -00004fa0: 703c 2f73 7061 6e3e 203a 3d20 7b3c 6272 p := {
.  & │ │ │ -00004fc0: 6e62 7370 3b26 6e62 7370 3b23 5b3c 7370 nbsp; #[global │ │ │ -00004ff0: 3c2f 7370 616e 3e5d 203c 6120 6964 3d22 ] PER_Symme │ │ │ -00005060: 7472 6963 3c2f 7370 616e 3e3c 2f61 3e20 tric │ │ │ -00005070: 3a3a 203c 6120 636c 6173 733d 2269 6472 :: Symmetric R
| 3 ;
.  &n │ │ │ -00005170: 6273 703b 266e 6273 703b 235b 3c73 7061 bsp; #[global< │ │ │ -000051a0: 2f73 7061 6e3e 5d20 3c61 2069 643d 2250 /span>] PER_Tran │ │ │ -00005210: 7369 7469 7665 3c2f 7370 616e 3e3c 2f61 sitive :: Transiti │ │ │ -00005290: 7665 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ve R< │ │ │ -00005300: 2f73 7061 6e3e 3c2f 613e 207c 2033 207d /span> | 3 } │ │ │ -00005310: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.Equivale │ │ │ -00005340: 6e63 6520 7265 6c61 7469 6f6e 732e 200a nce relations. . │ │ │ -00005350: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
..
│ │ │ -00005370: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Cl │ │ │ -000053a0: 6173 733c 2f73 7061 6e3e 203c 6120 6964 ass Equivalence (R : │ │ │ -00005470: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rel │ │ │ -000054e0: 6174 696f 6e3c 2f73 7061 6e3e 3c2f 613e ation │ │ │ -000054f0: 203c 6120 636c 6173 733d 2269 6472 6566 A) │ │ │ -00005560: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop │ │ │ -00005590: 3a3d 207b 3c62 722f 3e0a 266e 6273 703b := {
.  │ │ │ -000055a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000055b0: 703b 235b 3c73 7061 6e20 636c 6173 733d p;#[global] │ │ │ -000055e0: 3c61 2069 643d 2245 7175 6976 616c 656e Eq │ │ │ -00005650: 7569 7661 6c65 6e63 655f 5265 666c 6578 uivalence_Reflex │ │ │ -00005660: 6976 653c 2f73 7061 6e3e 3c2f 613e 203a ive : │ │ │ -00005670: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Reflexive R ;
.&nb │ │ │ -00005760: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00005770: 6e62 7370 3b23 5b3c 7370 616e 2063 6c61 nbsp;#[global] Equivalence_Sym │ │ │ -00005820: 6d65 7472 6963 3c2f 7370 616e 3e3c 2f61 metric :: Symmetric │ │ │ -000058a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 R ;
. │ │ │ -00005920: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00005930: 703b 266e 6273 703b 235b 3c73 7061 6e20 p; #[global] Equivalenc │ │ │ -000059e0: 655f 5472 616e 7369 7469 7665 3c2f 7370 e_Transitive :: < │ │ │ -00005a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00005a50: 7469 746c 653d 2263 6c61 7373 223e 5472 title="class">Tr │ │ │ -00005a60: 616e 7369 7469 7665 3c2f 7370 616e 3e3c ansitive< │ │ │ -00005a70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R │ │ │ -00005ae0: 207d 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a }.
..
. │ │ │ -00005af0: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.An Equ │ │ │ -00005b10: 6976 616c 656e 6365 2069 7320 6120 5045 ivalence is a PE │ │ │ -00005b20: 5220 706c 7573 2072 6566 6c65 7869 7669 R plus reflexivi │ │ │ -00005b30: 7479 2e20 0a3c 2f64 6976 3e0a 3c64 6976 ty. .
.
.. │ │ │ -00005b50: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00005b60: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Global Instan │ │ │ -00005b90: 6365 3c2f 7370 616e 3e20 3c61 2069 643d ce Equiva │ │ │ -00005c00: 6c65 6e63 655f 5045 523c 2f73 7061 6e3e lence_PER │ │ │ -00005c10: 3c2f 613e 207b 3c61 2069 643d 2252 3a34 {R< │ │ │ -00005c60: 2f73 7061 6e3e 3c2f 613e 7d20 6028 3c61 /span>} `(E:Equivalen │ │ │ -00005d30: 6365 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ce R< │ │ │ -00005da0: 2f73 7061 6e3e 3c2f 613e 2920 3a20 3c61 /span>) : PER R | 10 :=
.  & │ │ │ -00005ea0: 6e62 7370 3b26 6e62 7370 3b7b 207d 2e3c nbsp; { }.< │ │ │ -00005eb0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.An Equival │ │ │ -00005ee0: 656e 6365 2069 7320 6120 5072 654f 7264 ence is a PreOrd │ │ │ -00005ef0: 6572 2070 6c75 7320 7379 6d6d 6574 7279 er plus symmetry │ │ │ -00005f00: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...   │ │ │ -00005f30: 3c73 7061 6e20 636c 6173 733d 2269 6422 Global Instance │ │ │ -00005f60: 3c2f 7370 616e 3e20 3c61 2069 643d 2245 │ │ │ -00005fb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Equivalence_Pr │ │ │ -00005fe0: 654f 7264 6572 3c2f 7370 616e 3e3c 2f61 eOrder {R} `(E: │ │ │ -000060a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Equivalence< │ │ │ -00006110: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> R) : PreO │ │ │ -000061f0: 7264 6572 3c2f 7370 616e 3e3c 2f61 3e20 rder │ │ │ -00006200: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -00006260: 523c 2f73 7061 6e3e 3c2f 613e 207c 2031 R | 1 │ │ │ -00006270: 3020 3a3d 3c62 722f 3e0a 266e 6273 703b 0 :=
.  │ │ │ -00006280: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00006290: 703b 7b20 7d2e 3c62 722f 3e0a 0a3c 6272 p;{ }.
..
.
..
.We │ │ │ -000062c0: 6361 6e20 6e6f 7720 6465 6669 6e65 2061 can now define a │ │ │ -000062d0: 6e74 6973 796d 6d65 7472 7920 772e 722e ntisymmetry w.r. │ │ │ -000062e0: 742e 2061 6e20 6571 7569 7661 6c65 6e63 t. an equivalenc │ │ │ -000062f0: 6520 7265 6c61 7469 6f6e 206f 6e20 7468 e relation on th │ │ │ -00006300: 6520 6361 7272 6965 722e 200a 3c2f 6469 e carrier. ..
..
.&nb │ │ │ -00006330: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Class< │ │ │ -00006360: 2f73 7061 6e3e 203c 6120 6964 3d22 416e /span> │ │ │ -000063f0: 416e 7469 7379 6d6d 6574 7269 633c 2f73 Antisymmetric
│ │ │ -00006410: 3c61 2069 643d 2265 7141 3a35 3222 2063 eqA< │ │ │ -00006460: 2f73 7061 6e3e 3c2f 613e 2060 7b3c 6120 /span> `{equ : < │ │ │ -00006510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00006520: 7469 746c 653d 2263 6c61 7373 223e 4571 title="class">Eq │ │ │ -00006530: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ -00006540: 3c2f 613e 203c 6120 636c 6173 733d 2269 eqA} ( │ │ │ -000065e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00006600: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ -00006610: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006620: 6872 6566 3d22 436f 712e 5265 6c61 7469 href="Coq.Relati │ │ │ -00006630: 6f6e 732e 5265 6c61 7469 6f6e 5f44 6566 ons.Relation_Def │ │ │ -00006640: 696e 6974 696f 6e73 2e68 746d 6c23 7265 initions.html#re │ │ │ -00006650: 6c61 7469 6f6e 223e 3c73 7061 6e20 636c lation">rela │ │ │ -00006680: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 tion │ │ │ -00006690: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -000066d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ -00006700: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -00006710: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00006720: 3c61 2069 643d 2261 6e74 6973 796d 6d65 anti │ │ │ -000067b0: 7379 6d6d 6574 7279 3c2f 7370 616e 3e3c symmetry< │ │ │ -000067c0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ -000067f0: 7261 6c6c 3c2f 7370 616e 3e20 7b3c 6120 rall {x y}, R x y │ │ │ -000069f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> R │ │ │ -00006ad0: 3c2f 613e 203c 6120 636c 6173 733d 2269 y │ │ │ -00006b80: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ -00006bb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006bc0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006bd0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00006be0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00006bf0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> eqA x │ │ │ -00006d00: 3c2f 613e 203c 6120 636c 6173 733d 2269 y.
..
.& │ │ │ -00006d80: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Clas │ │ │ -00006db0: 733c 2f73 7061 6e3e 203c 6120 6964 3d22 s < │ │ │ -00006df0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00006e00: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ -00006e10: 2c20 7265 636f 7264 223e 3c73 7061 6e20 , record">subr │ │ │ -00006e40: 656c 6174 696f 6e3c 2f73 7061 6e3e 3c2f elation (R │ │ │ -00006eb0: 3c61 2069 643d 2252 273a 3630 2220 636c R' : relation< │ │ │ -00006f80: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A) : Pr │ │ │ -00007020: 6f70 3c2f 7370 616e 3e20 3a3d 3c62 722f op
:=
.  &n │ │ │ -00007040: 6273 703b 266e 6273 703b 3c61 2069 643d bsp; is_s │ │ │ -000070e0: 7562 7265 6c61 7469 6f6e 3c2f 7370 616e ubrelation : < │ │ │ -00007100: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00007110: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00007120: 666f 7261 6c6c 3c2f 7370 616e 3e20 7b3c forall {< │ │ │ -00007130: 6120 6964 3d22 783a 3632 2220 636c 6173 a id="x:62" clas │ │ │ -00007140: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00007150: 2378 3a36 3222 3e3c 7370 616e 2063 6c61 #x:62">x< │ │ │ -00007180: 2f61 3e20 3c61 2069 643d 2279 3a36 3322 /a> y}, R x │ │ │ -000072b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 y -> R' x y.
..
. │ │ │ -000074f0: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Any sy │ │ │ -00007510: 6d6d 6574 7269 6320 7265 6c61 7469 6f6e mmetric relation │ │ │ -00007520: 2069 7320 6571 7561 6c20 746f 2069 7473 is equal to its │ │ │ -00007530: 2069 6e76 6572 7365 2e20 0a3c 2f64 6976 inverse. .
.
..
.&nbs │ │ │ -00007560: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Lemma
│ │ │ -000075e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 s │ │ │ -00007600: 7562 7265 6c61 7469 6f6e 5f73 796d 6d65 ubrelation_symme │ │ │ -00007610: 7472 6963 3c2f 7370 616e 3e3c 2f61 3e20 tric │ │ │ -00007620: 3c61 2069 643d 2252 3a36 3522 2063 6c61 R │ │ │ -00007670: 3c2f 613e 2060 283c 6120 6964 3d22 483a `(< │ │ │ -000076a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000076b0: 7469 746c 653d 2262 696e 6465 7222 3e53 title="binder">S │ │ │ -000076c0: 796d 6d65 7472 6963 3c2f 7370 616e 3e3c ymmetric< │ │ │ -000076d0: 2f61 3e20 3c61 2069 643d 2248 3a36 3622 /a> R) : │ │ │ -00007790: 7375 6272 656c 6174 696f 6e3c 2f73 7061 subrelation (flip │ │ │ -00007810: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ -00007850: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00007860: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00007870: 3e52 3c2f 7370 616e 3e3c 2f61 3e29 203c >R) < │ │ │ -00007880: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00007890: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000078a0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -000078b0: 732e 6874 6d6c 2352 3a36 3522 3e3c 7370 s.html#R:65">R │ │ │ -000078e0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
. .
.  │ │ │ -00007900: 266e 6273 703b 3c73 7061 6e20 636c 6173  Section flip.
.. │ │ │ -000079a0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -000079b0: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  L │ │ │ -000079e0: 656d 6d61 3c2f 7370 616e 3e20 3c61 2069 emma
flip_Refl │ │ │ -00007a50: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -00007a60: 2060 7b3c 6120 6964 3d22 483a 3638 2220 `{Refle │ │ │ -00007ab0: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ -00007ac0: 3c61 2069 643d 2252 3a36 3722 2063 6c61 R} : Refl │ │ │ -00007ba0: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -00007bb0: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (flip< │ │ │ -00007c10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> R
).
. │ │ │ -00007c90: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -00007ca0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ -00007cb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00007cc0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00007cd0: 5072 6f67 7261 6d20 4465 6669 6e69 7469 Program Definiti │ │ │ -00007ce0: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on fl │ │ │ -00007d50: 6970 5f49 7272 6566 6c65 7869 7665 3c2f ip_Irreflexive `(Irreflexive< │ │ │ -00007dc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R< │ │ │ -00007e30: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span>) : Irrefle │ │ │ -00007eb0: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ -00007ec0: 283c 6120 636c 6173 733d 2269 6472 6566 (flip R) :=
. │ │ │ -00007fa0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00007fb0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00007fc0: 6273 703b 3c61 2063 6c61 7373 3d22 6964 bsp;i │ │ │ -00008030: 7272 6566 6c65 7869 7669 7479 3c2f 7370 rreflexivity (R:= │ │ │ -00008070: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -000080d0: 523c 2f73 7061 6e3e 3c2f 613e 292e 3c62 R)...
.  │ │ │ -000080f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00008100: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Program Defi │ │ │ -00008130: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition fl │ │ │ -000081a0: 6970 5f53 796d 6d65 7472 6963 3c2f 7370 ip_Symmetric `(Symmetric < │ │ │ -00008240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008250: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -00008260: 7370 616e 2069 643d 2248 3a37 3222 2063 span id="H:72" c │ │ │ -00008270: 6c61 7373 3d22 6964 223e 523c 2f73 7061 lass="id">R) : │ │ │ -00008290: 203c 6120 636c 6173 733d 2269 6472 6566 Symmetric (flip │ │ │ -000083b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 R) │ │ │ -000083e0: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -000083f0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00008400: 266e 6273 703b 266e 6273 703b 3c73 7061   fun │ │ │ -00008430: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 │ │ │ -00008460: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00008480: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y H => < │ │ │ -00008580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008590: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000085a0: 6e22 3e73 796d 6d65 7472 793c 2f73 7061 n">symmetry (R:=< │ │ │ -000085e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000085f0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00008600: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00008610: 732e 6874 6d6c 2352 3a37 3122 3e3c 7370 s.html#R:71">R │ │ │ -00008640: 3c2f 7370 616e 3e3c 2f61 3e29 203c 6120 ) H.
. │ │ │ -000086c0: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -000086d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ -000086e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000086f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00008700: 5072 6f67 7261 6d20 4465 6669 6e69 7469 Program Definiti │ │ │ -00008710: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on flip │ │ │ -00008780: 5f41 7379 6d6d 6574 7269 633c 2f73 7061 _Asymmetric `(Asymmetric < │ │ │ -00008820: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008830: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -00008840: 7370 616e 2069 643d 2248 3a37 3722 2063 span id="H:77" c │ │ │ -00008850: 6c61 7373 3d22 6964 223e 523c 2f73 7061 lass="id">R) : │ │ │ -00008870: 203c 6120 636c 6173 733d 2269 6472 6566 Asymmetric ( │ │ │ -00008920: 3c73 7061 6e20 636c 6173 733d 2269 6422 flip< │ │ │ -00008950: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R │ │ │ -000089c0: 2920 3a3d 3c62 722f 3e0a 266e 6273 703b ) :=
.  │ │ │ -000089d0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000089e0: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  f │ │ │ -00008a10: 756e 3c2f 7370 616e 3e20 3c61 2069 643d un x < │ │ │ -00008a70: 6120 6964 3d22 793a 3739 2220 636c 6173 a id="y:79" clas │ │ │ -00008a80: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00008a90: 2379 3a37 3922 3e3c 7370 616e 2063 6c61 #y:79">y< │ │ │ -00008ac0: 2f61 3e20 3c61 2069 643d 2248 3a38 3022 /a> H H' │ │ │ -00008b70: 203d 2667 743b 203c 6120 636c 6173 733d => as │ │ │ -00008be0: 796d 6d65 7472 793c 2f73 7061 6e3e 3c2f ymmetry (R:=R
) H H' │ │ │ -00008d60: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.  &n │ │ │ -00008d80: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Progr │ │ │ -00008db0: 616d 2044 6566 696e 6974 696f 6e3c 2f73 am Definition
flip_Tran │ │ │ -00008e30: 7369 7469 7665 3c2f 7370 616e 3e3c 2f61 sitive `(Tran │ │ │ -00008e90: 7369 7469 7665 3c2f 7370 616e 3e3c 2f61 sitive R
) : │ │ │ -00008f60: 3c73 7061 6e20 636c 6173 733d 2269 6422 T │ │ │ -00008f80: 7261 6e73 6974 6976 653c 2f73 7061 6e3e ransitive │ │ │ -00008f90: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ -00008ff0: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ -00009000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00009010: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00009020: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00009030: 732e 6874 6d6c 2352 3a38 3222 3e3c 7370 s.html#R:82">R │ │ │ -00009060: 3c2f 7370 616e 3e3c 2f61 3e29 203a 3d3c ) :=< │ │ │ -00009070: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00009080: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00009090: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; fun
x y < │ │ │ -00009170: 6120 6964 3d22 7a3a 3836 2220 636c 6173 a id="z:86" clas │ │ │ -00009180: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00009190: 237a 3a38 3622 3e3c 7370 616e 2063 6c61 #z:86">z< │ │ │ -000091c0: 2f61 3e20 3c61 2069 643d 2248 3a38 3722 /a> H H' │ │ │ -00009270: 203d 2667 743b 203c 6120 636c 6173 733d => transitivity (R: │ │ │ -00009320: 3d3c 6120 636c 6173 733d 2269 6472 6566 =< │ │ │ -00009360: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00009370: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00009380: 3e52 3c2f 7370 616e 3e3c 2f61 3e29 203c >R) < │ │ │ -00009390: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000093a0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000093b0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -000093c0: 732e 6874 6d6c 2348 273a 3838 223e 3c73 s.html#H':88"> │ │ │ -000093f0: 4827 3c2f 7370 616e 3e3c 2f61 3e20 3c61 H' H< │ │ │ -00009460: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00009470: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -00009480: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00009490: 3c73 7061 6e20 636c 6173 733d 2269 6422 Program Definit │ │ │ -000094c0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion < │ │ │ -00009510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00009520: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00009530: 6e22 3e66 6c69 705f 416e 7469 7379 6d6d n">flip_Antisymm │ │ │ -00009540: 6574 7269 633c 2f73 7061 6e3e 3c2f 613e etric │ │ │ -00009550: 2060 283c 6120 6964 3d22 483a 3932 2220 `(Antis │ │ │ -000095a0: 796d 6d65 7472 6963 3c2f 7370 616e 3e3c ymmetric< │ │ │ -000095b0: 2f61 3e20 3c61 2069 643d 2265 7141 3a38 /a> │ │ │ -000095e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00009600: 3c73 7061 6e20 6964 3d22 483a 3932 2220 eqA │ │ │ -00009630: 203c 6120 6964 3d22 523a 3931 2220 636c R) :
. │ │ │ -000096b0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000096c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000096d0: 6273 703b 3c61 2063 6c61 7373 3d22 6964 bsp;Antisy │ │ │ -00009740: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric eqA< │ │ │ -000097c0: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (fl │ │ │ -00009820: 6970 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ip R< │ │ │ -00009890: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
. .
.
│ │ │ -000098b0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Inversing th │ │ │ -000098d0: 6520 6c61 7267 6572 2073 7472 7563 7475 e larger structu │ │ │ -000098e0: 7265 7320 0a3c 2f64 6976 3e0a 3c64 6976 res .
.
.. │ │ │ -00009900: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00009910: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  L │ │ │ -00009940: 656d 6d61 3c2f 7370 616e 3e20 3c61 2069 emma flip_PreOrd │ │ │ -000099b0: 6572 3c2f 7370 616e 3e3c 2f61 3e20 6028 er `( │ │ │ -000099c0: 3c61 2069 643d 2248 3a39 3422 2063 6c61 PreOrder │ │ │ -00009a10: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 R │ │ │ -00009a80: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f ) : PreOrder< │ │ │ -00009b00: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (flip │ │ │ -00009b70: 3c2f 613e 203c 6120 636c 6173 733d 2269 R).
. .
│ │ │ -00009bf0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00009c00: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Lemma< │ │ │ -00009c30: 2f73 7061 6e3e 203c 6120 6964 3d22 666c /span> flip_Stric │ │ │ -00009ca0: 744f 7264 6572 3c2f 7370 616e 3e3c 2f61 tOrder `(Stri │ │ │ -00009d00: 6374 4f72 6465 723c 2f73 7061 6e3e 3c2f ctOrder R) : StrictOrder (flip │ │ │ -00009eb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 R). │ │ │ -00009ee0: 3c62 722f 3e0a 200a 3c62 722f 3e0a 266e
. .
.&n │ │ │ -00009ef0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00009f00: 266e 6273 703b 3c73 7061 6e20 636c 6173  Lemma flip_PER `(PER │ │ │ -00009ff0: 3c61 2069 643d 2252 3a39 3722 2063 6c61 R) : PER │ │ │ -0000a0d0: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ -0000a130: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ -0000a140: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000a150: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000a160: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000a170: 732e 6874 6d6c 2352 3a39 3722 3e3c 7370 s.html#R:97">R │ │ │ -0000a1a0: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
. .
.  │ │ │ -0000a1c0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0000a1d0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Lemma │ │ │ -0000a200: 203c 6120 6964 3d22 666c 6970 5f45 7175 │ │ │ -0000a260: 666c 6970 5f45 7175 6976 616c 656e 6365 flip_Equivalence │ │ │ -0000a270: 3c2f 7370 616e 3e3c 2f61 3e20 6028 3c61 `(Equivale │ │ │ -0000a2d0: 6e63 653c 2f73 7061 6e3e 3c2f 613e 203c nce < │ │ │ -0000a2e0: 6120 6964 3d22 523a 3939 2220 636c 6173 a id="R:99" clas │ │ │ -0000a2f0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -0000a300: 2352 3a39 3922 3e3c 7370 616e 2063 6c61 #R:99">R) : < │ │ │ -0000a3a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000a3b0: 7469 746c 653d 2263 6c61 7373 223e 4571 title="class">Eq │ │ │ -0000a3c0: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ -0000a3d0: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ -0000a430: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ -0000a440: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000a450: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000a460: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000a470: 732e 6874 6d6c 2352 3a39 3922 3e3c 7370 s.html#R:99">R │ │ │ -0000a4a0: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
. .
.  │ │ │ -0000a4c0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; End flip.
...   │ │ │ -0000a580: 3c73 7061 6e20 636c 6173 733d 2269 6422 Section │ │ │ -0000a5b0: 3c61 2069 643d 2244 6566 732e 636f 6d70 c │ │ │ -0000a610: 6f6d 706c 656d 656e 743c 2f73 7061 6e3e omplement
│ │ │ -0000a620: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.  &n │ │ │ -0000a640: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -0000a670: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition com │ │ │ -0000a6f0: 706c 656d 656e 745f 4972 7265 666c 6578 plement_Irreflex │ │ │ -0000a700: 6976 653c 2f73 7061 6e3e 3c2f 613e 2060 ive ` │ │ │ -0000a710: 283c 6120 6964 3d22 483a 3130 3222 2063 (Refle │ │ │ -0000a760: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ -0000a770: 3c61 2069 643d 2252 3a31 3031 2220 636c R)
. │ │ │ -0000a7f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0000a800: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0000a810: 6273 703b 3a20 3c61 2063 6c61 7373 3d22 bsp;: Irrefl │ │ │ -0000a880: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -0000a890: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (comple │ │ │ -0000a900: 6d65 6e74 3c2f 7370 616e 3e3c 2f61 3e20 ment │ │ │ -0000a910: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -0000a950: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000a960: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0000a970: 3e52 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >R).< │ │ │ -0000a980: 6272 2f3e 0a20 0a3c 6272 2f3e 0a26 6e62 br/>. .
.&nb │ │ │ -0000a990: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0000a9a0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -0000a9d0: 3c2f 7370 616e 3e20 3c61 2069 643d 2263 │ │ │ -0000aa20: 3c73 7061 6e20 636c 6173 733d 2269 6422 complement_S │ │ │ -0000aa50: 796d 6d65 7472 6963 3c2f 7370 616e 3e3c ymmetric< │ │ │ -0000aa60: 2f61 3e20 6028 3c61 2069 643d 2248 3a31 /a> `( │ │ │ -0000aa90: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0000aab0: 5379 6d6d 6574 7269 633c 2f73 7061 6e3e Symmetric │ │ │ -0000aac0: 3c2f 613e 203c 6120 6964 3d22 523a 3130 < │ │ │ -0000aaf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000ab00: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -0000ab10: 7370 616e 2069 643d 2248 3a31 3034 2220 span id="H:104" │ │ │ -0000ab20: 636c 6173 733d 2269 6422 3e52 3c2f 7370 class="id">R
) │ │ │ -0000ab40: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Symmetric (complement R).
. &n │ │ │ -0000acb0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; End < │ │ │ -0000ad30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000ad40: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ -0000ad50: 636f 6d70 6c65 6d65 6e74 3c2f 7370 616e complement.
..
.
..
.Rew │ │ │ -0000ad90: 7269 7465 2072 656c 6174 696f 6e20 6f6e rite relation on │ │ │ -0000ada0: 2061 2067 6976 656e 2073 7570 706f 7274 a given support │ │ │ -0000adb0: 3a20 6465 636c 6172 6573 2061 2072 656c : declares a rel │ │ │ -0000adc0: 6174 696f 6e20 6173 2061 2072 6577 7269 ation as a rewri │ │ │ -0000add0: 7465 0a20 2020 7265 6c61 7469 6f6e 2066 te. relation f │ │ │ -0000ade0: 6f72 2075 7365 2062 7920 7468 6520 6765 or use by the ge │ │ │ -0000adf0: 6e65 7261 6c69 7a65 6420 7265 7772 6974 neralized rewrit │ │ │ -0000ae00: 696e 6720 7461 6374 6963 2e0a 2020 2049 ing tactic.. I │ │ │ -0000ae10: 7420 6865 6c70 7320 6368 6f6f 7369 6e67 t helps choosing │ │ │ -0000ae20: 2069 6620 6120 7265 7772 6974 6520 7368 if a rewrite sh │ │ │ -0000ae30: 6f75 6c64 2062 6520 6861 6e64 6c65 640a ould be handled. │ │ │ -0000ae40: 2020 2062 7920 7468 6520 6765 6e65 7261 by the genera │ │ │ -0000ae50: 6c69 7a65 6420 6f72 2074 6865 2072 6567 lized or the reg │ │ │ -0000ae60: 756c 6172 2072 6577 7269 7469 6e67 2074 ular rewriting t │ │ │ -0000ae70: 6163 7469 6320 7573 696e 6720 6c65 6962 actic using leib │ │ │ -0000ae80: 6e69 7a20 6571 7561 6c69 7479 2e0a 2020 niz equality.. │ │ │ -0000ae90: 2055 7365 7273 2063 616e 2064 6563 6c61 Users can decla │ │ │ -0000aea0: 7265 2061 6e20 3c73 7061 6e20 636c 6173 re an < │ │ │ -0000aec0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000aed0: 7469 746c 653d 2276 6172 223e 5265 7772 title="var">Rewr │ │ │ -0000aee0: 6974 6552 656c 6174 696f 6e3c 2f73 7061 iteRelation │ │ │ -0000af30: 413c 2f73 7061 6e3e 3c2f 7370 616e 3e20 A │ │ │ -0000af40: 3c73 7061 6e20 636c 6173 733d 2269 6e6c RA< │ │ │ -0000af80: 2f73 7061 6e3e 2061 6e79 7768 6572 6520 /span> anywhere │ │ │ -0000af90: 746f 2064 6563 6c61 7265 2064 6566 6175 to declare defau │ │ │ -0000afa0: 6c74 0a20 2020 7265 6c61 7469 6f6e 7320 lt. relations │ │ │ -0000afb0: 6f6e 2061 2067 6976 656e 2074 7970 6520 on a given type │ │ │ -0000afc0: 6041 602e 2054 6869 7320 6973 2061 6c73 `A`. This is als │ │ │ -0000afd0: 6f20 646f 6e65 2061 7574 6f6d 6174 6963 o done automatic │ │ │ -0000afe0: 616c 6c79 2062 790a 2020 2074 6865 203c ally by. the < │ │ │ -0000aff0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -0000b000: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">Declare Relation │ │ │ -0000b080: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c A< │ │ │ -0000b0c0: 2f73 7061 6e3e 3c2f 7370 616e 3e20 3c73 /span> RA commands. I │ │ │ -0000b120: 7420 6861 7320 6e6f 206d 6f64 6520 6465 t has no mode de │ │ │ -0000b130: 636c 6172 6174 696f 6e3a 0a20 2020 6974 claration:. it │ │ │ -0000b140: 2077 696c 6c20 6173 7369 676e 2060 3f41 will assign `?A │ │ │ -0000b150: 203a 3d20 5072 6f70 2c20 3f52 203a 3d20 := Prop, ?R := │ │ │ -0000b160: 6966 6660 206f 6e20 616e 2065 6e74 6972 iff` on an entir │ │ │ -0000b170: 656c 7920 756e 7370 6563 6966 6965 6420 ely unspecified │ │ │ -0000b180: 7175 6572 790a 2020 2060 5265 7772 6974 query. `Rewrit │ │ │ -0000b190: 6552 656c 6174 696f 6e20 3f41 203f 5260 eRelation ?A ?R` │ │ │ -0000b1a0: 2c20 6f72 2061 6e79 2070 7265 6665 7265 , or any prefere │ │ │ -0000b1b0: 6420 7265 7772 6974 6520 7265 6c61 7469 d rewrite relati │ │ │ -0000b1c0: 6f6e 206f 6620 7072 696f 7269 7479 2026 on of priority & │ │ │ -0000b1d0: 6c74 3b20 322e 200a 3c2f 6469 763e 0a3c lt; 2. .
.< │ │ │ -0000b1e0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -0000b1f0: 3e0a 0a3c 6272 2f3e 0a26 6e62 7370 3b26 >..
. & │ │ │ -0000b200: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Class RewriteRelation │ │ │ -0000b2a0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (RA : relation A
).
. │ │ │ -0000b400: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ -0000b410: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -0000b420: 0a4c 6569 626e 697a 2065 7175 616c 6974 .Leibniz equalit │ │ │ -0000b430: 792e 200a 3c2f 6469 763e 0a3c 6469 7620 y. .
.
.&n │ │ │ -0000b450: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Secti │ │ │ -0000b480: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on Leibniz.
.&nbs │ │ │ -0000b500: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0000b510: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Global Inst │ │ │ -0000b540: 616e 6365 3c2f 7370 616e 3e20 3c61 2069 ance eq_Reflexi │ │ │ -0000b5b0: 7665 3c2f 7370 616e 3e3c 2f61 3e20 3a20 ve : │ │ │ -0000b5c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Reflexive (@eq
A) := @eq_refl
A.
.&n │ │ │ -0000b7f0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0000b800: 266e 6273 703b 3c73 7061 6e20 636c 6173  Global In │ │ │ -0000b830: 7374 616e 6365 3c2f 7370 616e 3e20 3c61 stance eq_Symme │ │ │ -0000b8a0: 7472 6963 3c2f 7370 616e 3e3c 2f61 3e20 tric │ │ │ -0000b8b0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Symmetric
(@eq< │ │ │ -0000b980: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A) := @< │ │ │ -0000ba00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000ba10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000ba20: 6f67 6963 2e68 746d 6c23 6571 5f73 796d ogic.html#eq_sym │ │ │ -0000ba30: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq_sym A.
. &n │ │ │ -0000bae0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0000baf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Global Instance │ │ │ -0000bb20: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq_Transitiv │ │ │ -0000bb90: 653c 2f73 7061 6e3e 3c2f 613e 203a 203c e : < │ │ │ -0000bba0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000bbb0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000bbc0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000bbd0: 732e 6874 6d6c 2354 7261 6e73 6974 6976 s.html#Transitiv │ │ │ -0000bbe0: 6522 3e3c 7370 616e 2063 6c61 7373 3d22 e">Transitive (@eq A) := @eq_trans A │ │ │ -0000bdc0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.Leib │ │ │ -0000bdf0: 696e 7a20 6571 7561 6c69 7479 203c 7370 inz equality eq is an equiva │ │ │ -0000be50: 6c65 6e63 6520 7265 6c61 7469 6f6e 2e0a lence relation.. │ │ │ -0000be60: 2020 2020 2020 2020 5468 6520 696e 7374 The inst │ │ │ -0000be70: 616e 6365 2068 6173 206c 6f77 2070 7269 ance has low pri │ │ │ -0000be80: 6f72 6974 7920 6173 2069 7420 6973 2061 ority as it is a │ │ │ -0000be90: 6c77 6179 7320 6170 706c 6963 6162 6c65 lways applicable │ │ │ -0000bea0: 0a20 2020 2020 2020 2069 6620 6f6e 6c79 . if only │ │ │ -0000beb0: 2074 6865 2074 7970 6520 6973 2063 6f6e the type is con │ │ │ -0000bec0: 7374 7261 696e 6564 2e20 0a3c 2f64 6976 strained. .
.
..
.&nbs │ │ │ -0000bef0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0000bf00: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Global Prog │ │ │ -0000bf30: 7261 6d20 496e 7374 616e 6365 3c2f 7370 ram Instance │ │ │ -0000bf80: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_equivalence │ │ │ -0000bfb0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : Equivalence (@eq< │ │ │ -0000c090: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A) | 10. │ │ │ -0000c110: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0000c120: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;End Leibniz.
..< │ │ │ -0000c1d0: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...L │ │ │ -0000c1f0: 6569 626e 697a 2064 6973 6571 7561 6c69 eibniz disequali │ │ │ -0000c200: 7479 2e20 0a3c 2f64 6976 3e0a 3c64 6976 ty. .
.
.& │ │ │ -0000c220: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Sect │ │ │ -0000c250: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion Leibni │ │ │ -0000c2c0: 7a4e 6f74 3c2f 7370 616e 3e3c 2f61 3e2e zNot. │ │ │ -0000c2d0: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ -0000c2f0: 4469 7365 7175 616c 6974 7920 6973 2073 Disequality is s │ │ │ -0000c300: 796d 6d65 7472 6963 2e20 0a3c 2f64 6976 ymmetric. .
.
.   │ │ │ -0000c330: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Gl │ │ │ -0000c360: 6f62 616c 2049 6e73 7461 6e63 653c 2f73 obal Instance < │ │ │ -0000c3b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000c3c0: 7469 746c 653d 2269 6e73 7461 6e63 6522 title="instance" │ │ │ -0000c3d0: 3e6e 6571 5f53 796d 6d65 7472 6963 3c2f >neq_Symmetric : < │ │ │ -0000c430: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000c440: 7469 746c 653d 2263 6c61 7373 223e 5379 title="class">Sy │ │ │ -0000c450: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric (fun │ │ │ -0000c490: 3c61 2069 643d 2278 3a31 3037 2220 636c x y : │ │ │ -0000c540: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -0000c580: 3c73 7061 6e20 636c 6173 733d 2269 6422 A = │ │ │ -0000c5b0: 2667 743b 203c 6120 636c 6173 733d 2269 > x < │ │ │ -0000c690: 3b26 6774 3b3c 2f73 7061 6e3e 3c2f 613e ;> │ │ │ -0000c6a0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0000c6e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 y) │ │ │ -0000c710: 3a3d 2028 403c 6120 636c 6173 733d 2269 := (@not_e │ │ │ -0000c770: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ -0000c780: 203c 6120 636c 6173 733d 2269 6472 6566 A) │ │ │ -0000c7f0: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -0000c800: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;End < │ │ │ -0000c830: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000c840: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000c850: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000c860: 732e 6874 6d6c 2344 6566 732e 4c65 6962 s.html#Defs.Leib │ │ │ -0000c870: 6e69 7a4e 6f74 223e 3c73 7061 6e20 636c nizNot">Leibniz │ │ │ -0000c8a0: 4e6f 743c 2f73 7061 6e3e 3c2f 613e 2e3c Not.< │ │ │ -0000c8b0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.End │ │ │ -0000c8e0: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ -0000c920: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000c930: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ -0000c940: 4465 6673 3c2f 7370 616e 3e3c 2f61 3e2e Defs. │ │ │ -0000c950: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Default r │ │ │ -0000c980: 6577 7269 7465 2072 656c 6174 696f 6e73 ewrite relations │ │ │ -0000c990: 2068 616e 646c 6564 2062 7920 3c73 7061 handled by setoid_rewr │ │ │ -0000c9e0: 6974 653c 2f73 7061 6e3e 3c2f 7370 616e ite on Prop. ....
.An │ │ │ -0000d080: 7920 3c73 7061 6e20 636c 6173 733d 2269 y Equivale │ │ │ -0000d0c0: 6e63 653c 2f73 7061 6e3e 3c2f 7370 616e nce declared in th │ │ │ -0000d0e0: 6520 636f 6e74 6578 7420 6973 2061 7574 e context is aut │ │ │ -0000d0f0: 6f6d 6174 6963 616c 6c79 2063 6f6e 7369 omatically consi │ │ │ -0000d100: 6465 7265 640a 2020 6120 7265 7772 6974 dered. a rewrit │ │ │ -0000d110: 6520 7265 6c61 7469 6f6e 2e20 5468 6973 e relation. This │ │ │ -0000d120: 206f 6e6c 7920 6170 706c 6965 7320 6966 only applies if │ │ │ -0000d130: 2074 6865 2072 656c 6174 696f 6e20 6973 the relation is │ │ │ -0000d140: 2061 7420 6c65 6173 7420 7061 7274 6961 at least partia │ │ │ -0000d150: 6c6c 790a 2020 6465 6669 6e65 643a 2073 lly. defined: s │ │ │ -0000d160: 6574 6f69 645f 7265 7772 6974 6520 776f etoid_rewrite wo │ │ │ -0000d170: 6e27 7420 7472 7920 746f 2069 6e66 6572 n't try to infer │ │ │ -0000d180: 2061 7262 6974 7261 7279 2075 7365 7220 arbitrary user │ │ │ -0000d190: 7265 7772 6974 6520 7265 6c61 7469 6f6e rewrite relation │ │ │ -0000d1a0: 732e 200a 3c2f 6469 763e 0a3c 6469 7620 s. .
.
..< │ │ │ -0000d1c0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Definition │ │ │ -0000d1f0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 │ │ │ -0000d250: 3c73 7061 6e20 636c 6173 733d 2269 6422 equivalence_ │ │ │ -0000d280: 7265 7772 6974 655f 7265 6c61 7469 6f6e rewrite_relation │ │ │ -0000d290: 3c2f 7370 616e 3e3c 2f61 3e20 6028 3c61 `(eqa< │ │ │ -0000d2f0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : Equivalence A < │ │ │ -0000d3d0: 6120 6964 3d22 6571 413a 3131 3022 2063 a id="eqA:110" c │ │ │ -0000d3e0: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ -0000d3f0: 663d 2223 6571 413a 3131 3022 3e3c 7370 f="#eqA:110">eqA │ │ │ -0000d420: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ -0000d430: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000d440: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000d450: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000d460: 732e 6874 6d6c 2352 6577 7269 7465 5265 s.html#RewriteRe │ │ │ -0000d470: 6c61 7469 6f6e 223e 3c73 7061 6e20 636c lation">RewriteRe │ │ │ -0000d4a0: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation eqA< │ │ │ -0000d520: 2f61 3e20 3a3d 3c62 722f 3e0a 266e 6273 /a> :=
.&nbs │ │ │ -0000d530: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; 
Buil │ │ │ -0000d5b0: 645f 5265 7772 6974 6552 656c 6174 696f d_RewriteRelatio │ │ │ -0000d5c0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 7370 n _.
..
. │ │ │ -0000d600: 3c73 7061 6e20 636c 6173 733d 2269 6422 Ltac equiv_ │ │ │ -0000d650: 7265 7772 6974 655f 7265 6c61 7469 6f6e rewrite_relation │ │ │ -0000d660: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c R := │ │ │ -0000d690: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0000d6a0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;t │ │ │ -0000d6c0: 7279 6966 3c2f 7370 616e 3e20 3c73 7061 ryif is_evar │ │ │ -0000d6f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c R t │ │ │ -0000d740: 6865 6e3c 2f73 7061 6e3e 203c 7370 616e hen fail< │ │ │ -0000d770: 2f73 7061 6e3e 3c62 722f 3e0a 266e 6273 /span>
.&nbs │ │ │ -0000d780: 703b 266e 6273 703b 3c73 7061 6e20 636c p; else
class_apply equivalence_re │ │ │ -0000d810: 7772 6974 655f 7265 6c61 7469 6f6e 3c2f write_relation.
..
.#[global] │ │ │ -0000d860: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Hint
Extern 10 (@ │ │ │ -0000d910: 3c73 7061 6e20 636c 6173 733d 2269 6422 R │ │ │ -0000d930: 6577 7269 7465 5265 6c61 7469 6f6e 3c2f ewriteRelation ?A │ │ │ -0000d970: 203f 3c73 7061 6e20 636c 6173 733d 2269 ?R │ │ │ -0000d990: 3c2f 7370 616e 3e29 203d 2667 743b 203c ) => < │ │ │ -0000d9a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000d9b0: 7469 746c 653d 2276 6172 223e 6571 7569 title="var">equi │ │ │ -0000d9c0: 765f 7265 7772 6974 655f 7265 6c61 7469 v_rewrite_relati │ │ │ -0000d9d0: 6f6e 3c2f 7370 616e 3e20 3c73 7061 6e20 on R │ │ │ -0000da00: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : t │ │ │ -0000da20: 7970 6563 6c61 7373 5f69 6e73 7461 6e63 ypeclass_instanc │ │ │ -0000da30: 6573 3c2f 7370 616e 3e2e 3c62 722f 3e0a es.
. │ │ │ -0000da40: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ -0000da50: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -0000da60: 0a48 696e 7473 2074 6f20 6472 6976 6520 .Hints to drive │ │ │ -0000da70: 7468 6520 7479 7065 636c 6173 7320 7265 the typeclass re │ │ │ -0000da80: 736f 6c75 7469 6f6e 2061 766f 6964 696e solution avoidin │ │ │ -0000da90: 6720 6c6f 6f70 730a 2064 7565 2074 6f20 g loops. due to │ │ │ -0000daa0: 7468 6520 7573 6520 6f66 2066 756c 6c20 the use of full │ │ │ -0000dab0: 756e 6966 6963 6174 696f 6e2e 200a 3c2f unification. ..
.#[global]
.Hint │ │ │ -0000db30: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c Extern< │ │ │ -0000db60: 2f73 7061 6e3e 2031 2028 3c61 2063 6c61 /span> 1 (Refl │ │ │ -0000dbd0: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -0000dbe0: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (comple │ │ │ -0000dc50: 6d65 6e74 3c2f 7370 616e 3e3c 2f61 3e20 ment │ │ │ -0000dc60: 3c73 7061 6e20 636c 6173 733d 2269 6422 _)) => class │ │ │ -0000dcb0: 5f61 7070 6c79 3c2f 7370 616e 3e20 403c _apply @< │ │ │ -0000dcc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000dcd0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000dce0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000dcf0: 732e 6874 6d6c 2369 7272 6566 6c65 7869 s.html#irreflexi │ │ │ -0000dd00: 7669 7479 223e 3c73 7061 6e20 636c 6173 vity">irrefl │ │ │ -0000dd30: 6578 6976 6974 793c 2f73 7061 6e3e 3c2f exivity : typeclass_inst │ │ │ -0000dd70: 616e 6365 733c 2f73 7061 6e3e 2e3c 6272 ances.
.#[global] │ │ │ -0000ddb0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Hint Extern 3 (Symmetric │ │ │ -0000de80: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (complement< │ │ │ -0000df00: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ -0000df30: 2929 203d 2667 743b 203c 7370 616e 2063 )) => class_appl │ │ │ -0000df60: 793c 2f73 7061 6e3e 203c 7370 616e 2063 y complement │ │ │ -0000df90: 5f53 796d 6d65 7472 6963 3c2f 7370 616e _Symmetric : typeclass_insta │ │ │ -0000dfd0: 6e63 6573 3c2f 7370 616e 3e2e 3c62 722f nces.
.#[global]< │ │ │ -0000e010: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ -0000e070: 2033 2028 3c61 2063 6c61 7373 3d22 6964 3 (Irreflex │ │ │ -0000e0e0: 6976 653c 2f73 7061 6e3e 3c2f 613e 2028 ive ( │ │ │ -0000e0f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 compleme │ │ │ -0000e160: 6e74 3c2f 7370 616e 3e3c 2f61 3e20 3c73 nt _)) => class_a │ │ │ -0000e1c0: 7070 6c79 3c2f 7370 616e 3e20 3c73 7061 pply
complem │ │ │ -0000e1f0: 656e 745f 4972 7265 666c 6578 6976 653c ent_Irreflexive< │ │ │ -0000e200: 2f73 7061 6e3e 203a 203c 7370 616e 2063 /span> : typeclass_ │ │ │ -0000e230: 696e 7374 616e 6365 733c 2f73 7061 6e3e instances │ │ │ -0000e240: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 235b .
..
.#[ │ │ │ -0000e250: 3c73 7061 6e20 636c 6173 733d 2269 6422 glo │ │ │ -0000e270: 6261 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e bal]
│ │ │ -0000e280: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Hint E │ │ │ -0000e2d0: 7874 6572 6e3c 2f73 7061 6e3e 2033 2028 xtern
3 ( │ │ │ -0000e2e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Reflexive (flip │ │ │ -0000e3c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0000e3e0: 2f73 7061 6e3e 2929 203d 2667 743b 203c /span>)) => < │ │ │ -0000e3f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000e400: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ -0000e410: 7070 6c79 3c2f 7370 616e 3e20 3c61 2063 pply flip_Reflexiv │ │ │ -0000e490: 653c 2f73 7061 6e3e 3c2f 613e 203a 203c e : < │ │ │ -0000e4a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000e4b0: 7469 746c 653d 2276 6172 223e 7479 7065 title="var">type │ │ │ -0000e4c0: 636c 6173 735f 696e 7374 616e 6365 733c class_instances< │ │ │ -0000e4d0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a23 5b3c /span>.
.#[< │ │ │ -0000e4e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000e4f0: 7469 746c 653d 2276 6172 223e 676c 6f62 title="var">glob │ │ │ -0000e500: 616c 3c2f 7370 616e 3e5d 3c62 722f 3e0a al]
. │ │ │ -0000e510: 3c73 7061 6e20 636c 6173 733d 2269 6422 Hint Ex │ │ │ -0000e560: 7465 726e 3c2f 7370 616e 3e20 3320 283c tern 3 (< │ │ │ -0000e570: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000e580: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0000e590: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0000e5a0: 732e 6874 6d6c 2349 7272 6566 6c65 7869 s.html#Irreflexi │ │ │ -0000e5b0: 7665 223e 3c73 7061 6e20 636c 6173 733d ve">Irreflexive ( │ │ │ -0000e620: 3c73 7061 6e20 636c 6173 733d 2269 6422 flip< │ │ │ -0000e650: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _)) => │ │ │ -0000e680: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; c │ │ │ -0000e6a0: 6c61 7373 5f61 7070 6c79 3c2f 7370 616e lass_apply f │ │ │ -0000e6d0: 6c69 705f 4972 7265 666c 6578 6976 653c lip_Irreflexive< │ │ │ -0000e6e0: 2f73 7061 6e3e 203a 203c 7370 616e 2063 /span> : typeclass_ │ │ │ -0000e710: 696e 7374 616e 6365 733c 2f73 7061 6e3e instances │ │ │ -0000e720: 2e3c 6272 2f3e 0a23 5b3c 7370 616e 2063 .
.#[global
]
.Hint< │ │ │ -0000e780: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Extern 3 (
Symme │ │ │ -0000e820: 7472 6963 3c2f 7370 616e 3e3c 2f61 3e20 tric │ │ │ -0000e830: 283c 6120 636c 6173 733d 2269 6472 6566 (flip _) │ │ │ -0000e8c0: 2920 3d26 6774 3b20 3c73 7061 6e20 636c ) => class_apply │ │ │ -0000e8f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c flip_Symmet │ │ │ -0000e920: 7269 633c 2f73 7061 6e3e 203a 203c 7370 ric : typecl │ │ │ -0000e950: 6173 735f 696e 7374 616e 6365 733c 2f73 ass_instances
.
.#[global │ │ │ -0000e990: 3c2f 7370 616e 3e5d 3c62 722f 3e0a 3c73 ]
.H │ │ │ -0000e9c0: 696e 743c 2f73 7061 6e3e 203c 7370 616e int Exte │ │ │ -0000e9f0: 726e 3c2f 7370 616e 3e20 3320 283c 6120 rn 3 ( │ │ │ -0000ea60: 4173 796d 6d65 7472 6963 3c2f 7370 616e Asymmetric ( │ │ │ -0000ead0: 666c 6970 3c2f 7370 616e 3e3c 2f61 3e20 flip │ │ │ -0000eae0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _)) => class │ │ │ -0000eb30: 5f61 7070 6c79 3c2f 7370 616e 3e20 3c73 _apply flip_ │ │ │ -0000eb60: 4173 796d 6d65 7472 6963 3c2f 7370 616e Asymmetric : typeclass_insta │ │ │ -0000eba0: 6e63 6573 3c2f 7370 616e 3e2e 3c62 722f nces.
.#[global]< │ │ │ -0000ebe0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ -0000ec40: 2033 2028 3c61 2063 6c61 7373 3d22 6964 3 (Antisy │ │ │ -0000ecb0: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric (fli │ │ │ -0000ed20: 703c 2f73 7061 6e3e 3c2f 613e 203c 7370 p _)) => class_ap │ │ │ -0000ed80: 706c 793c 2f73 7061 6e3e 203c 7370 616e ply flip_Ant │ │ │ -0000edb0: 6973 796d 6d65 7472 6963 3c2f 7370 616e isymmetric : typeclass_insta │ │ │ -0000edf0: 6e63 6573 3c2f 7370 616e 3e2e 3c62 722f nces.
.#[global]< │ │ │ -0000ee30: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ -0000ee90: 2033 2028 3c61 2063 6c61 7373 3d22 6964 3 (Transitiv │ │ │ -0000ef00: 653c 2f73 7061 6e3e 3c2f 613e 2028 3c61 e (flip _)) = │ │ │ -0000efa0: 2667 743b 203c 7370 616e 2063 6c61 7373 > class_apply
flip_Transitiv │ │ │ -0000f000: 653c 2f73 7061 6e3e 203a 203c 7370 616e e : typeclas │ │ │ -0000f030: 735f 696e 7374 616e 6365 733c 2f73 7061 s_instances.
.#[global]
.Hin │ │ │ -0000f0a0: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t
Extern │ │ │ -0000f0d0: 3c2f 7370 616e 3e20 3320 283c 6120 636c 3 ( │ │ │ -0000f120: 3c73 7061 6e20 636c 6173 733d 2269 6422 S │ │ │ -0000f140: 7472 6963 744f 7264 6572 3c2f 7370 616e trictOrder ( │ │ │ -0000f1b0: 666c 6970 3c2f 7370 616e 3e3c 2f61 3e20 flip
│ │ │ -0000f1c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _)) => class │ │ │ -0000f210: 5f61 7070 6c79 3c2f 7370 616e 3e20 3c73 _apply flip_ │ │ │ -0000f240: 5374 7269 6374 4f72 6465 723c 2f73 7061 StrictOrder : typeclass_inst │ │ │ -0000f280: 616e 6365 733c 2f73 7061 6e3e 2e3c 6272 ances.
.#[global] │ │ │ -0000f2c0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Hint Extern 3 (PreOrder ( │ │ │ -0000f3d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 flip< │ │ │ -0000f400: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _)) => │ │ │ -0000f430: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; c │ │ │ -0000f450: 6c61 7373 5f61 7070 6c79 3c2f 7370 616e lass_apply f │ │ │ -0000f480: 6c69 705f 5072 654f 7264 6572 3c2f 7370 lip_PreOrder
: typeclass_ins │ │ │ -0000f4c0: 7461 6e63 6573 3c2f 7370 616e 3e2e 3c62 tances...
.#[global │ │ │ -0000f500: 3c2f 7370 616e 3e5d 3c62 722f 3e0a 3c73 ]
.H │ │ │ -0000f530: 696e 743c 2f73 7061 6e3e 203c 7370 616e int Exte │ │ │ -0000f560: 726e 3c2f 7370 616e 3e20 3420 283c 6120 rn 4 (
subrelation (flip _ │ │ │ -0000f670: 3c2f 7370 616e 3e29 203c 7370 616e 2063 ) _) │ │ │ -0000f6a0: 3d26 6774 3b20 3c62 722f 3e0a 266e 6273 =>
.&nbs │ │ │ -0000f6b0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; class_apply │ │ │ -0000f6e0: 3c2f 7370 616e 3e20 403c 6120 636c 6173 @subrelati │ │ │ -0000f760: 6f6e 5f73 796d 6d65 7472 6963 3c2f 7370 on_symmetric : typeclass │ │ │ -0000f7a0: 5f69 6e73 7461 6e63 6573 3c2f 7370 616e _instances.
..
.< │ │ │ -0000f7c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000f7d0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0000f7e0: 4172 6775 6d65 6e74 733c 2f73 7061 6e3e Arguments │ │ │ -0000f7f0: 203c 6120 636c 6173 733d 2269 6472 6566 irre │ │ │ -0000f860: 666c 6578 6976 6974 793c 2f73 7061 6e3e flexivity │ │ │ -0000f870: 3c2f 613e 207b 3c73 7061 6e20 636c 6173 {A R I │ │ │ -0000f8e0: 7272 6566 6c65 7869 7665 3c2f 7370 616e rreflexive} [x] _ │ │ │ -0000f940: 203a 203c 7370 616e 2063 6c61 7373 3d22 : rename │ │ │ -0000f970: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Argument │ │ │ -0000f9a0: 733c 2f73 7061 6e3e 203c 6120 636c 6173 s s │ │ │ -0000fa10: 796d 6d65 7472 793c 2f73 7061 6e3e 3c2f ymmetry {A} {R} {_} [x] [y] _ │ │ │ -0000fb10: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Argument │ │ │ -0000fb40: 733c 2f73 7061 6e3e 203c 6120 636c 6173 s
│ │ │ -0000fbb0: 6173 796d 6d65 7472 793c 2f73 7061 6e3e asymmetry │ │ │ -0000fbc0: 3c2f 613e 207b 3c73 7061 6e20 636c 6173 {A} {R} {_} [x] [y] _
│ │ │ -0000fcd0: 5f3c 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c _.
.< │ │ │ -0000fce0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000fcf0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0000fd00: 4172 6775 6d65 6e74 733c 2f73 7061 6e3e Arguments │ │ │ -0000fd10: 203c 6120 636c 6173 733d 2269 6472 6566 trans │ │ │ -0000fd80: 6974 6976 6974 793c 2f73 7061 6e3e 3c2f itivity {A} {R} {_} [x] [y] [z] │ │ │ -0000fea0: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _.< │ │ │ -0000fed0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Arguments< │ │ │ -0000ff00: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> Ant │ │ │ -0000ff70: 6973 796d 6d65 7472 6963 3c2f 7370 616e isymmetric A eqA {_} _.
..
.# │ │ │ -00010030: 5b3c 7370 616e 2063 6c61 7373 3d22 6964 [gl │ │ │ -00010050: 6f62 616c 3c2f 7370 616e 3e5d 3c62 722f obal]
.Hint < │ │ │ -00010090: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000100a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000100b0: 5265 736f 6c76 653c 2f73 7061 6e3e 203c Resolve < │ │ │ -000100c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000100d0: 7469 746c 653d 2276 6172 223e 6972 7265 title="var">irre │ │ │ -000100e0: 666c 6578 6976 6974 793c 2f73 7061 6e3e flexivity │ │ │ -000100f0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ -00010110: 6f72 643c 2f73 7061 6e3e 2e3c 6272 2f3e ord.
│ │ │ -00010120: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Unset I │ │ │ -00010150: 6d70 6c69 6369 7420 4172 6775 6d65 6e74 mplicit Argument │ │ │ -00010160: 733c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a s.
.. │ │ │ -00010170: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Ltac
│ │ │ -000101c0: 736f 6c76 655f 7265 6c61 7469 6f6e 3c2f solve_relation :=
.&n │ │ │ -000101e0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; match │ │ │ -00010210: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c goal
with
. &nb │ │ │ -00010280: 7370 3b7c 205b 207c 2d20 3f3c 7370 616e sp;| [ |- ?R │ │ │ -000102b0: 203f 3c73 7061 6e20 636c 6173 733d 2269 ?x │ │ │ -000102d0: 3c2f 7370 616e 3e20 3f3c 7370 616e 2063 ?x ] │ │ │ -00010300: 203d 2667 743b 203c 7370 616e 2063 6c61 => reflexivi │ │ │ -00010330: 7479 3c2f 7370 616e 3e3c 6272 2f3e 0a26 ty
.& │ │ │ -00010340: 6e62 7370 3b26 6e62 7370 3b7c 205b 203c nbsp; | [ < │ │ │ -00010350: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010360: 7469 746c 653d 2276 6172 223e 483c 2f73 title="var">H
: ?R ?< │ │ │ -000103a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000103b0: 7469 746c 653d 2276 6172 223e 783c 2f73 title="var">x
?y |- ? │ │ │ -000103f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 R ?y ?x ] => symm │ │ │ -00010490: 6574 7279 3c2f 7370 616e 3e20 3b20 3c73 etry ; ex │ │ │ -000104c0: 6163 743c 2f73 7061 6e3e 203c 7370 616e act H │ │ │ -000104f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00010500: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;end...
.#[global │ │ │ -00010560: 3c2f 7370 616e 3e5d 3c62 722f 3e0a 3c73 ]
.H │ │ │ -00010590: 696e 743c 2f73 7061 6e3e 203c 7370 616e int Exte │ │ │ -000105c0: 726e 3c2f 7370 616e 3e20 3420 3d26 6774 rn 4 => │ │ │ -000105d0: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; s │ │ │ -000105f0: 6f6c 7665 5f72 656c 6174 696f 6e3c 2f73 olve_relation : relations
.
..
.
..
.We c │ │ │ -00010660: 616e 2061 6c72 6561 6479 2064 7561 6c69 an already duali │ │ │ -00010670: 7a65 2061 6c6c 2074 6865 7365 2070 726f ze all these pro │ │ │ -00010680: 7065 7274 6965 732e 200a 3c64 6976 2063 perties. .
..Standard insta │ │ │ -000106e0: 6e63 6573 2e3c 2f68 313e 0a0a 3c2f 6469 nces....
..
.Lt │ │ │ -00010730: 6163 3c2f 7370 616e 3e20 3c73 7061 6e20 ac reduce_hy │ │ │ -00010760: 703c 2f73 7061 6e3e 203c 7370 616e 2063 p H : │ │ │ -00010790: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ -000107a0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;match │ │ │ -000107d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 type o │ │ │ -00010820: 663c 2f73 7061 6e3e 203c 7370 616e 2063 f H < │ │ │ -00010850: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010860: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00010870: 7769 7468 3c2f 7370 616e 3e3c 6272 2f3e with
│ │ │ -00010880: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00010890: 7370 3b26 6e62 7370 3b7c 203c 7370 616e sp; | cont │ │ │ -000108c0: 6578 743c 2f73 7061 6e3e 205b 203c 7370 ext [ _ &l │ │ │ -00010960: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> │ │ │ -00010990: 5f3c 2f73 7061 6e3e 205d 203d 2667 743b _ ] => │ │ │ -000109a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 fail 1.   │ │ │ -000109e0: 266e 6273 703b 266e 6273 703b 7c20 3c73   | _ => red in < │ │ │ -00010a70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010a80: 7469 746c 653d 2276 6172 223e 483c 2f73 title="var">H
; try r │ │ │ -00010ae0: 6564 7563 655f 6879 703c 2f73 7061 6e3e educe_hyp │ │ │ -00010af0: 203c 7370 616e 2063 6c61 7373 3d22 6964 H< │ │ │ -00010b10: 2f73 7061 6e3e 3c62 722f 3e0a 266e 6273 /span>
.&nbs │ │ │ -00010b20: 703b 266e 6273 703b 3c73 7061 6e20 636c p; end
.
..
│ │ │ -00010b60: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Ltac reduc │ │ │ -00010bb0: 655f 676f 616c 3c2f 7370 616e 3e20 3a3d e_goal := │ │ │ -00010bc0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00010bd0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;match │ │ │ -00010c00: 3c73 7061 6e20 636c 6173 733d 2269 6422 goal wi │ │ │ -00010c50: 7468 3c2f 7370 616e 3e3c 6272 2f3e 0a26 th
.& │ │ │ -00010c60: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00010c70: 3b26 6e62 7370 3b7c 205b 207c 2d20 3c73 ; | [ |- _
& │ │ │ -00010d10: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ -00010d20: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ ] => │ │ │ -00010d50: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; fail 1< │ │ │ -00010d80: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00010d90: 3b26 6e62 7370 3b26 6e62 7370 3b7c 203c ;  | < │ │ │ -00010da0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010db0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ => red ; intros ; try │ │ │ -00010e70: 7265 6475 6365 5f67 6f61 6c3c 2f73 7061 reduce_goal
. &n │ │ │ -00010e90: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;end. │ │ │ -00010ec0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Ta │ │ │ -00010ef0: 6374 6963 204e 6f74 6174 696f 6e3c 2f73 ctic Notation
"reduce" "i │ │ │ -00010f10: 6e22 203c 7370 616e 2063 6c61 7373 3d22 n" │ │ │ -00010f30: 6879 703c 2f73 7061 6e3e 283c 7370 616e hyp(Hid) := reduce_hyp Hid...
.Ltac │ │ │ -00010ff0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c reduce := reduce_goal.
..
.Tactic Notat │ │ │ -00011090: 696f 6e3c 2f73 7061 6e3e 2022 6170 706c ion "appl │ │ │ -000110a0: 7922 2022 2a22 203c 7370 616e 2063 6c61 y" "*" constr(t) :=< │ │ │ -00011100: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00011110: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;first [ │ │ │ -00011140: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00011160: 7265 6669 6e65 3c2f 7370 616e 3e20 3c73 refine t | refine (t _ │ │ │ -00011210: 2920 7c20 3c73 7061 6e20 636c 6173 733d ) | refine ( │ │ │ -00011260: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t _ < │ │ │ -00011290: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000112a0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_) | refine (t _ │ │ │ -00011350: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _) │ │ │ -00011380: 7c20 3c73 7061 6e20 636c 6173 733d 2269 | refine │ │ │ -000113b0: 283c 7370 616e 2063 6c61 7373 3d22 6964 (t< │ │ │ -000113d0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ _ │ │ │ -00011440: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _) │ │ │ -00011470: 7c3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 |
. &nb │ │ │ -00011480: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ -00011490: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000114a0: 7469 746c 653d 2274 6163 7469 6322 3e72 title="tactic">r │ │ │ -000114b0: 6566 696e 653c 2f73 7061 6e3e 2028 3c73 efine
(t
_ _ │ │ │ -00011530: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _) | refine (t _ │ │ │ -00011620: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _ _ │ │ │ -000116b0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _) | │ │ │ -000116e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 refine ( │ │ │ -00011710: 3c73 7061 6e20 636c 6173 733d 2269 6422 t _ _ _ │ │ │ -000117a0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ _ _ _) │ │ │ -00011840: 205d 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a ].
..
. │ │ │ -00011850: 3c73 7061 6e20 636c 6173 733d 2269 6422 Ltac simpl_ │ │ │ -000118a0: 7265 6c61 7469 6f6e 3c2f 7370 616e 3e20 relation
│ │ │ -000118b0: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -000118c0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;unfold
flip< │ │ │ -00011950: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, impl │ │ │ -000119c0: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , │ │ │ -00011a20: 6172 726f 773c 2f73 7061 6e3e 3c2f 613e arrow │ │ │ -00011a30: 203b 203c 7370 616e 2063 6c61 7373 3d22 ; try reduc │ │ │ -00011a80: 653c 2f73 7061 6e3e 203b 203c 7370 616e e ; progr │ │ │ -00011ab0: 616d 5f73 696d 706c 3c2f 7370 616e 3e20 am_simpl │ │ │ -00011ac0: 3b3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 ;
. &nb │ │ │ -00011ad0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ -00011ae0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00011af0: 7469 746c 653d 2274 6163 7469 6322 3e74 title="tactic">t │ │ │ -00011b00: 7279 3c2f 7370 616e 3e20 2820 3c73 7061 ry ( solv │ │ │ -00011b30: 653c 2f73 7061 6e3e 205b 203c 7370 616e e [ dintuiti │ │ │ -00011b60: 6f6e 3c2f 7370 616e 3e20 3c73 7061 6e20 on auto with │ │ │ -00011be0: 7265 6c61 7469 6f6e 733c 2f73 7061 6e3e relations │ │ │ -00011bf0: 205d 292e 3c62 722f 3e0a 0a3c 6272 2f3e ]).
..
│ │ │ -00011c00: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Local Obligati │ │ │ -00011c30: 6f6e 3c2f 7370 616e 3e20 3c73 7061 6e20 on Tacti │ │ │ -00011c60: 633c 2f73 7061 6e3e 203a 3d20 3c73 7061 c := try< │ │ │ -00011c90: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> solve [ simpl_relatio │ │ │ -00011cf0: 6e3c 2f73 7061 6e3e 205d 2e3c 6272 2f3e n ].
│ │ │ -00011d00: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -00011d10: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.Logical implic │ │ │ -00011d30: 6174 696f 6e2e 200a 3c2f 6469 763e 0a3c ation. .
.< │ │ │ -00011d40: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -00011d50: 3e0a 0a3c 6272 2f3e 0a23 5b3c 7370 616e >..
.#[global]
.Program │ │ │ -00011db0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c
Instanc │ │ │ -00011de0: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e impl_Refl │ │ │ -00011e50: 6578 6976 653c 2f73 7061 6e3e 3c2f 613e exive │ │ │ -00011e60: 203a 203c 6120 636c 6173 733d 2269 6472 : Reflexive < │ │ │ -00011f10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00011f20: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00011f30: 6e22 3e69 6d70 6c3c 2f73 7061 6e3e 3c2f n">impl.
.#[global]
.Program │ │ │ -00011fa0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c
Instanc │ │ │ -00011fd0: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e
impl_Tr │ │ │ -00012040: 616e 7369 7469 7665 3c2f 7370 616e 3e3c ansitive< │ │ │ -00012050: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : Transit │ │ │ -000120c0: 6976 653c 2f73 7061 6e3e 3c2f 613e 203c ive < │ │ │ -000120d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000120e0: 6872 6566 3d22 436f 712e 5072 6f67 7261 href="Coq.Progra │ │ │ -000120f0: 6d2e 4261 7369 6373 2e68 746d 6c23 696d m.Basics.html#im │ │ │ -00012100: 706c 223e 3c73 7061 6e20 636c 6173 733d pl">impl.
..< │ │ │ -00012140: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...L │ │ │ -00012160: 6f67 6963 616c 2065 7175 6976 616c 656e ogical equivalen │ │ │ -00012170: 6365 2e20 0a3c 2f64 6976 3e0a 3c64 6976 ce. .
.
.. │ │ │ -00012190: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Instan │ │ │ -000121f0: 6365 3c2f 7370 616e 3e20 3c61 2069 643d ce iff_Reflex │ │ │ -00012260: 6976 653c 2f73 7061 6e3e 3c2f 613e 203a ive : │ │ │ -00012270: 203c 6120 636c 6173 733d 2269 6472 6566 Reflexive iff< │ │ │ -00012340: 2f73 7061 6e3e 3c2f 613e 203a 3d20 3c61 /span> := iff_refl.
.#[globa │ │ │ -000123e0: 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c l
]
.< │ │ │ -000123f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00012400: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00012410: 496e 7374 616e 6365 3c2f 7370 616e 3e20 Instance │ │ │ -00012420: 3c61 2069 643d 2269 6666 5f53 796d 6d65 iff_ │ │ │ -00012480: 5379 6d6d 6574 7269 633c 2f73 7061 6e3e Symmetric │ │ │ -00012490: 3c2f 613e 203a 203c 6120 636c 6173 733d : Symmetr │ │ │ -00012500: 6963 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ic iff │ │ │ -00012570: 203a 3d20 3c61 2063 6c61 7373 3d22 6964 := iff_sym.
. │ │ │ -000125e0: 235b 3c73 7061 6e20 636c 6173 733d 2269 #[g │ │ │ -00012600: 6c6f 6261 6c3c 2f73 7061 6e3e 5d3c 6272 lobal]
.Instance │ │ │ -00012680: 3c73 7061 6e20 636c 6173 733d 2269 6422 iff_Transitive │ │ │ -000126b0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : Transitive iff := iff_trans.
...
..
.Lo │ │ │ -00012830: 6769 6361 6c20 6571 7569 7661 6c65 6e63 gical equivalenc │ │ │ -00012840: 6520 3c73 7061 6e20 636c 6173 733d 2269 e iff is an │ │ │ -00012890: 6571 7569 7661 6c65 6e63 6520 7265 6c61 equivalence rela │ │ │ -000128a0: 7469 6f6e 2e20 0a3c 2f64 6976 3e0a 3c64 tion. .
. │ │ │ -000128c0: 0a0a 3c62 722f 3e0a 235b 3c73 7061 6e20 ..
.#[global
]
.Program< │ │ │ -00012920: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Instance │ │ │ -00012950: 3c2f 7370 616e 3e20 3c61 2069 643d 2269 iff_equi │ │ │ -000129c0: 7661 6c65 6e63 653c 2f73 7061 6e3e 3c2f valence : Equival │ │ │ -00012a40: 656e 6365 3c2f 7370 616e 3e3c 2f61 3e20 ence │ │ │ -00012a50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -00012a80: 3c73 7061 6e20 636c 6173 733d 2269 6422 iff.
..
. │ │ │ -00012ac0: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.We now │ │ │ -00012ae0: 2064 6576 656c 6f70 2061 2067 656e 6572 develop a gener │ │ │ -00012af0: 616c 697a 6174 696f 6e20 6f66 2072 6573 alization of res │ │ │ -00012b00: 756c 7473 206f 6e20 7265 6c61 7469 6f6e ults on relation │ │ │ -00012b10: 7320 666f 7220 6172 6269 7472 6172 7920 s for arbitrary │ │ │ -00012b20: 7072 6564 6963 6174 6573 2e0a 2020 2054 predicates.. T │ │ │ -00012b30: 6865 2072 6573 756c 7469 6e67 2074 6865 he resulting the │ │ │ -00012b40: 6f72 7920 6361 6e20 6265 2061 7070 6c69 ory can be appli │ │ │ -00012b50: 6564 2074 6f20 686f 6d6f 6765 6e65 6f75 ed to homogeneou │ │ │ -00012b60: 7320 6269 6e61 7279 2072 656c 6174 696f s binary relatio │ │ │ -00012b70: 6e73 2062 7574 2061 6c73 6f20 746f 0a20 ns but also to. │ │ │ -00012b80: 2020 6172 6269 7472 6172 7920 6e2d 6172 arbitrary n-ar │ │ │ -00012b90: 7920 7072 6564 6963 6174 6573 2e20 0a3c y predicates. .< │ │ │ -00012ba0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ -00012bc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Local Open Scope │ │ │ -00012c20: 203c 7370 616e 2063 6c61 7373 3d22 6964 li │ │ │ -00012c40: 7374 5f73 636f 7065 3c2f 7370 616e 3e2e st_scope. │ │ │ -00012c50: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.A compact │ │ │ -00012c80: 2072 6570 7265 7365 6e74 6174 696f 6e20 representation │ │ │ -00012c90: 6f66 206e 6f6e 2d64 6570 656e 6465 6e74 of non-dependent │ │ │ -00012ca0: 2061 7269 7469 6573 2c20 7769 7468 2074 arities, with t │ │ │ -00012cb0: 6865 2063 6f64 6f6d 6169 6e20 7369 6e67 he codomain sing │ │ │ -00012cc0: 6c65 642d 6f75 742e 200a 3c2f 6469 763e led-out. .
│ │ │ -00012cd0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.Indu │ │ │ -00012d10: 6374 6976 653c 2f73 7061 6e3e 203c 6120 ctive
Tlist
│ │ │ -00012e20: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Type := < │ │ │ -00012e80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00012e90: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00012ea0: 6f72 223e 546e 696c 3c2f 7370 616e 3e3c or">Tnil< │ │ │ -00012eb0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : Tlis │ │ │ -00012f20: 743c 2f73 7061 6e3e 3c2f 613e 207c 203c t | < │ │ │ -00012f30: 6120 6964 3d22 5463 6f6e 7322 2063 6c61 a id="Tcons" cla │ │ │ -00012f40: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00012f50: 2223 5463 6f6e 7322 3e3c 7370 616e 2063 "#Tcons">Tc │ │ │ -00012f80: 6f6e 733c 2f73 7061 6e3e 3c2f 613e 203a ons : │ │ │ -00012f90: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type -> Tlis │ │ │ -000130a0: 743c 2f73 7061 6e3e 3c2f 613e 203c 6120 t -> │ │ │ -00013120: 3c2f 613e 203c 6120 636c 6173 733d 2269 Tlist │ │ │ -00013190: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.Local Infix &q │ │ │ -00013230: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e3a uot;: │ │ │ -00013240: 3a22 203a 3d20 3c61 2063 6c61 7373 3d22 :" := Tcons< │ │ │ -000132b0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -000132c0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Fixpoin │ │ │ -000132f0: 743c 2f73 7061 6e3e 203c 6120 6964 3d22 t arrows< │ │ │ -00013350: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (l : Tlist) (r │ │ │ -00013480: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Type) │ │ │ -000134b0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Type │ │ │ -000134e0: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -000134f0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;match l │ │ │ -00013590: 3c73 7061 6e20 636c 6173 733d 2269 6422 with
.  &n │ │ │ -000135d0: 6273 703b 266e 6273 703b 7c20 3c61 2063 bsp; | T │ │ │ -00013640: 6e69 6c3c 2f73 7061 6e3e 3c2f 613e 203d nil = │ │ │ -00013650: 2667 743b 203c 6120 636c 6173 733d 2269 > r
. &n │ │ │ -000136d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000136e0: 7c20 3c73 7061 6e20 636c 6173 733d 2269 | A │ │ │ -00013700: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373
: │ │ │ -00013770: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 7370 : l' => A │ │ │ -000137d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> │ │ │ -000138b0: 6172 726f 7773 3c2f 7370 616e 3e3c 2f61 arrows l │ │ │ -000138e0: 273c 2f73 7061 6e3e 203c 6120 636c 6173 ' r
.&nbs │ │ │ -00013960: 703b 266e 6273 703b 3c73 7061 6e20 636c p; end.
..
│ │ │ -000139a0: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.We ca │ │ │ -000139c0: 6e20 6465 6669 6e65 2061 6262 7265 7669 n define abbrevi │ │ │ -000139d0: 6174 696f 6e73 2066 6f72 206f 7065 7261 ations for opera │ │ │ -000139e0: 7469 6f6e 2061 6e64 2072 656c 6174 696f tion and relatio │ │ │ -000139f0: 6e20 7479 7065 7320 6261 7365 6420 6f6e n types based on │ │ │ -00013a00: 203c 7370 616e 2063 6c61 7373 3d22 696e arrows. ..
..
.< │ │ │ -00013a70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013a80: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00013a90: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition │ │ │ -00013ae0: 3c73 7061 6e20 636c 6173 733d 2269 6422 unary_operat │ │ │ -00013b10: 696f 6e3c 2f73 7061 6e3e 3c2f 613e 203c ion < │ │ │ -00013b20: 6120 6964 3d22 413a 3131 3822 2063 6c61 a id="A:118" cla │ │ │ -00013b30: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00013b40: 2223 413a 3131 3822 3e3c 7370 616e 2063 "#A:118">A := arr │ │ │ -00013be0: 6f77 733c 2f73 7061 6e3e 3c2f 613e 2028 ows ( │ │ │ -00013bf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -00013c30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013c40: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00013c50: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A::< │ │ │ -00013d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013d20: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00013d30: 6f72 223e 546e 696c 3c2f 7370 616e 3e3c or">Tnil< │ │ │ -00013d40: 2f61 3e29 203c 6120 636c 6173 733d 2269 /a>) A.
.Defini │ │ │ -00013de0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion
│ │ │ -00013e50: 6269 6e61 7279 5f6f 7065 7261 7469 6f6e binary_operation │ │ │ -00013e60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 A := arrows │ │ │ -00013f30: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (A< │ │ │ -00013fa0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ -00013ff0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014000: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00014010: 3e3a 3a3c 2f73 7061 6e3e 3c2f 613e 3c61 >::A │ │ │ -00014080: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -000140d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ -00014100: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00014110: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00014120: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00014130: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil) A │ │ │ -000141e0: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Definiti │ │ │ -00014210: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on │ │ │ -00014280: 7465 726e 6172 795f 6f70 6572 6174 696f ternary_operatio │ │ │ -00014290: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n A< │ │ │ -000142f0: 2f61 3e20 3a3d 203c 6120 636c 6173 733d /a> := arrow │ │ │ -00014360: 733c 2f73 7061 6e3e 3c2f 613e 2028 3c61 s (A │ │ │ -000143d0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00014420: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ -00014450: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00014460: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00014470: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00014480: 732e 6874 6d6c 2341 3a31 3230 223e 3c73 s.html#A:120"> │ │ │ -000144b0: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A:: │ │ │ -00014530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -00014570: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014580: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00014590: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A::< │ │ │ -00014650: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014660: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00014670: 6f72 223e 546e 696c 3c2f 7370 616e 3e3c or">Tnil< │ │ │ -00014680: 2f61 3e29 203c 6120 636c 6173 733d 2269 /a>) A.
..
. │ │ │ -00014700: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.We def │ │ │ -00014720: 696e 6520 6e2d 6172 7920 3c73 7061 6e20 ine n-ary │ │ │ -00014760: 7072 6564 6963 6174 653c 2f73 7061 6e3e predicate │ │ │ -00014770: 3c2f 7370 616e 3e73 2061 7320 6675 6e63 s as func │ │ │ -00014780: 7469 6f6e 7320 696e 746f 203c 7370 616e tions into Prop │ │ │ -000147d0: 3c2f 7370 616e 3e2e 200a 3c2f 6469 763e . .
│ │ │ -000147e0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.Nota │ │ │ -00014820: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion
predicate l : │ │ │ -000148c0: 3d20 283c 6120 636c 6173 733d 2269 6472 = (arrows
l < │ │ │ -00014960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014970: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00014980: 5072 6f70 3c2f 7370 616e 3e29 2e3c 6272 Prop).
..
.
│ │ │ -000149a0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Unary predic │ │ │ -000149c0: 6174 6573 2c20 6f72 2073 6574 732e 200a ates, or sets. . │ │ │ -000149d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
..
│ │ │ -000149f0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Definition unary_pred │ │ │ -00014a90: 6963 6174 653c 2f73 7061 6e3e 3c2f 613e icate │ │ │ -00014aa0: 203c 6120 6964 3d22 413a 3132 3122 2063 A := predicate (A:: │ │ │ -00014c50: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c Tn │ │ │ -00014cc0: 696c 3c2f 7370 616e 3e3c 2f61 3e29 2e3c il).< │ │ │ -00014cd0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Homogeneou │ │ │ -00014d00: 7320 6269 6e61 7279 2072 656c 6174 696f s binary relatio │ │ │ -00014d10: 6e73 2c20 6571 7569 7661 6c65 6e74 2074 ns, equivalent t │ │ │ -00014d20: 6f20 3c73 7061 6e20 636c 6173 733d 2269 o relation │ │ │ -00014d60: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ -00014d70: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00014d80: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A. .
. │ │ │ -00014dd0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Definit │ │ │ -00014e00: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion bin │ │ │ -00014e70: 6172 795f 7265 6c61 7469 6f6e 3c2f 7370 ary_relation A : │ │ │ -00014ee0: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = predi │ │ │ -00014f50: 6361 7465 3c2f 7370 616e 3e3c 2f61 3e20 cate │ │ │ -00014f60: 283c 6120 636c 6173 733d 2269 6472 6566 ( │ │ │ -00014fa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A::A< │ │ │ -000150b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000150c0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000150d0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -000150e0: 732e 6874 6d6c 233a 3a3a 785f 273a 3a27 s.html#:::x_'::' │ │ │ -000150f0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">::< │ │ │ -00015120: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>Tnil).
...
..
.We │ │ │ -000151c0: 2063 616e 2063 6c6f 7365 2061 2070 7265 can close a pre │ │ │ -000151d0: 6469 6361 7465 2062 7920 756e 6976 6572 dicate by univer │ │ │ -000151e0: 7361 6c20 6f72 2065 7869 7374 656e 7469 sal or existenti │ │ │ -000151f0: 616c 2071 7561 6e74 6966 6963 6174 696f al quantificatio │ │ │ -00015200: 6e2e 200a 3c2f 6469 763e 0a3c 6469 7620 n. .
.
..< │ │ │ -00015220: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Fixpoint │ │ │ -00015290: 3c73 7061 6e20 636c 6173 733d 2269 6422 predicate_al │ │ │ -000152c0: 6c3c 2f73 7061 6e3e 3c2f 613e 2028 3c61 l (l │ │ │ -00015320: 3c2f 613e 203a 203c 6120 636c 6173 733d : Tlist) : │ │ │ -000153e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 predicate< │ │ │ -00015410: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> l │ │ │ -000154f0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00015500: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop := │ │ │ -00015530: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00015540: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;match │ │ │ -00015570: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -000155b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000155c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000155d0: 3e6c 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >l w │ │ │ -00015600: 6974 683c 2f73 7061 6e3e 3c62 722f 3e0a ith
. │ │ │ -00015610: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00015620: 703b 266e 6273 703b 7c20 3c61 2063 6c61 p; | Tni │ │ │ -00015690: 6c3c 2f73 7061 6e3e 3c2f 613e 203d 2667 l =&g │ │ │ -000156a0: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; fun < │ │ │ -000156d0: 6120 6964 3d22 663a 3132 3622 2063 6c61 a id="f:126" cla │ │ │ -000156e0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000156f0: 2223 663a 3132 3622 3e3c 7370 616e 2063 "#f:126">f => f
.& │ │ │ -000157a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000157b0: 3b26 6e62 7370 3b7c 203c 7370 616e 2063 ; | A < │ │ │ -000157e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000157f0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00015800: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00015810: 732e 6874 6d6c 233a 3a3a 785f 273a 3a27 s.html#:::x_'::' │ │ │ -00015820: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">::< │ │ │ -00015850: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> tl => │ │ │ -00015880: 203c 7370 616e 2063 6c61 7373 3d22 6964 fun f< │ │ │ -00015900: 2f61 3e20 3d26 6774 3b20 3c73 7061 6e20 /a> => foral │ │ │ -00015930: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l x │ │ │ -00015990: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : A │ │ │ -000159b0: 3c2f 7370 616e 3e2c 203c 6120 636c 6173 , predicat │ │ │ -00015a30: 655f 616c 6c3c 2f73 7061 6e3e 3c2f 613e e_all │ │ │ -00015a40: 203c 7370 616e 2063 6c61 7373 3d22 6964 tl │ │ │ -00015a60: 3c2f 7370 616e 3e20 283c 6120 636c 6173 (f x │ │ │ -00015b40: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ -00015b50: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; end.
..
. │ │ │ -00015b90: 3c73 7061 6e20 636c 6173 733d 2269 6422 Fixpoint │ │ │ -00015bc0: 203c 6120 6964 3d22 7072 6564 6963 6174 predicate_e │ │ │ -00015c30: 7869 7374 733c 2f73 7061 6e3e 3c2f 613e xists │ │ │ -00015c40: 2028 3c61 2069 643d 226c 3a31 3239 2220 (l
: Tli │ │ │ -00015d00: 7374 3c2f 7370 616e 3e3c 2f61 3e29 203a st) : │ │ │ -00015d10: 203c 6120 636c 6173 733d 2269 6472 6566 predic │ │ │ -00015d80: 6174 653c 2f73 7061 6e3e 3c2f 613e 203c ate < │ │ │ -00015d90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00015da0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00015db0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00015dc0: 732e 6874 6d6c 236c 3a31 3239 223e 3c73 s.html#l:129"> │ │ │ -00015df0: 6c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 l -> │ │ │ -00015e70: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop :=
.  │ │ │ -00015eb0: 266e 6273 703b 3c73 7061 6e20 636c 6173  match l with.   │ │ │ -00015f90: 266e 6273 703b 266e 6273 703b 7c20 3c61   | Tnil │ │ │ -00016010: 203d 2667 743b 203c 7370 616e 2063 6c61 => fun f => │ │ │ -000160a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -000160e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000160f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00016100: 3e66 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >f
.  & │ │ │ -00016120: 6e62 7370 3b26 6e62 7370 3b7c 203c 7370 nbsp; | A :: tl = │ │ │ -000161f0: 2667 743b 203c 7370 616e 2063 6c61 7373 > fun │ │ │ -00016220: 203c 6120 6964 3d22 663a 3133 3322 2063 f => exi │ │ │ -000162f0: 7374 733c 2f73 7061 6e3e 3c2f 613e 203c sts < │ │ │ -00016300: 6120 6964 3d22 783a 3133 3422 2063 6c61 a id="x:134" cla │ │ │ -00016310: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00016320: 2223 783a 3133 3422 3e3c 7370 616e 2063 "#x:134">x : A,
predi │ │ │ -00016470: 6361 7465 5f65 7869 7374 733c 2f73 7061 cate_exists tl (< │ │ │ -000164b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000164c0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000164d0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -000164e0: 732e 6874 6d6c 2366 3a31 3333 223e 3c73 s.html#f:133"> │ │ │ -00016510: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f x< │ │ │ -00016580: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -00016590: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  en │ │ │ -000165c0: 643c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a d.
.. │ │ │ -000165d0: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ -000165f0: 506f 696e 7477 6973 6520 6578 7465 6e73 Pointwise extens │ │ │ -00016600: 696f 6e20 6f66 2061 2062 696e 6172 7920 ion of a binary │ │ │ -00016610: 6f70 6572 6174 696f 6e20 6f6e 203c 7370 operation on T to a binary o │ │ │ -00016670: 7065 7261 7469 6f6e 0a20 2020 6f6e 2066 peration. on f │ │ │ -00016680: 756e 6374 696f 6e73 2077 686f 7365 2063 unctions whose c │ │ │ -00016690: 6f64 6f6d 6169 6e20 6973 203c 7370 616e odomain is T │ │ │ -000166e0: 2e0a 2020 2046 6f72 2061 6e20 6f70 6572 .. For an oper │ │ │ -000166f0: 6174 6f72 206f 6e20 3c73 7061 6e20 636c ator on Prop this lifts │ │ │ -00016750: 7468 6520 6f70 6572 6174 6f72 2074 6f20 the operator to │ │ │ -00016760: 6120 6269 6e61 7279 206f 7065 7261 7469 a binary operati │ │ │ -00016770: 6f6e 2e20 0a3c 2f64 6976 3e0a 3c64 6976 on. .
.
.. │ │ │ -00016790: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Fixpoint< │ │ │ -000167c0: 2f73 7061 6e3e 203c 6120 6964 3d22 706f /span> pointwise_exten │ │ │ -00016840: 7369 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 sion │ │ │ -00016850: 7b3c 6120 6964 3d22 543a 3133 3522 2063 {T : Type< │ │ │ -000168d0: 2f73 7061 6e3e 7d20 283c 6120 6964 3d22 /span>} (op : < │ │ │ -00016980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016990: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000169a0: 6e22 3e62 696e 6172 795f 6f70 6572 6174 n">binary_operat │ │ │ -000169b0: 696f 6e3c 2f73 7061 6e3e 3c2f 613e 203c ion < │ │ │ -000169c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000169d0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -000169e0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -000169f0: 732e 6874 6d6c 2354 3a31 3335 223e 3c73 s.html#T:135"> │ │ │ -00016a20: 543c 2f73 7061 6e3e 3c2f 613e 293c 6272 T)
.  ( │ │ │ -00016a40: 3c61 2069 643d 226c 3a31 3337 2220 636c l : Tlist │ │ │ -00016b00: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ -00016b10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00016b20: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00016b30: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00016b40: 732e 6874 6d6c 2362 696e 6172 795f 6f70 s.html#binary_op │ │ │ -00016b50: 6572 6174 696f 6e22 3e3c 7370 616e 2063 eration">bin │ │ │ -00016b80: 6172 795f 6f70 6572 6174 696f 6e3c 2f73 ary_operation
(ar │ │ │ -00016c00: 726f 7773 3c2f 7370 616e 3e3c 2f61 3e20 rows │ │ │ -00016c10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -00016c50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016c60: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00016c70: 3e6c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >l T │ │ │ -00016ce0: 3c2f 7370 616e 3e3c 2f61 3e29 203a 3d3c ) :=< │ │ │ -00016cf0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00016d00: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;match < │ │ │ -00016d30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00016d40: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00016d50: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00016d60: 732e 6874 6d6c 236c 3a31 3337 223e 3c73 s.html#l:137"> │ │ │ -00016d90: 6c3c 2f73 7061 6e3e 3c2f 613e 203c 7370 l wi │ │ │ -00016dc0: 7468 3c2f 7370 616e 3e3c 6272 2f3e 0a26 th
.& │ │ │ -00016dd0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00016de0: 3b26 6e62 7370 3b7c 203c 6120 636c 6173 ; | Tnil │ │ │ -00016e50: 3c2f 7370 616e 3e3c 2f61 3e20 3d26 6774 => │ │ │ -00016e60: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; fun R │ │ │ -00016ee0: 3c2f 613e 203c 6120 6964 3d22 5227 3a31 R' = │ │ │ -00016f40: 2667 743b 203c 6120 636c 6173 733d 2269 > op │ │ │ -00016fb0: 3c2f 613e 203c 6120 636c 6173 733d 2269 R R'
. &n │ │ │ -000170a0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000170b0: 7c20 3c73 7061 6e20 636c 6173 733d 2269 | A │ │ │ -000170d0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373
: │ │ │ -00017140: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 7370 : tl => fun │ │ │ -000171d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000171f0: 523c 2f73 7061 6e3e 3c2f 613e 203c 6120 R R' =>
.  &n │ │ │ -00017270: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00017280: 266e 6273 703b 3c73 7061 6e20 636c 6173  fun x
=> < │ │ │ -00017310: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00017320: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -00017330: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -00017340: 732e 6874 6d6c 2370 6f69 6e74 7769 7365 s.html#pointwise │ │ │ -00017350: 5f65 7874 656e 7369 6f6e 3a31 3338 223e _extension:138"> │ │ │ -00017360: 3c73 7061 6e20 636c 6173 733d 2269 6422 pointwise_ex │ │ │ -00017390: 7465 6e73 696f 6e3c 2f73 7061 6e3e 3c2f tension op │ │ │ -00017430: 746c 3c2f 7370 616e 3e20 283c 6120 636c tl (R
x) (R'
x)
.&nb │ │ │ -00017600: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; end
.
..
.
..
.Poin │ │ │ -00017660: 7477 6973 6520 6c69 6674 696e 672c 2065 twise lifting, e │ │ │ -00017670: 7175 6976 616c 656e 7420 746f 2064 6f69 quivalent to doi │ │ │ -00017680: 6e67 203c 7370 616e 2063 6c61 7373 3d22 ng pointwi │ │ │ -000176c0: 7365 5f65 7874 656e 7369 6f6e 3c2f 7370 se_extension and c │ │ │ -000176e0: 6c6f 7369 6e67 2075 7369 6e67 203c 7370 losing using predicate_all │ │ │ -00017730: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2e20 . │ │ │ -00017740: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
..
.Fixpoint pointwi │ │ │ -00017800: 7365 5f6c 6966 7469 6e67 3c2f 7370 616e se_lifting (op │ │ │ -00017870: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -000178e0: 6269 6e61 7279 5f72 656c 6174 696f 6e3c binary_relation< │ │ │ -000178f0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ -00017920: 3c2f 7370 616e 3e29 2020 283c 6120 6964 ) (l : Tlist) : binary_re │ │ │ -00017a70: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation (pred │ │ │ -00017af0: 6963 6174 653c 2f73 7061 6e3e 3c2f 613e icate │ │ │ -00017b00: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00017b40: 3c73 7061 6e20 636c 6173 733d 2269 6422 l) │ │ │ -00017b70: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -00017b80: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;match l │ │ │ -00017c20: 3c73 7061 6e20 636c 6173 733d 2269 6422 with
.  &n │ │ │ -00017c60: 6273 703b 266e 6273 703b 7c20 3c61 2063 bsp; | T │ │ │ -00017cd0: 6e69 6c3c 2f73 7061 6e3e 3c2f 613e 203d nil = │ │ │ -00017ce0: 2667 743b 203c 7370 616e 2063 6c61 7373 > fun │ │ │ -00017d10: 203c 6120 6964 3d22 523a 3134 3922 2063 R R' => op R R'
.  │ │ │ -00017f20: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00017f30: 7370 3b7c 203c 7370 616e 2063 6c61 7373 sp;| A │ │ │ -00017fa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 :: │ │ │ -00017fd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 tl< │ │ │ -00017ff0: 2f73 7061 6e3e 203d 2667 743b 203c 7370 /span> => fu │ │ │ -00018020: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n R │ │ │ -00018080: 3c61 2069 643d 2252 273a 3135 3222 2063 R' =>< │ │ │ -000180e0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -000180f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00018100: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; forall │ │ │ -00018130: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 x, │ │ │ -00018190: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -000181e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000181f0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00018200: 6e22 3e70 6f69 6e74 7769 7365 5f6c 6966 n">pointwise_lif │ │ │ -00018210: 7469 6e67 3c2f 7370 616e 3e3c 2f61 3e20 ting
│ │ │ -00018220: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -00018260: 3c73 7061 6e20 636c 6173 733d 2269 6422 op │ │ │ -00018290: 3c73 7061 6e20 636c 6173 733d 2269 6422 tl< │ │ │ -000182b0: 2f73 7061 6e3e 2028 3c61 2063 6c61 7373 /span> (R x< │ │ │ -00018390: 2f61 3e29 2028 3c61 2063 6c61 7373 3d22 /a>) (R' x< │ │ │ -00018470: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -00018480: 266e 6273 703b 3c73 7061 6e20 636c 6173  end.
..
.< │ │ │ -000184c0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.The n-a │ │ │ -000184e0: 7279 2065 7175 6976 616c 656e 6365 2072 ry equivalence r │ │ │ -000184f0: 656c 6174 696f 6e2c 2064 6566 696e 6564 elation, defined │ │ │ -00018500: 2062 7920 6c69 6674 696e 6720 7468 6520 by lifting the │ │ │ -00018510: 302d 6172 7920 3c73 7061 6e20 636c 6173 0-ary < │ │ │ -00018530: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00018540: 7469 746c 653d 2276 6172 223e 6966 663c title="var">iff< │ │ │ -00018550: 2f73 7061 6e3e 3c2f 7370 616e 3e20 7265 /span> re │ │ │ -00018560: 6c61 7469 6f6e 2e20 0a3c 2f64 6976 3e0a lation. .
. │ │ │ -00018570: 3c64 6976 2063 6c61 7373 3d22 636f 6465
..
.The n- │ │ │ -00018a30: 6172 7920 696d 706c 6963 6174 696f 6e20 ary implication │ │ │ -00018a40: 7265 6c61 7469 6f6e 2c20 6465 6669 6e65 relation, define │ │ │ -00018a50: 6420 6279 206c 6966 7469 6e67 2074 6865 d by lifting the │ │ │ -00018a60: 2030 2d61 7279 203c 7370 616e 2063 6c61 0-ary │ │ │ -00018a80: 3c73 7061 6e20 636c 6173 733d 2269 6422 imp │ │ │ -00018aa0: 6c3c 2f73 7061 6e3e 3c2f 7370 616e 3e20 l │ │ │ -00018ab0: 7265 6c61 7469 6f6e 2e20 0a3c 2f64 6976 relation. .
.
..
.Notati │ │ │ -00018e10: 6f6e 7320 666f 7220 706f 696e 7477 6973 ons for pointwis │ │ │ -00018e20: 6520 6571 7569 7661 6c65 6e63 6520 616e e equivalence an │ │ │ -00018e30: 6420 696d 706c 6963 6174 696f 6e20 6f66 d implication of │ │ │ -00018e40: 2070 7265 6469 6361 7465 732e 200a 3c2f predicates. ..
..
.< │ │ │ -00018e70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00018e80: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00018e90: 4465 636c 6172 6520 5363 6f70 653c 2f73 Declare Scope
predicate_scop │ │ │ -00018ed0: 653c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a e.
.. │ │ │ -00018ee0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Infix
"<...&g │ │ │ -00018fb0: 743b 2220 3a3d 203c 6120 636c 6173 733d t;" := predic │ │ │ -00019030: 6174 655f 6571 7569 7661 6c65 6e63 653c ate_equivalence< │ │ │ -00019040: 2f73 7061 6e3e 3c2f 613e 2028 3c73 7061 /span> (at level 95, no associativit │ │ │ -00019100: 793c 2f73 7061 6e3e 2920 3a20 3c73 7061 y) : predica │ │ │ -00019130: 7465 5f73 636f 7065 3c2f 7370 616e 3e2e te_scope. │ │ │ -00019140: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Infix "-...>" │ │ │ -00019210: 203a 3d20 3c61 2063 6c61 7373 3d22 6964 := predicate │ │ │ -00019290: 5f69 6d70 6c69 6361 7469 6f6e 3c2f 7370 _implication (at
level │ │ │ -00019300: 2037 302c 203c 7370 616e 2063 6c61 7373 70, right associativity │ │ │ -00019360: 3c2f 7370 616e 3e29 203a 203c 7370 616e ) : predicat │ │ │ -00019390: 655f 7363 6f70 653c 2f73 7061 6e3e 2e3c e_scope.< │ │ │ -000193a0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Loc │ │ │ -000193d0: 616c 204f 7065 6e3c 2f73 7061 6e3e 203c al Open < │ │ │ -000193e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000193f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00019400: 5363 6f70 653c 2f73 7061 6e3e 203c 7370 Scope predic │ │ │ -00019430: 6174 655f 7363 6f70 653c 2f73 7061 6e3e ate_scope │ │ │ -00019440: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.The poin │ │ │ -00019470: 7477 6973 6520 6c69 6674 696e 6773 206f twise liftings o │ │ │ -00019480: 6620 636f 6e6a 756e 6374 696f 6e20 616e f conjunction an │ │ │ -00019490: 6420 6469 736a 756e 6374 696f 6e73 2e0a d disjunctions.. │ │ │ -000194a0: 2020 204e 6f74 6520 7468 6174 2074 6865 Note that the │ │ │ -000194b0: 7365 2061 7265 203c 7370 616e 2063 6c61 se are │ │ │ -000194d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 bin │ │ │ -000194f0: 6172 795f 6f70 6572 6174 696f 6e3c 2f73 ary_operations, bu │ │ │ -00019510: 696c 6469 6e67 206e 6577 2072 656c 6174 ilding new relat │ │ │ -00019520: 696f 6e73 206f 7574 206f 6620 6f6c 6420 ions out of old │ │ │ -00019530: 6f6e 6573 2e20 0a3c 2f64 6976 3e0a 3c64 ones. .
. │ │ │ -00019550: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Definit │ │ │ -00019580: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion predi │ │ │ -00019600: 6361 7465 5f69 6e74 6572 7365 6374 696f cate_intersectio │ │ │ -00019610: 6e3c 2f73 7061 6e3e 3c2f 613e 203a 3d20 n := │ │ │ -00019620: 3c61 2063 6c61 7373 3d22 6964 7265 6622 pointwise_exten │ │ │ -000196a0: 7369 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 sion │ │ │ -000196b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -000196e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 and.
.Definit │ │ │ -00019740: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion pre │ │ │ -000197b0: 6469 6361 7465 5f75 6e69 6f6e 3c2f 7370 dicate_union := poin │ │ │ -00019840: 7477 6973 655f 6578 7465 6e73 696f 6e3c twise_extension< │ │ │ -00019850: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> or< │ │ │ -000198b0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -000198c0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Infix "/...\" │ │ │ -00019990: 3a3d 203c 6120 636c 6173 733d 2269 6472 := predicate │ │ │ -00019a10: 5f69 6e74 6572 7365 6374 696f 6e3c 2f73 _intersection
(at level 80, right associativit │ │ │ -00019ae0: 793c 2f73 7061 6e3e 2920 3a20 3c73 7061 y) : predica │ │ │ -00019b10: 7465 5f73 636f 7065 3c2f 7370 616e 3e2e te_scope. │ │ │ -00019b20: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Infix "\.../" := │ │ │ -00019bf0: 203c 6120 636c 6173 733d 2269 6472 6566 pr │ │ │ -00019c60: 6564 6963 6174 655f 756e 696f 6e3c 2f73 edicate_union
(at level 85, right associativit │ │ │ -00019d30: 793c 2f73 7061 6e3e 2920 3a20 3c73 7061 y) : predica │ │ │ -00019d60: 7465 5f73 636f 7065 3c2f 7370 616e 3e2e te_scope. │ │ │ -00019d70: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.The alway │ │ │ -00019da0: 7320 3c73 7061 6e20 636c 6173 733d 2269 s True and a │ │ │ -00019df0: 6c77 6179 7320 3c73 7061 6e20 636c 6173 lways < │ │ │ -00019e10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00019e20: 7469 746c 653d 2276 6172 223e 4661 6c73 title="var">Fals │ │ │ -00019e30: 653c 2f73 7061 6e3e 3c2f 7370 616e 3e20 e │ │ │ -00019e40: 7072 6564 6963 6174 6573 2e20 0a3c 2f64 predicates. ..
..
.F │ │ │ -00019e90: 6978 706f 696e 743c 2f73 7061 6e3e 203c ixpoint < │ │ │ -00019ea0: 6120 6964 3d22 7472 7565 5f70 7265 6469 a id="true_predi │ │ │ -00019eb0: 6361 7465 2220 636c 6173 733d 2269 6472 cate" class="idr │ │ │ -00019ec0: 6566 2220 6872 6566 3d22 2374 7275 655f ef" href="#true_ │ │ │ -00019ed0: 7072 6564 6963 6174 6522 3e3c 7370 616e predicate">t │ │ │ -00019f00: 7275 655f 7072 6564 6963 6174 653c 2f73 rue_predicate {l │ │ │ -00019f70: 203a 203c 6120 636c 6173 733d 2269 6472 : Tlist} : predicate l │ │ │ -0001a0d0: 3c2f 613e 203a 3d3c 6272 2f3e 0a26 6e62 :=
.&nb │ │ │ -0001a0e0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; match< │ │ │ -0001a110: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> l │ │ │ -0001a180: 3c2f 613e 203c 7370 616e 2063 6c61 7373 with
. &nb │ │ │ -0001a1c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b7c sp;  | │ │ │ -0001a1d0: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ -0001a210: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001a220: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -0001a230: 6f72 223e 546e 696c 3c2f 7370 616e 3e3c or">Tnil
< │ │ │ -0001a240: 2f61 3e20 3d26 6774 3b20 3c61 2063 6c61 /a> => Tr │ │ │ -0001a2a0: 7565 3c2f 7370 616e 3e3c 2f61 3e3c 6272 ue
.  & │ │ │ -0001a2c0: 6e62 7370 3b26 6e62 7370 3b7c 203c 7370 nbsp; | A :: tl = │ │ │ -0001a390: 2667 743b 203c 7370 616e 2063 6c61 7373 > fun │ │ │ -0001a3c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0001a3e0: 2f73 7061 6e3e 203d 2667 743b 2040 3c61 /span> => @tr │ │ │ -0001a460: 7565 5f70 7265 6469 6361 7465 3c2f 7370 ue_predicate tl.   │ │ │ -0001a4b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 end.
..
.Fixpoi │ │ │ -0001a510: 6e74 3c2f 7370 616e 3e20 3c61 2069 643d nt fals │ │ │ -0001a580: 655f 7072 6564 6963 6174 653c 2f73 7061 e_predicate {l : │ │ │ -0001a5f0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0001a630: 3c73 7061 6e20 636c 6173 733d 2269 6422 Tlist< │ │ │ -0001a660: 2f61 3e7d 203a 203c 6120 636c 6173 733d /a>} : │ │ │ -0001a6d0: 7072 6564 6963 6174 653c 2f73 7061 6e3e predicate │ │ │ -0001a6e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 l :=
.  │ │ │ -0001a760: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; match
l with< │ │ │ -0001a830: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001a840: 3b26 6e62 7370 3b26 6e62 7370 3b7c 203c ;  | < │ │ │ -0001a850: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001a860: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0001a870: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0001a880: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil => Fal │ │ │ -0001a920: 7365 3c2f 7370 616e 3e3c 2f61 3e3c 6272 se
.  & │ │ │ -0001a940: 6e62 7370 3b26 6e62 7370 3b7c 203c 7370 nbsp; | A :: tl = │ │ │ -0001aa10: 2667 743b 203c 7370 616e 2063 6c61 7373 > fun │ │ │ -0001aa40: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0001aa60: 2f73 7061 6e3e 203d 2667 743b 2040 3c61 /span> => @f │ │ │ -0001aae0: 616c 7365 5f70 7265 6469 6361 7465 3c2f alse_predicate tl │ │ │ -0001ab20: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0001ab30: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;end...
.Nota │ │ │ -0001ab90: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion &q │ │ │ -0001ac20: 756f 743b 3c2f 7370 616e 3e3c 2f61 3ee2 uot;
. │ │ │ -0001ac30: 8899 e28a a4e2 8899 2220 3a3d 203c 6120 ........" := true_pr │ │ │ -0001acb0: 6564 6963 6174 653c 2f73 7061 6e3e 3c2f edicate : predicate_scop │ │ │ -0001acf0: 653c 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c e.
.< │ │ │ -0001ad00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001ad10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001ad20: 4e6f 7461 7469 6f6e 3c2f 7370 616e 3e20 Notation │ │ │ -0001ad30: 3c61 2069 643d 2232 6630 6236 6265 3439
│ │ │ -0001ad90: 3c73 7061 6e20 636c 6173 733d 2269 6422 "< │ │ │ -0001adc0: 2f61 3ee2 8899 e28a a5e2 8899 2220 3a3d /a>........." := │ │ │ -0001add0: 203c 6120 636c 6173 733d 2269 6472 6566 fa │ │ │ -0001ae40: 6c73 655f 7072 6564 6963 6174 653c 2f73 lse_predicate
: predicat │ │ │ -0001ae80: 655f 7363 6f70 653c 2f73 7061 6e3e 2e3c e_scope.< │ │ │ -0001ae90: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Predicate │ │ │ -0001aec0: 6571 7569 7661 6c65 6e63 6520 6973 2061 equivalence is a │ │ │ -0001aed0: 6e20 6571 7569 7661 6c65 6e63 652c 2061 n equivalence, a │ │ │ -0001aee0: 6e64 2070 7265 6469 6361 7465 2069 6d70 nd predicate imp │ │ │ -0001aef0: 6c69 6361 7469 6f6e 2064 6566 696e 6573 lication defines │ │ │ -0001af00: 2061 2070 7265 6f72 6465 722e 200a 3c2f a preorder. ..
..
.# │ │ │ -0001af30: 5b3c 7370 616e 2063 6c61 7373 3d22 6964 [gl │ │ │ -0001af50: 6f62 616c 3c2f 7370 616e 3e5d 3c62 722f obal]
.P │ │ │ -0001af80: 726f 6772 616d 3c2f 7370 616e 3e20 3c73 rogram I │ │ │ -0001afb0: 6e73 7461 6e63 653c 2f73 7061 6e3e 203c nstance < │ │ │ -0001afc0: 6120 6964 3d22 7072 6564 6963 6174 655f a id="predicate_ │ │ │ -0001afd0: 6571 7569 7661 6c65 6e63 655f 6571 7569 equivalence_equi │ │ │ -0001afe0: 7661 6c65 6e63 6522 2063 6c61 7373 3d22 valence" class=" │ │ │ -0001aff0: 6964 7265 6622 2068 7265 663d 2223 7072 idref" href="#pr │ │ │ -0001b000: 6564 6963 6174 655f 6571 7569 7661 6c65 edicate_equivale │ │ │ -0001b010: 6e63 655f 6571 7569 7661 6c65 6e63 6522 nce_equivalence" │ │ │ -0001b020: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >predicate_equ │ │ │ -0001b050: 6976 616c 656e 6365 5f65 7175 6976 616c ivalence_equival │ │ │ -0001b060: 656e 6365 3c2f 7370 616e 3e3c 2f61 3e20 ence │ │ │ -0001b070: 7b3c 6120 6964 3d22 6c3a 3136 3222 2063 {l} :
. │ │ │ -0001b0d0: 266e 6273 703b 266e 6273 703b 3c61 2063    │ │ │ -0001b140: 4571 7569 7661 6c65 6e63 653c 2f73 7061 Equivalence (@pred │ │ │ -0001b1d0: 6963 6174 655f 6571 7569 7661 6c65 6e63 icate_equivalenc │ │ │ -0001b1e0: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e l< │ │ │ -0001b250: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
..
. │ │ │ -0001b270: 235b 3c73 7061 6e20 636c 6173 733d 2269 #[g │ │ │ -0001b290: 6c6f 6261 6c3c 2f73 7061 6e3e 5d3c 6272 lobal]
. │ │ │ -0001b2c0: 5072 6f67 7261 6d3c 2f73 7061 6e3e 203c Program < │ │ │ -0001b2d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001b2e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001b2f0: 496e 7374 616e 6365 3c2f 7370 616e 3e20 Instance │ │ │ -0001b300: 3c61 2069 643d 2270 7265 6469 6361 7465 pr │ │ │ -0001b380: 6564 6963 6174 655f 696d 706c 6963 6174 edicate_implicat │ │ │ -0001b390: 696f 6e5f 7072 656f 7264 6572 3c2f 7370 ion_preorder {l} │ │ │ -0001b400: 203a 3c62 722f 3e0a 266e 6273 703b 266e :
. &n │ │ │ -0001b410: 6273 703b 3c61 2063 6c61 7373 3d22 6964 bsp;PreOrder
(@pr │ │ │ -0001b500: 6564 6963 6174 655f 696d 706c 6963 6174 edicate_implicat │ │ │ -0001b510: 696f 6e3c 2f73 7061 6e3e 3c2f 613e 203c ion < │ │ │ -0001b520: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001b530: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0001b540: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0001b550: 732e 6874 6d6c 236c 3a31 3633 223e 3c73 s.html#l:163"> │ │ │ -0001b580: 6c3c 2f73 7061 6e3e 3c2f 613e 292e 3c62 l)...
.
..
.We define t │ │ │ -0001b5c0: 6865 2076 6172 696f 7573 206f 7065 7261 he various opera │ │ │ -0001b5d0: 7469 6f6e 7320 7768 6963 6820 6465 6669 tions which defi │ │ │ -0001b5e0: 6e65 2074 6865 2061 6c67 6562 7261 206f ne the algebra o │ │ │ -0001b5f0: 6e20 6269 6e61 7279 2072 656c 6174 696f n binary relatio │ │ │ -0001b600: 6e73 2c0a 2020 2066 726f 6d20 7468 6520 ns,. from the │ │ │ -0001b610: 6765 6e65 7261 6c20 6f6e 6573 2e20 0a3c general ones. .< │ │ │ -0001b620: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ -0001b640: 3c73 7061 6e20 636c 6173 733d 2269 6422 Section │ │ │ -0001b670: 3c61 2069 643d 2242 696e 6172 7922 2063 Bin │ │ │ -0001b6c0: 6172 793c 2f73 7061 6e3e 3c2f 613e 2e3c ary.< │ │ │ -0001b6d0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001b6e0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Context │ │ │ -0001b710: 207b 3c61 2069 643d 2242 696e 6172 792e {A │ │ │ -0001b770: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Type} │ │ │ -0001b7a0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 266e .
..
.&n │ │ │ -0001b7b0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -0001b7e0: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition relatio │ │ │ -0001b860: 6e5f 6571 7569 7661 6c65 6e63 653c 2f73 n_equivalence
: relation │ │ │ -0001b8f0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (relati │ │ │ -0001b970: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 on │ │ │ -0001b9c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ -0001b9f0: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ -0001ba00: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0001ba10: 403c 6120 636c 6173 733d 2269 6472 6566 @ │ │ │ -0001ba60: 3c73 7061 6e20 636c 6173 733d 2269 6422 predicate_eq │ │ │ -0001ba90: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ -0001baa0: 3c2f 613e 2028 3c73 7061 6e20 636c 6173 (_ │ │ │ -0001bb10: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ -0001bb40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001bb50: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_::Tnil< │ │ │ -0001bc40: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
. & │ │ │ -0001bc60: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Global Ins │ │ │ -0001bc90: 7461 6e63 653c 2f73 7061 6e3e 203c 6120 tance relatio │ │ │ -0001bd30: 6e5f 6571 7569 7661 6c65 6e63 655f 7265 n_equivalence_re │ │ │ -0001bd40: 7772 6974 655f 7265 6c61 7469 6f6e 3c2f write_relation: RewriteRelati │ │ │ -0001bdd0: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 on │ │ │ -0001be50: 7265 6c61 7469 6f6e 5f65 7175 6976 616c relation_equival │ │ │ -0001be60: 656e 6365 3c2f 7370 616e 3e3c 2f61 3e20 ence │ │ │ -0001be70: 3a3d 207b 7d2e 3c62 722f 3e0a 0a3c 6272 := {}.
..
.  < │ │ │ -0001be90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001bea0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001beb0: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition re │ │ │ -0001bf30: 6c61 7469 6f6e 5f63 6f6e 6a75 6e63 7469 lation_conjuncti │ │ │ -0001bf40: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 283c on (< │ │ │ -0001bf50: 6120 6964 3d22 523a 3136 3522 2063 6c61 a id="R:165" cla │ │ │ -0001bf60: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0001bf70: 2223 523a 3136 3522 3e3c 7370 616e 2063 "#R:165">R : relation A) (R' : relation A) : relati │ │ │ -0001c260: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 on │ │ │ -0001c2b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A : │ │ │ -0001c2e0: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ -0001c2f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b40 sp;  @ │ │ │ -0001c300: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ -0001c350: 3c73 7061 6e20 636c 6173 733d 2269 6422 predicate_in │ │ │ -0001c380: 7465 7273 6563 7469 6f6e 3c2f 7370 616e tersection (A:: │ │ │ -0001c470: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c A │ │ │ -0001c4e0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -0001c530: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ -0001c560: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001c570: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0001c580: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0001c590: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil) R │ │ │ -0001c640: 203c 6120 636c 6173 733d 2269 6472 6566 R' │ │ │ -0001c6b0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 266e .
..
.&n │ │ │ -0001c6c0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -0001c6f0: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition relatio │ │ │ -0001c770: 6e5f 6469 736a 756e 6374 696f 6e3c 2f73 n_disjunction (R │ │ │ -0001c7e0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -0001c850: 7265 6c61 7469 6f6e 3c2f 7370 616e 3e3c relation< │ │ │ -0001c860: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A │ │ │ -0001c8d0: 3c2f 613e 2920 283c 6120 6964 3d22 5227 ) (R' │ │ │ -0001c930: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -0001c9a0: 7265 6c61 7469 6f6e 3c2f 7370 616e 3e3c relation< │ │ │ -0001c9b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A │ │ │ -0001ca20: 3c2f 613e 2920 3a20 3c61 2063 6c61 7373 ) : relation A :=
.  &n │ │ │ -0001cb30: 6273 703b 266e 6273 703b 403c 6120 636c bsp; @predicat │ │ │ -0001cbb0: 655f 756e 696f 6e3c 2f73 7061 6e3e 3c2f e_union (A │ │ │ -0001cc30: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ::A: │ │ │ -0001cd80: 3a3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 :T │ │ │ -0001cdf0: 6e69 6c3c 2f73 7061 6e3e 3c2f 613e 2920 nil) │ │ │ -0001ce00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -0001ce40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001ce50: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0001ce60: 3e52 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >R │ │ │ -0001ced0: 5227 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 R'...
.
..
.Relation eq │ │ │ -0001cf10: 7569 7661 6c65 6e63 6520 6973 2061 6e20 uivalence is an │ │ │ -0001cf20: 6571 7569 7661 6c65 6e63 652c 2061 6e64 equivalence, and │ │ │ -0001cf30: 2073 7562 7265 6c61 7469 6f6e 2064 6566 subrelation def │ │ │ -0001cf40: 696e 6573 2061 2070 6172 7469 616c 206f ines a partial o │ │ │ -0001cf50: 7264 6572 2e20 0a3c 2f64 6976 3e0a 3c64 rder. .
. │ │ │ -0001cf70: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -0001cf80: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Global Inst │ │ │ -0001cfb0: 616e 6365 3c2f 7370 616e 3e20 3c61 2069 ance re │ │ │ -0001d040: 6c61 7469 6f6e 5f65 7175 6976 616c 656e lation_equivalen │ │ │ -0001d050: 6365 5f65 7175 6976 616c 656e 6365 3c2f ce_equivalence :
│ │ │ -0001d070: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -0001d080: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp; Equ │ │ │ -0001d0f0: 6976 616c 656e 6365 3c2f 7370 616e 3e3c ivalence< │ │ │ -0001d100: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> relation_e │ │ │ -0001d180: 7175 6976 616c 656e 6365 3c2f 7370 616e quivalence.
. ..   │ │ │ -0001d1b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Global Instance │ │ │ -0001d1e0: 3c2f 7370 616e 3e20 3c61 2069 643d 2272 relation_imp │ │ │ -0001d270: 6c69 6361 7469 6f6e 5f70 7265 6f72 6465 lication_preorde │ │ │ -0001d280: 723c 2f73 7061 6e3e 3c2f 613e 203a 203c r : < │ │ │ -0001d290: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001d2a0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0001d2b0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0001d2c0: 732e 6874 6d6c 2350 7265 4f72 6465 7222 s.html#PreOrder" │ │ │ -0001d2d0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 > │ │ │ -0001d2f0: 5072 654f 7264 6572 3c2f 7370 616e 3e3c PreOrder< │ │ │ -0001d300: 2f61 3e20 2840 3c61 2063 6c61 7373 3d22 /a> (@subrel │ │ │ -0001d370: 6174 696f 6e3c 2f73 7061 6e3e 3c2f 613e ation │ │ │ -0001d380: 203c 6120 636c 6173 733d 2269 6472 6566 A).
. .
│ │ │ -0001d400: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.< │ │ │ -0001d430: 6833 2063 6c61 7373 3d22 7365 6374 696f h3 class="sectio │ │ │ -0001d440: 6e22 3e50 6172 7469 616c 204f 7264 6572 n">Partial Order │ │ │ -0001d450: 2e3c 2f68 333e 0a0a 2020 2041 2070 6172 ... A par │ │ │ -0001d460: 7469 616c 206f 7264 6572 2069 7320 6120 tial order is a │ │ │ -0001d470: 7072 656f 7264 6572 2077 6869 6368 2069 preorder which i │ │ │ -0001d480: 7320 6164 6469 7469 6f6e 616c 6c79 2061 s additionally a │ │ │ -0001d490: 6e74 6973 796d 6d65 7472 6963 2e0a 2020 ntisymmetric.. │ │ │ -0001d4a0: 2057 6520 6769 7665 2061 6e20 6571 7569 We give an equi │ │ │ -0001d4b0: 7661 6c65 6e74 2064 6566 696e 6974 696f valent definitio │ │ │ -0001d4c0: 6e2c 2075 702d 746f 2061 6e20 6571 7569 n, up-to an equi │ │ │ -0001d4d0: 7661 6c65 6e63 6520 7265 6c61 7469 6f6e valence relation │ │ │ -0001d4e0: 0a20 2020 6f6e 2074 6865 2063 6172 7269 . on the carri │ │ │ -0001d4f0: 6572 2e20 0a3c 2f64 6976 3e0a 3c64 6976 er. .
.
.. │ │ │ -0001d510: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0001d520: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Class │ │ │ -0001d550: 3c61 2069 643d 2250 6172 7469 616c 4f72 PartialOrd │ │ │ -0001d5e0: 6572 3c2f 7370 616e 3e3c 2f73 7061 6e3e er │ │ │ -0001d5f0: 3c2f 613e 203c 6120 6964 3d22 6571 413a eqA `{equ │ │ │ -0001d6b0: 203a 203c 6120 636c 6173 733d 2269 6472 : Equivalen │ │ │ -0001d720: 6365 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ce │ │ │ -0001d770: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -0001d7a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001d7b0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ -0001d7c0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ -0001d7d0: 732e 6874 6d6c 2365 7141 3a31 3639 223e s.html#eqA:169"> │ │ │ -0001d7e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 eqA │ │ │ -0001d810: 7d20 3c61 2069 643d 2252 3a31 3731 2220 } R
`{preo< │ │ │ -0001d8c0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -0001d910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001d920: 7469 746c 653d 2263 6c61 7373 223e 5072 title="class">Pr │ │ │ -0001d930: 654f 7264 6572 3c2f 7370 616e 3e3c 2f61 eOrder A R │ │ │ -0001da20: 7d20 3a3d 3c62 722f 3e0a 266e 6273 703b } :=
.  │ │ │ -0001da30: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0001da40: 703b 3c61 2069 643d 2270 6172 7469 616c p;partial_ord │ │ │ -0001db00: 6572 5f65 7175 6976 616c 656e 6365 3c2f er_equivalence │ │ │ -0001db20: 203a 203c 6120 636c 6173 733d 2269 6472 : relation_eq │ │ │ -0001dba0: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ -0001dbb0: 3c2f 613e 203c 6120 636c 6173 733d 2269 eqA (relati │ │ │ -0001dca0: 6f6e 5f63 6f6e 6a75 6e63 7469 6f6e 3c2f on_conjunction R (flip R) │ │ │ -0001de00: 292e 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c ).
..
.< │ │ │ -0001de10: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.The equ │ │ │ -0001de30: 6976 616c 656e 6365 2070 726f 6f66 2069 ivalence proof i │ │ │ -0001de40: 7320 7375 6666 6963 6965 6e74 2066 6f72 s sufficient for │ │ │ -0001de50: 2070 726f 7669 6e67 2074 6861 7420 3c73 proving that R must be a. │ │ │ -0001deb0: 206d 6f72 7068 6973 6d20 666f 7220 6571 morphism for eq │ │ │ -0001dec0: 7569 7661 6c65 6e63 6520 2873 6565 204d uivalence (see M │ │ │ -0001ded0: 6f72 7068 6973 6d73 292e 2020 4974 2069 orphisms). It i │ │ │ -0001dee0: 7320 616c 736f 2073 7566 6669 6369 656e s also sufficien │ │ │ -0001def0: 7420 746f 0a20 2020 7368 6f77 2074 6861 t to. show tha │ │ │ -0001df00: 7420 3c73 7061 6e20 636c 6173 733d 2269 t R │ │ │ -0001df40: 3c2f 7370 616e 3e20 6973 2061 6e74 6973 is antis │ │ │ -0001df50: 796d 6d65 7472 6963 2077 2e72 2e74 2e20 ymmetric w.r.t. │ │ │ -0001df60: 3c73 7061 6e20 636c 6173 733d 2269 6e6c eqA │ │ │ -0001dfa0: 3c2f 7370 616e 3e20 0a3c 2f64 6976 3e0a .
. │ │ │ -0001dfb0: 3c64 6976 2063 6c61 7373 3d22 636f 6465
..
.  │ │ │ -0001dfd0: 266e 6273 703b 3c73 7061 6e20 636c 6173  Global In │ │ │ -0001e000: 7374 616e 6365 3c2f 7370 616e 3e20 3c61 stance partia │ │ │ -0001e080: 6c5f 6f72 6465 725f 616e 7469 7379 6d3c l_order_antisym< │ │ │ -0001e090: 2f73 7061 6e3e 3c2f 613e 2060 283c 6120 /span> `(PartialOr │ │ │ -0001e0f0: 6465 723c 2f73 7061 6e3e 3c2f 613e 203c der < │ │ │ -0001e100: 6120 6964 3d22 6571 413a 3137 3522 2063 a id="eqA:175" c │ │ │ -0001e110: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ -0001e120: 663d 2223 6571 413a 3137 3522 3e3c 7370 f="#eqA:175">eqA < │ │ │ -0001e180: 6120 6964 3d22 523a 3137 3722 2063 6c61 a id="R:177" cla │ │ │ -0001e190: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0001e1a0: 2223 523a 3137 3722 3e3c 7370 616e 2063 "#R:177">R
) : Antisymmetric< │ │ │ -0001e270: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ -0001e2e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 e │ │ │ -0001e350: 7141 3c2f 7370 616e 3e3c 2f61 3e20 3c61 qA R │ │ │ -0001e3c0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
. & │ │ │ -0001e3e0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Lemma Partia │ │ │ -0001e480: 6c4f 7264 6572 5f69 6e76 6572 7365 3c2f lOrder_inverse `(PartialOrd │ │ │ -0001e4f0: 6572 3c2f 7370 616e 3e3c 2f61 3e20 3c61 er eqA R) : │ │ │ -0001e660: 5061 7274 6961 6c4f 7264 6572 3c2f 7370 PartialOrder eqA ( │ │ │ -0001e720: 3c73 7061 6e20 636c 6173 733d 2269 6422 flip< │ │ │ -0001e750: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R).
. End Binary
.
.. │ │ │ -0001e870: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Hint Extern
3 (Par │ │ │ -0001e970: 7469 616c 4f72 6465 723c 2f73 7061 6e3e tialOrder │ │ │ -0001e980: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ -0001e9e0: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ -0001e9f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001ea00: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_)) => class_ │ │ │ -0001ea40: 6170 706c 793c 2f73 7061 6e3e 203c 7370 apply Partia │ │ │ -0001ea70: 6c4f 7264 6572 5f69 6e76 6572 7365 3c2f lOrder_inverse : typeclass_i │ │ │ -0001eab0: 6e73 7461 6e63 6573 3c2f 7370 616e 3e2e nstances. │ │ │ -0001eac0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.The parti │ │ │ -0001eaf0: 616c 206f 7264 6572 2064 6566 696e 6564 al order defined │ │ │ -0001eb00: 2062 7920 7375 6272 656c 6174 696f 6e20 by subrelation │ │ │ -0001eb10: 616e 6420 7265 6c61 7469 6f6e 2065 7175 and relation equ │ │ │ -0001eb20: 6976 616c 656e 6365 2e20 0a3c 2f64 6976 ivalence. .
.
..
.#[globa │ │ │ -0001eb70: 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c l]
.< │ │ │ -0001eb80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001eb90: 7469 746c 653d 2276 6172 223e 5072 6f67 title="var">Prog │ │ │ -0001eba0: 7261 6d3c 2f73 7061 6e3e 203c 7370 616e ram Inst │ │ │ -0001ebd0: 616e 6365 3c2f 7370 616e 3e20 3c61 2069 ance │ │ │ -0001ec50: 7375 6272 656c 6174 696f 6e5f 7061 7274 subrelation_part │ │ │ -0001ec60: 6961 6c5f 6f72 6465 723c 2f73 7061 6e3e ial_order │ │ │ -0001ec70: 3c2f 613e 207b 3c61 2069 643d 2241 3a31 { │ │ │ -0001eca0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0001ecc0: 413c 2f73 7061 6e3e 3c2f 613e 7d20 3a3c A} :< │ │ │ -0001ecd0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001ece0: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;PartialOrd │ │ │ -0001ed50: 6572 3c2f 7370 616e 3e3c 2f61 3e20 2840 er (@ │ │ │ -0001ed60: 3c61 2063 6c61 7373 3d22 6964 7265 6622 relation_equiv │ │ │ -0001ede0: 616c 656e 6365 3c2f 7370 616e 3e3c 2f61 alence A) │ │ │ -0001ee60: 203c 6120 636c 6173 733d 2269 6472 6566 subrelation │ │ │ -0001eed0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
..
. │ │ │ -0001eef0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Global Typeclas │ │ │ -0001ef20: 7365 7320 4f70 6171 7565 3c2f 7370 616e ses Opaque a │ │ │ -0001ef50: 7272 6f77 733c 2f73 7061 6e3e 203c 7370 rrows predic │ │ │ -0001ef80: 6174 655f 696d 706c 6963 6174 696f 6e3c ate_implication< │ │ │ -0001ef90: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> predicate_eq │ │ │ -0001efc0: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ -0001efd0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0001efe0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0001eff0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0001f000: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0001f010: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  relat │ │ │ -0001f040: 696f 6e5f 6571 7569 7661 6c65 6e63 653c ion_equivalence< │ │ │ -0001f050: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> pointwise_li │ │ │ -0001f080: 6674 696e 673c 2f73 7061 6e3e 2e3c 6272 fting.
..
..
│ │ │ -0001f0a0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Register r │ │ │ -0001f0f0: 656c 6174 696f 6e3c 2f73 7061 6e3e 203c elation < │ │ │ -0001f100: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001f110: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001f120: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as rewrite.p │ │ │ -0001f150: 726f 702e 7265 6c61 7469 6f6e 3c2f 7370 rop.relation
.
.Regis │ │ │ -0001f190: 7465 723c 2f73 7061 6e3e 203c 7370 616e ter subrelat │ │ │ -0001f1c0: 696f 6e3c 2f73 7061 6e3e 203c 7370 616e ion as rewrite.prop. │ │ │ -0001f220: 7375 6272 656c 6174 696f 6e3c 2f73 7061 subrelation.
.Regist │ │ │ -0001f260: 6572 3c2f 7370 616e 3e20 3c73 7061 6e20 er Reflexive │ │ │ -0001f290: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ -0001f2e0: 7265 7772 6974 652e 7072 6f70 2e52 6566 rewrite.prop.Ref │ │ │ -0001f2f0: 6c65 7869 7665 3c2f 7370 616e 3e2e 3c62 lexive..Register
reflexivity │ │ │ -0001f360: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ -0001f3b0: 7265 7772 6974 652e 7072 6f70 2e72 6566 rewrite.prop.ref │ │ │ -0001f3c0: 6c65 7869 7669 7479 3c2f 7370 616e 3e2e lexivity. │ │ │ -0001f3d0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ -0001f400: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Symmetric
as │ │ │ -0001f460: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -0001f480: 7269 7465 2e70 726f 702e 5379 6d6d 6574 rite.prop.Symmet │ │ │ -0001f490: 7269 633c 2f73 7061 6e3e 2e3c 6272 2f3e ric.
│ │ │ -0001f4a0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Register symmetry as rewrit │ │ │ -0001f550: 652e 7072 6f70 2e73 796d 6d65 7472 793c e.prop.symmetry< │ │ │ -0001f560: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.Re │ │ │ -0001f590: 6769 7374 6572 3c2f 7370 616e 3e20 3c73 gister Trans │ │ │ -0001f5c0: 6974 6976 653c 2f73 7061 6e3e 203c 7370 itive as │ │ │ -0001f5f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c rewrite.pro │ │ │ -0001f620: 702e 5472 616e 7369 7469 7665 3c2f 7370 p.Transitive.
.Regis │ │ │ -0001f660: 7465 723c 2f73 7061 6e3e 203c 7370 616e ter trans │ │ │ -0001f690: 6974 6976 6974 793c 2f73 7061 6e3e 203c itivity < │ │ │ -0001f6a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001f6b0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001f6c0: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as rewrite.p │ │ │ -0001f6f0: 726f 702e 7472 616e 7369 7469 7669 7479 rop.transitivity │ │ │ -0001f700: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 3c2f .
..
.
. │ │ │ -0001f750: 2020 2020 3c64 6976 2063 6c61 7373 3d22
. │ │ │ -0001f770: 2020 3c68 3220 636c 6173 733d 2274 6974

Navigation. . │ │ │ -0001f7c0: 3c75 6c20 636c 6173 733d 226d 656e 7522

. │ │ │ -0001f910: 2020 2020 3c2f 6469 763e 0a0a 2020 3c2f
.. ..
. . . .
...... │ │ │ +000006d0: 6c61 6238 3433 223e 3c2f 613e 3c68 3120 lab843">

│ │ │ +000006f0: 5479 7065 636c 6173 732d 6261 7365 6420 Typeclass-based │ │ │ +00000700: 7265 6c61 7469 6f6e 732c 2074 6163 7469 relations, tacti │ │ │ +00000710: 6373 2061 6e64 2073 7461 6e64 6172 6420 cs and standard │ │ │ +00000720: 696e 7374 616e 6365 733c 2f68 313e 0a0a instances

.. │ │ │ +00000730: 0a3c 6469 7620 636c 6173 733d 2270 6172 .
. │ │ │ +00000750: 0a20 2020 5468 6973 2069 7320 7468 6520 . This is the │ │ │ +00000760: 6261 7369 6320 7468 656f 7279 206e 6565 basic theory nee │ │ │ +00000770: 6465 6420 746f 2066 6f72 6d61 6c69 7a65 ded to formalize │ │ │ +00000780: 206d 6f72 7068 6973 6d73 2061 6e64 2073 morphisms and s │ │ │ +00000790: 6574 6f69 6473 2e0a 0a3c 6469 7620 636c etoids...
│ │ │ +000007b0: 203c 2f64 6976 3e0a 0a20 2020 4175 7468
.. Auth │ │ │ +000007c0: 6f72 3a20 4d61 7474 6869 6575 2053 6f7a or: Matthieu Soz │ │ │ +000007d0: 6561 750a 2020 2049 6e73 7469 7475 7469 eau. Instituti │ │ │ +000007e0: 6f6e 3a20 4c52 492c 2043 4e52 5320 554d on: LRI, CNRS UM │ │ │ +000007f0: 5220 3836 3233 202d 2055 6e69 7665 7273 R 8623 - Univers │ │ │ +00000800: 6974 7920 5061 7269 7320 5375 640a 0a3c ity Paris Sud..< │ │ │ +00000810: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ +00000830: 3c73 7061 6e20 636c 6173 733d 2269 6422 Require │ │ │ +00000860: 3c73 7061 6e20 636c 6173 733d 2269 6422 Export < │ │ │ +00000890: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000008a0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +000008b0: 732e 496e 6974 2e68 746d 6c23 223e 3c73 s.Init.html#">C │ │ │ +000008e0: 6f71 2e43 6c61 7373 6573 2e49 6e69 743c oq.Classes.Init< │ │ │ +000008f0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00000900: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Require │ │ │ +00000930: 203c 7370 616e 2063 6c61 7373 3d22 6964 Import │ │ │ +00000960: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Coq.Program.Ba │ │ │ +000009c0: 7369 6373 3c2f 7370 616e 3e3c 2f61 3e2e sics. │ │ │ +000009d0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Require Import
Coq.Prog │ │ │ +00000a90: 7261 6d2e 5461 6374 6963 733c 2f73 7061 ram.Tactics.
.Re │ │ │ +00000ad0: 7175 6972 653c 2f73 7061 6e3e 203c 7370 quire Im │ │ │ +00000b00: 706f 7274 3c2f 7370 616e 3e20 3c61 2063 port Co │ │ │ +00000b70: 712e 5265 6c61 7469 6f6e 732e 5265 6c61 q.Relations.Rela │ │ │ +00000b80: 7469 6f6e 5f44 6566 696e 6974 696f 6e73 tion_Definitions │ │ │ +00000b90: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Genera │ │ │ +00000bd0: 6c69 7a61 626c 6520 5661 7269 6162 6c65 lizable Variable │ │ │ +00000be0: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s A < │ │ │ +00000c10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00000c20: 7469 746c 653d 2276 6172 223e 423c 2f73 title="var">B
C D │ │ │ +00000c80: 203c 7370 616e 2063 6c61 7373 3d22 6964 R< │ │ │ +00000ca0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> S T │ │ │ +00000d10: 553c 2f73 7061 6e3e 203c 7370 616e 2063 U l < │ │ │ +00000d40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00000d50: 7469 746c 653d 2276 6172 223e 6571 413c title="var">eqA< │ │ │ +00000d60: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> eqB < │ │ │ +00000d90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00000da0: 7469 746c 653d 2276 6172 223e 6571 433c title="var">eqC< │ │ │ +00000db0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> eqD.< │ │ │ +00000de0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.We allow t │ │ │ +00000e10: 6f20 756e 666f 6c64 2074 6865 203c 7370 o unfold the relation defini │ │ │ +00000e70: 7469 6f6e 2077 6869 6c65 2064 6f69 6e67 tion while doing │ │ │ +00000e80: 206d 6f72 7068 6973 6d20 7365 6172 6368 morphism search │ │ │ +00000e90: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...Section Def │ │ │ +00000f30: 733c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 s.
.  < │ │ │ +00000f50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00000f60: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00000f70: 436f 6e74 6578 743c 2f73 7061 6e3e 207b Context { │ │ │ +00000f80: 3c61 2069 643d 2244 6566 732e 4122 2063 A< │ │ │ +00000fd0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Ty │ │ │ +00001000: 7065 3c2f 7370 616e 3e7d 2e3c 6272 2f3e pe}.
│ │ │ +00001010: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ +00001020: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.We rebind rela │ │ │ +00001040: 7469 6f6e 616c 2070 726f 7065 7274 6965 tional propertie │ │ │ +00001050: 7320 696e 2073 6570 6172 6174 6520 636c s in separate cl │ │ │ +00001060: 6173 7365 7320 746f 2062 6520 6162 6c65 asses to be able │ │ │ +00001070: 2074 6f20 6f76 6572 6c6f 6164 2065 6163 to overload eac │ │ │ +00001080: 6820 7072 6f6f 662e 200a 3c2f 6469 763e h proof. .
│ │ │ +00001090: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.  │ │ │ +000010b0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Class
Reflexive (< │ │ │ +00001180: 6120 6964 3d22 523a 3222 2063 6c61 7373 a id="R:2" class │ │ │ +00001190: 3d22 6964 7265 6622 2068 7265 663d 2223 ="idref" href="# │ │ │ +000011a0: 523a 3222 3e3c 7370 616e 2063 6c61 7373 R:2">R : relation │ │ │ +00001250: 3c2f 613e 203c 6120 636c 6173 733d 2269 A< │ │ │ +000012c0: 2f61 3e29 203a 3d3c 6272 2f3e 0a26 6e62 /a>) :=
.&nb │ │ │ +000012d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000012e0: 6e62 7370 3b3c 6120 6964 3d22 7265 666c nbsp;
re │ │ │ +00001370: 666c 6578 6976 6974 793c 2f73 7061 6e3e flexivity │ │ │ +00001380: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +000013b0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall x │ │ │ +00001410: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A │ │ │ +00001480: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , < │ │ │ +000014c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000014d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000014e0: 3e52 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >R x x.
..
.  < │ │ │ +000015e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000015f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00001600: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition comple │ │ │ +00001670: 6d65 6e74 3c2f 7370 616e 3e3c 2f61 3e20 ment │ │ │ +00001680: 283c 6120 6964 3d22 523a 3622 2063 6c61 (R< │ │ │ +000016d0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : < │ │ │ +00001720: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00001730: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00001740: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A) : relation A
:= fun │ │ │ +000018e0: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 x< │ │ │ +00001930: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> y =& │ │ │ +00001990: 6774 3b20 3c61 2063 6c61 7373 3d22 6964 gt; R │ │ │ +00001a00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +00001a60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 y - │ │ │ +00001b40: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00001b50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 False.
..
.
..
.Opa │ │ │ +00001be0: 7175 6520 666f 7220 7072 6f6f 662d 7365 que for proof-se │ │ │ +00001bf0: 6172 6368 2e20 0a3c 2f64 6976 3e0a 3c64 arch. .
. │ │ │ +00001c10: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Ty │ │ │ +00001c40: 7065 636c 6173 7365 7320 4f70 6171 7565 peclasses Opaque │ │ │ +00001c50: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c complement< │ │ │ +00001c80: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...
..
.Th │ │ │ +00001cb0: 6573 6520 6172 6520 636f 6e76 6572 7469 ese are converti │ │ │ +00001cc0: 626c 652e 200a 3c2f 6469 763e 0a3c 6469 ble. .
.. │ │ │ +00001ce0: 266e 6273 703b 266e 6273 703b 3c73 7061   Lem │ │ │ +00001d10: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma com │ │ │ +00001d80: 706c 656d 656e 745f 696e 7665 7273 653c plement_inverse< │ │ │ +00001d90: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R : │ │ │ +00001df0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 compleme │ │ │ +00001e60: 6e74 3c2f 7370 616e 3e3c 2f61 3e20 283c nt (< │ │ │ +00001e70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00001e80: 6872 6566 3d22 436f 712e 5072 6f67 7261 href="Coq.Progra │ │ │ +00001e90: 6d2e 4261 7369 6373 2e68 746d 6c23 666c m.Basics.html#fl │ │ │ +00001ea0: 6970 223e 3c73 7061 6e20 636c 6173 733d ip">flip R< │ │ │ +00001f40: 2f61 3e29 203c 6120 636c 6173 733d 2269 /a>) = │ │ │ +00001fc0: 203c 6120 636c 6173 733d 2269 6472 6566 flip (< │ │ │ +00002070: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00002080: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00002090: 6e22 3e63 6f6d 706c 656d 656e 743c 2f73 n">complement R │ │ │ +00002110: 3c2f 613e 292e 3c62 722f 3e0a 200a 3c62 ).
. ..   │ │ │ +00002130: 3c73 7061 6e20 636c 6173 733d 2269 6422 Class < │ │ │ +000021c0: 7370 616e 2069 643d 2249 7272 6566 6c65 span id="Irrefle │ │ │ +000021d0: 7869 7665 2220 636c 6173 733d 2269 6422 xive" class="id" │ │ │ +000021e0: 3e49 7272 6566 6c65 7869 7665 3c2f 7370 >Irreflexive ( │ │ │ +00002200: 3c61 2069 643d 2252 3a31 3022 2063 6c61 R │ │ │ +00002250: 3c2f 613e 203a 203c 6120 636c 6173 733d : │ │ │ +000022a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 relation A
) :=
. │ │ │ +00002350: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00002360: 703b 266e 6273 703b 3c61 2069 643d 2269 p; irreflexi │ │ │ +00002400: 7669 7479 3c2f 7370 616e 3e3c 2f73 7061 vity : Refle │ │ │ +00002480: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ +00002490: 283c 6120 636c 6173 733d 2269 6472 6566 (complem │ │ │ +00002500: 656e 743c 2f73 7061 6e3e 3c2f 613e 203c ent < │ │ │ +00002510: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00002520: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00002530: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00002540: 732e 6874 6d6c 2352 3a31 3022 3e3c 7370 s.html#R:10">R │ │ │ +00002570: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
..
.  │ │ │ +00002590: 266e 6273 703b 3c73 7061 6e20 636c 6173  Class
Symmetric (R : relation A │ │ │ +000027a0: 3c2f 613e 2920 3a3d 3c62 722f 3e0a 266e ) :=
.&n │ │ │ +000027b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000027c0: 266e 6273 703b 3c61 2069 643d 2273 796d  symmetry │ │ │ +00002860: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall {x │ │ │ +00002910: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00002930: 793c 2f73 7061 6e3e 3c2f 613e 7d2c 203c y}, < │ │ │ +00002940: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00002950: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00002960: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00002970: 732e 6874 6d6c 2352 3a31 3322 3e3c 7370 s.html#R:13">R │ │ │ +000029a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 x
y -&g │ │ │ +00002af0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; R< │ │ │ +00002b60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> y x │ │ │ +00002c40: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.  C │ │ │ +00002c80: 6c61 7373 3c2f 7370 616e 3e20 3c61 2069 lass │ │ │ +00002cc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Asym │ │ │ +00002d10: 6d65 7472 6963 3c2f 7370 616e 3e3c 2f73 metric (R : │ │ │ +00002d80: 203c 6120 636c 6173 733d 2269 6472 6566 re │ │ │ +00002df0: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation A │ │ │ +00002e70: 2920 3a3d 3c62 722f 3e0a 266e 6273 703b ) :=
.  │ │ │ +00002e80: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00002e90: 703b 3c61 2069 643d 2261 7379 6d6d 6574 p;asymmetry │ │ │ +00002f30: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall {x │ │ │ +00002fe0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00003000: 793c 2f73 7061 6e3e 3c2f 613e 7d2c 203c y}, < │ │ │ +00003010: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00003020: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00003030: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00003040: 732e 6874 6d6c 2352 3a31 3822 3e3c 7370 s.html#R:18">R │ │ │ +00003070: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 x
y -&g │ │ │ +000031c0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; R< │ │ │ +00003230: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> y x │ │ │ +00003310: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00003380: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; < │ │ │ +000033c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000033d0: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ +000033e0: 223e 4661 6c73 653c 2f73 7061 6e3e 3c2f ">False.
..
. │ │ │ +00003400: 266e 6273 703b 266e 6273 703b 3c73 7061   Cla │ │ │ +00003430: 7373 3c2f 7370 616e 3e20 3c61 2069 643d ss
Transi │ │ │ +000034c0: 7469 7665 3c2f 7370 616e 3e3c 2f73 7061 tive ( │ │ │ +00003500: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00003520: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ +00003530: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00003540: 6872 6566 3d22 436f 712e 5265 6c61 7469 href="Coq.Relati │ │ │ +00003550: 6f6e 732e 5265 6c61 7469 6f6e 5f44 6566 ons.Relation_Def │ │ │ +00003560: 696e 6974 696f 6e73 2e68 746d 6c23 7265 initions.html#re │ │ │ +00003570: 6c61 7469 6f6e 223e 3c73 7061 6e20 636c lation">rela │ │ │ +000035a0: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 tion │ │ │ +000035b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +000035f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ +00003620: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ +00003630: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00003640: 3c61 2069 643d 2274 7261 6e73 6974 6976 tran │ │ │ +000036d0: 7369 7469 7669 7479 3c2f 7370 616e 3e3c sitivity< │ │ │ +000036e0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ +00003710: 7261 6c6c 3c2f 7370 616e 3e20 7b3c 6120 rall {x y < │ │ │ +000037f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00003800: 7469 746c 653d 2262 696e 6465 7222 3e7a title="binder">z │ │ │ +00003810: 3c2f 7370 616e 3e3c 2f61 3e7d 2c20 3c61 }, R< │ │ │ +00003880: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x y │ │ │ +00003960: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +000039d0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; R y z< │ │ │ +00003b20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00003b90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 R
x z.
..
. │ │ │ +00003cf0: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Variou │ │ │ +00003d10: 7320 636f 6d62 696e 6174 696f 6e73 206f s combinations o │ │ │ +00003d20: 6620 7265 666c 6578 6976 6974 792c 2073 f reflexivity, s │ │ │ +00003d30: 796d 6d65 7472 7920 616e 6420 7472 616e ymmetry and tran │ │ │ +00003d40: 7369 7469 7669 7479 2e20 0a3c 6469 7620 sitivity. .
.. A PreOrder is bo │ │ │ +00003dc0: 7468 2052 6566 6c65 7869 7665 2061 6e64 th Reflexive and │ │ │ +00003dd0: 2054 7261 6e73 6974 6976 652e 200a 3c2f Transitive. ..
..
.& │ │ │ +00003e00: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Clas │ │ │ +00003e30: 733c 2f73 7061 6e3e 203c 6120 6964 3d22 s
PreOrde │ │ │ +00003e90: 723c 2f73 7061 6e3e 3c2f 613e 2028 3c61 r (R : relation A │ │ │ +00003fe0: 3c2f 613e 2920 3a20 3c73 7061 6e20 636c ) : Prop := {
.& │ │ │ +00004020: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00004030: 3b26 6e62 7370 3b23 5b3c 7370 616e 2063 ; #[global] Pre │ │ │ +000040d0: 4f72 6465 725f 5265 666c 6578 6976 653c Order_Reflexive< │ │ │ +000040e0: 2f73 7061 6e3e 3c2f 613e 203a 3a20 3c61 /span> :: │ │ │ +00004150: 5265 666c 6578 6976 653c 2f73 7061 6e3e Reflexive │ │ │ +00004160: 3c2f 613e 203c 6120 636c 6173 733d 2269 R | 2 ;
.&nb │ │ │ +000041e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000041f0: 6e62 7370 3b23 5b3c 7370 616e 2063 6c61 nbsp;#[global] Pre │ │ │ +00004290: 4f72 6465 725f 5472 616e 7369 7469 7665 Order_Transitive │ │ │ +000042a0: 3c2f 7370 616e 3e3c 2f61 3e20 3a3a 203c :: < │ │ │ +000042b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000042c0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +000042d0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +000042e0: 732e 6874 6d6c 2354 7261 6e73 6974 6976 s.html#Transitiv │ │ │ +000042f0: 6522 3e3c 7370 616e 2063 6c61 7373 3d22 e">Transitive R │ │ │ +00004390: 3c2f 613e 207c 2032 207d 2e3c 6272 2f3e | 2 }.
│ │ │ +000043a0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ +000043b0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.A Strict │ │ │ +00004400: 4f72 6465 723c 2f73 7061 6e3e 3c2f 7370 Order is both Irre │ │ │ +00004420: 666c 6578 6976 6520 616e 6420 5472 616e flexive and Tran │ │ │ +00004430: 7369 7469 7665 2e20 0a3c 2f64 6976 3e0a sitive. .
. │ │ │ +00004440: 3c64 6976 2063 6c61 7373 3d22 636f 6465
..
.  │ │ │ +00004460: 266e 6273 703b 3c73 7061 6e20 636c 6173  Class Strict │ │ │ +000044f0: 4f72 6465 723c 2f73 7061 6e3e 3c2f 613e Order │ │ │ +00004500: 2028 3c61 2069 643d 2252 3a33 3322 2063 (R : relation A
) : Pro │ │ │ +00004670: 703c 2f73 7061 6e3e 203a 3d20 7b3c 6272 p := {
.  & │ │ │ +00004690: 6e62 7370 3b26 6e62 7370 3b23 5b3c 7370 nbsp; #[global │ │ │ +000046c0: 3c2f 7370 616e 3e5d 203c 6120 6964 3d22 ] Stric │ │ │ +00004740: 744f 7264 6572 5f49 7272 6566 6c65 7869 tOrder_Irreflexi │ │ │ +00004750: 7665 3c2f 7370 616e 3e3c 2f61 3e20 3a3a ve :: │ │ │ +00004760: 203c 6120 636c 6173 733d 2269 6472 6566 Irreflexive │ │ │ +000047d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 R
;
. │ │ │ +00004850: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00004860: 703b 266e 6273 703b 235b 3c73 7061 6e20 p; #[global] StrictOrde │ │ │ +00004910: 725f 5472 616e 7369 7469 7665 3c2f 7370 r_Transitive :: < │ │ │ +00004970: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00004980: 7469 746c 653d 2263 6c61 7373 223e 5472 title="class">Tr │ │ │ +00004990: 616e 7369 7469 7665 3c2f 7370 616e 3e3c ansitive< │ │ │ +000049a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R │ │ │ +00004a10: 207d 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a }.
..
. │ │ │ +00004a20: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.By def │ │ │ +00004a40: 696e 6974 696f 6e2c 2061 2073 7472 6963 inition, a stric │ │ │ +00004a50: 7420 6f72 6465 7220 6973 2061 6c73 6f20 t order is also │ │ │ +00004a60: 6173 796d 6d65 7472 6963 200a 3c2f 6469 asymmetric ... │ │ │ +00004d30: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.A partial equ │ │ │ +00004d50: 6976 616c 656e 6365 2072 656c 6174 696f ivalence relatio │ │ │ +00004d60: 6e20 6973 2053 796d 6d65 7472 6963 2061 n is Symmetric a │ │ │ +00004d70: 6e64 2054 7261 6e73 6974 6976 652e 200a nd Transitive. . │ │ │ +00004d80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
..
│ │ │ +00004da0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Cl │ │ │ +00004dd0: 6173 733c 2f73 7061 6e3e 203c 6120 6964 ass PER │ │ │ +00004e30: 283c 6120 6964 3d22 523a 3339 2220 636c (R : relation A) : Prop │ │ │ +00004fa0: 3c2f 7370 616e 3e20 3a3d 207b 3c62 722f := {
.  &n │ │ │ +00004fc0: 6273 703b 266e 6273 703b 235b 3c73 7061 bsp; #[global< │ │ │ +00004ff0: 2f73 7061 6e3e 5d20 3c61 2069 643d 2250 /span>] PER_Symmet │ │ │ +00005060: 7269 633c 2f73 7061 6e3e 3c2f 613e 203a ric : │ │ │ +00005070: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Symmetric R | 3 ;
│ │ │ +00005160: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00005170: 7370 3b26 6e62 7370 3b23 5b3c 7370 616e sp; #[global] PER_Trans │ │ │ +00005210: 6974 6976 653c 2f73 7061 6e3e 3c2f 613e itive │ │ │ +00005220: 203a 3a20 3c61 2063 6c61 7373 3d22 6964 :: Transitiv │ │ │ +00005290: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e R | 3 }. │ │ │ +00005310: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Equivalen │ │ │ +00005340: 6365 2072 656c 6174 696f 6e73 2e20 0a3c ce relations. .< │ │ │ +00005350: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ +00005370: 266e 6273 703b 266e 6273 703b 3c73 7061   Cla │ │ │ +000053a0: 7373 3c2f 7370 616e 3e20 3c61 2069 643d ss │ │ │ +000053e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00005400: 4571 7569 7661 6c65 6e63 653c 2f73 7061 Equivalence ( │ │ │ +00005440: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00005460: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ +00005470: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00005480: 6872 6566 3d22 436f 712e 5265 6c61 7469 href="Coq.Relati │ │ │ +00005490: 6f6e 732e 5265 6c61 7469 6f6e 5f44 6566 ons.Relation_Def │ │ │ +000054a0: 696e 6974 696f 6e73 2e68 746d 6c23 7265 initions.html#re │ │ │ +000054b0: 6c61 7469 6f6e 223e 3c73 7061 6e20 636c lation">rela │ │ │ +000054e0: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 tion │ │ │ +000054f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00005530: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ +00005560: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop : │ │ │ +00005590: 3d20 7b3c 6272 2f3e 0a26 6e62 7370 3b26 = {
. & │ │ │ +000055a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000055b0: 3b23 5b3c 7370 616e 2063 6c61 7373 3d22 ;#[ │ │ │ +000055d0: 676c 6f62 616c 3c2f 7370 616e 3e5d 203c global] < │ │ │ +000055e0: 6120 6964 3d22 4571 7569 7661 6c65 6e63 a id="Equivalenc │ │ │ +000055f0: 655f 5265 666c 6578 6976 6522 2063 6c61 e_Reflexive" cla │ │ │ +00005600: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00005610: 2223 4571 7569 7661 6c65 6e63 655f 5265 "#Equivalence_Re │ │ │ +00005620: 666c 6578 6976 6522 3e3c 7370 616e 2063 flexive">Equ │ │ │ +00005650: 6976 616c 656e 6365 5f52 6566 6c65 7869 ivalence_Reflexi │ │ │ +00005660: 7665 3c2f 7370 616e 3e3c 2f61 3e20 3a3a ve :: │ │ │ +00005670: 203c 6120 636c 6173 733d 2269 6472 6566 Reflexive R │ │ │ +00005750: 3c2f 613e 203b 3c62 722f 3e0a 266e 6273 ;
.&nbs │ │ │ +00005760: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00005770: 6273 703b 235b 3c73 7061 6e20 636c 6173 bsp;#[global │ │ │ +000057a0: 5d20 3c61 2069 643d 2245 7175 6976 616c ] │ │ │ +00005810: 4571 7569 7661 6c65 6e63 655f 5379 6d6d Equivalence_Symm │ │ │ +00005820: 6574 7269 633c 2f73 7061 6e3e 3c2f 613e etric │ │ │ +00005830: 203a 3a20 3c61 2063 6c61 7373 3d22 6964 :: Symmetric< │ │ │ +000058a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> R ;
.& │ │ │ +00005920: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00005930: 3b26 6e62 7370 3b23 5b3c 7370 616e 2063 ; #[global] Equivalence │ │ │ +000059e0: 5f54 7261 6e73 6974 6976 653c 2f73 7061 _Transitive :: Tra │ │ │ +00005a60: 6e73 6974 6976 653c 2f73 7061 6e3e 3c2f nsitive R │ │ │ +00005ae0: 7d2e 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c }.
..
.< │ │ │ +00005af0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.An Equi │ │ │ +00005b10: 7661 6c65 6e63 6520 6973 2061 2050 4552 valence is a PER │ │ │ +00005b20: 2070 6c75 7320 7265 666c 6578 6976 6974 plus reflexivit │ │ │ +00005b30: 792e 200a 3c2f 6469 763e 0a3c 6469 7620 y. .
.
..< │ │ │ +00005b50: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00005b60: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Global Instanc │ │ │ +00005b90: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e Equival │ │ │ +00005c00: 656e 6365 5f50 4552 3c2f 7370 616e 3e3c ence_PER< │ │ │ +00005c10: 2f61 3e20 7b3c 6120 6964 3d22 523a 3438 /a> {R} `(E:Equivalenc │ │ │ +00005d30: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e R) : PER R │ │ │ +00005e80: 3c2f 613e 207c 2031 3020 3a3d 3c62 722f | 10 :=
.  &n │ │ │ +00005ea0: 6273 703b 266e 6273 703b 7b20 7d2e 3c62 bsp; { }...
.
..
.An Equivale │ │ │ +00005ee0: 6e63 6520 6973 2061 2050 7265 4f72 6465 nce is a PreOrde │ │ │ +00005ef0: 7220 706c 7573 2073 796d 6d65 7472 792e r plus symmetry. │ │ │ +00005f00: 200a 3c2f 6469 763e 0a3c 6469 7620 636c .
.
..
.  < │ │ │ +00005f30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00005f40: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00005f50: 476c 6f62 616c 2049 6e73 7461 6e63 653c Global Instance< │ │ │ +00005f60: 2f73 7061 6e3e 203c 6120 6964 3d22 4571 /span> < │ │ │ +00005fb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00005fc0: 7469 746c 653d 2269 6e73 7461 6e63 6522 title="instance" │ │ │ +00005fd0: 3e45 7175 6976 616c 656e 6365 5f50 7265 >Equivalence_Pre │ │ │ +00005fe0: 4f72 6465 723c 2f73 7061 6e3e 3c2f 613e Order │ │ │ +00005ff0: 207b 3c61 2069 643d 2252 3a35 3022 2063 {R} `(E:< │ │ │ +000060a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000060b0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +000060c0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +000060d0: 732e 6874 6d6c 2345 7175 6976 616c 656e s.html#Equivalen │ │ │ +000060e0: 6365 223e 3c73 7061 6e20 636c 6173 733d ce">Equivalence R) : PreOr │ │ │ +000061f0: 6465 723c 2f73 7061 6e3e 3c2f 613e 203c der < │ │ │ +00006200: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00006210: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00006220: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00006230: 732e 6874 6d6c 2352 3a35 3022 3e3c 7370 s.html#R:50">R │ │ │ +00006260: 3c2f 7370 616e 3e3c 2f61 3e20 7c20 3130 | 10 │ │ │ +00006270: 203a 3d3c 6272 2f3e 0a26 6e62 7370 3b26 :=
. & │ │ │ +00006280: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00006290: 3b7b 207d 2e3c 6272 2f3e 0a0a 3c62 722f ;{ }.
..
.
..
.We c │ │ │ +000062c0: 616e 206e 6f77 2064 6566 696e 6520 616e an now define an │ │ │ +000062d0: 7469 7379 6d6d 6574 7279 2077 2e72 2e74 tisymmetry w.r.t │ │ │ +000062e0: 2e20 616e 2065 7175 6976 616c 656e 6365 . an equivalence │ │ │ +000062f0: 2072 656c 6174 696f 6e20 6f6e 2074 6865 relation on the │ │ │ +00006300: 2063 6172 7269 6572 2e20 0a3c 2f64 6976 carrier. .
.
..
.&nbs │ │ │ +00006330: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Class │ │ │ +000063a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A │ │ │ +000063f0: 6e74 6973 796d 6d65 7472 6963 3c2f 7370 ntisymmetric < │ │ │ +00006410: 6120 6964 3d22 6571 413a 3532 2220 636c a id="eqA:52" cl │ │ │ +00006420: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00006430: 3d22 2365 7141 3a35 3222 3e3c 7370 616e ="#eqA:52">eqA `{equ : Equ │ │ │ +00006530: 6976 616c 656e 6365 3c2f 7370 616e 3e3c ivalence< │ │ │ +00006540: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> eqA │ │ │ +000065b0: 3c2f 613e 7d20 283c 6120 6964 3d22 523a } (< │ │ │ +000065e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000065f0: 7469 746c 653d 2262 696e 6465 7222 3e52 title="binder">R │ │ │ +00006600: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : relat │ │ │ +00006680: 696f 6e3c 2f73 7061 6e3e 3c2f 613e 203c ion < │ │ │ +00006690: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000066a0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +000066b0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +000066c0: 732e 6874 6d6c 2344 6566 732e 4122 3e3c s.html#Defs.A">< │ │ │ +000066d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000066e0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000066f0: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 203a >A) : │ │ │ +00006700: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ +00006710: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00006720: 6120 6964 3d22 616e 7469 7379 6d6d 6574 a id="antisymmet │ │ │ +00006730: 7279 2220 636c 6173 733d 2269 6472 6566 ry" class="idref │ │ │ +00006740: 2220 6872 6566 3d22 2361 6e74 6973 796d " href="#antisym │ │ │ +00006750: 6d65 7472 7922 3e3c 7370 616e 2063 6c61 metry">antis │ │ │ +000067b0: 796d 6d65 7472 793c 2f73 7061 6e3e 3c2f ymmetry : for │ │ │ +000067f0: 616c 6c3c 2f73 7061 6e3e 207b 3c61 2069 all {x │ │ │ +00006850: 203c 6120 6964 3d22 793a 3537 2220 636c y}, R │ │ │ +00006910: 3c2f 613e 203c 6120 636c 6173 733d 2269 x │ │ │ +000069c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 y < │ │ │ +000069f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00006a00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00006a10: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00006a20: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00006a30: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> R< │ │ │ +00006ad0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ +00006b40: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +00006b80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00006b90: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00006ba0: 3e78 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >x -> eqA x< │ │ │ +00006d00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ +00006d70: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 266e .
..
.&n │ │ │ +00006d80: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Class │ │ │ +00006db0: 3c2f 7370 616e 3e20 3c61 2069 643d 2273 subre │ │ │ +00006e40: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f73 lation (R < │ │ │ +00006eb0: 6120 6964 3d22 5227 3a36 3022 2063 6c61 a id="R':60" cla │ │ │ +00006ec0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00006ed0: 2223 5227 3a36 3022 3e3c 7370 616e 2063 "#R':60">R' : relation A
) : Pro │ │ │ +00007020: 703c 2f73 7061 6e3e 203a 3d3c 6272 2f3e p :=
│ │ │ +00007030: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00007040: 7370 3b26 6e62 7370 3b3c 6120 6964 3d22 sp; is_su │ │ │ +000070e0: 6272 656c 6174 696f 6e3c 2f73 7061 6e3e brelation │ │ │ +000070f0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +00007120: 6f72 616c 6c3c 2f73 7061 6e3e 207b 3c61 orall {x y}, R
x< │ │ │ +000072b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ +00007320: 203c 6120 636c 6173 733d 2269 6472 6566 -> R' x │ │ │ +00007470: 3c2f 613e 203c 6120 636c 6173 733d 2269 y.
..
.< │ │ │ +000074f0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Any sym │ │ │ +00007510: 6d65 7472 6963 2072 656c 6174 696f 6e20 metric relation │ │ │ +00007520: 6973 2065 7175 616c 2074 6f20 6974 7320 is equal to its │ │ │ +00007530: 696e 7665 7273 652e 200a 3c2f 6469 763e inverse. .
│ │ │ +00007540: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.  │ │ │ +00007560: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Lemma
< │ │ │ +000075e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000075f0: 7469 746c 653d 226c 656d 6d61 223e 7375 title="lemma">su │ │ │ +00007600: 6272 656c 6174 696f 6e5f 7379 6d6d 6574 brelation_symmet │ │ │ +00007610: 7269 633c 2f73 7061 6e3e 3c2f 613e 203c ric < │ │ │ +00007620: 6120 6964 3d22 523a 3635 2220 636c 6173 a id="R:65" clas │ │ │ +00007630: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +00007640: 2352 3a36 3522 3e3c 7370 616e 2063 6c61 #R:65">R< │ │ │ +00007670: 2f61 3e20 6028 3c61 2069 643d 2248 3a36 /a> `(Sy │ │ │ +000076c0: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric R) : │ │ │ +00007770: 3c73 7061 6e20 636c 6173 733d 2269 6422 s │ │ │ +00007790: 7562 7265 6c61 7469 6f6e 3c2f 7370 616e ubrelation ( │ │ │ +00007800: 666c 6970 3c2f 7370 616e 3e3c 2f61 3e20 flip │ │ │ +00007810: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00007870: 523c 2f73 7061 6e3e 3c2f 613e 2920 3c61 R) R< │ │ │ +000078e0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +000078f0: 0a20 0a3c 6272 2f3e 0a26 6e62 7370 3b26 . .
. & │ │ │ +00007900: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Section
flip.
..< │ │ │ +000079a0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +000079b0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Le │ │ │ +000079e0: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma flip_Refle │ │ │ +00007a50: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ +00007a60: 607b 3c61 2069 643d 2248 3a36 3822 2063 `{Reflex │ │ │ +00007ab0: 6976 653c 2f73 7061 6e3e 3c2f 613e 203c ive < │ │ │ +00007ac0: 6120 6964 3d22 523a 3637 2220 636c 6173 a id="R:67" clas │ │ │ +00007ad0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +00007ae0: 2352 3a36 3722 3e3c 7370 616e 2063 6c61 #R:67">R} : Refle │ │ │ +00007ba0: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ +00007bb0: 283c 6120 636c 6173 733d 2269 6472 6566 (flip R).
. . │ │ │ +00007c90: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00007ca0: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  P │ │ │ +00007cd0: 726f 6772 616d 2044 6566 696e 6974 696f rogram Definitio │ │ │ +00007ce0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n fli │ │ │ +00007d50: 705f 4972 7265 666c 6578 6976 653c 2f73 p_Irreflexive `(Irreflexive R │ │ │ +00007e40: 2920 3a20 3c61 2063 6c61 7373 3d22 6964 ) : Irreflex │ │ │ +00007eb0: 6976 653c 2f73 7061 6e3e 3c2f 613e 2028 ive ( │ │ │ +00007ec0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 flip
R) :=
.& │ │ │ +00007fa0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00007fb0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00007fc0: 7370 3b3c 6120 636c 6173 733d 2269 6472 sp;ir │ │ │ +00008030: 7265 666c 6578 6976 6974 793c 2f73 7061 reflexivity (R:=< │ │ │ +00008070: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00008080: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00008090: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +000080a0: 732e 6874 6d6c 2352 3a36 3922 3e3c 7370 s.html#R:69">R │ │ │ +000080d0: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
..
.  │ │ │ +000080f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00008100: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Program Defin │ │ │ +00008130: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition fli │ │ │ +000081a0: 705f 5379 6d6d 6574 7269 633c 2f73 7061 p_Symmetric `(Symmetric R) : │ │ │ +00008290: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Symmetric (flip │ │ │ +00008370: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +000083b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000083c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000083d0: 3e52 3c2f 7370 616e 3e3c 2f61 3e29 203a >R) : │ │ │ +000083e0: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ +000083f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00008400: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; fun< │ │ │ +00008430: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> < │ │ │ +00008460: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00008470: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ +00008480: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y │ │ │ +000084e0: 203c 6120 6964 3d22 483a 3735 2220 636c H => symmetry (R:=R< │ │ │ +00008640: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) H.
.. │ │ │ +000086c0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000086d0: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  P │ │ │ +00008700: 726f 6772 616d 2044 6566 696e 6974 696f rogram Definitio │ │ │ +00008710: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n flip_ │ │ │ +00008780: 4173 796d 6d65 7472 6963 3c2f 7370 616e Asymmetric `( │ │ │ +000087c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000087e0: 4173 796d 6d65 7472 6963 3c2f 7370 616e Asymmetric R) : │ │ │ +00008870: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Asymmetric (< │ │ │ +00008920: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00008930: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00008940: 6e22 3e66 6c69 703c 2f73 7061 6e3e 3c2f n">flip R) │ │ │ +000089c0: 203a 3d3c 6272 2f3e 0a26 6e62 7370 3b26 :=
. & │ │ │ +000089d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000089e0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  fu │ │ │ +00008a10: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n x y H H' │ │ │ +00008b70: 3d26 6774 3b20 3c61 2063 6c61 7373 3d22 => asy │ │ │ +00008be0: 6d6d 6574 7279 3c2f 7370 616e 3e3c 2f61 mmetry ( │ │ │ +00008c10: 523c 2f73 7061 6e3e 3a3d 3c61 2063 6c61 R:=R) H │ │ │ +00008cf0: 3c2f 613e 203c 6120 636c 6173 733d 2269 H'< │ │ │ +00008d60: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00008d70: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00008d80: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Progra │ │ │ +00008db0: 6d20 4465 6669 6e69 7469 6f6e 3c2f 7370 m Definition
flip_Trans │ │ │ +00008e30: 6974 6976 653c 2f73 7061 6e3e 3c2f 613e itive │ │ │ +00008e40: 2060 283c 6120 6964 3d22 483a 3833 2220 `(Trans │ │ │ +00008e90: 6974 6976 653c 2f73 7061 6e3e 3c2f 613e itive │ │ │ +00008ea0: 203c 6120 6964 3d22 523a 3832 2220 636c R) : < │ │ │ +00008f60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00008f70: 7469 746c 653d 2263 6c61 7373 223e 5472 title="class">Tr │ │ │ +00008f80: 616e 7369 7469 7665 3c2f 7370 616e 3e3c ansitive< │ │ │ +00008f90: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (fl │ │ │ +00008ff0: 6970 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ip R< │ │ │ +00009060: 2f73 7061 6e3e 3c2f 613e 2920 3a3d 3c62 /span>) :=.   │ │ │ +00009080: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00009090: 703b 266e 6273 703b 3c73 7061 6e20 636c p; fun x y z H H' │ │ │ +00009270: 3d26 6774 3b20 3c61 2063 6c61 7373 3d22 => │ │ │ +000092e0: 7472 616e 7369 7469 7669 7479 3c2f 7370 transitivity (R:= │ │ │ +00009320: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00009380: 523c 2f73 7061 6e3e 3c2f 613e 2920 3c61 R) H │ │ │ +000093f0: 273c 2f73 7061 6e3e 3c2f 613e 203c 6120 ' H.
. │ │ │ +00009470: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +00009480: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00009490: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000094a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000094b0: 5072 6f67 7261 6d20 4465 6669 6e69 7469 Program Definiti │ │ │ +000094c0: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on flip_Antisymme │ │ │ +00009540: 7472 6963 3c2f 7370 616e 3e3c 2f61 3e20 tric │ │ │ +00009550: 6028 3c61 2069 643d 2248 3a39 3222 2063 `(Antisy │ │ │ +000095a0: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric < │ │ │ +000095e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000095f0: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ +00009600: 7370 616e 2069 643d 2248 3a39 3222 2063 span id="H:92" c │ │ │ +00009610: 6c61 7373 3d22 6964 223e 6571 413c 2f73 lass="id">eqA │ │ │ +00009630: 3c61 2069 643d 2252 3a39 3122 2063 6c61 R) :
.& │ │ │ +000096b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000096c0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000096d0: 7370 3b3c 6120 636c 6173 733d 2269 6472 sp;Antisym │ │ │ +00009740: 6d65 7472 6963 3c2f 7370 616e 3e3c 2f61 metric eqA (fli │ │ │ +00009820: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p R).
│ │ │ +000098a0: 0a20 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a . .
.
. │ │ │ +000098b0: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.Inversing the │ │ │ +000098d0: 206c 6172 6765 7220 7374 7275 6374 7572 larger structur │ │ │ +000098e0: 6573 200a 3c2f 6469 763e 0a3c 6469 7620 es .
.
..< │ │ │ +00009900: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00009910: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Le │ │ │ +00009940: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma flip_PreOrde │ │ │ +000099b0: 723c 2f73 7061 6e3e 3c2f 613e 2060 283c r `(< │ │ │ +000099c0: 6120 6964 3d22 483a 3934 2220 636c 6173 a id="H:94" clas │ │ │ +000099d0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +000099e0: 2348 3a39 3422 3e3c 7370 616e 2063 6c61 #H:94">PreOrder< │ │ │ +00009a10: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R< │ │ │ +00009a80: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span>) : PreOrder ( │ │ │ +00009b40: 3c73 7061 6e20 636c 6173 733d 2269 6422 flip< │ │ │ +00009b70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R │ │ │ +00009be0: 292e 3c62 722f 3e0a 200a 3c62 722f 3e0a ).
. .
. │ │ │ +00009bf0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00009c00: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Lemma flip_Strict │ │ │ +00009ca0: 4f72 6465 723c 2f73 7061 6e3e 3c2f 613e Order │ │ │ +00009cb0: 2060 283c 6120 6964 3d22 483a 3936 2220 `(Stric │ │ │ +00009d00: 744f 7264 6572 3c2f 7370 616e 3e3c 2f61 tOrder R
) : │ │ │ +00009df0: 5374 7269 6374 4f72 6465 723c 2f73 7061 StrictOrder (flip │ │ │ +00009e70: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +00009eb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00009ec0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00009ed0: 3e52 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >R).< │ │ │ +00009ee0: 6272 2f3e 0a20 0a3c 6272 2f3e 0a26 6e62 br/>. .
.&nb │ │ │ +00009ef0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00009f00: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Lemma flip_PER `( │ │ │ +00009fc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00009fe0: 5045 523c 2f73 7061 6e3e 3c2f 613e 203c PER < │ │ │ +00009ff0: 6120 6964 3d22 523a 3937 2220 636c 6173 a id="R:97" clas │ │ │ +0000a000: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +0000a010: 2352 3a39 3722 3e3c 7370 616e 2063 6c61 #R:97">R) : PER< │ │ │ +0000a0d0: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (fl │ │ │ +0000a130: 6970 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ip R< │ │ │ +0000a1a0: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
. .
.  │ │ │ +0000a1c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0000a1d0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Lemma │ │ │ +0000a200: 3c61 2069 643d 2266 6c69 705f 4571 7569 │ │ │ +0000a240: 3c73 7061 6e20 636c 6173 733d 2269 6422 f │ │ │ +0000a260: 6c69 705f 4571 7569 7661 6c65 6e63 653c lip_Equivalence< │ │ │ +0000a270: 2f73 7061 6e3e 3c2f 613e 2060 283c 6120 /span> `(Equivalen │ │ │ +0000a2d0: 6365 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ce R) : Equ │ │ │ +0000a3c0: 6976 616c 656e 6365 3c2f 7370 616e 3e3c ivalence
< │ │ │ +0000a3d0: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (fl │ │ │ +0000a430: 6970 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ip R< │ │ │ +0000a4a0: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
. .
.  │ │ │ +0000a4c0: 266e 6273 703b 3c73 7061 6e20 636c 6173  End flip.
..
.  < │ │ │ +0000a580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000a590: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0000a5a0: 5365 6374 696f 6e3c 2f73 7061 6e3e 203c Section < │ │ │ +0000a5b0: 6120 6964 3d22 4465 6673 2e63 6f6d 706c a id="Defs.compl │ │ │ +0000a5c0: 656d 656e 7422 2063 6c61 7373 3d22 6964 ement" class="id │ │ │ +0000a5d0: 7265 6622 2068 7265 663d 2223 4465 6673 ref" href="#Defs │ │ │ +0000a5e0: 2e63 6f6d 706c 656d 656e 7422 3e3c 7370 .complement">co │ │ │ +0000a610: 6d70 6c65 6d65 6e74 3c2f 7370 616e 3e3c mplement< │ │ │ +0000a620: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +0000a630: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0000a640: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ +0000a670: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion comp │ │ │ +0000a6f0: 6c65 6d65 6e74 5f49 7272 6566 6c65 7869 lement_Irreflexi │ │ │ +0000a700: 7665 3c2f 7370 616e 3e3c 2f61 3e20 6028 ve `( │ │ │ +0000a710: 3c61 2069 643d 2248 3a31 3032 2220 636c Reflex │ │ │ +0000a760: 6976 653c 2f73 7061 6e3e 3c2f 613e 203c ive < │ │ │ +0000a770: 6120 6964 3d22 523a 3130 3122 2063 6c61 a id="R:101" cla │ │ │ +0000a780: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0000a790: 2223 523a 3130 3122 3e3c 7370 616e 2063 "#R:101">R
)
.& │ │ │ +0000a7f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0000a800: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0000a810: 7370 3b3a 203c 6120 636c 6173 733d 2269 sp;: Irrefle │ │ │ +0000a880: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ +0000a890: 283c 6120 636c 6173 733d 2269 6472 6566 (complem │ │ │ +0000a900: 656e 743c 2f73 7061 6e3e 3c2f 613e 203c ent < │ │ │ +0000a910: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000a920: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0000a930: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0000a940: 732e 6874 6d6c 2352 3a31 3031 223e 3c73 s.html#R:101"> │ │ │ +0000a970: 523c 2f73 7061 6e3e 3c2f 613e 292e 3c62 R).. .
.&nbs │ │ │ +0000a990: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0000a9a0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ +0000a9d0: 2f73 7061 6e3e 203c 6120 6964 3d22 636f /span> < │ │ │ +0000aa20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000aa30: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0000aa40: 6e22 3e63 6f6d 706c 656d 656e 745f 5379 n">complement_Sy │ │ │ +0000aa50: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric `(< │ │ │ +0000aa90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000aaa0: 7469 746c 653d 2262 696e 6465 7222 3e53 title="binder">S │ │ │ +0000aab0: 796d 6d65 7472 6963 3c2f 7370 616e 3e3c ymmetric< │ │ │ +0000aac0: 2f61 3e20 3c61 2069 643d 2252 3a31 3033 /a> R) : │ │ │ +0000ab40: 203c 6120 636c 6173 733d 2269 6472 6566 Symmetric (complement R │ │ │ +0000aca0: 3c2f 613e 292e 3c62 722f 3e0a 2026 6e62 ).
. &nb │ │ │ +0000acb0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; End
c │ │ │ +0000ad50: 6f6d 706c 656d 656e 743c 2f73 7061 6e3e omplement │ │ │ +0000ad60: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.Rewr │ │ │ +0000ad90: 6974 6520 7265 6c61 7469 6f6e 206f 6e20 ite relation on │ │ │ +0000ada0: 6120 6769 7665 6e20 7375 7070 6f72 743a a given support: │ │ │ +0000adb0: 2064 6563 6c61 7265 7320 6120 7265 6c61 declares a rela │ │ │ +0000adc0: 7469 6f6e 2061 7320 6120 7265 7772 6974 tion as a rewrit │ │ │ +0000add0: 650a 2020 2072 656c 6174 696f 6e20 666f e. relation fo │ │ │ +0000ade0: 7220 7573 6520 6279 2074 6865 2067 656e r use by the gen │ │ │ +0000adf0: 6572 616c 697a 6564 2072 6577 7269 7469 eralized rewriti │ │ │ +0000ae00: 6e67 2074 6163 7469 632e 0a20 2020 4974 ng tactic.. It │ │ │ +0000ae10: 2068 656c 7073 2063 686f 6f73 696e 6720 helps choosing │ │ │ +0000ae20: 6966 2061 2072 6577 7269 7465 2073 686f if a rewrite sho │ │ │ +0000ae30: 756c 6420 6265 2068 616e 646c 6564 0a20 uld be handled. │ │ │ +0000ae40: 2020 6279 2074 6865 2067 656e 6572 616c by the general │ │ │ +0000ae50: 697a 6564 206f 7220 7468 6520 7265 6775 ized or the regu │ │ │ +0000ae60: 6c61 7220 7265 7772 6974 696e 6720 7461 lar rewriting ta │ │ │ +0000ae70: 6374 6963 2075 7369 6e67 206c 6569 626e ctic using leibn │ │ │ +0000ae80: 697a 2065 7175 616c 6974 792e 0a20 2020 iz equality.. │ │ │ +0000ae90: 5573 6572 7320 6361 6e20 6465 636c 6172 Users can declar │ │ │ +0000aea0: 6520 616e 203c 7370 616e 2063 6c61 7373 e an Rewri │ │ │ +0000aee0: 7465 5265 6c61 7469 6f6e 3c2f 7370 616e teRelation A │ │ │ +0000af30: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ +0000af40: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +0000af50: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">RA anywhere t │ │ │ +0000af90: 6f20 6465 636c 6172 6520 6465 6661 756c o declare defaul │ │ │ +0000afa0: 740a 2020 2072 656c 6174 696f 6e73 206f t. relations o │ │ │ +0000afb0: 6e20 6120 6769 7665 6e20 7479 7065 2060 n a given type ` │ │ │ +0000afc0: 4160 2e20 5468 6973 2069 7320 616c 736f A`. This is also │ │ │ +0000afd0: 2064 6f6e 6520 6175 746f 6d61 7469 6361 done automatica │ │ │ +0000afe0: 6c6c 7920 6279 0a20 2020 7468 6520 3c73 lly by. the Declare │ │ │ +0000b070: 5265 6c61 7469 6f6e 3c2f 7370 616e 3e3c Relation< │ │ │ +0000b080: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +0000b0a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A RA commands. It │ │ │ +0000b120: 2068 6173 206e 6f20 6d6f 6465 2064 6563 has no mode dec │ │ │ +0000b130: 6c61 7261 7469 6f6e 3a0a 2020 2069 7420 laration:. it │ │ │ +0000b140: 7769 6c6c 2061 7373 6967 6e20 603f 4120 will assign `?A │ │ │ +0000b150: 3a3d 2050 726f 702c 203f 5220 3a3d 2069 := Prop, ?R := i │ │ │ +0000b160: 6666 6020 6f6e 2061 6e20 656e 7469 7265 ff` on an entire │ │ │ +0000b170: 6c79 2075 6e73 7065 6369 6669 6564 2071 ly unspecified q │ │ │ +0000b180: 7565 7279 0a20 2020 6052 6577 7269 7465 uery. `Rewrite │ │ │ +0000b190: 5265 6c61 7469 6f6e 203f 4120 3f52 602c Relation ?A ?R`, │ │ │ +0000b1a0: 206f 7220 616e 7920 7072 6566 6572 6564 or any prefered │ │ │ +0000b1b0: 2072 6577 7269 7465 2072 656c 6174 696f rewrite relatio │ │ │ +0000b1c0: 6e20 6f66 2070 7269 6f72 6974 7920 266c n of priority &l │ │ │ +0000b1d0: 743b 2032 2e20 0a3c 2f64 6976 3e0a 3c64 t; 2. .
. │ │ │ +0000b1f0: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ +0000b200: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Class │ │ │ +0000b270: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0000b290: 5265 7772 6974 6552 656c 6174 696f 6e3c RewriteRelation< │ │ │ +0000b2a0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (RA : relation
A).
.. │ │ │ +0000b400: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +0000b420: 4c65 6962 6e69 7a20 6571 7561 6c69 7479 Leibniz equality │ │ │ +0000b430: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
.&nb │ │ │ +0000b450: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Sectio │ │ │ +0000b480: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n Leibniz │ │ │ +0000b4f0: 3c2f 613e 2e3c 6272 2f3e 0a26 6e62 7370 .
.  │ │ │ +0000b500: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0000b510: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Global Insta │ │ │ +0000b540: 6e63 653c 2f73 7061 6e3e 203c 6120 6964 nce eq_Reflexiv │ │ │ +0000b5b0: 653c 2f73 7061 6e3e 3c2f 613e 203a 203c e : < │ │ │ +0000b5c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000b5d0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0000b5e0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0000b5f0: 732e 6874 6d6c 2352 6566 6c65 7869 7665 s.html#Reflexive │ │ │ +0000b600: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Reflexive (@eq A) := @ │ │ │ +0000b740: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl A.
.&nb │ │ │ +0000b7f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0000b800: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Global Ins │ │ │ +0000b830: 7461 6e63 653c 2f73 7061 6e3e 203c 6120 tance eq_Symmet │ │ │ +0000b8a0: 7269 633c 2f73 7061 6e3e 3c2f 613e 203a ric : │ │ │ +0000b8b0: 203c 6120 636c 6173 733d 2269 6472 6566 Symmetric (@eq A
) := @ │ │ │ +0000ba50: 6571 5f73 796d 3c2f 7370 616e 3e3c 2f61 eq_sym A │ │ │ +0000bad0: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +0000bae0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +0000baf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000bb00: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0000bb10: 476c 6f62 616c 2049 6e73 7461 6e63 653c Global Instance< │ │ │ +0000bb20: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_Transitive │ │ │ +0000bb90: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : Transitive (@eq
A) := @eq_trans │ │ │ +0000bd50: 3c2f 613e 203c 6120 636c 6173 733d 2269 A< │ │ │ +0000bdc0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +0000bdd0: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Leibi │ │ │ +0000bdf0: 6e7a 2065 7175 616c 6974 7920 3c73 7061 nz equality eq is an equival │ │ │ +0000be50: 656e 6365 2072 656c 6174 696f 6e2e 0a20 ence relation.. │ │ │ +0000be60: 2020 2020 2020 2054 6865 2069 6e73 7461 The insta │ │ │ +0000be70: 6e63 6520 6861 7320 6c6f 7720 7072 696f nce has low prio │ │ │ +0000be80: 7269 7479 2061 7320 6974 2069 7320 616c rity as it is al │ │ │ +0000be90: 7761 7973 2061 7070 6c69 6361 626c 650a ways applicable. │ │ │ +0000bea0: 2020 2020 2020 2020 6966 206f 6e6c 7920 if only │ │ │ +0000beb0: 7468 6520 7479 7065 2069 7320 636f 6e73 the type is cons │ │ │ +0000bec0: 7472 6169 6e65 642e 200a 3c2f 6469 763e trained. .
│ │ │ +0000bed0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.Le │ │ │ +0000c1f0: 6962 6e69 7a20 6469 7365 7175 616c 6974 ibniz disequalit │ │ │ +0000c200: 792e 200a 3c2f 6469 763e 0a3c 6469 7620 y. .
.
.&n │ │ │ +0000c220: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Secti │ │ │ +0000c250: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on Leibniz │ │ │ +0000c2c0: 4e6f 743c 2f73 7061 6e3e 3c2f 613e 2e3c Not.< │ │ │ +0000c2d0: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...D │ │ │ +0000c2f0: 6973 6571 7561 6c69 7479 2069 7320 7379 isequality is sy │ │ │ +0000c300: 6d6d 6574 7269 632e 200a 3c2f 6469 763e mmetric. .
│ │ │ +0000c310: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
.   │ │ │ +0000c330: 266e 6273 703b 266e 6273 703b 3c73 7061   Glo │ │ │ +0000c360: 6261 6c20 496e 7374 616e 6365 3c2f 7370 bal Instance │ │ │ +0000c3d0: 6e65 715f 5379 6d6d 6574 7269 633c 2f73 neq_Symmetric : Sym │ │ │ +0000c450: 6d65 7472 6963 3c2f 7370 616e 3e3c 2f61 metric (fun < │ │ │ +0000c490: 6120 6964 3d22 783a 3130 3722 2063 6c61 a id="x:107" cla │ │ │ +0000c4a0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0000c4b0: 2223 783a 3130 3722 3e3c 7370 616e 2063 "#x:107">x │ │ │ +0000c510: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0000c530: 793c 2f73 7061 6e3e 3c2f 613e 203a 203c y : < │ │ │ +0000c540: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000c550: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0000c560: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0000c570: 732e 6874 6d6c 2344 6566 732e 4122 3e3c s.html#Defs.A">< │ │ │ +0000c580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000c590: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000c5a0: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3d26 >A =& │ │ │ +0000c5b0: 6774 3b20 3c61 2063 6c61 7373 3d22 6964 gt; x < │ │ │ +0000c690: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0000c6a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +0000c6e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000c6f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000c700: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 203a >y) : │ │ │ +0000c710: 3d20 2840 3c61 2063 6c61 7373 3d22 6964 = (@not_eq │ │ │ +0000c770: 5f73 796d 3c2f 7370 616e 3e3c 2f61 3e20 _sym │ │ │ +0000c780: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +0000c7c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A). │ │ │ +0000c7f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0000c800: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;End LeibnizN │ │ │ +0000c8a0: 6f74 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ot..End │ │ │ +0000c8e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 D │ │ │ +0000c940: 6566 733c 2f73 7061 6e3e 3c2f 613e 2e3c efs.< │ │ │ +0000c950: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Default re │ │ │ +0000c980: 7772 6974 6520 7265 6c61 7469 6f6e 7320 write relations │ │ │ +0000c990: 6861 6e64 6c65 6420 6279 203c 7370 616e handled by setoid_rewri │ │ │ +0000c9e0: 7465 3c2f 7370 616e 3e3c 2f73 7061 6e3e te │ │ │ +0000c9f0: 206f 6e20 5072 6f70 2e20 0a3c 2f64 6976 on Prop. .
.
..
.Any │ │ │ +0000d080: 203c 7370 616e 2063 6c61 7373 3d22 696e Equivalen │ │ │ +0000d0c0: 6365 3c2f 7370 616e 3e3c 2f73 7061 6e3e ce │ │ │ +0000d0d0: 2064 6563 6c61 7265 6420 696e 2074 6865 declared in the │ │ │ +0000d0e0: 2063 6f6e 7465 7874 2069 7320 6175 746f context is auto │ │ │ +0000d0f0: 6d61 7469 6361 6c6c 7920 636f 6e73 6964 matically consid │ │ │ +0000d100: 6572 6564 0a20 2061 2072 6577 7269 7465 ered. a rewrite │ │ │ +0000d110: 2072 656c 6174 696f 6e2e 2054 6869 7320 relation. This │ │ │ +0000d120: 6f6e 6c79 2061 7070 6c69 6573 2069 6620 only applies if │ │ │ +0000d130: 7468 6520 7265 6c61 7469 6f6e 2069 7320 the relation is │ │ │ +0000d140: 6174 206c 6561 7374 2070 6172 7469 616c at least partial │ │ │ +0000d150: 6c79 0a20 2064 6566 696e 6564 3a20 7365 ly. defined: se │ │ │ +0000d160: 746f 6964 5f72 6577 7269 7465 2077 6f6e toid_rewrite won │ │ │ +0000d170: 2774 2074 7279 2074 6f20 696e 6665 7220 't try to infer │ │ │ +0000d180: 6172 6269 7472 6172 7920 7573 6572 2072 arbitrary user r │ │ │ +0000d190: 6577 7269 7465 2072 656c 6174 696f 6e73 ewrite relations │ │ │ +0000d1a0: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...Definition< │ │ │ +0000d1f0: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> < │ │ │ +0000d250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000d260: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0000d270: 6e22 3e65 7175 6976 616c 656e 6365 5f72 n">equivalence_r │ │ │ +0000d280: 6577 7269 7465 5f72 656c 6174 696f 6e3c ewrite_relation< │ │ │ +0000d290: 2f73 7061 6e3e 3c2f 613e 2060 283c 6120 /span> `(eqa : │ │ │ +0000d360: 4571 7569 7661 6c65 6e63 653c 2f73 7061 Equivalence A eqA< │ │ │ +0000d420: 2f73 7061 6e3e 3c2f 613e 2920 3a20 3c61 /span>) : RewriteRel │ │ │ +0000d4a0: 6174 696f 6e3c 2f73 7061 6e3e 3c2f 613e ation │ │ │ +0000d4b0: 203c 6120 636c 6173 733d 2269 6472 6566 eqA :=
.  │ │ │ +0000d530: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; 
Build │ │ │ +0000d5b0: 5f52 6577 7269 7465 5265 6c61 7469 6f6e _RewriteRelation │ │ │ +0000d5c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _
.
..
.< │ │ │ +0000d600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000d610: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0000d620: 4c74 6163 3c2f 7370 616e 3e20 3c73 7061 Ltac equiv_r │ │ │ +0000d650: 6577 7269 7465 5f72 656c 6174 696f 6e3c ewrite_relation< │ │ │ +0000d660: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> R :=< │ │ │ +0000d690: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0000d6a0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;tr │ │ │ +0000d6c0: 7969 663c 2f73 7061 6e3e 203c 7370 616e yif is_evar< │ │ │ +0000d6f0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> R th │ │ │ +0000d740: 656e 3c2f 7370 616e 3e20 3c73 7061 6e20 en fail
.  │ │ │ +0000d780: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; else class_apply equivalence_rew │ │ │ +0000d810: 7269 7465 5f72 656c 6174 696f 6e3c 2f73 rite_relation
.
..
.#[global]< │ │ │ +0000d860: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ +0000d8c0: 2031 3020 2840 3c61 2063 6c61 7373 3d22 10 (@< │ │ │ +0000d910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000d920: 7469 746c 653d 2263 6c61 7373 223e 5265 title="class">Re │ │ │ +0000d930: 7772 6974 6552 656c 6174 696f 6e3c 2f73 writeRelation
?A │ │ │ +0000d970: 3f3c 7370 616e 2063 6c61 7373 3d22 6964 ?R< │ │ │ +0000d990: 2f73 7061 6e3e 2920 3d26 6774 3b20 3c73 /span>) => equiv │ │ │ +0000d9c0: 5f72 6577 7269 7465 5f72 656c 6174 696f _rewrite_relatio │ │ │ +0000d9d0: 6e3c 2f73 7061 6e3e 203c 7370 616e 2063 n R : │ │ │ +0000da00: 203c 7370 616e 2063 6c61 7373 3d22 6964 ty │ │ │ +0000da20: 7065 636c 6173 735f 696e 7374 616e 6365 peclass_instance │ │ │ +0000da30: 733c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a s.
.. │ │ │ +0000da40: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +0000da60: 4869 6e74 7320 746f 2064 7269 7665 2074 Hints to drive t │ │ │ +0000da70: 6865 2074 7970 6563 6c61 7373 2072 6573 he typeclass res │ │ │ +0000da80: 6f6c 7574 696f 6e20 6176 6f69 6469 6e67 olution avoiding │ │ │ +0000da90: 206c 6f6f 7073 0a20 6475 6520 746f 2074 loops. due to t │ │ │ +0000daa0: 6865 2075 7365 206f 6620 6675 6c6c 2075 he use of full u │ │ │ +0000dab0: 6e69 6669 6361 7469 6f6e 2e20 0a3c 2f64 nification. ..
.#[global]
.Hint< │ │ │ +0000db30: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Extern 1 (Refle │ │ │ +0000dbd0: 7869 7665 3c2f 7370 616e 3e3c 2f61 3e20 xive │ │ │ +0000dbe0: 283c 6120 636c 6173 733d 2269 6472 6566 (complem │ │ │ +0000dc50: 656e 743c 2f73 7061 6e3e 3c2f 613e 203c ent < │ │ │ +0000dc60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000dc70: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
)) => class_ │ │ │ +0000dcb0: 6170 706c 793c 2f73 7061 6e3e 2040 3c61 apply @irrefle │ │ │ +0000dd30: 7869 7669 7479 3c2f 7370 616e 3e3c 2f61 xivity : typeclass_insta │ │ │ +0000dd70: 6e63 6573 3c2f 7370 616e 3e2e 3c62 722f nces.
.#[global]< │ │ │ +0000ddb0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ +0000de10: 2033 2028 3c61 2063 6c61 7373 3d22 6964 3 (Symmetric< │ │ │ +0000de80: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> ( │ │ │ +0000ded0: 3c73 7061 6e20 636c 6173 733d 2269 6422 complement _) │ │ │ +0000df30: 2920 3d26 6774 3b20 3c73 7061 6e20 636c ) => class_apply │ │ │ +0000df60: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c complement_ │ │ │ +0000df90: 5379 6d6d 6574 7269 633c 2f73 7061 6e3e Symmetric │ │ │ +0000dfa0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +0000dfc0: 7479 7065 636c 6173 735f 696e 7374 616e typeclass_instan │ │ │ +0000dfd0: 6365 733c 2f73 7061 6e3e 2e3c 6272 2f3e ces.
│ │ │ +0000dfe0: 0a23 5b3c 7370 616e 2063 6c61 7373 3d22 .#[ │ │ │ +0000e000: 676c 6f62 616c 3c2f 7370 616e 3e5d 3c62 global].Hint │ │ │ +0000e040: 203c 7370 616e 2063 6c61 7373 3d22 6964 Extern │ │ │ +0000e070: 3320 283c 6120 636c 6173 733d 2269 6472 3 (Irreflexi │ │ │ +0000e0e0: 7665 3c2f 7370 616e 3e3c 2f61 3e20 283c ve (< │ │ │ +0000e0f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000e100: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0000e110: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0000e120: 732e 6874 6d6c 2363 6f6d 706c 656d 656e s.html#complemen │ │ │ +0000e130: 7422 3e3c 7370 616e 2063 6c61 7373 3d22 t">complemen │ │ │ +0000e160: 743c 2f73 7061 6e3e 3c2f 613e 203c 7370 t _)) => class_ap │ │ │ +0000e1c0: 706c 793c 2f73 7061 6e3e 203c 7370 616e ply compleme │ │ │ +0000e1f0: 6e74 5f49 7272 6566 6c65 7869 7665 3c2f nt_Irreflexive : typeclass_i │ │ │ +0000e230: 6e73 7461 6e63 6573 3c2f 7370 616e 3e2e nstances. │ │ │ +0000e240: 3c62 722f 3e0a 0a3c 6272 2f3e 0a23 5b3c
..
.#[< │ │ │ +0000e250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000e260: 7469 746c 653d 2276 6172 223e 676c 6f62 title="var">glob │ │ │ +0000e270: 616c 3c2f 7370 616e 3e5d 3c62 722f 3e0a al
]
. │ │ │ +0000e280: 3c73 7061 6e20 636c 6173 733d 2269 6422 Hint Ex │ │ │ +0000e2d0: 7465 726e 3c2f 7370 616e 3e20 3320 283c tern 3 (< │ │ │ +0000e2e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000e2f0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0000e300: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0000e310: 732e 6874 6d6c 2352 6566 6c65 7869 7665 s.html#Reflexive │ │ │ +0000e320: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Reflexive ( │ │ │ +0000e3b0: 666c 6970 3c2f 7370 616e 3e3c 2f61 3e20 flip │ │ │ +0000e3c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _)) => ap │ │ │ +0000e410: 706c 793c 2f73 7061 6e3e 203c 6120 636c ply flip_Reflexive │ │ │ +0000e490: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : typec │ │ │ +0000e4c0: 6c61 7373 5f69 6e73 7461 6e63 6573 3c2f lass_instances.
.#[globa │ │ │ +0000e500: 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c l]
.< │ │ │ +0000e510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000e520: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0000e530: 4869 6e74 3c2f 7370 616e 3e20 3c73 7061 Hint Ext │ │ │ +0000e560: 6572 6e3c 2f73 7061 6e3e 2033 2028 3c61 ern 3 (Irreflexive
(< │ │ │ +0000e620: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000e630: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0000e640: 6e22 3e66 6c69 703c 2f73 7061 6e3e 3c2f n">flip │ │ │ +0000e670: 5f3c 2f73 7061 6e3e 2929 203d 2667 743b _)) => │ │ │ +0000e680: 203c 7370 616e 2063 6c61 7373 3d22 6964 cl │ │ │ +0000e6a0: 6173 735f 6170 706c 793c 2f73 7061 6e3e ass_apply │ │ │ +0000e6b0: 203c 7370 616e 2063 6c61 7373 3d22 6964 fl │ │ │ +0000e6d0: 6970 5f49 7272 6566 6c65 7869 7665 3c2f ip_Irreflexive : typeclass_i │ │ │ +0000e710: 6e73 7461 6e63 6573 3c2f 7370 616e 3e2e nstances. │ │ │ +0000e720: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Hint Extern
3 (Symmet │ │ │ +0000e820: 7269 633c 2f73 7061 6e3e 3c2f 613e 2028 ric ( │ │ │ +0000e830: 3c61 2063 6c61 7373 3d22 6964 7265 6622 flip
_)) │ │ │ +0000e8c0: 203d 2667 743b 203c 7370 616e 2063 6c61 => class_apply< │ │ │ +0000e8f0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> flip_Symmetr │ │ │ +0000e920: 6963 3c2f 7370 616e 3e20 3a20 3c73 7061 ic : typecla │ │ │ +0000e950: 7373 5f69 6e73 7461 6e63 6573 3c2f 7370 ss_instances
.
.#[global< │ │ │ +0000e990: 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c 7370 /span>]
.Hi │ │ │ +0000e9c0: 6e74 3c2f 7370 616e 3e20 3c73 7061 6e20 nt Exter │ │ │ +0000e9f0: 6e3c 2f73 7061 6e3e 2033 2028 3c61 2063 n 3 ( │ │ │ +0000ea40: 3c73 7061 6e20 636c 6173 733d 2269 6422 A │ │ │ +0000ea60: 7379 6d6d 6574 7269 633c 2f73 7061 6e3e symmetric │ │ │ +0000ea70: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ +0000ead0: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ +0000eae0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000eaf0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
)) => class_ │ │ │ +0000eb30: 6170 706c 793c 2f73 7061 6e3e 203c 7370 apply flip_A │ │ │ +0000eb60: 7379 6d6d 6574 7269 633c 2f73 7061 6e3e symmetric │ │ │ +0000eb70: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +0000eb90: 7479 7065 636c 6173 735f 696e 7374 616e typeclass_instan │ │ │ +0000eba0: 6365 733c 2f73 7061 6e3e 2e3c 6272 2f3e ces.
│ │ │ +0000ebb0: 0a23 5b3c 7370 616e 2063 6c61 7373 3d22 .#[ │ │ │ +0000ebd0: 676c 6f62 616c 3c2f 7370 616e 3e5d 3c62 global].Hint │ │ │ +0000ec10: 203c 7370 616e 2063 6c61 7373 3d22 6964 Extern │ │ │ +0000ec40: 3320 283c 6120 636c 6173 733d 2269 6472 3 (Antisym │ │ │ +0000ecb0: 6d65 7472 6963 3c2f 7370 616e 3e3c 2f61 metric (flip │ │ │ +0000ed20: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _)) => class_app │ │ │ +0000ed80: 6c79 3c2f 7370 616e 3e20 3c73 7061 6e20 ly flip_Anti │ │ │ +0000edb0: 7379 6d6d 6574 7269 633c 2f73 7061 6e3e symmetric │ │ │ +0000edc0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +0000ede0: 7479 7065 636c 6173 735f 696e 7374 616e typeclass_instan │ │ │ +0000edf0: 6365 733c 2f73 7061 6e3e 2e3c 6272 2f3e ces.
│ │ │ +0000ee00: 0a23 5b3c 7370 616e 2063 6c61 7373 3d22 .#[ │ │ │ +0000ee20: 676c 6f62 616c 3c2f 7370 616e 3e5d 3c62 global].Hint │ │ │ +0000ee60: 203c 7370 616e 2063 6c61 7373 3d22 6964 Extern │ │ │ +0000ee90: 3320 283c 6120 636c 6173 733d 2269 6472 3 (Transitive │ │ │ +0000ef00: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (flip _)) =& │ │ │ +0000efa0: 6774 3b20 3c73 7061 6e20 636c 6173 733d gt; class_apply
flip_Transitive │ │ │ +0000f000: 3c2f 7370 616e 3e20 3a20 3c73 7061 6e20 : typeclass │ │ │ +0000f030: 5f69 6e73 7461 6e63 6573 3c2f 7370 616e _instances.
.#[global
]
.Hint │ │ │ +0000f0a0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c Extern< │ │ │ +0000f0d0: 2f73 7061 6e3e 2033 2028 3c61 2063 6c61 /span> 3 (< │ │ │ +0000f120: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000f130: 7469 746c 653d 2263 6c61 7373 223e 5374 title="class">St │ │ │ +0000f140: 7269 6374 4f72 6465 723c 2f73 7061 6e3e rictOrder │ │ │ +0000f150: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ +0000f1b0: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ +0000f1c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000f1d0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
)) => class_ │ │ │ +0000f210: 6170 706c 793c 2f73 7061 6e3e 203c 7370 apply flip_S │ │ │ +0000f240: 7472 6963 744f 7264 6572 3c2f 7370 616e trictOrder : typeclass_insta │ │ │ +0000f280: 6e63 6573 3c2f 7370 616e 3e2e 3c62 722f nces.
.#[global]< │ │ │ +0000f2c0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Extern │ │ │ +0000f320: 2033 2028 3c61 2063 6c61 7373 3d22 6964 3 (PreOrder (< │ │ │ +0000f3d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000f3e0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0000f3f0: 6e22 3e66 6c69 703c 2f73 7061 6e3e 3c2f n">flip │ │ │ +0000f420: 5f3c 2f73 7061 6e3e 2929 203d 2667 743b _)) => │ │ │ +0000f430: 203c 7370 616e 2063 6c61 7373 3d22 6964 cl │ │ │ +0000f450: 6173 735f 6170 706c 793c 2f73 7061 6e3e ass_apply │ │ │ +0000f460: 203c 7370 616e 2063 6c61 7373 3d22 6964 fl │ │ │ +0000f480: 6970 5f50 7265 4f72 6465 723c 2f73 7061 ip_PreOrder : typeclass_inst │ │ │ +0000f4c0: 616e 6365 733c 2f73 7061 6e3e 2e3c 6272 ances.
..
.#[global< │ │ │ +0000f500: 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c 7370 /span>]
.Hi │ │ │ +0000f530: 6e74 3c2f 7370 616e 3e20 3c73 7061 6e20 nt
Exter │ │ │ +0000f560: 6e3c 2f73 7061 6e3e 2034 2028 3c61 2063 n 4 (
│ │ │ +0000f5d0: 7375 6272 656c 6174 696f 6e3c 2f73 7061 subrelation (flip │ │ │ +0000f650: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0000f670: 2f73 7061 6e3e 2920 3c73 7061 6e20 636c /span>) _) = │ │ │ +0000f6a0: 2667 743b 203c 6272 2f3e 0a26 6e62 7370 >
.  │ │ │ +0000f6b0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; class_apply< │ │ │ +0000f6e0: 2f73 7061 6e3e 2040 3c61 2063 6c61 7373 /span> @subrelatio │ │ │ +0000f760: 6e5f 7379 6d6d 6574 7269 633c 2f73 7061 n_symmetric : typeclass_ │ │ │ +0000f7a0: 696e 7374 616e 6365 733c 2f73 7061 6e3e instances │ │ │ +0000f7b0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.A │ │ │ +0000f7e0: 7267 756d 656e 7473 3c2f 7370 616e 3e20 rguments
│ │ │ +0000f7f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 irref │ │ │ +0000f860: 6c65 7869 7669 7479 3c2f 7370 616e 3e3c lexivity< │ │ │ +0000f870: 2f61 3e20 7b3c 7370 616e 2063 6c61 7373 /a> {A R │ │ │ +0000f8c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Ir │ │ │ +0000f8e0: 7265 666c 6578 6976 653c 2f73 7061 6e3e reflexive │ │ │ +0000f8f0: 7d20 5b3c 7370 616e 2063 6c61 7373 3d22 } [ │ │ │ +0000f910: 783c 2f73 7061 6e3e 5d20 3c73 7061 6e20 x] _ │ │ │ +0000f940: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : rename. │ │ │ +0000f970: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Arguments │ │ │ +0000f9a0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373
sy │ │ │ +0000fa10: 6d6d 6574 7279 3c2f 7370 616e 3e3c 2f61 mmetry { │ │ │ +0000fa40: 413c 2f73 7061 6e3e 7d20 7b3c 7370 616e A} {R │ │ │ +0000fa70: 7d20 7b3c 7370 616e 2063 6c61 7373 3d22 } { │ │ │ +0000fa90: 5f3c 2f73 7061 6e3e 7d20 5b3c 7370 616e _} [x │ │ │ +0000fac0: 5d20 5b3c 7370 616e 2063 6c61 7373 3d22 ] [ │ │ │ +0000fae0: 793c 2f73 7061 6e3e 5d20 3c73 7061 6e20 y] _. │ │ │ +0000fb10: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Arguments │ │ │ +0000fb40: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 a │ │ │ +0000fbb0: 7379 6d6d 6574 7279 3c2f 7370 616e 3e3c symmetry< │ │ │ +0000fbc0: 2f61 3e20 7b3c 7370 616e 2063 6c61 7373 /a> {A} {R} {_} [x] [y] _
_ │ │ │ +0000fcd0: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 3c73 .
.A │ │ │ +0000fd00: 7267 756d 656e 7473 3c2f 7370 616e 3e20 rguments │ │ │ +0000fd10: 3c61 2063 6c61 7373 3d22 6964 7265 6622
transi │ │ │ +0000fd80: 7469 7669 7479 3c2f 7370 616e 3e3c 2f61 tivity { │ │ │ +0000fdb0: 413c 2f73 7061 6e3e 7d20 7b3c 7370 616e A} {R │ │ │ +0000fde0: 7d20 7b3c 7370 616e 2063 6c61 7373 3d22 } { │ │ │ +0000fe00: 5f3c 2f73 7061 6e3e 7d20 5b3c 7370 616e _} [x │ │ │ +0000fe30: 5d20 5b3c 7370 616e 2063 6c61 7373 3d22 ] [ │ │ │ +0000fe50: 793c 2f73 7061 6e3e 5d20 5b3c 7370 616e y] [z │ │ │ +0000fe80: 5d20 3c73 7061 6e20 636c 6173 733d 2269 ] _ │ │ │ +0000fea0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _..Arguments Anti │ │ │ +0000ff70: 7379 6d6d 6574 7269 633c 2f73 7061 6e3e symmetric │ │ │ +0000ff80: 3c2f 613e 203c 7370 616e 2063 6c61 7373 A eqA {_} _ │ │ │ +00010020: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 235b .
..
.#[ │ │ │ +00010030: 3c73 7061 6e20 636c 6173 733d 2269 6422 glo │ │ │ +00010050: 6261 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e bal]
│ │ │ +00010060: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Hint R │ │ │ +000100b0: 6573 6f6c 7665 3c2f 7370 616e 3e20 3c73 esolve
irref │ │ │ +000100e0: 6c65 7869 7669 7479 3c2f 7370 616e 3e20 lexivity │ │ │ +000100f0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : o │ │ │ +00010110: 7264 3c2f 7370 616e 3e2e 3c62 722f 3e0a rd.
. │ │ │ +00010120: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Unset Im │ │ │ +00010150: 706c 6963 6974 2041 7267 756d 656e 7473 plicit Arguments │ │ │ +00010160: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 0a3c .
..< │ │ │ +00010170: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Ltac s │ │ │ +000101c0: 6f6c 7665 5f72 656c 6174 696f 6e3c 2f73 olve_relation
:=
.&nb │ │ │ +000101e0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; match< │ │ │ +00010210: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> goal
with │ │ │ +00010270: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00010280: 703b 7c20 5b20 7c2d 203f 3c73 7061 6e20 p;| [ |- ?R │ │ │ +000102b0: 3f3c 7370 616e 2063 6c61 7373 3d22 6964 ?x< │ │ │ +000102d0: 2f73 7061 6e3e 203f 3c73 7061 6e20 636c /span> ?x ] │ │ │ +00010300: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => reflexivit │ │ │ +00010330: 793c 2f73 7061 6e3e 3c62 722f 3e0a 266e y
.&n │ │ │ +00010340: 6273 703b 266e 6273 703b 7c20 5b20 3c73 bsp; | [ H
: ?R ?x ?y |- ?< │ │ │ +000103f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010400: 7469 746c 653d 2276 6172 223e 523c 2f73 title="var">R ?y ?x ] => symme │ │ │ +00010490: 7472 793c 2f73 7061 6e3e 203b 203c 7370 try ; exa │ │ │ +000104c0: 6374 3c2f 7370 616e 3e20 3c73 7061 6e20 ct H< │ │ │ +000104f0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00010500: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;end.
..
.#[global< │ │ │ +00010560: 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c 7370 /span>]
.Hi │ │ │ +00010590: 6e74 3c2f 7370 616e 3e20 3c73 7061 6e20 nt Exter │ │ │ +000105c0: 6e3c 2f73 7061 6e3e 2034 203d 2667 743b n 4 => │ │ │ +000105d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 so │ │ │ +000105f0: 6c76 655f 7265 6c61 7469 6f6e 3c2f 7370 lve_relation : relations
.
..
│ │ │ +00010640: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.We ca │ │ │ +00010660: 6e20 616c 7265 6164 7920 6475 616c 697a n already dualiz │ │ │ +00010670: 6520 616c 6c20 7468 6573 6520 7072 6f70 e all these prop │ │ │ +00010680: 6572 7469 6573 2e20 0a3c 6469 7620 636c erties. .
│ │ │ +000106a0: 203c 2f64 6976 3e0a 0a3c 6120 6964 3d22
..

│ │ │ +000106d0: 5374 616e 6461 7264 2069 6e73 7461 6e63 Standard instanc │ │ │ +000106e0: 6573 2e3c 2f68 313e 0a0a 3c2f 6469 763e es.

..
│ │ │ +000106f0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.Ltac │ │ │ +00010730: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c reduce_hyp< │ │ │ +00010760: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> H :=< │ │ │ +00010790: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +000107a0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;match < │ │ │ +000107d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000107e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000107f0: 7479 7065 3c2f 7370 616e 3e20 3c73 7061 type of< │ │ │ +00010820: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> H wi │ │ │ +00010870: 7468 3c2f 7370 616e 3e3c 6272 2f3e 0a26 th
.& │ │ │ +00010880: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00010890: 3b26 6e62 7370 3b7c 203c 7370 616e 2063 ; | contex │ │ │ +000108c0: 743c 2f73 7061 6e3e 205b 203c 7370 616e t [ _ │ │ │ +000108f0: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +00010960: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00010970: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00010990: 2f73 7061 6e3e 205d 203d 2667 743b 203c /span> ] => < │ │ │ +000109a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000109b0: 7469 746c 653d 2274 6163 7469 6322 3e66 title="tactic">f │ │ │ +000109c0: 6169 6c3c 2f73 7061 6e3e 2031 3c62 722f ail 1
.  &n │ │ │ +000109e0: 6273 703b 266e 6273 703b 7c20 3c73 7061 bsp; | _ => red in H
; try │ │ │ +00010ac0: 3c73 7061 6e20 636c 6173 733d 2269 6422 red │ │ │ +00010ae0: 7563 655f 6879 703c 2f73 7061 6e3e 203c uce_hyp < │ │ │ +00010af0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010b00: 7469 746c 653d 2276 6172 223e 483c 2f73 title="var">H

.  │ │ │ +00010b20: 266e 6273 703b 3c73 7061 6e20 636c 6173  end.
..
.< │ │ │ +00010b60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010b70: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00010b80: 4c74 6163 3c2f 7370 616e 3e20 3c73 7061 Ltac reduce_ │ │ │ +00010bb0: 676f 616c 3c2f 7370 616e 3e20 3a3d 3c62 goal :=.   │ │ │ +00010bd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 match g │ │ │ +00010c20: 6f61 6c3c 2f73 7061 6e3e 203c 7370 616e oal with │ │ │ +00010c50: 3c2f 7370 616e 3e3c 6272 2f3e 0a26 6e62
.&nb │ │ │ +00010c60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00010c70: 6e62 7370 3b7c 205b 207c 2d20 3c73 7061 nbsp;| [ |- _ < │ │ │ +00010d10: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> _ │ │ │ +00010d40: 3c2f 7370 616e 3e20 5d20 3d26 6774 3b20 ] => │ │ │ +00010d50: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00010d70: 6661 696c 3c2f 7370 616e 3e20 313c 6272 fail 1
.  & │ │ │ +00010d90: 6e62 7370 3b26 6e62 7370 3b7c 203c 7370 nbsp; | _
=> red ; intros ; try │ │ │ +00010e50: 203c 7370 616e 2063 6c61 7373 3d22 6964 re │ │ │ +00010e70: 6475 6365 5f67 6f61 6c3c 2f73 7061 6e3e duce_goal │ │ │ +00010e80: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00010e90: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;end...
.Tact │ │ │ +00010ef0: 6963 204e 6f74 6174 696f 6e3c 2f73 7061 ic Notation
"reduce" "in" │ │ │ +00010f10: 203c 7370 616e 2063 6c61 7373 3d22 6964 hy │ │ │ +00010f30: 703c 2f73 7061 6e3e 283c 7370 616e 2063 p(Hid │ │ │ +00010f60: 2920 3a3d 203c 7370 616e 2063 6c61 7373 ) := reduce_hyp Hid.
..
.Ltac reduce │ │ │ +00011020: 203a 3d20 3c73 7061 6e20 636c 6173 733d := reduce_goal.
..
│ │ │ +00011060: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Tactic Notatio │ │ │ +00011090: 6e3c 2f73 7061 6e3e 2022 6170 706c 7922 n "apply" │ │ │ +000110a0: 2022 2a22 203c 7370 616e 2063 6c61 7373 "*" constr(t) :=
.  < │ │ │ +00011110: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00011120: 7469 746c 653d 2274 6163 7469 6322 3e66 title="tactic">f │ │ │ +00011130: 6972 7374 3c2f 7370 616e 3e20 5b20 3c73 irst
[ re │ │ │ +00011160: 6669 6e65 3c2f 7370 616e 3e20 3c73 7061 fine
t
| refine ( │ │ │ +000111e0: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t _) │ │ │ +00011210: 7c20 3c73 7061 6e20 636c 6173 733d 2269 | refine │ │ │ +00011240: 283c 7370 616e 2063 6c61 7373 3d22 6964 (t< │ │ │ +00011260: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ _) | refine (t _ │ │ │ +00011330: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00011350: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _) | │ │ │ +00011380: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000113a0: 7265 6669 6e65 3c2f 7370 616e 3e20 283c refine (< │ │ │ +000113b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000113c0: 7469 746c 653d 2276 6172 223e 743c 2f73 title="var">t _ _ │ │ │ +00011420: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00011440: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _) |< │ │ │ +00011470: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00011480: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  ref │ │ │ +000114b0: 696e 653c 2f73 7061 6e3e 2028 3c73 7061 ine (t
_ │ │ │ +00011500: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ _ _ _) │ │ │ +000115a0: 207c 203c 7370 616e 2063 6c61 7373 3d22 | refine │ │ │ +000115d0: 2028 3c73 7061 6e20 636c 6173 733d 2269 (t │ │ │ +000115f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ _ _ _ │ │ │ +00011690: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _) | < │ │ │ +000116e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000116f0: 7469 746c 653d 2274 6163 7469 6322 3e72 title="tactic">r │ │ │ +00011700: 6566 696e 653c 2f73 7061 6e3e 2028 3c73 efine (t _ _ │ │ │ +00011780: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _ _ │ │ │ +00011810: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _) ] │ │ │ +00011840: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.L │ │ │ +00011870: 7461 633c 2f73 7061 6e3e 203c 7370 616e tac simpl_re │ │ │ +000118a0: 6c61 7469 6f6e 3c2f 7370 616e 3e20 3a3d lation := │ │ │ +000118b0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000118c0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;unfold │ │ │ +000118f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 flip
, < │ │ │ +00011990: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000119a0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +000119b0: 6e22 3e69 6d70 6c3c 2f73 7061 6e3e 3c2f n">impl, ar │ │ │ +00011a20: 726f 773c 2f73 7061 6e3e 3c2f 613e 203b row ; │ │ │ +00011a30: 203c 7370 616e 2063 6c61 7373 3d22 6964 try reduce< │ │ │ +00011a80: 2f73 7061 6e3e 203b 203c 7370 616e 2063 /span> ; program │ │ │ +00011ab0: 5f73 696d 706c 3c2f 7370 616e 3e20 3b3c _simpl ;< │ │ │ +00011ac0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00011ad0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  try │ │ │ +00011b00: 3c2f 7370 616e 3e20 2820 3c73 7061 6e20 ( solve< │ │ │ +00011b30: 2f73 7061 6e3e 205b 203c 7370 616e 2063 /span> [ dintuition │ │ │ +00011b60: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c auto with │ │ │ +00011bc0: 203c 7370 616e 2063 6c61 7373 3d22 6964 re │ │ │ +00011be0: 6c61 7469 6f6e 733c 2f73 7061 6e3e 205d lations ] │ │ │ +00011bf0: 292e 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c ).
..
.< │ │ │ +00011c00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00011c10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00011c20: 4c6f 6361 6c20 4f62 6c69 6761 7469 6f6e Local Obligation │ │ │ +00011c30: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c Tactic< │ │ │ +00011c60: 2f73 7061 6e3e 203a 3d20 3c73 7061 6e20 /span> := try
solve [ simpl_relation< │ │ │ +00011cf0: 2f73 7061 6e3e 205d 2e3c 6272 2f3e 0a0a /span> ].
.. │ │ │ +00011d00: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +00011d20: 4c6f 6769 6361 6c20 696d 706c 6963 6174 Logical implicat │ │ │ +00011d30: 696f 6e2e 200a 3c2f 6469 763e 0a3c 6469 ion. .
.. │ │ │ +00011d50: 0a3c 6272 2f3e 0a23 5b3c 7370 616e 2063 .
.#[global]
.Program Instance< │ │ │ +00011de0: 2f73 7061 6e3e 203c 6120 6964 3d22 696d /span> impl_Reflex │ │ │ +00011e50: 6976 653c 2f73 7061 6e3e 3c2f 613e 203a ive : │ │ │ +00011e60: 203c 6120 636c 6173 733d 2269 6472 6566 Reflexive impl │ │ │ +00011f40: 2e3c 6272 2f3e 0a23 5b3c 7370 616e 2063 .
.#[global]
.Program Instance< │ │ │ +00011fd0: 2f73 7061 6e3e 203c 6120 6964 3d22 696d /span> impl_Tran │ │ │ +00012040: 7369 7469 7665 3c2f 7370 616e 3e3c 2f61 sitive : Transitiv │ │ │ +000120c0: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e impl.
..
.
..
.Log │ │ │ +00012160: 6963 616c 2065 7175 6976 616c 656e 6365 ical equivalence │ │ │ +00012170: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...#[global │ │ │ +000121c0: 5d3c 6272 2f3e 0a3c 7370 616e 2063 6c61 ]
.Instance │ │ │ +000121f0: 3c2f 7370 616e 3e20 3c61 2069 643d 2269 iff_Reflexiv │ │ │ +00012260: 653c 2f73 7061 6e3e 3c2f 613e 203a 203c e : < │ │ │ +00012270: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00012280: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00012290: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +000122a0: 732e 6874 6d6c 2352 6566 6c65 7869 7665 s.html#Reflexive │ │ │ +000122b0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Reflexive iff
:= │ │ │ +000123a0: 6966 665f 7265 666c 3c2f 7370 616e 3e3c iff_refl< │ │ │ +000123b0: 2f61 3e2e 3c62 722f 3e0a 235b 3c73 7061 /a>.
.#[global< │ │ │ +000123e0: 2f73 7061 6e3e 5d3c 6272 2f3e 0a3c 7370 /span>]
.In │ │ │ +00012410: 7374 616e 6365 3c2f 7370 616e 3e20 3c61 stance
iff_Sy │ │ │ +00012480: 6d6d 6574 7269 633c 2f73 7061 6e3e 3c2f mmetric : Symmetric │ │ │ +00012500: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00012560: 6966 663c 2f73 7061 6e3e 3c2f 613e 203a iff : │ │ │ +00012570: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = iff_sym.
.#[ │ │ │ +000125e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 glo │ │ │ +00012600: 6261 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e bal]
│ │ │ +00012610: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Instance │ │ │ +000126a0: 6966 665f 5472 616e 7369 7469 7665 3c2f iff_Transitive : │ │ │ +00012700: 3c73 7061 6e20 636c 6173 733d 2269 6422 T │ │ │ +00012720: 7261 6e73 6974 6976 653c 2f73 7061 6e3e ransitive │ │ │ +00012730: 3c2f 613e 203c 6120 636c 6173 733d 2269 iff := │ │ │ +000127f0: 6966 665f 7472 616e 733c 2f73 7061 6e3e iff_trans │ │ │ +00012800: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.Logi │ │ │ +00012830: 6361 6c20 6571 7569 7661 6c65 6e63 6520 cal equivalence │ │ │ +00012840: 3c73 7061 6e20 636c 6173 733d 2269 6e6c iff │ │ │ +00012880: 3c2f 7370 616e 3e20 6973 2061 6e20 6571 is an eq │ │ │ +00012890: 7569 7661 6c65 6e63 6520 7265 6c61 7469 uivalence relati │ │ │ +000128a0: 6f6e 2e20 0a3c 2f64 6976 3e0a 3c64 6976 on. .
.
.. │ │ │ +000128c0: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Program
Instance iff_equiva │ │ │ +000129c0: 6c65 6e63 653c 2f73 7061 6e3e 3c2f 613e lence │ │ │ +000129d0: 203a 203c 6120 636c 6173 733d 2269 6472 : Equivalen │ │ │ +00012a40: 6365 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ce iff │ │ │ +00012ab0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.We now d │ │ │ +00012ae0: 6576 656c 6f70 2061 2067 656e 6572 616c evelop a general │ │ │ +00012af0: 697a 6174 696f 6e20 6f66 2072 6573 756c ization of resul │ │ │ +00012b00: 7473 206f 6e20 7265 6c61 7469 6f6e 7320 ts on relations │ │ │ +00012b10: 666f 7220 6172 6269 7472 6172 7920 7072 for arbitrary pr │ │ │ +00012b20: 6564 6963 6174 6573 2e0a 2020 2054 6865 edicates.. The │ │ │ +00012b30: 2072 6573 756c 7469 6e67 2074 6865 6f72 resulting theor │ │ │ +00012b40: 7920 6361 6e20 6265 2061 7070 6c69 6564 y can be applied │ │ │ +00012b50: 2074 6f20 686f 6d6f 6765 6e65 6f75 7320 to homogeneous │ │ │ +00012b60: 6269 6e61 7279 2072 656c 6174 696f 6e73 binary relations │ │ │ +00012b70: 2062 7574 2061 6c73 6f20 746f 0a20 2020 but also to. │ │ │ +00012b80: 6172 6269 7472 6172 7920 6e2d 6172 7920 arbitrary n-ary │ │ │ +00012b90: 7072 6564 6963 6174 6573 2e20 0a3c 2f64 predicates. ..
..
.L │ │ │ +00012be0: 6f63 616c 204f 7065 6e3c 2f73 7061 6e3e ocal Open │ │ │ +00012bf0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Scope < │ │ │ +00012c20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00012c30: 7469 746c 653d 2276 6172 223e 6c69 7374 title="var">list │ │ │ +00012c40: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope...
.
..
.A compact r │ │ │ +00012c80: 6570 7265 7365 6e74 6174 696f 6e20 6f66 epresentation of │ │ │ +00012c90: 206e 6f6e 2d64 6570 656e 6465 6e74 2061 non-dependent a │ │ │ +00012ca0: 7269 7469 6573 2c20 7769 7468 2074 6865 rities, with the │ │ │ +00012cb0: 2063 6f64 6f6d 6169 6e20 7369 6e67 6c65 codomain single │ │ │ +00012cc0: 642d 6f75 742e 200a 3c2f 6469 763e 0a3c d-out. .
.< │ │ │ +00012cd0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ +00012ce0: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Induct │ │ │ +00012d10: 6976 653c 2f73 7061 6e3e 203c 6120 6964 ive Tlist │ │ │ +00012e10: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f : Type := Tnil : Tlist< │ │ │ +00012f20: 2f73 7061 6e3e 3c2f 613e 207c 203c 6120 /span> | Tcon │ │ │ +00012f80: 733c 2f73 7061 6e3e 3c2f 613e 203a 203c s : < │ │ │ +00012f90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00012fa0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00012fb0: 5479 7065 3c2f 7370 616e 3e20 3c61 2063 Type ->< │ │ │ +00013030: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Tlist< │ │ │ +000130a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +000130f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Tlist.
. │ │ │ +000131a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Local Infix &quo │ │ │ +00013230: 743b 3c2f 7370 616e 3e3c 2f61 3e3a 3a22 t;::" │ │ │ +00013240: 203a 3d20 3c61 2063 6c61 7373 3d22 6964 := Tcons
.
.. │ │ │ +000132c0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Fixpoint< │ │ │ +000132f0: 2f73 7061 6e3e 203c 6120 6964 3d22 6172 /span> arrows
(l │ │ │ +000133b0: 203a 203c 6120 636c 6173 733d 2269 6472 : Tlist) (r : │ │ │ +00013480: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type) : │ │ │ +000134b0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type := │ │ │ +000134e0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000134f0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;match │ │ │ +00013520: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +00013560: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00013570: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00013580: 3e6c 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >l w │ │ │ +000135b0: 6974 683c 2f73 7061 6e3e 3c62 722f 3e0a ith
. │ │ │ +000135c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000135d0: 703b 266e 6273 703b 7c20 3c61 2063 6c61 p; | Tni │ │ │ +00013640: 6c3c 2f73 7061 6e3e 3c2f 613e 203d 2667 l =&g │ │ │ +00013650: 743b 203c 6120 636c 6173 733d 2269 6472 t; r │ │ │ +000136c0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000136d0: 703b 266e 6273 703b 266e 6273 703b 7c20 p;  | │ │ │ +000136e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A ::< │ │ │ +00013770: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> l' => A -> ar │ │ │ +000138b0: 726f 7773 3c2f 7370 616e 3e3c 2f61 3e20 rows │ │ │ +000138c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 l'< │ │ │ +000138e0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> r │ │ │ +00013950: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ +00013960: 266e 6273 703b 3c73 7061 6e20 636c 6173  end.
..
.< │ │ │ +000139a0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.We can │ │ │ +000139c0: 6465 6669 6e65 2061 6262 7265 7669 6174 define abbreviat │ │ │ +000139d0: 696f 6e73 2066 6f72 206f 7065 7261 7469 ions for operati │ │ │ +000139e0: 6f6e 2061 6e64 2072 656c 6174 696f 6e20 on and relation │ │ │ +000139f0: 7479 7065 7320 6261 7365 6420 6f6e 203c types based on < │ │ │ +00013a00: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00013a10: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">arrows. ..
..
.De │ │ │ +00013a90: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ +00013aa0: 3c61 2069 643d 2275 6e61 7279 5f6f 7065 unary_operatio │ │ │ +00013b10: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n A< │ │ │ +00013b70: 2f61 3e20 3a3d 203c 6120 636c 6173 733d /a> := arrow │ │ │ +00013be0: 733c 2f73 7061 6e3e 3c2f 613e 2028 3c61 s (A │ │ │ +00013c50: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +00013ca0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ +00013cd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013ce0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00013cf0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00013d00: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil) A │ │ │ +00013db0: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Definiti │ │ │ +00013de0: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on bi │ │ │ +00013e50: 6e61 7279 5f6f 7065 7261 7469 6f6e 3c2f nary_operation A │ │ │ +00013ec0: 203a 3d20 3c61 2063 6c61 7373 3d22 6964 := arrows (A
: │ │ │ +00014010: 3a3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 :A │ │ │ +000140f0: 3a3a 3c2f 7370 616e 3e3c 2f61 3e3c 6120 :: │ │ │ +00014160: 546e 696c 3c2f 7370 616e 3e3c 2f61 3e29 Tnil) │ │ │ +00014170: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +000141b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A.< │ │ │ +000141e0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Definition │ │ │ +00014210: 3c2f 7370 616e 3e20 3c61 2069 643d 2274 te │ │ │ +00014280: 726e 6172 795f 6f70 6572 6174 696f 6e3c rnary_operation< │ │ │ +00014290: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A := arrows< │ │ │ +00014360: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (A │ │ │ +00014440: 3a3a 3c2f 7370 616e 3e3c 2f61 3e3c 6120 ::A< │ │ │ +000144b0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ +00014500: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00014510: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00014520: 3e3a 3a3c 2f73 7061 6e3e 3c2f 613e 3c61 >::A │ │ │ +00014590: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +000145e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ::< │ │ │ +00014610: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00014620: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00014630: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00014640: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil) A │ │ │ +000146f0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.We defin │ │ │ +00014720: 6520 6e2d 6172 7920 3c73 7061 6e20 636c e n-ary pr │ │ │ +00014760: 6564 6963 6174 653c 2f73 7061 6e3e 3c2f edicates as functi │ │ │ +00014780: 6f6e 7320 696e 746f 203c 7370 616e 2063 ons into Prop. .
.< │ │ │ +000147e0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ +000147f0: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Notati │ │ │ +00014820: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on predicate l := │ │ │ +000148c0: 283c 6120 636c 6173 733d 2269 6472 6566 (arrows l Pr │ │ │ +00014980: 6f70 3c2f 7370 616e 3e29 2e3c 6272 2f3e op).
│ │ │ +00014990: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ +000149a0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.Unary predicat │ │ │ +000149c0: 6573 2c20 6f72 2073 6574 732e 200a 3c2f es, or sets. ..
..
.< │ │ │ +000149f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00014a00: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00014a10: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition │ │ │ +00014a60: 3c73 7061 6e20 636c 6173 733d 2269 6422 unary_predic │ │ │ +00014a90: 6174 653c 2f73 7061 6e3e 3c2f 613e 203c ate < │ │ │ +00014aa0: 6120 6964 3d22 413a 3132 3122 2063 6c61 a id="A:121" cla │ │ │ +00014ab0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00014ac0: 2223 413a 3132 3122 3e3c 7370 616e 2063 "#A:121">A := predicate (A::Tnil │ │ │ +00014cc0: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
..
.
│ │ │ +00014ce0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Homogeneous │ │ │ +00014d00: 6269 6e61 7279 2072 656c 6174 696f 6e73 binary relations │ │ │ +00014d10: 2c20 6571 7569 7661 6c65 6e74 2074 6f20 , equivalent to │ │ │ +00014d20: 3c73 7061 6e20 636c 6173 733d 2269 6e6c relation A. .
.
.. │ │ │ +00014dd0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Definitio │ │ │ +00014e00: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n binar │ │ │ +00014e70: 795f 7265 6c61 7469 6f6e 3c2f 7370 616e y_relation │ │ │ +00014eb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00014ed0: 413c 2f73 7061 6e3e 3c2f 613e 203a 3d20 A := │ │ │ +00014ee0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 predica │ │ │ +00014f50: 7465 3c2f 7370 616e 3e3c 2f61 3e20 283c te (< │ │ │ +00014f60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00014f70: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00014f80: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00014f90: 732e 6874 6d6c 2341 3a31 3232 223e 3c73 s.html#A:122"> │ │ │ +00014fc0: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A:: │ │ │ +00015040: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +00015080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015090: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000150a0: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A::< │ │ │ +00015160: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015170: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +00015180: 6f72 223e 546e 696c 3c2f 7370 616e 3e3c or">Tnil< │ │ │ +00015190: 2f61 3e29 2e3c 6272 2f3e 0a0a 3c62 722f /a>).
..
.
..
.We c │ │ │ +000151c0: 616e 2063 6c6f 7365 2061 2070 7265 6469 an close a predi │ │ │ +000151d0: 6361 7465 2062 7920 756e 6976 6572 7361 cate by universa │ │ │ +000151e0: 6c20 6f72 2065 7869 7374 656e 7469 616c l or existential │ │ │ +000151f0: 2071 7561 6e74 6966 6963 6174 696f 6e2e quantification. │ │ │ +00015200: 200a 3c2f 6469 763e 0a3c 6469 7620 636c .
.
..
.Fixpoint
predicate_all< │ │ │ +000152c0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (l : Tlist) : predicate l -& │ │ │ +000154f0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00015500: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015510: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00015520: 5072 6f70 3c2f 7370 616e 3e20 3a3d 3c62 Prop :=.   │ │ │ +00015540: 3c73 7061 6e20 636c 6173 733d 2269 6422 match l │ │ │ +000155d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 wit │ │ │ +00015600: 683c 2f73 7061 6e3e 3c62 722f 3e0a 266e h
.&n │ │ │ +00015610: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00015620: 266e 6273 703b 7c20 3c61 2063 6c61 7373  | Tnil< │ │ │ +00015690: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +000156a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 fun f< │ │ │ +00015720: 2f61 3e20 3d26 6774 3b20 3c61 2063 6c61 /a> => f
.&nb │ │ │ +000157a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000157b0: 6e62 7370 3b7c 203c 7370 616e 2063 6c61 nbsp;| A :: t │ │ │ +00015870: 6c3c 2f73 7061 6e3e 203d 2667 743b 203c l => < │ │ │ +00015880: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015890: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000158a0: 6675 6e3c 2f73 7061 6e3e 203c 6120 6964 fun f => forall< │ │ │ +00015930: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> x : │ │ │ +00015990: 3c73 7061 6e20 636c 6173 733d 2269 6422 A, predicate_ │ │ │ +00015a30: 616c 6c3c 2f73 7061 6e3e 3c2f 613e 203c all < │ │ │ +00015a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015a50: 7469 746c 653d 2276 6172 223e 746c 3c2f title="var">tl (f │ │ │ +00015ad0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x)
. & │ │ │ +00015b50: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;end │ │ │ +00015b80: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.F │ │ │ +00015bb0: 6978 706f 696e 743c 2f73 7061 6e3e 203c ixpoint
< │ │ │ +00015bc0: 6120 6964 3d22 7072 6564 6963 6174 655f a id="predicate_ │ │ │ +00015bd0: 6578 6973 7473 2220 636c 6173 733d 2269 exists" class="i │ │ │ +00015be0: 6472 6566 2220 6872 6566 3d22 2370 7265 dref" href="#pre │ │ │ +00015bf0: 6469 6361 7465 5f65 7869 7374 7322 3e3c dicate_exists">< │ │ │ +00015c00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015c10: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00015c20: 6e22 3e70 7265 6469 6361 7465 5f65 7869 n">predicate_exi │ │ │ +00015c30: 7374 733c 2f73 7061 6e3e 3c2f 613e 2028 sts
( │ │ │ +00015c40: 3c61 2069 643d 226c 3a31 3239 2220 636c l
: Tlist │ │ │ +00015d00: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ +00015d10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00015d20: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00015d30: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00015d40: 732e 6874 6d6c 2370 7265 6469 6361 7465 s.html#predicate │ │ │ +00015d50: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">predicat │ │ │ +00015d80: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e l< │ │ │ +00015df0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00015e40: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop │ │ │ +00015ea0: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ +00015eb0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;match
l │ │ │ +00015f50: 3c73 7061 6e20 636c 6173 733d 2269 6422 with
.  &n │ │ │ +00015f90: 6273 703b 266e 6273 703b 7c20 3c61 2063 bsp; | T │ │ │ +00016000: 6e69 6c3c 2f73 7061 6e3e 3c2f 613e 203d nil = │ │ │ +00016010: 2667 743b 203c 7370 616e 2063 6c61 7373 > fun │ │ │ +00016040: 203c 6120 6964 3d22 663a 3133 3222 2063 f => f │ │ │ +00016100: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +00016110: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00016120: 7370 3b26 6e62 7370 3b7c 203c 7370 616e sp; | A │ │ │ +00016150: 203c 6120 636c 6173 733d 2269 6472 6566 :: tl =&g │ │ │ +000161f0: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; fun < │ │ │ +00016220: 6120 6964 3d22 663a 3133 3322 2063 6c61 a id="f:133" cla │ │ │ +00016230: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00016240: 2223 663a 3133 3322 3e3c 7370 616e 2063 "#f:133">f => exist │ │ │ +000162f0: 733c 2f73 7061 6e3e 3c2f 613e 203c 6120 s x< │ │ │ +00016350: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : A, predica │ │ │ +00016470: 7465 5f65 7869 7374 733c 2f73 7061 6e3e te_exists │ │ │ +00016480: 3c2f 613e 203c 7370 616e 2063 6c61 7373 tl (f< │ │ │ +00016510: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x
)
.& │ │ │ +00016590: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; end< │ │ │ +000165c0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...
..
.Po │ │ │ +000165f0: 696e 7477 6973 6520 6578 7465 6e73 696f intwise extensio │ │ │ +00016600: 6e20 6f66 2061 2062 696e 6172 7920 6f70 n of a binary op │ │ │ +00016610: 6572 6174 696f 6e20 6f6e 203c 7370 616e eration on T │ │ │ +00016660: 2074 6f20 6120 6269 6e61 7279 206f 7065 to a binary ope │ │ │ +00016670: 7261 7469 6f6e 0a20 2020 6f6e 2066 756e ration. on fun │ │ │ +00016680: 6374 696f 6e73 2077 686f 7365 2063 6f64 ctions whose cod │ │ │ +00016690: 6f6d 6169 6e20 6973 203c 7370 616e 2063 omain is T │ │ │ +000166d0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2e0a .. │ │ │ +000166e0: 2020 2046 6f72 2061 6e20 6f70 6572 6174 For an operat │ │ │ +000166f0: 6f72 206f 6e20 3c73 7061 6e20 636c 6173 or on < │ │ │ +00016710: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016720: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00016730: 5072 6f70 3c2f 7370 616e 3e3c 2f73 7061 Prop this lifts th │ │ │ +00016750: 6520 6f70 6572 6174 6f72 2074 6f20 6120 e operator to a │ │ │ +00016760: 6269 6e61 7279 206f 7065 7261 7469 6f6e binary operation │ │ │ +00016770: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...Fixpoint p │ │ │ +00016830: 6f69 6e74 7769 7365 5f65 7874 656e 7369 ointwise_extensi │ │ │ +00016840: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 7b3c on {< │ │ │ +00016850: 6120 6964 3d22 543a 3133 3522 2063 6c61 a id="T:135" cla │ │ │ +00016860: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00016870: 2223 543a 3133 3522 3e3c 7370 616e 2063 "#T:135">T : Type} (op │ │ │ +00016930: 203a 203c 6120 636c 6173 733d 2269 6472 : binary_operatio │ │ │ +000169b0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n T< │ │ │ +00016a20: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ +00016a30: 0a26 6e62 7370 3b26 6e62 7370 3b28 3c61 .  (l │ │ │ +00016a90: 3c2f 613e 203a 203c 6120 636c 6173 733d : Tlist) : binar │ │ │ +00016b80: 795f 6f70 6572 6174 696f 6e3c 2f73 7061 y_operation (arro │ │ │ +00016c00: 7773 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ws l │ │ │ +00016c70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 T) :=
.  < │ │ │ +00016d00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016d10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00016d20: 6d61 7463 683c 2f73 7061 6e3e 203c 6120 match l< │ │ │ +00016d90: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> with │ │ │ +00016dc0: 3c2f 7370 616e 3e3c 6272 2f3e 0a26 6e62
.&nb │ │ │ +00016dd0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00016de0: 6e62 7370 3b7c 203c 6120 636c 6173 733d nbsp;| Tnil => │ │ │ +00016e60: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun R < │ │ │ +00016f10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016f20: 7469 746c 653d 2262 696e 6465 7222 3e52 title="binder">R │ │ │ +00016f30: 273c 2f73 7061 6e3e 3c2f 613e 203d 2667 ' =&g │ │ │ +00016f40: 743b 203c 6120 636c 6173 733d 2269 6472 t; op R │ │ │ +00017020: 203c 6120 636c 6173 733d 2269 6472 6566 R' │ │ │ +00017090: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000170a0: 703b 266e 6273 703b 266e 6273 703b 7c20 p;  | │ │ │ +000170b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A ::< │ │ │ +00017140: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> tl => fun R< │ │ │ +000171f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R' │ │ │ +00017250: 3c2f 613e 203d 2667 743b 3c62 722f 3e0a =>
. │ │ │ +00017260: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00017270: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00017280: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;fun │ │ │ +000172b0: 3c61 2069 643d 2278 3a31 3434 2220 636c x => pointwise_exte │ │ │ +00017390: 6e73 696f 6e3c 2f73 7061 6e3e 3c2f 613e nsion
│ │ │ +000173a0: 203c 6120 636c 6173 733d 2269 6472 6566 op │ │ │ +00017410: 203c 7370 616e 2063 6c61 7373 3d22 6964 tl │ │ │ +00017430: 3c2f 7370 616e 3e20 283c 6120 636c 6173 (R x │ │ │ +00017510: 3c2f 613e 2920 283c 6120 636c 6173 733d ) (R' x │ │ │ +000175f0: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ +00017600: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; end.
..
. │ │ │ +00017640: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Pointw │ │ │ +00017660: 6973 6520 6c69 6674 696e 672c 2065 7175 ise lifting, equ │ │ │ +00017670: 6976 616c 656e 7420 746f 2064 6f69 6e67 ivalent to doing │ │ │ +00017680: 203c 7370 616e 2063 6c61 7373 3d22 696e pointwise │ │ │ +000176c0: 5f65 7874 656e 7369 6f6e 3c2f 7370 616e _extension and clo │ │ │ +000176e0: 7369 6e67 2075 7369 6e67 203c 7370 616e sing using predicate_all. .< │ │ │ +00017740: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ +00017760: 3c73 7061 6e20 636c 6173 733d 2269 6422 Fixpoint │ │ │ +00017790: 203c 6120 6964 3d22 706f 696e 7477 6973 pointwise │ │ │ +00017800: 5f6c 6966 7469 6e67 3c2f 7370 616e 3e3c _lifting< │ │ │ +00017810: 2f61 3e20 283c 6120 6964 3d22 6f70 3a31 /a> (op : │ │ │ +00017870: 203c 6120 636c 6173 733d 2269 6472 6566 bi │ │ │ +000178e0: 6e61 7279 5f72 656c 6174 696f 6e3c 2f73 nary_relation
Prop) (l │ │ │ +00017980: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Tlist │ │ │ +000179f0: 3c2f 613e 2920 3a20 3c61 2063 6c61 7373 ) : binary_rela │ │ │ +00017a70: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 tion │ │ │ +00017a80: 283c 6120 636c 6173 733d 2269 6472 6566 (predic │ │ │ +00017af0: 6174 653c 2f73 7061 6e3e 3c2f 613e 203c ate < │ │ │ +00017b00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00017b10: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00017b20: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00017b30: 732e 6874 6d6c 236c 3a31 3436 223e 3c73 s.html#l:146"> │ │ │ +00017b60: 6c3c 2f73 7061 6e3e 3c2f 613e 2920 3a3d l) := │ │ │ +00017b70: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00017b80: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;match │ │ │ +00017bb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +00017bf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00017c00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00017c10: 3e6c 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >l w │ │ │ +00017c40: 6974 683c 2f73 7061 6e3e 3c62 722f 3e0a ith
. │ │ │ +00017c50: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00017c60: 703b 266e 6273 703b 7c20 3c61 2063 6c61 p; | Tni │ │ │ +00017cd0: 6c3c 2f73 7061 6e3e 3c2f 613e 203d 2667 l =&g │ │ │ +00017ce0: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; fun < │ │ │ +00017d10: 6120 6964 3d22 523a 3134 3922 2063 6c61 a id="R:149" cla │ │ │ +00017d20: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00017d30: 2223 523a 3134 3922 3e3c 7370 616e 2063 "#R:149">R R' │ │ │ +00017dc0: 3d26 6774 3b20 3c61 2063 6c61 7373 3d22 => op R< │ │ │ +00017ea0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R'< │ │ │ +00017f10: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ +00017f20: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00017f30: 3b7c 203c 7370 616e 2063 6c61 7373 3d22 ;| │ │ │ +00017f50: 413c 2f73 7061 6e3e 203c 6120 636c 6173 A
│ │ │ +00017fc0: 3a3a 3c2f 7370 616e 3e3c 2f61 3e20 3c73 :: tl => fun< │ │ │ +00018020: 2f73 7061 6e3e 203c 6120 6964 3d22 523a /span> R R' =>
.  & │ │ │ +000180f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00018100: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; forall │ │ │ +00018160: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00018180: 783c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 x, pointwise_lifti │ │ │ +00018210: 6e67 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ng │ │ │ +00018280: 6f70 3c2f 7370 616e 3e3c 2f61 3e20 3c73 op
tl (R< │ │ │ +00018320: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x) (R'< │ │ │ +00018400: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x)
. &n │ │ │ +00018480: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;end. │ │ │ +000184b0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.The n-ary │ │ │ +000184e0: 2065 7175 6976 616c 656e 6365 2072 656c equivalence rel │ │ │ +000184f0: 6174 696f 6e2c 2064 6566 696e 6564 2062 ation, defined b │ │ │ +00018500: 7920 6c69 6674 696e 6720 7468 6520 302d y lifting the 0- │ │ │ +00018510: 6172 7920 3c73 7061 6e20 636c 6173 733d ary iff rela │ │ │ +00018560: 7469 6f6e 2e20 0a3c 2f64 6976 3e0a 3c64 tion. .
. │ │ │ +00018580: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Definit │ │ │ +000185b0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion predica │ │ │ +00018630: 7465 5f65 7175 6976 616c 656e 6365 3c2f te_equivalence {l : Tlist} : binary_re │ │ │ +00018790: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation (pred │ │ │ +00018810: 6963 6174 653c 2f73 7061 6e3e 3c2f 613e icate │ │ │ +00018820: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00018860: 3c73 7061 6e20 636c 6173 733d 2269 6422 l) │ │ │ +00018890: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ +000188a0: 6273 703b 3c61 2063 6c61 7373 3d22 6964 bsp;< │ │ │ +000188f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018900: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00018910: 6e22 3e70 6f69 6e74 7769 7365 5f6c 6966 n">pointwise_lif │ │ │ +00018920: 7469 6e67 3c2f 7370 616e 3e3c 2f61 3e20 ting │ │ │ +00018930: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00018960: 3c73 7061 6e20 636c 6173 733d 2269 6422 iff l │ │ │ +00018a00: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.The n-ar │ │ │ +00018a30: 7920 696d 706c 6963 6174 696f 6e20 7265 y implication re │ │ │ +00018a40: 6c61 7469 6f6e 2c20 6465 6669 6e65 6420 lation, defined │ │ │ +00018a50: 6279 206c 6966 7469 6e67 2074 6865 2030 by lifting the 0 │ │ │ +00018a60: 2d61 7279 203c 7370 616e 2063 6c61 7373 -ary impl< │ │ │ +00018aa0: 2f73 7061 6e3e 3c2f 7370 616e 3e20 7265 /span> re │ │ │ +00018ab0: 6c61 7469 6f6e 2e20 0a3c 2f64 6976 3e0a lation. .
. │ │ │ +00018ac0: 3c64 6976 2063 6c61 7373 3d22 636f 6465
..
.Defin │ │ │ +00018b00: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition predi │ │ │ +00018b80: 6361 7465 5f69 6d70 6c69 6361 7469 6f6e cate_implication │ │ │ +00018b90: 3c2f 7370 616e 3e3c 2f61 3e20 7b3c 6120 {l< │ │ │ +00018bf0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : Tlist
} :=
.  poi │ │ │ +00018cf0: 6e74 7769 7365 5f6c 6966 7469 6e67 3c2f ntwise_lifting < │ │ │ +00018d40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018d50: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00018d60: 6e22 3e69 6d70 6c3c 2f73 7061 6e3e 3c2f n">impl l │ │ │ +00018de0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.Notation │ │ │ +00018e10: 7320 666f 7220 706f 696e 7477 6973 6520 s for pointwise │ │ │ +00018e20: 6571 7569 7661 6c65 6e63 6520 616e 6420 equivalence and │ │ │ +00018e30: 696d 706c 6963 6174 696f 6e20 6f66 2070 implication of p │ │ │ +00018e40: 7265 6469 6361 7465 732e 200a 3c2f 6469 redicates. ..
..
.De │ │ │ +00018e90: 636c 6172 6520 5363 6f70 653c 2f73 7061 clare Scope │ │ │ +00018ec0: 7072 6564 6963 6174 655f 7363 6f70 653c predicate_scope< │ │ │ +00018ed0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...Infix "<...> │ │ │ +00018fb0: 2220 3a3d 203c 6120 636c 6173 733d 2269 " := predicat │ │ │ +00019030: 655f 6571 7569 7661 6c65 6e63 653c 2f73 e_equivalence
(at level 95, no │ │ │ +000190d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 associativity< │ │ │ +00019100: 2f73 7061 6e3e 2920 3a20 3c73 7061 6e20 /span>) : predicate │ │ │ +00019130: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope..Infix "-...>" : │ │ │ +00019210: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = predicate_i │ │ │ +00019290: 6d70 6c69 6361 7469 6f6e 3c2f 7370 616e mplication (at │ │ │ +000192d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 level 7 │ │ │ +00019300: 302c 203c 7370 616e 2063 6c61 7373 3d22 0, right │ │ │ +00019330: 3c73 7061 6e20 636c 6173 733d 2269 6422 associativity) : predicate_ │ │ │ +00019390: 7363 6f70 653c 2f73 7061 6e3e 2e3c 6272 scope.
..
.Local │ │ │ +000193d0: 204f 7065 6e3c 2f73 7061 6e3e 203c 7370 Open Sc │ │ │ +00019400: 6f70 653c 2f73 7061 6e3e 203c 7370 616e ope
predicat │ │ │ +00019430: 655f 7363 6f70 653c 2f73 7061 6e3e 2e3c e_scope.< │ │ │ +00019440: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.The pointw │ │ │ +00019470: 6973 6520 6c69 6674 696e 6773 206f 6620 ise liftings of │ │ │ +00019480: 636f 6e6a 756e 6374 696f 6e20 616e 6420 conjunction and │ │ │ +00019490: 6469 736a 756e 6374 696f 6e73 2e0a 2020 disjunctions.. │ │ │ +000194a0: 204e 6f74 6520 7468 6174 2074 6865 7365 Note that these │ │ │ +000194b0: 2061 7265 203c 7370 616e 2063 6c61 7373 are binar │ │ │ +000194f0: 795f 6f70 6572 6174 696f 6e3c 2f73 7061 y_operations, buil │ │ │ +00019510: 6469 6e67 206e 6577 2072 656c 6174 696f ding new relatio │ │ │ +00019520: 6e73 206f 7574 206f 6620 6f6c 6420 6f6e ns out of old on │ │ │ +00019530: 6573 2e20 0a3c 2f64 6976 3e0a 3c64 6976 es. .
.
.. │ │ │ +00019550: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Definitio │ │ │ +00019580: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n predica │ │ │ +00019600: 7465 5f69 6e74 6572 7365 6374 696f 6e3c te_intersection< │ │ │ +00019610: 2f73 7061 6e3e 3c2f 613e 203a 3d20 3c61 /span> := p │ │ │ +00019690: 6f69 6e74 7769 7365 5f65 7874 656e 7369 ointwise_extensi │ │ │ +000196a0: 6f6e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 on and. │ │ │ +00019710: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Definitio │ │ │ +00019740: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n predi │ │ │ +000197b0: 6361 7465 5f75 6e69 6f6e 3c2f 7370 616e cate_union := pointw │ │ │ +00019840: 6973 655f 6578 7465 6e73 696f 6e3c 2f73 ise_extension
or
.
.. │ │ │ +000198c0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Infix "/...\" := │ │ │ +00019990: 203c 6120 636c 6173 733d 2269 6472 6566 predicate_i │ │ │ +00019a10: 6e74 6572 7365 6374 696f 6e3c 2f73 7061 ntersection (at level │ │ │ +00019a80: 3830 2c20 3c73 7061 6e20 636c 6173 733d 80, right │ │ │ +00019ab0: 203c 7370 616e 2063 6c61 7373 3d22 6964 associativity< │ │ │ +00019ae0: 2f73 7061 6e3e 2920 3a20 3c73 7061 6e20 /span>) : predicate │ │ │ +00019b10: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope..Infix "\.../" := < │ │ │ +00019bf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00019c00: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +00019c10: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +00019c20: 732e 6874 6d6c 2370 7265 6469 6361 7465 s.html#predicate │ │ │ +00019c30: 5f75 6e69 6f6e 223e 3c73 7061 6e20 636c _union">pred │ │ │ +00019c60: 6963 6174 655f 756e 696f 6e3c 2f73 7061 icate_union (at level │ │ │ +00019cd0: 3835 2c20 3c73 7061 6e20 636c 6173 733d 85, right │ │ │ +00019d00: 203c 7370 616e 2063 6c61 7373 3d22 6964 associativity< │ │ │ +00019d30: 2f73 7061 6e3e 2920 3a20 3c73 7061 6e20 /span>) : predicate │ │ │ +00019d60: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope...
.
..
.The always │ │ │ +00019da0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c True and alw │ │ │ +00019df0: 6179 7320 3c73 7061 6e20 636c 6173 733d ays False< │ │ │ +00019e30: 2f73 7061 6e3e 3c2f 7370 616e 3e20 7072 /span> pr │ │ │ +00019e40: 6564 6963 6174 6573 2e20 0a3c 2f64 6976 edicates. .
.
..
.Fix │ │ │ +00019e90: 706f 696e 743c 2f73 7061 6e3e 203c 6120 point tru │ │ │ +00019f00: 655f 7072 6564 6963 6174 653c 2f73 7061 e_predicate {l : │ │ │ +00019f70: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00019fb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Tlist< │ │ │ +00019fe0: 2f61 3e7d 203a 203c 6120 636c 6173 733d /a>} : │ │ │ +0001a050: 7072 6564 6963 6174 653c 2f73 7061 6e3e predicate │ │ │ +0001a060: 3c2f 613e 203c 6120 636c 6173 733d 2269 l :=
.  │ │ │ +0001a0e0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; match
l with< │ │ │ +0001a1b0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0001a1c0: 3b26 6e62 7370 3b26 6e62 7370 3b7c 203c ;  | < │ │ │ +0001a1d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001a1e0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001a1f0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001a200: 732e 6874 6d6c 2354 6e69 6c22 3e3c 7370 s.html#Tnil">Tnil => True │ │ │ +0001a2a0: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0001a2b0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0001a2c0: 7370 3b26 6e62 7370 3b7c 203c 7370 616e sp; | A │ │ │ +0001a2f0: 203c 6120 636c 6173 733d 2269 6472 6566 :: tl =&g │ │ │ +0001a390: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; fun < │ │ │ +0001a3c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001a3d0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
=> @true │ │ │ +0001a460: 5f70 7265 6469 6361 7465 3c2f 7370 616e _predicate tl
.  e │ │ │ +0001a4d0: 6e64 3c2f 7370 616e 3e2e 3c62 722f 3e0a nd.
. │ │ │ +0001a4e0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Fixpoint │ │ │ +0001a510: 3c2f 7370 616e 3e20 3c61 2069 643d 2266 false_ │ │ │ +0001a580: 7072 6564 6963 6174 653c 2f73 7061 6e3e predicate │ │ │ +0001a590: 3c2f 613e 207b 3c61 2069 643d 226c 3a31 { │ │ │ +0001a5c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0001a5e0: 6c3c 2f73 7061 6e3e 3c2f 613e 203a 203c l : < │ │ │ +0001a5f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001a600: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001a610: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001a620: 732e 6874 6d6c 2354 6c69 7374 223e 3c73 s.html#Tlist">Tlist} : pr │ │ │ +0001a6d0: 6564 6963 6174 653c 2f73 7061 6e3e 3c2f edicate l │ │ │ +0001a750: 203a 3d3c 6272 2f3e 0a26 6e62 7370 3b26 :=
. & │ │ │ +0001a760: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;match l │ │ │ +0001a800: 203c 7370 616e 2063 6c61 7373 3d22 6964 with
.  & │ │ │ +0001a840: 6e62 7370 3b26 6e62 7370 3b7c 203c 6120 nbsp; | │ │ │ +0001a8b0: 546e 696c 3c2f 7370 616e 3e3c 2f61 3e20 Tnil │ │ │ +0001a8c0: 3d26 6774 3b20 3c61 2063 6c61 7373 3d22 => False │ │ │ +0001a920: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0001a930: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0001a940: 7370 3b26 6e62 7370 3b7c 203c 7370 616e sp; | A │ │ │ +0001a970: 203c 6120 636c 6173 733d 2269 6472 6566 :: tl =&g │ │ │ +0001aa10: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; fun < │ │ │ +0001aa40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001aa50: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
=> @fal │ │ │ +0001aae0: 7365 5f70 7265 6469 6361 7465 3c2f 7370 se_predicate tl.   │ │ │ +0001ab30: 3c73 7061 6e20 636c 6173 733d 2269 6422 end.
..
.Notati │ │ │ +0001ab90: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on &quo │ │ │ +0001ac20: 743b 3c2f 7370 616e 3e3c 2f61 3ee2 8899 t;... │ │ │ +0001ac30: e28a a4e2 8899 2220 3a3d 203c 6120 636c ......" := true_pred │ │ │ +0001acb0: 6963 6174 653c 2f73 7061 6e3e 3c2f 613e icate │ │ │ +0001acc0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +0001ace0: 7072 6564 6963 6174 655f 7363 6f70 653c predicate_scope< │ │ │ +0001acf0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.No │ │ │ +0001ad20: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation
│ │ │ +0001adb0: 2671 756f 743b 3c2f 7370 616e 3e3c 2f61 "........." := < │ │ │ +0001add0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ade0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001adf0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001ae00: 732e 6874 6d6c 2366 616c 7365 5f70 7265 s.html#false_pre │ │ │ +0001ae10: 6469 6361 7465 223e 3c73 7061 6e20 636c dicate">fals │ │ │ +0001ae40: 655f 7072 6564 6963 6174 653c 2f73 7061 e_predicate : predicate_ │ │ │ +0001ae80: 7363 6f70 653c 2f73 7061 6e3e 2e3c 6272 scope.
..
.
│ │ │ +0001aea0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Predicate eq │ │ │ +0001aec0: 7569 7661 6c65 6e63 6520 6973 2061 6e20 uivalence is an │ │ │ +0001aed0: 6571 7569 7661 6c65 6e63 652c 2061 6e64 equivalence, and │ │ │ +0001aee0: 2070 7265 6469 6361 7465 2069 6d70 6c69 predicate impli │ │ │ +0001aef0: 6361 7469 6f6e 2064 6566 696e 6573 2061 cation defines a │ │ │ +0001af00: 2070 7265 6f72 6465 722e 200a 3c2f 6469 preorder. ..
..
.#[< │ │ │ +0001af30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001af40: 7469 746c 653d 2276 6172 223e 676c 6f62 title="var">glob │ │ │ +0001af50: 616c 3c2f 7370 616e 3e5d 3c62 722f 3e0a al]
. │ │ │ +0001af60: 3c73 7061 6e20 636c 6173 733d 2269 6422 Pro │ │ │ +0001af80: 6772 616d 3c2f 7370 616e 3e20 3c73 7061 gram Ins │ │ │ +0001afb0: 7461 6e63 653c 2f73 7061 6e3e 203c 6120 tance < │ │ │ +0001b020: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001b030: 7469 746c 653d 2269 6e73 7461 6e63 6522 title="instance" │ │ │ +0001b040: 3e70 7265 6469 6361 7465 5f65 7175 6976 >predicate_equiv │ │ │ +0001b050: 616c 656e 6365 5f65 7175 6976 616c 656e alence_equivalen │ │ │ +0001b060: 6365 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ce {< │ │ │ +0001b070: 6120 6964 3d22 6c3a 3136 3222 2063 6c61 a id="l:162" cla │ │ │ +0001b080: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0001b090: 2223 6c3a 3136 3222 3e3c 7370 616e 2063 "#l:162">l} :
.&n │ │ │ +0001b0d0: 6273 703b 266e 6273 703b 3c61 2063 6c61 bsp; < │ │ │ +0001b120: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001b130: 7469 746c 653d 2263 6c61 7373 223e 4571 title="class">Eq │ │ │ +0001b140: 7569 7661 6c65 6e63 653c 2f73 7061 6e3e uivalence │ │ │ +0001b150: 3c2f 613e 2028 403c 6120 636c 6173 733d (@predic │ │ │ +0001b1d0: 6174 655f 6571 7569 7661 6c65 6e63 653c ate_equivalence< │ │ │ +0001b1e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> l
).
. │ │ │ +0001b260: 0a3c 6272 2f3e 0a0a 3c62 722f 3e0a 235b .
..
.#[ │ │ │ +0001b270: 3c73 7061 6e20 636c 6173 733d 2269 6422 glo │ │ │ +0001b290: 6261 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e bal]
│ │ │ +0001b2a0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Pr │ │ │ +0001b2c0: 6f67 7261 6d3c 2f73 7061 6e3e 203c 7370 ogram In │ │ │ +0001b2f0: 7374 616e 6365 3c2f 7370 616e 3e20 3c61 stance pred │ │ │ +0001b380: 6963 6174 655f 696d 706c 6963 6174 696f icate_implicatio │ │ │ +0001b390: 6e5f 7072 656f 7264 6572 3c2f 7370 616e n_preorder {l} : │ │ │ +0001b400: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0001b410: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;PreOrder (@pred │ │ │ +0001b500: 6963 6174 655f 696d 706c 6963 6174 696f icate_implicatio │ │ │ +0001b510: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n l< │ │ │ +0001b580: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
.
. │ │ │ +0001b5a0: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.We define the │ │ │ +0001b5c0: 2076 6172 696f 7573 206f 7065 7261 7469 various operati │ │ │ +0001b5d0: 6f6e 7320 7768 6963 6820 6465 6669 6e65 ons which define │ │ │ +0001b5e0: 2074 6865 2061 6c67 6562 7261 206f 6e20 the algebra on │ │ │ +0001b5f0: 6269 6e61 7279 2072 656c 6174 696f 6e73 binary relations │ │ │ +0001b600: 2c0a 2020 2066 726f 6d20 7468 6520 6765 ,. from the ge │ │ │ +0001b610: 6e65 7261 6c20 6f6e 6573 2e20 0a3c 2f64 neral ones. ..
..
.S │ │ │ +0001b660: 6563 7469 6f6e 3c2f 7370 616e 3e20 3c61 ection Binar │ │ │ +0001b6c0: 793c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 y.
.  < │ │ │ +0001b6e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001b6f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0001b700: 436f 6e74 6578 743c 2f73 7061 6e3e 207b Context { │ │ │ +0001b710: 3c61 2069 643d 2242 696e 6172 792e 4122 │ │ │ +0001b740: 3c73 7061 6e20 636c 6173 733d 2269 6422 A : │ │ │ +0001b770: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type}.< │ │ │ +0001b7a0: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ +0001b7b0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ +0001b7e0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion relation_ │ │ │ +0001b860: 6571 7569 7661 6c65 6e63 653c 2f73 7061 equivalence : relation (relation │ │ │ +0001b970: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0001b9e0: 413c 2f73 7061 6e3e 3c2f 613e 2920 3a3d A) := │ │ │ +0001b9f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0001ba00: 703b 266e 6273 703b 266e 6273 703b 403c p;  @< │ │ │ +0001ba10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ba20: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001ba30: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001ba40: 732e 6874 6d6c 2370 7265 6469 6361 7465 s.html#predicate │ │ │ +0001ba50: 5f65 7175 6976 616c 656e 6365 223e 3c73 _equivalence">predicate_equi │ │ │ +0001ba90: 7661 6c65 6e63 653c 2f73 7061 6e3e 3c2f valence (_ │ │ │ +0001bb30: 3a3a 3c2f 7370 616e 3e3c 2f61 3e3c 7370 ::_::Tnil).
. │ │ │ +0001bc50: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +0001bc60: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Global Insta │ │ │ +0001bc90: 6e63 653c 2f73 7061 6e3e 203c 6120 6964 nce relation_ │ │ │ +0001bd30: 6571 7569 7661 6c65 6e63 655f 7265 7772 equivalence_rewr │ │ │ +0001bd40: 6974 655f 7265 6c61 7469 6f6e 3c2f 7370 ite_relation: RewriteRelation │ │ │ +0001bdd0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 re │ │ │ +0001be50: 6c61 7469 6f6e 5f65 7175 6976 616c 656e lation_equivalen │ │ │ +0001be60: 6365 3c2f 7370 616e 3e3c 2f61 3e20 3a3d ce := │ │ │ +0001be70: 207b 7d2e 3c62 722f 3e0a 0a3c 6272 2f3e {}.
..
│ │ │ +0001be80: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ +0001beb0: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ +0001bec0: 3c61 2069 643d 2272 656c 6174 696f 6e5f rela │ │ │ +0001bf30: 7469 6f6e 5f63 6f6e 6a75 6e63 7469 6f6e tion_conjunction │ │ │ +0001bf40: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (R< │ │ │ +0001bfa0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : < │ │ │ +0001bff0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001c000: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0001c010: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A) (R'< │ │ │ +0001c0f0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : < │ │ │ +0001c140: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001c150: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0001c160: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A) : relation │ │ │ +0001c260: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0001c2d0: 413c 2f73 7061 6e3e 3c2f 613e 203a 3d3c A :=< │ │ │ +0001c2e0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0001c2f0: 3b26 6e62 7370 3b26 6e62 7370 3b40 3c61 ;  @predicate_inte │ │ │ +0001c380: 7273 6563 7469 6f6e 3c2f 7370 616e 3e3c rsection< │ │ │ +0001c390: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (A::A │ │ │ +0001c550: 3a3a 3c2f 7370 616e 3e3c 2f61 3e3c 6120 :: │ │ │ +0001c5c0: 546e 696c 3c2f 7370 616e 3e3c 2f61 3e29 Tnil) │ │ │ +0001c5d0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0001c610: 3c73 7061 6e20 636c 6173 733d 2269 6422 R < │ │ │ +0001c640: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001c650: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001c660: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001c670: 732e 6874 6d6c 2352 273a 3136 3622 3e3c s.html#R':166">< │ │ │ +0001c680: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001c690: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0001c6a0: 3e52 273c 2f73 7061 6e3e 3c2f 613e 2e3c >R'.< │ │ │ +0001c6b0: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ +0001c6c0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ +0001c6f0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion relation_ │ │ │ +0001c770: 6469 736a 756e 6374 696f 6e3c 2f73 7061 disjunction (R : │ │ │ +0001c7e0: 203c 6120 636c 6173 733d 2269 6472 6566 re │ │ │ +0001c850: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation A) (R' : │ │ │ +0001c930: 203c 6120 636c 6173 733d 2269 6472 6566 re │ │ │ +0001c9a0: 6c61 7469 6f6e 3c2f 7370 616e 3e3c 2f61 lation A) : < │ │ │ +0001ca70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001ca80: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0001ca90: 6e22 3e72 656c 6174 696f 6e3c 2f73 7061 n">relation A :=
. │ │ │ +0001cb20: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0001cb30: 703b 266e 6273 703b 403c 6120 636c 6173 p; @predicate_ │ │ │ +0001cbb0: 756e 696f 6e3c 2f73 7061 6e3e 3c2f 613e union │ │ │ +0001cbc0: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (A::A::< │ │ │ +0001cd80: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>Tni │ │ │ +0001cdf0: 6c3c 2f73 7061 6e3e 3c2f 613e 2920 3c61 l) R │ │ │ +0001ce60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 R' │ │ │ +0001ced0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.
. │ │ │ +0001cef0: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.Relation equi │ │ │ +0001cf10: 7661 6c65 6e63 6520 6973 2061 6e20 6571 valence is an eq │ │ │ +0001cf20: 7569 7661 6c65 6e63 652c 2061 6e64 2073 uivalence, and s │ │ │ +0001cf30: 7562 7265 6c61 7469 6f6e 2064 6566 696e ubrelation defin │ │ │ +0001cf40: 6573 2061 2070 6172 7469 616c 206f 7264 es a partial ord │ │ │ +0001cf50: 6572 2e20 0a3c 2f64 6976 3e0a 3c64 6976 er. .
.
.. │ │ │ +0001cf70: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0001cf80: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Global Instan │ │ │ +0001cfb0: 6365 3c2f 7370 616e 3e20 3c61 2069 643d ce rela │ │ │ +0001d040: 7469 6f6e 5f65 7175 6976 616c 656e 6365 tion_equivalence │ │ │ +0001d050: 5f65 7175 6976 616c 656e 6365 3c2f 7370 _equivalence :
.& │ │ │ +0001d070: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0001d080: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; Equiv │ │ │ +0001d0f0: 616c 656e 6365 3c2f 7370 616e 3e3c 2f61 alence │ │ │ +0001d150: 3c73 7061 6e20 636c 6173 733d 2269 6422 relation_equ │ │ │ +0001d180: 6976 616c 656e 6365 3c2f 7370 616e 3e3c ivalence< │ │ │ +0001d190: 2f61 3e2e 3c62 722f 3e0a 200a 3c62 722f /a>.
. .
.  G │ │ │ +0001d1d0: 6c6f 6261 6c20 496e 7374 616e 6365 3c2f lobal Instance
│ │ │ +0001d240: 3c73 7061 6e20 636c 6173 733d 2269 6422 relation_impli │ │ │ +0001d270: 6361 7469 6f6e 5f70 7265 6f72 6465 723c cation_preorder< │ │ │ +0001d280: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +0001d2d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001d2e0: 7469 746c 653d 2263 6c61 7373 223e 5072 title="class">Pr │ │ │ +0001d2f0: 654f 7264 6572 3c2f 7370 616e 3e3c 2f61 eOrder (@subrelat │ │ │ +0001d370: 696f 6e3c 2f73 7061 6e3e 3c2f 613e 203c ion < │ │ │ +0001d380: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001d390: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001d3a0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001d3b0: 732e 6874 6d6c 2342 696e 6172 792e 4122 s.html#Binary.A" │ │ │ +0001d3c0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A) │ │ │ +0001d3f0: 2e3c 6272 2f3e 0a20 0a3c 6272 2f3e 0a3c .
. .
.< │ │ │ +0001d400: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.

│ │ │ +0001d440: 5061 7274 6961 6c20 4f72 6465 722e 3c2f Partial Order... A partia │ │ │ +0001d460: 6c20 6f72 6465 7220 6973 2061 2070 7265 l order is a pre │ │ │ +0001d470: 6f72 6465 7220 7768 6963 6820 6973 2061 order which is a │ │ │ +0001d480: 6464 6974 696f 6e61 6c6c 7920 616e 7469 dditionally anti │ │ │ +0001d490: 7379 6d6d 6574 7269 632e 0a20 2020 5765 symmetric.. We │ │ │ +0001d4a0: 2067 6976 6520 616e 2065 7175 6976 616c give an equival │ │ │ +0001d4b0: 656e 7420 6465 6669 6e69 7469 6f6e 2c20 ent definition, │ │ │ +0001d4c0: 7570 2d74 6f20 616e 2065 7175 6976 616c up-to an equival │ │ │ +0001d4d0: 656e 6365 2072 656c 6174 696f 6e0a 2020 ence relation. │ │ │ +0001d4e0: 206f 6e20 7468 6520 6361 7272 6965 722e on the carrier. │ │ │ +0001d4f0: 200a 3c2f 6469 763e 0a3c 6469 7620 636c .

.
..
.  < │ │ │ +0001d520: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001d530: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0001d540: 436c 6173 733c 2f73 7061 6e3e 203c 6120 Class │ │ │ +0001d5b0: 3c73 7061 6e20 6964 3d22 5061 7274 6961 PartialOrder< │ │ │ +0001d5e0: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span> │ │ │ +0001d620: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0001d640: 6571 413c 2f73 7061 6e3e 3c2f 613e 2060 eqA ` │ │ │ +0001d650: 7b3c 6120 6964 3d22 6571 753a 3137 3022 {< │ │ │ +0001d680: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001d690: 7469 746c 653d 2262 696e 6465 7222 3e65 title="binder">e │ │ │ +0001d6a0: 7175 3c2f 7370 616e 3e3c 2f61 3e20 3a20 qu : │ │ │ +0001d6b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Equivalence< │ │ │ +0001d720: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ +0001d790: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 e │ │ │ +0001d800: 7141 3c2f 7370 616e 3e3c 2f61 3e7d 203c qA} < │ │ │ +0001d810: 6120 6964 3d22 523a 3137 3122 2063 6c61 a id="R:171" cla │ │ │ +0001d820: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0001d830: 2223 523a 3137 3122 3e3c 7370 616e 2063 "#R:171">R `{preo : PreOr │ │ │ +0001d930: 6465 723c 2f73 7061 6e3e 3c2f 613e 203c der < │ │ │ +0001d940: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001d950: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001d960: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001d970: 732e 6874 6d6c 2342 696e 6172 792e 4122 s.html#Binary.A" │ │ │ +0001d980: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ +0001d9b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +0001d9f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001da00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0001da10: 3e52 3c2f 7370 616e 3e3c 2f61 3e7d 203a >R} : │ │ │ +0001da20: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ +0001da30: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +0001da40: 6120 6964 3d22 7061 7274 6961 6c5f 6f72 a id="partial_or │ │ │ +0001da50: 6465 725f 6571 7569 7661 6c65 6e63 6522 der_equivalence" │ │ │ +0001da60: 2063 6c61 7373 3d22 6964 7265 6622 2068 class="idref" h │ │ │ +0001da70: 7265 663d 2223 7061 7274 6961 6c5f 6f72 ref="#partial_or │ │ │ +0001da80: 6465 725f 6571 7569 7661 6c65 6e63 6522 der_equivalence" │ │ │ +0001da90: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >partial_order_ │ │ │ +0001db00: 6571 7569 7661 6c65 6e63 653c 2f73 7061 equivalence : │ │ │ +0001db20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 relation_equiv │ │ │ +0001dba0: 616c 656e 6365 3c2f 7370 616e 3e3c 2f61 alence eqA< │ │ │ +0001dc20: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (relation_ │ │ │ +0001dca0: 636f 6e6a 756e 6374 696f 6e3c 2f73 7061 conjunction R │ │ │ +0001dd20: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f │ │ │ +0001dd80: 6c69 703c 2f73 7061 6e3e 3c2f 613e 203c lip < │ │ │ +0001dd90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001dda0: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001ddb0: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001ddc0: 732e 6874 6d6c 2352 3a31 3731 223e 3c73 s.html#R:171"> │ │ │ +0001ddf0: 523c 2f73 7061 6e3e 3c2f 613e 2929 2e3c R)).< │ │ │ +0001de00: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.The equiva │ │ │ +0001de30: 6c65 6e63 6520 7072 6f6f 6620 6973 2073 lence proof is s │ │ │ +0001de40: 7566 6669 6369 656e 7420 666f 7220 7072 ufficient for pr │ │ │ +0001de50: 6f76 696e 6720 7468 6174 203c 7370 616e oving that R │ │ │ +0001dea0: 206d 7573 7420 6265 2061 0a20 2020 6d6f must be a. mo │ │ │ +0001deb0: 7270 6869 736d 2066 6f72 2065 7175 6976 rphism for equiv │ │ │ +0001dec0: 616c 656e 6365 2028 7365 6520 4d6f 7270 alence (see Morp │ │ │ +0001ded0: 6869 736d 7329 2e20 2049 7420 6973 2061 hisms). It is a │ │ │ +0001dee0: 6c73 6f20 7375 6666 6963 6965 6e74 2074 lso sufficient t │ │ │ +0001def0: 6f0a 2020 2073 686f 7720 7468 6174 203c o. show that < │ │ │ +0001df00: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +0001df10: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">R is antisymm │ │ │ +0001df50: 6574 7269 6320 772e 722e 742e 203c 7370 etric w.r.t. eqA .
.. │ │ │ +0001dfc0: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +0001dfd0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Global Insta │ │ │ +0001e000: 6e63 653c 2f73 7061 6e3e 203c 6120 6964 nce partial_o │ │ │ +0001e080: 7264 6572 5f61 6e74 6973 796d 3c2f 7370 rder_antisym `(PartialOrder │ │ │ +0001e0f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 eqA │ │ │ +0001e170: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 R) : │ │ │ +0001e240: 3c73 7061 6e20 636c 6173 733d 2269 6422 A │ │ │ +0001e260: 6e74 6973 796d 6d65 7472 6963 3c2f 7370 ntisymmetric A
eqA< │ │ │ +0001e350: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> R
.
.. │ │ │ +0001e3d0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0001e3e0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Lemma │ │ │ +0001e410: 3c61 2069 643d 2250 6172 7469 616c 4f72 PartialOr │ │ │ +0001e480: 6465 725f 696e 7665 7273 653c 2f73 7061 der_inverse `(PartialOrder< │ │ │ +0001e4f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> eqA< │ │ │ +0001e570: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R │ │ │ +0001e5f0: 3c2f 613e 2920 3a20 3c61 2063 6c61 7373 ) : Par │ │ │ +0001e660: 7469 616c 4f72 6465 723c 2f73 7061 6e3e tialOrder │ │ │ +0001e670: 3c2f 613e 203c 6120 636c 6173 733d 2269 eqA (flip │ │ │ +0001e750: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0001e790: 3c73 7061 6e20 636c 6173 733d 2269 6422 R). │ │ │ +0001e7c0: 3c62 722f 3e0a 203c 7370 616e 2063 6c61
. End Binary.
..
.#[global] │ │ │ +0001e8a0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Hint Extern 3 (Partia │ │ │ +0001e970: 6c4f 7264 6572 3c2f 7370 616e 3e3c 2f61 lOrder (flip │ │ │ +0001e9e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _)) => class_app │ │ │ +0001ea40: 6c79 3c2f 7370 616e 3e20 3c73 7061 6e20 ly PartialOr │ │ │ +0001ea70: 6465 725f 696e 7665 7273 653c 2f73 7061 der_inverse : typeclass_inst │ │ │ +0001eab0: 616e 6365 733c 2f73 7061 6e3e 2e3c 6272 ances.
..
.
│ │ │ +0001ead0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.The partial │ │ │ +0001eaf0: 6f72 6465 7220 6465 6669 6e65 6420 6279 order defined by │ │ │ +0001eb00: 2073 7562 7265 6c61 7469 6f6e 2061 6e64 subrelation and │ │ │ +0001eb10: 2072 656c 6174 696f 6e20 6571 7569 7661 relation equiva │ │ │ +0001eb20: 6c65 6e63 652e 200a 3c2f 6469 763e 0a3c lence. .
.< │ │ │ +0001eb30: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ +0001eb40: 3e0a 0a3c 6272 2f3e 0a23 5b3c 7370 616e >..
.#[global]
.Program │ │ │ +0001eba0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c
Instanc │ │ │ +0001ebd0: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e sub │ │ │ +0001ec50: 7265 6c61 7469 6f6e 5f70 6172 7469 616c relation_partial │ │ │ +0001ec60: 5f6f 7264 6572 3c2f 7370 616e 3e3c 2f61 _order {A} :
.  PartialOrder< │ │ │ +0001ed50: 2f73 7061 6e3e 3c2f 613e 2028 403c 6120 /span> (@r │ │ │ +0001edd0: 656c 6174 696f 6e5f 6571 7569 7661 6c65 elation_equivale │ │ │ +0001ede0: 6e63 653c 2f73 7061 6e3e 3c2f 613e 203c nce < │ │ │ +0001edf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ee00: 6872 6566 3d22 436f 712e 436c 6173 7365 href="Coq.Classe │ │ │ +0001ee10: 732e 5265 6c61 7469 6f6e 436c 6173 7365 s.RelationClasse │ │ │ +0001ee20: 732e 6874 6d6c 2341 3a31 3835 223e 3c73 s.html#A:185"> │ │ │ +0001ee50: 413c 2f73 7061 6e3e 3c2f 613e 2920 3c61 A) subrelation.
.. │ │ │ +0001eee0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Gl │ │ │ +0001ef10: 6f62 616c 2054 7970 6563 6c61 7373 6573 obal Typeclasses │ │ │ +0001ef20: 204f 7061 7175 653c 2f73 7061 6e3e 203c Opaque < │ │ │ +0001ef30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001ef40: 7469 746c 653d 2276 6172 223e 6172 726f title="var">arro │ │ │ +0001ef50: 7773 3c2f 7370 616e 3e20 3c73 7061 6e20 ws predicate │ │ │ +0001ef80: 5f69 6d70 6c69 6361 7469 6f6e 3c2f 7370 _implication predicate_equiv │ │ │ +0001efc0: 616c 656e 6365 3c2f 7370 616e 3e3c 6272 alence
.  & │ │ │ +0001efe0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0001eff0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0001f000: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0001f010: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; relation │ │ │ +0001f040: 5f65 7175 6976 616c 656e 6365 3c2f 7370 _equivalence pointwise_lifti │ │ │ +0001f080: 6e67 3c2f 7370 616e 3e2e 3c62 722f 3e0a ng.
. │ │ │ +0001f090: 0a3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.R │ │ │ +0001f0c0: 6567 6973 7465 723c 2f73 7061 6e3e 203c egister
< │ │ │ +0001f0d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001f0e0: 7469 746c 653d 2276 6172 223e 7265 6c61 title="var">rela │ │ │ +0001f0f0: 7469 6f6e 3c2f 7370 616e 3e20 3c73 7061 tion as< │ │ │ +0001f120: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> rewrite.prop │ │ │ +0001f150: 2e72 656c 6174 696f 6e3c 2f73 7061 6e3e .relation │ │ │ +0001f160: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Register │ │ │ +0001f190: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c subrelation │ │ │ +0001f1c0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as
│ │ │ +0001f210: 7265 7772 6974 652e 7072 6f70 2e73 7562 rewrite.prop.sub │ │ │ +0001f220: 7265 6c61 7469 6f6e 3c2f 7370 616e 3e2e relation. │ │ │ +0001f230: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ +0001f260: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> Reflexive
as │ │ │ +0001f2c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +0001f2e0: 7269 7465 2e70 726f 702e 5265 666c 6578 rite.prop.Reflex │ │ │ +0001f2f0: 6976 653c 2f73 7061 6e3e 2e3c 6272 2f3e ive.
│ │ │ +0001f300: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Register reflexivity
as │ │ │ +0001f390: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +0001f3b0: 7269 7465 2e70 726f 702e 7265 666c 6578 rite.prop.reflex │ │ │ +0001f3c0: 6976 6974 793c 2f73 7061 6e3e 2e3c 6272 ivity.
.Register Symmetric as rewrit │ │ │ +0001f480: 652e 7072 6f70 2e53 796d 6d65 7472 6963 e.prop.Symmetric │ │ │ +0001f490: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 3c73 .
.R │ │ │ +0001f4c0: 6567 6973 7465 723c 2f73 7061 6e3e 203c egister < │ │ │ +0001f4d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001f4e0: 7469 746c 653d 2274 6163 7469 6322 3e73 title="tactic">s │ │ │ +0001f4f0: 796d 6d65 7472 793c 2f73 7061 6e3e 203c ymmetry < │ │ │ +0001f500: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001f510: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0001f520: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as rewrite.p │ │ │ +0001f550: 726f 702e 7379 6d6d 6574 7279 3c2f 7370 rop.symmetry.
.Regis │ │ │ +0001f590: 7465 723c 2f73 7061 6e3e 203c 7370 616e ter Transiti │ │ │ +0001f5c0: 7665 3c2f 7370 616e 3e20 3c73 7061 6e20 ve as
rewrite.prop.T │ │ │ +0001f620: 7261 6e73 6974 6976 653c 2f73 7061 6e3e ransitive │ │ │ +0001f630: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Register │ │ │ +0001f660: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c transiti │ │ │ +0001f690: 7669 7479 3c2f 7370 616e 3e20 3c73 7061 vity as< │ │ │ +0001f6c0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> rewrite.prop │ │ │ +0001f6f0: 2e74 7261 6e73 6974 6976 6974 793c 2f73 .transitivity
.
.
.
. │ │ │ +0001f730: 2020 2020 2020 3c64 6976 2069 643d 2273
. │ │ │ +0001f750: 203c 6469 7620 636c 6173 733d 2262 6c6f
. < │ │ │ +0001f770: 6832 2063 6c61 7373 3d22 7469 746c 6522 h2 class="title" │ │ │ +0001f780: 3e4e 6176 6967 6174 696f 6e3c 2f68 323e >Navigation │ │ │ +0001f790: 0a20 2020 2020 2020 2020 203c 6469 7620 .
│ │ │ +0001f7b0: 0a20 2020 2020 2020 2020 2020 203c 756c . . │ │ │ +0001f8c0: 2020 2020 2020 2020 3c2f 6c69 3e0a 2020 . │ │ │ +0001f8d0: 2020 2020 2020 2020 2020 3c2f 756c 3e0a . │ │ │ +0001f8e0: 2020 2020 2020 2020 2020 3c2f 6469 763e
│ │ │ +0001f8f0: 0a20 2020 2020 2020 203c 2f64 6976 3e0a .
. │ │ │ +0001f900: 2020 2020 2020 3c2f 6469 763e 0a20 2020
. │ │ │ +0001f910: 203c 2f64 6976 3e0a 0a20 203c 2f64 6976
..
..
. │ │ │ +0001fa60: 0a20 203c 2f64 6976 3e0a 0a3c 2f64 6976 .
..
.... │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.RelationPairs.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Relations over pairs

│ │ │ +

Relations over pairs

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import SetoidList.
│ │ │ Require Import Relations Morphisms.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidClass.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Typeclass-based setoids, tactics and standard instances.

│ │ │ +

Typeclass-based setoids, tactics and standard instances.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidDec.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidable setoid equality theory.

│ │ │ +

Decidable setoid equality theory.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Classes.SetoidTactics.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Tactics for typeclass-based setoids.

│ │ │ +

Tactics for typeclass-based setoids.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapAVL.html │ │ │ @@ -47,15 +47,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

FMapAVL

│ │ │ +

FMapAVL

│ │ │ │ │ │
│ │ │ │ │ │ This module implements maps using AVL trees. │ │ │ It follows the implementation from Ocaml's standard library. │ │ │ │ │ │
│ │ │ @@ -84,15 +84,15 @@ │ │ │ Notation "s #1" := (fst s) (at level 9, format "s '#1'") : pair_scope.
│ │ │ Notation "s #2" := (snd s) (at level 9, format "s '#2'") : pair_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The Raw functor

│ │ │ +

The Raw functor

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Functor of pure functions + separate proofs of invariant │ │ │ preservation │ │ │
│ │ │ @@ -110,19 +110,19 @@ │ │ │ #[global]
│ │ │ Hint Transparent key : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Trees

│ │ │ +

Trees

│ │ │ │ │ │
│ │ │ │ │ │ -

Trees

│ │ │ +

Trees

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ The fifth field of Node is the height of the tree │ │ │
│ │ │
│ │ │ @@ -146,15 +146,15 @@ │ │ │
│ │ │ Implicit Types m : t.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic functions on trees: height and cardinal

│ │ │ +

Basic functions on trees: height and cardinal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition height (m : t) : int :=
│ │ │   match m with
│ │ │ @@ -169,39 +169,39 @@ │ │ │    | Node l _ _ r _ => S (cardinal l + cardinal r)
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Empty Map

│ │ │ +

Empty Map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition empty : t := Leaf.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Emptyness test

│ │ │ +

Emptyness test

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition is_empty m := match m with Leaf => true | _ => false end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Membership

│ │ │ +

Membership

│ │ │ │ │ │
│ │ │ │ │ │ The mem function is deciding membership. It exploits the bst property │ │ │ to achieve logarithmic complexity. │ │ │
│ │ │
│ │ │ @@ -228,15 +228,15 @@ │ │ │          end
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Helper functions

│ │ │ +

Helper functions

│ │ │ │ │ │
│ │ │ │ │ │ create l x r creates a node, assuming l and r │ │ │ to be balanced and |height l - height r| <= 2. │ │ │
│ │ │
│ │ │ @@ -291,15 +291,15 @@ │ │ │     else
│ │ │       create l x d r.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint add x d m :=
│ │ │   match m with
│ │ │ @@ -312,15 +312,15 @@ │ │ │       end
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extraction of minimum binding

│ │ │ +

Extraction of minimum binding

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Morally, remove_min is to be applied to a non-empty tree │ │ │ t = Node l x e r h. Since we can't deal here with assert false │ │ │ for t=Leaf, we pre-unpack t (and forget about h). │ │ │ @@ -337,15 +337,15 @@ │ │ │        (bal l' x d r, m)
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Merging two trees

│ │ │ +

Merging two trees

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ merge t1 t2 builds the union of t1 and t2 assuming all elements │ │ │ of t1 to be smaller than all elements of t2, and │ │ │ |height t1 - height t2| <= 2. │ │ │ @@ -363,15 +363,15 @@ │ │ │     end
│ │ │ end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint remove x m := match m with
│ │ │   | Leaf => Leaf
│ │ │ @@ -383,15 +383,15 @@ │ │ │       end
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

join

│ │ │ +

join

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Same as bal but does not assume anything regarding heights of l │ │ │ and r. │ │ │ │ │ │ @@ -412,15 +412,15 @@ │ │ │           end
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Splitting

│ │ │ +

Splitting

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ split x m returns a triple (l, o, r) where │ │ │
    │ │ │
  • l is the set of elements of m that are < x │ │ │ @@ -452,15 +452,15 @@ │ │ │      end
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Concatenation

│ │ │ +

Concatenation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Same as merge but does not assume anything about heights. │ │ │ │ │ │
│ │ │ @@ -476,15 +476,15 @@ │ │ │             join m1 xd#1 xd#2 m2'
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Elements

│ │ │ +

Elements

│ │ │ │ │ │
│ │ │ │ │ │ elements_tree_aux acc t catenates the elements of t in infix │ │ │ order to the list acc │ │ │
│ │ │
│ │ │ @@ -507,15 +507,15 @@ │ │ │
│ │ │ Definition elements := elements_aux nil.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint fold (A : Type) (f : key -> elt -> A -> A) (m : t) : A -> A :=
│ │ │  fun a => match m with
│ │ │ @@ -523,27 +523,27 @@ │ │ │   | Node l x d r _ => fold f r (f x d (fold f l a))
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Comparison

│ │ │ +

Comparison

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Variable cmp : elt->elt->bool.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Enumeration of the elements of a tree

│ │ │ +

Enumeration of the elements of a tree

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Inductive enumeration :=
│ │ │  | End : enumeration
│ │ │ @@ -634,15 +634,15 @@ │ │ │ Notation "t #o" := (t_opt t) (at level 9, format "t '#o'").
│ │ │ Notation "t #r" := (t_right t) (at level 9, format "t '#r'").
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Map

│ │ │ +

Map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint map (elt elt' : Type)(f : elt -> elt')(m : t elt) : t elt' :=
│ │ │   match m with
│ │ │ @@ -659,15 +659,15 @@ │ │ │    | Node l x d r h => Node (mapi f l) x (f x d) (mapi f r) h
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Map with removal

│ │ │ +

Map with removal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint map_option (elt elt' : Type)(f : key -> elt -> option elt')(m : t elt)
│ │ │   : t elt' :=
│ │ │ @@ -680,15 +680,15 @@ │ │ │       end
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Optimized map2

│ │ │ +

Optimized map2

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Suggestion by B. Gregoire: a map2 function with specialized │ │ │ arguments that allows bypassing some tree traversal. Instead of one │ │ │ f0 of type key -> option elt -> option elt' -> option elt'', │ │ │ @@ -736,15 +736,15 @@ │ │ │
│ │ │ End Map2_opt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Map2

│ │ │ +

Map2

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ The map2 function of the Map interface can be implemented │ │ │ via map2_opt and map_option. │ │ │ │ │ │ @@ -766,28 +766,28 @@ │ │ │
│ │ │ End Map2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Invariants

│ │ │ +

Invariants

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Invariants.
│ │ │ Variable elt : Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Occurrence in a tree

│ │ │ +

Occurrence in a tree

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Inductive MapsTo (x : key)(e : elt) : t elt -> Prop :=
│ │ │   | MapsRoot : forall l r h y,
│ │ │ @@ -809,15 +809,15 @@ │ │ │
│ │ │ Definition In0 k m := exists e:elt, MapsTo k e m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Binary search trees

│ │ │ +

Binary search trees

│ │ │ │ │ │
│ │ │ │ │ │ lt_tree x s: all elements in s are smaller than x │ │ │ (resp. greater for gt_tree) │ │ │
│ │ │
│ │ │ @@ -843,15 +843,15 @@ │ │ │
│ │ │ End Invariants.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Correctness proofs, isolated in a sub-module

│ │ │ +

Correctness proofs, isolated in a sub-module

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Proofs.
│ │ │  Module MX := OrderedTypeFacts X.
│ │ │ @@ -871,15 +871,15 @@ │ │ │ Functional Scheme map_option_ind := Induction for map_option Sort Prop.
│ │ │ Functional Scheme map2_opt_ind := Induction for map2_opt Sort Prop.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Automation and dedicated tactics.

│ │ │ +

Automation and dedicated tactics.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Hint Constructors tree MapsTo In bst : core.
│ │ │ @@ -982,15 +982,15 @@ │ │ │ Variable elt:Type.
│ │ │ Implicit Types m r : t elt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic results about MapsTo, In, lt_tree, gt_tree, height

│ │ │ +

Basic results about MapsTo, In, lt_tree, gt_tree, height

│ │ │ │ │ │
│ │ │ │ │ │ Facts about MapsTo and In. │ │ │
│ │ │
│ │ │ │ │ │ @@ -1086,15 +1086,15 @@ │ │ │ #[local]
│ │ │ Hint Resolve lt_tree_not_in lt_tree_trans gt_tree_not_in gt_tree_trans : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Empty map

│ │ │ +

Empty map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition Empty m := forall (a:key)(e:elt) , ~ MapsTo a e m.
│ │ │ │ │ │ @@ -1104,30 +1104,30 @@ │ │ │
│ │ │ Lemma empty_1 : Empty (empty elt).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Emptyness test

│ │ │ +

Emptyness test

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma is_empty_1 : forall m, Empty m -> is_empty m = true.
│ │ │ │ │ │
│ │ │ Lemma is_empty_2 : forall m, is_empty m = true -> Empty m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Membership

│ │ │ +

Membership

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma mem_1 : forall m x, bst m -> In x m -> mem x m = true.
│ │ │ │ │ │ @@ -1173,15 +1173,15 @@ │ │ │  find x m = find x m' ->
│ │ │  (In x m <-> In x m').
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Helper functions

│ │ │ +

Helper functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma create_bst :
│ │ │  forall l x e r, bst l -> bst r -> lt_tree x l -> gt_tree x r ->
│ │ │ @@ -1213,15 +1213,15 @@ │ │ │  bst l -> bst r -> lt_tree x l -> gt_tree x r ->
│ │ │  find y (bal l x e r) = find y (create l x e r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma add_in : forall m x y e,
│ │ │  In y (add x e m) <-> X.eq y x \/ In y m.
│ │ │ @@ -1247,15 +1247,15 @@ │ │ │  find y (add x e m) =
│ │ │   match X.compare y x with EQ _ => Some e | _ => find y m end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extraction of minimum binding

│ │ │ +

Extraction of minimum binding

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_min_in : forall l x e r h y,
│ │ │  In y (Node l x e r h) <->
│ │ │ @@ -1290,15 +1290,15 @@ │ │ │     | GT _ => find y (remove_min l x e r)#1
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Merging two trees

│ │ │ +

Merging two trees

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma merge_in : forall m1 m2 y, bst m1 -> bst m2 ->
│ │ │  (In y (merge m1 m2) <-> In y m1 \/ In y m2).
│ │ │ @@ -1312,15 +1312,15 @@ │ │ │  (forall y1 y2 : key, In y1 m1 -> In y2 m2 -> X.lt y1 y2) ->
│ │ │  bst (merge m1 m2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_in : forall m x y, bst m ->
│ │ │  (In y (remove x m) <-> ~ X.eq y x /\ In y m).
│ │ │ @@ -1339,15 +1339,15 @@ │ │ │ Lemma remove_3 : forall m x y e, bst m ->
│ │ │  MapsTo y e (remove x m) -> MapsTo y e m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

join

│ │ │ +

join

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma join_in : forall l x d r y,
│ │ │  In y (join l x d r) <-> X.eq y x \/ In y l \/ In y r.
│ │ │ @@ -1363,15 +1363,15 @@ │ │ │  bst l -> bst r -> lt_tree x l -> gt_tree x r ->
│ │ │  find y (join l x d r) = find y (create l x d r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

split

│ │ │ +

split

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma split_in_1 : forall m x, bst m -> forall y,
│ │ │  (In y (split x m)#l <-> In y m /\ X.lt y x).
│ │ │ @@ -1402,15 +1402,15 @@ │ │ │               | GT _ => find y (split x m)#r
│ │ │             end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Concatenation

│ │ │ +

Concatenation

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma concat_in : forall m1 m2 y,
│ │ │  In y (concat m1 m2) <-> In y m1 \/ In y m2.
│ │ │ @@ -1428,15 +1428,15 @@ │ │ │  find y (concat m1 m2) =
│ │ │   match find y m2 with Some d => Some d | None => find y m1 end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Elements

│ │ │ +

Elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Notation eqk := (PX.eqk (elt:= elt)).
│ │ │ Notation eqke := (PX.eqke (elt:= elt)).
│ │ │ @@ -1482,15 +1482,15 @@ │ │ │  elements t1 ++ (x,e) :: elements t2 ++ l =
│ │ │  elements (Node t1 x e t2 z) ++ l.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition fold' (A : Type) (f : key -> elt -> A -> A)(s : t elt) :=
│ │ │   L.fold f (elements s).
│ │ │ @@ -1510,15 +1510,15 @@ │ │ │  forall (s:t elt)(Hs:bst s)(A : Type)(i:A)(f : key -> elt -> A -> A),
│ │ │  fold f s i = fold_left (fun a p => f p#1 p#2 a) (elements s) i.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Comparison

│ │ │ +

Comparison

│ │ │ │ │ │
│ │ │ │ │ │ flatten_e e returns the list of elements of the enumeration e │ │ │ i.e. the list of elements actually compared │ │ │
│ │ │
│ │ │ @@ -1737,15 +1737,15 @@ │ │ │ End Proofs.
│ │ │ End Raw.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Encapsulation

│ │ │ +

Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Now, in order to really provide a functor implementing S, we │ │ │ need to encapsulate everything into a type of balanced binary search trees. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite maps library

│ │ │ +

Finite maps library

│ │ │ │ │ │
│ │ │ │ │ │ This functor derives additional facts from FMapInterface.S. These │ │ │ facts are mainly the specifications of FMapInterface.S written using │ │ │ different styles: equivalence and boolean equalities. │ │ │ │ │ │ @@ -72,15 +72,15 @@ │ │ │ #[global]
│ │ │ Hint Extern 1 (Equivalence _) => constructor; congruence : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Facts about weak maps

│ │ │ +

Facts about weak maps

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module WFacts_fun (E:DecidableType)(Import M:WSfun E).
│ │ │ │ │ │ @@ -99,15 +99,15 @@ │ │ │ Lemma MapsTo_fun : forall (elt:Type) m x (e e':elt),
│ │ │   MapsTo x e m -> MapsTo x e' m -> e=e'.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using equivalences

│ │ │ +

Specifications written using equivalences

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section IffSpec.
│ │ │ Variable elt elt' elt'': Type.
│ │ │ @@ -256,15 +256,15 @@ │ │ │   rewrite map_mapsto_iff || rewrite map_in_iff ||
│ │ │   rewrite mapi_in_iff)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using boolean predicates

│ │ │ +

Specifications written using boolean predicates

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section BoolSpec.
│ │ │ │ │ │ @@ -395,15 +395,15 @@ │ │ │ Lemma Equal_mapsto_iff : forall m1 m2 : t elt,
│ │ │  Equal m1 m2 <-> (forall k e, MapsTo k e m1 <-> MapsTo k e m2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Relations between Equal, Equiv and Equivb.

│ │ │ +

Relations between Equal, Equiv and Equivb.

│ │ │ │ │ │
│ │ │ │ │ │ First, Equal is Equiv with Leibniz on elements. │ │ │
│ │ │
│ │ │ │ │ │ @@ -457,15 +457,15 @@ │ │ │
│ │ │ End Equalities.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Equal is a setoid equality.

│ │ │ +

Equal is a setoid equality.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma Equal_refl : forall (elt:Type)(m : t elt), Equal m m.
│ │ │ │ │ │ @@ -541,28 +541,28 @@ │ │ │
│ │ │ End WFacts_fun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Same facts for self-contained weak sets and for full maps

│ │ │ +

Same facts for self-contained weak sets and for full maps

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module WFacts (M:WS) := WFacts_fun M.E M.
│ │ │ Module Facts := WFacts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Additional Properties for weak maps

│ │ │ +

Additional Properties for weak maps

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Results about fold, elements, induction principles... │ │ │ │ │ │
│ │ │ @@ -614,30 +614,30 @@ │ │ │   Lemma findA_rev : forall l k, NoDupA eqk l ->
│ │ │     findA (eqb k) l = findA (eqb k) (rev l).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Elements

│ │ │ +

Elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma elements_Empty : forall m:t elt, Empty m <-> elements m = nil.
│ │ │ │ │ │
│ │ │   Lemma elements_empty : elements (@empty elt) = nil.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions between maps and association lists.

│ │ │ +

Conversions between maps and association lists.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition uncurry {U V W : Type} (f : U -> V -> W) : U*V -> W :=
│ │ │    fun p => f (fst p) (snd p).
│ │ │ @@ -666,15 +666,15 @@ │ │ │
│ │ │   Lemma of_list_3 : forall s, Equal (of_list (to_list s)) s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │ │ │ │ Alternative specification via fold_right │ │ │
│ │ │
│ │ │ │ │ │ @@ -682,15 +682,15 @@ │ │ │   Lemma fold_spec_right m (A:Type)(i:A)(f : key -> elt -> A -> A) :
│ │ │     fold f m i = List.fold_right (uncurry f) i (rev (elements m)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Induction principles about fold contributed by S. Lescuyer

│ │ │ +

Induction principles about fold contributed by S. Lescuyer

│ │ │ │ │ │
│ │ │ │ │ │ In the following lemma, the step hypothesis is deliberately restricted │ │ │ to the precise map m we are considering. │ │ │
│ │ │
│ │ │ @@ -795,15 +795,15 @@ │ │ │
│ │ │   Section Fold_More.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Additional properties of fold

│ │ │ +

Additional properties of fold

│ │ │ │ │ │
│ │ │ │ │ │ When a function f is compatible and allows transpositions, we can │ │ │ compute fold f in any order. │ │ │
│ │ │
│ │ │ @@ -890,15 +890,15 @@ │ │ │
│ │ │   End Fold_More.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal

│ │ │ +

Cardinal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_fold : forall m : t elt,
│ │ │    cardinal m = fold (fun _ _ => S) m 0.
│ │ │ @@ -936,15 +936,15 @@ │ │ │   Lemma cardinal_inv_2b :
│ │ │    forall m, cardinal m <> 0 -> { p : key*elt | MapsTo (fst p) (snd p) m }.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Additional notions over maps

│ │ │ +

Additional notions over maps

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition Disjoint (m m' : t elt) :=
│ │ │    forall k, ~(In k m /\ In k m').
│ │ │ @@ -954,15 +954,15 @@ │ │ │     Disjoint m1 m2 /\
│ │ │     (forall k e, MapsTo k e m <-> MapsTo k e m1 \/ MapsTo k e m2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Emulation of some functions lacking in the interface

│ │ │ +

Emulation of some functions lacking in the interface

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition filter (f : key -> elt -> bool)(m : t elt) :=
│ │ │    fold (fun k e m => if f k e then add k e m else m) m (empty _).
│ │ │ @@ -1181,28 +1181,28 @@ │ │ │
│ │ │ End WProperties_fun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Same Properties for self-contained weak maps and for full maps

│ │ │ +

Same Properties for self-contained weak maps and for full maps

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module WProperties (M:WS) := WProperties_fun M.E M.
│ │ │ Module Properties := WProperties.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties specific to maps with ordered keys

│ │ │ +

Properties specific to maps with ordered keys

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module OrdProperties (M:S).
│ │ │  Module Import ME := OrderedTypeFacts M.E.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapFullAVL.html │ │ │ @@ -47,15 +47,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

FMapFullAVL

│ │ │ +

FMapFullAVL

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This file contains some complements to FMapAVL. │ │ │ │ │ │
│ │ │ @@ -115,15 +115,15 @@ │ │ │ Variable elt : Type.
│ │ │ Implicit Types m r : t elt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AVL trees

│ │ │ +

AVL trees

│ │ │ │ │ │
│ │ │ │ │ │ avl s : s is a properly balanced AVL tree, │ │ │ i.e. for any node the heights of the two children │ │ │ differ by at most 2 │ │ │
│ │ │ @@ -139,15 +139,15 @@ │ │ │       h = max (height l) (height r) + 1 ->
│ │ │       avl (Node l x e r h).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Automation and dedicated tactics about avl.

│ │ │ +

Automation and dedicated tactics about avl.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[local]
│ │ │ Hint Constructors avl : core.
│ │ │ @@ -177,15 +177,15 @@ │ │ │      | _ => idtac
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic results about avl, height

│ │ │ +

Basic results about avl, height

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma avl_node : forall x e l r, avl l -> avl r ->
│ │ │  -(2) <= height l - height r <= 2 ->
│ │ │ @@ -205,27 +205,27 @@ │ │ │ Lemma height_0 : forall l, avl l -> height l = 0 ->
│ │ │  l = Leaf _.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Empty map

│ │ │ +

Empty map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma empty_avl : avl (empty elt).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Helper functions

│ │ │ +

Helper functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma create_avl :
│ │ │  forall l x e r, avl l -> avl r -> -(2) <= height l - height r <= 2 ->
│ │ │ @@ -257,15 +257,15 @@ │ │ │      omega_max
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma add_avl_1 : forall m x e, avl m ->
│ │ │  avl (add x e m) /\ 0 <= height (add x e m) - height m <= 1.
│ │ │ @@ -275,15 +275,15 @@ │ │ │ #[local]
│ │ │ Hint Resolve add_avl : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extraction of minimum binding

│ │ │ +

Extraction of minimum binding

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_min_avl_1 : forall l x e r h, avl (Node l x e r h) ->
│ │ │  avl (remove_min l x e r)#1 /\
│ │ │ @@ -293,15 +293,15 @@ │ │ │ Lemma remove_min_avl : forall l x e r h, avl (Node l x e r h) ->
│ │ │     avl (remove_min l x e r)#1.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Merging two trees

│ │ │ +

Merging two trees

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma merge_avl_1 : forall m1 m2, avl m1 -> avl m2 ->
│ │ │  -(2) <= height m1 - height m2 <= 2 ->
│ │ │ @@ -312,15 +312,15 @@ │ │ │ Lemma merge_avl : forall m1 m2, avl m1 -> avl m2 ->
│ │ │   -(2) <= height m1 - height m2 <= 2 -> avl (merge m1 m2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_avl_1 : forall m x, avl m ->
│ │ │  avl (remove x m) /\ 0 <= height m - height (remove x m) <= 1.
│ │ │ @@ -330,15 +330,15 @@ │ │ │ #[local]
│ │ │ Hint Resolve remove_avl : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Join

│ │ │ +

Join

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma join_avl_1 : forall l x d r, avl l -> avl r ->
│ │ │  avl (join l x d r) /\
│ │ │ @@ -449,15 +449,15 @@ │ │ │ End Map2.
│ │ │ End AvlProofs.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Encapsulation

│ │ │ +

Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We can implement S with balanced binary search trees. │ │ │ When compared to FMapAVL, we maintain here two invariants │ │ │ (bst and avl) instead of only bst, which is enough for fulfilling │ │ │ @@ -648,15 +648,15 @@ │ │ │   Definition elements (m:t) :=
│ │ │     LO.MapS.Build_slist (Raw.Proofs.elements_sort (is_bst m)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

As comparison function, we propose here a non-structural

│ │ │ +

As comparison function, we propose here a non-structural

│ │ │ │ │ │ version faithful to the code of Ocaml's Map library, instead of │ │ │ the structural version of FMapAVL │ │ │
│ │ │
│ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapInterface.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite map library

│ │ │ +

Finite map library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes interfaces for finite maps │ │ │
│ │ │
│ │ │ │ │ │ @@ -131,15 +131,15 @@ │ │ │
│ │ │ Definition Cmp (elt:Type)(cmp:elt->elt->bool) e1 e2 := cmp e1 e2 = true.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Weak signature for maps

│ │ │ +

Weak signature for maps

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ No requirements for an ordering on keys nor elements, only decidability │ │ │ of equality on keys. First, a functorial signature: │ │ │
│ │ │ @@ -552,15 +552,15 @@ │ │ │
│ │ │ End WSfun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Static signature for Weak Maps

│ │ │ +

Static signature for Weak Maps

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to WSfun but expressed in a self-contained way. │ │ │
│ │ │
│ │ │ @@ -571,15 +571,15 @@ │ │ │   Include WSfun E.
│ │ │ End WS.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Maps on ordered keys, functorial signature

│ │ │ +

Maps on ordered keys, functorial signature

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type Sfun (E : OrderedType).
│ │ │   Include WSfun E.
│ │ │ @@ -598,30 +598,30 @@ │ │ │   End elt.
│ │ │ End Sfun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Maps on ordered keys, self-contained signature

│ │ │ +

Maps on ordered keys, self-contained signature

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type S.
│ │ │   Declare Module E : OrderedType.
│ │ │   Include Sfun E.
│ │ │ End S.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Maps with ordering both on keys and datas

│ │ │ +

Maps with ordering both on keys and datas

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type Sord.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite map library

│ │ │ +

Finite map library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent interface │ │ │ FMapInterface.S using lists of pairs ordered (increasing) with respect to │ │ │ left projection. │ │ │
│ │ │ @@ -89,15 +89,15 @@ │ │ │ Notation Sort := (sort ltk).
│ │ │ Notation Inf := (lelistA (ltk)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

empty

│ │ │ +

empty

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition empty : t elt := nil.
│ │ │ │ │ │ @@ -112,15 +112,15 @@ │ │ │
│ │ │ Lemma empty_sorted : Sort empty.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

is_empty

│ │ │ +

is_empty

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition is_empty (l : t elt) : bool := if l then true else false.
│ │ │ │ │ │ @@ -130,15 +130,15 @@ │ │ │
│ │ │ Lemma is_empty_2 : forall m, is_empty m = true -> Empty m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

mem

│ │ │ +

mem

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint mem (k : key) (s : t elt) {struct s} : bool :=
│ │ │  match s with
│ │ │ @@ -157,15 +157,15 @@ │ │ │
│ │ │ Lemma mem_2 : forall m (Hm:Sort m) x, mem x m = true -> In x m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

find

│ │ │ +

find

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint find (k:key) (s: t elt) {struct s} : option elt :=
│ │ │  match s with
│ │ │ @@ -184,15 +184,15 @@ │ │ │
│ │ │ Lemma find_1 : forall m (Hm:Sort m) x e, MapsTo x e m -> find x m = Some e.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

add

│ │ │ +

add

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint add (k : key) (x : elt) (s : t elt) {struct s} : t elt :=
│ │ │  match s with
│ │ │ @@ -225,15 +225,15 @@ │ │ │
│ │ │ Lemma add_sorted : forall m (Hm:Sort m) x e, Sort (add x e m).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

remove

│ │ │ +

remove

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint remove (k : key) (s : t elt) {struct s} : t elt :=
│ │ │  match s with
│ │ │ @@ -266,15 +266,15 @@ │ │ │
│ │ │ Lemma remove_sorted : forall m (Hm:Sort m) x, Sort (remove x m).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

elements

│ │ │ +

elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition elements (m: t elt) := m.
│ │ │ │ │ │ @@ -292,15 +292,15 @@ │ │ │
│ │ │ Lemma elements_3w : forall m (Hm:Sort m), NoDupA eqk (elements m).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

fold

│ │ │ +

fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint fold (A:Type)(f:key->elt->A->A)(m:t elt) (acc:A) {struct m} : A :=
│ │ │   match m with
│ │ │ @@ -312,15 +312,15 @@ │ │ │ Lemma fold_1 : forall m (A:Type)(i:A)(f:key->elt->A->A),
│ │ │   fold f m i = fold_left (fun a p => f (fst p) (snd p) a) (elements m) i.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

equal

│ │ │ +

equal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint equal (cmp:elt->elt->bool)(m m' : t elt) {struct m} : bool :=
│ │ │   match m, m' with
│ │ │ @@ -362,15 +362,15 @@ │ │ │
│ │ │ Variable elt':Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

map and mapi

│ │ │ +

map and mapi

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint map (f:elt -> elt') (m:t elt) : t elt' :=
│ │ │   match m with
│ │ │ @@ -455,15 +455,15 @@ │ │ │ End Elt2.
│ │ │ Section Elt3.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

map2

│ │ │ +

map2

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Variable elt elt' elt'' : Type.
│ │ │ Variable f : option elt -> option elt' -> option elt''.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapPositive.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

FMapPositive : an implementation of FMapInterface for positive keys.

│ │ │ +

FMapPositive : an implementation of FMapInterface for positive keys.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Bool OrderedType ZArith OrderedType OrderedTypeEx FMapInterface.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FMapWeakList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite map library

│ │ │ +

Finite map library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent interface │ │ │ FMapInterface.WS using lists of pairs, unordered but without redundancy. │ │ │
│ │ │
│ │ │ @@ -87,15 +87,15 @@ │ │ │ Notation In := (In (elt:=elt)).
│ │ │ Notation NoDupA := (NoDupA eqk).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

empty

│ │ │ +

empty

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition empty : t elt := nil.
│ │ │ │ │ │ @@ -112,15 +112,15 @@ │ │ │
│ │ │ Lemma empty_NoDup : NoDupA empty.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

is_empty

│ │ │ +

is_empty

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition is_empty (l : t elt) : bool := if l then true else false.
│ │ │ │ │ │ @@ -130,15 +130,15 @@ │ │ │
│ │ │ Lemma is_empty_2 : forall m, is_empty m = true -> Empty m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

mem

│ │ │ +

mem

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint mem (k : key) (s : t elt) {struct s} : bool :=
│ │ │   match s with
│ │ │ @@ -152,15 +152,15 @@ │ │ │
│ │ │ Lemma mem_2 : forall m (Hm:NoDupA m) x, mem x m = true -> In x m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

find

│ │ │ +

find

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint find (k:key) (s: t elt) {struct s} : option elt :=
│ │ │   match s with
│ │ │ @@ -181,15 +181,15 @@ │ │ │ Lemma find_eq : forall m (Hm:NoDupA m) x x',
│ │ │    X.eq x x' -> find x m = find x' m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

add

│ │ │ +

add

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint add (k : key) (x : elt) (s : t elt) {struct s} : t elt :=
│ │ │   match s with
│ │ │ @@ -225,15 +225,15 @@ │ │ │ Lemma add_not_eq : forall m (Hm:NoDupA m) x a e,
│ │ │   ~X.eq x a -> find x (add a e m) = find x m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

remove

│ │ │ +

remove

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint remove (k : key) (s : t elt) {struct s} : t elt :=
│ │ │   match s with
│ │ │ @@ -259,15 +259,15 @@ │ │ │
│ │ │ Lemma remove_NoDup : forall m (Hm:NoDupA m) x, NoDupA (remove x m).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

elements

│ │ │ +

elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition elements (m: t elt) := m.
│ │ │ │ │ │ @@ -280,15 +280,15 @@ │ │ │
│ │ │ Lemma elements_3w : forall m (Hm:NoDupA m), NoDupA (elements m).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

fold

│ │ │ +

fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint fold (A:Type)(f:key->elt->A->A)(m:t elt) (acc : A) {struct m} : A :=
│ │ │   match m with
│ │ │ @@ -300,15 +300,15 @@ │ │ │ Lemma fold_1 : forall m (A:Type)(i:A)(f:key->elt->A->A),
│ │ │   fold f m i = fold_left (fun a p => f (fst p) (snd p) a) (elements m) i.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

equal

│ │ │ +

equal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition check (cmp : elt -> elt -> bool)(k:key)(e:elt)(m': t elt) :=
│ │ │   match find k m' with
│ │ │ @@ -361,15 +361,15 @@ │ │ │
│ │ │ Variable elt':Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

map and mapi

│ │ │ +

map and mapi

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint map (f:elt -> elt') (m:t elt) : t elt' :=
│ │ │   match m with
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetAVL.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

FSetAVL : Implementation of FSetInterface via AVL trees

│ │ │ +

FSetAVL : Implementation of FSetInterface via AVL trees

│ │ │ │ │ │
│ │ │ │ │ │ This module implements finite sets using AVL trees. │ │ │ It follows the implementation from Ocaml's standard library, │ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetBridge.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This module implements bridges (as functors) from dependent │ │ │ to/from non-dependent set signature. │ │ │
│ │ │
│ │ │ @@ -62,15 +62,15 @@ │ │ │ Require Export FSetInterface.
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From non-dependent signature S to dependent signature Sdep.

│ │ │ +

From non-dependent signature S to dependent signature Sdep.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module DepOfNodep (Import M: S) <: Sdep with Module E := M.E.
│ │ │   Local Ltac Tauto.intuition_solver ::= auto with bool set.
│ │ │ @@ -240,15 +240,15 @@ │ │ │
│ │ │ End DepOfNodep.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From dependent signature Sdep to non-dependent signature S.

│ │ │ +

From dependent signature Sdep to non-dependent signature S.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module NodepOfDep (M: Sdep) <: S with Module E := M.E.
│ │ │   Import M.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetCompat.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Compatibility functors between FSetInterface and MSetInterface.

│ │ │ +

Compatibility functors between FSetInterface and MSetInterface.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import FSetInterface FSetFacts MSetInterface MSetFacts.
│ │ │ Set Implicit Arguments.
│ │ │ @@ -61,15 +61,15 @@ │ │ │
│ │ │ Local Ltac Tauto.intuition_solver ::= auto with relations.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From new Weak Sets to old ones

│ │ │ +

From new Weak Sets to old ones

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Backport_WSets
│ │ │  (E:DecidableType.DecidableType)
│ │ │ @@ -224,15 +224,15 @@ │ │ │
│ │ │ End Backport_WSets.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From new Sets to new ones

│ │ │ +

From new Sets to new ones

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Backport_Sets
│ │ │  (O:OrderedType.OrderedType)
│ │ │ @@ -282,15 +282,15 @@ │ │ │
│ │ │ End Backport_Sets.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From old Weak Sets to new ones.

│ │ │ +

From old Weak Sets to new ones.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Update_WSets
│ │ │  (E:Equalities.DecidableType)
│ │ │ @@ -425,15 +425,15 @@ │ │ │
│ │ │ End Update_WSets.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From old Sets to new ones.

│ │ │ +

From old Sets to new ones.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Update_Sets
│ │ │  (O:Orders.OrderedType)
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetDecide.html │ │ │ @@ -71,15 +71,15 @@ │ │ │ Module WDecide_fun (E : DecidableType)(Import M : WSfun E).
│ │ │  Module F := FSetFacts.WFacts_fun E M.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Overview

│ │ │ +

Overview

│ │ │ │ │ │ This functor defines the tactic fsetdec, which will │ │ │ solve any valid goal of the form │ │ │
│ │ │      forall s1 ... sn,
│ │ │      forall x1 ... xm,
│ │ │      P1 -> ... -> Pk -> P
│ │ │ @@ -177,41 +177,41 @@
│ │ │  
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Facts and Tactics for Propositional Logic

│ │ │ +

Facts and Tactics for Propositional Logic

│ │ │ │ │ │ These lemmas and tactics are in a module so that they do │ │ │ not affect the namespace if you import the enclosing │ │ │ module Decide. │ │ │
│ │ │
│ │ │   Module FSetLogicalFacts.
│ │ │     Export Decidable.
│ │ │     Export Setoid.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Lemmas and Tactics About Decidable Propositions

│ │ │ +

Lemmas and Tactics About Decidable Propositions

│ │ │ │ │ │
│ │ │ │ │ │ -

Propositional Equivalences Involving Negation

│ │ │ +

Propositional Equivalences Involving Negation

│ │ │ │ │ │ These are all written with the unfolded form of │ │ │ negation, since I am not sure if setoid rewriting will │ │ │ always perform conversion. │ │ │
│ │ │ │ │ │ -

Tactics for Negations

│ │ │ +

Tactics for Negations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │     Tactic Notation "fold" "any" "not" :=
│ │ │       repeat (
│ │ │ @@ -454,28 +454,28 @@ │ │ │   End FSetLogicalFacts.
│ │ │   Import FSetLogicalFacts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Auxiliary Tactics

│ │ │ +

Auxiliary Tactics

│ │ │ │ │ │ Again, these lemmas and tactics are in a module so that │ │ │ they do not affect the namespace if you import the │ │ │ enclosing module Decide. │ │ │
│ │ │
│ │ │   Module FSetDecideAuxiliary.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic Tactics

│ │ │ +

Generic Tactics

│ │ │ │ │ │ We begin by defining a few generic, useful tactics. │ │ │
│ │ │ │ │ │ remove logical hypothesis inter-dependencies (fix 2136). │ │ │
│ │ │
│ │ │ @@ -584,15 +584,15 @@ │ │ │         | H: _ |- _ => progress (decompose record H); clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Discarding Irrelevant Hypotheses

│ │ │ +

Discarding Irrelevant Hypotheses

│ │ │ │ │ │ We will want to clear the context of any │ │ │ non-FSet-related hypotheses in order to increase the │ │ │ speed of the tactic. To do this, we will need to be │ │ │ able to decide which are relevant. We do this by making │ │ │ a simple inductive definition classifying the │ │ │ propositions of interest. │ │ │ @@ -664,15 +664,15 @@ │ │ │           else clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Turning Set Operators into Propositional Connectives

│ │ │ +

Turning Set Operators into Propositional Connectives

│ │ │ │ │ │ The lemmas from FSetFacts will be used to break down │ │ │ set operations into propositional formulas built over │ │ │ the predicates In and E.eq applied only to │ │ │ variables. We are going to use them with autorewrite. │ │ │ │ │ │
│ │ │ @@ -690,15 +690,15 @@ │ │ │
│ │ │     Global Hint Rewrite eq_refl_iff : set_eq_simpl.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidability of FSet Propositions

│ │ │ +

Decidability of FSet Propositions

│ │ │ │ │ │
│ │ │ │ │ │ In is decidable. │ │ │
│ │ │
│ │ │     Lemma dec_In : forall x s,
│ │ │ @@ -725,15 +725,15 @@ │ │ │     #[global]
│ │ │     Hint Resolve dec_In dec_eq : FSet_decidability.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Normalizing Propositions About Equality

│ │ │ +

Normalizing Propositions About Equality

│ │ │ │ │ │ We have to deal with the fact that E.eq may be │ │ │ convertible with Coq's equality. Thus, we will find the │ │ │ following tactics useful to replace one form with the │ │ │ other everywhere. │ │ │
│ │ │ │ │ │ @@ -808,15 +808,15 @@ │ │ │         end);
│ │ │       autorewrite with set_eq_simpl in *.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Considering Decidability of Base Propositions

│ │ │ +

Considering Decidability of Base Propositions

│ │ │ │ │ │ This tactic adds assertions about the decidability of │ │ │ E.eq and In to the context. This is necessary for │ │ │ the completeness of the fsetdec tactic. However, in │ │ │ order to minimize the cost of proof search, we should be │ │ │ careful to not add more than we need. Once negations │ │ │ have been pushed to the leaves of the propositions, we │ │ │ @@ -857,15 +857,15 @@ │ │ │         | _: ~ ?P, H : ?P \/ ~ ?P |- _ => clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Handling Empty, Subset, and Equal

│ │ │ +

Handling Empty, Subset, and Equal

│ │ │ │ │ │ This tactic instantiates universally quantified │ │ │ hypotheses (which arise from the unfolding of Empty, │ │ │ Subset, and Equal) for each of the set element │ │ │ expressions that is involved in some membership or │ │ │ equality fact. Then it throws away those hypotheses, │ │ │ which should no longer be needed. │ │ │ @@ -905,15 +905,15 @@ │ │ │           clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The Core fsetdec Auxiliary Tactics

│ │ │ +

The Core fsetdec Auxiliary Tactics

│ │ │ │ │ │
│ │ │ │ │ │ Here is the crux of the proof search. Recursion through │ │ │ intuition! (This will terminate if I correctly │ │ │ understand the behavior of intuition.) │ │ │
│ │ │ @@ -947,15 +947,15 @@ │ │ │   End FSetDecideAuxiliary.
│ │ │   Import FSetDecideAuxiliary.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The fsetdec Tactic

│ │ │ +

The fsetdec Tactic

│ │ │ │ │ │ Here is the top-level tactic (the only one intended for │ │ │ clients of this library). It's specification is given at │ │ │ the top of the file. │ │ │
│ │ │
│ │ │   Ltac fsetdec :=
│ │ │ @@ -1061,15 +1061,15 @@ │ │ │       fsetdec_body
│ │ │     end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Examples

│ │ │ +

Examples

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Module FSetDecideTestCases.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetEqProperties.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This module proves many properties of finite sets that │ │ │ are consequences of the axiomatization in FsetInterface │ │ │ Contrary to the functor in FsetProperties it uses │ │ │ sets operations instead of predicates over sets, i.e. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This functor derives additional facts from FSetInterface.S. These │ │ │ facts are mainly the specifications of FSetInterface.S written using │ │ │ different styles: equivalence and boolean equalities. │ │ │ Moreover, we prove that E.Eq and Equal are setoid equalities. │ │ │ @@ -81,15 +81,15 @@ │ │ │ Notation eq_dec := E.eq_dec.
│ │ │ Definition eqb x y := if eq_dec x y then true else false.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using equivalences

│ │ │ +

Specifications written using equivalences

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section IffSpec.
│ │ │ Variable s s' s'' : t.
│ │ │ @@ -175,15 +175,15 @@ │ │ │   || rewrite union_iff || rewrite inter_iff || rewrite diff_iff
│ │ │   || rewrite empty_iff)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using boolean predicates

│ │ │ +

Specifications written using boolean predicates

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section BoolSpec.
│ │ │ Variable s s' s'' : t.
│ │ │ @@ -239,15 +239,15 @@ │ │ │
│ │ │ End BoolSpec.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

E.eq and Equal are setoid equalities

│ │ │ +

E.eq and Equal are setoid equalities

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Instance E_ST : Equivalence E.eq.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetInterface.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite set library

│ │ │ +

Finite set library

│ │ │ │ │ │
│ │ │ │ │ │ Set interfaces, inspired by the one of Ocaml. When compared with │ │ │ Ocaml, the main differences are: │ │ │
    │ │ │
  • the lack of iter function, useless since Coq is purely functional │ │ │ @@ -101,24 +101,24 @@ │ │ │ Require Export Bool OrderedType DecidableType.
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Non-dependent signatures

│ │ │ +

Non-dependent signatures

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ The following signatures presents sets as purely informative │ │ │ programs together with axioms │ │ │
│ │ │ │ │ │ -

Functorial signature for weak sets

│ │ │ +

Functorial signature for weak sets

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Weak sets are sets without ordering on base elements, only │ │ │ a decidable equality. │ │ │
│ │ │ @@ -615,15 +615,15 @@ │ │ │
│ │ │ End WSfun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Static signature for weak sets

│ │ │ +

Static signature for weak sets

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to the functorial signature SW, except that the │ │ │ module E of base elements is incorporated in the signature. │ │ │
│ │ │ @@ -635,15 +635,15 @@ │ │ │   Include WSfun E.
│ │ │ End WS.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functorial signature for sets on ordered elements

│ │ │ +

Functorial signature for sets on ordered elements

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Based on WSfun, plus ordering on sets and min_elt and max_elt │ │ │ and some stronger specifications for other functions. │ │ │
│ │ │ @@ -762,15 +762,15 @@ │ │ │
│ │ │ End Sfun.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Static signature for sets on ordered elements

│ │ │ +

Static signature for sets on ordered elements

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to the functorial signature Sfun, except that the │ │ │ module E of base elements is incorporated in the signature. │ │ │
│ │ │ @@ -782,15 +782,15 @@ │ │ │   Include Sfun E.
│ │ │ End S.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Some subtyping tests

│ │ │ +

Some subtyping tests

│ │ │ │ │ │
│ │ │  WSfun ---> WS
│ │ │   |         |
│ │ │   |         |
│ │ │   V         V
│ │ │  Sfun  ---> S
│ │ │ @@ -799,15 +799,15 @@
│ │ │  Module Sfun_WSfun (E:OrderedType)(M : Sfun E) <: WSfun E := M.
│ │ │  Module S_Sfun (M : S) <: Sfun M.E := M.
│ │ │  Module WS_WSfun (M : WS) <: WSfun M.E := M.
│ │ │  
│ │ │ │ │ │
│ │ │ │ │ │ -

Dependent signature

│ │ │ +

Dependent signature

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Signature Sdep presents ordered sets using dependent types │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent │ │ │ interface FSetInterface.S using strictly ordered list. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetProperties.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This functor derives additional properties from FSetInterface.S. │ │ │ Contrary to the functor in FSetEqProperties it uses │ │ │ predicates over sets instead of sets operations, i.e. │ │ │ In x s instead of mem x s=true, │ │ │ @@ -337,30 +337,30 @@ │ │ │     remove_diff_singleton diff_inter_empty diff_inter_all Add_add Add_remove
│ │ │     Equal_remove add_add : set.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of elements

│ │ │ +

Properties of elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma elements_Empty : forall s, Empty s <-> elements s = nil.
│ │ │ │ │ │
│ │ │   Lemma elements_empty : elements empty = nil.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions between lists and sets

│ │ │ +

Conversions between lists and sets

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition of_list (l : list elt) := List.fold_right add empty l.
│ │ │ │ │ │ @@ -376,15 +376,15 @@ │ │ │
│ │ │   Lemma of_list_3 : forall s, of_list (to_list s) [=] s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section Fold.
│ │ │ │ │ │ @@ -404,15 +404,15 @@ │ │ │   Notation NoDup := (NoDupA E.eq).
│ │ │   Notation InA := (InA E.eq).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Induction principles for fold (contributed by S. Lescuyer)

│ │ │ +

Induction principles for fold (contributed by S. Lescuyer)

│ │ │ │ │ │
│ │ │ │ │ │ In the following lemma, the step hypothesis is deliberately restricted │ │ │ to the precise set s we are considering. │ │ │
│ │ │
│ │ │ @@ -510,15 +510,15 @@ │ │ │
│ │ │   Lemma fold_identity : forall s, fold add s empty [=] s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Alternative (weaker) specifications for fold

│ │ │ +

Alternative (weaker) specifications for fold

│ │ │ │ │ │
│ │ │ │ │ │ When FSets was first designed, the order in which Ocaml's Set.fold │ │ │ takes the set elements was unspecified. This specification reflects │ │ │ this fact: │ │ │ │ │ │ @@ -582,15 +582,15 @@ │ │ │   Lemma fold_commutes : forall i s x,
│ │ │    eqA (fold f s (f x i)) (f x (fold f s i)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold is a morphism

│ │ │ +

Fold is a morphism

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma fold_init : forall i i' s, eqA i i' ->
│ │ │    eqA (fold f s i) (fold f s i').
│ │ │ @@ -599,15 +599,15 @@ │ │ │   Lemma fold_equal :
│ │ │    forall i s s', s[=]s' -> eqA (fold f s i) (fold f s' i).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold and other set operators

│ │ │ +

Fold and other set operators

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma fold_empty : forall i, fold f empty i = i.
│ │ │ │ │ │ @@ -651,31 +651,31 @@ │ │ │
│ │ │   End Fold.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal

│ │ │ +

Cardinal

│ │ │ │ │ │
│ │ │ │ │ │ -

Characterization of cardinal in terms of fold

│ │ │ +

Characterization of cardinal in terms of fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_fold : forall s, cardinal s = fold (fun _ => S) s 0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Old specifications for cardinal.

│ │ │ +

Old specifications for cardinal.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_0 :
│ │ │      forall s, exists l : list elt,
│ │ │ @@ -690,15 +690,15 @@ │ │ │   Lemma cardinal_2 :
│ │ │     forall s s' x, ~ In x s -> Add x s s' -> cardinal s' = S (cardinal s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal and (non-)emptiness

│ │ │ +

Cardinal and (non-)emptiness

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_Empty : forall s, Empty s <-> cardinal s = 0.
│ │ │ │ │ │ @@ -715,15 +715,15 @@ │ │ │   Lemma cardinal_inv_2b :
│ │ │    forall s, cardinal s <> 0 -> { x : elt | In x s }.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal is a morphism

│ │ │ +

Cardinal is a morphism

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma Equal_cardinal : forall s s', s[=]s' -> cardinal s = cardinal s'.
│ │ │ │ │ │ @@ -734,15 +734,15 @@ │ │ │   #[global]
│ │ │   Hint Resolve Add_add Add_remove Equal_remove cardinal_inv_1 Equal_cardinal : fset.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal and set operators

│ │ │ +

Cardinal and set operators

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma empty_cardinal : cardinal empty = 0.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetToFiniteSet.html │ │ │ @@ -45,28 +45,28 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library : conversion to old Finite_sets

│ │ │ +

Finite sets library : conversion to old Finite_sets

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Ensembles Finite_sets.
│ │ │ Require Import FSetInterface FSetProperties OrderedTypeEx DecidableTypeEx.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Going from FSets with usual Leibniz equality

│ │ │ +

Going from FSets with usual Leibniz equality

│ │ │ │ │ │ to the good old Ensembles and Finite_sets theory. │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module WS_to_Finite_set (U:UsualDecidableType)(M: WSfun U).
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.FSets.FSetWeakList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent │ │ │ interface FSetInterface.WS using lists without redundancy. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatAxioms.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZArith Uint63 SpecFloat PrimFloat FloatOps.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of the primitive operators for the Binary64 format

│ │ │ +

Properties of the primitive operators for the Binary64 format

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Notation valid_binary := (valid_binary prec emax).
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatLemmas.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Import ZArith Uint63 SpecFloat PrimFloat FloatOps FloatAxioms.
│ │ │ Require Import Psatz.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Support results involving frexp and ldexp

│ │ │ +

Support results involving frexp and ldexp

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma shift_value : shift = (2*emax + prec)%Z.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.FloatOps.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZArith Uint63 SpecFloat PrimFloat.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Derived operations and mapping between primitive floats and spec_floats

│ │ │ +

Derived operations and mapping between primitive floats and spec_floats

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition prec := 53%Z.
│ │ │ Definition emax := 1024%Z.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.PrimFloat.html │ │ │ @@ -48,24 +48,24 @@ │ │ │
│ │ │ Require Import PrimInt63 FloatClass.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definition of the interface for primitive floating-point arithmetic

│ │ │ +

Definition of the interface for primitive floating-point arithmetic

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This interface provides processor operators for the Binary64 format of the │ │ │ IEEE 754-2008 standard. │ │ │
│ │ │ │ │ │ -

Type definition for the co-domain of compare

│ │ │ +

Type definition for the co-domain of compare

│ │ │ │ │ │
│ │ │
│ │ │ Variant float_comparison : Set := FEq | FLt | FGt | FNotComparable.
│ │ │ │ │ │
│ │ │ Register float_comparison as kernel.ind_f_cmp.
│ │ │ @@ -73,15 +73,15 @@ │ │ │
│ │ │ Register float_class as kernel.ind_f_class.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The main type

│ │ │ +

The main type

│ │ │ float: primitive type for Binary64 floating-point numbers. │ │ │
│ │ │
│ │ │ Primitive float := #float64_type.
│ │ │ Register float as num.float.type.
│ │ │ │ │ │
│ │ │ @@ -91,30 +91,30 @@ │ │ │ Definition printer (x : float_wrapper) : float := float_wrap x.
│ │ │ Definition parser (x : float) : float := x.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Syntax support

│ │ │ +

Syntax support

│ │ │ │ │ │
│ │ │
│ │ │ Module Import PrimFloatNotationsInternalA.
│ │ │ Declare Scope float_scope.
│ │ │ Delimit Scope float_scope with float.
│ │ │ Bind Scope float_scope with float.
│ │ │ End PrimFloatNotationsInternalA.
│ │ │ Number Notation float parser printer : float_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Floating-point operators

│ │ │ +

Floating-point operators

│ │ │ │ │ │
│ │ │
│ │ │ Primitive classify := #float64_classify.
│ │ │ │ │ │
│ │ │ Primitive abs := #float64_abs.
│ │ │ @@ -181,15 +181,15 @@ │ │ │ Notation "x / y" := (div x y) : float_scope.
│ │ │ End PrimFloatNotationsInternalB.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions

│ │ │ +

Conversions

│ │ │ │ │ │
│ │ │ │ │ │ of_uint63: convert a primitive unsigned integer into a float value. │ │ │ The value is rounded if need be. │ │ │
│ │ │
│ │ │ @@ -220,15 +220,15 @@ │ │ │
│ │ │ Primitive normfr_mantissa := #float64_normfr_mantissa.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Exponent manipulation functions

│ │ │ +

Exponent manipulation functions

│ │ │ frshiftexp: convert a float to fractional part in [0.5, 1.) │ │ │ and integer part. │ │ │
│ │ │
│ │ │ Primitive frshiftexp := #float64_frshiftexp.
│ │ │ │ │ │
│ │ │ @@ -240,15 +240,15 @@ │ │ │
│ │ │ Primitive ldshiftexp := #float64_ldshiftexp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Predecesor/Successor functions

│ │ │ +

Predecesor/Successor functions

│ │ │ │ │ │
│ │ │ │ │ │ next_up: return the next float towards positive infinity. │ │ │
│ │ │
│ │ │ Primitive next_up := #float64_next_up.
│ │ │ @@ -262,15 +262,15 @@ │ │ │
│ │ │ Primitive next_down := #float64_next_down.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Special values (needed for pretty-printing)

│ │ │ +

Special values (needed for pretty-printing)

│ │ │ │ │ │
│ │ │
│ │ │ Definition infinity := Eval compute in div (of_uint63 1) (of_uint63 0).
│ │ │ Definition neg_infinity := Eval compute in opp infinity.
│ │ │ Definition nan := Eval compute in div (of_uint63 0) (of_uint63 0).
│ │ │ │ │ │ @@ -279,28 +279,28 @@ │ │ │ Register neg_infinity as num.float.neg_infinity.
│ │ │ Register nan as num.float.nan.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Other special values

│ │ │ +

Other special values

│ │ │ │ │ │
│ │ │
│ │ │ Definition one := Eval compute in (of_uint63 1).
│ │ │ Definition zero := Eval compute in (of_uint63 0).
│ │ │ Definition neg_zero := Eval compute in (-zero)%float.
│ │ │ Definition two := Eval compute in (of_uint63 2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Predicates and helper functions

│ │ │ +

Predicates and helper functions

│ │ │ │ │ │
│ │ │
│ │ │ Definition is_nan f := negb (f =? f)%float.
│ │ │ │ │ │
│ │ │ Definition is_zero f := (f =? zero)%float. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Floats.SpecFloat.html │ │ │ @@ -48,24 +48,24 @@ │ │ │
│ │ │ Require Import ZArith FloatClass.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specification of floating-point arithmetic

│ │ │ +

Specification of floating-point arithmetic

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This specification is mostly borrowed from the IEEE754.Binary module │ │ │ of the Flocq library (see http://flocq.gforge.inria.fr/) │ │ │
│ │ │ │ │ │ -

Inductive specification of floating-point numbers

│ │ │ +

Inductive specification of floating-point numbers

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to Flocq.IEEE754.Binary.full_float, but with no NaN payload. │ │ │
│ │ │
│ │ │ @@ -75,15 +75,15 @@ │ │ │   | S754_nan
│ │ │   | S754_finite (s : bool) (m : positive) (e : Z).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Parameterized definitions

│ │ │ +

Parameterized definitions

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ prec is the number of bits of the mantissa including the implicit one; │ │ │ emax is the exponent of the infinities. │ │ │ │ │ │ @@ -238,15 +238,15 @@ │ │ │       end.
│ │ │   End Rounding.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Define operations

│ │ │ +

Define operations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition SFopp x :=
│ │ │     match x with
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Byte.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Bytes

│ │ │ +

Bytes

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Coq.Init.Ltac.
│ │ │ Require Import Coq.Init.Datatypes.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Datatypes.html │ │ │ @@ -53,15 +53,15 @@ │ │ │ Require Import Ltac.
│ │ │ Require Import Logic.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Datatypes with zero and one element

│ │ │ +

Datatypes with zero and one element

│ │ │ │ │ │
│ │ │ │ │ │ Empty_set is a datatype with no inhabitant │ │ │
│ │ │
│ │ │ │ │ │ @@ -87,15 +87,15 @@ │ │ │ Register unit as core.unit.type.
│ │ │ Register tt as core.unit.tt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The boolean datatype

│ │ │ +

The boolean datatype

│ │ │ │ │ │
│ │ │ │ │ │ bool is the datatype of the boolean values true and false │ │ │
│ │ │
│ │ │ │ │ │ @@ -258,15 +258,15 @@ │ │ │ Register BoolSpecT as core.BoolSpec.BoolSpecT.
│ │ │ Register BoolSpecF as core.BoolSpec.BoolSpecF.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Peano natural numbers

│ │ │ +

Peano natural numbers

│ │ │ │ │ │
│ │ │ │ │ │ nat is the datatype of natural numbers built from O and successor S; │ │ │ note that the constructor name is the letter O. │ │ │ Numbers in nat can be denoted using a decimal notation; │ │ │ e.g. 3%nat abbreviates S (S (S O)) │ │ │ @@ -293,15 +293,15 @@ │ │ │ Register O as num.nat.O.
│ │ │ Register S as num.nat.S.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Container datatypes

│ │ │ +

Container datatypes

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ @@ -498,15 +498,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The comparison datatype

│ │ │ +

The comparison datatype

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Inductive comparison : Set :=
│ │ │   | Eq : comparison
│ │ │ @@ -616,15 +616,15 @@ │ │ │ Lemma CompSpec2Type : forall A (eq lt:A->A->Prop) x y c,
│ │ │  CompSpec eq lt x y c -> CompSpecT eq lt x y c.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Misc Other Datatypes

│ │ │ +

Misc Other Datatypes

│ │ │ │ │ │
│ │ │ │ │ │ identity A a is the family of datatypes on A whose sole non-empty │ │ │ member is the singleton datatype identity A a a whose │ │ │ sole inhabitant is denoted identity_refl A a │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Decimal.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decimal numbers

│ │ │ +

Decimal numbers

│ │ │ │ │ │
│ │ │ │ │ │ These numbers coded in base 10 will be used for parsing and printing │ │ │ other Coq numeral datatypes in an human-readable way. │ │ │ See the Number Notation command. │ │ │ We represent numbers in base 10 as lists of decimal digits, │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Hexadecimal.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Hexadecimal numbers

│ │ │ +

Hexadecimal numbers

│ │ │ │ │ │
│ │ │ │ │ │ These numbers coded in base 16 will be used for parsing and printing │ │ │ other Coq numeral datatypes in an human-readable way. │ │ │ See the Number Notation command. │ │ │ We represent numbers in base 16 as lists of hexadecimal digits, │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Logic.html │ │ │ @@ -158,33139 +158,33139 @@ │ │ │ 000009d0: 733d 2269 6422 2074 6974 6c65 3d22 7661 s="id" title="va │ │ │ 000009e0: 7222 3e42 3c2f 7370 616e 3e29 203a 203c r">B) : < │ │ │ 000009f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ 00000a00: 7469 746c 653d 2276 6172 223e 7479 7065 title="var">type │ │ │ 00000a10: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope...
.
..
.

Pro │ │ │ -00000a70: 706f 7369 7469 6f6e 616c 2063 6f6e 6e65 positional conne │ │ │ -00000a80: 6374 6976 6573 3c2f 6831 3e0a 0a3c 6469 ctives

..
.. True< │ │ │ -00000af0: 2f73 7061 6e3e 2069 7320 7468 6520 616c /span> is the al │ │ │ -00000b00: 7761 7973 2074 7275 6520 7072 6f70 6f73 ways true propos │ │ │ -00000b10: 6974 696f 6e20 0a3c 2f64 6976 3e0a 3c64 ition .
. │ │ │ -00000b30: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Inducti │ │ │ -00000b60: 7665 3c2f 7370 616e 3e20 3c61 2069 643d ve │ │ │ -00000c00: 3c73 7061 6e20 6964 3d22 5472 7565 5f72 < │ │ │ -00000c20: 7370 616e 2069 643d 2254 7275 655f 7369 span id="True_si │ │ │ -00000c30: 6e64 2220 636c 6173 733d 2269 6422 3e54 nd" class="id">T │ │ │ -00000c40: 7275 653c 2f73 7061 6e3e 3c2f 7370 616e rue< │ │ │ -00000c60: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ -00000c90: 6f70 3c2f 7370 616e 3e20 3a3d 3c62 722f op :=
.   │ │ │ -00000cd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 I : True.
. │ │ │ -00000d70: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Register │ │ │ -00000da0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c True │ │ │ -00000dd0: 203c 7370 616e 2063 6c61 7373 3d22 6964 as core.Tr │ │ │ -00000e20: 7565 2e74 7970 653c 2f73 7061 6e3e 2e3c ue.type.< │ │ │ -00000e30: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Register I as< │ │ │ -00000eb0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> core.True.I< │ │ │ -00000ee0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...
..
.False │ │ │ -00000f50: 3c2f 7370 616e 3e20 6973 2074 6865 2061 is the a │ │ │ -00000f60: 6c77 6179 7320 6661 6c73 6520 7072 6f70 lways false prop │ │ │ -00000f70: 6f73 6974 696f 6e20 0a3c 2f64 6976 3e0a osition .
. │ │ │ -00000f80: 3c64 6976 2063 6c61 7373 3d22 636f 6465
.Inductive < │ │ │ -00000ff0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00001000: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00001010: 6e2c 2069 6e64 7563 7469 7665 223e 3c73 n, inductive">< │ │ │ -00001040: 7370 616e 2069 643d 2246 616c 7365 5f69 span id="False_i │ │ │ -00001050: 6e64 2220 636c 6173 733d 2269 6422 3e3c nd" class="id">< │ │ │ -00001060: 7370 616e 2069 643d 2246 616c 7365 5f72 span id="False_r │ │ │ -00001070: 6563 2220 636c 6173 733d 2269 6422 3e3c ec" class="id">< │ │ │ -00001080: 7370 616e 2069 643d 2246 616c 7365 5f73 span id="False_s │ │ │ -00001090: 696e 6422 2063 6c61 7373 3d22 6964 223e ind" class="id"> │ │ │ -000010a0: 4661 6c73 653c 2f73 7061 6e3e 3c2f 7370 False : < │ │ │ -000010d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000010e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000010f0: 5072 6f70 3c2f 7370 616e 3e20 3a3d 2e3c Prop :=.< │ │ │ -00001100: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Reg │ │ │ -00001130: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister False< │ │ │ -00001160: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as c │ │ │ -000011b0: 6f72 652e 4661 6c73 652e 7479 7065 3c2f ore.False.type.
..
.
..
.not A, writ │ │ │ -00001280: 7465 6e20 3c73 7061 6e20 636c 6173 733d ten ~A, is t │ │ │ -000012d0: 6865 206e 6567 6174 696f 6e20 6f66 203c he negation of < │ │ │ -000012e0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -000012f0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A .
.. │ │ │ -00001340: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition not │ │ │ -000013c0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (A: │ │ │ -00001420: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop) := │ │ │ -00001450: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -000014b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Fal │ │ │ -00001580: 7365 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 se...
.Nota │ │ │ -000015c0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion &q │ │ │ -00001650: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e7e uot;
~ │ │ │ -00001660: 2078 2220 3a3d 2028 3c61 2063 6c61 7373 x" := (not< │ │ │ -000016c0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> x │ │ │ -000016f0: 2920 3a20 3c73 7061 6e20 636c 6173 733d ) : type_scope.
..
. │ │ │ -00001730: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ -00001760: 203c 7370 616e 2063 6c61 7373 3d22 6964 no │ │ │ -00001780: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t as core.not.type.
..
.
..
.Neg │ │ │ -00001810: 6174 696f 6e20 6f66 2061 2074 7970 6520 ation of a type │ │ │ -00001820: 696e 203c 7370 616e 2063 6c61 7373 3d22 in Typ │ │ │ -00001860: 653c 2f73 7061 6e3e 3c2f 7370 616e 3e20 e │ │ │ -00001870: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
..
.Create │ │ │ -00001b10: 2074 6865 2022 636f 7265 2220 6869 6e74 the "core" hint │ │ │ -00001b20: 2064 6174 6162 6173 652c 2061 6e64 2073 database, and s │ │ │ -00001b30: 6574 2069 7473 2074 7261 6e73 7061 7265 et its transpare │ │ │ -00001b40: 6e74 2073 7461 7465 2066 6f72 0a20 2076 nt state for. v │ │ │ -00001b50: 6172 6961 626c 6573 2061 6e64 2063 6f6e ariables and con │ │ │ -00001b60: 7374 616e 7473 2065 7870 6c69 6369 746c stants explicitl │ │ │ -00001b70: 792e 200a 3c2f 6469 763e 0a3c 6469 7620 y. .
.
│ │ │ -00001f10: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.and A B │ │ │ -00001ff0: 3c2f 7370 616e 3e2c 2077 7269 7474 656e , written │ │ │ -00002000: 203c 7370 616e 2063 6c61 7373 3d22 696e A< │ │ │ -00002040: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -00002060: 2f5c 3c2f 7370 616e 3e20 3c73 7061 6e20 /\ │ │ │ -000020a0: 423c 2f73 7061 6e3e 3c2f 7370 616e 3e2c B, │ │ │ -000020b0: 2069 7320 7468 6520 636f 6e6a 756e 6374 is the conjunct │ │ │ -000020c0: 696f 6e20 6f66 203c 7370 616e 2063 6c61 ion of │ │ │ -000020e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A and │ │ │ -00002110: 203c 7370 616e 2063 6c61 7373 3d22 696e B< │ │ │ -00002150: 2f73 7061 6e3e 0a0a 3c64 6976 2063 6c61 /span>..
│ │ │ -00002170: 3c2f 6469 763e 0a0a 2020 2020 2020 3c73
.. conj< │ │ │ -000021c0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -000021e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p q
is a proof of │ │ │ -00002260: 203c 7370 616e 2063 6c61 7373 3d22 696e A< │ │ │ -000022a0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -000022c0: 2f5c 3c2f 7370 616e 3e20 3c73 7061 6e20 /\ │ │ │ -00002300: 423c 2f73 7061 6e3e 3c2f 7370 616e 3e20 B │ │ │ -00002310: 6173 2073 6f6f 6e20 6173 0a20 2020 2020 as soon as. │ │ │ -00002320: 203c 7370 616e 2063 6c61 7373 3d22 696e p< │ │ │ -00002360: 2f73 7061 6e3e 2069 7320 6120 7072 6f6f /span> is a proo │ │ │ -00002370: 6620 6f66 203c 7370 616e 2063 6c61 7373 f of A and < │ │ │ -000023c0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -000023d0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">q a proof of │ │ │ -00002410: 3c73 7061 6e20 636c 6173 733d 2269 6e6c B..
< │ │ │ -00002470: 2f64 6976 3e0a 0a20 2020 2020 203c 7370 /div>.. proj1< │ │ │ -000024c0: 2f73 7061 6e3e 2061 6e64 203c 7370 616e /span> and proj2 are first a │ │ │ -00002520: 6e64 2073 6563 6f6e 6420 7072 6f6a 6563 nd second projec │ │ │ -00002530: 7469 6f6e 7320 6f66 2061 2063 6f6e 6a75 tions of a conju │ │ │ -00002540: 6e63 7469 6f6e 200a 3c2f 6469 763e 0a3c nction .
.< │ │ │ -00002550: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -00002560: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Induct │ │ │ -00002590: 6976 653c 2f73 7061 6e3e 203c 6120 6964 ive
│ │ │ -000025f0: 3c73 7061 6e20 6964 3d22 616e 645f 7265 < │ │ │ -00002610: 7370 616e 2069 643d 2261 6e64 5f69 6e64 span id="and_ind │ │ │ -00002620: 2220 636c 6173 733d 2269 6422 3e3c 7370 " class="id">and
│ │ │ -00002690: 3c2f 613e 2028 3c61 2069 643d 2241 3a37 (A < │ │ │ -00002710: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00002720: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ -00002730: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Pro │ │ │ -00002760: 703c 2f73 7061 6e3e 2920 3a20 3c73 7061 p) : Pro │ │ │ -00002790: 703c 2f73 7061 6e3e 203a 3d3c 6272 2f3e p :=
│ │ │ -000027a0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 6120 .  conj : A< │ │ │ -00002860: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -000028b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> B -> A
/\ B │ │ │ -00002af0: 3c2f 613e 3c62 722f 3e0a 3c62 722f 3e0a
.
. │ │ │ -00002b00: 3c73 7061 6e20 636c 6173 733d 2269 6422 where │ │ │ -00002bb0: 2671 756f 743b 3c2f 7370 616e 3e3c 2f61 "A /\ B" := ( │ │ │ -00002c00: 3c73 7061 6e20 636c 6173 733d 2269 6422 and A │ │ │ -00002c50: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c B) : │ │ │ -00002c80: 203c 7370 616e 2063 6c61 7373 3d22 6964 ty │ │ │ -00002ca0: 7065 5f73 636f 7065 3c2f 7370 616e 3e2e pe_scope. │ │ │ -00002cb0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Re │ │ │ -00002ce0: 6769 7374 6572 3c2f 7370 616e 3e20 3c73 gister and as │ │ │ -00002d40: 203c 7370 616e 2063 6c61 7373 3d22 6964 co │ │ │ -00002d60: 7265 2e61 6e64 2e74 7970 653c 2f73 7061 re.and.type.
.Regist │ │ │ -00002da0: 6572 3c2f 7370 616e 3e20 3c73 7061 6e20 er conj as core. │ │ │ -00002e20: 616e 642e 636f 6e6a 3c2f 7370 616e 3e2e and.conj. │ │ │ -00002e30: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Se │ │ │ -00002e60: 6374 696f 6e3c 2f73 7061 6e3e 203c 6120 ction
Conjunction< │ │ │ -00002ed0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00002ee0: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -00002ef0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Variables │ │ │ -00002f60: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00002f90: 6120 6964 3d22 436f 6e6a 756e 6374 696f a id="Conjunctio │ │ │ -00002fa0: 6e2e 4222 2063 6c61 7373 3d22 6964 7265 n.B" class="idre │ │ │ -00002fb0: 6622 2068 7265 663d 2223 436f 6e6a 756e f" href="#Conjun │ │ │ -00002fc0: 6374 696f 6e2e 4222 3e3c 7370 616e 2063 ction.B">B
: Prop< │ │ │ -00003020: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...   │ │ │ -00003040: 3c73 7061 6e20 636c 6173 733d 2269 6422 Theorem │ │ │ -00003070: 3c61 2069 643d 2270 726f 6a31 2220 636c proj1 : A │ │ │ -00003130: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ B< │ │ │ -00003210: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00003260: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> A │ │ │ -000032f0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f
.
..
. & │ │ │ -00003310: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Theorem
< │ │ │ -00003370: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00003380: 7469 746c 653d 226c 656d 6d61 223e 7072 title="lemma">pr │ │ │ -00003390: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203a oj2 : │ │ │ -000033a0: 203c 6120 636c 6173 733d 2269 6472 6566 A /\ B │ │ │ -000034f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> B │ │ │ -000035d0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.E │ │ │ -00003600: 6e64 3c2f 7370 616e 3e20 3c61 2063 6c61 nd Conjunction.
. │ │ │ -00003680: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ -00003690: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -000036a0: 0a3c 7370 616e 2063 6c61 7373 3d22 696e .or │ │ │ -000036e0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c A< │ │ │ -00003720: 2f73 7061 6e3e 3c2f 7370 616e 3e20 3c73 /span> B, written A \/ < │ │ │ -00003800: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00003810: 7469 746c 653d 2276 6172 223e 423c 2f73 title="var">B, is │ │ │ -00003830: 7468 6520 6469 736a 756e 6374 696f 6e20 the disjunction │ │ │ -00003840: 6f66 203c 7370 616e 2063 6c61 7373 3d22 of A and B .
.
..< │ │ │ -000038f0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Inductive< │ │ │ -00003920: 2f73 7061 6e3e 203c 6120 6964 3d22 6f72 /span> or │ │ │ -000039d0: 2028 3c61 2069 643d 2241 3a31 3522 2063 (A < │ │ │ -00003a50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00003a60: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ -00003a70: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Pro │ │ │ -00003aa0: 703c 2f73 7061 6e3e 2920 3a20 3c73 7061 p) : Pro │ │ │ -00003ad0: 703c 2f73 7061 6e3e 203a 3d3c 6272 2f3e p :=
│ │ │ -00003ae0: 0a26 6e62 7370 3b26 6e62 7370 3b7c 203c .  | < │ │ │ -00003af0: 6120 6964 3d22 6f72 5f69 6e74 726f 6c22 a id="or_introl" │ │ │ -00003b00: 2063 6c61 7373 3d22 6964 7265 6622 2068 class="idref" h │ │ │ -00003b10: 7265 663d 2223 6f72 5f69 6e74 726f 6c22 ref="#or_introl" │ │ │ -00003b20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >or_introl< │ │ │ -00003b50: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : │ │ │ -00003bb0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ -00003c30: 3c2f 613e 203c 6120 636c 6173 733d 2269 A │ │ │ -00003c90: 3c2f 613e 203c 6120 636c 6173 733d 2269 \/ B
. &nb │ │ │ -00003d80: 7370 3b7c 203c 6120 6964 3d22 6f72 5f69 sp;| or_i │ │ │ -00003de0: 6e74 726f 723c 2f73 7061 6e3e 3c2f 613e ntror │ │ │ -00003df0: 203a 203c 6120 636c 6173 733d 2269 6472 : B ->< │ │ │ -00003ec0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ -00003f20: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> \/ B
.
.where │ │ │ -00004040: 203c 6120 6964 3d22 6630 3331 6665 3139 " │ │ │ -000040d0: 3c2f 613e 4120 5c2f 2042 2220 3a3d 2028 A \/ B" := ( │ │ │ -000040e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 or │ │ │ -00004160: 413c 2f73 7061 6e3e 203c 7370 616e 2063 A B) │ │ │ -00004190: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : t │ │ │ -000041b0: 7970 655f 7363 6f70 653c 2f73 7061 6e3e ype_scope │ │ │ -000041c0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.A │ │ │ -000041f0: 7267 756d 656e 7473 3c2f 7370 616e 3e20 rguments │ │ │ -00004200: 3c61 2063 6c61 7373 3d22 6964 7265 6622
or_in │ │ │ -00004260: 7472 6f6c 3c2f 7370 616e 3e3c 2f61 3e20 trol │ │ │ -00004270: 5b3c 7370 616e 2063 6c61 7373 3d22 6964 [A< │ │ │ -00004290: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> B] _, [A] B
│ │ │ -00004350: 5f3c 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c _.
.< │ │ │ -00004360: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00004370: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00004380: 4172 6775 6d65 6e74 733c 2f73 7061 6e3e Arguments │ │ │ -00004390: 203c 6120 636c 6173 733d 2269 6472 6566 or_i │ │ │ -000043f0: 6e74 726f 723c 2f73 7061 6e3e 3c2f 613e ntror │ │ │ -00004400: 205b 3c73 7061 6e20 636c 6173 733d 2269 [A │ │ │ -00004420: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c B] < │ │ │ -00004450: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00004460: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
, A [B
] _.
. │ │ │ -000044f0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Register │ │ │ -00004520: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c or < │ │ │ -00004550: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00004560: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00004570: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as core.or.t │ │ │ -000045a0: 7970 653c 2f73 7061 6e3e 2e3c 6272 2f3e ype.
│ │ │ -000045b0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -000045c0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.iff │ │ │ -00004650: 413c 2f73 7061 6e3e 3c2f 7370 616e 3e20 A │ │ │ -00004660: 3c73 7061 6e20 636c 6173 733d 2269 6e6c B, written < │ │ │ -000046b0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -000046c0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A &l │ │ │ -00004710: 743b 2d26 6774 3b3c 2f73 7061 6e3e 203c t;-> < │ │ │ -00004720: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00004730: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">B, expresses │ │ │ -00004770: 7468 6520 6571 7569 7661 6c65 6e63 6520 the equivalence │ │ │ -00004780: 6f66 203c 7370 616e 2063 6c61 7373 3d22 of A and B .
.
..< │ │ │ -00004830: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Definition │ │ │ -00004860: 3c2f 7370 616e 3e20 3c61 2069 643d 2269 iff │ │ │ -000048c0: 2028 3c61 2069 643d 2241 3a31 3922 2063 (A < │ │ │ -00004940: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00004950: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ -00004960: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Pro │ │ │ -00004990: 703c 2f73 7061 6e3e 2920 3a3d 203c 6120 p) := (A - │ │ │ -00004ae0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00004af0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B< │ │ │ -00004b50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00004b60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00004b70: 6f67 6963 2e68 746d 6c23 6261 3262 3065 ogic.html#ba2b0e │ │ │ -00004b80: 3439 3264 3262 3436 3735 6130 6163 6633 492d2b4675a0acf3 │ │ │ -00004b90: 6561 3932 6161 6261 6464 223e 3c73 7061 ea92aabadd">)< │ │ │ -00004bc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> /\ (< │ │ │ -00004cc0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B ->< │ │ │ -00004d90: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ -00004df0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>).
..
.Notation &q │ │ │ -00004f30: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e41 uot;A │ │ │ -00004f40: 2026 6c74 3b2d 2667 743b 2042 2220 3a3d <-> B" := │ │ │ -00004f50: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (iff │ │ │ -00004fb0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 A B │ │ │ -00005000: 2920 3a20 3c73 7061 6e20 636c 6173 733d ) : type_scope
.
..
. │ │ │ -00005040: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ -00005070: 203c 7370 616e 2063 6c61 7373 3d22 6964 if │ │ │ -00005090: 663c 2f73 7061 6e3e 203c 7370 616e 2063 f as core.iff.type.
.Reg │ │ │ -00005120: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister
proj1< │ │ │ -00005150: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as c │ │ │ -000051a0: 6f72 652e 6966 662e 7072 6f6a 313c 2f73 ore.iff.proj1
.
.Regi │ │ │ -000051e0: 7374 6572 3c2f 7370 616e 3e20 3c73 7061 ster proj2 as │ │ │ -00005240: 203c 7370 616e 2063 6c61 7373 3d22 6964 co │ │ │ -00005260: 7265 2e69 6666 2e70 726f 6a32 3c2f 7370 re.iff.proj2.
..
│ │ │ -00005280: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Section │ │ │ -000052b0: 203c 6120 6964 3d22 4571 7569 7661 6c65 Equivale │ │ │ -00005310: 6e63 653c 2f73 7061 6e3e 3c2f 613e 2e3c nce.< │ │ │ -00005320: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ -00005350: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem
iff_r │ │ │ -000053b0: 6566 6c3c 2f73 7061 6e3e 3c2f 613e 203a efl : │ │ │ -000053c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -000053f0: 3c61 2069 643d 2241 3a32 3122 2063 6c61 A │ │ │ -00005440: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Prop, A &l │ │ │ -00005540: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> A.
..
. │ │ │ -000055c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Theorem │ │ │ -000055f0: 3c61 2069 643d 2269 6666 5f74 7261 6e73
iff_trans : forall< │ │ │ -00005680: 2f73 7061 6e3e 203c 6120 6964 3d22 413a /span> < │ │ │ -000056b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000056c0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -000056d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 B │ │ │ -00005730: 203c 6120 6964 3d22 433a 3234 2220 636c C:Prop
, (A │ │ │ -000058d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> B) < │ │ │ -00005a20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00005a30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00005a40: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> (B │ │ │ -00005b20: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -00005b90: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ -00005ba0: 3c2f 613e 203c 6120 636c 6173 733d 2269 C │ │ │ -00005c00: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ) - │ │ │ -00005ce0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00005cf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (< │ │ │ -00005d60: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>A &l │ │ │ -00005e30: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> C).
..
.Theorem │ │ │ -00005fa0: 6966 665f 7379 6d3c 2f73 7061 6e3e 3c2f iff_sym : forall A
B:P │ │ │ -000060b0: 726f 703c 2f73 7061 6e3e 2c20 3c61 2063 rop, (< │ │ │ -00006130: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006140: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006150: 6f67 6963 2e68 746d 6c23 413a 3235 223e ogic.html#A:25"> │ │ │ -00006160: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00006190: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000061a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000061b0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -000061c0: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -000061d0: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ -00006200: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00006210: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006220: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006230: 6f67 6963 2e68 746d 6c23 423a 3236 223e ogic.html#B:26"> │ │ │ -00006240: 3c73 7061 6e20 636c 6173 733d 2269 6422 B) -> < │ │ │ -000063a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000063b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000063c0: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ -00006420: 423c 2f73 7061 6e3e 3c2f 613e 203c 6120 B <-> │ │ │ -000064a0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ -00006500: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A). │ │ │ -00006580: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.En │ │ │ -000065b0: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d Equivalence
.
.. │ │ │ -00006630: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Hint Unfold
iff: extcore
.
..
.
..
.Back │ │ │ -00006780: 7761 7264 2064 6972 6563 7469 6f6e 206f ward direction o │ │ │ -00006790: 6620 7468 6520 6571 7569 7661 6c65 6e63 f the equivalenc │ │ │ -000067a0: 6573 2061 626f 7665 2064 6f65 7320 6e6f es above does no │ │ │ -000067b0: 7420 6e65 6564 2061 7373 756d 7074 696f t need assumptio │ │ │ -000067c0: 6e73 200a 3c2f 6469 763e 0a3c 6469 7620 ns .
.
..< │ │ │ -000067e0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Theorem and_iff_comp │ │ │ -00006880: 6174 5f6c 3c2f 7370 616e 3e3c 2f61 3e20 at_l │ │ │ -00006890: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ -000068c0: 203c 6120 6964 3d22 413a 3237 2220 636c A B< │ │ │ -00006960: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> C │ │ │ -000069c0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop,< │ │ │ -000069f0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00006a00: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;( │ │ │ -00006a70: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 B< │ │ │ -00006ad0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ -00006b40: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ -00006b50: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> C< │ │ │ -00006bb0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>) -& │ │ │ -00006c90: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00006ca0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006cb0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006cc0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00006cd0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00006ce0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">(A < │ │ │ -00006dc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00006dd0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00006de0: 3e2f 5c3c 2f73 7061 6e3e 3c2f 613e 203c >/\ < │ │ │ -00006df0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006e00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006e10: 6f67 6963 2e68 746d 6c23 423a 3238 223e ogic.html#B:28"> │ │ │ -00006e20: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ -00006e50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006e60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006e70: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00006e80: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -00006e90: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ -00006ec0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00006ed0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006ee0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006ef0: 6f67 6963 2e68 746d 6c23 413a 3237 223e ogic.html#A:27"> │ │ │ -00006f00: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00006f30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00006f40: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00006f50: 6f67 6963 2e68 746d 6c23 6261 3262 3065 ogic.html#ba2b0e │ │ │ -00006f60: 3439 3264 3262 3436 3735 6130 6163 6633 492d2b4675a0acf3 │ │ │ -00006f70: 6561 3932 6161 6261 6464 223e 3c73 7061 ea92aabadd">/\ │ │ │ -00006fa0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 C │ │ │ -00007000: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00007050: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ -00007080: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ -000070b0: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem and_i │ │ │ -00007120: 6666 5f63 6f6d 7061 745f 723c 2f73 7061 ff_compat_r : forall │ │ │ -00007160: 3c2f 7370 616e 3e20 3c61 2069 643d 2241 │ │ │ -00007190: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000071b0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A B C : Prop,
.&nbs │ │ │ -000072a0: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; ( │ │ │ -00007310: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c
B< │ │ │ -00007370: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -000073f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C< │ │ │ -00007450: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ -000074a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000074b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000074c0: 3e29 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >) -> (B
/\ A < │ │ │ -00007740: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00007750: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00007760: 3e26 6c74 3b2d 2667 743b 3c2f 7370 616e ><-> C /\ A).
..
.Theorem │ │ │ -000079c0: 6f72 5f69 6666 5f63 6f6d 7061 745f 6c3c or_iff_compat_l< │ │ │ -000079d0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ -00007a00: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall A │ │ │ -00007a60: 203c 6120 6964 3d22 423a 3334 2220 636c B C< │ │ │ -00007b00: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ -00007b30: 6f70 3c2f 7370 616e 3e2c 3c62 722f 3e0a op,
. │ │ │ -00007b40: 266e 6273 703b 266e 6273 703b 3c61 2063   (< │ │ │ -00007bc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00007bd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00007be0: 6f67 6963 2e68 746d 6c23 423a 3334 223e ogic.html#B:34"> │ │ │ -00007bf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ -00007c20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00007c30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00007c40: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00007c50: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -00007c60: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ -00007c90: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00007ca0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00007cb0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00007cc0: 6f67 6963 2e68 746d 6c23 433a 3335 223e ogic.html#C:35"> │ │ │ -00007cd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 C) -> < │ │ │ -00007e30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00007e40: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00007e50: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ -00007eb0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A \/ B <-> A \/ C).
. │ │ │ -000081d0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Theorem< │ │ │ -00008200: 2f73 7061 6e3e 203c 6120 6964 3d22 6f72 /span> or_iff_compa │ │ │ -00008270: 745f 723c 2f73 7061 6e3e 3c2f 613e 203a t_r : │ │ │ -00008280: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -000082b0: 3c61 2069 643d 2241 3a33 3622 2063 6c61 A │ │ │ -00008300: 3c2f 613e 203c 6120 6964 3d22 423a 3337 B C : │ │ │ -000083b0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop,.   │ │ │ -000083f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (< │ │ │ -00008460: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B &l │ │ │ -00008530: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> C) -&g │ │ │ -00008680: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (B │ │ │ -00008760: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -000087d0: 5c2f 3c2f 7370 616e 3e3c 2f61 3e20 3c61 \/ < │ │ │ -00008810: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008820: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00008830: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A <-&g │ │ │ -000088b0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ -000088f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008900: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00008910: 3e43 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >C \/< │ │ │ -00008990: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ -000089f0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ -00008a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008a50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00008a60: 3e29 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >)...
.Theo │ │ │ -00008aa0: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem imp_if │ │ │ -00008b10: 665f 636f 6d70 6174 5f6c 3c2f 7370 616e f_compat_l : forall< │ │ │ -00008b50: 2f73 7061 6e3e 203c 6120 6964 3d22 413a /span> < │ │ │ -00008b80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00008b90: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -00008ba0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 B │ │ │ -00008c00: 203c 6120 6964 3d22 433a 3431 2220 636c C : Prop
,
.  │ │ │ -00008c90: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; (< │ │ │ -00008d00: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>B <-> C │ │ │ -00008eb0: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) -> │ │ │ -00008f30: 3c2f 613e 203c 6120 636c 6173 733d 2269 ((< │ │ │ -00009020: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00009030: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00009040: 6f67 6963 2e68 746d 6c23 413a 3339 223e ogic.html#A:39"> │ │ │ -00009050: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00009080: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00009090: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000090a0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -000090b0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -000090c0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> B< │ │ │ -000091a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000091b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000091c0: 3e29 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >) <-&g │ │ │ -00009240: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (A │ │ │ -00009320: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -00009390: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ -000093f0: 433c 2f73 7061 6e3e 3c2f 613e 3c61 2063 C)< │ │ │ -00009470: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>).
...Theorem
imp_iff_compa │ │ │ -00009590: 745f 723c 2f73 7061 6e3e 3c2f 613e 203a t_r : │ │ │ -000095a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -000095d0: 3c61 2069 643d 2241 3a34 3222 2063 6c61 A │ │ │ -00009620: 3c2f 613e 203c 6120 6964 3d22 423a 3433 B C : │ │ │ -000096d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop,.   │ │ │ -00009710: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (< │ │ │ -00009780: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B &l │ │ │ -00009850: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> C) -&g │ │ │ -000099a0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; ((B - │ │ │ -00009b60: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00009b70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A< │ │ │ -00009bd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00009be0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00009bf0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00009c00: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -00009c10: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">) │ │ │ -00009c90: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> │ │ │ -00009d10: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ -00009d70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00009d80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00009d90: 3e43 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >C -> A │ │ │ -00009ee0: 293c 2f73 7061 6e3e 3c2f 613e 3c61 2063 )). │ │ │ -00009f60: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Th │ │ │ -00009f90: 656f 7265 6d3c 2f73 7061 6e3e 203c 6120 eorem not_iff_ │ │ │ -0000a000: 636f 6d70 6174 3c2f 7370 616e 3e3c 2f61 compat : forall A │ │ │ -0000a0c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0000a0e0: 423c 2f73 7061 6e3e 3c2f 613e 203a 203c B : < │ │ │ -0000a0f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000a100: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0000a110: 5072 6f70 3c2f 7370 616e 3e2c 3c62 722f Prop,
.  (A │ │ │ -0000a200: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ -0000a270: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0000a280: 203c 6120 636c 6173 733d 2269 6472 6566 B │ │ │ -0000a2e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 )< │ │ │ -0000a350: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0000a3c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (< │ │ │ -0000a440: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000a450: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000a460: 6f67 6963 2e68 746d 6c23 3633 6136 3832 ogic.html#63a682 │ │ │ -0000a470: 3835 6338 3164 6238 6639 6263 3435 3632 85c81db8f9bc4562 │ │ │ -0000a480: 3333 6262 3965 6431 3831 223e 3c73 7061 33bb9ed181">~< │ │ │ -0000a4b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ -0000a510: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -0000a590: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> ~B)
.
.. │ │ │ -0000a6f0: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ -0000a710: 536f 6d65 2065 7175 6976 616c 656e 6365 Some equivalence │ │ │ -0000a720: 7320 0a3c 2f64 6976 3e0a 3c64 6976 2063 s .
.
...Theorem neg_false : for │ │ │ -0000a800: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all A │ │ │ -0000a860: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop, │ │ │ -0000a890: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ~ │ │ │ -0000a900: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 A │ │ │ -0000a960: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ -0000a9e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (< │ │ │ -0000aa60: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>A &l │ │ │ -0000ab30: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> False). │ │ │ -0000ac20: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Th │ │ │ -0000ac50: 656f 7265 6d3c 2f73 7061 6e3e 203c 6120 eorem and_cancel_l │ │ │ -0000acc0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -0000acf0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall A B < │ │ │ -0000add0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000ade0: 7469 746c 653d 2262 696e 6465 7222 3e43 title="binder">C │ │ │ -0000adf0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -0000ae20: 726f 703c 2f73 7061 6e3e 2c3c 6272 2f3e rop,
│ │ │ -0000ae30: 0a26 6e62 7370 3b26 6e62 7370 3b3c 6120 .  ( │ │ │ -0000aeb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -0000af10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->
A)< │ │ │ -0000b050: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0000b0a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> (C -&g │ │ │ -0000b210: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ -0000b250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000b260: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0000b270: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A) │ │ │ -0000b2f0: 203c 6120 636c 6173 733d 2269 6472 6566 -> │ │ │ -0000b3d0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 ((< │ │ │ -0000b450: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>A │ │ │ -0000b500: 3c73 7061 6e20 636c 6173 733d 2269 6422 /\ │ │ │ -0000b530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -0000b590: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ -0000b600: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0000b610: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -0000b670: 3c61 2063 6c61 7373 3d22 6964 7265 6622 / │ │ │ -0000b6e0: 5c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 \ │ │ │ -0000b740: 433c 2f73 7061 6e3e 3c2f 613e 3c61 2063 C)< │ │ │ -0000b7c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ -0000b830: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ -0000b840: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ( │ │ │ -0000b8b0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B< │ │ │ -0000b910: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -0000b990: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C< │ │ │ -0000b9f0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>)) │ │ │ -0000bae0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Theorem and_can │ │ │ -0000bb80: 6365 6c5f 723c 2f73 7061 6e3e 3c2f 613e cel_r │ │ │ -0000bb90: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall A < │ │ │ -0000bc40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000bc50: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ -0000bc60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 C │ │ │ -0000bcc0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop, │ │ │ -0000bcf0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0000bd00: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;(B │ │ │ -0000bdd0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0000be40: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ -0000bea0: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A) │ │ │ -0000bf20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> ( │ │ │ -0000c000: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c C< │ │ │ -0000c060: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0000c0b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> A) -&g │ │ │ -0000c220: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; ((B /\ │ │ │ -0000c3f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 A │ │ │ -0000c450: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -0000c4c0: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ -0000c4d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 C │ │ │ -0000c530: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ A) <->
( │ │ │ -0000c780: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -0000c7e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ -0000c850: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0000c860: 3c61 2063 6c61 7373 3d22 6964 7265 6622 C< │ │ │ -0000c8c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000c8d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000c8e0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -0000c8f0: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -0000c900: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">)).
. │ │ │ -0000c9b0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Theorem< │ │ │ -0000c9e0: 2f73 7061 6e3e 203c 6120 6964 3d22 616e /span> and_comm : for │ │ │ -0000ca70: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all A │ │ │ -0000cad0: 3c61 2069 643d 2242 3a35 3522 2063 6c61 B │ │ │ -0000cb20: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop, A │ │ │ -0000cbb0: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ B < │ │ │ -0000cd00: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> B < │ │ │ -0000cdc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000cdd0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0000cde0: 3e2f 5c3c 2f73 7061 6e3e 3c2f 613e 203c >/\ < │ │ │ -0000cdf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000ce00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000ce10: 6f67 6963 2e68 746d 6c23 413a 3534 223e ogic.html#A:54"> │ │ │ -0000ce20: 3c73 7061 6e20 636c 6173 733d 2269 6422 A.< │ │ │ -0000ce50: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ -0000ce80: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem
and │ │ │ -0000cee0: 5f61 7373 6f63 3c2f 7370 616e 3e3c 2f61 _assoc : forall A │ │ │ -0000cfa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0000cfc0: 423c 2f73 7061 6e3e 3c2f 613e 203c 6120 B C : Prop │ │ │ -0000d050: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , < │ │ │ -0000d0a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000d0b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0000d0c0: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ -0000d120: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A /\ B) │ │ │ -0000d280: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ C < │ │ │ -0000d3d0: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> A < │ │ │ -0000d490: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000d4a0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0000d4b0: 3e2f 5c3c 2f73 7061 6e3e 3c2f 613e 203c >/\ < │ │ │ -0000d4c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000d4d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000d4e0: 6f67 6963 2e68 746d 6c23 423a 3537 223e ogic.html#B:57"> │ │ │ -0000d4f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ -0000d520: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000d530: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000d540: 6f67 6963 2e68 746d 6c23 6261 3262 3065 ogic.html#ba2b0e │ │ │ -0000d550: 3439 3264 3262 3436 3735 6130 6163 6633 492d2b4675a0acf3 │ │ │ -0000d560: 6561 3932 6161 6261 6464 223e 3c73 7061 ea92aabadd">/\ │ │ │ -0000d590: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 C │ │ │ -0000d5f0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Theore │ │ │ -0000d630: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m < │ │ │ -0000d670: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000d680: 7469 746c 653d 226c 656d 6d61 223e 6f72 title="lemma">or │ │ │ -0000d690: 5f63 616e 6365 6c5f 6c3c 2f73 7061 6e3e _cancel_l │ │ │ -0000d6a0: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall A< │ │ │ -0000d720: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B │ │ │ -0000d780: 3c61 2069 643d 2243 3a36 3122 2063 6c61 C │ │ │ -0000d7d0: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop,
.  │ │ │ -0000d810: 266e 6273 703b 3c61 2063 6c61 7373 3d22  (B
│ │ │ -0000d950: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e ->
│ │ │ -0000d960: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0000d9d0: 7e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ~ │ │ │ -0000da30: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A) │ │ │ -0000dab0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> ( │ │ │ -0000db90: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c C< │ │ │ -0000dbf0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0000dc40: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> │ │ │ -0000dcc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ~ < │ │ │ -0000dcf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000dd00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000dd10: 6f67 6963 2e68 746d 6c23 413a 3539 223e ogic.html#A:59"> │ │ │ -0000dd20: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) -> < │ │ │ -0000de80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000de90: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0000dea0: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >(( │ │ │ -0000df20: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 A< │ │ │ -0000df80: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> \/ │ │ │ -0000e000: 203c 6120 636c 6173 733d 2269 6472 6566 B │ │ │ -0000e060: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ -0000e0d0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0000e0e0: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -0000e140: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0000e1b0: 5c2f 3c2f 7370 616e 3e3c 2f61 3e20 3c61 \/ < │ │ │ -0000e1f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000e200: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0000e210: 3e43 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >C) │ │ │ -0000e290: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -0000e300: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ -0000e310: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -0000e380: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (B │ │ │ -0000e3e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ -0000e460: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 C │ │ │ -0000e4c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c )).
.The │ │ │ -0000e5e0: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem or_cancel_r : foral │ │ │ -0000e680: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l A B C : Prop< │ │ │ -0000e7b0: 2f73 7061 6e3e 2c3c 6272 2f3e 0a26 6e62 /span>,
.&nb │ │ │ -0000e7c0: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp;  │ │ │ -0000e830: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (
B │ │ │ -0000e890: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0000e910: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ~ │ │ │ -0000e990: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A< │ │ │ -0000e9f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000ea00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000ea10: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -0000ea20: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -0000ea30: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">) ->< │ │ │ -0000ead0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0000eb20: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ -0000eb80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000eb90: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0000eba0: 3e43 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >C -> ~ A) │ │ │ -0000ed70: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0000ede0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; ( │ │ │ -0000ee60: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (B
\/< │ │ │ -0000efb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A< │ │ │ -0000f010: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ -0000f080: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ -0000f090: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> C< │ │ │ -0000f0f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> \/ │ │ │ -0000f170: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -0000f1d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ) <-> (< │ │ │ -0000f340: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000f350: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000f360: 6f67 6963 2e68 746d 6c23 423a 3633 223e ogic.html#B:63"> │ │ │ -0000f370: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ -0000f3a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000f3b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000f3c0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -0000f3d0: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -0000f3e0: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ -0000f410: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -0000f420: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0000f430: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0000f440: 6f67 6963 2e68 746d 6c23 433a 3634 223e ogic.html#C:64"> │ │ │ -0000f450: 3c73 7061 6e20 636c 6173 733d 2269 6422 C)).
.< │ │ │ -0000f570: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000f580: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0000f590: 5468 656f 7265 6d3c 2f73 7061 6e3e 203c Theorem < │ │ │ -0000f5a0: 6120 6964 3d22 6f72 5f63 6f6d 6d22 2063 a id="or_comm" c │ │ │ -0000f5b0: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ -0000f5c0: 663d 2223 6f72 5f63 6f6d 6d22 3e3c 7370 f="#or_comm">or_c │ │ │ -0000f5f0: 6f6d 6d3c 2f73 7061 6e3e 3c2f 613e 203a omm : │ │ │ -0000f600: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -0000f630: 3c61 2069 643d 2241 3a36 3522 2063 6c61 A │ │ │ -0000f680: 3c2f 613e 203c 6120 6964 3d22 423a 3636 B : Pro │ │ │ -0000f700: 703c 2f73 7061 6e3e 2c20 3c61 2063 6c61 p, (A │ │ │ -0000f7e0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0000f850: 5c2f 3c2f 7370 616e 3e3c 2f61 3e20 3c61 \/ < │ │ │ -0000f890: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0000f8a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0000f8b0: 3e42 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >B) │ │ │ -0000f930: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -0000f9a0: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ -0000f9b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ -0000fa20: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (B │ │ │ -0000fa80: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 \/ A). │ │ │ -0000fbe0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Th │ │ │ -0000fc10: 656f 7265 6d3c 2f73 7061 6e3e 203c 6120 eorem or_a │ │ │ -0000fc70: 7373 6f63 3c2f 7370 616e 3e3c 2f61 3e20 ssoc │ │ │ -0000fc80: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ -0000fcb0: 203c 6120 6964 3d22 413a 3637 2220 636c A B< │ │ │ -0000fd50: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> C │ │ │ -0000fdb0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop, │ │ │ -0000fde0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ( │ │ │ -0000fe50: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c A< │ │ │ -0000feb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> \/ B
) │ │ │ -00010060: 3c73 7061 6e20 636c 6173 733d 2269 6422 \/ │ │ │ -00010090: 3c61 2063 6c61 7373 3d22 6964 7265 6622 C │ │ │ -000100f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ -00010160: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00010170: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -000101d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 \ │ │ │ -00010240: 2f3c 2f73 7061 6e3e 3c2f 613e 203c 6120 / │ │ │ -000102a0: 423c 2f73 7061 6e3e 3c2f 613e 203c 6120 B \/ C.
. │ │ │ -00010390: 3c73 7061 6e20 636c 6173 733d 2269 6422 Lemma iff_a │ │ │ -00010410: 6e64 3c2f 7370 616e 3e3c 2f61 3e20 3a20 nd : │ │ │ -00010420: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -00010450: 6120 6964 3d22 413a 3730 2220 636c 6173 a id="A:70" clas │ │ │ -00010460: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00010470: 2341 3a37 3022 3e3c 7370 616e 2063 6c61 #A:70">A< │ │ │ -000104a0: 2f61 3e20 3c61 2069 643d 2242 3a37 3122 /a> B
: Prop │ │ │ -00010520: 3c2f 7370 616e 3e2c 203c 6120 636c 6173 , │ │ │ -00010590: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (A │ │ │ -000105f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ -00010670: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 B │ │ │ -000106d0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00010720: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ -00010750: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00010760: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00010770: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00010780: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00010790: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->
(A -> B) │ │ │ -000109f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ < │ │ │ -00010ac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010ad0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00010ae0: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ -00010b40: 423c 2f73 7061 6e3e 3c2f 613e 203c 6120 B -> │ │ │ -00010bc0: 3c2f 613e 203c 6120 636c 6173 733d 2269 A │ │ │ -00010c20: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ). │ │ │ -00010ca0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Le │ │ │ -00010cd0: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma < │ │ │ -00010d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010d20: 7469 746c 653d 226c 656d 6d61 223e 6966 title="lemma">if │ │ │ -00010d30: 665f 746f 5f61 6e64 3c2f 7370 616e 3e3c f_to_and< │ │ │ -00010d40: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : forall
A B : │ │ │ -00010e20: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop, < │ │ │ -00010e50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00010e60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00010e70: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00010e80: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -00010e90: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">(A < │ │ │ -00010f70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00010f80: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00010f90: 3e26 6c74 3b2d 2667 743b 3c2f 7370 616e ><-> B │ │ │ -00011070: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) <-> │ │ │ -000110f0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; (A - │ │ │ -00011240: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00011250: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B< │ │ │ -000112b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000112c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000112d0: 6f67 6963 2e68 746d 6c23 6261 3262 3065 ogic.html#ba2b0e │ │ │ -000112e0: 3439 3264 3262 3436 3735 6130 6163 6633 492d2b4675a0acf3 │ │ │ -000112f0: 6561 3932 6161 6261 6464 223e 3c73 7061 ea92aabadd">)< │ │ │ -00011320: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> /\ (< │ │ │ -00011420: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B ->< │ │ │ -000114f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ -00011550: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>).
..
.
..
.

First-order │ │ │ -00011630: 2071 7561 6e74 6966 6965 7273 3c2f 6831 quantifiers

..
.. ex P │ │ │ -000116f0: 2c20 6f72 2073 696d 706c 7920 3c73 7061 , or simply exists │ │ │ -00011780: 783c 2f73 7061 6e3e 2c3c 2f73 7061 6e3e x, │ │ │ -00011790: 203c 7370 616e 2063 6c61 7373 3d22 696e P< │ │ │ -000117d0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -000117f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x, or │ │ │ -00011820: 2061 6c73 6f20 3c73 7061 6e20 636c 6173 also < │ │ │ -00011840: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00011850: 7469 746c 653d 2274 6163 7469 6322 3e65 title="tactic">e │ │ │ -00011860: 7869 7374 733c 2f73 7061 6e3e 3c2f 7370 xists x: │ │ │ -000118d0: 413c 2f73 7061 6e3e 2c3c 2f73 7061 6e3e A, │ │ │ -000118e0: 203c 7370 616e 2063 6c61 7373 3d22 696e P< │ │ │ -00011920: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -00011940: 3c73 7061 6e20 636c 6173 733d 2269 6422 x,. │ │ │ -00011970: 2020 6578 7072 6573 7365 7320 7468 6520 expresses the │ │ │ -00011980: 6578 6973 7465 6e63 6520 6f66 2061 6e20 existence of an │ │ │ -00011990: 3c73 7061 6e20 636c 6173 733d 2269 6e6c x of some ty │ │ │ -000119e0: 7065 203c 7370 616e 2063 6c61 7373 3d22 pe A in Set │ │ │ -00011a70: 3c2f 7370 616e 3e20 7768 6963 680a 2020 which. │ │ │ -00011a80: 2020 7361 7469 7366 6965 7320 7468 6520 satisfies the │ │ │ -00011a90: 7072 6564 6963 6174 6520 3c73 7061 6e20 predicate │ │ │ -00011ad0: 503c 2f73 7061 6e3e 3c2f 7370 616e 3e2e P. │ │ │ -00011ae0: 2020 5468 6973 2069 7320 6578 6973 7465 This is existe │ │ │ -00011af0: 6e74 6961 6c20 7175 616e 7469 6669 6361 ntial quantifica │ │ │ -00011b00: 7469 6f6e 2e0a 0a3c 6469 7620 636c 6173 tion...
< │ │ │ -00011b20: 2f64 6976 3e0a 0a20 2020 203c 7370 616e /div>.. ex2 P Q │ │ │ -00011bf0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2c20 , │ │ │ -00011c00: 6f72 2073 696d 706c 7920 3c73 7061 6e20 or simply │ │ │ -00011c40: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 < │ │ │ -00011c70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00011c80: 7469 746c 653d 2276 6172 223e 783c 2f73 title="var">x, P x & < │ │ │ -00011d50: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00011d60: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">Q x, or a │ │ │ -00011de0: 6c73 6f0a 2020 2020 3c73 7061 6e20 636c lso. ex │ │ │ -00011e20: 6973 7473 323c 2f73 7061 6e3e 3c2f 7370 ists2 x: │ │ │ -00011e90: 413c 2f73 7061 6e3e 2c3c 2f73 7061 6e3e A, │ │ │ -00011ea0: 203c 7370 616e 2063 6c61 7373 3d22 696e P< │ │ │ -00011ee0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -00011f00: 3c73 7061 6e20 636c 6173 733d 2269 6422 x & Q x │ │ │ -00011fd0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2c20 , │ │ │ -00011fe0: 6578 7072 6573 7365 7320 7468 6520 6578 expresses the ex │ │ │ -00011ff0: 6973 7465 6e63 6520 6f66 2061 6e20 3c73 istence of an x of. type │ │ │ -00012050: 3c73 7061 6e20 636c 6173 733d 2269 6e6c A which sati │ │ │ -000120a0: 7366 6965 7320 626f 7468 2070 7265 6469 sfies both predi │ │ │ -000120b0: 6361 7465 7320 3c73 7061 6e20 636c 6173 cates < │ │ │ -000120d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000120e0: 7469 746c 653d 2276 6172 223e 503c 2f73 title="var">P and │ │ │ -00012100: 3c73 7061 6e20 636c 6173 733d 2269 6e6c Q...
│ │ │ -00012160: 3c2f 6469 763e 0a0a 2020 2020 556e 6976
.. Univ │ │ │ -00012170: 6572 7361 6c20 7175 616e 7469 6669 6361 ersal quantifica │ │ │ -00012180: 7469 6f6e 2069 7320 7072 696d 6974 6976 tion is primitiv │ │ │ -00012190: 656c 7920 7772 6974 7465 6e20 3c73 7061 ely written forall x:A, │ │ │ -00012250: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c Q< │ │ │ -00012290: 2f73 7061 6e3e 3c2f 7370 616e 3e2e 2042 /span>. B │ │ │ -000122a0: 790a 2020 2020 7379 6d6d 6574 7279 2077 y. symmetry w │ │ │ -000122b0: 6974 6820 6578 6973 7465 6e74 6961 6c20 ith existential │ │ │ -000122c0: 7175 616e 7469 6669 6361 7469 6f6e 2c20 quantification, │ │ │ -000122d0: 7468 6520 636f 6e73 7472 7563 7469 6f6e the construction │ │ │ -000122e0: 203c 7370 616e 2063 6c61 7373 3d22 696e all P │ │ │ -00012360: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 0a20 . │ │ │ -00012370: 2020 2069 7320 7072 6f76 6964 6564 2074 is provided t │ │ │ -00012380: 6f6f 2e0a 0a3c 2f64 6976 3e0a 3c64 6976 oo...
.
.. │ │ │ -000123a0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Inductive │ │ │ -000123d0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 ex< │ │ │ -00012470: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span> (A:Type
) (< │ │ │ -00012530: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00012540: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -00012550: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 :A │ │ │ -000125b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00012630: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00012660: 2920 3a20 3c73 7061 6e20 636c 6173 733d ) : Prop │ │ │ -00012690: 203a 3d3c 6272 2f3e 0a26 6e62 7370 3b26 :=
. & │ │ │ -000126a0: 6e62 7370 3b3c 6120 6964 3d22 6578 5f69 nbsp;
ex_int │ │ │ -00012700: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3a20 ro : │ │ │ -00012710: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -00012740: 6120 6964 3d22 783a 3738 2220 636c 6173 a id="x:78" clas │ │ │ -00012750: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ -00012760: 2378 3a37 3822 3e3c 7370 616e 2063 6c61 #x:78">x< │ │ │ -00012790: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A< │ │ │ -000127f0: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, P │ │ │ -00012850: 3c2f 613e 203c 6120 636c 6173 733d 2269 x │ │ │ -000128b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -00012920: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; < │ │ │ -00012960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00012970: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ -00012980: 223e 6578 3c2f 7370 616e 3e3c 2f61 3e20 ">ex │ │ │ -00012990: 283c 7370 616e 2063 6c61 7373 3d22 6964 (A< │ │ │ -000129b0: 2f73 7061 6e3e 3a3d 3c61 2063 6c61 7373 /span>:=A) P
.
.. │ │ │ -00012a80: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ -00012ab0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> ex a │ │ │ -00012b00: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s core.ex.ty │ │ │ -00012b30: 7065 3c2f 7370 616e 3e2e 3c62 722f 3e0a pe.
. │ │ │ -00012b40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ -00012b70: 203c 7370 616e 2063 6c61 7373 3d22 6964 ex │ │ │ -00012b90: 5f69 6e74 726f 3c2f 7370 616e 3e20 3c73 _intro a │ │ │ -00012bc0: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s core.ex.in │ │ │ -00012bf0: 7472 6f3c 2f73 7061 6e3e 2e3c 6272 2f3e tro.
│ │ │ -00012c00: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Section │ │ │ -00012c30: 3c2f 7370 616e 3e20 3c61 2069 643d 2250 P │ │ │ -00012c90: 726f 6a65 6374 696f 6e73 3c2f 7370 616e rojections.
..
.  < │ │ │ -00012cc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00012cd0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00012ce0: 5661 7269 6162 6c65 733c 2f73 7061 6e3e Variables │ │ │ -00012cf0: 2028 3c61 2069 643d 2250 726f 6a65 6374 (A< │ │ │ -00012d50: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Prop │ │ │ -00012d80: 3c2f 7370 616e 3e29 2028 3c61 2069 643d ) (P:A->Prop).
...   │ │ │ -00012f10: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition ex_proj1< │ │ │ -00012fa0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (x │ │ │ -00013000: 3a3c 6120 636c 6173 733d 2269 6472 6566 : │ │ │ -00013030: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex │ │ │ -00013060: 203c 6120 636c 6173 733d 2269 6472 6566 P) : A :=
.&n │ │ │ -00013140: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00013150: 266e 6273 703b 3c73 7061 6e20 636c 6173  match x< │ │ │ -000131e0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> with │ │ │ -00013210: 203c 6120 636c 6173 733d 2269 6472 6566 ex_in │ │ │ -00013270: 7472 6f3c 2f73 7061 6e3e 3c2f 613e 203c tro < │ │ │ -00013280: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013290: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
a _ │ │ │ -000132f0: 203d 2667 743b 203c 7370 616e 2063 6c61 => a en │ │ │ -00013340: 643c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a d.
.. │ │ │ -00013350: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00013360: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
ex_proj │ │ │ -000133f0: 323c 2f73 7061 6e3e 3c2f 613e 2028 3c61 2 (x:ex P │ │ │ -00013510: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ -00013520: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00013530: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00013540: 6f67 6963 2e68 746d 6c23 5072 6f6a 6563 ogic.html#Projec │ │ │ -00013550: 7469 6f6e 732e 5022 3e3c 7370 616e 2063 tions.P">P (ex_proj1 x) :=
.& │ │ │ -00013660: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00013670: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; match
x │ │ │ -00013700: 3c2f 613e 203c 7370 616e 2063 6c61 7373 with ex_i │ │ │ -00013790: 6e74 726f 3c2f 7370 616e 3e3c 2f61 3e20 ntro │ │ │ -000137a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ b => b e │ │ │ -00013860: 6e64 3c2f 7370 616e 3e2e 3c62 722f 3e0a nd.
. │ │ │ -00013870: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -00013880: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Register ex_proj1 │ │ │ -000138e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 as core.ex │ │ │ -00013930: 2e70 726f 6a31 3c2f 7370 616e 3e2e 3c62 .proj1..   │ │ │ -00013950: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ -00013980: 203c 7370 616e 2063 6c61 7373 3d22 6964 ex │ │ │ -000139a0: 5f70 726f 6a32 3c2f 7370 616e 3e20 3c73 _proj2 a │ │ │ -000139d0: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s core.ex.pr │ │ │ -00013a00: 6f6a 323c 2f73 7061 6e3e 2e3c 6272 2f3e oj2.
│ │ │ -00013a10: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.End Pro │ │ │ -00013aa0: 6a65 6374 696f 6e73 3c2f 7370 616e 3e3c jections< │ │ │ -00013ab0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -00013ac0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Inductive
ex2< │ │ │ -00013b90: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f61 /span> (A:Type
) (< │ │ │ -00013c50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013c60: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -00013c70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 Q │ │ │ -00013cd0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A │ │ │ -00013d30: 203c 6120 636c 6173 733d 2269 6472 6566 ->
Prop) : Prop :=
.&n │ │ │ -00013e10: 6273 703b 266e 6273 703b 3c61 2069 643d bsp; ex_intro2
: forall< │ │ │ -00013eb0: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> < │ │ │ -00013ee0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00013ef0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -00013f00: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 :A │ │ │ -00013f60: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120
, │ │ │ -00013fc0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ -00014020: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x -> │ │ │ -000140a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q │ │ │ -00014100: 3c2f 613e 203c 6120 636c 6173 733d 2269 x │ │ │ -00014160: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -000141d0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ -00014210: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex2 ( │ │ │ -00014260: 413c 2f73 7061 6e3e 3a3d 3c61 2063 6c61 A:=A) P< │ │ │ -00014320: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q< │ │ │ -00014380: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00014390: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -000143a0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.ex2 of a p │ │ │ -00014400: 7265 6469 6361 7465 2063 616e 2062 6520 redicate can be │ │ │ -00014410: 7072 6f6a 6563 7465 6420 746f 2061 6e20 projected to an │ │ │ -00014420: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex< │ │ │ -00014460: 2f73 7061 6e3e 2e0a 0a3c 6469 7620 636c /span>...
│ │ │ -00014480: 203c 2f64 6976 3e0a 0a20 2020 2054 6869
.. Thi │ │ │ -00014490: 7320 616c 6c6f 7773 203c 7370 616e 2063 s allows e │ │ │ -000144d0: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 and │ │ │ -00014520: 6578 5f70 726f 6a32 3c2f 7370 616e 3e3c ex_proj2< │ │ │ -00014530: 2f73 7061 6e3e 2074 6f20 6265 2075 7361 /span> to be usa │ │ │ -00014540: 626c 6520 7769 7468 203c 7370 616e 2063 ble with e │ │ │ -00014580: 7832 3c2f 7370 616e 3e3c 2f73 7061 6e3e x2 │ │ │ -00014590: 2e0a 0a3c 6469 7620 636c 6173 733d 2270 ...
.. We have t │ │ │ -000145c0: 776f 2063 686f 6963 6573 2068 6572 653a wo choices here: │ │ │ -000145d0: 2065 6974 6865 7220 7765 2063 616e 2073 either we can s │ │ │ -000145e0: 6574 2075 7020 7468 6520 6465 6669 6e69 et up the defini │ │ │ -000145f0: 7469 6f6e 2073 6f0a 2020 2020 7468 6174 tion so. that │ │ │ -00014600: 203c 7370 616e 2063 6c61 7373 3d22 696e ex_proj1< │ │ │ -00014640: 2f73 7061 6e3e 3c2f 7370 616e 3e20 6f66 /span> of │ │ │ -00014650: 2061 2063 6f65 7263 6564 203c 7370 616e a coerced X │ │ │ -000146a0: 203c 7370 616e 2063 6c61 7373 3d22 696e : ex2 P │ │ │ -00014750: 203c 7370 616e 2063 6c61 7373 3d22 696e Q< │ │ │ -00014790: 2f73 7061 6e3e 2077 696c 6c20 756e 6966 /span> will unif │ │ │ -000147a0: 7920 7769 7468 203c 7370 616e 2063 6c61 y with │ │ │ -000147c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 let. │ │ │ -00014810: 283c 7370 616e 2063 6c61 7373 3d22 6964 (a< │ │ │ -00014830: 2f73 7061 6e3e 2c3c 2f73 7061 6e3e 203c /span>, < │ │ │ -00014840: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00014850: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">_, < │ │ │ -000148a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000148b0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
) := │ │ │ -000148f0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c X < │ │ │ -00014950: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014960: 7469 746c 653d 2274 6163 7469 6322 3e69 title="tactic">i │ │ │ -00014970: 6e3c 2f73 7061 6e3e 3c2f 7370 616e 3e20 n │ │ │ -00014980: 3c73 7061 6e20 636c 6173 733d 2269 6e6c a by restric │ │ │ -000149d0: 7469 6e67 2074 6865 2066 6972 7374 2061 ting the first a │ │ │ -000149e0: 7267 756d 656e 7420 6f66 203c 7370 616e rgument of ex2 to. be a < │ │ │ -00014a40: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00014a50: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">Prop
, or │ │ │ -00014a90: 7765 2063 616e 2064 6566 696e 6520 6120 we can define a │ │ │ -00014aa0: 6d6f 7265 2067 656e 6572 616c 203c 7370 more general ex_of_ex2 which │ │ │ -00014b00: 0a20 2020 2064 6f65 7320 6e6f 7420 7361 . does not sa │ │ │ -00014b10: 7469 7366 7920 7468 6973 2063 6f6e 7665 tisfy this conve │ │ │ -00014b20: 7273 696f 6e20 7275 6c65 2e20 2057 6520 rsion rule. We │ │ │ -00014b30: 6368 6f6f 7365 2074 6865 2066 6f72 6d65 choose the forme │ │ │ -00014b40: 722c 0a20 2020 2075 6e64 6572 2074 6865 r,. under the │ │ │ -00014b50: 2061 7373 756d 7074 696f 6e20 7468 6174 assumption that │ │ │ -00014b60: 2074 6865 7265 2069 7320 6e6f 2072 6561 there is no rea │ │ │ -00014b70: 736f 6e20 746f 2074 7572 6e20 616e 203c son to turn an < │ │ │ -00014b80: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00014b90: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex2< │ │ │ -00014bc0: 2f73 7061 6e3e 2069 6e74 6f0a 2020 2020 /span> into. │ │ │ -00014bd0: 616e 203c 7370 616e 2063 6c61 7373 3d22 an ex unless │ │ │ -00014c20: 2069 7420 6973 2074 6f20 7072 6f6a 6563 it is to projec │ │ │ -00014c30: 7420 6f75 7420 7468 6520 636f 6d70 6f6e t out the compon │ │ │ -00014c40: 656e 7473 2e20 0a3c 2f64 6976 3e0a 3c64 ents. .
. │ │ │ -00014c60: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Definit │ │ │ -00014c90: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion ex_of_ex2 (< │ │ │ -00014d30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00014d40: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -00014d50: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -00014d80: 726f 703c 2f73 7061 6e3e 2920 283c 6120 rop) (P Q : A │ │ │ -00014f00: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00014f10: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop) ( │ │ │ -00014f40: 3c61 2069 643d 2258 3a39 3622 2063 6c61 X │ │ │ -00014f90: 3c2f 613e 203a 203c 6120 636c 6173 733d : ex2 P
Q
) : ex │ │ │ -00015110: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 P │ │ │ -00015170: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ -00015180: 0a26 6e62 7370 3b26 6e62 7370 3b3a 3d20 .  := │ │ │ -00015190: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_int │ │ │ -000151f0: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ro < │ │ │ -00015230: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00015240: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00015250: 3e50 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >P
.  & │ │ │ -00015270: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00015280: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00015290: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000152a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000152b0: 3b26 6e62 7370 3b28 3c73 7061 6e20 636c ; (let (< │ │ │ -00015310: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00015320: 7469 746c 653d 2262 696e 6465 7222 3e61 title="binder">a │ │ │ -00015330: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 7370 , _, _) := < │ │ │ -000153c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000153d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000153e0: 3e58 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >X in │ │ │ -00015410: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 a)
.& │ │ │ -00015480: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00015490: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000154a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000154b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000154c0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000154d0: 7370 3b28 3c73 7061 6e20 636c 6173 733d sp;(let │ │ │ -00015500: 283c 6120 6964 3d22 783a 3939 2220 636c (x, p, < │ │ │ -000155b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000155c0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
) as │ │ │ -00015600: 203c 7370 616e 2063 6c61 7373 3d22 6964 s< │ │ │ -00015620: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> return (P (let (a, _ │ │ │ -00015760: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , _ │ │ │ -00015780: 3c2f 7370 616e 3e29 203a 3d20 3c61 2063 ) := s │ │ │ -000157e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 in a)) := X< │ │ │ -000158d0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> in
p).
...Section ex2_Projectio │ │ │ -00015a10: 6e73 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ns...
.  │ │ │ -00015a30: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Variable │ │ │ -00015a60: 733c 2f73 7061 6e3e 2028 3c61 2069 643d s (A< │ │ │ -00015ad0: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Prop │ │ │ -00015b00: 3c2f 7370 616e 3e29 2028 3c61 2069 643d ) (P< │ │ │ -00015b70: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> Q │ │ │ -00015be0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063
: │ │ │ -00015c40: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A->< │ │ │ -00015cc0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a>Prop) │ │ │ -00015cf0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 266e .
..
.&n │ │ │ -00015d00: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -00015d30: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition
ex_proj3 │ │ │ -00015da0: 3c2f 613e 2028 3c61 2069 643d 2278 3a31 ( │ │ │ -00015dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00015df0: 783c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 x: │ │ │ -00015e50: 6578 323c 2f73 7061 6e3e 3c2f 613e 203c ex2 < │ │ │ -00015e60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00015e70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00015e80: 6f67 6963 2e68 746d 6c23 6578 325f 5072 ogic.html#ex2_Pr │ │ │ -00015e90: 6f6a 6563 7469 6f6e 732e 5022 3e3c 7370 ojections.P">P │ │ │ -00015ec0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 Q
) : Q
(< │ │ │ -00015fe0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00015ff0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00016000: 6e22 3e65 785f 7072 6f6a 313c 2f73 7061 n">ex_proj1 (ex_of_ex2 x)) :=
.  &n │ │ │ -00016100: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; match │ │ │ -00016130: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 x
with ex_intro2 _ _ _ │ │ │ -000162a0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ b => b │ │ │ -00016320: 3c73 7061 6e20 636c 6173 733d 2269 6422 end.
..
.End
ex2_Projection │ │ │ -000163f0: 733c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 s.
..
.Defin │ │ │ -00016430: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition all (A:T │ │ │ -00016510: 7970 653c 2f73 7061 6e3e 2920 283c 6120 ype) (P< │ │ │ -00016570: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ -000165d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -00016640: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ -00016670: 6f70 3c2f 7370 616e 3e29 203a 3d20 3c73 op) := f │ │ │ -000166a0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall x< │ │ │ -00016700: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ -00016760: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , P
x.
.R │ │ │ -00016850: 6567 6973 7465 723c 2f73 7061 6e3e 203c egister < │ │ │ -00016860: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016870: 7469 746c 653d 2276 6172 223e 616c 6c3c title="var">all< │ │ │ -00016880: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as c │ │ │ -000168d0: 6f72 652e 616c 6c3c 2f73 7061 6e3e 2e3c ore.all.< │ │ │ -000168e0: 6272 2f3e 0a0a 3c62 722f 3e0a 0a3c 6272 br/>..
..
.Notation "'exists' │ │ │ -000169c0: 7820 2e2e 2079 202c 2070 2220 3a3d 2028 x .. y , p" := ( │ │ │ -000169d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -00016a00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016a10: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ -00016a20: 223e 6578 3c2f 7370 616e 3e3c 2f61 3e20 ">ex │ │ │ -00016a30: 283c 7370 616e 2063 6c61 7373 3d22 6964 (fun x< │ │ │ -00016ab0: 2f61 3e20 3d26 6774 3b20 2e2e 2028 3c61 /a> => .. ( │ │ │ -00016b10: 6578 3c2f 7370 616e 3e3c 2f61 3e20 283c ex (< │ │ │ -00016b20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016b30: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00016b40: 6675 6e3c 2f73 7061 6e3e 203c 6120 6964 fun y => p)) │ │ │ -00016bd0: 2e2e 2929 3c62 722f 3e0a 266e 6273 703b ..))
.  │ │ │ -00016be0: 266e 6273 703b 283c 7370 616e 2063 6c61  (at │ │ │ -00016c10: 203c 7370 616e 2063 6c61 7373 3d22 6964 level 2 │ │ │ -00016c40: 3030 2c20 3c73 7061 6e20 636c 6173 733d 00, x binder
, right associativit │ │ │ -00016cf0: 793c 2f73 7061 6e3e 2c3c 6272 2f3e 0a26 y,
.& │ │ │ -00016d00: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00016d10: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;fo │ │ │ -00016d30: 726d 6174 3c2f 7370 616e 3e20 2227 5b27 rmat "'[' │ │ │ -00016d40: 2027 6578 6973 7473 2720 2027 2f20 2027 'exists' '/ ' │ │ │ -00016d50: 2078 2020 2e2e 2020 7920 2c20 2027 2f20 x .. y , '/ │ │ │ -00016d60: 2027 2070 2027 5d27 2229 3c62 722f 3e0a ' p ']'")
. │ │ │ -00016d70: 266e 6273 703b 266e 6273 703b 3a20 3c73   : type_ │ │ │ -00016da0: 7363 6f70 653c 2f73 7061 6e3e 2e3c 6272 scope
.
..
.Notat │ │ │ -00016de0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion &qu │ │ │ -00016e70: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 2765 ot;'e │ │ │ -00016e80: 7869 7374 7332 2720 7820 2c20 7020 2661 xists2' x , p &a │ │ │ -00016e90: 6d70 3b20 7122 203a 3d20 283c 6120 636c mp; q" := (ex │ │ │ -00016ef0: 323c 2f73 7061 6e3e 3c2f 613e 2028 3c73 2 (f │ │ │ -00016f20: 756e 3c2f 7370 616e 3e20 3c61 2069 643d un x │ │ │ -00016f80: 203d 2667 743b 203c 7370 616e 2063 6c61 => p) (< │ │ │ -00016fb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00016fc0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00016fd0: 6675 6e3c 2f73 7061 6e3e 203c 6120 6964 fun x => q))< │ │ │ -00017060: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00017070: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(at lev │ │ │ -000170c0: 656c 3c2f 7370 616e 3e20 3230 302c 203c el 200, < │ │ │ -000170d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000170e0: 7469 746c 653d 2276 6172 223e 783c 2f73 title="var">x name, < │ │ │ -00017120: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00017130: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p
at < │ │ │ -00017170: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00017180: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00017190: 6c65 7665 6c3c 2f73 7061 6e3e 2032 3030 level 200 │ │ │ -000171a0: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , right < │ │ │ -000171d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000171e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000171f0: 6173 736f 6369 6174 6976 6974 793c 2f73 associativity
) : type_scope< │ │ │ -00017230: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.No │ │ │ -00017260: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation
│ │ │ -000172f0: 2671 756f 743b 3c2f 7370 616e 3e3c 2f61 "'exists2' x : A │ │ │ -00017310: 202c 2070 2026 616d 703b 2071 2220 3a3d , p & q" := │ │ │ -00017320: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (ex2< │ │ │ -00017380: 2f61 3e20 283c 7370 616e 2063 6c61 7373 /a> (A:=A) (fun │ │ │ -00017400: 3c61 2069 643d 2278 3a31 3138 2220 636c x => p) (fun │ │ │ -000174b0: 203c 6120 6964 3d22 783a 3131 3722 2063 x => q))
.  │ │ │ -00017540: 3b26 6e62 7370 3b28 3c73 7061 6e20 636c ; (at level │ │ │ -000175a0: 3230 302c 203c 7370 616e 2063 6c61 7373 200, x name, A at
level 200, p at │ │ │ -000176c0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c level 200, right │ │ │ -00017720: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c associa │ │ │ -00017750: 7469 7669 7479 3c2f 7370 616e 3e2c 3c62 tivity,.   │ │ │ -00017770: 266e 6273 703b 266e 6273 703b 3c73 7061   format< │ │ │ -000177a0: 2f73 7061 6e3e 2022 275b 2720 2765 7869 /span> "'[' 'exi │ │ │ -000177b0: 7374 7332 2720 2027 2f20 2027 2078 2020 sts2' '/ ' x │ │ │ -000177c0: 3a20 2041 202c 2020 272f 2020 2720 275b : A , '/ ' '[ │ │ │ -000177d0: 2720 7020 2026 616d 703b 2020 272f 2720 ' p & '/' │ │ │ -000177e0: 7120 275d 2720 275d 2722 293c 6272 2f3e q ']' ']'")
│ │ │ -000177f0: 0a26 6e62 7370 3b26 6e62 7370 3b3a 203c .  : < │ │ │ -00017800: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00017810: 7469 746c 653d 2276 6172 223e 7479 7065 title="var">type │ │ │ -00017820: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope
...
.Nota │ │ │ -00017860: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion &q │ │ │ -000178f0: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e27 uot;' │ │ │ -00017900: 6578 6973 7473 3227 2027 2078 202c 2070 exists2' ' x , p │ │ │ -00017910: 2026 616d 703b 2071 2220 3a3d 2028 3c61 & q" := (ex2 │ │ │ -00017980: 283c 7370 616e 2063 6c61 7373 3d22 6964 (fun x< │ │ │ -00017a00: 2f61 3e20 3d26 6774 3b20 3c73 7061 6e20 /a> => p) │ │ │ -00017a30: 2028 3c73 7061 6e20 636c 6173 733d 2269 (fun x │ │ │ -00017ab0: 3c2f 613e 203d 2667 743b 203c 7370 616e => q │ │ │ -00017ae0: 2929 3c62 722f 3e0a 266e 6273 703b 266e ))
. &n │ │ │ -00017af0: 6273 703b 283c 7370 616e 2063 6c61 7373 bsp;(at < │ │ │ -00017b20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00017b30: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00017b40: 6c65 7665 6c3c 2f73 7061 6e3e 2032 3030 level 200 │ │ │ -00017b50: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , x │ │ │ -00017b70: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c strict pattern, │ │ │ -00017bf0: 703c 2f73 7061 6e3e 203c 7370 616e 2063 p at level │ │ │ -00017c50: 2032 3030 2c20 3c73 7061 6e20 636c 6173 200, right associativit │ │ │ -00017cb0: 793c 2f73 7061 6e3e 2920 3a20 3c73 7061 y) : type_sc │ │ │ -00017ce0: 6f70 653c 2f73 7061 6e3e 2e3c 6272 2f3e ope.
│ │ │ -00017cf0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Notation "'exists2' ' │ │ │ -00017dc0: 2078 203a 2041 202c 2070 2026 616d 703b x : A , p & │ │ │ -00017dd0: 2071 2220 3a3d 2028 3c61 2063 6c61 7373 q" := (ex2 (A │ │ │ -00017e60: 3a3d 3c73 7061 6e20 636c 6173 733d 2269 :=A │ │ │ -00017e80: 3c2f 7370 616e 3e29 2028 3c73 7061 6e20 ) (fun │ │ │ -00017ee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00017f00: 783c 2f73 7061 6e3e 3c2f 613e 203d 2667 x =&g │ │ │ -00017f10: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; │ │ │ -00017f30: 703c 2f73 7061 6e3e 2920 283c 7370 616e p) (fun< │ │ │ -00017f60: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> x =& │ │ │ -00017fc0: 6774 3b20 3c73 7061 6e20 636c 6173 733d gt; q))
│ │ │ -00017ff0: 0a26 6e62 7370 3b26 6e62 7370 3b28 3c73 .  (at │ │ │ -00018020: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c
level 200, x │ │ │ -00018080: 203c 7370 616e 2063 6c61 7373 3d22 6964 st │ │ │ -000180a0: 7269 6374 3c2f 7370 616e 3e20 3c73 7061 rict patt │ │ │ -000180d0: 6572 6e3c 2f73 7061 6e3e 2c20 3c73 7061 ern, A
at lev │ │ │ -00018150: 656c 3c2f 7370 616e 3e20 3230 302c 203c el
200, < │ │ │ -00018160: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00018170: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p at < │ │ │ -000181b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000181c0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000181d0: 6c65 7665 6c3c 2f73 7061 6e3e 2032 3030 level
200 │ │ │ -000181e0: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , right < │ │ │ -00018210: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00018220: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00018230: 6173 736f 6369 6174 6976 6974 793c 2f73 associativity
,
.  │ │ │ -00018250: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00018260: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp; │ │ │ -00018280: 666f 726d 6174 3c2f 7370 616e 3e20 2227 format "' │ │ │ -00018290: 5b27 2027 6578 6973 7473 3227 2020 272f [' 'exists2' '/ │ │ │ -000182a0: 2020 2720 2720 7820 203a 2020 4120 2c20 ' ' x : A , │ │ │ -000182b0: 2027 2f20 2027 2027 5b27 2070 2020 2661 '/ ' '[' p &a │ │ │ -000182c0: 6d70 3b20 2027 2f27 2071 2027 5d27 2027 mp; '/' q ']' ' │ │ │ -000182d0: 5d27 2229 3c62 722f 3e0a 266e 6273 703b ]'")
.  │ │ │ -000182e0: 266e 6273 703b 3a20 3c73 7061 6e20 636c  : type_scope< │ │ │ -00018310: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...
..
.De │ │ │ -00018340: 7269 7665 6420 7275 6c65 7320 666f 7220 rived rules for │ │ │ -00018350: 756e 6976 6572 7361 6c20 7175 616e 7469 universal quanti │ │ │ -00018360: 6669 6361 7469 6f6e 200a 3c2f 6469 763e fication .
│ │ │ -00018370: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
..
.Sect │ │ │ -000183b0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion univ │ │ │ -00018430: 6572 7361 6c5f 7175 616e 7469 6669 6361 ersal_quantifica │ │ │ -00018440: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e2e tion. │ │ │ -00018450: 3c62 722f 3e0a 0a3c 6272 2f3e 0a26 6e62
..
.&nb │ │ │ -00018460: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Variab │ │ │ -00018490: 6c65 3c2f 7370 616e 3e20 3c61 2069 643d le │ │ │ -00018510: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ -00018520: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00018530: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00018540: 5479 7065 3c2f 7370 616e 3e2e 3c62 722f Type.
.  V │ │ │ -00018580: 6172 6961 626c 653c 2f73 7061 6e3e 203c ariable < │ │ │ -00018590: 6120 6964 3d22 756e 6976 6572 7361 6c5f a id="universal_ │ │ │ -000185a0: 7175 616e 7469 6669 6361 7469 6f6e 2e50 quantification.P │ │ │ -000185b0: 2220 636c 6173 733d 2269 6472 6566 2220 " class="idref" │ │ │ -000185c0: 6872 6566 3d22 2375 6e69 7665 7273 616c href="#universal │ │ │ -000185d0: 5f71 7561 6e74 6966 6963 6174 696f 6e2e _quantification. │ │ │ -000185e0: 5022 3e3c 7370 616e 2063 6c61 7373 3d22 P">P : A < │ │ │ -000186d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000186e0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000186f0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop.< │ │ │ -00018730: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ -00018740: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Theorem │ │ │ -00018770: 3c2f 7370 616e 3e20 3c61 2069 643d 2269 │ │ │ -000187a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 i │ │ │ -000187c0: 6e73 743c 2f73 7061 6e3e 3c2f 613e 203a nst : │ │ │ -000187d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -00018800: 3c61 2069 643d 2278 3a31 3237 2220 636c x: │ │ │ -000188c0: 413c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 A, all │ │ │ -00018930: 2028 3c73 7061 6e20 636c 6173 733d 2269 (fun x │ │ │ -000189b0: 3c2f 613e 203d 2667 743b 203c 6120 636c => P │ │ │ -00018a30: 203c 6120 636c 6173 733d 2269 6472 6566 x) ->< │ │ │ -00018b00: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -00018b80: 203c 6120 636c 6173 733d 2269 6472 6566 x.
..
.& │ │ │ -00018bf0: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Theo │ │ │ -00018c20: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem │ │ │ -00018c70: 6765 6e3c 2f73 7061 6e3e 3c2f 613e 203a gen : │ │ │ -00018c80: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -00018cb0: 283c 6120 6964 3d22 423a 3132 3922 2063 (B:Prop
) (f:f │ │ │ -00018db0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall y< │ │ │ -00018e10: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A, B │ │ │ -00018ee0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00018f60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P y< │ │ │ -00019030: 2f73 7061 6e3e 3c2f 613e 292c 203c 6120 /span>), < │ │ │ -00019070: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00019080: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00019090: 3e42 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >B -> all │ │ │ -000191c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 P.< │ │ │ -000191f0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.End │ │ │ -00019220: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 un │ │ │ -00019290: 6976 6572 7361 6c5f 7175 616e 7469 6669 iversal_quantifi │ │ │ -000192a0: 6361 7469 6f6e 3c2f 7370 616e 3e3c 2f61 cation.
..
.< │ │ │ -000192c0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.

Equality

.. │ │ │ -00019310: 3c64 6976 2063 6c61 7373 3d22 7061 7261
.. │ │ │ -00019330: 203c 7370 616e 2063 6c61 7373 3d22 696e eq │ │ │ -00019370: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c x< │ │ │ -000193b0: 2f73 7061 6e3e 3c2f 7370 616e 3e20 3c73 /span> y, or simply < │ │ │ -00019410: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00019420: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">x=y expre │ │ │ -00019480: 7373 6573 2074 6865 2065 7175 616c 6974 sses the equalit │ │ │ -00019490: 7920 6f66 203c 7370 616e 2063 6c61 7373 y of x and. │ │ │ -000194e0: 2020 203c 7370 616e 2063 6c61 7373 3d22 y. Both < │ │ │ -00019530: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00019540: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">x and y │ │ │ -000195b0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 206d m │ │ │ -000195c0: 7573 7420 6265 6c6f 6e67 2074 6f20 7468 ust belong to th │ │ │ -000195d0: 6520 7361 6d65 2074 7970 6520 3c73 7061 e same type A.. The defin │ │ │ -00019630: 6974 696f 6e20 6973 2069 6e64 7563 7469 ition is inducti │ │ │ -00019640: 7665 2061 6e64 2073 7461 7465 7320 7468 ve and states th │ │ │ -00019650: 6520 7265 666c 6578 6976 6974 7920 6f66 e reflexivity of │ │ │ -00019660: 2074 6865 2065 7175 616c 6974 792e 0a20 the equality.. │ │ │ -00019670: 2020 2054 6865 206f 7468 6572 7320 7072 The others pr │ │ │ -00019680: 6f70 6572 7469 6573 2028 7379 6d6d 6574 operties (symmet │ │ │ -00019690: 7279 2c20 7472 616e 7369 7469 7669 7479 ry, transitivity │ │ │ -000196a0: 2c20 7265 706c 6163 656d 656e 7420 6f66 , replacement of │ │ │ -000196b0: 0a20 2020 2065 7175 616c 7320 6279 2065 . equals by e │ │ │ -000196c0: 7175 616c 7329 2061 7265 2070 726f 7665 quals) are prove │ │ │ -000196d0: 6420 6265 6c6f 772e 2054 6865 2074 7970 d below. The typ │ │ │ -000196e0: 6520 6f66 203c 7370 616e 2063 6c61 7373 e of x and < │ │ │ -00019730: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00019740: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">y can be. │ │ │ -00019780: 6d61 6465 2065 7870 6c69 6369 7420 7573 made explicit us │ │ │ -00019790: 696e 6720 7468 6520 6e6f 7461 7469 6f6e ing the notation │ │ │ -000197a0: 203c 7370 616e 2063 6c61 7373 3d22 696e x< │ │ │ -000197e0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ -00019800: 3d3c 2f73 7061 6e3e 203c 7370 616e 2063 = y │ │ │ -00019840: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ -00019850: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00019860: 6e65 636f 6465 223e 3a26 6774 3b3c 2f73 necode">:> A. This │ │ │ -000198c0: 2069 7320 4c65 6962 6e69 7a20 6571 7561 is Leibniz equa │ │ │ -000198d0: 6c69 7479 0a20 2020 2061 7320 6974 2065 lity. as it e │ │ │ -000198e0: 7870 7265 7373 6573 2074 6861 7420 3c73 xpresses that x and y< │ │ │ -00019970: 2f73 7061 6e3e 3c2f 7370 616e 3e20 6172 /span> ar │ │ │ -00019980: 6520 6571 7561 6c20 6966 6620 6576 6572 e equal iff ever │ │ │ -00019990: 7920 7072 6f70 6572 7479 206f 6e0a 2020 y property on. │ │ │ -000199a0: 2020 3c73 7061 6e20 636c 6173 733d 2269 A │ │ │ -000199e0: 3c2f 7370 616e 3e20 7768 6963 6820 6973 which is │ │ │ -000199f0: 2074 7275 6520 6f66 203c 7370 616e 2063 true of x │ │ │ -00019a30: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2069 i │ │ │ -00019a40: 7320 616c 736f 2074 7275 6520 6f66 203c s also true of < │ │ │ -00019a50: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00019a60: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">y .
.. │ │ │ -00019ab0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Inductiv │ │ │ -00019ae0: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e eq │ │ │ -00019bd0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (A< │ │ │ -00019c30: 2f61 3e3a 3c73 7061 6e20 636c 6173 733d /a>:Type │ │ │ -00019c60: 2920 283c 6120 6964 3d22 783a 3133 3322 ) (x:A< │ │ │ -00019d10: 2f73 7061 6e3e 3c2f 613e 2920 3a20 3c73 /span>) : A -> │ │ │ -00019db0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ -00019de0: 703c 2f73 7061 6e3e 203a 3d3c 6272 2f3e p :=
│ │ │ -00019df0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00019e00: 7370 3b26 6e62 7370 3b3c 6120 6964 3d22 sp; eq_r │ │ │ -00019e60: 6566 6c3c 2f73 7061 6e3e 3c2f 613e 203a efl : │ │ │ -00019e70: 203c 6120 636c 6173 733d 2269 6472 6566 x < │ │ │ -00019f20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00019f30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00019f40: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ -00019f80: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ -00019fb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00019fc0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00019fd0: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ -00019fe0: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ -00019ff0: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">:& │ │ │ -0001a020: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 gt; │ │ │ -0001a060: 3c73 7061 6e20 636c 6173 733d 2269 6422 A.
.where │ │ │ -0001a0c0: 3c2f 7370 616e 3e20 3c61 2069 643d 2262 " │ │ │ -0001a150: 3c2f 7370 616e 3e3c 2f61 3e78 203d 2079 x = y │ │ │ -0001a160: 203a 2667 743b 2041 2220 3a3d 2028 403c :> A" := (@< │ │ │ -0001a170: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001a180: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0001a190: 6f67 6963 2e68 746d 6c23 6571 3a31 3335 ogic.html#eq:135 │ │ │ -0001a1a0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq │ │ │ -0001a1f0: 413c 2f73 7061 6e3e 203c 7370 616e 2063 A x < │ │ │ -0001a220: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001a230: 7469 746c 653d 2276 6172 223e 793c 2f73 title="var">y
) : type_scope< │ │ │ -0001a270: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...Arguments eq {A} x _.
. │ │ │ -0001a390: 3c73 7061 6e20 636c 6173 733d 2269 6422 Arguments eq_re │ │ │ -0001a420: 666c 3c2f 7370 616e 3e3c 2f61 3e20 7b3c fl {< │ │ │ -0001a430: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001a440: 7469 746c 653d 2276 6172 223e 413c 2f73 title="var">A
x} , [< │ │ │ -0001a480: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001a490: 7469 746c 653d 2276 6172 223e 413c 2f73 title="var">A
] x.
..
.Argume │ │ │ -0001a500: 6e74 733c 2f73 7061 6e3e 203c 6120 636c nts eq_ind< │ │ │ -0001a570: 2f61 3e20 5b3c 7370 616e 2063 6c61 7373 /a> [A] x P │ │ │ -0001a5e0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ y _ : rena │ │ │ -0001a680: 6d65 3c2f 7370 616e 3e2e 3c62 722f 3e0a me.
. │ │ │ -0001a690: 3c73 7061 6e20 636c 6173 733d 2269 6422 Arguments
eq_rec< │ │ │ -0001a720: 2f73 7061 6e3e 3c2f 613e 205b 3c73 7061 /span> [A] │ │ │ -0001a770: 783c 2f73 7061 6e3e 203c 7370 616e 2063 x P < │ │ │ -0001a7a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001a7b0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ y _ │ │ │ -0001a810: 203a 203c 7370 616e 2063 6c61 7373 3d22 : rename │ │ │ -0001a840: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Argument │ │ │ -0001a870: 733c 2f73 7061 6e3e 203c 6120 636c 6173 s eq_rect< │ │ │ -0001a8e0: 2f61 3e20 5b3c 7370 616e 2063 6c61 7373 /a> [A] x P │ │ │ -0001a950: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ y _ : rena │ │ │ -0001a9f0: 6d65 3c2f 7370 616e 3e2e 3c62 722f 3e0a me.
. │ │ │ -0001aa00: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Notation │ │ │ -0001aa30: 3c2f 7370 616e 3e20 3c61 2069 643d 2236
" │ │ │ -0001aac0: 3c2f 7370 616e 3e3c 2f61 3e78 203d 2079 x = y │ │ │ -0001aad0: 2220 3a3d 2028 3c61 2063 6c61 7373 3d22 " := (eq x y) : type_scope.
.Notat │ │ │ -0001abe0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion "
x <&g │ │ │ -0001ac90: 743b 2079 2020 3a26 6774 3b20 5422 203a t; y :> T" : │ │ │ -0001aca0: 3d20 283c 6120 636c 6173 733d 2269 6472 = ( │ │ │ -0001acf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ~ < │ │ │ -0001ad20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001ad30: 7469 746c 653d 2276 6172 223e 783c 2f73 title="var">x
= │ │ │ -0001adc0: 203c 7370 616e 2063 6c61 7373 3d22 6964 y< │ │ │ -0001ade0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> :>
T) : < │ │ │ -0001ae90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001aea0: 7469 746c 653d 2276 6172 223e 7479 7065 title="var">type │ │ │ -0001aeb0: 5f73 636f 7065 3c2f 7370 616e 3e2e 3c62 _scope..Notation &qu │ │ │ -0001af70: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 7820 ot;x │ │ │ -0001af80: 266c 743b 2667 743b 2079 2220 3a3d 2028 <> y" := ( │ │ │ -0001af90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ~ │ │ │ -0001b000: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (x =
y)) : type_s │ │ │ -0001b1f0: 636f 7065 3c2f 7370 616e 3e2e 3c62 722f cope.
..
.#[global]
.Hin │ │ │ -0001b260: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t
Resolv │ │ │ -0001b290: 653c 2f73 7061 6e3e 203c 7370 616e 2063 e I < │ │ │ -0001b2c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001b2d0: 7469 746c 653d 2276 6172 223e 636f 6e6a title="var">conj │ │ │ -0001b2e0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c or_introl or_intror
: core.< │ │ │ -0001b370: 6272 2f3e 0a23 5b3c 7370 616e 2063 6c61 br/>.#[global]
.Hint
Resolve
eq_refl │ │ │ -0001b430: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : c │ │ │ -0001b450: 6f72 653c 2f73 7061 6e3e 2e3c 6272 2f3e ore.
│ │ │ -0001b460: 0a23 5b3c 7370 616e 2063 6c61 7373 3d22 .#[ │ │ │ -0001b480: 676c 6f62 616c 3c2f 7370 616e 3e5d 3c62 global].Hint │ │ │ -0001b4c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Resolve │ │ │ -0001b4f0: 203c 7370 616e 2063 6c61 7373 3d22 6964 ex │ │ │ -0001b510: 5f69 6e74 726f 3c2f 7370 616e 3e20 3c73 _intro ex_in │ │ │ -0001b540: 7472 6f32 3c2f 7370 616e 3e3a 203c 7370 tro2: core.
..
.Register
eq as core.eq.type< │ │ │ -0001b630: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.Re │ │ │ -0001b660: 6769 7374 6572 3c2f 7370 616e 3e20 3c73 gister
eq_re │ │ │ -0001b690: 666c 3c2f 7370 616e 3e20 3c73 7061 6e20 fl
as core.eq.refl.
.Reg │ │ │ -0001b720: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister
eq_ind │ │ │ -0001b750: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ -0001b7a0: 636f 7265 2e65 712e 696e 643c 2f73 7061 core.eq.ind.
.Regist │ │ │ -0001b7e0: 6572 3c2f 7370 616e 3e20 3c73 7061 6e20 er eq_rect as │ │ │ -0001b840: 203c 7370 616e 2063 6c61 7373 3d22 6964 co │ │ │ -0001b860: 7265 2e65 712e 7265 6374 3c2f 7370 616e re.eq.rect.
..
.< │ │ │ -0001b880: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001b890: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001b8a0: 5365 6374 696f 6e3c 2f73 7061 6e3e 203c Section
< │ │ │ -0001b8b0: 6120 6964 3d22 4c6f 6769 635f 6c65 6d6d a id="Logic_lemm │ │ │ -0001b8c0: 6173 2220 636c 6173 733d 2269 6472 6566 as" class="idref │ │ │ -0001b8d0: 2220 6872 6566 3d22 234c 6f67 6963 5f6c " href="#Logic_l │ │ │ -0001b8e0: 656d 6d61 7322 3e3c 7370 616e 2063 6c61 emmas">Logic_le │ │ │ -0001b910: 6d6d 6173 3c2f 7370 616e 3e3c 2f61 3e2e mmas. │ │ │ -0001b920: 3c62 722f 3e0a 0a3c 6272 2f3e 0a26 6e62
..
.&nb │ │ │ -0001b930: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Theore │ │ │ -0001b960: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m absurd : forall< │ │ │ -0001b9f0: 2f73 7061 6e3e 203c 6120 6964 3d22 413a /span> A C │ │ │ -0001baa0: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Prop, A< │ │ │ -0001bb30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0001bba0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ~
A
│ │ │ -0001bcf0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0001bd00: 203c 6120 636c 6173 733d 2269 6472 6566 C.
..
.& │ │ │ -0001bd70: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Sect │ │ │ -0001bda0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion equality.
. │ │ │ -0001be30: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0001be40: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Variabl │ │ │ -0001be70: 6573 3c2f 7370 616e 3e20 3c61 2069 643d es A B< │ │ │ -0001bf70: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : Type.
. & │ │ │ -0001bfb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0001bfc0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Variable
│ │ │ -0001c040: 3c73 7061 6e20 636c 6173 733d 2269 6422 f : │ │ │ -0001c070: 203c 6120 636c 6173 733d 2269 6472 6566 A< │ │ │ -0001c0e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0001c150: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0001c1a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B.< │ │ │ -0001c1d0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001c1e0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Va │ │ │ -0001c210: 7269 6162 6c65 733c 2f73 7061 6e3e 203c riables < │ │ │ -0001c220: 6120 6964 3d22 4c6f 6769 635f 6c65 6d6d a id="Logic_lemm │ │ │ -0001c230: 6173 2e65 7175 616c 6974 792e 7822 2063 as.equality.x" c │ │ │ -0001c240: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ -0001c250: 663d 2223 4c6f 6769 635f 6c65 6d6d 6173 f="#Logic_lemmas │ │ │ -0001c260: 2e65 7175 616c 6974 792e 7822 3e3c 7370 .equality.x">x │ │ │ -0001c290: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y
z : A< │ │ │ -0001c400: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -0001c410: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -0001c420: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0001c430: 3c73 7061 6e20 636c 6173 733d 2269 6422 Theorem │ │ │ -0001c460: 3c61 2069 643d 2265 715f 7379 6d22 2063 eq_sy │ │ │ -0001c4b0: 6d3c 2f73 7061 6e3e 3c2f 613e 203a 203c m : < │ │ │ -0001c4c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001c4d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0001c4e0: 6f67 6963 2e68 746d 6c23 4c6f 6769 635f ogic.html#Logic_ │ │ │ -0001c4f0: 6c65 6d6d 6173 2e65 7175 616c 6974 792e lemmas.equality. │ │ │ -0001c500: 7822 3e3c 7370 616e 2063 6c61 7373 3d22 x">x < │ │ │ -0001c580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001c590: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0001c5a0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= y │ │ │ -0001c620: 203c 6120 636c 6173 733d 2269 6472 6566 ->
y │ │ │ -0001c700: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = x< │ │ │ -0001c7f0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -0001c800: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -0001c810: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0001c820: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ -0001c850: 203c 7370 616e 2063 6c61 7373 3d22 6964 eq │ │ │ -0001c870: 5f73 796d 3c2f 7370 616e 3e20 3c73 7061 _sym as< │ │ │ -0001c8a0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> core.eq.sym< │ │ │ -0001c8d0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...   │ │ │ -0001c8f0: 266e 6273 703b 266e 6273 703b 3c73 7061   The │ │ │ -0001c920: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem
eq_tr │ │ │ -0001c980: 616e 733c 2f73 7061 6e3e 3c2f 613e 203a ans : │ │ │ -0001c990: 203c 6120 636c 6173 733d 2269 6472 6566 x< │ │ │ -0001ca00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -0001ca80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y ->< │ │ │ -0001cb60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> < │ │ │ -0001cbb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001cbc0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0001cbd0: 3e79 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >y = │ │ │ -0001ccc0: 7a3c 2f73 7061 6e3e 3c2f 613e 203c 6120 z -> │ │ │ -0001cd40: 3c2f 613e 203c 6120 636c 6173 733d 2269 x =< │ │ │ -0001ce30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> z
.
...   │ │ │ -0001cec0: 266e 6273 703b 266e 6273 703b 3c73 7061   Reg │ │ │ -0001cef0: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister eq_tra │ │ │ -0001cf20: 6e73 3c2f 7370 616e 3e20 3c73 7061 6e20 ns as
core.eq.trans< │ │ │ -0001cf80: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...   │ │ │ -0001cfa0: 266e 6273 703b 266e 6273 703b 3c73 7061   The │ │ │ -0001cfd0: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem
│ │ │ -0001d010: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ -0001d030: 715f 7472 616e 735f 723c 2f73 7061 6e3e q_trans_r │ │ │ -0001d040: 3c2f 613e 203a 203c 6120 636c 6173 733d : x = y
│ │ │ -0001d210: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0001d220: 203c 6120 636c 6173 733d 2269 6472 6566 z< │ │ │ -0001d290: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -0001d310: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y ->< │ │ │ -0001d3f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> < │ │ │ -0001d440: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001d450: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0001d460: 3e78 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >x = │ │ │ -0001d550: 7a3c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 z.
..
.  │ │ │ -0001d570: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0001d580: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Theorem │ │ │ -0001d5e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 f │ │ │ -0001d600: 5f65 7175 616c 3c2f 7370 616e 3e3c 2f61 _equal : x = y -&g │ │ │ -0001d7e0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; f │ │ │ -0001d860: 203c 6120 636c 6173 733d 2269 6472 6566 x< │ │ │ -0001d8d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -0001d950: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f y.
..
.  & │ │ │ -0001da50: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Regi │ │ │ -0001da80: 7374 6572 3c2f 7370 616e 3e20 3c73 7061 ster f_eq │ │ │ -0001dab0: 7561 6c3c 2f73 7061 6e3e 203c 7370 616e ual as core.eq.congr │ │ │ -0001db10: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 0a3c .
..< │ │ │ -0001db20: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001db30: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Th │ │ │ -0001db60: 656f 7265 6d3c 2f73 7061 6e3e 203c 6120 eorem
│ │ │ -0001dbc0: 6e6f 745f 6571 5f73 796d 3c2f 7370 616e not_eq_sym : x< │ │ │ -0001dc40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <>
y │ │ │ -0001dd30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0001ddb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y < │ │ │ -0001de70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001de80: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0001de90: 3e26 6c74 3b26 6774 3b3c 2f73 7061 6e3e ><> │ │ │ -0001dea0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x.
..< │ │ │ -0001df20: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0001df30: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;End < │ │ │ -0001dfa0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001dfb0: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ -0001dfc0: 6571 7561 6c69 7479 3c2f 7370 616e 3e3c equality< │ │ │ -0001dfd0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -0001dfe0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ -0001e010: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ -0001e020: 3c61 2069 643d 2265 715f 7369 6e64 5f72
eq_sind_r< │ │ │ -0001e080: 2f73 7061 6e3e 3c2f 613e 203a 3c62 722f /span> :
.  &n │ │ │ -0001e0a0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; foral │ │ │ -0001e0d0: 6c3c 2f73 7061 6e3e 2028 3c61 2069 643d l (A │ │ │ -0001e130: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :Type) ( │ │ │ -0001e160: 3c61 2069 643d 2278 3a31 3531 2220 636c x:A) (P │ │ │ -0001e270: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A -> SProp), P x - │ │ │ -0001e4a0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0001e4b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -0001e4e0: 6120 6964 3d22 793a 3135 3322 2063 6c61 a id="y:153" cla │ │ │ -0001e4f0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0001e500: 2223 793a 3135 3322 3e3c 7370 616e 2063 "#y:153">y:A, y
= │ │ │ -0001e670: 3c2f 613e 203c 6120 636c 6173 733d 2269 x -&g │ │ │ -0001e740: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ -0001e780: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -0001e7b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0001e7c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0001e7d0: 6f67 6963 2e68 746d 6c23 793a 3135 3322 ogic.html#y:153" │ │ │ -0001e7e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y. │ │ │ -0001e810: 3c62 722f 3e0a 0a3c 6272 2f3e 0a26 6e62
..
.&nb │ │ │ -0001e820: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ -0001e850: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion │ │ │ -0001e8b0: 6571 5f69 6e64 5f72 3c2f 7370 616e 3e3c eq_ind_r< │ │ │ -0001e8c0: 2f61 3e20 3a3c 6272 2f3e 0a26 6e62 7370 /a> :
.  │ │ │ -0001e8d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0001e8e0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;forall (
A:Type< │ │ │ -0001e990: 2f73 7061 6e3e 2920 283c 6120 6964 3d22 /span>) (x: │ │ │ -0001e9f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -0001ea50: 2920 283c 6120 6964 3d22 503a 3135 3622 ) (P:A< │ │ │ -0001eb00: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0001eb50: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop) │ │ │ -0001ebb0: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , P x< │ │ │ -0001ec70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0001ece0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 for │ │ │ -0001ed10: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all y:A, y │ │ │ -0001ee30: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -0001eeb0: 203c 6120 636c 6173 733d 2269 6472 6566 x -> P< │ │ │ -0001efe0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> y │ │ │ -0001f040: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.  D │ │ │ -0001f080: 6566 696e 6564 3c2f 7370 616e 3e2e 3c62 efined...
.  │ │ │ -0001f0a0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Register │ │ │ -0001f0d0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c eq_ind_r
as │ │ │ -0001f130: 3c73 7061 6e20 636c 6173 733d 2269 6422 cor │ │ │ -0001f150: 652e 6571 2e69 6e64 5f72 3c2f 7370 616e e.eq.ind_r.
..
.& │ │ │ -0001f170: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ -0001f1a0: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition eq_rec_r :
.&nb │ │ │ -0001f220: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0001f230: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;forall (< │ │ │ -0001f290: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001f2a0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -0001f2b0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Typ │ │ │ -0001f2e0: 653c 2f73 7061 6e3e 2920 283c 6120 6964 e) (x:A) (< │ │ │ -0001f3d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001f3e0: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -0001f3f0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -0001f450: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ -0001f4d0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Set │ │ │ -0001f500: 292c 203c 6120 636c 6173 733d 2269 6472 ), P< │ │ │ -0001f560: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -0001f5c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0001f630: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; fo │ │ │ -0001f660: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall y:A< │ │ │ -0001f720: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, y = x ->< │ │ │ -0001f8d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -0001f930: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0001f990: 793c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 y.
.  < │ │ │ -0001f9b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001f9c0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0001f9d0: 4465 6669 6e65 643c 2f73 7061 6e3e 2e3c Defined.< │ │ │ -0001f9e0: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ -0001f9f0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ -0001fa20: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion eq_rect_r :
.&nb │ │ │ -0001faa0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0001fab0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;forall
(< │ │ │ -0001fb10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001fb20: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -0001fb30: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Typ │ │ │ -0001fb60: 653c 2f73 7061 6e3e 2920 283c 6120 6964 e) (x:A) (< │ │ │ -0001fc50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0001fc60: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -0001fc70: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -0001fcd0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ -0001fd50: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Type), P │ │ │ -0001fde0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x -&g │ │ │ -0001feb0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; f │ │ │ -0001fee0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall y< │ │ │ -0001ff40: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ -0001ffa0: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , y = x< │ │ │ -000200e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -00020150: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -000201b0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -000201f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00020200: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00020210: 3e79 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >y..   │ │ │ -00020230: 3c73 7061 6e20 636c 6173 733d 2269 6422 Defined. │ │ │ -00020260: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.End Logi │ │ │ -000202f0: 635f 6c65 6d6d 6173 3c2f 7370 616e 3e3c c_lemmas< │ │ │ -00020300: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -00020310: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Module │ │ │ -00020340: 3c61 2069 643d 2245 714e 6f74 6174 696f
EqNotation │ │ │ -000203a0: 733c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 s.
.  < │ │ │ -000203c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000203d0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000203e0: 4e6f 7461 7469 6f6e 3c2f 7370 616e 3e20 Notation │ │ │ -000203f0: 3c61 2069 643d 2245 714e 6f74 6174 696f &quo │ │ │ -00020470: 743b 3c2f 7370 616e 3e3c 2f61 3e27 7265 t;'re │ │ │ -00020480: 7727 2048 2027 696e 2720 4827 2220 3a3d w' H 'in' H'" := │ │ │ -00020490: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (eq_rec │ │ │ -000204f0: 743c 2f73 7061 6e3e 3c2f 613e 203c 7370 t _
│ │ │ -00020540: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ H' │ │ │ -00020570: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ H)
.  &n │ │ │ -000205d0: 6273 703b 266e 6273 703b 283c 7370 616e bsp; (at
level 10, H' at │ │ │ -00020680: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c level 10,
.& │ │ │ -000206c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000206d0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  format │ │ │ -00020700: 3c2f 7370 616e 3e20 2227 5b27 2027 7265
"'[' 're │ │ │ -00020710: 7727 2020 4820 2069 6e20 2027 2f27 2048 w' H in '/' H │ │ │ -00020720: 2720 275d 2722 292e 3c62 722f 3e0a 266e ' ']'").
.&n │ │ │ -00020730: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Notat │ │ │ -00020760: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion &qu │ │ │ -000207f0: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 2772 ot;'r │ │ │ -00020800: 6577 2720 5b20 5020 5d20 4820 2769 6e27 ew' [ P ] H 'in' │ │ │ -00020810: 2048 2722 203a 3d20 283c 6120 636c 6173 H'" := (eq_rect< │ │ │ -00020880: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ P │ │ │ -000208d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 H'< │ │ │ -000208f0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ H)
. & │ │ │ -00020950: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00020960: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(at lev │ │ │ -000209b0: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el
10, H' at < │ │ │ -00020a10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00020a20: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00020a30: 6c65 7665 6c3c 2f73 7061 6e3e 2031 302c level 10, │ │ │ -00020a40: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00020a50: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00020a60: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;format " │ │ │ -00020a90: 275b 2720 2772 6577 2720 205b 2050 205d '[' 'rew' [ P ] │ │ │ -00020aa0: 2020 272f 2020 2020 2720 4820 2069 6e20 '/ ' H in │ │ │ -00020ab0: 2027 2f27 2048 2720 275d 2722 292e 3c62 '/' H' ']'")..   │ │ │ -00020ad0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ -00020b00: 203c 6120 6964 3d22 4571 4e6f 7461 7469
&qu │ │ │ -00020b90: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 2772 ot;'r │ │ │ -00020ba0: 6577 2720 266c 743b 2d20 4820 2769 6e27 ew' <- H 'in' │ │ │ -00020bb0: 2048 2722 203a 3d20 283c 6120 636c 6173 H'" := (< │ │ │ -00020bf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00020c00: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00020c10: 6e22 3e65 715f 7265 6374 5f72 3c2f 7370 n">eq_rect_r _ H' H)
│ │ │ -00020ca0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00020cb0: 7370 3b26 6e62 7370 3b28 3c73 7061 6e20 sp; (at level 10, H' at< │ │ │ -00020d60: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
10,
.&n │ │ │ -00020da0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00020db0: 266e 6273 703b 266e 6273 703b 3c73 7061   format< │ │ │ -00020de0: 2f73 7061 6e3e 2022 275b 2720 2772 6577 /span> "'[' 'rew │ │ │ -00020df0: 2720 2026 6c74 3b2d 2020 4820 2069 6e20 ' <- H in │ │ │ -00020e00: 2027 2f27 2048 2720 275d 2722 292e 3c62 '/' H' ']'")..   │ │ │ -00020e20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ -00020e50: 203c 6120 6964 3d22 3632 3634 3163 6532 " │ │ │ -00020ee0: 3c2f 613e 2772 6577 2720 266c 743b 2d20 'rew' <- │ │ │ -00020ef0: 5b20 5020 5d20 4820 2769 6e27 2048 2722 [ P ] H 'in' H'" │ │ │ -00020f00: 203a 3d20 283c 6120 636c 6173 733d 2269 := (e │ │ │ -00020f60: 715f 7265 6374 5f72 3c2f 7370 616e 3e3c q_rect_r< │ │ │ -00020f70: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> P H' │ │ │ -00020fc0: 203c 7370 616e 2063 6c61 7373 3d22 6964 H< │ │ │ -00020fe0: 2f73 7061 6e3e 293c 6272 2f3e 0a26 6e62 /span>)
.&nb │ │ │ -00020ff0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00021000: 6e62 7370 3b28 3c73 7061 6e20 636c 6173 nbsp;(at │ │ │ -00021030: 3c73 7061 6e20 636c 6173 733d 2269 6422 level 10 │ │ │ -00021060: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , H │ │ │ -00021080: 273c 2f73 7061 6e3e 203c 7370 616e 2063 ' at
level │ │ │ -000210e0: 2031 302c 3c62 722f 3e0a 266e 6273 703b 10,
.  │ │ │ -000210f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00021100: 703b 266e 6273 703b 3c73 7061 6e20 636c p; format "'[' 'rew' & │ │ │ -00021140: 6c74 3b2d 2020 5b20 5020 5d20 2027 2f20 lt;- [ P ] '/ │ │ │ -00021150: 2020 2027 2048 2020 696e 2020 272f 2720 ' H in '/' │ │ │ -00021160: 4827 2027 5d27 2229 2e3c 6272 2f3e 0a26 H' ']'").
.& │ │ │ -00021170: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Nota │ │ │ -000211a0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion
"'rew' - │ │ │ -00021250: 2667 743b 2048 2027 696e 2720 4827 2220 > H 'in' H'" │ │ │ -00021260: 3a3d 2028 3c61 2063 6c61 7373 3d22 6964 := (eq_r │ │ │ -000212c0: 6563 743c 2f73 7061 6e3e 3c2f 613e 203c ect < │ │ │ -000212d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000212e0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_ H' _ │ │ │ -00021360: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c H).   │ │ │ -000213a0: 266e 6273 703b 266e 6273 703b 283c 7370   (at< │ │ │ -000213d0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
10, H' │ │ │ -00021430: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00021450: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ -00021480: 3c2f 7370 616e 3e20 3130 2c20 3c73 7061 10, only
parsing │ │ │ -000214e0: 292e 3c62 722f 3e0a 266e 6273 703b 266e ).
. &n │ │ │ -000214f0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Notation
"
'rew' -& │ │ │ -000215c0: 6774 3b20 5b20 5020 5d20 4820 2769 6e27 gt; [ P ] H 'in' │ │ │ -000215d0: 2048 2722 203a 3d20 283c 6120 636c 6173 H'" := (eq_rect< │ │ │ -00021640: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ P │ │ │ -00021690: 3c73 7061 6e20 636c 6173 733d 2269 6422 H'< │ │ │ -000216b0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ H)
. & │ │ │ -00021710: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00021720: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(at lev │ │ │ -00021770: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el
10, H' at < │ │ │ -000217d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000217e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000217f0: 6c65 7665 6c3c 2f73 7061 6e3e 2031 302c level 10, │ │ │ -00021800: 203c 7370 616e 2063 6c61 7373 3d22 6964 on │ │ │ -00021820: 6c79 3c2f 7370 616e 3e20 3c73 7061 6e20 ly parsing).
...   │ │ │ -00021870: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ -000218a0: 203c 6120 6964 3d22 4571 4e6f 7461 7469
"'rew' 'dep │ │ │ -00021950: 656e 6465 6e74 2720 4820 2769 6e27 2048 endent' H 'in' H │ │ │ -00021960: 2722 3c62 722f 3e0a 266e 6273 703b 266e '"
. &n │ │ │ -00021970: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00021980: 3a3d 2028 3c73 7061 6e20 636c 6173 733d := (match H │ │ │ -000219d0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c with

.  │ │ │ -00021a10: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00021a20: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00021a30: 6273 703b 266e 6273 703b 7c20 3c61 2063 bsp; | │ │ │ -00021a70: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl => H'
.  │ │ │ -00021ae0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00021af0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00021b00: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; end)
.&nbs │ │ │ -00021b40: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00021b50: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00021b60: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00021b70: 703b 283c 7370 616e 2063 6c61 7373 3d22 p;(at le │ │ │ -00021bc0: 7665 6c3c 2f73 7061 6e3e 2031 302c 203c vel
10, < │ │ │ -00021bd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00021be0: 7469 746c 653d 2276 6172 223e 4827 3c2f title="var">H' at │ │ │ -00021c20: 3c73 7061 6e20 636c 6173 733d 2269 6422 level 10 │ │ │ -00021c50: 2c3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 ,
. &nb │ │ │ -00021c60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00021c70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00021c80: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00021c90: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp; │ │ │ -00021cb0: 666f 726d 6174 3c2f 7370 616e 3e20 2227 format "' │ │ │ -00021cc0: 5b27 2027 7265 7727 2020 2764 6570 656e [' 'rew' 'depen │ │ │ -00021cd0: 6465 6e74 2720 2027 2f20 2020 2027 2048 dent' '/ ' H │ │ │ -00021ce0: 2020 696e 2020 272f 2720 4827 2027 5d27 in '/' H' ']' │ │ │ -00021cf0: 2229 2e3c 6272 2f3e 0a26 6e62 7370 3b26 ").
. & │ │ │ -00021d00: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Notation " │ │ │ -00021de0: 3c2f 7370 616e 3e3c 2f61 3e27 7265 7727 'rew' │ │ │ -00021df0: 2027 6465 7065 6e64 656e 7427 202d 2667 'dependent' -&g │ │ │ -00021e00: 743b 2048 2027 696e 2720 4827 223c 6272 t; H 'in' H'"
.  & │ │ │ -00021e20: 6e62 7370 3b26 6e62 7370 3b3a 3d20 283c nbsp; := (< │ │ │ -00021e30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00021e40: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00021e50: 6d61 7463 683c 2f73 7061 6e3e 203c 7370 match
H with< │ │ │ -00021eb0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00021ec0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00021ed0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00021ee0: 6e62 7370 3b7c 203c 6120 636c 6173 733d nbsp;| │ │ │ -00021f40: 6571 5f72 6566 6c3c 2f73 7061 6e3e 3c2f eq_refl => H'< │ │ │ -00021f80: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00021f90: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00021fa0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00021fb0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;end │ │ │ -00021fe0: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00021ff0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00022000: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00022010: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c73 ;  (at │ │ │ -00022040: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c level 10, H' │ │ │ -000220a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 at leve │ │ │ -000220f0: 6c3c 2f73 7061 6e3e 2031 302c 203c 7370 l 10, only parsing).
. & │ │ │ -00022160: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Notation
" │ │ │ -00022240: 3c2f 7370 616e 3e3c 2f61 3e27 7265 7727 'rew' │ │ │ -00022250: 2027 6465 7065 6e64 656e 7427 2026 6c74 'dependent' < │ │ │ -00022260: 3b2d 2048 2027 696e 2720 4827 223c 6272 ;- H 'in' H'"
.  & │ │ │ -00022280: 6e62 7370 3b26 6e62 7370 3b3a 3d20 283c nbsp; := (< │ │ │ -00022290: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000222a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000222b0: 6d61 7463 683c 2f73 7061 6e3e 203c 6120 match │ │ │ -000222f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ -00022310: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ -00022320: 203c 7370 616e 2063 6c61 7373 3d22 6964 H< │ │ │ -00022340: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> with

. & │ │ │ -00022380: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00022390: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000223a0: 7370 3b26 6e62 7370 3b7c 203c 6120 636c sp; | < │ │ │ -000223e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000223f0: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00022400: 6f72 223e 6571 5f72 6566 6c3c 2f73 7061 or">eq_refl => H'
. & │ │ │ -00022450: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00022460: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00022470: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; end
)
.  │ │ │ -000224b0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000224c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000224d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000224e0: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(at lev │ │ │ -00022530: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el 10, H' at < │ │ │ -00022590: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000225a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000225b0: 6c65 7665 6c3c 2f73 7061 6e3e 2031 302c level 10, │ │ │ -000225c0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -000225d0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000225e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000225f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00022600: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;f │ │ │ -00022620: 6f72 6d61 743c 2f73 7061 6e3e 2022 275b ormat "'[ │ │ │ -00022630: 2720 2772 6577 2720 2027 6465 7065 6e64 ' 'rew' 'depend │ │ │ -00022640: 656e 7427 2020 266c 743b 2d20 2027 2f20 ent' <- '/ │ │ │ -00022650: 2020 2027 2048 2020 696e 2020 272f 2720 ' H in '/' │ │ │ -00022660: 4827 2027 5d27 2229 2e3c 6272 2f3e 0a26 H' ']'").
.& │ │ │ -00022670: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Nota │ │ │ -000226a0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion &q │ │ │ -00022730: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e27 uot;' │ │ │ -00022740: 7265 7727 2027 6465 7065 6e64 656e 7427 rew' 'dependent' │ │ │ -00022750: 205b 2027 6675 6e27 2079 2070 203d 2667 [ 'fun' y p =&g │ │ │ -00022760: 743b 2050 205d 2048 2027 696e 2720 4827 t; P ] H 'in' H' │ │ │ -00022770: 223c 6272 2f3e 0a26 6e62 7370 3b26 6e62 "
. &nb │ │ │ -00022780: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -00022790: 3d20 283c 7370 616e 2063 6c61 7373 3d22 = (match │ │ │ -000227c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 H< │ │ │ -000227e0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as p │ │ │ -00022830: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c in ( │ │ │ -00022880: 5f3c 2f73 7061 6e3e 203c 6120 636c 6173 _ = │ │ │ -00022900: 3c2f 613e 203c 7370 616e 2063 6c61 7373 y) ret │ │ │ -00022950: 7572 6e3c 2f73 7061 6e3e 203c 7370 616e urn P │ │ │ -00022980: 203c 7370 616e 2063 6c61 7373 3d22 6964 with
.  & │ │ │ -000229c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000229d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000229e0: 7370 3b7c 203c 6120 636c 6173 733d 2269 sp;| eq │ │ │ -00022a40: 5f72 6566 6c3c 2f73 7061 6e3e 3c2f 613e _refl │ │ │ -00022a50: 203d 2667 743b 203c 7370 616e 2063 6c61 => H'
.  & │ │ │ -00022a90: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00022aa0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00022ab0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;end)< │ │ │ -00022ae0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00022af0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00022b00: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00022b10: 6e62 7370 3b26 6e62 7370 3b28 3c73 7061 nbsp; (at level 10, H' < │ │ │ -00022ba0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00022bb0: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ -00022bc0: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t level< │ │ │ -00022bf0: 2f73 7061 6e3e 2031 302c 203c 7370 616e /span> 10, y │ │ │ -00022c20: 203c 7370 616e 2063 6c61 7373 3d22 6964 na │ │ │ -00022c40: 6d65 3c2f 7370 616e 3e2c 203c 7370 616e me, p │ │ │ -00022c70: 203c 7370 616e 2063 6c61 7373 3d22 6964 na │ │ │ -00022c90: 6d65 3c2f 7370 616e 3e2c 3c62 722f 3e0a me,
. │ │ │ -00022ca0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00022cb0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00022cc0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00022cd0: 266e 6273 703b 266e 6273 703b 3c73 7061   format< │ │ │ -00022d00: 2f73 7061 6e3e 2022 275b 2720 2772 6577 /span> "'[' 'rew │ │ │ -00022d10: 2720 2027 6465 7065 6e64 656e 7427 2020 ' 'dependent' │ │ │ -00022d20: 5b20 2766 756e 2720 2079 2020 7020 203d [ 'fun' y p = │ │ │ -00022d30: 2667 743b 2020 5020 5d20 2027 2f20 2020 > P ] '/ │ │ │ -00022d40: 2027 2048 2020 696e 2020 272f 2720 4827 ' H in '/' H' │ │ │ -00022d50: 2027 5d27 2229 2e3c 6272 2f3e 0a26 6e62 ']'").
.&nb │ │ │ -00022d60: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Notati │ │ │ -00022d90: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on &quo │ │ │ -00022e20: 743b 3c2f 7370 616e 3e3c 2f61 3e27 7265 t;'re │ │ │ -00022e30: 7727 2027 6465 7065 6e64 656e 7427 202d w' 'dependent' - │ │ │ -00022e40: 2667 743b 205b 2027 6675 6e27 2079 2070 > [ 'fun' y p │ │ │ -00022e50: 203d 2667 743b 2050 205d 2048 2027 696e => P ] H 'in │ │ │ -00022e60: 2720 4827 223c 6272 2f3e 0a26 6e62 7370 ' H'"
.  │ │ │ -00022e70: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00022e80: 7370 3b3a 3d20 283c 7370 616e 2063 6c61 sp;:= (match
H as p in (_ =
y) │ │ │ -00023020: 3c73 7061 6e20 636c 6173 733d 2269 6422 return < │ │ │ -00023050: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00023060: 7469 746c 653d 2276 6172 223e 503c 2f73 title="var">P
with
. &nb │ │ │ -000230b0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000230c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000230d0: 3b26 6e62 7370 3b7c 203c 6120 636c 6173 ; | eq_refl │ │ │ -00023140: 3c2f 613e 203d 2667 743b 203c 7370 616e => H'
. &nb │ │ │ -00023180: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00023190: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000231a0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; end)
. & │ │ │ -000231e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000231f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00023200: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -00023210: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00023230: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ -00023260: 3c2f 7370 616e 3e20 3130 2c20 3c73 7061 10, H' at le │ │ │ -000232e0: 7665 6c3c 2f73 7061 6e3e 2031 302c 203c vel
10, < │ │ │ -000232f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00023300: 7469 746c 653d 2276 6172 223e 793c 2f73 title="var">y
name, < │ │ │ -00023340: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00023350: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p
name, < │ │ │ -00023390: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000233a0: 7469 746c 653d 2276 6172 223e 6f6e 6c79 title="var">only │ │ │ -000233b0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c parsing).
.  │ │ │ -000233f0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Notation │ │ │ -00023420: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 " │ │ │ -000234b0: 3c2f 7370 616e 3e3c 2f61 3e27 7265 7727 'rew' │ │ │ -000234c0: 2027 6465 7065 6e64 656e 7427 2026 6c74 'dependent' < │ │ │ -000234d0: 3b2d 205b 2027 6675 6e27 2079 2070 203d ;- [ 'fun' y p = │ │ │ -000234e0: 2667 743b 2050 205d 2048 2027 696e 2720 > P ] H 'in' │ │ │ -000234f0: 4827 223c 6272 2f3e 0a26 6e62 7370 3b26 H'"
. & │ │ │ -00023500: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00023510: 3b3a 3d20 283c 7370 616e 2063 6c61 7373 ;:= (match eq_sym H as │ │ │ -000235f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c p in │ │ │ -00023640: 3c2f 7370 616e 3e20 283c 7370 616e 2063
(_ < │ │ │ -00023670: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00023680: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00023690: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -000236a0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -000236b0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -000236e0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> y │ │ │ -00023710: 2920 3c73 7061 6e20 636c 6173 733d 2269 ) return │ │ │ -00023740: 203c 7370 616e 2063 6c61 7373 3d22 6964 P< │ │ │ -00023760: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> with
. & │ │ │ -000237a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000237b0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000237c0: 7370 3b26 6e62 7370 3b7c 203c 6120 636c sp; | < │ │ │ -00023800: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00023810: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00023820: 6f72 223e 6571 5f72 6566 6c3c 2f73 7061 or">eq_refl
=> H'
. & │ │ │ -00023870: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00023880: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00023890: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; end
)
.  │ │ │ -000238d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000238e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000238f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00023900: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(at lev │ │ │ -00023950: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el 10, H' at < │ │ │ -000239b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000239c0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000239d0: 6c65 7665 6c3c 2f73 7061 6e3e 2031 302c level 10, │ │ │ -000239e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 y< │ │ │ -00023a00: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> name, │ │ │ -00023a30: 203c 7370 616e 2063 6c61 7373 3d22 6964 p< │ │ │ -00023a50: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> name, │ │ │ -00023a80: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00023a90: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00023aa0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00023ab0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00023ac0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;f │ │ │ -00023ae0: 6f72 6d61 743c 2f73 7061 6e3e 2022 275b ormat "'[ │ │ │ -00023af0: 2720 2772 6577 2720 2027 6465 7065 6e64 ' 'rew' 'depend │ │ │ -00023b00: 656e 7427 2020 266c 743b 2d20 205b 2027 ent' <- [ ' │ │ │ -00023b10: 6675 6e27 2020 7920 2070 2020 3d26 6774 fun' y p => │ │ │ -00023b20: 3b20 2050 205d 2020 272f 2020 2020 2720 ; P ] '/ ' │ │ │ -00023b30: 4820 2069 6e20 2027 2f27 2048 2720 275d H in '/' H' '] │ │ │ -00023b40: 2722 292e 3c62 722f 3e0a 266e 6273 703b '").
.  │ │ │ -00023b50: 266e 6273 703b 3c73 7061 6e20 636c 6173  Notation< │ │ │ -00023b80: 2f73 7061 6e3e 203c 6120 6964 3d22 6638 /span> "< │ │ │ -00023c10: 2f73 7061 6e3e 3c2f 613e 2772 6577 2720 /span>'rew' │ │ │ -00023c20: 2764 6570 656e 6465 6e74 2720 5b20 5020 'dependent' [ P │ │ │ -00023c30: 5d20 4820 2769 6e27 2048 2722 3c62 722f ] H 'in' H'"
.  &n │ │ │ -00023c50: 6273 703b 266e 6273 703b 3a3d 2028 3c73 bsp; := (m │ │ │ -00023c80: 6174 6368 3c2f 7370 616e 3e20 3c73 7061 atch
H
as p
in (_ = │ │ │ -00023dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 y) return P │ │ │ -00023ea0: 793c 2f73 7061 6e3e 3c2f 613e 203c 6120 y < │ │ │ -00023ee0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00023ef0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00023f00: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >p w │ │ │ -00023f30: 6974 683c 2f73 7061 6e3e 3c62 722f 3e0a ith
. │ │ │ -00023f40: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00023f50: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00023f60: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00023f70: 7c20 3c61 2063 6c61 7373 3d22 6964 7265 | eq_re │ │ │ -00023fd0: 666c 3c2f 7370 616e 3e3c 2f61 3e20 3d26 fl =& │ │ │ -00023fe0: 6774 3b20 3c73 7061 6e20 636c 6173 733d gt; H'
. │ │ │ -00024010: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00024020: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00024030: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00024040: 3c73 7061 6e20 636c 6173 733d 2269 6422 end)
.  &n │ │ │ -00024080: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00024090: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000240a0: 703b 266e 6273 703b 283c 7370 616e 2063 p; (at level │ │ │ -00024100: 2031 302c 203c 7370 616e 2063 6c61 7373 10, H' at level 10,
.&nb │ │ │ -00024190: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000241a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000241b0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000241c0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; format "'[' 'rew' │ │ │ -00024200: 2764 6570 656e 6465 6e74 2720 205b 2050 'dependent' [ P │ │ │ -00024210: 205d 2020 272f 2020 2020 2720 4820 2069 ] '/ ' H i │ │ │ -00024220: 6e20 2027 2f27 2048 2720 275d 2722 292e n '/' H' ']'"). │ │ │ -00024230: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00024240: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Notation
"'rew' 'dep │ │ │ -00024310: 656e 6465 6e74 2720 2d26 6774 3b20 5b20 endent' -> [ │ │ │ -00024320: 5020 5d20 4820 2769 6e27 2048 2722 3c62 P ] H 'in' H'".   │ │ │ -00024340: 266e 6273 703b 266e 6273 703b 3a3d 2028   := ( │ │ │ -00024350: 3c73 7061 6e20 636c 6173 733d 2269 6422 match H as < │ │ │ -000243d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000243e0: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p in ( │ │ │ -00024420: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ = y │ │ │ -000244e0: 3c2f 7370 616e 3e29 203c 7370 616e 2063 ) return │ │ │ -00024510: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c P │ │ │ -00024570: 3c73 7061 6e20 636c 6173 733d 2269 6422 y < │ │ │ -000245a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000245b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000245c0: 6f67 6963 2e68 746d 6c23 703a 3137 3422 ogic.html#p:174" │ │ │ -000245d0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p │ │ │ -00024600: 3c73 7061 6e20 636c 6173 733d 2269 6422 with
.  &n │ │ │ -00024640: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00024650: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00024660: 703b 7c20 3c61 2063 6c61 7373 3d22 6964 p;| eq_ │ │ │ -000246c0: 7265 666c 3c2f 7370 616e 3e3c 2f61 3e20 refl │ │ │ -000246d0: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => H'
.  &n │ │ │ -00024710: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00024720: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00024730: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;end).   │ │ │ -00024770: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00024780: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00024790: 6273 703b 266e 6273 703b 283c 7370 616e bsp; (at
level 10, H' at │ │ │ -00024840: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c level 10,
.& │ │ │ -00024880: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00024890: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000248a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000248b0: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; only parsing) │ │ │ -00024910: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -00024920: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Notation "'rew' 'de │ │ │ -000249f0: 7065 6e64 656e 7427 2026 6c74 3b2d 205b pendent' <- [ │ │ │ -00024a00: 2050 205d 2048 2027 696e 2720 4827 223c P ] H 'in' H'"< │ │ │ -00024a10: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00024a20: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ -00024a30: 283c 7370 616e 2063 6c61 7373 3d22 6964 (match < │ │ │ -00024a60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00024a70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00024a80: 6f67 6963 2e68 746d 6c23 6571 5f73 796d ogic.html#eq_sym │ │ │ -00024a90: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq_sym │ │ │ -00024ae0: 483c 2f73 7061 6e3e 203c 7370 616e 2063 H as p in (_ = y) r │ │ │ -00024c50: 6574 7572 6e3c 2f73 7061 6e3e 203c 7370 eturn P y< │ │ │ -00024ce0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ -00024d40: 3c2f 613e 203c 7370 616e 2063 6c61 7373 with
. &nb │ │ │ -00024d80: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00024d90: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00024da0: 3b26 6e62 7370 3b7c 203c 6120 636c 6173 ; | eq_refl
│ │ │ -00024e10: 3c2f 613e 203d 2667 743b 203c 7370 616e => H'
. &nb │ │ │ -00024e50: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00024e60: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00024e70: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; end)
. & │ │ │ -00024eb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00024ec0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00024ed0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -00024ee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00024f00: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ -00024f30: 3c2f 7370 616e 3e20 3130 2c20 3c73 7061 10, H' at le │ │ │ -00024fb0: 7665 6c3c 2f73 7061 6e3e 2031 302c 3c62 vel
10,.   │ │ │ -00024fd0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00024fe0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00024ff0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00025000: 3c73 7061 6e20 636c 6173 733d 2269 6422 for │ │ │ -00025020: 6d61 743c 2f73 7061 6e3e 2022 275b 2720 mat "'[' │ │ │ -00025030: 2772 6577 2720 2027 6465 7065 6e64 656e 'rew' 'dependen │ │ │ -00025040: 7427 2020 266c 743b 2d20 205b 2050 205d t' <- [ P ] │ │ │ -00025050: 2020 272f 2020 2020 2720 4820 2069 6e20 '/ ' H in │ │ │ -00025060: 2027 2f27 2048 2720 275d 2722 292e 3c62 '/' H' ']'")..End │ │ │ -000250a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 EqNotati │ │ │ -00025100: 6f6e 733c 2f73 7061 6e3e 3c2f 613e 2e3c ons.< │ │ │ -00025110: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Imp │ │ │ -00025140: 6f72 743c 2f73 7061 6e3e 203c 6120 636c ort
EqNotations.
. │ │ │ -000251c0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Section< │ │ │ -000251f0: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> < │ │ │ -00025230: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00025240: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ -00025250: 6571 7561 6c69 7479 5f64 6570 3c2f 7370 equality_dep.
.&n │ │ │ -00025270: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Varia │ │ │ -000252a0: 626c 653c 2f73 7061 6e3e 203c 6120 6964 ble A : Type
.
.  │ │ │ -00025350: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Variable │ │ │ -00025380: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 B : │ │ │ -00025430: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00025460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00025470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00025480: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00025490: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -000254a0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Type.
.  │ │ │ -00025510: 266e 6273 703b 3c73 7061 6e20 636c 6173  Variable< │ │ │ -00025540: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> f : forall x, B │ │ │ -000256a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x.
.&nbs │ │ │ -00025710: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Variabl │ │ │ -00025740: 6573 3c2f 7370 616e 3e20 3c61 2069 643d es x │ │ │ -000257b0: 3c2f 613e 203c 6120 6964 3d22 6571 7561 y │ │ │ -00025820: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A │ │ │ -00025880: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f
.
..
. & │ │ │ -000258a0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Theorem
f_equa │ │ │ -00025930: 6c5f 6465 703c 2f73 7061 6e3e 3c2f 613e l_dep │ │ │ -00025940: 2028 3c61 2069 643d 2248 3a31 3839 2220 (H
: x< │ │ │ -00025a00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -00025a80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y) : rew H
in │ │ │ -00025ca0: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f x = │ │ │ -00025df0: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f y.
...End │ │ │ -00025ea0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 equali │ │ │ -00025f00: 7479 5f64 6570 3c2f 7370 616e 3e3c 2f61 ty_dep.
..
.< │ │ │ -00025f20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00025f30: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00025f40: 4c65 6d6d 613c 2f73 7061 6e3e 203c 6120 Lemma f_equal_dep2 │ │ │ -00025fb0: 3c2f 7370 616e 3e3c 2f61 3e20 7b3c 6120 {A< │ │ │ -00026010: 2f61 3e20 3c61 2069 643d 2241 273a 3139 /a> │ │ │ -00026040: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00026060: 4127 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A' B │ │ │ -000260c0: 3c2f 613e 203c 6120 6964 3d22 4227 3a31 B'} │ │ │ -00026120: 283c 6120 6964 3d22 663a 3139 3422 2063 (f : A< │ │ │ -000261d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00026220: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> A') (g : │ │ │ -00026310: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -00026340: 3c61 2069 643d 2261 3a31 3935 2220 636c a:A, B a< │ │ │ -000264b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00026500: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> B' (f a
))
. │ │ │ -00026660: 266e 6273 703b 266e 6273 703b 7b3c 6120   {x1 x2 │ │ │ -00026720: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ -00026780: 2f61 3e7d 207b 3c61 2069 643d 2279 313a /a>} {y1 │ │ │ -000267e0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : B x1} {y2 : B │ │ │ -00026960: 3c2f 613e 203c 6120 636c 6173 733d 2269 x2} (H │ │ │ -00026a20: 203a 203c 6120 636c 6173 733d 2269 6472 : x1 = x2 │ │ │ -00026b60: 3c2f 613e 2920 3a3c 6272 2f3e 0a26 6e62 ) :
.&nb │ │ │ -00026b70: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp; rew< │ │ │ -00026bf0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H │ │ │ -00026c50: 3c2f 613e 203c 6120 636c 6173 733d 2269 < │ │ │ -00026ca0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00026cb0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00026cc0: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ -00026cd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00026ce0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00026cf0: 6f67 6963 2e68 746d 6c23 7931 3a31 3939 ogic.html#y1:199 │ │ │ -00026d00: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">y1 < │ │ │ -00026d80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00026d90: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00026da0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= y2 │ │ │ -00026e10: 203c 6120 636c 6173 733d 2269 6472 6566 ->
rew< │ │ │ -00026f00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f_equal f< │ │ │ -00026fc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> H │ │ │ -00027020: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 in g x1 y │ │ │ -000271c0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 =
g x │ │ │ -00027300: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 │ │ │ -00027340: 3c73 7061 6e20 636c 6173 733d 2269 6422 y2. │ │ │ -00027370: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Le │ │ │ -000273a0: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma rew_ │ │ │ -00027400: 6f70 705f 723c 2f73 7061 6e3e 3c2f 613e opp_r │ │ │ -00027410: 203c 6120 6964 3d22 413a 3230 3222 2063 A (P: │ │ │ -000274c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00027520: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->Type) ( │ │ │ -000275f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00027610: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y< │ │ │ -00027670: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ -000276d0: 3c2f 613e 2920 283c 6120 6964 3d22 483a ) (H: │ │ │ -00027760: 3c73 7061 6e20 636c 6173 733d 2269 6422 x=y) (a:P< │ │ │ -00027920: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ -00027980: 3c2f 613e 2920 3a20 3c61 2063 6c61 7373 ) : rew H< │ │ │ -00027a60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ -00027ad0: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in │ │ │ -00027b30: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -00027b60: 203c 6120 636c 6173 733d 2269 6472 6566 <- H in a = a.
...Lemma rew_opp_l A ( │ │ │ -00027f00: 3c61 2069 643d 2250 3a32 3039 2220 636c P:A-& │ │ │ -00028020: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c73 gt;T │ │ │ -00028050: 7970 653c 2f73 7061 6e3e 2920 283c 6120 ype) (x< │ │ │ -000280b0: 2f61 3e20 3c61 2069 643d 2279 3a32 3131 /a> y< │ │ │ -00028100: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ -00028160: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (H │ │ │ -000281c0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :x= │ │ │ -000282a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ -00028300: 2920 283c 6120 6964 3d22 613a 3231 3322 ) (a:P< │ │ │ -000283b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x │ │ │ -00028410: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ -00028420: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00028430: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00028440: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00028450: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f27 tions.:::'rew'_' │ │ │ -00028460: 266c 743b 2d27 5f78 5f27 696e 275f 7822 <-'_x_'in'_x" │ │ │ -00028470: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >rew <- H in rew │ │ │ -00028680: 3c2f 613e 203c 6120 636c 6173 733d 2269 H │ │ │ -00028730: 3c73 7061 6e20 636c 6173 733d 2269 6422 in │ │ │ -00028760: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ -000287c0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00028830: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -00028870: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00028880: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00028890: 3e61 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >a...
.Theo │ │ │ -000288d0: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem f_equa │ │ │ -00028930: 6c32 3c2f 7370 616e 3e3c 2f61 3e20 3a3c l2 :< │ │ │ -00028940: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00028950: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;forall │ │ │ -00028980: 283c 6120 6964 3d22 4131 3a32 3134 2220 (A1< │ │ │ -000289d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A2 │ │ │ -00028a30: 3c2f 613e 203c 6120 6964 3d22 423a 3231 < │ │ │ -00028a60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00028a70: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ -00028a80: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :Typ │ │ │ -00028ab0: 653c 2f73 7061 6e3e 2920 283c 6120 6964 e) (f:A1 │ │ │ -00028b70: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -00028be0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ -00028c20: 3c73 7061 6e20 636c 6173 733d 2269 6422 A2 │ │ │ -00028c50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> B
) (x1 │ │ │ -00028d80: 3c2f 613e 203c 6120 6964 3d22 7931 3a32 y1:< │ │ │ -00028de0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00028df0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00028e00: 6f67 6963 2e68 746d 6c23 4131 3a32 3134 ogic.html#A1:214 │ │ │ -00028e10: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">A1)
. &n │ │ │ -00028e50: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00028e60: 283c 6120 6964 3d22 7832 3a32 3230 2220 (x2< │ │ │ -00028eb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> y2 │ │ │ -00028f10: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A2), x │ │ │ -00028fd0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 =
y1 │ │ │ -000290b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00029130: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x2 = y2 -&g │ │ │ -000292e0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ -00029320: 3c73 7061 6e20 636c 6173 733d 2269 6422 f < │ │ │ -00029350: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00029360: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00029370: 6f67 6963 2e68 746d 6c23 7831 3a32 3138 ogic.html#x1:218 │ │ │ -00029380: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x1 x2 │ │ │ -00029410: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00029490: 203c 6120 636c 6173 733d 2269 6472 6566 f y1 │ │ │ -00029550: 3c2f 613e 203c 6120 636c 6173 733d 2269 y2.
..< │ │ │ -000295c0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Register f_equal2 as core. │ │ │ -00029670: 6571 2e63 6f6e 6772 323c 2f73 7061 6e3e eq.congr2 │ │ │ -00029680: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.T │ │ │ -000296b0: 6865 6f72 656d 3c2f 7370 616e 3e20 3c61 heorem
f_e │ │ │ -00029710: 7175 616c 333c 2f73 7061 6e3e 3c2f 613e qual3 │ │ │ -00029720: 203a 3c62 722f 3e0a 266e 6273 703b 266e :
. &n │ │ │ -00029730: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;forall ( │ │ │ -00029790: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000297b0: 4131 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A1 A2 A3 B
:Type) (f:< │ │ │ -00029950: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00029960: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00029970: 6f67 6963 2e68 746d 6c23 4131 3a32 3232 ogic.html#A1:222 │ │ │ -00029980: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">A1 -> A │ │ │ -00029a80: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 -> │ │ │ -00029b00: 3c2f 613e 203c 6120 636c 6173 733d 2269 A3 - │ │ │ -00029bd0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00029be0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -00029c40: 2920 283c 6120 6964 3d22 7831 3a32 3237 ) (< │ │ │ -00029c70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00029c80: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -00029c90: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 y1:A1)
. │ │ │ -00029d60: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00029d70: 703b 266e 6273 703b 283c 6120 6964 3d22 p; (x2 < │ │ │ -00029e00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00029e10: 7469 746c 653d 2262 696e 6465 7222 3e79 title="binder">y │ │ │ -00029e20: 323c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 2: │ │ │ -00029e60: 3c73 7061 6e20 636c 6173 733d 2269 6422 A2) │ │ │ -00029e90: 2028 3c61 2069 643d 2278 333a 3233 3122 (x3 │ │ │ -00029ee0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y3:A3),
. │ │ │ -00029fb0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00029fc0: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; x1< │ │ │ -0002a020: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = y1 < │ │ │ -0002a150: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002a160: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0002a170: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> x2 │ │ │ -0002a1e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -0002a260: 203c 6120 636c 6173 733d 2269 6472 6566 y2< │ │ │ -0002a2c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0002a330: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0002a370: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002a380: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002a390: 3e78 333c 2f73 7061 6e3e 3c2f 613e 203c >x3 < │ │ │ -0002a3a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002a3b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002a3c0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -0002a3d0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -0002a3e0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -0002a410: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0002a470: 7933 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y3 -> f x1 x │ │ │ -0002a610: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 │ │ │ -0002a650: 3c73 7061 6e20 636c 6173 733d 2269 6422 x3 │ │ │ -0002a680: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0002a6f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0002a750: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f │ │ │ -0002a790: 3c73 7061 6e20 636c 6173 733d 2269 6422 y1 │ │ │ -0002a7c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y2 y3.
..
.Theorem f_equal4 :
.&nb │ │ │ -0002a930: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; forall │ │ │ -0002a960: 3c2f 7370 616e 3e20 283c 6120 6964 3d22 (A1 < │ │ │ -0002a9f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002aa00: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -0002aa10: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2
A3 A4 │ │ │ -0002aad0: 203c 6120 6964 3d22 423a 3233 3722 2063 B:Type
) (f:A1 │ │ │ -0002ac10: 203c 6120 636c 6173 733d 2269 6472 6566 ->
A2 │ │ │ -0002ace0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0002ad60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A3 -& │ │ │ -0002ae30: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -0002ae40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002ae50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002ae60: 6f67 6963 2e68 746d 6c23 4134 3a32 3336 ogic.html#A4:236 │ │ │ -0002ae70: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">A4 -> B< │ │ │ -0002af70: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -0002af80: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -0002af90: 7370 3b26 6e62 7370 3b28 3c61 2069 643d sp; (x1< │ │ │ -0002aff0: 2f61 3e20 3c61 2069 643d 2279 313a 3234 /a> │ │ │ -0002b020: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0002b040: 7931 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 y1:A1 │ │ │ -0002b0b0: 2920 283c 6120 6964 3d22 7832 3a32 3431 ) (< │ │ │ -0002b0e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002b0f0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -0002b100: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 y2:A2) (x3 y3: │ │ │ -0002b280: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A3) (x4 < │ │ │ -0002b340: 6120 6964 3d22 7934 3a32 3436 2220 636c a id="y4:246" cl │ │ │ -0002b350: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -0002b360: 3d22 2379 343a 3234 3622 3e3c 7370 616e ="#y4:246">y4
:A4 │ │ │ -0002b3f0: 3c2f 7370 616e 3e3c 2f61 3e29 2c3c 6272 ),
.  & │ │ │ -0002b410: 6e62 7370 3b26 6e62 7370 3b3c 6120 636c nbsp;  │ │ │ -0002b470: 7831 3c2f 7370 616e 3e3c 2f61 3e20 3c61 x1 = y │ │ │ -0002b550: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 -> │ │ │ -0002b5d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x2 =< │ │ │ -0002b6b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y2 -& │ │ │ -0002b780: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -0002b790: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002b7a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002b7b0: 6f67 6963 2e68 746d 6c23 7833 3a32 3433 ogic.html#x3:243 │ │ │ -0002b7c0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x3 < │ │ │ -0002b840: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002b850: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0002b860: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= y3 │ │ │ -0002b8d0: 203c 6120 636c 6173 733d 2269 6472 6566 -> x4 │ │ │ -0002b9a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = y4< │ │ │ -0002ba80: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0002bad0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> f< │ │ │ -0002bb60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x1 x2 x │ │ │ -0002bc80: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 │ │ │ -0002bcc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x4 │ │ │ -0002bcf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0002bd60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0002bdc0: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f │ │ │ -0002be00: 3c73 7061 6e20 636c 6173 733d 2269 6422 y1 │ │ │ -0002be30: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y2 y3 y4.
.. │ │ │ -0002bf60: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Theorem f_equal5
:
. │ │ │ -0002c000: 266e 6273 703b 266e 6273 703b 3c73 7061   for │ │ │ -0002c030: 616c 6c3c 2f73 7061 6e3e 2028 3c61 2069 all (A1 A2 │ │ │ -0002c0f0: 3c61 2069 643d 2241 333a 3234 3922 2063 A3 A4< │ │ │ -0002c1a0: 2f61 3e20 3c61 2069 643d 2241 353a 3235 /a> │ │ │ -0002c1d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0002c1f0: 4135 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A5 B │ │ │ -0002c250: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Type) (f< │ │ │ -0002c2d0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>: │ │ │ -0002c330: 4131 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A1 -> A2 │ │ │ -0002c480: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0002c490: 203c 6120 636c 6173 733d 2269 6472 6566 A3< │ │ │ -0002c4f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0002c560: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0002c5a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002c5b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002c5c0: 3e41 343c 2f73 7061 6e3e 3c2f 613e 203c >A4 < │ │ │ -0002c5d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002c5e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002c5f0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -0002c600: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -0002c610: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> A5 < │ │ │ -0002c6f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002c700: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0002c710: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> B)
. & │ │ │ -0002c790: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0002c7a0: 3b28 3c61 2069 643d 2278 313a 3235 3422 ;(
x1 │ │ │ -0002c7f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y1:A1) (x2 │ │ │ -0002c910: 3c2f 613e 203c 6120 6964 3d22 7932 3a32 y2:< │ │ │ -0002c970: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002c980: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002c990: 6f67 6963 2e68 746d 6c23 4132 3a32 3438 ogic.html#A2:248 │ │ │ -0002c9a0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">A2) ( │ │ │ -0002ca00: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0002ca20: 7833 3c2f 7370 616e 3e3c 2f61 3e20 3c61 x3 y3:A3< │ │ │ -0002cae0: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (x4 y4 │ │ │ -0002cba0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A4< │ │ │ -0002cc00: 2f61 3e29 2028 3c61 2069 643d 2278 353a /a>) (x5 │ │ │ -0002cc60: 3c61 2069 643d 2279 353a 3236 3322 2063 y5:A │ │ │ -0002cd10: 353c 2f73 7061 6e3e 3c2f 613e 292c 3c62 5),.   │ │ │ -0002cd30: 266e 6273 703b 266e 6273 703b 3c61 2063   < │ │ │ -0002cd70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002cd80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002cd90: 3e78 313c 2f73 7061 6e3e 3c2f 613e 203c >x1 < │ │ │ -0002cda0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002cdb0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002cdc0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -0002cdd0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -0002cde0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -0002ce10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0002ce70: 7931 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y1 ->
.  │ │ │ -0002cf00: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0002cf10: 7370 3b3c 6120 636c 6173 733d 2269 6472 sp;x2 = y2 │ │ │ -0002d050: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0002d0c0: 3b3c 2f73 7061 6e3e 3c2f 613e 3c62 722f ;
.  &n │ │ │ -0002d0e0: 6273 703b 266e 6273 703b 3c61 2063 6c61 bsp; x │ │ │ -0002d140: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 =
y3 │ │ │ -0002d220: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0002d2a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x4
= y4 -&g │ │ │ -0002d450: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; x5 │ │ │ -0002d4c0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0002d530: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = │ │ │ -0002d570: 3c73 7061 6e20 636c 6173 733d 2269 6422 y5 │ │ │ -0002d5a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> f x1 │ │ │ -0002d6d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0002d710: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002d720: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002d730: 3e78 323c 2f73 7061 6e3e 3c2f 613e 203c >x2 < │ │ │ -0002d740: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002d750: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002d760: 6f67 6963 2e68 746d 6c23 7833 3a32 3538 ogic.html#x3:258 │ │ │ -0002d770: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x3 x4 │ │ │ -0002d800: 3c2f 613e 203c 6120 636c 6173 733d 2269 x5 =< │ │ │ -0002d8e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f │ │ │ -0002d940: 3c2f 613e 203c 6120 636c 6173 733d 2269 y1 y2< │ │ │ -0002da00: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0002da60: 7933 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y3 y4 │ │ │ -0002dad0: 203c 6120 636c 6173 733d 2269 6472 6566 y5< │ │ │ -0002db30: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -0002db40: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Theorem │ │ │ -0002db70: 203c 6120 6964 3d22 665f 6571 7561 6c5f
< │ │ │ -0002dbb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002dbc0: 7469 746c 653d 226c 656d 6d61 223e 665f title="lemma">f_ │ │ │ -0002dbd0: 6571 7561 6c5f 636f 6d70 6f73 653c 2f73 equal_compose
A │ │ │ -0002dc40: 3c61 2069 643d 2242 3a32 3635 2220 636c B C (< │ │ │ -0002dcf0: 6120 6964 3d22 613a 3236 3722 2063 6c61 a id="a:267" cla │ │ │ -0002dd00: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0002dd10: 2223 613a 3236 3722 3e3c 7370 616e 2063 "#a:267">a │ │ │ -0002dd70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0002dd90: 623c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 b:< │ │ │ -0002ddd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002dde0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002ddf0: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 2028 >A) ( │ │ │ -0002de00: 3c61 2069 643d 2266 3a32 3639 2220 636c f:A-& │ │ │ -0002df20: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 gt; │ │ │ -0002df60: 3c73 7061 6e20 636c 6173 733d 2269 6422 B) │ │ │ -0002df90: 283c 6120 6964 3d22 673a 3237 3022 2063 (g:B
- │ │ │ -0002e0b0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e3c >< │ │ │ -0002e0c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002e0d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002e0e0: 6f67 6963 2e68 746d 6c23 433a 3236 3622 ogic.html#C:266" │ │ │ -0002e0f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >C) │ │ │ -0002e120: 2028 3c61 2069 643d 2265 3a32 3731 2220 (e
:a= │ │ │ -0002e250: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 b │ │ │ -0002e2b0: 3c2f 613e 2920 3a3c 6272 2f3e 0a26 6e62 ) :
.&nb │ │ │ -0002e2c0: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp; f_eq │ │ │ -0002e320: 7561 6c3c 2f73 7061 6e3e 3c2f 613e 203c ual < │ │ │ -0002e330: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002e340: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002e350: 6f67 6963 2e68 746d 6c23 673a 3237 3022 ogic.html#g:270" │ │ │ -0002e360: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >g │ │ │ -0002e390: 283c 6120 636c 6173 733d 2269 6472 6566 (f_equal f e
) = f_equal │ │ │ -0002e590: 3c2f 7370 616e 3e3c 2f61 3e20 283c 7370 (fu │ │ │ -0002e5c0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n a │ │ │ -0002e620: 3d26 6774 3b20 3c61 2063 6c61 7373 3d22 => g (f
a)) │ │ │ -0002e7a0: 653c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 e.
..
.
│ │ │ -0002e7c0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.The groupoid │ │ │ -0002e7e0: 2073 7472 7563 7475 7265 206f 6620 6571 structure of eq │ │ │ -0002e7f0: 7561 6c69 7479 200a 3c2f 6469 763e 0a3c uality .
.< │ │ │ -0002e800: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -0002e810: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Theore │ │ │ -0002e840: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m eq_trans_r │ │ │ -0002e8b0: 6566 6c5f 6c3c 2f73 7061 6e3e 3c2f 613e efl_l │ │ │ -0002e8c0: 203c 6120 6964 3d22 413a 3237 3322 2063 A (x │ │ │ -0002e970: 3c61 2069 643d 2279 3a32 3735 2220 636c y:A) (e │ │ │ -0002ea80: 3a3c 6120 636c 6173 733d 2269 6472 6566 :x │ │ │ -0002eb50: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 = │ │ │ -0002ebb0: 793c 2f73 7061 6e3e 3c2f 613e 2920 3a20 y) : │ │ │ -0002ebc0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_trans eq_refl< │ │ │ -0002ec90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ -0002ecf0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -0002ed70: 203c 6120 636c 6173 733d 2269 6472 6566 e.
..
.< │ │ │ -0002ede0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002edf0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0002ee00: 5468 656f 7265 6d3c 2f73 7061 6e3e 203c Theorem < │ │ │ -0002ee10: 6120 6964 3d22 6571 5f74 7261 6e73 5f72 a id="eq_trans_r │ │ │ -0002ee20: 6566 6c5f 7222 2063 6c61 7373 3d22 6964 efl_r" class="id │ │ │ -0002ee30: 7265 6622 2068 7265 663d 2223 6571 5f74 ref" href="#eq_t │ │ │ -0002ee40: 7261 6e73 5f72 6566 6c5f 7222 3e3c 7370 rans_refl_r">eq_t │ │ │ -0002ee70: 7261 6e73 5f72 6566 6c5f 723c 2f73 7061 rans_refl_r A (< │ │ │ -0002eee0: 6120 6964 3d22 783a 3237 3822 2063 6c61 a id="x:278" cla │ │ │ -0002eef0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0002ef00: 2223 783a 3237 3822 3e3c 7370 616e 2063 "#x:278">x │ │ │ -0002ef60: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0002ef80: 793c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 y:< │ │ │ -0002efc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0002efd0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0002efe0: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 2028 >A) ( │ │ │ -0002eff0: 3c61 2069 643d 2265 3a32 3830 2220 636c e:x=y) : eq_tra │ │ │ -0002f1e0: 6e73 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ns │ │ │ -0002f220: 3c73 7061 6e20 636c 6173 733d 2269 6422 e < │ │ │ -0002f250: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0002f260: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0002f270: 6f67 6963 2e68 746d 6c23 6571 5f72 6566 ogic.html#eq_ref │ │ │ -0002f280: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">eq_refl< │ │ │ -0002f2b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = e.
..< │ │ │ -0002f3a0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Theorem
eq_sym_inv │ │ │ -0002f440: 6f6c 7574 6976 653c 2f73 7061 6e3e 3c2f olutive A (x y
:A) (e:x< │ │ │ -0002f670: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -0002f6c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = │ │ │ -0002f720: 3c73 7061 6e20 636c 6173 733d 2269 6422 y) │ │ │ -0002f750: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : eq_sym (eq_sym< │ │ │ -0002f810: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ -0002f870: 3c2f 7370 616e 3e3c 2f61 3e29 203c 6120 ) =
e.
. │ │ │ -0002f960: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Theorem< │ │ │ -0002f990: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_tra │ │ │ -0002fa00: 6e73 5f73 796d 5f69 6e76 5f6c 3c2f 7370 ns_sym_inv_l A ( │ │ │ -0002fa70: 3c61 2069 643d 2278 3a32 3836 2220 636c x y: │ │ │ -0002fb50: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ -0002fb80: 283c 6120 6964 3d22 653a 3238 3822 2063 (e:x
=< │ │ │ -0002fcb0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>y< │ │ │ -0002fd10: 2f61 3e29 203a 203c 6120 636c 6173 733d /a>) : eq_tr │ │ │ -0002fd70: 616e 733c 2f73 7061 6e3e 3c2f 613e 2028 ans ( │ │ │ -0002fd80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_sym< │ │ │ -0002fde0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ -0002fe40: 3c2f 613e 2920 3c61 2063 6c61 7373 3d22 ) e = eq_r │ │ │ -0002ff80: 6566 6c3c 2f73 7061 6e3e 3c2f 613e 2e3c efl.< │ │ │ -0002ff90: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ -0002ffc0: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem │ │ │ -00030010: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ -00030030: 715f 7472 616e 735f 7379 6d5f 696e 765f q_trans_sym_inv_ │ │ │ -00030040: 723c 2f73 7061 6e3e 3c2f 613e 203c 6120 r A< │ │ │ -000300a0: 2f61 3e20 283c 6120 6964 3d22 783a 3239 /a> (< │ │ │ -000300d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000300e0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -000300f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y:A< │ │ │ -000301b0: 2f61 3e29 2028 3c61 2069 643d 2265 3a32 /a>) ( │ │ │ -000301e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00030200: 653c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 e:< │ │ │ -00030240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00030250: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00030260: 3e78 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >x=
y
) : │ │ │ -000303a0: 6571 5f74 7261 6e73 3c2f 7370 616e 3e3c eq_trans< │ │ │ -000303b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ -00030410: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (eq_sym e< │ │ │ -000304d0: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) = eq_refl< │ │ │ -000305c0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -000305d0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Theorem │ │ │ -00030600: 203c 6120 6964 3d22 6571 5f74 7261 6e73
eq_t │ │ │ -00030660: 7261 6e73 5f61 7373 6f63 3c2f 7370 616e rans_assoc │ │ │ -000306a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000306c0: 413c 2f73 7061 6e3e 3c2f 613e 2028 3c61 A (x │ │ │ -00030720: 3c2f 613e 203c 6120 6964 3d22 793a 3239 < │ │ │ -00030750: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00030760: 7469 746c 653d 2262 696e 6465 7222 3e79 title="binder">y │ │ │ -00030770: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 z t:A< │ │ │ -00030880: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (e< │ │ │ -000308e0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:x │ │ │ -00030940: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ -000309c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000309d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000309e0: 6f67 6963 2e68 746d 6c23 793a 3239 3522 ogic.html#y:295" │ │ │ -000309f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y) │ │ │ -00030a20: 2028 3c61 2069 643d 2265 273a 3239 3922 (e' │ │ │ -00030a70: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -00030ad0: 793c 2f73 7061 6e3e 3c2f 613e 3c61 2063 y=z) (e'':z=t) :
.  │ │ │ -00030d60: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; 
eq_tr │ │ │ -00030dc0: 616e 733c 2f73 7061 6e3e 3c2f 613e 203c ans < │ │ │ -00030dd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00030de0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00030df0: 6f67 6963 2e68 746d 6c23 653a 3239 3822 ogic.html#e:298" │ │ │ -00030e00: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >e │ │ │ -00030e30: 283c 6120 636c 6173 733d 2269 6472 6566 (eq_trans
e' │ │ │ -00030ef0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00030f30: 3c73 7061 6e20 636c 6173 733d 2269 6422 e'' │ │ │ -00030f60: 2920 3c61 2063 6c61 7373 3d22 6964 7265 ) < │ │ │ -00030fb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00030fc0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00030fd0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= eq_trans (eq_tr │ │ │ -000310a0: 616e 733c 2f73 7061 6e3e 3c2f 613e 203c ans < │ │ │ -000310b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000310c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000310d0: 6f67 6963 2e68 746d 6c23 653a 3239 3822 ogic.html#e:298" │ │ │ -000310e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >e │ │ │ -00031110: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e') e''
.
.. │ │ │ -000311e0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Theorem rew_map │ │ │ -000312a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000312c0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A B< │ │ │ -00031320: 2f61 3e20 283c 6120 6964 3d22 503a 3330 /a> (< │ │ │ -00031350: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00031360: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -00031370: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -000313d0: 423c 2f73 7061 6e3e 3c2f 613e 3c61 2063 B->< │ │ │ -00031450: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a>Type) │ │ │ -00031480: 2028 3c61 2069 643d 2266 3a33 3034 2220 (f:A │ │ │ -000315a0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -000315b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -00031610: 2920 3c61 2069 643d 2278 313a 3330 3522 ) x1 │ │ │ -00031660: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 x2 (H:x1 │ │ │ -00031780: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -000317f0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00031850: 7832 3c2f 7370 616e 3e3c 2f61 3e29 2028 x2) ( │ │ │ -00031860: 3c61 2069 643d 2279 3a33 3038 2220 636c y:P (f x │ │ │ -000319d0: 313c 2f73 7061 6e3e 3c2f 613e 2929 203a 1)) : │ │ │ -000319e0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -000319f0: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;< │ │ │ -00031a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00031a50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00031a60: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ -00031a70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 [ │ │ │ -00031ae0: 3c2f 7370 616e 3e3c 2f61 3e3c 7370 616e fun< │ │ │ -00031b10: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> x =& │ │ │ -00031b70: 6774 3b20 3c61 2063 6c61 7373 3d22 6964 gt; P │ │ │ -00031bd0: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f x)]< │ │ │ -00031d10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H │ │ │ -00031d70: 3c2f 613e 203c 6120 636c 6173 733d 2269 in y │ │ │ -00031ea0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -00031ed0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00031ee0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00031ef0: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00031f00: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00031f10: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew f_e │ │ │ -00031fa0: 7175 616c 3c2f 7370 616e 3e3c 2f61 3e20 qual │ │ │ -00031fb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ -00032010: 203c 6120 636c 6173 733d 2269 6472 6566 H in │ │ │ -000320e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00032140: 793c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 y.
..
.Theor │ │ │ -00032180: 656d 3c2f 7370 616e 3e20 3c61 2069 643d em eq_trans_map
{A │ │ │ -00032250: 203c 6120 6964 3d22 423a 3331 3122 2063 B} {x1< │ │ │ -00032300: 2f61 3e20 3c61 2069 643d 2278 323a 3331 /a> │ │ │ -00032330: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00032350: 7832 3c2f 7370 616e 3e3c 2f61 3e20 3c61 x2 x3:A
} {y1 │ │ │ -00032470: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :B x1
} {y2 │ │ │ -00032590: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :B x2
} {y3 │ │ │ -000326b0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :B x3
}
.& │ │ │ -00032780: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (H1:x1
=< │ │ │ -000328c0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>x2) (H2:x2 │ │ │ -000329e0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ -00032a60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00032a70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00032a80: 6f67 6963 2e68 746d 6c23 7833 3a33 3134 ogic.html#x3:314 │ │ │ -00032a90: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x3) (H1' │ │ │ -00032b20: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : re │ │ │ -00032b90: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w │ │ │ -00032bd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 H1 │ │ │ -00032c00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 in y │ │ │ -00032cd0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 =
y2 │ │ │ -00032db0: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (H2'< │ │ │ -00032e10: 2f73 7061 6e3e 3c2f 613e 3a20 3c61 2063 /span>: rew H2 in< │ │ │ -00032f70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y2 = y3) :
.&n │ │ │ -000330c0: 6273 703b 266e 6273 703b 3c61 2063 6c61 bsp; rew │ │ │ -00033140: 3c2f 613e 203c 6120 636c 6173 733d 2269 eq_tran │ │ │ -000331a0: 733c 2f73 7061 6e3e 3c2f 613e 203c 6120 s │ │ │ -000331e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 H1 │ │ │ -00033210: 3c61 2063 6c61 7373 3d22 6964 7265 6622 H2 i │ │ │ -000332e0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n │ │ │ -00033320: 3c73 7061 6e20 636c 6173 733d 2269 6422 y1 │ │ │ -00033350: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -000333c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00033400: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00033410: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00033420: 3e79 333c 2f73 7061 6e3e 3c2f 613e 2e3c >y3.< │ │ │ -00033430: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ -00033460: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma map_s │ │ │ -000334c0: 7562 7374 3c2f 7370 616e 3e3c 2f61 3e20 ubst │ │ │ -000334d0: 7b3c 6120 6964 3d22 413a 3332 3222 2063 {A} {P │ │ │ -00033580: 203c 6120 6964 3d22 513a 3332 3422 2063 Q:A
- │ │ │ -000336a0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e3c >< │ │ │ -000336b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000336c0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000336d0: 5479 7065 3c2f 7370 616e 3e7d 2028 3c61 Type} (f │ │ │ -00033730: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall │ │ │ -00033790: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000337b0: 783c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 x, │ │ │ -000337f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -00033820: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00033830: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00033840: 6f67 6963 2e68 746d 6c23 783a 3332 3522 ogic.html#x:325" │ │ │ -00033850: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x │ │ │ -00033880: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Q x) {x y} (H:x< │ │ │ -00033b20: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -00033b70: 3c73 7061 6e20 636c 6173 733d 2269 6422 = │ │ │ -00033bd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 y) │ │ │ -00033c00: 283c 6120 6964 3d22 7a3a 3333 3022 2063 (z:P
x) :
.  rew H in< │ │ │ -00033e80: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f │ │ │ -00033ee0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x z = f< │ │ │ -00034080: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ -000340e0: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 ( │ │ │ -00034130: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -00034160: 203c 6120 636c 6173 733d 2269 6472 6566 H in │ │ │ -00034230: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00034290: 7a3c 2f73 7061 6e3e 3c2f 613e 292e 3c62 z)...
.Lemm │ │ │ -000342d0: 613c 2f73 7061 6e3e 203c 6120 6964 3d22 a map_subst_map< │ │ │ -00034340: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A B} {P:A< │ │ │ -000344b0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>->< │ │ │ -00034520: 2f73 7061 6e3e 3c2f 613e 3c73 7061 6e20 /span>Type< │ │ │ -00034550: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {Q: │ │ │ -000345b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -00034610: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->Type} ( │ │ │ -000346e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00034700: 663c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 f:< │ │ │ -00034740: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00034750: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00034760: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A-> │ │ │ -000347e0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 B │ │ │ -00034840: 3c2f 613e 2920 283c 6120 6964 3d22 673a ) (g : │ │ │ -000348a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -000348d0: 6120 6964 3d22 783a 3333 3622 2063 6c61 a id="x:336" cla │ │ │ -000348e0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000348f0: 2223 783a 3333 3622 3e3c 7370 616e 2063 "#x:336">x, P x
│ │ │ -00034a50: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00034a60: 203c 6120 636c 6173 733d 2269 6472 6566 Q (f< │ │ │ -00034b20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -00034b80: 3c2f 613e 2929 3c62 722f 3e0a 266e 6273 ))
.&nbs │ │ │ -00034b90: 703b 266e 6273 703b 7b3c 6120 6964 3d22 p; {x │ │ │ -00034bf0: 3c61 2069 643d 2279 3a33 3339 2220 636c y} (H: │ │ │ -00034ca0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ -00034d00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -00034d70: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c y │ │ │ -00034dd0: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (z │ │ │ -00034e30: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :P x) :
.& │ │ │ -00034f00: 6e62 7370 3b26 6e62 7370 3b3c 6120 636c nbsp; rew f_equal │ │ │ -00034fe0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00035040: 663c 2f73 7061 6e3e 3c2f 613e 203c 6120 f < │ │ │ -00035080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00035090: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000350a0: 3e48 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >H in g x z< │ │ │ -00035240: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = g y
(rew │ │ │ -00035400: 3c2f 613e 203c 6120 636c 6173 733d 2269 H │ │ │ -000354b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 in │ │ │ -000354e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 z │ │ │ -00035540: 292e 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c ).
..
.< │ │ │ -00035550: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00035560: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00035570: 4c65 6d6d 613c 2f73 7061 6e3e 203c 6120 Lemma rew_ │ │ │ -000355d0: 7377 6170 3c2f 7370 616e 3e3c 2f61 3e20 swap │ │ │ -000355e0: 3c61 2069 643d 2241 3a33 3432 2220 636c A (P:< │ │ │ -00035690: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000356a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000356b0: 6f67 6963 2e68 746d 6c23 413a 3334 3222 ogic.html#A:342" │ │ │ -000356c0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ -000356f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00035700: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00035710: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00035720: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00035730: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->Type) │ │ │ -000357c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000357e0: 7831 3c2f 7370 616e 3e3c 2f61 3e20 3c61 x1 x2 (H: │ │ │ -000358a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x1< │ │ │ -00035950: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00035960: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00035970: 3e3d 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >= │ │ │ -000359b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x2) │ │ │ -000359e0: 2028 3c61 2069 643d 2279 313a 3334 3722 (y1 │ │ │ -00035a30: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -00035a90: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ -00035ad0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x1) │ │ │ -00035b00: 2028 3c61 2069 643d 2279 323a 3334 3822 (y2 │ │ │ -00035b50: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -00035bb0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ -00035bf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x2) │ │ │ -00035c20: 203a 203c 6120 636c 6173 733d 2269 6472 : r │ │ │ -00035c90: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ -00035cd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 H < │ │ │ -00035d00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00035d10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00035d20: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00035d30: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00035d40: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in y1 │ │ │ -00035dd0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = y2< │ │ │ -00035eb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00035f00: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> y1 = rew │ │ │ -00036090: 3c2f 613e 203c 6120 636c 6173 733d 2269 <- H< │ │ │ -00036170: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> i │ │ │ -000361f0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n │ │ │ -00036230: 3c73 7061 6e20 636c 6173 733d 2269 6422 y2. │ │ │ -00036260: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Le │ │ │ -00036290: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma │ │ │ -000362f0: 7265 775f 636f 6d70 6f73 653c 2f73 7061 rew_compose A (< │ │ │ -00036360: 6120 6964 3d22 503a 3335 3022 2063 6c61 a id="P:350" cla │ │ │ -00036370: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00036380: 2223 503a 3335 3022 3e3c 7370 616e 2063 "#P:350">P:A-&g │ │ │ -00036480: 743b 3c2f 7370 616e 3e3c 2f61 3e3c 7370 t;Ty │ │ │ -000364b0: 7065 3c2f 7370 616e 3e29 203c 6120 6964 pe) x1 │ │ │ -00036510: 3c2f 613e 203c 6120 6964 3d22 7832 3a33 x2 < │ │ │ -00036570: 6120 6964 3d22 7833 3a33 3533 2220 636c a id="x3:353" cl │ │ │ -00036580: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -00036590: 3d22 2378 333a 3335 3322 3e3c 7370 616e ="#x3:353">x3
(H1< │ │ │ -00036620: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:x1=x2< │ │ │ -00036760: 2f61 3e29 2028 3c61 2069 643d 2248 323a /a>) (H2: │ │ │ -000367c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x2< │ │ │ -00036870: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00036880: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00036890: 3e3d 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >= │ │ │ -000368d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x3) │ │ │ -00036900: 2028 3c61 2069 643d 2279 3a33 3536 2220 (y
:P x │ │ │ -00036a10: 313c 2f73 7061 6e3e 3c2f 613e 2920 3a3c 1) :< │ │ │ -00036a20: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00036a30: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;rew │ │ │ -00036aa0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00036ae0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00036af0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00036b00: 3e48 323c 2f73 7061 6e3e 3c2f 613e 203c >H2 < │ │ │ -00036b10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00036b20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00036b30: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00036b40: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00036b50: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in
rew< │ │ │ -00036c00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H1 in │ │ │ -00036ce0: 203c 6120 636c 6173 733d 2269 6472 6566 y < │ │ │ -00036d90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00036da0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00036db0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= rew
(eq_trans H1 │ │ │ -00036f70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00036fb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00036fc0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00036fd0: 3e48 323c 2f73 7061 6e3e 3c2f 613e 3c61 >H2) in │ │ │ -000370d0: 203c 6120 636c 6173 733d 2269 6472 6566 y.
..
.< │ │ │ -00037140: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Extra p │ │ │ -00037160: 726f 7065 7274 6965 7320 6f66 2065 7175 roperties of equ │ │ │ -00037170: 616c 6974 7920 0a3c 2f64 6976 3e0a 3c64 ality .
. │ │ │ -00037190: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Theorem │ │ │ -000371c0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 │ │ │ -00037200: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ -00037220: 715f 6964 5f63 6f6d 6d5f 6c3c 2f73 7061 q_id_comm_l A (< │ │ │ -00037290: 6120 6964 3d22 663a 3335 3822 2063 6c61 a id="f:358" cla │ │ │ -000372a0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000372b0: 2223 663a 3335 3822 3e3c 7370 616e 2063 "#f:358">f:A-&g │ │ │ -000373b0: 743b 3c2f 7370 616e 3e3c 2f61 3e3c 6120 t;< │ │ │ -000373f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00037400: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00037410: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 2028 >A) ( │ │ │ -00037420: 3c61 2069 643d 2248 663a 3336 3022 2063 Hf:foral │ │ │ -000374a0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l a, │ │ │ -00037500: 203c 6120 636c 6173 733d 2269 6472 6566 a < │ │ │ -000375b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000375c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000375d0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ -00037610: 3c73 7061 6e20 636c 6173 733d 2269 6422 f < │ │ │ -00037640: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00037650: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00037660: 6f67 6963 2e68 746d 6c23 613a 3335 3922 ogic.html#a:359" │ │ │ -00037670: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >a) │ │ │ -000376a0: 203c 6120 6964 3d22 613a 3336 3122 2063 a : f_e │ │ │ -00037750: 7175 616c 3c2f 7370 616e 3e3c 2f61 3e20 qual │ │ │ -00037760: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ -000377c0: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (Hf │ │ │ -00037820: 3c2f 613e 203c 6120 636c 6173 733d 2269 a) = Hf (f a).
. │ │ │ -00037a30: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Theorem< │ │ │ -00037a60: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> < │ │ │ -00037aa0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00037ab0: 7469 746c 653d 226c 656d 6d61 223e 6571 title="lemma">eq │ │ │ -00037ac0: 5f69 645f 636f 6d6d 5f72 3c2f 7370 616e _id_comm_r │ │ │ -00037b00: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00037b20: 413c 2f73 7061 6e3e 3c2f 613e 2028 3c61 A (f │ │ │ -00037b80: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A-> │ │ │ -00037c50: 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 ; │ │ │ -00037cb0: 413c 2f73 7061 6e3e 3c2f 613e 2920 283c A) (< │ │ │ -00037cc0: 6120 6964 3d22 4866 3a33 3635 2220 636c a id="Hf:365" cl │ │ │ -00037cd0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -00037ce0: 3d22 2348 663a 3336 3522 3e3c 7370 616e ="#Hf:365">Hf:forall │ │ │ -00037d40: 3c2f 7370 616e 3e20 3c61 2069 643d 2261 a, │ │ │ -00037da0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ -00037e00: 203c 6120 636c 6173 733d 2269 6472 6566 a < │ │ │ -00037eb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00037ec0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00037ed0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ -00037f10: 3c73 7061 6e20 636c 6173 733d 2269 6422 a) │ │ │ -00037f40: 3c61 2069 643d 2261 3a33 3636 2220 636c a : f_eq │ │ │ -00037ff0: 7561 6c3c 2f73 7061 6e3e 3c2f 613e 203c ual < │ │ │ -00038000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00038010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00038020: 6f67 6963 2e68 746d 6c23 663a 3336 3322 ogic.html#f:363" │ │ │ -00038030: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >f │ │ │ -00038060: 283c 6120 636c 6173 733d 2269 6472 6566 (Hf< │ │ │ -000380c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -00038120: 3c2f 613e 2920 3c61 2063 6c61 7373 3d22 ) = Hf │ │ │ -00038200: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f a).
.. │ │ │ -000382d0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Lemma eq_refl_map │ │ │ -00038370: 5f64 6973 7472 3c2f 7370 616e 3e3c 2f61 _distr A
B │ │ │ -00038430: 3c61 2069 643d 2278 3a33 3731 2220 636c x (f:< │ │ │ -000384e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000384f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00038500: 6f67 6963 2e68 746d 6c23 413a 3336 3922 ogic.html#A:369" │ │ │ -00038510: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ -00038540: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00038550: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00038560: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00038570: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00038580: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->B) : f_e │ │ │ -00038670: 7175 616c 3c2f 7370 616e 3e3c 2f61 3e20 qual │ │ │ -00038680: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ -000386e0: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (eq_re │ │ │ -00038740: 666c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 fl │ │ │ -00038780: 3c73 7061 6e20 636c 6173 733d 2269 6422 x) │ │ │ -000387b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -00038820: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00038860: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl (f x< │ │ │ -00038950: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
.Lemma< │ │ │ -00038990: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_tra │ │ │ -00038a00: 6e73 5f6d 6170 5f64 6973 7472 3c2f 7370 ns_map_distr A < │ │ │ -00038a70: 6120 6964 3d22 423a 3337 3422 2063 6c61 a id="B:374" cla │ │ │ -00038a80: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00038a90: 2223 423a 3337 3422 3e3c 7370 616e 2063 "#B:374">B │ │ │ -00038af0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00038b10: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y< │ │ │ -00038b70: 2f61 3e20 3c61 2069 643d 227a 3a33 3737 /a> z< │ │ │ -00038bc0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (f:A< │ │ │ -00038c80: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>->< │ │ │ -00038cf0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>B< │ │ │ -00038d50: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (e< │ │ │ -00038db0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:x │ │ │ -00038e10: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ -00038e90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00038ea0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00038eb0: 6f67 6963 2e68 746d 6c23 793a 3337 3622 ogic.html#y:376" │ │ │ -00038ec0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y) │ │ │ -00038ef0: 2028 3c61 2069 643d 2265 273a 3338 3022 (e' │ │ │ -00038f40: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ -00038fa0: 793c 2f73 7061 6e3e 3c2f 613e 3c61 2063 y=z) : < │ │ │ -000390c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000390d0: 7469 746c 653d 226c 656d 6d61 223e 665f title="lemma">f_ │ │ │ -000390e0: 6571 7561 6c3c 2f73 7061 6e3e 3c2f 613e equal │ │ │ -000390f0: 203c 6120 636c 6173 733d 2269 6472 6566 f (eq_trans< │ │ │ -000391b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ -00039210: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00039250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00039260: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00039270: 3e65 273c 2f73 7061 6e3e 3c2f 613e 2920 >e') │ │ │ -00039280: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -000392f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00039350: 6571 5f74 7261 6e73 3c2f 7370 616e 3e3c eq_trans< │ │ │ -00039360: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (f_equal< │ │ │ -000393c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ -00039420: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00039480: 653c 2f73 7061 6e3e 3c2f 613e 2920 283c e) (< │ │ │ -00039490: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000394a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000394b0: 6f67 6963 2e68 746d 6c23 665f 6571 7561 ogic.html#f_equa │ │ │ -000394c0: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">f_equal │ │ │ -000394f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 f e').
. │ │ │ -000395c0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Lemma
eq_sym_map_d │ │ │ -00039660: 6973 7472 3c2f 7370 616e 3e3c 2f61 3e20 istr │ │ │ -00039670: 3c61 2069 643d 2241 3a33 3831 2220 636c A B (< │ │ │ -00039720: 6120 6964 3d22 783a 3338 3322 2063 6c61 a id="x:383" cla │ │ │ -00039730: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00039740: 2223 783a 3338 3322 3e3c 7370 616e 2063 "#x:383">x │ │ │ -000397a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000397c0: 793c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 y:< │ │ │ -00039800: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00039810: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00039820: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 2028 >A) ( │ │ │ -00039830: 3c61 2069 643d 2266 3a33 3835 2220 636c f:A-& │ │ │ -00039950: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 gt; │ │ │ -00039990: 3c73 7061 6e20 636c 6173 733d 2269 6422 B) │ │ │ -000399c0: 283c 6120 6964 3d22 653a 3338 3622 2063 (e:x
=< │ │ │ -00039af0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>y< │ │ │ -00039b50: 2f61 3e29 203a 203c 6120 636c 6173 733d /a>) : eq_sym< │ │ │ -00039bb0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> ( │ │ │ -00039bf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 f │ │ │ -00039c10: 5f65 7175 616c 3c2f 7370 616e 3e3c 2f61 _equal f e< │ │ │ -00039ce0: 2f61 3e29 203c 6120 636c 6173 733d 2269 /a>) = │ │ │ -00039d60: 203c 6120 636c 6173 733d 2269 6472 6566 f_equal f (eq_sy │ │ │ -00039e80: 6d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 m < │ │ │ -00039ec0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00039ed0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00039ee0: 3e65 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >e).< │ │ │ -00039ef0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ -00039f20: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma eq_ │ │ │ -00039f90: 7472 616e 735f 7379 6d5f 6469 7374 723c trans_sym_distr< │ │ │ -00039fa0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A (x y │ │ │ -0003a0b0: 203c 6120 6964 3d22 7a3a 3339 3022 2063 z:A) (e:x< │ │ │ -0003a270: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003a280: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0003a290: 3e3d 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >=< │ │ │ -0003a2d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003a2e0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0003a2f0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 2028 >y) ( │ │ │ -0003a300: 3c61 2069 643d 2265 273a 3339 3222 2063 e':y< │ │ │ -0003a3b0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>=z) : eq_sy │ │ │ -0003a4f0: 6d3c 2f73 7061 6e3e 3c2f 613e 2028 3c61 m (eq_trans e e') = eq_tr │ │ │ -0003a700: 616e 733c 2f73 7061 6e3e 3c2f 613e 2028 ans ( │ │ │ -0003a710: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_sym< │ │ │ -0003a770: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e') (eq_sy │ │ │ -0003a830: 6d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 m < │ │ │ -0003a870: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003a880: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0003a890: 3e65 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >e).< │ │ │ -0003a8a0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ -0003a8d0: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma eq_ │ │ │ -0003a940: 7472 616e 735f 7265 775f 6469 7374 723c trans_rew_distr< │ │ │ -0003a950: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A (P:A< │ │ │ -0003aa60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0003aab0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Type) │ │ │ -0003ab10: 2028 3c61 2069 643d 2278 3a33 3935 2220 (x y │ │ │ -0003abc0: 3c61 2069 643d 227a 3a33 3937 2220 636c z:A) (e │ │ │ -0003acd0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :x │ │ │ -0003ada0: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 = │ │ │ -0003ae00: 793c 2f73 7061 6e3e 3c2f 613e 2920 283c y) (< │ │ │ -0003ae10: 6120 6964 3d22 6527 3a33 3939 2220 636c a id="e':399" cl │ │ │ -0003ae20: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -0003ae30: 3d22 2365 273a 3339 3922 3e3c 7370 616e ="#e':399">e':y= │ │ │ -0003af40: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 z │ │ │ -0003afa0: 3c2f 613e 2920 283c 6120 6964 3d22 6b3a ) (k: │ │ │ -0003b030: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -0003b060: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0003b070: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0003b080: 6f67 6963 2e68 746d 6c23 783a 3339 3522 ogic.html#x:395" │ │ │ -0003b090: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x) │ │ │ -0003b0c0: 203a 3c62 722f 3e0a 266e 6273 703b 266e :
. &n │ │ │ -0003b0d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0003b0e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew< │ │ │ -0003b150: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> (< │ │ │ -0003b1d0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>eq_trans< │ │ │ -0003b230: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ -0003b290: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0003b2d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003b2e0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0003b2f0: 3e65 273c 2f73 7061 6e3e 3c2f 613e 3c61 >e') in │ │ │ -0003b3f0: 203c 6120 636c 6173 733d 2269 6472 6566 k < │ │ │ -0003b4a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003b4b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0003b4c0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= rew
e' │ │ │ -0003b5a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 in │ │ │ -0003b670: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -0003b6a0: 203c 6120 636c 6173 733d 2269 6472 6566 e in │ │ │ -0003b770: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0003b7d0: 6b3c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 k.
..
.Lemma │ │ │ -0003b810: 3c2f 7370 616e 3e20 3c61 2069 643d 2272 rew_con │ │ │ -0003b870: 7374 3c2f 7370 616e 3e3c 2f61 3e20 3c61 st A │ │ │ -0003b8d0: 3c2f 613e 203c 6120 6964 3d22 503a 3430 < │ │ │ -0003b900: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003b910: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ -0003b920: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (x< │ │ │ -0003b980: 2f61 3e20 3c61 2069 643d 2279 3a34 3034 /a> y< │ │ │ -0003b9d0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ -0003ba30: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (e │ │ │ -0003ba90: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :x= │ │ │ -0003bb70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ -0003bbd0: 2920 283c 6120 6964 3d22 6b3a 3430 3622 ) (k:P< │ │ │ -0003bc80: 2f73 7061 6e3e 3c2f 613e 2920 3a3c 6272 /span>) :
.  & │ │ │ -0003bca0: 6e62 7370 3b26 6e62 7370 3b3c 6120 636c nbsp; rew
[ │ │ │ -0003bda0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d fun │ │ │ -0003bdd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ => │ │ │ -0003be50: 503c 2f73 7061 6e3e 3c2f 613e 3c61 2063 P] e in k = k< │ │ │ -0003c0f0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -0003c100: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Notatio │ │ │ -0003c130: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n
sym_e │ │ │ -0003c190: 713c 2f73 7061 6e3e 3c2f 613e 203a 3d20 q := │ │ │ -0003c1a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_sym< │ │ │ -0003c200: 2f61 3e20 283c 7370 616e 2063 6c61 7373 /a> (only parsi │ │ │ -0003c250: 6e67 3c2f 7370 616e 3e29 2e3c 6272 2f3e ng).
│ │ │ -0003c260: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Notation
trans_eq │ │ │ -0003c2f0: 3c2f 7370 616e 3e3c 2f61 3e20 3a3d 203c := < │ │ │ -0003c300: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0003c310: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0003c320: 6f67 6963 2e68 746d 6c23 6571 5f74 7261 ogic.html#eq_tra │ │ │ -0003c330: 6e73 223e 3c73 7061 6e20 636c 6173 733d ns">eq_trans (only │ │ │ -0003c390: 203c 7370 616e 2063 6c61 7373 3d22 6964 pa │ │ │ -0003c3b0: 7273 696e 673c 2f73 7061 6e3e 292e 3c62 rsing)..Notation s │ │ │ -0003c450: 796d 5f6e 6f74 5f65 713c 2f73 7061 6e3e ym_not_eq │ │ │ -0003c460: 3c2f 613e 203a 3d20 3c61 2063 6c61 7373 := < │ │ │ -0003c4a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003c4b0: 7469 746c 653d 226c 656d 6d61 223e 6e6f title="lemma">no │ │ │ -0003c4c0: 745f 6571 5f73 796d 3c2f 7370 616e 3e3c t_eq_sym< │ │ │ -0003c4d0: 2f61 3e20 283c 7370 616e 2063 6c61 7373 /a> (only parsi │ │ │ -0003c520: 6e67 3c2f 7370 616e 3e29 2e3c 6272 2f3e ng).
│ │ │ -0003c530: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Notatio │ │ │ -0003c560: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n
refl_equal := │ │ │ -0003c610: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl (only p │ │ │ -0003c690: 6172 7369 6e67 3c2f 7370 616e 3e29 2e3c arsing).< │ │ │ -0003c6a0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Notation sy │ │ │ -0003c730: 6d5f 6571 7561 6c3c 2f73 7061 6e3e 3c2f m_equal := eq_sym (only parsing) │ │ │ -0003c800: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Notation │ │ │ -0003c830: 3c2f 7370 616e 3e20 3c61 2069 643d 2274 trans_equal< │ │ │ -0003c8a0: 2f73 7061 6e3e 3c2f 613e 203a 3d20 3c61 /span> := eq_trans (only │ │ │ -0003c940: 3c73 7061 6e20 636c 6173 733d 2269 6422 par │ │ │ -0003c960: 7369 6e67 3c2f 7370 616e 3e29 2e3c 6272 sing).
.Notation sym_not_equa │ │ │ -0003ca10: 6c3c 2f73 7061 6e3e 3c2f 613e 203a 3d20 l := │ │ │ -0003ca20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 not_eq_sym │ │ │ -0003ca80: 3c2f 7370 616e 3e3c 2f61 3e20 283c 7370 (only parsing).
..
. │ │ │ -0003caf0: 235b 3c73 7061 6e20 636c 6173 733d 2269 #[g │ │ │ -0003cb10: 6c6f 6261 6c3c 2f73 7061 6e3e 5d3c 6272 lobal]
.Hint │ │ │ -0003cb50: 3c73 7061 6e20 636c 6173 733d 2269 6422 Immediate e │ │ │ -0003cba0: 715f 7379 6d3c 2f73 7061 6e3e 203c 7370 q_sym not_eq │ │ │ -0003cbd0: 5f73 796d 3c2f 7370 616e 3e3a 203c 7370 _sym
: core.
..
.
..
.Bas │ │ │ -0003cc30: 6963 2064 6566 696e 6974 696f 6e73 2061 ic definitions a │ │ │ -0003cc40: 626f 7574 2072 656c 6174 696f 6e73 2061 bout relations a │ │ │ -0003cc50: 6e64 2070 726f 7065 7274 6965 7320 0a3c nd properties .< │ │ │ -0003cc60: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ -0003cc80: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition sub │ │ │ -0003cd10: 7265 6c61 7469 6f6e 3c2f 7370 616e 3e3c relation< │ │ │ -0003cd20: 2f61 3e20 283c 6120 6964 3d22 413a 3430 /a> (< │ │ │ -0003cd50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003cd60: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -0003cd70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 B : Type) (R< │ │ │ -0003ce50: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> R' │ │ │ -0003ceb0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A-& │ │ │ -0003cf80: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 gt; │ │ │ -0003cfc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B->Prop) :=
.  │ │ │ -0003d0a0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; forall │ │ │ -0003d100: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0003d120: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y< │ │ │ -0003d180: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, R x y - │ │ │ -0003d310: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0003d320: 3c61 2063 6c61 7373 3d22 6964 7265 6622 R' x< │ │ │ -0003d3e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ -0003d440: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Definition
unique (A : │ │ │ -0003d540: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type) ( │ │ │ -0003d570: 3c61 2069 643d 2250 3a34 3134 2220 636c P : A │ │ │ -0003d690: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -0003d6a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop) (< │ │ │ -0003d6d0: 6120 6964 3d22 783a 3431 3522 2063 6c61 a id="x:415" cla │ │ │ -0003d6e0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0003d6f0: 2223 783a 3431 3522 3e3c 7370 616e 2063 "#x:415">x:A) :=
. │ │ │ -0003d790: 266e 6273 703b 266e 6273 703b 3c61 2063    │ │ │ -0003d7f0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -0003d830: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003d840: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0003d850: 3e78 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >x /\< │ │ │ -0003d8d0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> fora │ │ │ -0003d900: 6c6c 3c2f 7370 616e 3e20 283c 6120 6964 ll (x' │ │ │ -0003d960: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A), P x' │ │ │ -0003da80: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0003db00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -0003db60: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ -0003dbe0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0003dbf0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0003dc00: 6f67 6963 2e68 746d 6c23 7827 3a34 3136 ogic.html#x':416 │ │ │ -0003dc10: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x'.
..
.< │ │ │ -0003dc50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003dc60: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0003dc70: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition unique │ │ │ -0003dce0: 6e65 7373 3c2f 7370 616e 3e3c 2f61 3e20 ness │ │ │ -0003dcf0: 283c 6120 6964 3d22 413a 3431 3722 2063 (A:Type
) (P: │ │ │ -0003de00: 3c73 7061 6e20 636c 6173 733d 2269 6422 A->Prop) := forall
< │ │ │ -0003df30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003df40: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -0003df50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y, P │ │ │ -0003e010: 3c2f 613e 203c 6120 636c 6173 733d 2269 x -&g │ │ │ -0003e0e0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ -0003e120: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -0003e150: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0003e160: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0003e170: 6f67 6963 2e68 746d 6c23 793a 3432 3022 ogic.html#y:420" │ │ │ -0003e180: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y │ │ │ -0003e1b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> x
= │ │ │ -0003e300: 3c2f 613e 203c 6120 636c 6173 733d 2269 y.
..
.
..
.Uni │ │ │ -0003e390: 7175 6520 6578 6973 7465 6e63 6520 0a3c que existence .< │ │ │ -0003e3a0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ -0003e3c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ -0003e3f0: 203c 6120 6964 3d22 6133 3732 3662 6439 " │ │ │ -0003e480: 3c2f 613e 2765 7869 7374 7327 2021 2078 'exists' ! x │ │ │ -0003e490: 202e 2e20 7920 2c20 7022 203a 3d3c 6272 .. y , p" :=
.  ( │ │ │ -0003e4b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ -0003e4e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003e4f0: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ -0003e500: 223e 6578 3c2f 7370 616e 3e3c 2f61 3e20 ">ex │ │ │ -0003e510: 283c 6120 636c 6173 733d 2269 6472 6566 (unique (fun< │ │ │ -0003e5a0: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> x =& │ │ │ -0003e600: 6774 3b20 2e2e 2028 3c61 2063 6c61 7373 gt; .. (ex ( │ │ │ -0003e6c0: 756e 6971 7565 3c2f 7370 616e 3e3c 2f61 unique (fun < │ │ │ -0003e700: 6120 6964 3d22 793a 3432 3222 2063 6c61 a id="y:422" cla │ │ │ -0003e710: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0003e720: 2223 793a 3432 3222 3e3c 7370 616e 2063 "#y:422">y => p))) ..)))
. │ │ │ -0003e790: 266e 6273 703b 266e 6273 703b 283c 7370   (at< │ │ │ -0003e7c0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
200, x │ │ │ -0003e820: 3c73 7061 6e20 636c 6173 733d 2269 6422 bin │ │ │ -0003e840: 6465 723c 2f73 7061 6e3e 2c20 3c73 7061 der, righ │ │ │ -0003e870: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t associ │ │ │ -0003e8a0: 6174 6976 6974 793c 2f73 7061 6e3e 2c3c ativity,< │ │ │ -0003e8b0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0003e8c0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; format "'[' 'exists' │ │ │ -0003e900: 2021 2020 272f 2020 2720 7820 202e 2e20 ! '/ ' x .. │ │ │ -0003e910: 2079 202c 2020 272f 2020 2720 7020 275d y , '/ ' p '] │ │ │ -0003e920: 2722 293c 6272 2f3e 0a26 6e62 7370 3b26 '")
. & │ │ │ -0003e930: 6e62 7370 3b3a 203c 7370 616e 2063 6c61 nbsp;: type_scope.
..
.Lemma │ │ │ -0003e9a0: 203c 6120 6964 3d22 756e 6971 7565 5f65 │ │ │ -0003ea00: 756e 6971 7565 5f65 7869 7374 656e 6365 unique_existence │ │ │ -0003ea10: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -0003ea40: 6f72 616c 6c3c 2f73 7061 6e3e 2028 3c61 orall
(A │ │ │ -0003eaa0: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Type) (P< │ │ │ -0003eb20: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ -0003eb80: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -0003ebd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->Prop), │ │ │ -0003ec30: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0003ec40: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;
(( │ │ │ -0003ed30: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 exists │ │ │ -0003edb0: 3c2f 613e 203c 6120 6964 3d22 783a 3432 < │ │ │ -0003ede0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0003edf0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -0003ee00: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c ,
P x)< │ │ │ -0003efc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ -0003f040: 203c 6120 636c 6173 733d 2269 6472 6566 uniq │ │ │ -0003f0a0: 7565 6e65 7373 3c2f 7370 616e 3e3c 2f61 ueness P) <-> ( │ │ │ -0003f2f0: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists │ │ │ -0003f370: 213c 2f73 7061 6e3e 3c2f 613e 203c 6120 ! x< │ │ │ -0003f3d0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -0003f420: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ -0003f450: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0003f460: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0003f470: 6f67 6963 2e68 746d 6c23 503a 3432 3422 ogic.html#P:424" │ │ │ -0003f480: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ -0003f4b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ -0003f510: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ).
..< │ │ │ -0003f590: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Lemma forall │ │ │ -0003f650: 5f65 7869 7374 735f 756e 6971 7565 5f64 _exists_unique_d │ │ │ -0003f660: 6f6d 6169 6e5f 636f 696e 6369 6465 3c2f omain_coincide :
│ │ │ -0003f680: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  fo │ │ │ -0003f6b0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall
A (P< │ │ │ -0003f760: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ -0003f7c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -0003f810: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->Prop), │ │ │ -0003f870: 203c 6120 636c 6173 733d 2269 6472 6566 ( │ │ │ -0003f8e0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 exists │ │ │ -0003f960: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ! │ │ │ -0003f9e0: 3c61 2069 643d 2278 3a34 3239 2220 636c x, P x< │ │ │ -0003fb70: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>) -& │ │ │ -0003fc50: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c62 gt;.   │ │ │ -0003fc70: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -0003fca0: 6120 6964 3d22 513a 3433 3022 2063 6c61 a id="Q:430" cla │ │ │ -0003fcb0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0003fcc0: 2223 513a 3433 3022 3e3c 7370 616e 2063 "#Q:430">Q:A-&g │ │ │ -0003fdc0: 743b 3c2f 7370 616e 3e3c 2f61 3e3c 7370 t;Pr │ │ │ -0003fdf0: 6f70 3c2f 7370 616e 3e2c 203c 6120 636c op, (forall │ │ │ -0003fea0: 203c 6120 6964 3d22 783a 3433 3122 2063 x, P x< │ │ │ -0003ffb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00040000: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Q< │ │ │ -00040090: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -000400f0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ) │ │ │ -00040160: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ -000401e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (< │ │ │ -00040260: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -000402b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -000402e0: 2f61 3e20 3c61 2069 643d 2278 3a34 3332 /a> x< │ │ │ -00040330: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, P x /\ │ │ │ -000404f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q x< │ │ │ -00040600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00040610: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00040620: 3e29 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >)...
.Lemm │ │ │ -00040660: 613c 2f73 7061 6e3e 203c 6120 6964 3d22 a │ │ │ -000406f0: 666f 7261 6c6c 5f65 7869 7374 735f 636f forall_exists_co │ │ │ -00040700: 696e 6369 6465 5f75 6e69 7175 655f 646f incide_unique_do │ │ │ -00040710: 6d61 696e 3c2f 7370 616e 3e3c 2f61 3e20 main │ │ │ -00040720: 3a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 :
. &nb │ │ │ -00040730: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;forall A
(P │ │ │ -00040810: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A->
Prop
),
.&nbs │ │ │ -00040920: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; ( │ │ │ -00040990: 3c2f 7370 616e 3e3c 2f61 3e3c 7370 616e fora │ │ │ -000409c0: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll Q │ │ │ -00040a20: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A->
Prop
, < │ │ │ -00040b70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00040b80: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00040b90: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 7370 >(fo │ │ │ -00040bc0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall x, P │ │ │ -00040c80: 3c2f 613e 203c 6120 636c 6173 733d 2269 x -&g │ │ │ -00040d50: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ -00040d90: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ -00040dc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00040dd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00040de0: 6f67 6963 2e68 746d 6c23 783a 3433 3622 ogic.html#x:436" │ │ │ -00040df0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x< │ │ │ -00040e20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00040e30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00040e40: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00040e50: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ -00040e60: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">) │ │ │ -00040ee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> │ │ │ -00040f60: 3c73 7061 6e20 636c 6173 733d 2269 6422 (exi │ │ │ -00041000: 7374 733c 2f73 7061 6e3e 3c2f 613e 203c sts < │ │ │ -00041010: 6120 6964 3d22 783a 3433 3722 2063 6c61 a id="x:437" cla │ │ │ -00041020: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00041030: 2223 783a 3433 3722 3e3c 7370 616e 2063 "#x:437">x, │ │ │ -000410e0: 203c 6120 636c 6173 733d 2269 6472 6566 P x │ │ │ -000411f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 /\ │ │ │ -00041220: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ -00041280: 203c 6120 636c 6173 733d 2269 6472 6566 x)
) │ │ │ -000413c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ -000413d0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 6120 .  -> │ │ │ -00041450: 3c2f 613e 203c 6120 636c 6173 733d 2269 (
exists!< │ │ │ -000415c0: 2f61 3e20 3c61 2069 643d 2278 3a34 3338 /a> x< │ │ │ -00041610: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, P x)< │ │ │ -000417c0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -000417d0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -000417e0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.

Being │ │ │ -00041820: 696e 6861 6269 7465 643c 2f68 313e 0a0a inhabited

.. │ │ │ -00041830: 3c64 6976 2063 6c61 7373 3d22 7061 7261
.. │ │ │ -00041850: 2054 6865 2070 7265 6469 6361 7465 203c The predicate < │ │ │ -00041860: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00041870: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">inhabited can │ │ │ -000418b0: 2062 6520 7573 6564 2069 6e20 6469 6666 be used in diff │ │ │ -000418c0: 6572 656e 7420 636f 6e74 6578 7473 2e20 erent contexts. │ │ │ -000418d0: 4966 203c 7370 616e 2063 6c61 7373 3d22 If A is. │ │ │ -00041920: 7468 6f75 6768 7420 6173 2061 2074 7970 thought as a typ │ │ │ -00041930: 652c 203c 7370 616e 2063 6c61 7373 3d22 e, inhabit │ │ │ -00041970: 6564 3c2f 7370 616e 3e3c 2f73 7061 6e3e ed │ │ │ -00041980: 203c 7370 616e 2063 6c61 7373 3d22 696e A< │ │ │ -000419c0: 2f73 7061 6e3e 2073 7461 7465 7320 7468 /span> states th │ │ │ -000419d0: 6174 203c 7370 616e 2063 6c61 7373 3d22 at A is inha │ │ │ -00041a20: 6269 7465 642e 2049 6620 3c73 7061 6e20 bited. If │ │ │ -00041a60: 413c 2f73 7061 6e3e 3c2f 7370 616e 3e20 A │ │ │ -00041a70: 6973 0a20 2020 2074 686f 7567 6874 2061 is. thought a │ │ │ -00041a80: 7320 6120 636f 6d70 7574 6174 696f 6e61 s a computationa │ │ │ -00041a90: 6c6c 7920 7265 6c65 7661 6e74 2070 726f lly relevant pro │ │ │ -00041aa0: 706f 7369 7469 6f6e 2c20 7468 656e 0a20 position, then. │ │ │ -00041ab0: 2020 203c 7370 616e 2063 6c61 7373 3d22 inhabit │ │ │ -00041af0: 6564 3c2f 7370 616e 3e3c 2f73 7061 6e3e ed │ │ │ -00041b00: 203c 7370 616e 2063 6c61 7373 3d22 696e A< │ │ │ -00041b40: 2f73 7061 6e3e 2077 6561 6b65 6e73 203c /span> weakens < │ │ │ -00041b50: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00041b60: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A
so as to hi │ │ │ -00041ba0: 6465 2069 7473 2063 6f6d 7075 7461 7469 de its computati │ │ │ -00041bb0: 6f6e 616c 206d 6561 6e69 6e67 2e0a 2020 onal meaning.. │ │ │ -00041bc0: 2020 5468 6520 736f 2d77 6561 6b65 6e65 The so-weakene │ │ │ -00041bd0: 6420 7072 6f6f 6620 7265 6d61 696e 7320 d proof remains │ │ │ -00041be0: 636f 6d70 7574 6174 696f 6e61 6c6c 7920 computationally │ │ │ -00041bf0: 7265 6c65 7661 6e74 2062 7574 206f 6e6c relevant but onl │ │ │ -00041c00: 7920 696e 0a20 2020 2061 2070 726f 706f y in. a propo │ │ │ -00041c10: 7369 7469 6f6e 616c 2063 6f6e 7465 7874 sitional context │ │ │ -00041c20: 2e0a 0a3c 2f64 6976 3e0a 3c64 6976 2063 ...
.
...Inductive │ │ │ -00041d20: 696e 6861 6269 7465 643c 2f73 7061 6e3e inhabited │ │ │ -00041d30: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f (A< │ │ │ -00041d90: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Type │ │ │ -00041dc0: 3c2f 7370 616e 3e29 203a 203c 7370 616e ) : Prop │ │ │ -00041df0: 3c2f 7370 616e 3e20 3a3d 203c 6120 6964 := │ │ │ -00041e50: 696e 6861 6269 7473 3c2f 7370 616e 3e3c inhabits< │ │ │ -00041e60: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A -& │ │ │ -00041f30: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00041f40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00041f50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00041f60: 6f67 6963 2e68 746d 6c23 696e 6861 6269 ogic.html#inhabi │ │ │ -00041f70: 7465 643a 3434 3222 3e3c 7370 616e 2063 ted:442">inha │ │ │ -00041fa0: 6269 7465 643c 2f73 7061 6e3e 3c2f 613e bited │ │ │ -00041fb0: 203c 6120 636c 6173 733d 2269 6472 6566 A.
..
.# │ │ │ -00042020: 5b3c 7370 616e 2063 6c61 7373 3d22 6964 [gl │ │ │ -00042040: 6f62 616c 3c2f 7370 616e 3e5d 3c62 722f obal]
.Hint < │ │ │ -00042080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00042090: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000420a0: 5265 736f 6c76 653c 2f73 7061 6e3e 203c Resolve < │ │ │ -000420b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000420c0: 7469 746c 653d 2276 6172 223e 696e 6861 title="var">inha │ │ │ -000420d0: 6269 7473 3c2f 7370 616e 3e3a 203c 7370 bits: core.
..
.Lemma │ │ │ -00042140: 203c 6120 6964 3d22 6578 6973 7473 5f69 │ │ │ -000421a0: 6578 6973 7473 5f69 6e68 6162 6974 6564 exists_inhabited │ │ │ -000421b0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -000421e0: 6f72 616c 6c3c 2f73 7061 6e3e 2028 3c61 orall (A │ │ │ -00042240: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Type) (P< │ │ │ -000422c0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ -00042320: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00042370: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->Prop), │ │ │ -000423d0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -000423e0: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;
(exists │ │ │ -00042500: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00042520: 783c 2f73 7061 6e3e 3c2f 613e 3c61 2063 x,
P x │ │ │ -000426d0: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) -> │ │ │ -00042750: 3c2f 613e 203c 6120 636c 6173 733d 2269 in │ │ │ -000427b0: 6861 6269 7465 643c 2f73 7061 6e3e 3c2f habited A< │ │ │ -00042820: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -00042830: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Lemma < │ │ │ -00042860: 6120 6964 3d22 696e 6861 6269 7465 645f a id="inhabited_ │ │ │ -00042870: 636f 7661 7269 616e 7422 2063 6c61 7373 covariant" class │ │ │ -00042880: 3d22 6964 7265 6622 2068 7265 663d 2223 ="idref" href="# │ │ │ -00042890: 696e 6861 6269 7465 645f 636f 7661 7269 inhabited_covari │ │ │ -000428a0: 616e 7422 3e3c 7370 616e 2063 6c61 7373 ant">inhabited_co │ │ │ -000428d0: 7661 7269 616e 743c 2f73 7061 6e3e 3c2f variant (
A< │ │ │ -00042930: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B : Type │ │ │ -000429c0: 2920 3a20 3c61 2063 6c61 7373 3d22 6964 ) : (A - │ │ │ -00042b00: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00042b10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ -00042b70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 )< │ │ │ -00042be0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -00042c50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 inhabited A< │ │ │ -00042d20: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00042d70: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> inha │ │ │ -00042e00: 6269 7465 643c 2f73 7061 6e3e 3c2f 613e bited │ │ │ -00042e10: 203c 6120 636c 6173 733d 2269 6472 6566 B.
..
.< │ │ │ -00042e80: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Declara │ │ │ -00042ea0: 7469 6f6e 206f 6620 7374 6570 6c20 616e tion of stepl an │ │ │ -00042eb0: 6420 7374 6570 7220 666f 7220 6571 2061 d stepr for eq a │ │ │ -00042ec0: 6e64 2069 6666 200a 3c2f 6469 763e 0a3c nd iff .
.< │ │ │ -00042ed0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -00042ee0: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Lemma< │ │ │ -00042f10: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_stepl : for │ │ │ -00042fa0: 616c 6c3c 2f73 7061 6e3e 2028 3c61 2069 all (A : Type) (x< │ │ │ -00043080: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> y z : A │ │ │ -00043190: 3c2f 7370 616e 3e3c 2f61 3e29 2c20 3c61 ), │ │ │ -000431d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ -00043200: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00043210: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00043220: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -00043230: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -00043240: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -00043270: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> y │ │ │ -000432d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00043350: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -000433b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00043430: 203c 6120 636c 6173 733d 2269 6472 6566 z -> z< │ │ │ -00043560: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = y.
..< │ │ │ -00043650: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Declare Le │ │ │ -00043680: 6674 2053 7465 703c 2f73 7061 6e3e 203c ft Step < │ │ │ -00043690: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000436a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000436b0: 6f67 6963 2e68 746d 6c23 6571 5f73 7465 ogic.html#eq_ste │ │ │ -000436c0: 706c 223e 3c73 7061 6e20 636c 6173 733d pl">eq_stepl.
.De │ │ │ -00043720: 636c 6172 6520 5269 6768 7420 5374 6570 clare Right Step │ │ │ -00043730: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373
eq_t │ │ │ -00043790: 7261 6e73 3c2f 7370 616e 3e3c 2f61 3e2e rans. │ │ │ -000437a0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Le │ │ │ -000437d0: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma iff_ │ │ │ -00043830: 7374 6570 6c3c 2f73 7061 6e3e 3c2f 613e stepl │ │ │ -00043840: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall A
B │ │ │ -00043920: 3c61 2069 643d 2243 3a34 3535 2220 636c C : Prop, (< │ │ │ -00043a10: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>A< │ │ │ -00043a70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -00043af0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> B │ │ │ -00043b50: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00043ba0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ -00043bd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00043be0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00043bf0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00043c00: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00043c10: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> (< │ │ │ -00043cb0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>A< │ │ │ -00043d10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -00043d90: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C │ │ │ -00043df0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -00043e40: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ -00043e70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00043e80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00043e90: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -00043ea0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -00043eb0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> (< │ │ │ -00043f50: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>C< │ │ │ -00043fb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ -00044030: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> B │ │ │ -00044090: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ -000440e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ -00044110: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Dec │ │ │ -00044140: 6c61 7265 204c 6566 7420 5374 6570 3c2f lare Left Step iff_s │ │ │ -000441b0: 7465 706c 3c2f 7370 616e 3e3c 2f61 3e2e tepl. │ │ │ -000441c0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Declare R │ │ │ -000441f0: 6967 6874 2053 7465 703c 2f73 7061 6e3e ight Step │ │ │ -00044200: 203c 6120 636c 6173 733d 2269 6472 6566 iff_trans< │ │ │ -00044260: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00044270: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -00044280: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.More propertie │ │ │ -000442a0: 7320 6f66 203c 7370 616e 2063 6c61 7373 s of ex and │ │ │ -000442f0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex2 │ │ │ -00044330: 3c2f 7370 616e 3e20 7468 6174 2072 656c that rel │ │ │ -00044340: 7920 6f6e 2065 7175 616c 6974 7920 6265 y on equality be │ │ │ -00044350: 696e 6720 7072 6573 656e 7420 0a3c 6469 ing present .
.. We │ │ │ -00044380: 2064 6566 696e 6520 7265 7374 7269 6374 define restrict │ │ │ -00044390: 6564 2076 6572 7369 6f6e 7320 6f66 203c ed versions of < │ │ │ -000443a0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -000443b0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex_rect and < │ │ │ -000443f0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00044400: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex_rec which. │ │ │ -00044440: 2020 2020 616c 6c6f 7720 656c 696d 696e allow elimin │ │ │ -00044450: 6174 696f 6e20 696e 746f 206e 6f6e 2d50 ation into non-P │ │ │ -00044460: 726f 7020 736f 7274 7320 7768 656e 2074 rop sorts when t │ │ │ -00044470: 6865 2069 6e64 7563 7469 7665 2069 7320 he inductive is │ │ │ -00044480: 6e6f 740a 2020 2020 696e 666f 726d 6174 not. informat │ │ │ -00044490: 6976 6520 0a3c 6469 7620 636c 6173 733d ive .
.. .. Princip │ │ │ -000444c0: 6c65 7320 0a3c 2f64 6976 3e0a 3c64 6976 les .
.
.< │ │ │ -000444e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000444f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00044500: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition ex_eta< │ │ │ -00044570: 2f61 3e20 7b3c 6120 6964 3d22 413a 3435 /a> {< │ │ │ -000445a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000445b0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -000445c0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -000445f0: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ -00044650: 2f61 3e7d 2028 3c61 2069 643d 2270 3a34 /a>} ( │ │ │ -00044680: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000446a0: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -000446b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000446c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000446d0: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ -000446e0: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ -000446f0: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ -00044720: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ -00044730: 3c61 2069 643d 2261 3a34 3538 2220 636c a : A, │ │ │ -00044860: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a)
.&nb │ │ │ -00044930: 7370 3b26 6e62 7370 3b3a 203c 6120 636c sp; : p │ │ │ -00044990: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_intro _ (ex_proj1 p< │ │ │ -00044b70: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (ex_proj2 p< │ │ │ -00044c40: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
. .
.Defin │ │ │ -00044c80: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition e │ │ │ -00044ce0: 7832 5f65 7461 3c2f 7370 616e 3e3c 2f61 x2_eta {A : Pro │ │ │ -00044d70: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q
} (p : exists2 │ │ │ -00044f30: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00044f50: 3c73 7061 6e20 6964 3d22 613a 3436 3422 a
│ │ │ -00044f80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ -00044ff0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00045050: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A, P a & Q< │ │ │ -00045270: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ -000452d0: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  : │ │ │ -000452f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -00045350: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -000453c0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_intro │ │ │ -00045430: 323c 2f73 7061 6e3e 3c2f 613e 203c 7370 2 _ │ │ │ -00045480: 5f3c 2f73 7061 6e3e 2028 3c61 2063 6c61 _ (< │ │ │ -000454c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000454d0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000454e0: 6e22 3e65 785f 7072 6f6a 313c 2f73 7061 n">ex_proj1 (ex_of_ex2 p)) ( │ │ │ -00045600: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj2 (< │ │ │ -00045670: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00045680: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00045690: 6e22 3e65 785f 6f66 5f65 7832 3c2f 7370 n">ex_of_ex2 p)) (ex_proj3 p).
│ │ │ -000457e0: 0a20 0a3c 6272 2f3e 0a3c 7370 616e 2063 . .
.Sectio │ │ │ -00045810: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n ex_Prop< │ │ │ -00045870: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00045880: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Va │ │ │ -000458b0: 7269 6162 6c65 733c 2f73 7061 6e3e 2028 riables ( │ │ │ -000458c0: 3c61 2069 643d 2265 785f 5072 6f70 2e41 A │ │ │ -00045920: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :Prop) ( │ │ │ -00045950: 3c61 2069 643d 2265 785f 5072 6f70 2e50 P │ │ │ -000459b0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A->
Prop
).
..
.  < │ │ │ -00045ad0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00045ae0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00045af0: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition │ │ │ -00045b30: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_rect (P0 : ex< │ │ │ -00045c20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P
│ │ │ -00045cf0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00045d00: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type) ( │ │ │ -00045d30: 3c61 2069 643d 2266 3a34 3733 2220 636c f : forall │ │ │ -00045db0: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 x < │ │ │ -00045e10: 6120 6964 3d22 703a 3437 3222 2063 6c61 a id="p:472" cla │ │ │ -00045e20: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00045e30: 2223 703a 3437 3222 3e3c 7370 616e 2063 "#p:472">p, P0 ( │ │ │ -00045f00: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_intro < │ │ │ -00045f70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00045f80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00045f90: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -00045fd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ -00046000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00046010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00046020: 6f67 6963 2e68 746d 6c23 703a 3437 3222 ogic.html#p:472" │ │ │ -00046030: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p) │ │ │ -00046060: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00046070: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -00046080: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -000460b0: 3c61 2069 643d 2265 3a34 3734 2220 636c e, P0< │ │ │ -00046160: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ -000461c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ -000461d0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -000461e0: 7370 3b26 6e62 7370 3b3a 3d20 3c73 7061 sp; := fun │ │ │ -00046210: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 e = │ │ │ -00046270: 2667 743b 203c 6120 636c 6173 733d 2269 > rew < │ │ │ -00046370: 2d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 - │ │ │ -000463b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_eta e in
f _ │ │ │ -00046550: 3c73 7061 6e20 636c 6173 733d 2269 6422 _.
.&nbs │ │ │ -00046580: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ -000465b0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion ex_re │ │ │ -00046610: 633c 2f73 7061 6e3e 3c2f 613e 203a 203c c : < │ │ │ -00046620: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00046630: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00046640: 666f 7261 6c6c 3c2f 7370 616e 3e20 283c forall
(< │ │ │ -00046650: 6120 6964 3d22 5030 3a34 3736 2220 636c a id="P0:476" cl │ │ │ -00046660: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -00046670: 3d22 2350 303a 3437 3622 3e3c 7370 616e ="#P0:476">P0 : ex< │ │ │ -00046700: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -00046770: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Set) ( │ │ │ -00046840: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00046860: 663c 2f73 7061 6e3e 3c2f 613e 203a 203c f : < │ │ │ -00046870: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00046880: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00046890: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall x │ │ │ -000468f0: 3c2f 613e 203c 6120 6964 3d22 703a 3437 < │ │ │ -00046920: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00046930: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ -00046940: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , │ │ │ -00046980: 3c73 7061 6e20 636c 6173 733d 2269 6422 P0 │ │ │ -000469b0: 283c 6120 636c 6173 733d 2269 6472 6566 (ex_in │ │ │ -00046a10: 7472 6f3c 2f73 7061 6e3e 3c2f 613e 203c tro < │ │ │ -00046a20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00046a30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00046a40: 6f67 6963 2e68 746d 6c23 6578 5f50 726f ogic.html#ex_Pro │ │ │ -00046a50: 702e 5022 3e3c 7370 616e 2063 6c61 7373 p.P">P< │ │ │ -00046a80: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ -00046ae0: 3c2f 613e 203c 6120 636c 6173 733d 2269 p)),
.&n │ │ │ -00046b50: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00046b60: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00046b70: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;forall │ │ │ -00046ba0: 203c 6120 6964 3d22 653a 3438 3022 2063 e, P0 │ │ │ -00046c50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00046cb0: 653c 2f73 7061 6e3e 3c2f 613e 3c62 722f e
.  &n │ │ │ -00046cd0: 6273 703b 266e 6273 703b 3a3d 203c 6120 bsp; := ex_rect.
..< │ │ │ -00046d50: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.End │ │ │ -00046d80: 203c 6120 636c 6173 733d 2269 6472 6566 ex_Prop
.
.. │ │ │ -00046df0: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ -00046e10: 4571 7561 6c69 7479 2066 6f72 203c 7370 Equality for ex .
.
.< │ │ │ -00046e80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00046e90: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00046ea0: 5365 6374 696f 6e3c 2f73 7061 6e3e 203c Section < │ │ │ -00046eb0: 6120 6964 3d22 6578 2220 636c 6173 733d a id="ex" class= │ │ │ -00046ec0: 2269 6472 6566 2220 6872 6566 3d22 2365 "idref" href="#e │ │ │ -00046ed0: 7822 3e3c 7370 616e 2063 6c61 7373 3d22 x">ex.
. &n │ │ │ -00046f10: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Local Unset │ │ │ -00046f40: 2049 6d70 6c69 6369 7420 4172 6775 6d65 Implicit Argume │ │ │ -00046f50: 6e74 733c 2f73 7061 6e3e 2e3c 6272 2f3e nts.
│ │ │ -00046f60: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Proje │ │ │ -00046f80: 6374 696e 6720 616e 2065 7175 616c 6974 cting an equalit │ │ │ -00046f90: 7920 6f66 2061 2070 6169 7220 746f 2065 y of a pair to e │ │ │ -00046fa0: 7175 616c 6974 7920 6f66 2074 6865 2066 quality of the f │ │ │ -00046fb0: 6972 7374 2063 6f6d 706f 6e65 6e74 7320 irst components │ │ │ -00046fc0: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.  │ │ │ -00046fe0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ -00047010: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on │ │ │ -00047050: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj1_eq< │ │ │ -00047080: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Prop} {P< │ │ │ -00047160: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -000471a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000471b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000471c0: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} {< │ │ │ -000472a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000472b0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -000472c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v : exists │ │ │ -000473d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000473f0: 613c 2f73 7061 6e3e 3c2f 613e 203a 203c a : < │ │ │ -00047400: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00047410: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00047420: 6f67 6963 2e68 746d 6c23 413a 3438 3122 ogic.html#A:481" │ │ │ -00047430: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ -00047460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00047470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00047480: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ -00047490: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ -000474a0: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">,< │ │ │ -000474d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -00047530: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00047590: 613c 2f73 7061 6e3e 3c2f 613e 7d20 283c a} (< │ │ │ -000475a0: 6120 6964 3d22 703a 3438 3622 2063 6c61 a id="p:486" cla │ │ │ -000475b0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000475c0: 2223 703a 3438 3622 3e3c 7370 616e 2063 "#p:486">p : u = │ │ │ -000476d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v)
.&nbs │ │ │ -00047740: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00047750: 6273 703b 3a20 3c61 2063 6c61 7373 3d22 bsp;: e │ │ │ -000477b0: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 u< │ │ │ -00047820: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -000478a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ -00047900: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ -00047940: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00047950: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00047960: 3e76 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >v
.  & │ │ │ -00047980: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := f_equal< │ │ │ -000479f0: 2f61 3e20 2840 3c61 2063 6c61 7373 3d22 /a> (@e │ │ │ -00047a50: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 │ │ │ -00047a80: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _) │ │ │ -00047ab0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -00047b10: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.Projecti │ │ │ -00047b40: 6e67 2061 6e20 6571 7561 6c69 7479 206f ng an equality o │ │ │ -00047b50: 6620 6120 7061 6972 2074 6f20 6571 7561 f a pair to equa │ │ │ -00047b60: 6c69 7479 206f 6620 7468 6520 7365 636f lity of the seco │ │ │ -00047b70: 6e64 2063 6f6d 706f 6e65 6e74 7320 0a3c nd components .< │ │ │ -00047b80: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
. & │ │ │ -00047ba0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -00047bd0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 ex_proj2_eq {A │ │ │ -00047ca0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ -00047cd0: 207b 3c61 2069 643d 2250 3a34 3838 2220 {P : A │ │ │ -00047d80: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00047e00: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00047e30: 7d20 7b3c 6120 6964 3d22 753a 3439 3022 } {u v │ │ │ -00047ee0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -00047f30: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -00047f60: 2f61 3e20 3c61 2069 643d 2261 3a34 3839 /a> a< │ │ │ -00047fb0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00047ff0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00048000: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00048010: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -00048150: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (p< │ │ │ -000481b0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : u = v< │ │ │ -000482f0: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -00048300: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00048310: 703b 3a20 3c61 2063 6c61 7373 3d22 6964 p;:
│ │ │ -00048380: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ -00048390: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000483a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000483b0: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -000483c0: 6a31 5f65 7122 3e3c 7370 616e 2063 6c61 j1_eq">ex_pr │ │ │ -000483f0: 6f6a 315f 6571 3c2f 7370 616e 3e3c 2f61 oj1_eq p i │ │ │ -000484d0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n ex_proj2 u< │ │ │ -000485a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = │ │ │ -00048680: 6578 5f70 726f 6a32 3c2f 7370 616e 3e3c ex_proj2< │ │ │ -00048690: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ -000486f0: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ -00048700: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00048710: 703b 3a3d 203c 6120 636c 6173 733d 2269 p;:= rew │ │ │ -00048790: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 dependent
p │ │ │ -000488e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 in │ │ │ -00048910: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_refl │ │ │ -00048970: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.
. │ │ │ -00048990: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.Equality of < │ │ │ -000489b0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -000489c0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex is itself │ │ │ -00048a00: 6120 3c73 7061 6e20 636c 6173 733d 2269 a ex (forwar │ │ │ -00048a50: 6473 2d72 6561 736f 6e69 6e67 2076 6572 ds-reasoning ver │ │ │ -00048a60: 7369 6f6e 2920 0a3c 2f64 6976 3e0a 3c64 sion) .
. │ │ │ -00048a80: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ -00048ab0: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ -00048ac0: 3c61 2069 643d 2265 715f 6578 5f69 6e74 eq │ │ │ -00048b30: 5f65 785f 696e 7472 6f5f 756e 6375 7272 _ex_intro_uncurr │ │ │ -00048b40: 6965 643c 2f73 7061 6e3e 3c2f 613e 207b ied { │ │ │ -00048b50: 3c61 2069 643d 2241 3a34 3933 2220 636c A : Type} {P : │ │ │ -00048c30: 203c 6120 636c 6173 733d 2269 6472 6566 A -> Prop< │ │ │ -00048d30: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {u1 < │ │ │ -00048dc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00048dd0: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -00048de0: 313c 2f73 7061 6e3e 3c2f 613e 203a 203c 1 : < │ │ │ -00048df0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00048e00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00048e10: 6f67 6963 2e68 746d 6c23 413a 3439 3322 ogic.html#A:493" │ │ │ -00048e20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A} │ │ │ -00048e50: 207b 3c61 2069 643d 2275 323a 3439 3722 {u2 │ │ │ -00048ea0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -00048ee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -00048f10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00048f20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00048f30: 6f67 6963 2e68 746d 6c23 7531 3a34 3935 ogic.html#u1:495 │ │ │ -00048f40: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u1} { │ │ │ -00048fa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00048fc0: 7632 3c2f 7370 616e 3e3c 2f61 3e20 3a20 v2 : │ │ │ -00048fd0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ -00049030: 203c 6120 636c 6173 733d 2269 6472 6566 v1< │ │ │ -00049090: 2f61 3e7d 3c62 722f 3e0a 266e 6273 703b /a>}
.  │ │ │ -000490a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000490b0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000490c0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000490d0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000490e0: 703b 266e 6273 703b 283c 6120 6964 3d22 p; (
pq : exists │ │ │ -000491f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00049210: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -00049220: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00049230: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00049240: 6f67 6963 2e68 746d 6c23 7531 3a34 3935 ogic.html#u1:495 │ │ │ -00049250: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u1 < │ │ │ -000492d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000492e0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000492f0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= v1 │ │ │ -00049360: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -000493d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 rew p
in u2 │ │ │ -00049590: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00049610: 203c 6120 636c 6173 733d 2269 6472 6566 v2< │ │ │ -00049670: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -00049680: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00049690: 703b 3a20 3c61 2063 6c61 7373 3d22 6964 p;:
ex │ │ │ -000496f0: 5f69 6e74 726f 3c2f 7370 616e 3e3c 2f61 _intro _ │ │ │ -00049720: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 u1< │ │ │ -00049780: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -000497e0: 7532 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u2 = < │ │ │ -000498a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000498b0: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -000498c0: 6f72 223e 6578 5f69 6e74 726f 3c2f 7370 or">ex_intro _ v1 │ │ │ -00049960: 203c 6120 636c 6173 733d 2269 6472 6566 v2< │ │ │ -000499c0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -000499d0: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Equal │ │ │ -000499f0: 6974 7920 6f66 203c 7370 616e 2063 6c61 ity of │ │ │ -00049a10: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex< │ │ │ -00049a30: 2f73 7061 6e3e 3c2f 7370 616e 3e20 6973 /span> is │ │ │ -00049a40: 2069 7473 656c 6620 6120 3c73 7061 6e20 itself a │ │ │ -00049a80: 6578 3c2f 7370 616e 3e3c 2f73 7061 6e3e ex │ │ │ -00049a90: 2028 6261 636b 7761 7264 732d 7265 6173 (backwards-reas │ │ │ -00049aa0: 6f6e 696e 6720 7665 7273 696f 6e29 200a oning version) . │ │ │ -00049ab0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.  │ │ │ -00049ad0: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -00049b00: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ex │ │ │ -00049b70: 5f75 6e63 7572 7269 6564 3c2f 7370 616e _uncurried {A : │ │ │ -00049be0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -00049c10: 6120 6964 3d22 503a 3530 3222 2063 6c61 a id="P:502" cla │ │ │ -00049c20: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00049c30: 2223 503a 3530 3222 3e3c 7370 616e 2063 "#P:502">P : A │ │ │ -00049d30: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00049d40: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} ( │ │ │ -00049d70: 3c61 2069 643d 2275 3a35 3034 2220 636c u v : │ │ │ -00049e20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ -00049e90: 7869 7374 733c 2f73 7061 6e3e 3c2f 613e xists │ │ │ -00049ea0: 203c 6120 6964 3d22 613a 3530 3322 2063 a : A< │ │ │ -00049f50: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, P a)
.&n │ │ │ -0004a0a0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0004a0b0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0004a0c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0004a0d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0004a0e0: 266e 6273 703b 266e 6273 703b 283c 6120   (pq : exists p │ │ │ -0004a220: 203a 203c 6120 636c 6173 733d 2269 6472 : ex_p │ │ │ -0004a280: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ -0004a290: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -0004a2f0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0004a360: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_proj1 v< │ │ │ -0004a430: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, │ │ │ -0004a500: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -0004a530: 203c 6120 636c 6173 733d 2269 6472 6566 p in │ │ │ -0004a600: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2 u = e │ │ │ -0004a7b0: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ -0004a820: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -0004a830: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0004a840: 703b 3a20 3c61 2063 6c61 7373 3d22 6964 p;:
u │ │ │ -0004a8a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -0004a920: 203c 6120 636c 6173 733d 2269 6472 6566 v.
..
.< │ │ │ -0004a990: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Curried │ │ │ -0004a9b0: 2076 6572 7369 6f6e 206f 6620 7072 6f76 version of prov │ │ │ -0004a9c0: 696e 6720 6571 7561 6c69 7479 206f 6620 ing equality of │ │ │ -0004a9d0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex< │ │ │ -0004aa10: 2f73 7061 6e3e 2074 7970 6573 200a 3c2f /span> types ..
. &n │ │ │ -0004aa40: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ -0004aa70: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_ex_intro {A │ │ │ -0004ab40: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Type} │ │ │ -0004ab70: 7b3c 6120 6964 3d22 503a 3530 3922 2063 {P : A< │ │ │ -0004ac20: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0004ac70: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop} │ │ │ -0004acd0: 207b 3c61 2069 643d 2275 313a 3531 3022 {u1 │ │ │ -0004ad20: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v1 : A} {u2 │ │ │ -0004ae40: 3c2f 613e 203a 203c 6120 636c 6173 733d : P u1< │ │ │ -0004af00: 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 6120 /span>} {v2 : P v │ │ │ -0004b020: 313c 2f73 7061 6e3e 3c2f 613e 7d3c 6272 1}
.  & │ │ │ -0004b040: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0004b050: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0004b060: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0004b070: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0004b080: 3b28 3c61 2069 643d 2270 3a35 3134 2220 ;(p
: │ │ │ -0004b130: 7531 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u1 = v │ │ │ -0004b210: 313c 2f73 7061 6e3e 3c2f 613e 2920 283c 1) (< │ │ │ -0004b220: 6120 6964 3d22 713a 3531 3522 2063 6c61 a id="q:515" cla │ │ │ -0004b230: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0004b240: 2223 713a 3531 3522 3e3c 7370 616e 2063 "#q:515">q : rew p< │ │ │ -0004b350: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ -0004b3c0: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in u2 │ │ │ -0004b430: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0004b4a0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = │ │ │ -0004b4e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2) │ │ │ -0004b510: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0004b520: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ -0004b530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_int │ │ │ -0004b590: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c73 ro _ u1 u2 = │ │ │ -0004b760: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ -0004b770: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ v │ │ │ -0004b7f0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ -0004b830: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2< │ │ │ -0004b860: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0004b870: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ -0004b880: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_ex_intr │ │ │ -0004b8f0: 6f5f 756e 6375 7272 6965 643c 2f73 7061 o_uncurried (ex_intro _ │ │ │ -0004b9f0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ -0004ba30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004ba40: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004ba50: 3e71 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >q).< │ │ │ -0004ba60: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Curried ve │ │ │ -0004ba90: 7273 696f 6e20 6f66 2070 726f 7669 6e67 rsion of proving │ │ │ -0004baa0: 2065 7175 616c 6974 7920 6f66 203c 7370 equality of ex types .
.
.   │ │ │ -0004bb20: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition eq_ex {A< │ │ │ -0004bc00: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ -0004bc30: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P : A -&g │ │ │ -0004bd60: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; P │ │ │ -0004bd90: 726f 703c 2f73 7061 6e3e 7d20 283c 6120 rop} (u< │ │ │ -0004bdf0: 2f61 3e20 3c61 2069 643d 2276 3a35 3230 /a> v< │ │ │ -0004be40: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : exis │ │ │ -0004bec0: 7473 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ts a │ │ │ -0004bf20: 3c2f 613e 203a 203c 6120 636c 6173 733d : A, P< │ │ │ -0004c060: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -0004c0c0: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ -0004c0d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0004c0e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0004c0f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0004c100: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0004c110: 7370 3b26 6e62 7370 3b28 3c61 2069 643d sp; (p │ │ │ -0004c170: 203a 203c 6120 636c 6173 733d 2269 6472 : ex_p │ │ │ -0004c1d0: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ -0004c1e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -0004c240: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0004c2b0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_proj1 v< │ │ │ -0004c380: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (q< │ │ │ -0004c3e0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : │ │ │ -0004c430: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -0004c460: 203c 6120 636c 6173 733d 2269 6472 6566 p in │ │ │ -0004c530: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2 u = e │ │ │ -0004c6e0: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ -0004c750: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -0004c760: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0004c770: 703b 3a20 3c61 2063 6c61 7373 3d22 6964 p;:
u │ │ │ -0004c7d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -0004c850: 203c 6120 636c 6173 733d 2269 6472 6566 v
. &nb │ │ │ -0004c8c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -0004c8d0: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = eq_ex_uncurrie │ │ │ -0004c940: 643c 2f73 7061 6e3e 3c2f 613e 203c 6120 d < │ │ │ -0004c980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004c990: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004c9a0: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u │ │ │ -0004c9e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 v ( │ │ │ -0004ca10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_int │ │ │ -0004ca70: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c73 ro _ p │ │ │ -0004cb00: 3c2f 613e 203c 6120 636c 6173 733d 2269 q).
...
..
.In │ │ │ -0004cb90: 206f 7264 6572 2074 6f20 6861 7665 2061 order to have a │ │ │ -0004cba0: 2070 6572 666f 726d 616e 7420 3c73 7061 performant inversion_sigm │ │ │ -0004cbf0: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e2c a, │ │ │ -0004cc00: 2077 6520 6465 6669 6e65 0a20 2020 2020 we define. │ │ │ -0004cc10: 2073 7065 6369 616c 697a 6564 2076 6572 specialized ver │ │ │ -0004cc20: 7369 6f6e 7320 666f 7220 7768 656e 2077 sions for when w │ │ │ -0004cc30: 6520 6861 7665 2063 6f6e 7374 7275 6374 e have construct │ │ │ -0004cc40: 6f72 7320 6f6e 206f 6e65 206f 720a 2020 ors on one or. │ │ │ -0004cc50: 2020 2020 626f 7468 2073 6964 6573 206f both sides o │ │ │ -0004cc60: 6620 7468 6520 6571 7561 6c69 7479 200a f the equality . │ │ │ -0004cc70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.  │ │ │ -0004cc90: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -0004ccc0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ex_int │ │ │ -0004cd30: 726f 5f6c 3c2f 7370 616e 3e3c 2f61 3e20 ro_l │ │ │ -0004cd40: 7b3c 6120 6964 3d22 413a 3532 3322 2063 {A : Prop< │ │ │ -0004cdc0: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ -0004ce20: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A ->< │ │ │ -0004cef0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ -0004cf20: 3c2f 7370 616e 3e7d 203c 6120 6964 3d22 } u1 < │ │ │ -0004cfb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004cfc0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -0004cfd0: 323c 2f73 7061 6e3e 3c2f 613e 2028 3c61 2 (v │ │ │ -0004d030: 3c2f 613e 203a 203c 6120 636c 6173 733d : exists a : │ │ │ -0004d110: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -0004d1e0: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ -0004d220: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004d230: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004d240: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -0004d280: 3c73 7061 6e20 636c 6173 733d 2269 6422 a)< │ │ │ -0004d2b0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0004d2c0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0004d2d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0004d2e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0004d2f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0004d300: 7370 3b28 3c61 2069 643d 2270 3a35 3239 sp;(p< │ │ │ -0004d350: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : │ │ │ -0004d390: 3c73 7061 6e20 636c 6173 733d 2269 6422 u1 │ │ │ -0004d3c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0004d430: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj1 v) (q : < │ │ │ -0004d5b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004d5c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0004d5d0: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ -0004d5e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -0004d640: 203c 6120 636c 6173 733d 2269 6472 6566 in< │ │ │ -0004d6b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0004d710: 7532 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u2 = < │ │ │ -0004d7d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004d7e0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -0004d7f0: 6e22 3e65 785f 7072 6f6a 323c 2f73 7061 n">ex_proj2 v)
.&n │ │ │ -0004d870: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0004d880: 266e 6273 703b 3a20 3c61 2063 6c61 7373  : ex_intro P u1 u │ │ │ -0004da10: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 =
v
.& │ │ │ -0004db00: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0004db10: 3b26 6e62 7370 3b3a 3d20 3c61 2063 6c61 ; := │ │ │ -0004db70: 6571 5f65 783c 2f73 7061 6e3e 3c2f 613e eq_ex │ │ │ -0004db80: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (ex_i │ │ │ -0004dbe0: 6e74 726f 3c2f 7370 616e 3e3c 2f61 3e20 ntro │ │ │ -0004dbf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ -0004dc50: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ -0004dcb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u2) v
p q< │ │ │ -0004de30: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -0004de40: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ -0004de70: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ -0004de80: 3c61 2069 643d 2265 715f 6578 5f69 6e74 eq │ │ │ -0004dee0: 5f65 785f 696e 7472 6f5f 723c 2f73 7061 _ex_intro_r {A : │ │ │ -0004df50: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ -0004df80: 3c61 2069 643d 2250 3a35 3332 2220 636c P : A < │ │ │ -0004e080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004e090: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0004e0a0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ -0004e0e0: 283c 6120 6964 3d22 753a 3533 3422 2063 (u : exists< │ │ │ -0004e1b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a : A │ │ │ -0004e270: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 , │ │ │ -0004e2f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ -0004e350: 203c 6120 636c 6173 733d 2269 6472 6566 a) < │ │ │ -0004e3e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004e3f0: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -0004e400: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 v2
.&nbs │ │ │ -0004e470: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0004e480: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0004e490: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0004e4a0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0004e4b0: 6273 703b 266e 6273 703b 283c 6120 6964 bsp; (p : ex_ │ │ │ -0004e570: 7072 6f6a 313c 2f73 7061 6e3e 3c2f 613e proj1 │ │ │ -0004e580: 203c 6120 636c 6173 733d 2269 6472 6566 u < │ │ │ -0004e630: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004e640: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0004e650: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= v1 │ │ │ -0004e6c0: 2920 283c 6120 6964 3d22 713a 3533 3822 ) (q : rew p in ex_pr │ │ │ -0004e8d0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ -0004e8e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0004e8f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0004e900: 6f67 6963 2e68 746d 6c23 753a 3533 3422 ogic.html#u:534" │ │ │ -0004e910: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -0004e940: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0004e9b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0004e9f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004ea00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004ea10: 3e76 323c 2f73 7061 6e3e 3c2f 613e 293c >v2)< │ │ │ -0004ea20: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0004ea30: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ -0004ea40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0004ea50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0004ea60: 6f67 6963 2e68 746d 6c23 753a 3533 3422 ogic.html#u:534" │ │ │ -0004ea70: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -0004eaa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0004eb10: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_intro P< │ │ │ -0004ebe0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0004ec40: 7631 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v1 v2 │ │ │ -0004ecb0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0004ecc0: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ -0004ecd0: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ex u
(< │ │ │ -0004edd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004ede0: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -0004edf0: 6f72 223e 6578 5f69 6e74 726f 3c2f 7370 or">ex_intro P
v1 │ │ │ -0004eec0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0004ef00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004ef10: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004ef20: 3e76 323c 2f73 7061 6e3e 3c2f 613e 2920 >v2) │ │ │ -0004ef30: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -0004ef90: 203c 6120 636c 6173 733d 2269 6472 6566 q.
..
.< │ │ │ -0004f000: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Inducti │ │ │ -0004f020: 6f6e 2070 7269 6e63 6970 6c65 2066 6f72 on principle for │ │ │ -0004f030: 203c 7370 616e 2063 6c61 7373 3d22 696e @eq ( │ │ │ -0004f0b0: 6578 3c2f 7370 616e 3e3c 2f73 7061 6e3e ex │ │ │ -0004f0c0: 203c 7370 616e 2063 6c61 7373 3d22 696e _) │ │ │ -0004f100: 3c2f 7370 616e 3e20 0a3c 2f64 6976 3e0a .
. │ │ │ -0004f110: 3c64 6976 2063 6c61 7373 3d22 636f 6465
.  < │ │ │ -0004f130: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004f140: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0004f150: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition eq_ex_et │ │ │ -0004f1c0: 613c 2f73 7061 6e3e 3c2f 613e 207b 3c61 a {A │ │ │ -0004f220: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop} { │ │ │ -0004f280: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0004f2a0: 503c 2f73 7061 6e3e 3c2f 613e 203a 203c P : < │ │ │ -0004f2b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0004f2c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0004f2d0: 6f67 6963 2e68 746d 6c23 413a 3533 3922 ogic.html#A:539" │ │ │ -0004f2e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ -0004f310: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop} {u v │ │ │ -0004f460: 3c2f 613e 203a 203c 6120 636c 6173 733d : exists a : │ │ │ -0004f540: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -0004f610: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ -0004f650: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0004f660: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0004f670: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -0004f6b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a} │ │ │ -0004f6e0: 283c 6120 6964 3d22 703a 3534 3422 2063 (p : u< │ │ │ -0004f790: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v) : p │ │ │ -0004f8d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = eq │ │ │ -0004f9b0: 5f65 783c 2f73 7061 6e3e 3c2f 613e 203c _ex < │ │ │ -0004f9c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0004f9d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0004f9e0: 6f67 6963 2e68 746d 6c23 753a 3534 3222 ogic.html#u:542" │ │ │ -0004f9f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -0004fa20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -0004fa80: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (ex │ │ │ -0004fae0: 5f70 726f 6a31 5f65 713c 2f73 7061 6e3e _proj1_eq │ │ │ -0004faf0: 3c2f 613e 203c 6120 636c 6173 733d 2269 p) ( │ │ │ -0004fb90: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj2_eq< │ │ │ -0004fbc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ -0004fc20: 3c2f 7370 616e 3e3c 2f61 3e29 2e3c 6272 ).
.    │ │ │ -0004fc40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition eq_ex │ │ │ -0004fcd0: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ -0004fce0: 207b 3c61 2069 643d 2241 3a35 3435 2220 {A
: Prop │ │ │ -0004fd60: 3c2f 7370 616e 3e7d 207b 3c61 2069 643d } {P │ │ │ -0004fdc0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ -0004fe20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0004fe90: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ -0004fec0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {u v
: exists │ │ │ -0004fff0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 a : A, │ │ │ -00050130: 203c 6120 636c 6173 733d 2269 6472 6566 P a} (< │ │ │ -00050220: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00050230: 7469 746c 653d 2262 696e 6465 7222 3e51 title="binder">Q │ │ │ -00050240: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -00050280: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ -000502b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000502c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000502d0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -000502e0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -000502f0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -00050320: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> v │ │ │ -00050380: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00050400: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Type │ │ │ -00050430: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00050440: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00050450: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00050460: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00050470: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00050480: 6e62 7370 3b28 3c61 2069 643d 2266 3a35 nbsp;(
│ │ │ -000504b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000504d0: 663c 2f73 7061 6e3e 3c2f 613e 203a 203c f : < │ │ │ -000504e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000504f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00050500: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall p │ │ │ -00050560: 3c2f 613e 203c 6120 6964 3d22 713a 3535 < │ │ │ -00050590: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000505a0: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ -000505b0: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ -000505f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00050600: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00050610: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 283c >Q (< │ │ │ -00050620: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00050630: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00050640: 6f67 6963 2e68 746d 6c23 6571 5f65 7822 ogic.html#eq_ex" │ │ │ -00050650: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >eq_ex u
v p
q))
│ │ │ -00050810: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00050820: 7370 3b26 6e62 7370 3b3a 203c 7370 616e sp; : fora │ │ │ -00050850: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ -000508b0: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , Q p< │ │ │ -00050970: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ -00050980: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00050990: 3b3a 3d20 3c73 7061 6e20 636c 6173 733d ;:= fun │ │ │ -000509c0: 3c61 2069 643d 2270 3a35 3535 2220 636c
p => < │ │ │ -00050a70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00050a80: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00050a90: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ -00050aa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ -00050b20: 3c2f 613e 203c 6120 636c 6173 733d 2269 e │ │ │ -00050b80: 715f 6578 5f65 7461 3c2f 7370 616e 3e3c q_ex_eta< │ │ │ -00050b90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ -00050bf0: 3c2f 613e 203c 6120 636c 6173 733d 2269 in f _ _.
.  │ │ │ -00050d30: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -00050d60: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n e │ │ │ -00050dc0: 715f 6578 5f72 6563 3c2f 7370 616e 3e3c q_ex_rec< │ │ │ -00050dd0: 2f61 3e20 7b3c 6120 6964 3d22 413a 3535 /a> {< │ │ │ -00050e00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00050e10: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -00050e20: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -00050e50: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ -00050eb0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A -& │ │ │ -00050f80: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00050f90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00050fa0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00050fb0: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {u │ │ │ -00051010: 3c2f 613e 203c 6120 6964 3d22 763a 3535 < │ │ │ -00051040: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00051050: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -00051060: 3c2f 7370 616e 3e3c 2f61 3e7d 2028 3c61 } (Q │ │ │ -000510c0: 3c2f 613e 203a 203c 6120 636c 6173 733d : u =< │ │ │ -000511a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ -00051200: 3c2f 613e 203c 6120 636c 6173 733d 2269 :> │ │ │ -00051280: 3c2f 613e 203c 6120 636c 6173 733d 2269 ( │ │ │ -00051300: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ -00051370: 7869 7374 733c 2f73 7061 6e3e 3c2f 613e xists │ │ │ -00051380: 203c 6120 6964 3d22 613a 3536 3022 2063 a : A< │ │ │ -00051430: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, P a) ->< │ │ │ -00051660: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Set< │ │ │ -00051690: 2f73 7061 6e3e 2920 3a3d 203c 6120 636c /span>) := eq_ex_rect │ │ │ -00051700: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00051760: 513c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 Q.
.  < │ │ │ -00051780: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00051790: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -000517a0: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition eq_ex_in │ │ │ -00051810: 643c 2f73 7061 6e3e 3c2f 613e 207b 3c61 d {A │ │ │ -00051870: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop} { │ │ │ -000518d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000518f0: 503c 2f73 7061 6e3e 3c2f 613e 203a 203c P : < │ │ │ -00051900: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00051910: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00051920: 6f67 6963 2e68 746d 6c23 413a 3536 3222 ogic.html#A:562" │ │ │ -00051930: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ -00051960: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop
} {u v │ │ │ -00051ab0: 3c2f 613e 7d20 283c 6120 6964 3d22 513a } (Q : │ │ │ -00051b10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -00051b70: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00051be0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -00051c20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00051c30: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00051c40: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >v :&g │ │ │ -00051cc0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (exists a │ │ │ -00051e20: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ -00051e80: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -00051ed0: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ -00051f00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00051f10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00051f20: 6f67 6963 2e68 746d 6c23 503a 3536 3322 ogic.html#P:563" │ │ │ -00051f30: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ -00051f60: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ -00051fc0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ) │ │ │ -00052030: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -000520b0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -000520e0: 2920 3a3d 203c 6120 636c 6173 733d 2269 ) := e │ │ │ -00052140: 715f 6578 5f72 6563 3c2f 7370 616e 3e3c q_ex_rec< │ │ │ -00052150: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ -000521b0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.In o │ │ │ -000521e0: 7264 6572 2074 6f20 6861 7665 2061 2070 rder to have a p │ │ │ -000521f0: 6572 666f 726d 616e 7420 3c73 7061 6e20 erformant │ │ │ -00052230: 696e 7665 7273 696f 6e5f 7369 676d 613c inversion_sigma< │ │ │ -00052240: 2f73 7061 6e3e 3c2f 7370 616e 3e2c 2077 /span>, w │ │ │ -00052250: 6520 6465 6669 6e65 0a20 2020 2020 2073 e define. s │ │ │ -00052260: 7065 6369 616c 697a 6564 2076 6572 7369 pecialized versi │ │ │ -00052270: 6f6e 7320 666f 7220 7768 656e 2077 6520 ons for when we │ │ │ -00052280: 6861 7665 2063 6f6e 7374 7275 6374 6f72 have constructor │ │ │ -00052290: 7320 6f6e 206f 6e65 206f 720a 2020 2020 s on one or. │ │ │ -000522a0: 2020 626f 7468 2073 6964 6573 206f 6620 both sides of │ │ │ -000522b0: 7468 6520 6571 7561 6c69 7479 200a 3c2f the equality ..
. &n │ │ │ -000522e0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ -00052310: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_ex_rect_ │ │ │ -00052390: 6578 5f69 6e74 726f 5f6c 3c2f 7370 616e ex_intro_l {A : │ │ │ -00052400: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -00052430: 6120 6964 3d22 503a 3536 3922 2063 6c61 a id="P:569" cla │ │ │ -00052440: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00052450: 2223 503a 3536 3922 3e3c 7370 616e 2063 "#P:569">P : A │ │ │ -00052550: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00052560: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ -00052590: 3c61 2069 643d 2275 313a 3537 3022 2063 u1 u2< │ │ │ -00052640: 2f61 3e20 3c61 2069 643d 2276 3a35 3732 /a> v< │ │ │ -00052690: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (Q< │ │ │ -000526f0: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : _ ->< │ │ │ -00052790: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Type │ │ │ -000527c0: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -000527d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000527e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000527f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00052800: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00052810: 6e62 7370 3b28 3c61 2069 643d 2266 3a35 nbsp;(
│ │ │ -00052840: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00052860: 663c 2f73 7061 6e3e 3c2f 613e 203a 203c f : < │ │ │ -00052870: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00052880: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00052890: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall p │ │ │ -000528f0: 3c2f 613e 203c 6120 6964 3d22 713a 3537 < │ │ │ -00052920: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00052930: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ -00052940: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ -00052980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00052990: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000529a0: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 283c >Q (< │ │ │ -000529b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000529c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000529d0: 6f67 6963 2e68 746d 6c23 6571 5f65 785f ogic.html#eq_ex_ │ │ │ -000529e0: 696e 7472 6f5f 6c22 3e3c 7370 616e 2063 intro_l">eq_ │ │ │ -00052a10: 6578 5f69 6e74 726f 5f6c 3c2f 7370 616e ex_intro_l (P:= │ │ │ -00052a80: 3c73 7061 6e20 636c 6173 733d 2269 6422 P) │ │ │ -00052ab0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u1 u2 v p q
))
. │ │ │ -00052ca0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00052cb0: 703b 266e 6273 703b 3a20 3c73 7061 6e20 p; : foral │ │ │ -00052ce0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l p, │ │ │ -00052d40: 203c 6120 636c 6173 733d 2269 6472 6566 Q p
. &n │ │ │ -00052e10: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00052e20: 3a3d 203c 6120 636c 6173 733d 2269 6472 :=
eq │ │ │ -00052e80: 5f65 785f 7265 6374 3c2f 7370 616e 3e3c _ex_rect< │ │ │ -00052e90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ -00052ef0: 3c2f 613e 203c 6120 636c 6173 733d 2269 f.
.&nbs │ │ │ -00052f60: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ -00052f90: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion eq_ex_r │ │ │ -00053010: 6563 745f 6578 5f69 6e74 726f 5f72 3c2f ect_ex_intro_r {A : Prop │ │ │ -000530b0: 7d20 7b3c 6120 6964 3d22 503a 3537 3922 } {P : │ │ │ -00053160: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ -000531e0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop} {u< │ │ │ -00053260: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> v1 │ │ │ -000532c0: 3c2f 613e 203c 6120 6964 3d22 7632 3a35 v2} │ │ │ -00053320: 283c 6120 6964 3d22 513a 3538 3322 2063 (Q : _ │ │ │ -000533a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Type)
.  │ │ │ -00053450: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00053460: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00053470: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00053480: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00053490: 7370 3b26 6e62 7370 3b28 3c61 2069 643d sp; (f │ │ │ -000534f0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall p
q, │ │ │ -000535d0: 203c 6120 636c 6173 733d 2269 6472 6566 Q (eq_ex_intro_r (P │ │ │ -000536d0: 3a3d 3c61 2063 6c61 7373 3d22 6964 7265 :=P) u │ │ │ -00053790: 3c2f 613e 203c 6120 636c 6173 733d 2269 v1 v2< │ │ │ -00053850: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ -000538b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00053910: 713c 2f73 7061 6e3e 3c2f 613e 2929 3c62 q)).   │ │ │ -00053930: 266e 6273 703b 266e 6273 703b 3a20 3c73   : f │ │ │ -00053960: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall p< │ │ │ -000539c0: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, Q p
.&nbs │ │ │ -00053a90: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00053aa0: 6273 703b 3a3d 203c 6120 636c 6173 733d bsp;:= eq_ex_rect Q f.
. │ │ │ -00053be0: 266e 6273 703b 266e 6273 703b 3c73 7061   Def │ │ │ -00053c10: 696e 6974 696f 6e3c 2f73 7061 6e3e 203c inition < │ │ │ -00053c20: 6120 6964 3d22 6571 5f65 785f 7265 6374 a id="eq_ex_rect │ │ │ -00053c30: 5f65 785f 696e 7472 6f22 2063 6c61 7373 _ex_intro" class │ │ │ -00053c40: 3d22 6964 7265 6622 2068 7265 663d 2223 ="idref" href="# │ │ │ -00053c50: 6571 5f65 785f 7265 6374 5f65 785f 696e eq_ex_rect_ex_in │ │ │ -00053c60: 7472 6f22 3e3c 7370 616e 2063 6c61 7373 tro">eq_ex_r │ │ │ -00053c90: 6563 745f 6578 5f69 6e74 726f 3c2f 7370 ect_ex_intro {A │ │ │ -00053d00: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop} │ │ │ -00053d30: 7b3c 6120 6964 3d22 503a 3538 3922 2063 {P : A< │ │ │ -00053de0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00053e30: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop} │ │ │ -00053e90: 207b 3c61 2069 643d 2275 313a 3539 3022 {u1 │ │ │ -00053ee0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 u2 v1 │ │ │ -00053fa0: 3c61 2069 643d 2276 323a 3539 3322 2063 v2} (Q : _ │ │ │ -000540c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Type) │ │ │ -00054120: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00054130: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00054140: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00054150: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00054160: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00054170: 6273 703b 283c 6120 6964 3d22 663a 3539 bsp;(
< │ │ │ -000541a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000541b0: 7469 746c 653d 2262 696e 6465 7222 3e66 title="binder">f │ │ │ -000541c0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -000541f0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall p< │ │ │ -00054250: 2f61 3e20 3c61 2069 643d 2271 3a35 3936 /a> q< │ │ │ -000542a0: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, │ │ │ -00054300: 513c 2f73 7061 6e3e 3c2f 613e 2028 403c Q (@< │ │ │ -00054310: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00054320: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00054330: 6f67 6963 2e68 746d 6c23 6571 5f65 785f ogic.html#eq_ex_ │ │ │ -00054340: 696e 7472 6f22 3e3c 7370 616e 2063 6c61 intro">eq_ex │ │ │ -00054370: 5f69 6e74 726f 3c2f 7370 616e 3e3c 2f61 _intro A P< │ │ │ -00054440: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u1
v1 u │ │ │ -00054560: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 │ │ │ -000545a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2 │ │ │ -000545d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -00054630: 203c 6120 636c 6173 733d 2269 6472 6566 q))
. & │ │ │ -000546a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000546b0: 3b3a 203c 7370 616e 2063 6c61 7373 3d22 ;: forall p
, Q< │ │ │ -00054790: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ -000547f0: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ -00054800: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00054810: 7370 3b26 6e62 7370 3b3a 3d20 3c61 2063 sp; := eq_ex_rec │ │ │ -00054880: 743c 2f73 7061 6e3e 3c2f 613e 203c 6120 t < │ │ │ -000548c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000548d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000548e0: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ -00054920: 3c73 7061 6e20 636c 6173 733d 2269 6422 f.< │ │ │ -00054950: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ -00054960: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ -00054990: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion eq_ex_rec │ │ │ -00054a10: 745f 756e 6375 7272 6965 643c 2f73 7061 t_uncurried {A : │ │ │ -00054a80: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ -00054ab0: 3c61 2069 643d 2250 3a36 3030 2220 636c P : A < │ │ │ -00054bb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00054bc0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00054bd0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ -00054c10: 7b3c 6120 6964 3d22 753a 3630 3222 2063 {u v : │ │ │ -00054cc0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00054d30: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists a : A │ │ │ -00054df0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a
} (Q : u │ │ │ -00054ff0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00055070: 203c 6120 636c 6173 733d 2269 6472 6566 v -> Type< │ │ │ -00055170: 2f73 7061 6e3e 293c 6272 2f3e 0a26 6e62 /span>)
.&nb │ │ │ -00055180: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00055190: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000551a0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000551b0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000551c0: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (f : forall │ │ │ -00055280: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000552a0: 7071 3c2f 7370 616e 3e3c 2f61 3e2c 203c pq, < │ │ │ -000552b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000552c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000552d0: 6f67 6963 2e68 746d 6c23 513a 3630 3422 ogic.html#Q:604" │ │ │ -000552e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ -00055310: 283c 6120 636c 6173 733d 2269 6472 6566 (eq_ex u
v ( │ │ │ -00055470: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj1 pq< │ │ │ -00055500: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (ex_proj2 p │ │ │ -000555d0: 713c 2f73 7061 6e3e 3c2f 613e 2929 293c q)))< │ │ │ -000555e0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -000555f0: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ -00055600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00055610: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00055620: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall p │ │ │ -00055680: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , Q p
.&nb │ │ │ -00055750: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00055760: 6e62 7370 3b3a 3d20 3c61 2063 6c61 7373 nbsp;:= < │ │ │ -000557a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000557b0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000557c0: 6e22 3e65 715f 6578 5f72 6563 743c 2f73 n">eq_ex_rect
Q (fun< │ │ │ -00055860: 2f73 7061 6e3e 203c 6120 6964 3d22 703a /span> p q │ │ │ -00055910: 3c2f 613e 203d 2667 743b 203c 6120 636c => f │ │ │ -00055970: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (ex_intro< │ │ │ -000559e0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ -00055a10: 203c 6120 636c 6173 733d 2269 6472 6566 p q)).
.  │ │ │ -00055ae0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ -00055b10: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on
│ │ │ -00055b60: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex_rec_un │ │ │ -00055b90: 6375 7272 6965 643c 2f73 7061 6e3e 3c2f curried {A< │ │ │ -00055bf0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ -00055c20: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P : A -&g │ │ │ -00055d50: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; P │ │ │ -00055d80: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {u< │ │ │ -00055de0: 2f61 3e20 3c61 2069 643d 2276 3a36 3133 /a> v< │ │ │ -00055e30: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (Q< │ │ │ -00055e90: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : u = v< │ │ │ -00055fd0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> :>< │ │ │ -00056050: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> (< │ │ │ -000560d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000560e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000560f0: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ -00056100: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ -00056110: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ -00056140: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ -00056150: 3c61 2069 643d 2261 3a36 3134 2220 636c a : A, │ │ │ -00056280: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a) -> Set) := e │ │ │ -000564d0: 715f 6578 5f72 6563 745f 756e 6375 7272 q_ex_rect_uncurr │ │ │ -000564e0: 6965 643c 2f73 7061 6e3e 3c2f 613e 203c ied < │ │ │ -000564f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00056500: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00056510: 6f67 6963 2e68 746d 6c23 513a 3631 3522 ogic.html#Q:615" │ │ │ -00056520: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q. │ │ │ -00056550: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00056560: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
e │ │ │ -00056600: 715f 6578 5f69 6e64 5f75 6e63 7572 7269 q_ex_ind_uncurri │ │ │ -00056610: 6564 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ed {< │ │ │ -00056620: 6120 6964 3d22 413a 3631 3622 2063 6c61 a id="A:616" cla │ │ │ -00056630: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00056640: 2223 413a 3631 3622 3e3c 7370 616e 2063 "#A:616">A : Prop
} {P : │ │ │ -00056700: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00056760: 203c 6120 636c 6173 733d 2269 6472 6566 ->
Prop} {u < │ │ │ -00056860: 6120 6964 3d22 763a 3631 3922 2063 6c61 a id="v:619" cla │ │ │ -00056870: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00056880: 2223 763a 3631 3922 3e3c 7370 616e 2063 "#v:619">v} (Q : │ │ │ -00056910: 203c 6120 636c 6173 733d 2269 6472 6566 u < │ │ │ -000569c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000569d0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000569e0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ -00056a20: 3c73 7061 6e20 636c 6173 733d 2269 6422 v < │ │ │ -00056a50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00056a60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00056a70: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ -00056a80: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ -00056a90: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">:& │ │ │ -00056ac0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ -00056ad0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00056ae0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00056af0: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ -00056b00: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ -00056b10: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">(< │ │ │ -00056b40: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>exists< │ │ │ -00056bc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a : A │ │ │ -00056c80: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 , │ │ │ -00056d00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ -00056d60: 203c 6120 636c 6173 733d 2269 6472 6566 a │ │ │ -00056e30: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) -> │ │ │ -00056eb0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop) := eq_ex_ │ │ │ -00056f50: 7265 635f 756e 6375 7272 6965 643c 2f73 rec_uncurried Q.
. │ │ │ -00056fd0: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ -00056fe0: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -00056ff0: 0a45 7175 616c 6974 7920 6f66 203c 7370 .Equality of ex when the pro │ │ │ -00057050: 7065 7274 7920 6973 2061 6e20 6850 726f perty is an hPro │ │ │ -00057060: 7020 0a3c 2f64 6976 3e0a 3c64 6976 2063 p .
.
.&nb │ │ │ -00057080: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ -000570b0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_ex_hpro │ │ │ -00057120: 703c 2f73 7061 6e3e 3c2f 613e 207b 3c61 p {A │ │ │ -00057180: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop} { │ │ │ -000571e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00057200: 503c 2f73 7061 6e3e 3c2f 613e 203a 203c P : < │ │ │ -00057210: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00057220: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00057230: 6f67 6963 2e68 746d 6c23 413a 3632 3222 ogic.html#A:622" │ │ │ -00057240: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ -00057270: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop} (P_h │ │ │ -00057370: 7072 6f70 3c2f 7370 616e 3e3c 2f61 3e20 prop │ │ │ -00057380: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ -000573b0: 2028 3c61 2069 643d 2278 3a36 3234 2220 (x : A │ │ │ -00057460: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (p │ │ │ -000574c0: 3c2f 613e 203c 6120 6964 3d22 713a 3632 < │ │ │ -000574f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00057500: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ -00057510: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -00057550: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ -00057580: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00057590: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000575a0: 6f67 6963 2e68 746d 6c23 783a 3632 3422 ogic.html#x:624" │ │ │ -000575b0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x) │ │ │ -000575e0: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , p │ │ │ -00057690: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -000576c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000576d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000576e0: 6f67 6963 2e68 746d 6c23 713a 3632 3622 ogic.html#q:626" │ │ │ -000576f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >q) │ │ │ -00057720: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00057730: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00057740: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00057750: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00057760: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00057770: 6273 703b 283c 6120 6964 3d22 753a 3632 bsp;(< │ │ │ -000577a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000577b0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -000577c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v : exists │ │ │ -000578d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000578f0: 613c 2f73 7061 6e3e 3c2f 613e 203a 203c a : < │ │ │ -00057900: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00057910: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00057920: 6f67 6963 2e68 746d 6c23 413a 3632 3222 ogic.html#A:622" │ │ │ -00057930: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ -00057960: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00057970: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00057980: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ -00057990: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ -000579a0: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">,< │ │ │ -000579d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -00057a30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00057a90: 613c 2f73 7061 6e3e 3c2f 613e 293c 6272 a)
.  & │ │ │ -00057ab0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00057ac0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00057ad0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00057ae0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00057af0: 3b28 3c61 2069 643d 2270 3a36 3331 2220 ;(p
: │ │ │ -00057b80: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj1 u
= │ │ │ -00057c90: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ -00057cf0: 5f70 726f 6a31 3c2f 7370 616e 3e3c 2f61 _proj1 v)
. & │ │ │ -00057d70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00057d80: 3b3a 203c 6120 636c 6173 733d 2269 6472 ;:
u< │ │ │ -00057de0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -00057e60: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -00057ec0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00057ed0: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ -00057ee0: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ex u
v p< │ │ │ -00058060: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (P_hprop
_ < │ │ │ -00058100: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00058110: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_).
..
. & │ │ │ -00058160: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -00058190: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq │ │ │ -00058200: 5f65 785f 696e 7472 6f5f 6870 726f 703c _ex_intro_hprop< │ │ │ -00058210: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Type} {P< │ │ │ -000582f0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00058330: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00058340: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00058350: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} (P_hpr │ │ │ -00058460: 6f70 3c2f 7370 616e 3e3c 2f61 3e20 3a20 op : │ │ │ -00058470: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall ( │ │ │ -000584a0: 3c61 2069 643d 2278 3a36 3334 2220 636c x : A) (p q : │ │ │ -00058660: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -000586a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000586b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000586c0: 3e78 3c2f 7370 616e 3e3c 2f61 3e29 2c20 >x), │ │ │ -000586d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -00058730: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -000587a0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -000587e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000587f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00058800: 3e71 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >q).   │ │ │ -00058820: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00058830: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00058840: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00058850: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00058860: 703b 7b3c 6120 6964 3d22 7531 3a36 3338 p;{< │ │ │ -00058890: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000588a0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -000588b0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 v1 : A} {u2 : P u1 │ │ │ -00058a90: 3c2f 7370 616e 3e3c 2f61 3e7d 207b 3c61 } {v2 : P< │ │ │ -00058b50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00058bb0: 7631 3c2f 7370 616e 3e3c 2f61 3e7d 3c62 v1}.   │ │ │ -00058bd0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00058be0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00058bf0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00058c00: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00058c10: 703b 283c 6120 6964 3d22 703a 3634 3222 p;(p : < │ │ │ -00058ca0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00058cb0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00058cc0: 3e75 313c 2f73 7061 6e3e 3c2f 613e 203c >u1 < │ │ │ -00058cd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00058ce0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00058cf0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -00058d00: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -00058d10: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -00058d40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00058da0: 7631 3c2f 7370 616e 3e3c 2f61 3e29 3c62 v1).   │ │ │ -00058dc0: 266e 6273 703b 266e 6273 703b 3a20 3c61   : ex_intro │ │ │ -00058e30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00058e90: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ -00058ed0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u1 │ │ │ -00058f00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u2 │ │ │ -00058fb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -00058fe0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00058ff0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00059000: 6f67 6963 2e68 746d 6c23 6578 5f69 6e74 ogic.html#ex_int │ │ │ -00059010: 726f 223e 3c73 7061 6e20 636c 6173 733d ro">ex_intr │ │ │ -00059040: 6f3c 2f73 7061 6e3e 3c2f 613e 203c 6120 o < │ │ │ -00059080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00059090: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000590a0: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P v1 │ │ │ -00059110: 203c 6120 636c 6173 733d 2269 6472 6566 v2< │ │ │ -00059170: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ -00059180: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00059190: 3b3a 3d20 3c61 2063 6c61 7373 3d22 6964 ;:=
│ │ │ -000591f0: 6571 5f65 785f 696e 7472 6f3c 2f73 7061 eq_ex_intro p (P_hprop _ _ _ │ │ │ -00059340: 3c2f 7370 616e 3e29 2e3c 6272 2f3e 0a0a ).
.. │ │ │ -00059350: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ -00059370: 4571 7569 7661 6c65 6e63 6520 6f66 2065 Equivalence of e │ │ │ -00059380: 7175 616c 6974 7920 6f66 203c 7370 616e quality of ex with a e │ │ │ -00059410: 783c 2f73 7061 6e3e 3c2f 7370 616e 3e20 x │ │ │ -00059420: 6f66 2065 7175 616c 6974 7920 2057 6520 of equality We │ │ │ -00059430: 636f 756c 6420 6163 7475 616c 6c79 2070 could actually p │ │ │ -00059440: 726f 7665 2061 6e20 6973 6f6d 6f72 7068 rove an isomorph │ │ │ -00059450: 6973 6d20 6865 7265 2c20 616e 6420 6e6f ism here, and no │ │ │ -00059460: 7420 6a75 7374 203c 7370 616e 2063 6c61 t just │ │ │ -00059480: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ -00059490: 2c0a 2020 2020 2020 6275 7420 666f 7220 ,. but for │ │ │ -000594a0: 7369 6d70 6c69 6369 7479 2c20 7765 2064 simplicity, we d │ │ │ -000594b0: 6f6e 2774 2e20 0a3c 2f64 6976 3e0a 3c64 on't. .
. │ │ │ -000594d0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ -00059500: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ -00059510: 3c61 2069 643d 2265 715f 6578 5f75 6e63 eq_ex_ │ │ │ -00059580: 756e 6375 7272 6965 645f 6966 663c 2f73 uncurried_iff {A │ │ │ -000595f0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ -00059620: 207b 3c61 2069 643d 2250 3a36 3434 2220 {P : A │ │ │ -000596d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00059750: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00059780: 7d20 283c 6120 6964 3d22 753a 3634 3622 } (u v │ │ │ -00059830: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -00059880: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -000598b0: 2f61 3e20 3c61 2069 643d 2261 3a36 3435 /a> a< │ │ │ -00059900: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00059940: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00059950: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00059960: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -00059aa0: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -00059ab0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00059ac0: 7370 3b26 6e62 7370 3b3a 203c 6120 636c sp; : u │ │ │ -00059b20: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v
<->
exists p │ │ │ -00059d60: 203a 203c 6120 636c 6173 733d 2269 6472 : ex_p │ │ │ -00059dc0: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ -00059dd0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -00059e30: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00059ea0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_proj1 v< │ │ │ -00059f70: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, │ │ │ -0005a040: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -0005a070: 203c 6120 636c 6173 733d 2269 6472 6566 p in │ │ │ -0005a140: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2 u = e │ │ │ -0005a2f0: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ -0005a360: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ -0005a370: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Equiv │ │ │ -0005a390: 616c 656e 6365 206f 6620 6571 7561 6c69 alence of equali │ │ │ -0005a3a0: 7479 206f 6620 3c73 7061 6e20 636c 6173 ty of < │ │ │ -0005a3c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005a3d0: 7469 746c 653d 2276 6172 223e 6578 3c2f title="var">ex inv │ │ │ -0005a3f0: 6f6c 7669 6e67 2068 5072 6f70 7320 7769 olving hProps wi │ │ │ -0005a400: 7468 2065 7175 616c 6974 7920 6f66 2074 th equality of t │ │ │ -0005a410: 6865 2066 6972 7374 2063 6f6d 706f 6e65 he first compone │ │ │ -0005a420: 6e74 7320 0a3c 2f64 6976 3e0a 3c64 6976 nts .
.
.& │ │ │ -0005a440: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ -0005a470: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition │ │ │ -0005a4e0: 6571 5f65 785f 6870 726f 705f 6966 663c eq_ex_hprop_iff< │ │ │ -0005a4f0: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Prop} {P< │ │ │ -0005a5d0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -0005a610: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005a620: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005a630: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} (P_hpr │ │ │ -0005a740: 6f70 3c2f 7370 616e 3e3c 2f61 3e20 3a20 op : │ │ │ -0005a750: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall ( │ │ │ -0005a780: 3c61 2069 643d 2278 3a36 3531 2220 636c x : A) (p q : │ │ │ -0005a940: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -0005a980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005a990: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005a9a0: 3e78 3c2f 7370 616e 3e3c 2f61 3e29 2c20 >x), │ │ │ -0005a9b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -0005aa10: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0005aa80: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -0005aac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005aad0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005aae0: 3e71 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >q).   │ │ │ -0005ab00: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0005ab10: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0005ab20: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0005ab30: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0005ab40: 703b 283c 6120 6964 3d22 753a 3635 3622 p;(u v │ │ │ -0005abf0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -0005ac40: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -0005ac70: 2f61 3e20 3c61 2069 643d 2261 3a36 3535 /a> a< │ │ │ -0005acc0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -0005ad00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005ad10: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005ad20: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -0005ae60: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -0005ae70: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -0005ae80: 7370 3b26 6e62 7370 3b3a 203c 6120 636c sp; : u │ │ │ -0005aee0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v
<->
( │ │ │ -0005b0c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ -0005b120: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ -0005b160: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005b170: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005b180: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = < │ │ │ -0005b240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005b250: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -0005b260: 6e22 3e65 785f 7072 6f6a 313c 2f73 7061 n">ex_proj1 v │ │ │ -0005b320: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).   │ │ │ -0005b360: 266e 6273 703b 266e 6273 703b 3a3d 203c   := < │ │ │ -0005b370: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005b380: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005b390: 6f67 6963 2e68 746d 6c23 636f 6e6a 223e ogic.html#conj"> │ │ │ -0005b3a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 conj │ │ │ -0005b3d0: 3c2f 613e 2028 3c73 7061 6e20 636c 6173 (fun p
=> < │ │ │ -0005b460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005b470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005b480: 6f67 6963 2e68 746d 6c23 665f 6571 7561 ogic.html#f_equa │ │ │ -0005b490: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">f_equal │ │ │ -0005b4c0: 3c2f 613e 2028 403c 6120 636c 6173 733d (@ │ │ │ -0005b520: 6578 5f70 726f 6a31 3c2f 7370 616e 3e3c ex_proj1< │ │ │ -0005b530: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _) │ │ │ -0005b580: 203c 6120 636c 6173 733d 2269 6472 6566 p) ( │ │ │ -0005b640: 6571 5f65 785f 6870 726f 703c 2f73 7061 eq_ex_hprop < │ │ │ -0005b690: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005b6a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005b6b0: 3e50 5f68 7072 6f70 3c2f 7370 616e 3e3c >P_hprop< │ │ │ -0005b6c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ -0005b720: 3c2f 613e 203c 6120 636c 6173 733d 2269 v).
...   │ │ │ -0005b7a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Lemma rew_ex< │ │ │ -0005b820: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A' : Type
} {x} { │ │ │ -0005b910: 3c61 2069 643d 2250 3a36 3631 2220 636c P : A' │ │ │ -0005b9c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0005ba40: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -0005ba70: 7d20 283c 6120 6964 3d22 513a 3636 3322 } (Q : for │ │ │ -0005baf0: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all a, P< │ │ │ -0005bbb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -0005bc10: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0005bc80: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ -0005bcb0: 6f70 3c2f 7370 616e 3e29 2028 3c61 2069 op) (u : exists │ │ │ -0005bdc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0005bde0: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -0005bdf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005be00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005be10: 6f67 6963 2e68 746d 6c23 503a 3636 3122 ogic.html#P:661" │ │ │ -0005be20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ -0005be50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ -0005beb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -0005bf20: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005bf80: 513c 2f73 7061 6e3e 3c2f 613e 203c 6120 Q < │ │ │ -0005bfc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005bfd0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005bfe0: 3e78 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >x │ │ │ -0005c020: 3c73 7061 6e20 636c 6173 733d 2269 6422 p) │ │ │ -0005c050: 7b3c 6120 6964 3d22 793a 3636 3622 2063 {y} (H │ │ │ -0005c100: 203a 203c 6120 636c 6173 733d 2269 6472 : x< │ │ │ -0005c160: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -0005c1e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ -0005c240: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -0005c250: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -0005c260: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0005c2d0: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ -0005c2e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005c2f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005c300: 6f67 6963 2e68 746d 6c23 3737 3334 6431 ogic.html#7734d1 │ │ │ -0005c310: 3765 6235 6630 3664 3338 3433 6635 3039 7eb5f06d3843f509 │ │ │ -0005c320: 3934 3665 6435 6261 3435 223e 3c73 7061 946ed5ba45">[< │ │ │ -0005c350: 2f73 7061 6e3e 3c2f 613e 3c73 7061 6e20 /span>fun │ │ │ -0005c3b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0005c3d0: 613c 2f73 7061 6e3e 3c2f 613e 203d 2667 a =&g │ │ │ -0005c3e0: 743b 203c 6120 636c 6173 733d 2269 6472 t; │ │ │ -0005c430: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -0005c460: 2f61 3e20 3c61 2069 643d 2270 3a36 3639 /a> p< │ │ │ -0005c4b0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -0005c4f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005c500: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005c510: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -0005c550: 3c73 7061 6e20 636c 6173 733d 2269 6422 a, Q< │ │ │ -0005c650: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ -0005c6b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005c710: 703c 2f73 7061 6e3e 3c2f 613e 3c61 2063 p] H in u
.&nbs │ │ │ -0005c8e0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0005c8f0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0005c900: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0005c970: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_intro
.& │ │ │ -0005c9f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0005ca00: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0005ca10: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0005ca20: 6e62 7370 3b26 6e62 7370 3b28 3c61 2063 nbsp; ( │ │ │ -0005ca80: 513c 2f73 7061 6e3e 3c2f 613e 203c 6120 Q < │ │ │ -0005cac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005cad0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005cae0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >y).   │ │ │ -0005cb00: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0005cb10: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0005cb20: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0005cb30: 283c 6120 636c 6173 733d 2269 6472 6566 (rew │ │ │ -0005cba0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005cc00: 483c 2f73 7061 6e3e 3c2f 613e 203c 6120 H in
│ │ │ -0005cce0: 6578 5f70 726f 6a31 3c2f 7370 616e 3e3c ex_proj1< │ │ │ -0005ccf0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ -0005cd50: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ -0005cd60: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0005cd70: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0005cd80: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0005cd90: 3b26 6e62 7370 3b28 3c61 2063 6c61 7373 ; ( │ │ │ -0005ce10: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ -0005ce20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005ce30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005ce40: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -0005ce50: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f27 tions.:::'rew'_' │ │ │ -0005ce60: 6465 7065 6e64 656e 7427 5f78 5f27 696e dependent'_x_'in │ │ │ -0005ce70: 275f 7822 3e3c 7370 616e 2063 6c61 7373 '_x">dependent │ │ │ -0005cea0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005cf00: 483c 2f73 7061 6e3e 3c2f 613e 203c 6120 H in ex_p │ │ │ -0005cff0: 726f 6a32 3c2f 7370 616e 3e3c 2f61 3e20 roj2 │ │ │ -0005d000: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -0005d060: 292e 3c62 722f 3e0a 3c73 7061 6e20 636c ).
.End ex.
.Global │ │ │ -0005d120: 4172 6775 6d65 6e74 733c 2f73 7061 6e3e Arguments │ │ │ -0005d130: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ │ │ │ -0005d190: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ -0005d1a0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> A P │ │ │ -0005d1f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _ _ │ │ │ -0005d280: 3c2f 7370 616e 3e20 213c 7370 616e 2063 !p ! │ │ │ -0005d2b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 q / .
.. │ │ │ -0005d2e0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Section
ex2_Prop< │ │ │ -0005d370: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -0005d380: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Va │ │ │ -0005d3b0: 7269 6162 6c65 733c 2f73 7061 6e3e 2028 riables
( │ │ │ -0005d3c0: 3c61 2069 643d 2265 7832 5f50 726f 702e A:Prop) │ │ │ -0005d450: 2028 3c61 2069 643d 2265 7832 5f50 726f (P │ │ │ -0005d4b0: 3c2f 613e 203c 6120 6964 3d22 6578 325f Q:A
- │ │ │ -0005d5e0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e3c >< │ │ │ -0005d5f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005d600: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0005d610: 5072 6f70 3c2f 7370 616e 3e29 2e3c 6272 Prop).
..
.  │ │ │ -0005d630: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -0005d660: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n ex2 │ │ │ -0005d6c0: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ -0005d6d0: 2028 3c61 2069 643d 2250 303a 3637 3622 (P0 │ │ │ -0005d720: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : ex2 │ │ │ -0005d790: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P Q │ │ │ -0005d850: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0005d8d0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Type │ │ │ -0005d900: 2920 283c 6120 6964 3d22 663a 3638 3022 ) (f : for │ │ │ -0005d980: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all x p q, │ │ │ -0005da90: 203c 6120 636c 6173 733d 2269 6472 6566 P0< │ │ │ -0005daf0: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> ( │ │ │ -0005db50: 6578 5f69 6e74 726f 323c 2f73 7061 6e3e ex_intro2 │ │ │ -0005db60: 3c2f 613e 203c 6120 636c 6173 733d 2269 P< │ │ │ -0005dbc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -0005dc30: 203c 6120 636c 6173 733d 2269 6472 6566 x p q< │ │ │ -0005dd50: 2f61 3e29 293c 6272 2f3e 0a26 6e62 7370 /a>))
.  │ │ │ -0005dd60: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0005dd70: 7370 3b3a 203c 7370 616e 2063 6c61 7373 sp;: forall
e< │ │ │ -0005ddf0: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, < │ │ │ -0005de30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005de40: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005de50: 3e50 303c 2f73 7061 6e3e 3c2f 613e 203c >P0 < │ │ │ -0005de60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005de70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005de80: 6f67 6963 2e68 746d 6c23 653a 3638 3122 ogic.html#e:681" │ │ │ -0005de90: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >e< │ │ │ -0005dec0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0005ded0: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ -0005dee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun e => rew │ │ │ -0005dfe0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005e060: 266c 743b 2d3c 2f73 7061 6e3e 3c2f 613e <- │ │ │ -0005e070: 203c 6120 636c 6173 733d 2269 6472 6566 ex2_eta │ │ │ -0005e0d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005e130: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e < │ │ │ -0005e190: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005e1a0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0005e1b0: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ -0005e1c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005e1d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005e1e0: 6f67 6963 2e68 746d 6c23 663a 3638 3022 ogic.html#f:680" │ │ │ -0005e1f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >f │ │ │ -0005e220: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _.
. &n │ │ │ -0005e2a0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ -0005e2d0: 2f73 7061 6e3e 203c 6120 6964 3d22 6578 /span> ex2_rec │ │ │ -0005e330: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ -0005e360: 6f72 616c 6c3c 2f73 7061 6e3e 2028 3c61 orall (P0 : ex2 │ │ │ -0005e420: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 P Q - │ │ │ -0005e560: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0005e570: 3c73 7061 6e20 636c 6173 733d 2269 6422 Set) (f │ │ │ -0005e5f0: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall │ │ │ -0005e650: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0005e670: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x p< │ │ │ -0005e6d0: 2f61 3e20 3c61 2069 643d 2271 3a36 3836 /a> q< │ │ │ -0005e720: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, < │ │ │ -0005e760: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005e770: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005e780: 3e50 303c 2f73 7061 6e3e 3c2f 613e 2028 >P0 ( │ │ │ -0005e790: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_in │ │ │ -0005e7f0: 7472 6f32 3c2f 7370 616e 3e3c 2f61 3e20 tro2 │ │ │ -0005e800: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P Q │ │ │ -0005e8c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0005e920: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x < │ │ │ -0005e960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005e970: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005e980: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p │ │ │ -0005e9c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 q)) │ │ │ -0005e9f0: 2c3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 ,
. &nb │ │ │ -0005ea00: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0005ea10: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; fora │ │ │ -0005ea40: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll e │ │ │ -0005eaa0: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , P0 │ │ │ -0005eb00: 3c2f 613e 203c 6120 636c 6173 733d 2269 e
.  │ │ │ -0005eb70: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0005eb80: 7370 3b3a 3d20 3c61 2063 6c61 7373 3d22 sp;:= e │ │ │ -0005ebe0: 7832 5f72 6563 743c 2f73 7061 6e3e 3c2f x2_rect.
..
. │ │ │ -0005ec00: 3c73 7061 6e20 636c 6173 733d 2269 6422 End
ex2_Prop.
..
.
..
.Equ │ │ │ -0005ecc0: 616c 6974 7920 666f 7220 3c73 7061 6e20 ality for │ │ │ -0005ed00: 6578 323c 2f73 7061 6e3e 3c2f 7370 616e ex2 .
.
.Se │ │ │ -0005ed50: 6374 696f 6e3c 2f73 7061 6e3e 203c 6120 ction ex2.
. & │ │ │ -0005edc0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Local Coer │ │ │ -0005edf0: 6369 6f6e 3c2f 7370 616e 3e20 3c61 2063 cion
ex_of_ex2< │ │ │ -0005ee60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : ex2< │ │ │ -0005ef30: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> >-> │ │ │ -0005efe0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex.
. &n │ │ │ -0005f020: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Local Unset │ │ │ -0005f050: 2049 6d70 6c69 6369 7420 4172 6775 6d65 Implicit Argume │ │ │ -0005f060: 6e74 733c 2f73 7061 6e3e 2e3c 6272 2f3e nts.
│ │ │ -0005f070: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Proje │ │ │ -0005f090: 6374 696e 6720 616e 2065 7175 616c 6974 cting an equalit │ │ │ -0005f0a0: 7920 6f66 2061 2070 6169 7220 746f 2065 y of a pair to e │ │ │ -0005f0b0: 7175 616c 6974 7920 6f66 2074 6865 2066 quality of the f │ │ │ -0005f0c0: 6972 7374 2063 6f6d 706f 6e65 6e74 7320 irst components │ │ │ -0005f0d0: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.  │ │ │ -0005f0f0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ -0005f120: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on ex_of_ex2_ │ │ │ -0005f190: 6571 3c2f 7370 616e 3e3c 2f61 3e20 7b3c eq {< │ │ │ -0005f1a0: 6120 6964 3d22 413a 3638 3922 2063 6c61 a id="A:689" cla │ │ │ -0005f1b0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0005f1c0: 2223 413a 3638 3922 3e3c 7370 616e 2063 "#A:689">A : Prop} {P Q │ │ │ -0005f2d0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ -0005f3a0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0005f3b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -0005f3e0: 6120 6964 3d22 753a 3639 3422 2063 6c61 a id="u:694" cla │ │ │ -0005f3f0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0005f400: 2223 753a 3639 3422 3e3c 7370 616e 2063 "#u:694">u │ │ │ -0005f460: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0005f480: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ -0005f490: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005f4a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005f4b0: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -0005f4c0: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -0005f4d0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">ex │ │ │ -0005f500: 6973 7473 323c 2f73 7061 6e3e 3c2f 613e ists2 │ │ │ -0005f510: 203c 6120 6964 3d22 613a 3639 3222 2063 a< │ │ │ -0005f580: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : A, P< │ │ │ -0005f740: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -0005f7a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 & │ │ │ -0005f820: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a} (p │ │ │ -0005f940: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : u │ │ │ -0005f9f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -0005fa20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0005fa30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0005fa40: 6f67 6963 2e68 746d 6c23 763a 3639 3522 ogic.html#v:695" │ │ │ -0005fa50: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ -0005fa80: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0005fa90: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ -0005faa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -0005fb00: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0005fb70: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -0005fbb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0005fbc0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0005fbd0: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >v :&g │ │ │ -0005fc50: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; exi │ │ │ -0005fcd0: 7374 733c 2f73 7061 6e3e 3c2f 613e 203c sts < │ │ │ -0005fce0: 6120 6964 3d22 613a 3639 3722 2063 6c61 a id="a:697" cla │ │ │ -0005fcf0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0005fd00: 2223 613a 3639 3722 3e3c 7370 616e 2063 "#a:697">a : A,< │ │ │ -0005fe10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ -0005fe70: 3c2f 613e 203c 6120 636c 6173 733d 2269 a
.  │ │ │ -0005fee0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0005fef0: 7370 3b3a 3d20 3c61 2063 6c61 7373 3d22 sp;:= f_equal │ │ │ -0005ff50: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _ p.
. & │ │ │ -0005fff0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -00060020: 3c2f 7370 616e 3e20 3c61 2069 643d 2265
│ │ │ -00060090: 6578 5f70 726f 6a31 5f6f 665f 6578 325f ex_proj1_of_ex2_ │ │ │ -000600a0: 6571 3c2f 7370 616e 3e3c 2f61 3e20 7b3c eq {< │ │ │ -000600b0: 6120 6964 3d22 413a 3639 3822 2063 6c61 a id="A:698" cla │ │ │ -000600c0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000600d0: 2223 413a 3639 3822 3e3c 7370 616e 2063 "#A:698">A : Prop
} {P Q │ │ │ -000601e0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ -000602b0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -000602c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -000602f0: 6120 6964 3d22 753a 3730 3322 2063 6c61 a id="u:703" cla │ │ │ -00060300: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00060310: 2223 753a 3730 3322 3e3c 7370 616e 2063 "#u:703">u │ │ │ -00060370: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00060390: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ -000603a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000603b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000603c0: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -000603d0: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -000603e0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">ex │ │ │ -00060410: 6973 7473 323c 2f73 7061 6e3e 3c2f 613e ists2 │ │ │ -00060420: 203c 6120 6964 3d22 613a 3730 3122 2063 a< │ │ │ -00060490: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : A, P< │ │ │ -00060650: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -000606b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 & │ │ │ -00060730: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a} (p │ │ │ -00060850: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : u │ │ │ -00060900: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -00060930: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00060940: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00060950: 6f67 6963 2e68 746d 6c23 763a 3730 3422 ogic.html#v:704" │ │ │ -00060960: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ -00060990: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -000609a0: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ -000609b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ -00060a10: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ -00060a50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00060a60: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00060a70: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = < │ │ │ -00060b30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00060b40: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00060b50: 6e22 3e65 785f 7072 6f6a 313c 2f73 7061 n">ex_proj1 v
.&nb │ │ │ -00060bd0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00060be0: 6e62 7370 3b3a 3d20 3c61 2063 6c61 7373 nbsp;:= │ │ │ -00060c20: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj1_eq< │ │ │ -00060c50: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (ex_of_e │ │ │ -00060cc0: 7832 5f65 713c 2f73 7061 6e3e 3c2f 613e x2_eq │ │ │ -00060cd0: 203c 6120 636c 6173 733d 2269 6472 6566 p).
..
. │ │ │ -00060d40: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Projec │ │ │ -00060d60: 7469 6e67 2061 6e20 6571 7561 6c69 7479 ting an equality │ │ │ -00060d70: 206f 6620 6120 7061 6972 2074 6f20 6571 of a pair to eq │ │ │ -00060d80: 7561 6c69 7479 206f 6620 7468 6520 7365 uality of the se │ │ │ -00060d90: 636f 6e64 2063 6f6d 706f 6e65 6e74 7320 cond components │ │ │ -00060da0: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.  │ │ │ -00060dc0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ -00060df0: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on ex_proj2_of_ex │ │ │ -00060e70: 325f 6571 3c2f 7370 616e 3e3c 2f61 3e20 2_eq │ │ │ -00060e80: 7b3c 6120 6964 3d22 413a 3730 3622 2063 {A : Prop< │ │ │ -00060f00: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ -00060f60: 3c61 2069 643d 2251 3a37 3038 2220 636c Q : A < │ │ │ -00061060: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00061070: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00061080: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ -000610c0: 7b3c 6120 6964 3d22 753a 3731 3122 2063 {u v : │ │ │ -00061170: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -000611e0: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 a : A, │ │ │ -000613c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a & Q a} (p : u │ │ │ -00061680: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00061700: 203c 6120 636c 6173 733d 2269 6472 6566 v)
. &n │ │ │ -00061770: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00061780: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : re │ │ │ -000617f0: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w │ │ │ -00061860: 6578 5f70 726f 6a31 5f6f 665f 6578 325f ex_proj1_of_ex2_ │ │ │ -00061870: 6571 3c2f 7370 616e 3e3c 2f61 3e20 3c61 eq │ │ │ -000618b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ -000618e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000618f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00061900: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00061910: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00061920: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in
ex_proj2 u = ex_p │ │ │ -00061b00: 726f 6a32 3c2f 7370 616e 3e3c 2f61 3e20 roj2 │ │ │ -00061b10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -00061b70: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00061b80: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ -00061b90: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ -00061c90: 6465 7065 6e64 656e 743c 2f73 7061 6e3e dependent │ │ │ -00061ca0: 3c2f 613e 203c 6120 636c 6173 733d 2269 p in │ │ │ -00061d80: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00061dc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl.
..< │ │ │ -00061e00: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...P │ │ │ -00061e20: 726f 6a65 6374 696e 6720 616e 2065 7175 rojecting an equ │ │ │ -00061e30: 616c 6974 7920 6f66 2061 2070 6169 7220 ality of a pair │ │ │ -00061e40: 746f 2065 7175 616c 6974 7920 6f66 2074 to equality of t │ │ │ -00061e50: 6865 2074 6869 7264 2063 6f6d 706f 6e65 he third compone │ │ │ -00061e60: 6e74 7320 0a3c 2f64 6976 3e0a 3c64 6976 nts .
.
.& │ │ │ -00061e80: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ -00061eb0: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition ex_proj3 │ │ │ -00061f20: 5f65 713c 2f73 7061 6e3e 3c2f 613e 207b _eq { │ │ │ -00061f30: 3c61 2069 643d 2241 3a37 3134 2220 636c A : Prop} {P < │ │ │ -00062010: 6120 6964 3d22 513a 3731 3622 2063 6c61 a id="Q:716" cla │ │ │ -00062020: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00062030: 2223 513a 3731 3622 3e3c 7370 616e 2063 "#Q:716">Q : A │ │ │ -00062130: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00062140: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ -00062170: 3c61 2069 643d 2275 3a37 3139 2220 636c u v : │ │ │ -00062220: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ -00062290: 7869 7374 7332 3c2f 7370 616e 3e3c 2f61 xists2 a │ │ │ -00062310: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 : A,< │ │ │ -00062470: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ -000624d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 a & Q a} (p │ │ │ -000626d0: 203a 203c 6120 636c 6173 733d 2269 6472 : u< │ │ │ -00062730: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -000627b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -00062810: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00062820: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -00062830: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ -000628a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 e │ │ │ -00062910: 785f 7072 6f6a 315f 6f66 5f65 7832 5f65 x_proj1_of_ex2_e │ │ │ -00062920: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q < │ │ │ -00062960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00062970: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00062980: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p in ex_proj3 │ │ │ -00062a70: 3c2f 613e 203c 6120 636c 6173 733d 2269 u = ex_pr │ │ │ -00062bb0: 6f6a 333c 2f73 7061 6e3e 3c2f 613e 203c oj3 < │ │ │ -00062bc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00062bd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00062be0: 6f67 6963 2e68 746d 6c23 763a 3732 3022 ogic.html#v:720" │ │ │ -00062bf0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v< │ │ │ -00062c20: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -00062c30: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ -00062c40: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew d │ │ │ -00062d40: 6570 656e 6465 6e74 3c2f 7370 616e 3e3c ependent< │ │ │ -00062d50: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ -00062db0: 3c2f 613e 203c 6120 636c 6173 733d 2269 in< │ │ │ -00062e30: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> < │ │ │ -00062e70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00062e80: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -00062e90: 6f72 223e 6571 5f72 6566 6c3c 2f73 7061 or">eq_refl.
...
..
.Eq │ │ │ -00062ed0: 7561 6c69 7479 206f 6620 3c73 7061 6e20 uality of │ │ │ -00062f10: 6578 323c 2f73 7061 6e3e 3c2f 7370 616e ex2 is itself a ex2 (fowards-r │ │ │ -00062f80: 6561 736f 6e69 6e67 2076 6572 7369 6f6e easoning version │ │ │ -00062f90: 2920 0a3c 2f64 6976 3e0a 3c64 6976 2063 ) .
.
.&nb │ │ │ -00062fb0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ -00062fe0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_e │ │ │ -00063060: 785f 696e 7472 6f32 5f75 6e63 7572 7269 x_intro2_uncurri │ │ │ -00063070: 6564 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ed {< │ │ │ -00063080: 6120 6964 3d22 413a 3732 3222 2063 6c61 a id="A:722" cla │ │ │ -00063090: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -000630a0: 2223 413a 3732 3222 3e3c 7370 616e 2063 "#A:722">A : Type} {P Q │ │ │ -000631b0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ -00063280: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00063290: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -000632c0: 6120 6964 3d22 7531 3a37 3235 2220 636c a id="u1:725" cl │ │ │ -000632d0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -000632e0: 3d22 2375 313a 3732 3522 3e3c 7370 616e ="#u1:725">u1 v1 : A} {u2 : P │ │ │ -00063490: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1} {v2< │ │ │ -00063550: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : P v1} {u3 : Q u1 │ │ │ -00063730: 3c2f 7370 616e 3e3c 2f61 3e7d 207b 3c61 } {v3 : Q< │ │ │ -000637f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00063850: 7631 3c2f 7370 616e 3e3c 2f61 3e7d 3c62 v1}.   │ │ │ -00063870: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00063880: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00063890: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000638a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000638b0: 703b 283c 6120 6964 3d22 7071 723a 3733 p;(pqr │ │ │ -00063910: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : < │ │ │ -00063960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00063970: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00063980: 3e65 7869 7374 7332 3c2f 7370 616e 3e3c >exists2< │ │ │ -00063990: 2f61 3e20 3c61 2069 643d 2270 3a37 3331 /a> p : u │ │ │ -00063ae0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 = v1 │ │ │ -00063bc0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , rew p i │ │ │ -00063d90: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n │ │ │ -00063dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u2 │ │ │ -00063e00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -00063e70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00063eb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00063ec0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00063ed0: 3e76 323c 2f73 7061 6e3e 3c2f 613e 203c >v2 < │ │ │ -00063ee0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00063ef0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00063f00: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -00063f10: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -00063f20: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">&a │ │ │ -00063f50: 6d70 3b3c 2f73 7061 6e3e 3c2f 613e 203c mp; < │ │ │ -00063f60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00063f70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00063f80: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00063f90: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00063fa0: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew p< │ │ │ -00064030: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ -000640b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u3 =< │ │ │ -00064190: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v3)
.&nb │ │ │ -00064200: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00064210: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;: ex_intro2 _ _ u1 u2
u3 │ │ │ -000643f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_intro2 _ _ v1 v2 v │ │ │ -00064650: 333c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 3.
..
.
│ │ │ -00064670: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Equality of │ │ │ -00064690: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex2 │ │ │ -000646d0: 3c2f 7370 616e 3e20 6973 2069 7473 656c is itsel │ │ │ -000646e0: 6620 6120 3c73 7061 6e20 636c 6173 733d f a ex2 (bac │ │ │ -00064730: 6b77 6172 6473 2d72 6561 736f 6e69 6e67 kwards-reasoning │ │ │ -00064740: 2076 6572 7369 6f6e 2920 0a3c 2f64 6976 version) .
.
.   │ │ │ -00064770: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition eq_ex2_u │ │ │ -00064810: 6e63 7572 7269 6564 3c2f 7370 616e 3e3c ncurried< │ │ │ -00064820: 2f61 3e20 7b3c 6120 6964 3d22 413a 3733 /a> {< │ │ │ -00064850: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00064860: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -00064870: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -000648a0: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ -00064900: 2f61 3e20 3c61 2069 643d 2251 3a37 3336 /a> Q< │ │ │ -00064950: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00064990: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000649a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000649b0: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} (< │ │ │ -00064a90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00064aa0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -00064ab0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v : exists2 a │ │ │ -00064c10: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00064c80: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 6120 : < │ │ │ -00064cc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00064cd0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00064ce0: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -00064e20: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ -00064ea0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -00064f00: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00064f60: 613c 2f73 7061 6e3e 3c2f 613e 293c 6272 a)
.  & │ │ │ -00064f80: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00064f90: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00064fa0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00064fb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00064fc0: 3b28 3c61 2069 643d 2270 7172 3a37 3433 ;( │ │ │ -00064ff0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00065010: 7071 723c 2f73 7061 6e3e 3c2f 613e 203a pqr : │ │ │ -00065020: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00065090: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 p : ex_proj1 u = ex_p │ │ │ -00065340: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ -00065350: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -000653b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -00065420: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ -00065430: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00065440: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00065450: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00065460: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00065470: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00065480: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00065490: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000654a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000654b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000654c0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000654d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000654e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000654f0: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;rew │ │ │ -00065560: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -000655c0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p in │ │ │ -000656a0: 6578 5f70 726f 6a32 3c2f 7370 616e 3e3c ex_proj2< │ │ │ -000656b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ -00065710: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00065790: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ -000657f0: 6a32 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j2 │ │ │ -00065830: 3c73 7061 6e20 636c 6173 733d 2269 6422 v < │ │ │ -00065860: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00065870: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00065880: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -00065890: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -000658a0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">&a │ │ │ -000658d0: 6d70 3b3c 2f73 7061 6e3e 3c2f 613e 203c mp; < │ │ │ -000658e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000658f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00065900: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00065910: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00065920: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew p< │ │ │ -000659b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ -00065a30: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ -00065a90: 5f70 726f 6a33 3c2f 7370 616e 3e3c 2f61 _proj3 u │ │ │ -00065b50: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -00065b80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00065b90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00065ba0: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -00065bb0: 6a33 223e 3c73 7061 6e20 636c 6173 733d j3">ex_proj3 │ │ │ -00065be0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00065c40: 763c 2f73 7061 6e3e 3c2f 613e 293c 6272 v)
.  & │ │ │ -00065c60: 6e62 7370 3b26 6e62 7370 3b3a 203c 6120 nbsp; : < │ │ │ -00065ca0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00065cb0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00065cc0: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = v< │ │ │ -00065da0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00065db0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -00065dc0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.Curried versio │ │ │ -00065de0: 6e20 6f66 2070 726f 7669 6e67 2065 7175 n of proving equ │ │ │ -00065df0: 616c 6974 7920 6f66 203c 7370 616e 2063 ality of e │ │ │ -00065e30: 783c 2f73 7061 6e3e 3c2f 7370 616e 3e20 x │ │ │ -00065e40: 7479 7065 7320 0a3c 2f64 6976 3e0a 3c64 types .
. │ │ │ -00065e60: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ -00065e90: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ -00065ea0: 3c61 2069 643d 2265 715f 6578 3222 2063 │ │ │ -00065ef0: 6571 5f65 7832 3c2f 7370 616e 3e3c 2f61 eq_ex2 {A : Pro │ │ │ -00065f80: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q
: A │ │ │ -00066090: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00066110: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00066140: 7d20 283c 6120 6964 3d22 753a 3734 3922 } (u v │ │ │ -000661f0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -00066240: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists2 │ │ │ -00066270: 3c2f 613e 203c 6120 6964 3d22 613a 3734 < │ │ │ -000662a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000662b0: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -000662c0: 7370 616e 2069 643d 2261 3a37 3438 2220 span id="a:748" │ │ │ -000662d0: 636c 6173 733d 2269 6422 3e61 3c2f 7370 class="id">a < │ │ │ -000662f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00066300: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00066310: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -00066320: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -00066330: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">:< │ │ │ -00066360: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ -000663c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a
&
Q a< │ │ │ -00066640: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -00066650: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00066660: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00066670: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00066680: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00066690: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -000666a0: 3c61 2069 643d 2270 3a37 3531 2220 636c p : ex_proj1 u = ex_p │ │ │ -000668a0: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ -000668b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -00066910: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00066920: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00066930: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00066940: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00066950: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00066960: 6e62 7370 3b28 3c61 2069 643d 2271 3a37 nbsp;( │ │ │ -00066990: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -000669b0: 713c 2f73 7061 6e3e 3c2f 613e 203a 203c q : < │ │ │ -000669c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000669d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000669e0: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -000669f0: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00066a00: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew p< │ │ │ -00066a90: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ -00066b10: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ -00066b70: 5f70 726f 6a32 3c2f 7370 616e 3e3c 2f61 _proj2 u │ │ │ -00066c30: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -00066c60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00066c70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00066c80: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -00066c90: 6a32 223e 3c73 7061 6e20 636c 6173 733d j2">ex_proj2 │ │ │ -00066cc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00066d20: 763c 2f73 7061 6e3e 3c2f 613e 293c 6272 v)
.  & │ │ │ -00066d40: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00066d50: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00066d60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00066d70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00066d80: 3b28 3c61 2069 643d 2272 3a37 3533 2220 ;(r
: rew p in │ │ │ -00066f30: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ -00066f90: 6a33 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j3 │ │ │ -00066fd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ -00067000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00067010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00067020: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -00067030: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -00067040: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -00067070: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -000670b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj3 v
)
.& │ │ │ -00067150: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00067160: 3b26 6e62 7370 3b3a 203c 6120 636c 6173 ; : u = v
.&nbs │ │ │ -000672b0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000672c0: 6273 703b 3a3d 203c 6120 636c 6173 733d bsp;:= eq_ex2_u │ │ │ -00067330: 6e63 7572 7269 6564 3c2f 7370 616e 3e3c ncurried< │ │ │ -00067340: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ -000673a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v (ex_intro2 _ _ p< │ │ │ -00067520: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> q │ │ │ -00067580: 3c2f 613e 203c 6120 636c 6173 733d 2269 r).
...   │ │ │ -00067600: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition e │ │ │ -00067690: 715f 6578 5f69 6e74 726f 323c 2f73 7061 q_ex_intro2 {A : │ │ │ -00067700: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type} { │ │ │ -00067730: 3c61 2069 643d 2250 3a37 3535 2220 636c P Q : │ │ │ -000677e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00067840: 203c 6120 636c 6173 733d 2269 6472 6566 ->
Prop} {u1 v1 │ │ │ -00067990: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -000679d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A} │ │ │ -00067a00: 7b3c 6120 6964 3d22 7532 3a37 3539 2220 {u2< │ │ │ -00067a50: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00067a90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00067aa0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00067ab0: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P u1 │ │ │ -00067b20: 7d20 7b3c 6120 6964 3d22 7632 3a37 3630 } {< │ │ │ -00067b50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00067b60: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -00067b70: 323c 2f73 7061 6e3e 3c2f 613e 203a 203c 2 : < │ │ │ -00067b80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00067b90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00067ba0: 6f67 6963 2e68 746d 6c23 503a 3735 3522 ogic.html#P:755" │ │ │ -00067bb0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ -00067be0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1} {u3 : │ │ │ -00067ca0: 203c 6120 636c 6173 733d 2269 6472 6566 Q u1 │ │ │ -00067d60: 3c2f 613e 7d20 7b3c 6120 6964 3d22 7633 } {v3 │ │ │ -00067dc0: 203a 203c 6120 636c 6173 733d 2269 6472 : Q< │ │ │ -00067e20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v1}
.&nb │ │ │ -00067e90: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00067ea0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00067eb0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00067ec0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00067ed0: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (p : u1 =< │ │ │ -00068010: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v1)
.&nb │ │ │ -00068080: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00068090: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000680a0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000680b0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000680c0: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (q : < │ │ │ -00068170: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00068180: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00068190: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ -000681a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ -00068200: 203c 6120 636c 6173 733d 2269 6472 6566 in< │ │ │ -00068270: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -000682d0: 7532 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u2 = v │ │ │ -000683b0: 323c 2f73 7061 6e3e 3c2f 613e 293c 6272 2)
.  & │ │ │ -000683d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000683e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000683f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00068400: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00068410: 3b28 3c61 2069 643d 2272 3a37 3635 2220 ;(r
: rew p in │ │ │ -000685c0: 203c 6120 636c 6173 733d 2269 6472 6566 u3< │ │ │ -00068620: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -000686a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v3)
. & │ │ │ -00068710: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00068720: 3b3a 203c 6120 636c 6173 733d 2269 6472 ;:
ex │ │ │ -00068780: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 P< │ │ │ -000687f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ -00068850: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1 u2< │ │ │ -00068910: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00068970: 7533 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u3 = │ │ │ -00068a30: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_intro2 P< │ │ │ -00068ac0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -00068b20: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00068b60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00068b70: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00068b80: 3e76 313c 2f73 7061 6e3e 3c2f 613e 203c >v1 < │ │ │ -00068b90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00068ba0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00068bb0: 6f67 6963 2e68 746d 6c23 7632 3a37 3630 ogic.html#v2:760 │ │ │ -00068bc0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">v2 v3 │ │ │ -00068c50: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ -00068c60: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00068c70: 703b 3a3d 203c 6120 636c 6173 733d 2269 p;:= eq_e │ │ │ -00068ce0: 785f 696e 7472 6f32 5f75 6e63 7572 7269 x_intro2_uncurri │ │ │ -00068cf0: 6564 3c2f 7370 616e 3e3c 2f61 3e20 283c ed (< │ │ │ -00068d00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00068d10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00068d20: 6f67 6963 2e68 746d 6c23 6578 5f69 6e74 ogic.html#ex_int │ │ │ -00068d30: 726f 3222 3e3c 7370 616e 2063 6c61 7373 ro2">ex_int │ │ │ -00068d60: 726f 323c 2f73 7061 6e3e 3c2f 613e 203c ro2 < │ │ │ -00068d70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00068d80: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_ p │ │ │ -00068e10: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00068e70: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q < │ │ │ -00068eb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00068ec0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00068ed0: 3e72 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >r).< │ │ │ -00068ee0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.In order t │ │ │ -00068f10: 6f20 6861 7665 2061 2070 6572 666f 726d o have a perform │ │ │ -00068f20: 616e 7420 3c73 7061 6e20 636c 6173 733d ant invers │ │ │ -00068f60: 696f 6e5f 7369 676d 613c 2f73 7061 6e3e ion_sigma │ │ │ -00068f70: 3c2f 7370 616e 3e2c 2077 6520 6465 6669 , we defi │ │ │ -00068f80: 6e65 0a20 2020 2020 2073 7065 6369 616c ne. special │ │ │ -00068f90: 697a 6564 2076 6572 7369 6f6e 7320 666f ized versions fo │ │ │ -00068fa0: 7220 7768 656e 2077 6520 6861 7665 2063 r when we have c │ │ │ -00068fb0: 6f6e 7374 7275 6374 6f72 7320 6f6e 206f onstructors on o │ │ │ -00068fc0: 6e65 206f 720a 2020 2020 2020 626f 7468 ne or. both │ │ │ -00068fd0: 2073 6964 6573 206f 6620 7468 6520 6571 sides of the eq │ │ │ -00068fe0: 7561 6c69 7479 200a 3c2f 6469 763e 0a3c uality .
.< │ │ │ -00068ff0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ -00069000: 3e0a 266e 6273 703b 266e 6273 703b 3c73 >.  D │ │ │ -00069030: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition │ │ │ -00069040: 203c 6120 6964 3d22 6571 5f65 785f 696e eq_ex_intro2_l< │ │ │ -000690b0: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Prop} {P< │ │ │ -00069190: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> Q : A │ │ │ -00069250: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -000692c0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ -000692f0: 6f70 3c2f 7370 616e 3e7d 203c 6120 6964 op} u1 │ │ │ -00069350: 3c2f 613e 203c 6120 6964 3d22 7532 3a37 u2 < │ │ │ -000693b0: 6120 6964 3d22 7533 3a37 3731 2220 636c a id="u3:771" cl │ │ │ -000693c0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -000693d0: 3d22 2375 333a 3737 3122 3e3c 7370 616e ="#u3:771">u3 (v │ │ │ -00069460: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -000694b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists2 │ │ │ -000694e0: 3c2f 613e 203c 6120 6964 3d22 613a 3737 < │ │ │ -00069510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00069520: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -00069530: 7370 616e 2069 643d 2261 3a37 3733 2220 span id="a:773" │ │ │ -00069540: 636c 6173 733d 2269 6422 3e61 3c2f 7370 class="id">a < │ │ │ -00069560: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00069570: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00069580: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -00069590: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -000695a0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">:< │ │ │ -000695d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ -00069630: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a &
Q a< │ │ │ -000698b0: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -000698c0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -000698d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000698e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000698f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00069900: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -00069910: 3c61 2069 643d 2270 3a37 3735 2220 636c p : u1 │ │ │ -000699c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_proj1 │ │ │ -00069ab0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v) (q : │ │ │ -00069b70: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ -00069be0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00069c40: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p in u2 = e │ │ │ -00069e00: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ -00069e70: 2f61 3e29 2028 3c61 2069 643d 2272 3a37 /a>) ( │ │ │ -00069ea0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00069ec0: 723c 2f73 7061 6e3e 3c2f 613e 203a 203c r : < │ │ │ -00069ed0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00069ee0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00069ef0: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ -00069f00: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ -00069f10: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew p< │ │ │ -00069fa0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ -0006a020: 3c2f 613e 203c 6120 636c 6173 733d 2269 u3 =< │ │ │ -0006a100: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ -0006a160: 7072 6f6a 333c 2f73 7061 6e3e 3c2f 613e proj3 │ │ │ -0006a170: 203c 6120 636c 6173 733d 2269 6472 6566 v)
. &n │ │ │ -0006a1e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0006a1f0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : ex_ │ │ │ -0006a250: 696e 7472 6f32 3c2f 7370 616e 3e3c 2f61 intro2 P Q< │ │ │ -0006a320: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u1 u2 u │ │ │ -0006a440: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3
=
v
.& │ │ │ -0006a530: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006a540: 3b26 6e62 7370 3b3a 3d20 3c61 2063 6c61 ; := eq_ex2 (e │ │ │ -0006a610: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ -0006a620: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ -0006a680: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q u1
u2 │ │ │ -0006a7a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0006a7e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006a7f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006a800: 3e75 333c 2f73 7061 6e3e 3c2f 613e 2920 >u3) │ │ │ -0006a810: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -0006a870: 203c 6120 636c 6173 733d 2269 6472 6566 p q r< │ │ │ -0006a990: 2f61 3e2e 3c62 722f 3e0a 266e 6273 703b /a>.
.  │ │ │ -0006a9a0: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -0006a9d0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n
eq_ex_i │ │ │ -0006aa40: 6e74 726f 325f 723c 2f73 7061 6e3e 3c2f ntro2_r {A< │ │ │ -0006aaa0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ -0006aad0: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P Q : │ │ │ -0006abe0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ -0006ac60: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop} (u< │ │ │ -0006ace0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : exis │ │ │ -0006ad60: 7473 323c 2f73 7061 6e3e 3c2f 613e 203c ts2 < │ │ │ -0006ad70: 6120 6964 3d22 613a 3738 3122 2063 6c61 a id="a:781" cla │ │ │ -0006ad80: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0006ad90: 2223 613a 3738 3122 3e3c 7370 616e 2063 "#a:781">a : │ │ │ -0006ae60: 3c2f 613e 203c 6120 636c 6173 733d 2269 A, │ │ │ -0006af40: 203c 6120 636c 6173 733d 2269 6472 6566 P a │ │ │ -0006b050: 3c73 7061 6e20 636c 6173 733d 2269 6422 & Q< │ │ │ -0006b0e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -0006b140: 3c2f 613e 2920 3c61 2069 643d 2276 313a ) v1 │ │ │ -0006b1a0: 3c61 2069 643d 2276 323a 3738 3522 2063 v2 v3< │ │ │ -0006b250: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ -0006b260: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006b270: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006b280: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006b290: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006b2a0: 3b26 6e62 7370 3b28 3c61 2069 643d 2270 ; (
p : │ │ │ -0006b300: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ -0006b360: 6a31 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j1 │ │ │ -0006b3a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ -0006b3d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006b3e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006b3f0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ -0006b400: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ -0006b410: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ -0006b440: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0006b4a0: 7631 3c2f 7370 616e 3e3c 2f61 3e29 2028 v1) ( │ │ │ -0006b4b0: 3c61 2069 643d 2271 3a37 3838 2220 636c q : rew< │ │ │ -0006b580: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ -0006b5e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 < │ │ │ -0006b630: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006b640: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0006b650: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ -0006b660: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006b670: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006b680: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -0006b690: 6a32 223e 3c73 7061 6e20 636c 6173 733d j2">ex_proj2 │ │ │ -0006b6c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0006b720: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = v2 │ │ │ -0006b800: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (r │ │ │ -0006b860: 3c2f 613e 203a 203c 6120 636c 6173 733d : rew p i │ │ │ -0006b9b0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n ex_proj3 u< │ │ │ -0006ba80: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v3)
. │ │ │ -0006bb70: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0006bb80: 703b 266e 6273 703b 3a20 3c61 2063 6c61 p; : u< │ │ │ -0006bbe0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = ex_intro2 P
Q v1 │ │ │ -0006bdf0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -0006be30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006be40: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006be50: 3e76 323c 2f73 7061 6e3e 3c2f 613e 203c >v2 < │ │ │ -0006be60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006be70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006be80: 6f67 6963 2e68 746d 6c23 7633 3a37 3836 ogic.html#v3:786 │ │ │ -0006be90: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">v3
. &nb │ │ │ -0006bed0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -0006bee0: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = eq_ex2< │ │ │ -0006bf40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ -0006bfa0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (ex_intro │ │ │ -0006c010: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 < │ │ │ -0006c050: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006c060: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006c070: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -0006c0b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ -0006c0e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006c0f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006c100: 6f67 6963 2e68 746d 6c23 7631 3a37 3834 ogic.html#v1:784 │ │ │ -0006c110: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">v1 v2 │ │ │ -0006c1a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v3) p q< │ │ │ -0006c2c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> r │ │ │ -0006c320: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.
. │ │ │ -0006c340: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.Equality of < │ │ │ -0006c360: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -0006c370: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex2< │ │ │ -0006c3a0: 2f73 7061 6e3e 2077 6865 6e20 7468 6520 /span> when the │ │ │ -0006c3b0: 7365 636f 6e64 2070 726f 7065 7274 7920 second property │ │ │ -0006c3c0: 6973 2061 6e20 6850 726f 7020 0a3c 2f64 is an hProp ..
. &nb │ │ │ -0006c3f0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition eq_ex2_hprop {A : Prop │ │ │ -0006c520: 7d20 7b3c 6120 6964 3d22 503a 3739 3122 } {P Q │ │ │ -0006c5d0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ -0006c630: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -0006c6a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ -0006c6d0: 703c 2f73 7061 6e3e 7d20 283c 6120 6964 p} (Q_hprop< │ │ │ -0006c740: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : forall ( │ │ │ -0006c7a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0006c7c0: 783c 2f73 7061 6e3e 3c2f 613e 203a 203c x : < │ │ │ -0006c7d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006c7e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006c7f0: 6f67 6963 2e68 746d 6c23 413a 3739 3022 ogic.html#A:790" │ │ │ -0006c800: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A) │ │ │ -0006c830: 2028 3c61 2069 643d 2270 3a37 3934 2220 (p q │ │ │ -0006c8e0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : Q x< │ │ │ -0006c9a0: 2f61 3e29 2c20 3c61 2063 6c61 7373 3d22 /a>), p = q< │ │ │ -0006cae0: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ -0006caf0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0006cb00: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0006cb10: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0006cb20: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0006cb30: 703b 266e 6273 703b 283c 6120 6964 3d22 p; (
u │ │ │ -0006cb90: 3c61 2069 643d 2276 3a38 3030 2220 636c v : exists2< │ │ │ -0006cc60: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a │ │ │ -0006cce0: 3c2f 613e 203c 6120 636c 6173 733d 2269 : │ │ │ -0006cd60: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ -0006ce30: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ -0006ce70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006ce80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006ce90: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ -0006ced0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a < │ │ │ -0006cf00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006cf10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006cf20: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -0006cf30: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -0006cf40: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">&a │ │ │ -0006cf70: 6d70 3b3c 2f73 7061 6e3e 3c2f 613e 203c mp; < │ │ │ -0006cf80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006cf90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006cfa0: 6f67 6963 2e68 746d 6c23 513a 3739 3222 ogic.html#Q:792" │ │ │ -0006cfb0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ -0006cfe0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ -0006d040: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -0006d050: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006d060: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006d070: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006d080: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006d090: 6e62 7370 3b28 3c61 2069 643d 2270 3a38 nbsp;( │ │ │ -0006d0c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0006d0e0: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -0006d0f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006d100: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006d110: 6f67 6963 2e68 746d 6c23 753a 3739 3922 ogic.html#u:799" │ │ │ -0006d120: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -0006d150: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0006d1c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0006d220: 763c 2f73 7061 6e3e 3c2f 613e 203c 6120 v :> │ │ │ -0006d2a0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; exis │ │ │ -0006d320: 7473 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ts a │ │ │ -0006d380: 3c2f 613e 203a 203c 6120 636c 6173 733d : A, P< │ │ │ -0006d4c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -0006d520: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ -0006d530: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006d540: 7370 3b3a 203c 6120 636c 6173 733d 2269 sp;: u = v
. &n │ │ │ -0006d690: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0006d6a0: 3a3d 203c 6120 636c 6173 733d 2269 6472 :=
eq_ex2 │ │ │ -0006d700: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0006d760: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u < │ │ │ -0006d7a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006d7b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006d7c0: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 283c >v (< │ │ │ -0006d7d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006d7e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006d7f0: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -0006d800: 6a31 5f65 7122 3e3c 7370 616e 2063 6c61 j1_eq">ex_pr │ │ │ -0006d830: 6f6a 315f 6571 3c2f 7370 616e 3e3c 2f61 oj1_eq p) (ex_proj2_eq p) (Q_hprop _ _ _).
│ │ │ -0006da60: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ -0006da70: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ -0006daa0: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_ │ │ │ -0006db20: 6578 5f69 6e74 726f 325f 6870 726f 705f ex_intro2_hprop_ │ │ │ -0006db30: 6e6f 6e64 6570 3c2f 7370 616e 3e3c 2f61 nondep {A : Typ │ │ │ -0006dbc0: 653c 2f73 7061 6e3e 7d20 7b3c 6120 6964 e} {P : A │ │ │ -0006dc80: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ -0006dcf0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ -0006dd20: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {Q : Prop} (Q_hpro │ │ │ -0006de10: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -0006de20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006de30: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -0006de40: 666f 7261 6c6c 3c2f 7370 616e 3e20 283c forall (< │ │ │ -0006de50: 6120 6964 3d22 703a 3830 3622 2063 6c61 a id="p:806" cla │ │ │ -0006de60: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0006de70: 2223 703a 3830 3622 3e3c 7370 616e 2063 "#p:806">p │ │ │ -0006ded0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0006def0: 713c 2f73 7061 6e3e 3c2f 613e 203a 203c q : < │ │ │ -0006df00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006df10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006df20: 6f67 6963 2e68 746d 6c23 513a 3830 3522 ogic.html#Q:805" │ │ │ -0006df30: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q) │ │ │ -0006df60: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , p │ │ │ -0006e010: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -0006e040: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0006e050: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0006e060: 6f67 6963 2e68 746d 6c23 713a 3830 3722 ogic.html#q:807" │ │ │ -0006e070: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >q) │ │ │ -0006e0a0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0006e0b0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0006e0c0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0006e0d0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0006e0e0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0006e0f0: 6273 703b 7b3c 6120 6964 3d22 7531 3a38 bsp;{u1 < │ │ │ -0006e150: 6120 6964 3d22 7631 3a38 3130 2220 636c a id="v1:810" cl │ │ │ -0006e160: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -0006e170: 3d22 2376 313a 3831 3022 3e3c 7370 616e ="#v1:810">v1
: A │ │ │ -0006e200: 3c2f 7370 616e 3e3c 2f61 3e7d 207b 3c61 } {u2 : P< │ │ │ -0006e2c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0006e320: 7531 3c2f 7370 616e 3e3c 2f61 3e7d 207b u1} { │ │ │ -0006e330: 3c61 2069 643d 2276 323a 3831 3222 2063 v2 : │ │ │ -0006e3e0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ -0006e420: 3c73 7061 6e20 636c 6173 733d 2269 6422 v1} │ │ │ -0006e450: 207b 3c61 2069 643d 2275 333a 3831 3322 {u3 │ │ │ -0006e4a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v3 : Q}
.& │ │ │ -0006e570: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006e580: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006e590: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006e5a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006e5b0: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (p │ │ │ -0006e610: 3c2f 613e 203a 203c 6120 636c 6173 733d : ex_intro │ │ │ -0006e680: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ │ │ │ -0006e700: 7531 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u1 u2 │ │ │ -0006e770: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0006e7e0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_intro< │ │ │ -0006e850: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ -0006e880: 203c 6120 636c 6173 733d 2269 6472 6566 v1< │ │ │ -0006e8e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v2
)
.&nb │ │ │ -0006e950: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006e960: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;: ex_intro2 _ _ u1 u2
u3 │ │ │ -0006eb40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_intro2 _ _ v1 v2 v │ │ │ -0006eda0: 333c 2f73 7061 6e3e 3c2f 613e 3c62 722f 3
.  &n │ │ │ -0006edc0: 6273 703b 266e 6273 703b 3a3d 203c 6120 bsp; := rew< │ │ │ -0006ee40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> [fun v3 │ │ │ -0006ef40: 3c2f 7370 616e 3e3c 2f61 3e20 3d26 6774 => │ │ │ -0006ef50: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; _ │ │ │ -0006ef70: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 =< │ │ │ -0006eff0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ -0006f050: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ -0006f060: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _ │ │ │ -0006f0b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ < │ │ │ -0006f130: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006f140: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0006f150: 3e76 333c 2f73 7061 6e3e 3c2f 613e 3c61 >v3] (Q │ │ │ -0006f2b0: 5f68 7072 6f70 3c2f 7370 616e 3e3c 2f61 _hprop u3 │ │ │ -0006f320: 3c2f 613e 203c 6120 636c 6173 733d 2269 v3) │ │ │ -0006f450: 3c73 7061 6e20 636c 6173 733d 2269 6422 in< │ │ │ -0006f480: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -0006f490: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006f4a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006f4b0: 6e62 7370 3b3c 6120 636c 6173 733d 2269 nbsp;f_equal< │ │ │ -0006f510: 2f73 7061 6e3e 3c2f 613e 2028 3c73 7061 /span> (fun │ │ │ -0006f540: 3c2f 7370 616e 3e20 3c61 2069 643d 2275 u = │ │ │ -0006f5a0: 2667 743b 203c 7370 616e 2063 6c61 7373 > match u< │ │ │ -0006f630: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> with │ │ │ -0006f660: 203c 6120 636c 6173 733d 2269 6472 6566 ex_in │ │ │ -0006f6c0: 7472 6f3c 2f73 7061 6e3e 3c2f 613e 203c tro < │ │ │ -0006f6d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006f6e0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ u1 u2 => < │ │ │ -0006f780: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006f790: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ -0006f7a0: 6f72 223e 6578 5f69 6e74 726f 323c 2f73 or">ex_intro2
_ < │ │ │ -0006f7e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0006f7f0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
u1 u2< │ │ │ -0006f8c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0006f920: 7533 3c2f 7370 616e 3e3c 2f61 3e20 3c73 u3 e │ │ │ -0006f950: 6e64 3c2f 7370 616e 3e29 203c 6120 636c nd) p │ │ │ -0006f9b0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
. & │ │ │ -0006f9d0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -0006fa00: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 │ │ │ -0006fa70: 6571 5f65 785f 696e 7472 6f32 5f68 7072 eq_ex_intro2_hpr │ │ │ -0006fa80: 6f70 3c2f 7370 616e 3e3c 2f61 3e20 7b3c op {< │ │ │ -0006fa90: 6120 6964 3d22 413a 3831 3922 2063 6c61 a id="A:819" cla │ │ │ -0006faa0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0006fab0: 2223 413a 3831 3922 3e3c 7370 616e 2063 "#A:819">A : Type
} {P Q │ │ │ -0006fbc0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ -0006fc90: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0006fca0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop}
.  & │ │ │ -0006fce0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006fcf0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0006fd00: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0006fd10: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0006fd20: 3b28 3c61 2069 643d 2250 5f68 7072 6f70 ;(P_hprop< │ │ │ -0006fd80: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ -0006fdb0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall x (p< │ │ │ -0006fe60: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> q : P │ │ │ -0006ff20: 3c2f 613e 203c 6120 636c 6173 733d 2269 x), p = │ │ │ -00070060: 3c2f 613e 203c 6120 636c 6173 733d 2269 q)
.&nbs │ │ │ -000700d0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000700e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000700f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00070100: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00070110: 6273 703b 266e 6273 703b 283c 6120 6964 bsp; (Q_hprop< │ │ │ -00070180: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : forall
< │ │ │ -000701e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000701f0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -00070200: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (p< │ │ │ -00070260: 2f61 3e20 3c61 2069 643d 2271 3a38 3238 /a> q< │ │ │ -000702b0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -000702f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00070300: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00070310: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ -00070350: 3c73 7061 6e20 636c 6173 733d 2269 6422 x), │ │ │ -00070380: 203c 6120 636c 6173 733d 2269 6472 6566 p < │ │ │ -00070430: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00070440: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00070450: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ -00070490: 3c73 7061 6e20 636c 6173 733d 2269 6422 q)< │ │ │ -000704c0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ -000704d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -000704e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000704f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00070500: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00070510: 7370 3b7b 3c61 2069 643d 2275 313a 3833 sp;{ │ │ │ -00070540: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00070560: 7531 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u1 v1 : A< │ │ │ -00070620: 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 6120 /span>} {u2 : P u │ │ │ -00070740: 313c 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 1} {< │ │ │ -00070750: 6120 6964 3d22 7632 3a38 3333 2220 636c a id="v2:833" cl │ │ │ -00070760: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -00070770: 3d22 2376 323a 3833 3322 3e3c 7370 616e ="#v2:833">v2 : P │ │ │ -00070800: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00070840: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00070850: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00070860: 3e76 313c 2f73 7061 6e3e 3c2f 613e 7d20 >v1} │ │ │ -00070870: 7b3c 6120 6964 3d22 7533 3a38 3334 2220 {u3< │ │ │ -000708c0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00070900: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00070910: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00070920: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q u1 │ │ │ -00070990: 7d20 7b3c 6120 6964 3d22 7633 3a38 3335 } {< │ │ │ -000709c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000709d0: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -000709e0: 333c 2f73 7061 6e3e 3c2f 613e 203a 203c 3 : < │ │ │ -000709f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00070a00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00070a10: 6f67 6963 2e68 746d 6c23 513a 3832 3122 ogic.html#Q:821" │ │ │ -00070a20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ -00070a50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1}
. & │ │ │ -00070ac0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00070ad0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00070ae0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00070af0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00070b00: 3b26 6e62 7370 3b28 3c61 2069 643d 2270 ; (
p : │ │ │ -00070b60: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ -00070bc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -00070c40: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1)
. & │ │ │ -00070cb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00070cc0: 3b3a 203c 6120 636c 6173 733d 2269 6472 ;:
ex │ │ │ -00070d20: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 P< │ │ │ -00070d90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ -00070df0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1 u2< │ │ │ -00070eb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00070f10: 7533 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u3 = │ │ │ -00070fd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_intro2 P< │ │ │ -00071060: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -000710c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ -00071100: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00071110: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00071120: 3e76 313c 2f73 7061 6e3e 3c2f 613e 203c >v1 < │ │ │ -00071130: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00071140: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00071150: 6f67 6963 2e68 746d 6c23 7632 3a38 3333 ogic.html#v2:833 │ │ │ -00071160: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">v2 v3 │ │ │ -000711f0: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ -00071200: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00071210: 703b 3a3d 203c 6120 636c 6173 733d 2269 p;:= eq_ex_intro2 p< │ │ │ -000712e0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (P_hprop _ < │ │ │ -00071380: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00071390: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_) (Q_hprop _ │ │ │ -00071460: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _).
..
.
│ │ │ -000714c0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Equivalence │ │ │ -000714e0: 6f66 2065 7175 616c 6974 7920 6f66 203c of equality of < │ │ │ -000714f0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ -00071500: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex2< │ │ │ -00071530: 2f73 7061 6e3e 2077 6974 6820 6120 3c73 /span> with a ex2 of equalit │ │ │ -00071590: 7920 2057 6520 636f 756c 6420 6163 7475 y We could actu │ │ │ -000715a0: 616c 6c79 2070 726f 7665 2061 6e20 6973 ally prove an is │ │ │ -000715b0: 6f6d 6f72 7068 6973 6d20 6865 7265 2c20 omorphism here, │ │ │ -000715c0: 616e 6420 6e6f 7420 6a75 7374 203c 7370 and not just <->< │ │ │ -000715f0: 2f73 7061 6e3e 2c0a 2020 2020 2020 6275 /span>,. bu │ │ │ -00071600: 7420 666f 7220 7369 6d70 6c69 6369 7479 t for simplicity │ │ │ -00071610: 2c20 7765 2064 6f6e 2774 2e20 0a3c 2f64 , we don't. ..
. &nb │ │ │ -00071640: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition eq_ex2_uncurri │ │ │ -000716f0: 6564 5f69 6666 3c2f 7370 616e 3e3c 2f61 ed_iff {A : Pro │ │ │ -00071780: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q : A │ │ │ -00071890: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00071910: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00071940: 7d20 283c 6120 6964 3d22 753a 3834 3222 } (u v │ │ │ -000719f0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ -00071a40: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists2 │ │ │ -00071a70: 3c2f 613e 203c 6120 6964 3d22 613a 3834 < │ │ │ -00071aa0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00071ab0: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ -00071ac0: 7370 616e 2069 643d 2261 3a38 3431 2220 span id="a:841" │ │ │ -00071ad0: 636c 6173 733d 2269 6422 3e61 3c2f 7370 class="id">a < │ │ │ -00071af0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00071b00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00071b10: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -00071b20: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -00071b30: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">:< │ │ │ -00071b60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ -00071bc0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a & Q a< │ │ │ -00071e40: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -00071e50: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -00071e60: 7370 3b26 6e62 7370 3b3a 203c 6120 636c sp; : u │ │ │ -00071ec0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v

.&n │ │ │ -00071fb0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00071fc0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00071fd0: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;< │ │ │ -00072040: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> < │ │ │ -000720a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000720b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000720c0: 3e65 7869 7374 7332 3c2f 7370 616e 3e3c >exists2< │ │ │ -000720d0: 2f61 3e20 3c61 2069 643d 2270 3a38 3434 /a> p : < │ │ │ -00072200: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00072210: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00072220: 6e22 3e65 785f 7072 6f6a 313c 2f73 7061 n">ex_proj1 u =< │ │ │ -00072310: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ -00072370: 7072 6f6a 313c 2f73 7061 6e3e 3c2f 613e proj1 │ │ │ -00072380: 203c 6120 636c 6173 733d 2269 6472 6566 v │ │ │ -00072450: 2c3c 2f73 7061 6e3e 3c2f 613e 3c62 722f ,
.  &n │ │ │ -00072470: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00072480: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00072490: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000724a0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000724b0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000724c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000724d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -000724e0: 266e 6273 703b 3c61 2063 6c61 7373 3d22   │ │ │ -00072530: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ -00072560: 203c 6120 636c 6173 733d 2269 6472 6566 p in │ │ │ -00072630: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2
u = e │ │ │ -000727e0: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ -00072850: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> &< │ │ │ -000728d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ -00072940: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ -00072950: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00072960: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00072970: 6f67 6963 2e68 746d 6c23 703a 3834 3522 ogic.html#p:845" │ │ │ -00072980: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p │ │ │ -000729b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 in < │ │ │ -00072a60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00072a70: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00072a80: 6e22 3e65 785f 7072 6f6a 333c 2f73 7061 n">ex_proj3 u =< │ │ │ -00072b70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ -00072bd0: 7072 6f6a 333c 2f73 7061 6e3e 3c2f 613e proj3 │ │ │ -00072be0: 203c 6120 636c 6173 733d 2269 6472 6566 v.
..
.< │ │ │ -00072c50: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Inducti │ │ │ -00072c70: 6f6e 2070 7269 6e63 6970 6c65 2066 6f72 on principle for │ │ │ -00072c80: 203c 7370 616e 2063 6c61 7373 3d22 696e @eq ( │ │ │ -00072d00: 6578 323c 2f73 7061 6e3e 3c2f 7370 616e ex2 _ │ │ │ -00072d50: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _< │ │ │ -00072d90: 2f73 7061 6e3e 293c 2f73 7061 6e3e 200a /span>) . │ │ │ -00072da0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.  │ │ │ -00072dc0: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -00072df0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ex2_eta {A : │ │ │ -00072ec0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ -00072ef0: 3c61 2069 643d 2250 3a38 3437 2220 636c P Q : │ │ │ -00072fa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00073000: 203c 6120 636c 6173 733d 2269 6472 6566 -> Prop} {u < │ │ │ -00073100: 6120 6964 3d22 763a 3835 3222 2063 6c61 a id="v:852" cla │ │ │ -00073110: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00073120: 2223 763a 3835 3222 3e3c 7370 616e 2063 "#v:852">v : exists2 │ │ │ -00073240: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e3c a< │ │ │ -00073250: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> : │ │ │ -000732d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00073330: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -000733a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00073400: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -00073440: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00073450: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00073460: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a &am │ │ │ -000734e0: 703b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 p; │ │ │ -00073520: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ -00073550: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00073560: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00073570: 6f67 6963 2e68 746d 6c23 613a 3835 3022 ogic.html#a:850" │ │ │ -00073580: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >a} │ │ │ -000735b0: 2028 3c61 2069 643d 2270 3a38 3533 2220 (p : u │ │ │ -00073660: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v)
.& │ │ │ -00073750: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00073760: 3b26 6e62 7370 3b3a 203c 6120 636c 6173 ; : p = eq_ │ │ │ -000738a0: 6578 323c 2f73 7061 6e3e 3c2f 613e 203c ex2 < │ │ │ -000738b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000738c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000738d0: 6f67 6963 2e68 746d 6c23 753a 3835 3122 ogic.html#u:851" │ │ │ -000738e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -00073910: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -00073970: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (ex_proj1_of │ │ │ -000739e0: 5f65 7832 5f65 713c 2f73 7061 6e3e 3c2f _ex2_eq p< │ │ │ -00073a50: 2f61 3e29 2028 3c61 2063 6c61 7373 3d22 /a>) (ex_proj │ │ │ -00073ac0: 325f 6f66 5f65 7832 5f65 713c 2f73 7061 2_of_ex2_eq p) (ex_proj3_e │ │ │ -00073ba0: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q < │ │ │ -00073be0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00073bf0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00073c00: 3e70 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >p).< │ │ │ -00073c10: 6272 2f3e 0a20 266e 6273 703b 266e 6273 br/>.  &nbs │ │ │ -00073c20: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
e │ │ │ -00073cb0: 715f 6578 325f 7265 6374 3c2f 7370 616e q_ex2_rect {A : │ │ │ -00073d20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -00073d50: 6120 6964 3d22 503a 3835 3522 2063 6c61 a id="P:855" cla │ │ │ -00073d60: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00073d70: 2223 503a 3835 3522 3e3c 7370 616e 2063 "#P:855">P │ │ │ -00073dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00073df0: 513c 2f73 7061 6e3e 3c2f 613e 203a 203c Q : < │ │ │ -00073e00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00073e10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00073e20: 6f67 6963 2e68 746d 6c23 413a 3835 3422 ogic.html#A:854" │ │ │ -00073e30: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ -00073e60: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop
} {u v │ │ │ -00073fb0: 3c2f 613e 203a 203c 6120 636c 6173 733d : exists2
a │ │ │ -000740a0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f │ │ │ -00074100: 3c73 7061 6e20 636c 6173 733d 2269 6422 : < │ │ │ -00074130: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00074140: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00074150: 6f67 6963 2e68 746d 6c23 413a 3835 3422 ogic.html#A:854" │ │ │ -00074160: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ -00074190: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000741a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000741b0: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ -000741c0: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ -000741d0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">,< │ │ │ -00074200: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ -00074260: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -000742c0: 613c 2f73 7061 6e3e 3c2f 613e 203c 6120 a & │ │ │ -00074340: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; < │ │ │ -00074380: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00074390: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000743a0: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ -000743e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a} │ │ │ -00074410: 283c 6120 6964 3d22 523a 3836 3122 2063 (R : u< │ │ │ -000744c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v - │ │ │ -00074610: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -00074620: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type)
.  & │ │ │ -00074660: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00074670: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00074680: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00074690: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -000746a0: 3b28 3c61 2069 643d 2266 3a38 3635 2220 ;(f
: fora │ │ │ -00074720: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ -00074780: 203c 6120 6964 3d22 713a 3836 3322 2063 q r, │ │ │ -00074830: 3c61 2063 6c61 7373 3d22 6964 7265 6622 R │ │ │ -00074890: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (eq_ex2< │ │ │ -000748f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ -00074950: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -000749b0: 763c 2f73 7061 6e3e 3c2f 613e 203c 6120 v < │ │ │ -000749f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00074a00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00074a10: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p │ │ │ -00074a50: 3c73 7061 6e20 636c 6173 733d 2269 6422 q < │ │ │ -00074a80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00074a90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00074aa0: 6f67 6963 2e68 746d 6c23 723a 3836 3422 ogic.html#r:864" │ │ │ -00074ab0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >r) │ │ │ -00074ae0: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -00074af0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -00074b00: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ -00074b30: 3c61 2069 643d 2270 3a38 3636 2220 636c p, R
p
.& │ │ │ -00074c50: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00074c60: 3b26 6e62 7370 3b3a 3d20 3c73 7061 6e20 ; := fun │ │ │ -00074cc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00074ce0: 703c 2f73 7061 6e3e 3c2f 613e 203d 2667 p =&g │ │ │ -00074cf0: 743b 203c 6120 636c 6173 733d 2269 6472 t; rew <-< │ │ │ -00074df0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> eq_ex2_eta │ │ │ -00074e60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00074ec0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ -00074f20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00074f30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00074f40: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ -00074f50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00074f60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00074f70: 6f67 6963 2e68 746d 6c23 663a 3836 3522 ogic.html#f:865" │ │ │ -00074f80: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >f │ │ │ -00074fb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _.
. &n │ │ │ -00075030: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ -00075060: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> e │ │ │ -000750c0: 715f 6578 325f 7265 633c 2f73 7061 6e3e q_ex2_rec │ │ │ -000750d0: 3c2f 613e 207b 3c61 2069 643d 2241 3a38 { │ │ │ -00075100: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00075120: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ -00075130: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00075140: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00075150: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {P │ │ │ -000751b0: 3c2f 613e 203c 6120 6964 3d22 513a 3837 < │ │ │ -000751e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000751f0: 7469 746c 653d 2262 696e 6465 7222 3e51 title="binder">Q │ │ │ -00075200: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -00075240: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ -00075270: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00075280: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00075290: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -000752a0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -000752b0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Prop} { │ │ │ -00075340: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00075360: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u v< │ │ │ -000753c0: 2f61 3e7d 2028 3c61 2069 643d 2252 3a38 /a>} ( │ │ │ -000753f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00075410: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ -00075420: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00075430: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00075440: 6f67 6963 2e68 746d 6c23 753a 3837 3122 ogic.html#u:871" │ │ │ -00075450: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -00075480: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -000754f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00075550: 763c 2f73 7061 6e3e 3c2f 613e 203c 6120 v :> │ │ │ -000755d0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; (exists2 │ │ │ -00075740: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e3c a< │ │ │ -00075750: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> : │ │ │ -000757d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -00075830: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -000758a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00075900: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -00075940: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00075950: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00075960: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a &am │ │ │ -000759e0: 703b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 p; │ │ │ -00075a20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ -00075a50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00075a60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00075a70: 6f67 6963 2e68 746d 6c23 613a 3837 3422 ogic.html#a:874" │ │ │ -00075a80: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >a< │ │ │ -00075ab0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00075ac0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00075ad0: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ -00075ae0: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ -00075af0: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">)< │ │ │ -00075b20: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00075b70: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Set) │ │ │ -00075bd0: 3a3d 203c 6120 636c 6173 733d 2269 6472 := e │ │ │ -00075c30: 715f 6578 325f 7265 6374 3c2f 7370 616e q_ex2_rect R.
.&nb │ │ │ -00075cb0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ -00075ce0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion │ │ │ -00075d20: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex2_ind {A : Prop │ │ │ -00075de0: 7d20 7b3c 6120 6964 3d22 503a 3837 3722 } {P Q │ │ │ -00075e90: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ -00075ef0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ -00075f60: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ -00075f90: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {u v
} (R : u │ │ │ -00076100: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00076180: 203c 6120 636c 6173 733d 2269 6472 6566 v < │ │ │ -00076230: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00076240: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00076250: 3e3a 2667 743b 3c2f 7370 616e 3e3c 2f61 >:> < │ │ │ -000762b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000762c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -000762d0: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >(exis │ │ │ -00076350: 7473 323c 2f73 7061 6e3e 3c2f 613e 203c ts2 < │ │ │ -00076360: 6120 6964 3d22 613a 3838 3122 2063 6c61 a id="a:881" cla │ │ │ -00076370: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00076380: 2223 613a 3838 3122 3e3c 7370 616e 2063 "#a:881">a
: │ │ │ -00076450: 3c2f 613e 203c 6120 636c 6173 733d 2269 A, │ │ │ -00076530: 203c 6120 636c 6173 733d 2269 6472 6566 P a │ │ │ -00076640: 3c73 7061 6e20 636c 6173 733d 2269 6422 & Q< │ │ │ -000766d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ -00076730: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ) │ │ │ -000767b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop
) := │ │ │ -00076890: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex2_rec R< │ │ │ -00076920: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ -00076930: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ -00076940: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.In order to ha │ │ │ -00076960: 7665 2061 2070 6572 666f 726d 616e 7420 ve a performant │ │ │ -00076970: 3c73 7061 6e20 636c 6173 733d 2269 6e6c inversion_ │ │ │ -000769b0: 7369 676d 613c 2f73 7061 6e3e 3c2f 7370 sigma, we define. │ │ │ -000769d0: 2020 2020 2073 7065 6369 616c 697a 6564 specialized │ │ │ -000769e0: 2076 6572 7369 6f6e 7320 666f 7220 7768 versions for wh │ │ │ -000769f0: 656e 2077 6520 6861 7665 2063 6f6e 7374 en we have const │ │ │ -00076a00: 7275 6374 6f72 7320 6f6e 206f 6e65 206f ructors on one o │ │ │ -00076a10: 720a 2020 2020 2020 626f 7468 2073 6964 r. both sid │ │ │ -00076a20: 6573 206f 6620 7468 6520 6571 7561 6c69 es of the equali │ │ │ -00076a30: 7479 200a 3c2f 6469 763e 0a3c 6469 7620 ty .
.
.&n │ │ │ -00076a50: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -00076a80: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition e │ │ │ -00076b00: 715f 6578 325f 7265 6374 5f65 785f 696e q_ex2_rect_ex_in │ │ │ -00076b10: 7472 6f32 5f6c 3c2f 7370 616e 3e3c 2f61 tro2_l {A : Pro │ │ │ -00076ba0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q : A │ │ │ -00076cb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -00076d30: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -00076d60: 7d20 7b3c 6120 6964 3d22 7531 3a38 3837 } {< │ │ │ -00076d90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00076da0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -00076db0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 u2 u3 │ │ │ -00076e70: 203c 6120 6964 3d22 763a 3839 3022 2063 v} (R │ │ │ -00076f20: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ -00076f40: 5f3c 2f73 7061 6e3e 203c 6120 636c 6173 _ │ │ │ -00076fb0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ -00076fc0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type).   │ │ │ -00077000: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00077010: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00077020: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00077030: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00077040: 703b 283c 6120 6964 3d22 663a 3839 3522 p;(f : for │ │ │ -000770c0: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all p q r, │ │ │ -000771d0: 203c 6120 636c 6173 733d 2269 6472 6566 R (eq_ex_intro2_l │ │ │ -000772a0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 7370 (P:=P │ │ │ -00077330: 3c2f 613e 2920 283c 7370 616e 2063 6c61 ) (Q:= │ │ │ -00077390: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q) │ │ │ -000773c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u1 u2 u3 v p< │ │ │ -000775a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> q │ │ │ -00077600: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00077660: 723c 2f73 7061 6e3e 3c2f 613e 2929 3c62 r)).   │ │ │ -00077680: 266e 6273 703b 266e 6273 703b 3a20 3c73   : f │ │ │ -000776b0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall p< │ │ │ -00077710: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, R p
.&nbs │ │ │ -000777e0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -000777f0: 6273 703b 3a3d 203c 6120 636c 6173 733d bsp;:= < │ │ │ -00077830: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00077840: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00077850: 6e22 3e65 715f 6578 325f 7265 6374 3c2f n">eq_ex2_rect R< │ │ │ -000778c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ -00077920: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.  D │ │ │ -00077960: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition │ │ │ -00077970: 203c 6120 6964 3d22 6571 5f65 7832 5f72 < │ │ │ -000779c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000779d0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000779e0: 6e22 3e65 715f 6578 325f 7265 6374 5f65 n">eq_ex2_rect_e │ │ │ -000779f0: 785f 696e 7472 6f32 5f72 3c2f 7370 616e x_intro2_r {A : │ │ │ -00077a60: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ -00077a90: 6120 6964 3d22 503a 3839 3822 2063 6c61 a id="P:898" cla │ │ │ -00077aa0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00077ab0: 2223 503a 3839 3822 3e3c 7370 616e 2063 "#P:898">P │ │ │ -00077b10: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00077b30: 513c 2f73 7061 6e3e 3c2f 613e 203a 203c Q : < │ │ │ -00077b40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -00077b50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -00077b60: 6f67 6963 2e68 746d 6c23 413a 3839 3722 ogic.html#A:897" │ │ │ -00077b70: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ -00077ba0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop} {u v1 v2 v3 │ │ │ -00077da0: 3c2f 7370 616e 3e3c 2f61 3e7d 2028 3c61 } (R │ │ │ -00077e00: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : _ -> │ │ │ -00077ea0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Type)
. &n │ │ │ -00077ee0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00077ef0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00077f00: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00077f10: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00077f20: 266e 6273 703b 283c 6120 6964 3d22 663a  (f : │ │ │ -00077f80: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ -00077fb0: 6120 6964 3d22 703a 3930 3522 2063 6c61 a id="p:905" cla │ │ │ -00077fc0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -00077fd0: 2223 703a 3930 3522 3e3c 7370 616e 2063 "#p:905">p │ │ │ -00078030: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00078050: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q r< │ │ │ -000780b0: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, R (eq_ex_intr │ │ │ -00078180: 6f32 5f72 3c2f 7370 616e 3e3c 2f61 3e20 o2_r │ │ │ -00078190: 283c 7370 616e 2063 6c61 7373 3d22 6964 (P< │ │ │ -000781b0: 2f73 7061 6e3e 3a3d 3c61 2063 6c61 7373 /span>:=P
) (Q │ │ │ -00078240: 3a3d 3c61 2063 6c61 7373 3d22 6964 7265 :=Q) u │ │ │ -00078300: 3c2f 613e 203c 6120 636c 6173 733d 2269 v1 v2< │ │ │ -000783c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00078420: 7633 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v3 │ │ │ -00078460: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ -00078490: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000784a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000784b0: 6f67 6963 2e68 746d 6c23 713a 3930 3622 ogic.html#q:906" │ │ │ -000784c0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >q │ │ │ -000784f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 r │ │ │ -00078550: 2929 3c62 722f 3e0a 266e 6273 703b 266e ))
. &n │ │ │ -00078560: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00078570: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ -000785a0: 203c 6120 6964 3d22 703a 3930 3922 2063 p, R p< │ │ │ -000786b0: 2f73 7061 6e3e 3c2f 613e 3c62 722f 3e0a /span>
. │ │ │ -000786c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -000786d0: 703b 266e 6273 703b 3a3d 203c 6120 636c p; := eq_ex2_re │ │ │ -00078740: 6374 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ct │ │ │ -00078780: 3c73 7061 6e20 636c 6173 733d 2269 6422 R < │ │ │ -000787b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -000787c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -000787d0: 6f67 6963 2e68 746d 6c23 663a 3930 3822 ogic.html#f:908" │ │ │ -000787e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >f. │ │ │ -00078810: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00078820: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
< │ │ │ -000788a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000788b0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -000788c0: 6e22 3e65 715f 6578 325f 7265 6374 5f65 n">eq_ex2_rect_e │ │ │ -000788d0: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ -000788e0: 2f61 3e20 7b3c 6120 6964 3d22 413a 3931 /a> {< │ │ │ -00078910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00078920: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -00078930: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -00078960: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ -000789c0: 2f61 3e20 3c61 2069 643d 2251 3a39 3132 /a> Q< │ │ │ -00078a10: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00078a50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00078a60: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00078a70: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} {u1 < │ │ │ -00078b80: 6120 6964 3d22 7532 3a39 3134 2220 636c a id="u2:914" cl │ │ │ -00078b90: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ -00078ba0: 3d22 2375 323a 3931 3422 3e3c 7370 616e ="#u2:914">u2 u3 < │ │ │ -00078c60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00078c70: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ -00078c80: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 v2 v3 │ │ │ -00078d40: 7d20 283c 6120 6964 3d22 523a 3931 3922 } (R : _ -> Type< │ │ │ -00078e60: 2f73 7061 6e3e 293c 6272 2f3e 0a26 6e62 /span>)
.&nb │ │ │ -00078e70: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00078e80: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00078e90: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00078ea0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00078eb0: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (f : forall p< │ │ │ -00078f90: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> q r, R< │ │ │ -000790a0: 2f73 7061 6e3e 3c2f 613e 2028 403c 6120 /span> (@eq_ex_ │ │ │ -00079110: 696e 7472 6f32 3c2f 7370 616e 3e3c 2f61 intro2 A P< │ │ │ -000791e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ -00079240: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1 v1< │ │ │ -00079300: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -00079360: 7532 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u2
v2 │ │ │ -000793d0: 203c 6120 636c 6173 733d 2269 6472 6566 u3< │ │ │ -00079430: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v3
p q r))
│ │ │ -000795c0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -000795d0: 7370 3b26 6e62 7370 3b3a 203c 7370 616e sp; : fora │ │ │ -00079600: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ -00079660: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , R p< │ │ │ -00079720: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ -00079730: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00079740: 3b3a 3d20 3c61 2063 6c61 7373 3d22 6964 ;:=
│ │ │ -000797a0: 6571 5f65 7832 5f72 6563 743c 2f73 7061 eq_ex2_rect R f
.
.. │ │ │ -00079880: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -00079890: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
< │ │ │ -00079910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00079920: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -00079930: 6e22 3e65 715f 6578 325f 7265 6374 5f75 n">eq_ex2_rect_u │ │ │ -00079940: 6e63 7572 7269 6564 3c2f 7370 616e 3e3c ncurried< │ │ │ -00079950: 2f61 3e20 7b3c 6120 6964 3d22 413a 3932 /a> {< │ │ │ -00079980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00079990: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ -000799a0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ -000799d0: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ -00079a30: 2f61 3e20 3c61 2069 643d 2251 3a39 3237 /a> Q< │ │ │ -00079a80: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -00079ac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00079ad0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00079ae0: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} {< │ │ │ -00079bc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00079bd0: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ -00079be0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v : exists2 a │ │ │ -00079d40: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -00079db0: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 6120 : < │ │ │ -00079df0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00079e00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00079e10: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -00079f50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ -00079fd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -0007a030: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0007a090: 613c 2f73 7061 6e3e 3c2f 613e 7d20 283c a} (< │ │ │ -0007a0a0: 6120 6964 3d22 523a 3933 3222 2063 6c61 a id="R:932" cla │ │ │ -0007a0b0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0007a0c0: 2223 523a 3933 3222 3e3c 7370 616e 2063 "#R:932">R : u = │ │ │ -0007a1d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v -&g │ │ │ -0007a2a0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; T │ │ │ -0007a2d0: 7970 653c 2f73 7061 6e3e 293c 6272 2f3e ype)
│ │ │ -0007a2e0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -0007a2f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0007a300: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0007a310: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0007a320: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -0007a330: 3c61 2069 643d 2266 3a39 3336 2220 636c f : forall │ │ │ -0007a3b0: 3c2f 7370 616e 3e20 3c61 2069 643d 2270 pqr │ │ │ -0007a410: 3c2f 613e 203a 203c 6120 636c 6173 733d : exists2
p │ │ │ -0007a500: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f │ │ │ -0007a560: 3c73 7061 6e20 636c 6173 733d 2269 6422 : < │ │ │ -0007a590: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007a5a0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
= │ │ │ -0007a630: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0007a650: 2f73 7061 6e3e 3c61 2063 6c61 7373 3d22 /span>, _ │ │ │ -0007a6f0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 & _, < │ │ │ -0007a7a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007a7b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007a7c0: 6f67 6963 2e68 746d 6c23 523a 3933 3222 ogic.html#R:932" │ │ │ -0007a7d0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >R │ │ │ -0007a800: 283c 6120 636c 6173 733d 2269 6472 6566 (eq_ex2 u< │ │ │ -0007a8c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> v │ │ │ -0007a920: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (ex_proj1 │ │ │ -0007a9f0: 7071 723c 2f73 7061 6e3e 3c2f 613e 2920 pqr) │ │ │ -0007aa00: 283c 6120 636c 6173 733d 2269 6472 6566 (ex_pro │ │ │ -0007aa60: 6a32 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j2 pqr) (ex │ │ │ -0007ab30: 5f70 726f 6a33 3c2f 7370 616e 3e3c 2f61 _proj3 pqr)))
.& │ │ │ -0007abb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0007abc0: 3b26 6e62 7370 3b3a 203c 7370 616e 2063 ; : forall │ │ │ -0007abf0: 3c2f 7370 616e 3e20 3c61 2069 643d 2270 p, │ │ │ -0007ac50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 R │ │ │ -0007acb0: 203c 6120 636c 6173 733d 2269 6472 6566 p
. &nb │ │ │ -0007ad20: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -0007ad30: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = eq │ │ │ -0007ad90: 5f65 7832 5f72 6563 743c 2f73 7061 6e3e _ex2_rect │ │ │ -0007ada0: 3c2f 613e 203c 6120 636c 6173 733d 2269 R (fun p q │ │ │ -0007aee0: 203c 6120 6964 3d22 723a 3934 3022 2063 r => │ │ │ -0007af70: 3c73 7061 6e20 636c 6173 733d 2269 6422 f ( │ │ │ -0007afa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_in │ │ │ -0007b000: 7472 6f32 3c2f 7370 616e 3e3c 2f61 3e20 tro2 │ │ │ -0007b010: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ │ │ │ -0007b0b0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ -0007b0f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007b100: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007b110: 3e71 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >q │ │ │ -0007b150: 3c73 7061 6e20 636c 6173 733d 2269 6422 r)) │ │ │ -0007b180: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ -0007b190: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition eq_ex2_rec_unc │ │ │ -0007b240: 7572 7269 6564 3c2f 7370 616e 3e3c 2f61 urried {A : Pro │ │ │ -0007b2d0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q : A │ │ │ -0007b3e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ -0007b460: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ -0007b490: 7d20 7b3c 6120 6964 3d22 753a 3934 3422 } {u v │ │ │ -0007b540: 7d20 283c 6120 6964 3d22 523a 3934 3822 } (R : │ │ │ -0007b5f0: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = v :> (exists2 a │ │ │ -0007b8d0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0007b940: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 6120 : < │ │ │ -0007b980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007b990: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007b9a0: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -0007bae0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ -0007bb60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ -0007bbc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0007bc20: 613c 2f73 7061 6e3e 3c2f 613e 3c61 2063 a) - │ │ │ -0007bd10: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ -0007bd20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Set) := │ │ │ -0007bd50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_ex2_rec │ │ │ -0007bdc0: 745f 756e 6375 7272 6965 643c 2f73 7061 t_uncurried R.
.&n │ │ │ -0007be40: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ -0007be70: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition eq_ex2_ │ │ │ -0007bef0: 696e 645f 756e 6375 7272 6965 643c 2f73 ind_uncurried
{A │ │ │ -0007bf60: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ -0007bf90: 207b 3c61 2069 643d 2250 3a39 3530 2220 {P
Q │ │ │ -0007c040: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A ->< │ │ │ -0007c110: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ -0007c140: 3c2f 7370 616e 3e7d 207b 3c61 2069 643d } {u │ │ │ -0007c1a0: 203c 6120 6964 3d22 763a 3935 3322 2063 v} (R │ │ │ -0007c250: 203a 203c 6120 636c 6173 733d 2269 6472 : u< │ │ │ -0007c2b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ -0007c330: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ -0007c390: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0007c400: 3a26 6774 3b3c 2f73 7061 6e3e 3c2f 613e :> │ │ │ -0007c410: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0007c480: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (exist │ │ │ -0007c500: 7332 3c2f 7370 616e 3e3c 2f61 3e20 3c61 s2 a :< │ │ │ -0007c600: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A │ │ │ -0007c660: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 , │ │ │ -0007c6e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ -0007c740: 203c 6120 636c 6173 733d 2269 6472 6566 a < │ │ │ -0007c7f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007c800: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -0007c810: 3e26 616d 703b 3c2f 7370 616e 3e3c 2f61 >& Q a< │ │ │ -0007c8e0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ -0007c930: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ -0007c960: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007c970: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007c980: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ -0007c990: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ -0007c9a0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Prop) := eq_ │ │ │ -0007ca70: 6578 325f 7265 635f 756e 6375 7272 6965 ex2_rec_uncurrie │ │ │ -0007ca80: 643c 2f73 7061 6e3e 3c2f 613e 203c 6120 d < │ │ │ -0007cac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007cad0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007cae0: 3e52 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >R...
.
..
.Equivalence │ │ │ -0007cb20: 206f 6620 6571 7561 6c69 7479 206f 6620 of equality of │ │ │ -0007cb30: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex2 │ │ │ -0007cb70: 3c2f 7370 616e 3e20 696e 766f 6c76 696e involvin │ │ │ -0007cb80: 6720 6850 726f 7073 2077 6974 6820 6571 g hProps with eq │ │ │ -0007cb90: 7561 6c69 7479 206f 6620 7468 6520 6669 uality of the fi │ │ │ -0007cba0: 7273 7420 636f 6d70 6f6e 656e 7473 200a rst components . │ │ │ -0007cbb0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.  │ │ │ -0007cbd0: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ -0007cc00: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ │ │ │ -0007cc70: 6578 325f 6870 726f 705f 6966 663c 2f73 ex2_hprop_iff {A │ │ │ -0007cce0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ -0007cd10: 207b 3c61 2069 643d 2250 3a39 3538 2220 {P Q │ │ │ -0007cdc0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A ->< │ │ │ -0007ce90: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ -0007cec0: 3c2f 7370 616e 3e7d 2028 3c61 2069 643d } ( │ │ │ -0007cf00: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0007cf20: 515f 6870 726f 703c 2f73 7061 6e3e 3c2f Q_hprop : forall (< │ │ │ -0007cf90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007cfa0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ -0007cfb0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ -0007cff0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) │ │ │ -0007d020: 283c 6120 6964 3d22 703a 3936 3122 2063 (p q : │ │ │ -0007d0d0: 203c 6120 636c 6173 733d 2269 6472 6566 Q x), p = q)
. & │ │ │ -0007d2e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0007d2f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0007d300: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0007d310: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0007d320: 3b26 6e62 7370 3b28 3c61 2069 643d 2275 ; (
u < │ │ │ -0007d380: 6120 6964 3d22 763a 3936 3722 2063 6c61 a id="v:967" cla │ │ │ -0007d390: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0007d3a0: 2223 763a 3936 3722 3e3c 7370 616e 2063 "#v:967">v : exists2 │ │ │ -0007d4c0: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e3c a< │ │ │ -0007d4d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> : │ │ │ -0007d550: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ -0007d5b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ -0007d620: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0007d680: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -0007d6c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007d6d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007d6e0: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a &am │ │ │ -0007d760: 703b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 p; │ │ │ -0007d7a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ -0007d7d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007d7e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007d7f0: 6f67 6963 2e68 746d 6c23 613a 3936 3522 ogic.html#a:965" │ │ │ -0007d800: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >a) │ │ │ -0007d830: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0007d840: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ -0007d850: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ -0007d8b0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ -0007d920: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ -0007d960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007d970: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007d980: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >v <-&g │ │ │ -0007da00: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (u = v │ │ │ -0007dc10: 3c73 7061 6e20 636c 6173 733d 2269 6422 :> │ │ │ -0007dc90: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ -0007dcc0: 2f61 3e20 3c61 2069 643d 2261 3a39 3638 /a> a< │ │ │ -0007dd10: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ -0007dd50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007dd60: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007dd70: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ -0007deb0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>)
. &nb │ │ │ -0007df40: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ -0007df50: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = conj (fun
< │ │ │ -0007e010: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007e020: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ -0007e030: 3c2f 7370 616e 3e3c 2f61 3e20 3d26 6774 => │ │ │ -0007e040: 3b20 3c61 2063 6c61 7373 3d22 6964 7265 ; f_equal (@ │ │ │ -0007e0e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_of_ex2
_ < │ │ │ -0007e140: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007e150: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_) │ │ │ -0007e1e0: 703c 2f73 7061 6e3e 3c2f 613e 2920 283c p) (< │ │ │ -0007e1f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007e200: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007e210: 6f67 6963 2e68 746d 6c23 6571 5f65 7832 ogic.html#eq_ex2 │ │ │ -0007e220: 5f68 7072 6f70 223e 3c73 7061 6e20 636c _hprop">eq_e │ │ │ -0007e250: 7832 5f68 7072 6f70 3c2f 7370 616e 3e3c x2_hprop< │ │ │ -0007e260: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q_ │ │ │ -0007e2c0: 6870 726f 703c 2f73 7061 6e3e 3c2f 613e hprop │ │ │ -0007e2d0: 203c 6120 636c 6173 733d 2269 6472 6566 u v).
..
│ │ │ -0007e3a0: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Non-d │ │ │ -0007e3c0: 6570 656e 6465 6e74 2063 6c61 7373 6966 ependent classif │ │ │ -0007e3d0: 6963 6174 696f 6e20 6f66 2065 7175 616c ication of equal │ │ │ -0007e3e0: 6974 7920 6f66 203c 7370 616e 2063 6c61 ity of │ │ │ -0007e400: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex< │ │ │ -0007e420: 2f73 7061 6e3e 3c2f 7370 616e 3e20 0a3c /span> .< │ │ │ -0007e430: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
. & │ │ │ -0007e450: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ -0007e480: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq_ex2_non │ │ │ -0007e4f0: 6465 703c 2f73 7061 6e3e 3c2f 613e 207b dep { │ │ │ -0007e500: 3c61 2069 643d 2241 3a39 3730 2220 636c A : Prop} {B < │ │ │ -0007e5e0: 6120 6964 3d22 433a 3937 3222 2063 6c61 a id="C:972" cla │ │ │ -0007e5f0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0007e600: 2223 433a 3937 3222 3e3c 7370 616e 2063 "#C:972">C : Prop} (u v │ │ │ -0007e710: 3c2f 613e 203a 2040 3c61 2063 6c61 7373 : @ex2 A< │ │ │ -0007e7d0: 2f73 7061 6e3e 3c2f 613e 2028 3c73 7061 /span> (fun │ │ │ -0007e800: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ =& │ │ │ -0007e830: 6774 3b20 3c61 2063 6c61 7373 3d22 6964 gt; B │ │ │ -0007e890: 3c2f 613e 2920 283c 7370 616e 2063 6c61 ) (fun │ │ │ -0007e8e0: 5f3c 2f73 7061 6e3e 203d 2667 743b 203c _ => < │ │ │ -0007e8f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007e900: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007e910: 6f67 6963 2e68 746d 6c23 433a 3937 3222 ogic.html#C:972" │ │ │ -0007e920: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >C) │ │ │ -0007e950: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ -0007e960: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0007e970: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -0007e980: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -0007e990: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -0007e9a0: 6e62 7370 3b28 3c61 2069 643d 2270 3a39 nbsp;( │ │ │ -0007e9d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0007e9f0: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ -0007ea00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007ea10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007ea20: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -0007ea30: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ -0007ea60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0007eac0: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = ex_proj1 v) (q │ │ │ -0007ec70: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : ex_pr │ │ │ -0007ecd0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ -0007ece0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007ecf0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007ed00: 6f67 6963 2e68 746d 6c23 753a 3937 3322 ogic.html#u:973" │ │ │ -0007ed10: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ -0007ed40: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ -0007edb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2 v) (r : ex │ │ │ -0007ef40: 5f70 726f 6a33 3c2f 7370 616e 3e3c 2f61 _proj3 u │ │ │ -0007f000: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ -0007f030: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ -0007f040: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ -0007f050: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ -0007f060: 6a33 223e 3c73 7061 6e20 636c 6173 733d j3">ex_proj3 │ │ │ -0007f090: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -0007f0f0: 763c 2f73 7061 6e3e 3c2f 613e 293c 6272 v)
.  & │ │ │ -0007f110: 6e62 7370 3b26 6e62 7370 3b3a 203c 6120 nbsp; : < │ │ │ -0007f150: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007f160: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -0007f170: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = v< │ │ │ -0007f250: 2f73 7061 6e3e 3c2f 613e 3c62 722f 3e0a /span>
. │ │ │ -0007f260: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -0007f270: 703b 266e 6273 703b 3a3d 2040 3c61 2063 p; := @< │ │ │ -0007f2b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -0007f2c0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ -0007f2d0: 6e22 3e65 715f 6578 323c 2f73 7061 6e3e n">eq_ex2 │ │ │ -0007f2e0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ _ │ │ │ -0007f330: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0007f350: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> u v
p ( │ │ │ -0007f4b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ -0007f4d0: 715f 7472 616e 733c 2f73 7061 6e3e 3c2f q_trans (rew_con │ │ │ -0007f540: 7374 3c2f 7370 616e 3e3c 2f61 3e20 3c73 st _ _) q │ │ │ -0007f5f0: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (eq_trans (rew_ │ │ │ -0007f6c0: 636f 6e73 743c 2f73 7061 6e3e 3c2f 613e const │ │ │ -0007f6d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -0007f6f0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _) │ │ │ -0007f750: 3c73 7061 6e20 636c 6173 733d 2269 6422 r). │ │ │ -0007f780: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Classific │ │ │ -0007f7b0: 6174 696f 6e20 6f66 2074 7261 6e73 706f ation of transpo │ │ │ -0007f7c0: 7274 696e 6720 6163 726f 7373 2061 6e20 rting across an │ │ │ -0007f7d0: 6571 7561 6c69 7479 206f 6620 3c73 7061 equality of ex2s .
.. │ │ │ -0007f840: 266e 6273 703b 266e 6273 703b 3c73 7061   Lem │ │ │ -0007f870: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma
rew_ex2 {A' │ │ │ -0007f930: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Type} { │ │ │ -0007f990: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -0007f9b0: 783c 2f73 7061 6e3e 3c2f 613e 7d20 7b3c x} {< │ │ │ -0007f9c0: 6120 6964 3d22 503a 3938 3022 2063 6c61 a id="P:980" cla │ │ │ -0007f9d0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ -0007f9e0: 2223 503a 3938 3022 3e3c 7370 616e 2063 "#P:980">P : A'< │ │ │ -0007fa70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0007fac0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop} │ │ │ -0007fb20: 2028 3c61 2069 643d 2251 3a39 3832 2220 (Q
R │ │ │ -0007fbd0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ -0007fc00: 203c 6120 6964 3d22 613a 3938 3122 2063 a, P a< │ │ │ -0007fd10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ -0007fd60: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop) │ │ │ -0007fdc0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ -0007fdd0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -0007fde0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -0007fdf0: 266e 6273 703b 283c 6120 6964 3d22 753a  (
u : │ │ │ -0007fe50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ -0007fec0: 7869 7374 7332 3c2f 7370 616e 3e3c 2f61 xists2 p │ │ │ -0007ff40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 : P
x, │ │ │ -00080100: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q x p & R
x p< │ │ │ -000803c0: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ -000803d0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ -000803e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -000803f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00080400: 3b7b 3c61 2069 643d 2279 3a39 3837 2220 ;{y
} (H : x │ │ │ -00080510: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ -00080590: 203c 6120 636c 6173 733d 2269 6472 6566 y)
. &n │ │ │ -00080600: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00080610: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : < │ │ │ -00080660: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00080670: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00080680: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ -00080690: 3c61 2063 6c61 7373 3d22 6964 7265 6622 [ │ │ │ -00080700: 3c2f 7370 616e 3e3c 2f61 3e3c 7370 616e fun< │ │ │ -00080730: 2f73 7061 6e3e 203c 6120 6964 3d22 613a /span> a =& │ │ │ -00080790: 6774 3b20 3c61 2063 6c61 7373 3d22 6964 gt; exists2 │ │ │ -00080840: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ -00080860: 3c73 7061 6e20 6964 3d22 703a 3939 3122 p
│ │ │ -00080890: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ -00080900: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00080960: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ -000809a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -000809b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -000809c0: 3e61 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >a, Q a< │ │ │ -00080b00: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ -00080b60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 & │ │ │ -00080be0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ -00080c40: 523c 2f73 7061 6e3e 3c2f 613e 203c 6120 R < │ │ │ -00080c80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00080c90: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00080ca0: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a │ │ │ -00080ce0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p] H< │ │ │ -00080de0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in u
.&n │ │ │ -00080ed0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00080ee0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00080ef0: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;< │ │ │ -00080f40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00080f50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ -00080f60: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= ex_intr │ │ │ -00080fd0: 6f32 3c2f 7370 616e 3e3c 2f61 3e3c 6272 o2
.  & │ │ │ -00080ff0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00081000: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00081010: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ -00081020: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ -00081080: 203c 6120 636c 6173 733d 2269 6472 6566 y)
. &n │ │ │ -000810f0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00081100: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00081110: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00081120: 6273 703b 283c 6120 636c 6173 733d 2269 bsp;(R y)
.&nb │ │ │ -000811f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ -00081200: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ -00081210: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ -00081220: 7370 3b26 6e62 7370 3b28 3c61 2063 6c61 sp; (rew │ │ │ -000812a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 H │ │ │ -00081350: 3c73 7061 6e20 636c 6173 733d 2269 6422 in │ │ │ -00081380: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ -000813e0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ -00081420: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00081430: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ -00081440: 3e75 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >u).   │ │ │ -00081460: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00081470: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00081480: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00081490: 283c 6120 636c 6173 733d 2269 6472 6566 (rew │ │ │ -00081590: 6465 7065 6e64 656e 743c 2f73 7061 6e3e dependent │ │ │ -000815a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 H in │ │ │ -00081680: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj2 u)
. │ │ │ -00081760: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ -00081770: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ -00081780: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ -00081790: 266e 6273 703b 266e 6273 703b 283c 6120   (rew< │ │ │ -00081820: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> depe │ │ │ -000818a0: 6e64 656e 743c 2f73 7061 6e3e 3c2f 613e ndent │ │ │ -000818b0: 203c 6120 636c 6173 733d 2269 6472 6566 H in ex_proj3 │ │ │ -00081a00: 3c2f 613e 203c 6120 636c 6173 733d 2269 u).
.En │ │ │ -00081a90: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d ex2
.
.< │ │ │ -00081b00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00081b10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ -00081b20: 476c 6f62 616c 2041 7267 756d 656e 7473 Global Arguments │ │ │ -00081b30: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 eq_ex_intro │ │ │ -00081ba0: 323c 2f73 7061 6e3e 3c2f 613e 203c 7370 2 A │ │ │ -00081bf0: 503c 2f73 7061 6e3e 203c 7370 616e 2063 P Q < │ │ │ -00081c20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ -00081c30: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
_ _ │ │ │ -00081c90: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ -00081cb0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ _ !p !q │ │ │ -00081d50: 2021 3c73 7061 6e20 636c 6173 733d 2269 !r │ │ │ -00081d70: 3c2f 7370 616e 3e20 2f20 2e3c 6272 2f3e / .
│ │ │ -00081d80: 0a3c 2f64 6976 3e0a 2020 2020 3c64 6976 .
.
. .. . │ │ │ -000820e0: 0a3c 2f64 6976 3e0a 0a3c 2f62 6f64 793e .
.. │ │ │ -000820f0: 0a3c 2f68 746d 6c3e 0a .. │ │ │ +00000a40: 6f63 223e 0a3c 6120 6964 3d22 6c61 6238 oc">.

Prop │ │ │ +00000a70: 6f73 6974 696f 6e61 6c20 636f 6e6e 6563 ositional connec │ │ │ +00000a80: 7469 7665 733c 2f68 313e 0a0a 3c64 6976 tives

..
.. True is the alw │ │ │ +00000b00: 6179 7320 7472 7565 2070 726f 706f 7369 ays true proposi │ │ │ +00000b10: 7469 6f6e 200a 3c2f 6469 763e 0a3c 6469 tion .
.. │ │ │ +00000b30: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Inductiv │ │ │ +00000b60: 653c 2f73 7061 6e3e 203c 6120 6964 3d22 e │ │ │ +00000bc0: 3c73 7061 6e20 6964 3d22 5472 7565 5f72 │ │ │ +00000be0: 3c73 7061 6e20 6964 3d22 5472 7565 5f69 < │ │ │ +00000c00: 7370 616e 2069 643d 2254 7275 655f 7265 span id="True_re │ │ │ +00000c10: 6322 2063 6c61 7373 3d22 6964 223e 3c73 c" class="id">Tr │ │ │ +00000c40: 7565 3c2f 7370 616e 3e3c 2f73 7061 6e3e ue │ │ │ +00000c50: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 3c2f : Pro │ │ │ +00000c90: 703c 2f73 7061 6e3e 203a 3d3c 6272 2f3e p :=
│ │ │ +00000ca0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 6120 .  < │ │ │ +00000cd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00000ce0: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +00000cf0: 6f72 223e 493c 2f73 7061 6e3e 3c2f 613e or">I │ │ │ +00000d00: 203a 203c 6120 636c 6173 733d 2269 6472 : True
.
.. │ │ │ +00000d70: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ +00000da0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> True │ │ │ +00000dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 as core.Tru │ │ │ +00000e20: 652e 7479 7065 3c2f 7370 616e 3e2e 3c62 e.type..Register
I as core.True.I.
..
.
..
.False< │ │ │ +00000f50: 2f73 7061 6e3e 2069 7320 7468 6520 616c /span> is the al │ │ │ +00000f60: 7761 7973 2066 616c 7365 2070 726f 706f ways false propo │ │ │ +00000f70: 7369 7469 6f6e 200a 3c2f 6469 763e 0a3c sition .
.< │ │ │ +00000f80: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ +00000f90: 3e0a 3c73 7061 6e20 636c 6173 733d 2269 >.Inductive F │ │ │ +000010a0: 616c 7365 3c2f 7370 616e 3e3c 2f73 7061 alse │ │ │ +000010c0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ +000010f0: 726f 703c 2f73 7061 6e3e 203a 3d2e 3c62 rop :=...
.Regi │ │ │ +00001130: 7374 6572 3c2f 7370 616e 3e20 3c73 7061 ster False as │ │ │ +00001190: 203c 7370 616e 2063 6c61 7373 3d22 6964 co │ │ │ +000011b0: 7265 2e46 616c 7365 2e74 7970 653c 2f73 re.False.type
.
..
.
..
.not A, writt │ │ │ +00001280: 656e 203c 7370 616e 2063 6c61 7373 3d22 en ~A, is th │ │ │ +000012d0: 6520 6e65 6761 7469 6f6e 206f 6620 3c73 e negation of A .
.
.< │ │ │ +00001340: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00001350: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00001360: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition not< │ │ │ +000013c0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (A:< │ │ │ +00001420: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00001430: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00001440: 5072 6f70 3c2f 7370 616e 3e29 203a 3d20 Prop) := │ │ │ +00001450: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00001480: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +000014b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000014c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000014d0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +000014e0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +000014f0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Fals │ │ │ +00001580: 653c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 e.
..
.Notat │ │ │ +000015c0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion &qu │ │ │ +00001650: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 7e20 ot;~ │ │ │ +00001660: 7822 203a 3d20 283c 6120 636c 6173 733d x" := (not x) │ │ │ +000016f0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +00001710: 7479 7065 5f73 636f 7065 3c2f 7370 616e type_scope.
..
.< │ │ │ +00001730: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00001740: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00001750: 5265 6769 7374 6572 3c2f 7370 616e 3e20 Register
│ │ │ +00001760: 3c73 7061 6e20 636c 6173 733d 2269 6422 not │ │ │ +00001780: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ +000017d0: 636f 7265 2e6e 6f74 2e74 7970 653c 2f73 core.not.type
.
..
.
..
.Nega │ │ │ +00001810: 7469 6f6e 206f 6620 6120 7479 7065 2069 tion of a type i │ │ │ +00001820: 6e20 3c73 7061 6e20 636c 6173 733d 2269 n Type │ │ │ +00001860: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 200a . │ │ │ +00001870: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
..
│ │ │ +00001890: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Definition │ │ │ +00001910: 6e6f 7454 3c2f 7370 616e 3e3c 2f61 3e20 notT │ │ │ +00001920: 283c 6120 6964 3d22 413a 3622 2063 6c61 (A< │ │ │ +00001970: 2f61 3e3a 3c73 7061 6e20 636c 6173 733d /a>:Type │ │ │ +000019a0: 2920 3a3d 203c 6120 636c 6173 733d 2269 ) := A< │ │ │ +00001a00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00001a70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 False.
..
.< │ │ │ +00001af0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Create │ │ │ +00001b10: 7468 6520 2263 6f72 6522 2068 696e 7420 the "core" hint │ │ │ +00001b20: 6461 7461 6261 7365 2c20 616e 6420 7365 database, and se │ │ │ +00001b30: 7420 6974 7320 7472 616e 7370 6172 656e t its transparen │ │ │ +00001b40: 7420 7374 6174 6520 666f 720a 2020 7661 t state for. va │ │ │ +00001b50: 7269 6162 6c65 7320 616e 6420 636f 6e73 riables and cons │ │ │ +00001b60: 7461 6e74 7320 6578 706c 6963 6974 6c79 tants explicitly │ │ │ +00001b70: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
...Create Hint │ │ │ +00001bc0: 4462 3c2f 7370 616e 3e20 3c73 7061 6e20 Db core.
.#[global]
.Hin │ │ │ +00001c50: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t
Variab │ │ │ +00001c80: 6c65 733c 2f73 7061 6e3e 203c 7370 616e les Opaq │ │ │ +00001cb0: 7565 3c2f 7370 616e 3e20 3a20 3c73 7061 ue : core
.
.#[global │ │ │ +00001d10: 3c2f 7370 616e 3e5d 3c62 722f 3e0a 3c73 ]
.H │ │ │ +00001d40: 696e 743c 2f73 7061 6e3e 203c 7370 616e int Constant │ │ │ +00001d70: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s Opaque │ │ │ +00001da0: 3c2f 7370 616e 3e20 3a20 3c73 7061 6e20 : core.
..
. │ │ │ +00001de0: 235b 3c73 7061 6e20 636c 6173 733d 2269 #[g │ │ │ +00001e00: 6c6f 6261 6c3c 2f73 7061 6e3e 5d3c 6272 lobal]
.Hint │ │ │ +00001e40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Unfold < │ │ │ +00001e70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00001e80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00001e90: 6f67 6963 2e68 746d 6c23 6e6f 7422 3e3c ogic.html#not">< │ │ │ +00001ea0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00001eb0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00001ec0: 6e22 3e6e 6f74 3c2f 7370 616e 3e3c 2f61 n">not
: │ │ │ +00001ef0: 636f 7265 3c2f 7370 616e 3e2e 3c62 722f core.
..
.
. │ │ │ +00001f10: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.and A │ │ │ +00001fb0: 203c 7370 616e 2063 6c61 7373 3d22 696e B< │ │ │ +00001ff0: 2f73 7061 6e3e 2c20 7772 6974 7465 6e20 /span>, written │ │ │ +00002000: 3c73 7061 6e20 636c 6173 733d 2269 6e6c A / │ │ │ +00002060: 5c3c 2f73 7061 6e3e 203c 7370 616e 2063 \ B │ │ │ +000020a0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2c20 , │ │ │ +000020b0: 6973 2074 6865 2063 6f6e 6a75 6e63 7469 is the conjuncti │ │ │ +000020c0: 6f6e 206f 6620 3c73 7061 6e20 636c 6173 on of < │ │ │ +000020e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000020f0: 7469 746c 653d 2276 6172 223e 413c 2f73 title="var">A and │ │ │ +00002110: 3c73 7061 6e20 636c 6173 733d 2269 6e6c B..
< │ │ │ +00002170: 2f64 6976 3e0a 0a20 2020 2020 203c 7370 /div>.. conj < │ │ │ +000021e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000021f0: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p q is a proof of │ │ │ +00002260: 3c73 7061 6e20 636c 6173 733d 2269 6e6c A / │ │ │ +000022c0: 5c3c 2f73 7061 6e3e 203c 7370 616e 2063 \ B │ │ │ +00002300: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2061 a │ │ │ +00002310: 7320 736f 6f6e 2061 730a 2020 2020 2020 s soon as. │ │ │ +00002320: 3c73 7061 6e20 636c 6173 733d 2269 6e6c p is a proof │ │ │ +00002370: 206f 6620 3c73 7061 6e20 636c 6173 733d of A and q a proof of < │ │ │ +00002410: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00002420: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">B..
.. proj1 and │ │ │ +00002500: 7072 6f6a 323c 2f73 7061 6e3e 3c2f 7370 proj2 are first an │ │ │ +00002520: 6420 7365 636f 6e64 2070 726f 6a65 6374 d second project │ │ │ +00002530: 696f 6e73 206f 6620 6120 636f 6e6a 756e ions of a conjun │ │ │ +00002540: 6374 696f 6e20 0a3c 2f64 6976 3e0a 3c64 ction .
. │ │ │ +00002560: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Inducti │ │ │ +00002590: 7665 3c2f 7370 616e 3e20 3c61 2069 643d ve │ │ │ +000025c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 < │ │ │ +000025f0: 7370 616e 2069 643d 2261 6e64 5f72 6563 span id="and_rec │ │ │ +00002600: 7422 2063 6c61 7373 3d22 6964 223e 3c73 t" class="id">and< │ │ │ +00002690: 2f61 3e20 283c 6120 6964 3d22 413a 3722 /a> (A B< │ │ │ +00002730: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Prop │ │ │ +00002760: 3c2f 7370 616e 3e29 203a 203c 7370 616e ) : Prop │ │ │ +00002790: 3c2f 7370 616e 3e20 3a3d 3c62 722f 3e0a :=
. │ │ │ +000027a0: 266e 6273 703b 266e 6273 703b 3c61 2069   conj
: A < │ │ │ +000028b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000028c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000028d0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> B │ │ │ +00002940: 203c 6120 636c 6173 733d 2269 6472 6566 ->
A /\ │ │ │ +00002a90: 3c2f 613e 203c 6120 636c 6173 733d 2269 B< │ │ │ +00002af0: 2f61 3e3c 6272 2f3e 0a3c 6272 2f3e 0a3c /a>
.
.< │ │ │ +00002b00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00002b10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00002b20: 7768 6572 653c 2f73 7061 6e3e 203c 6120 where
& │ │ │ +00002bb0: 7175 6f74 3b3c 2f73 7061 6e3e 3c2f 613e quot; │ │ │ +00002bc0: 4120 2f5c 2042 2220 3a3d 2028 3c61 2063 A /\ B" := (< │ │ │ +00002c00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00002c10: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ +00002c20: 223e 616e 643c 2f73 7061 6e3e 3c2f 613e ">and │ │ │ +00002c30: 203c 7370 616e 2063 6c61 7373 3d22 6964 A< │ │ │ +00002c50: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> B) : │ │ │ +00002c80: 3c73 7061 6e20 636c 6173 733d 2269 6422 typ │ │ │ +00002ca0: 655f 7363 6f70 653c 2f73 7061 6e3e 2e3c e_scope.< │ │ │ +00002cb0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Reg │ │ │ +00002ce0: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister
and
as │ │ │ +00002d40: 3c73 7061 6e20 636c 6173 733d 2269 6422 cor │ │ │ +00002d60: 652e 616e 642e 7479 7065 3c2f 7370 616e e.and.type.
.Registe │ │ │ +00002da0: 723c 2f73 7061 6e3e 203c 7370 616e 2063 r conj as core.a │ │ │ +00002e20: 6e64 2e63 6f6e 6a3c 2f73 7061 6e3e 2e3c nd.conj.< │ │ │ +00002e30: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Sec │ │ │ +00002e60: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion Conjunction.
. │ │ │ +00002ee0: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +00002ef0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Variables
< │ │ │ +00002f60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00002f70: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00002f80: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A B : Prop.
..
.  < │ │ │ +00003040: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00003050: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00003060: 5468 656f 7265 6d3c 2f73 7061 6e3e 203c Theorem
< │ │ │ +00003070: 6120 6964 3d22 7072 6f6a 3122 2063 6c61 a id="proj1" cla │ │ │ +00003080: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00003090: 2223 7072 6f6a 3122 3e3c 7370 616e 2063 "#proj1">proj1
: A< │ │ │ +00003130: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ +000031b0: 203c 6120 636c 6173 733d 2269 6472 6566 B < │ │ │ +00003260: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00003270: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00003280: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> A< │ │ │ +000032f0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00003300: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ +00003310: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Theorem pro │ │ │ +00003390: 6a32 3c2f 7370 616e 3e3c 2f61 3e20 3a20 j2 : │ │ │ +000033a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A /\ │ │ │ +000034c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ +000034f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00003500: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00003510: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00003520: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00003530: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> B. │ │ │ +000035d0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.En │ │ │ +00003600: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d
Conjunction
.
.. │ │ │ +00003680: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +000036a0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c or< │ │ │ +000036e0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +00003700: 3c73 7061 6e20 636c 6173 733d 2269 6422 A B, written A \/ B, is t │ │ │ +00003830: 6865 2064 6973 6a75 6e63 7469 6f6e 206f he disjunction o │ │ │ +00003840: 6620 3c73 7061 6e20 636c 6173 733d 2269 f A │ │ │ +00003880: 3c2f 7370 616e 3e20 616e 6420 3c73 7061 and B .
.
...Inductive or │ │ │ +000039d0: 283c 6120 6964 3d22 413a 3135 2220 636c (A B< │ │ │ +00003a70: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Prop │ │ │ +00003aa0: 3c2f 7370 616e 3e29 203a 203c 7370 616e ) : Prop │ │ │ +00003ad0: 3c2f 7370 616e 3e20 3a3d 3c62 722f 3e0a :=
. │ │ │ +00003ae0: 266e 6273 703b 266e 6273 703b 7c20 3c61   | │ │ │ +00003b20: 3c73 7061 6e20 636c 6173 733d 2269 6422 or_introl : A │ │ │ +00003bb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00003c30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A< │ │ │ +00003c90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> \/ │ │ │ +00003d10: 203c 6120 636c 6173 733d 2269 6472 6566 B │ │ │ +00003d70: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00003d80: 703b 7c20 3c61 2069 643d 226f 725f 696e p;| or_in │ │ │ +00003de0: 7472 6f72 3c2f 7370 616e 3e3c 2f61 3e20 tror │ │ │ +00003df0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : B -> A \/ B
.
.where │ │ │ +00004040: 3c61 2069 643d 2266 3033 3166 6531 3935 │ │ │ +000040a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 "< │ │ │ +000040d0: 2f61 3e41 205c 2f20 4222 203a 3d20 283c /a>A \/ B" := (< │ │ │ +000040e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000040f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00004100: 6f67 6963 2e68 746d 6c23 6f72 3a31 3822 ogic.html#or:18" │ │ │ +00004110: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >or A │ │ │ +00004160: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c B) : │ │ │ +00004190: 203c 7370 616e 2063 6c61 7373 3d22 6964 ty │ │ │ +000041b0: 7065 5f73 636f 7065 3c2f 7370 616e 3e2e pe_scope. │ │ │ +000041c0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Ar │ │ │ +000041f0: 6775 6d65 6e74 733c 2f73 7061 6e3e 203c guments < │ │ │ +00004200: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00004210: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00004220: 6f67 6963 2e68 746d 6c23 6f72 5f69 6e74 ogic.html#or_int │ │ │ +00004230: 726f 6c22 3e3c 7370 616e 2063 6c61 7373 rol">or_int │ │ │ +00004260: 726f 6c3c 2f73 7061 6e3e 3c2f 613e 205b rol [ │ │ │ +00004270: 3c73 7061 6e20 636c 6173 733d 2269 6422 A B] _, [A] B _ │ │ │ +00004350: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 3c73 .
.A │ │ │ +00004380: 7267 756d 656e 7473 3c2f 7370 616e 3e20 rguments │ │ │ +00004390: 3c61 2063 6c61 7373 3d22 6964 7265 6622 or_in │ │ │ +000043f0: 7472 6f72 3c2f 7370 616e 3e3c 2f61 3e20 tror │ │ │ +00004400: 5b3c 7370 616e 2063 6c61 7373 3d22 6964 [A< │ │ │ +00004420: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> B] _
, A [B] │ │ │ +000044e0: 5f3c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a _.
.. │ │ │ +000044f0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ +00004520: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> or a │ │ │ +00004570: 733c 2f73 7061 6e3e 203c 7370 616e 2063 s core.or.ty │ │ │ +000045a0: 7065 3c2f 7370 616e 3e2e 3c62 722f 3e0a pe.
. │ │ │ +000045b0: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ +000045c0: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ +000045d0: 0a3c 7370 616e 2063 6c61 7373 3d22 696e .iff A │ │ │ +00004650: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ +00004660: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00004670: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">B, written A < │ │ │ +00004710: 3b2d 2667 743b 3c2f 7370 616e 3e20 3c73 ;-> B, expresses t │ │ │ +00004770: 6865 2065 7175 6976 616c 656e 6365 206f he equivalence o │ │ │ +00004780: 6620 3c73 7061 6e20 636c 6173 733d 2269 f A │ │ │ +000047c0: 3c2f 7370 616e 3e20 616e 6420 3c73 7061 and B .
.
...Definition< │ │ │ +00004860: 2f73 7061 6e3e 203c 6120 6964 3d22 6966 /span> iff │ │ │ +000048c0: 283c 6120 6964 3d22 413a 3139 2220 636c (A B< │ │ │ +00004960: 2f73 7061 6e3e 3c2f 613e 3a3c 7370 616e /span>:Prop │ │ │ +00004990: 3c2f 7370 616e 3e29 203a 3d20 3c61 2063 ) := (A -& │ │ │ +00004ae0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00004af0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00004b00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00004b10: 6f67 6963 2e68 746d 6c23 423a 3230 223e ogic.html#B:20"> │ │ │ +00004b20: 3c73 7061 6e20 636c 6173 733d 2269 6422 B) /\ (B -> A) │ │ │ +00004e70: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Notation &qu │ │ │ +00004f30: 6f74 3b3c 2f73 7061 6e3e 3c2f 613e 4120 ot;A │ │ │ +00004f40: 266c 743b 2d26 6774 3b20 4222 203a 3d20 <-> B" := │ │ │ +00004f50: 283c 6120 636c 6173 733d 2269 6472 6566 (iff< │ │ │ +00004fb0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> A B) │ │ │ +00005000: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +00005020: 7479 7065 5f73 636f 7065 3c2f 7370 616e type_scope.
..
.< │ │ │ +00005040: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00005050: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00005060: 5265 6769 7374 6572 3c2f 7370 616e 3e20 Register
│ │ │ +00005070: 3c73 7061 6e20 636c 6173 733d 2269 6422 iff │ │ │ +00005090: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ +000050e0: 636f 7265 2e69 6666 2e74 7970 653c 2f73 core.iff.type
.
.Regi │ │ │ +00005120: 7374 6572 3c2f 7370 616e 3e20 3c73 7061 ster proj1 as │ │ │ +00005180: 203c 7370 616e 2063 6c61 7373 3d22 6964 co │ │ │ +000051a0: 7265 2e69 6666 2e70 726f 6a31 3c2f 7370 re.iff.proj1.
.Regis │ │ │ +000051e0: 7465 723c 2f73 7061 6e3e 203c 7370 616e ter proj2
as │ │ │ +00005240: 3c73 7061 6e20 636c 6173 733d 2269 6422 cor │ │ │ +00005260: 652e 6966 662e 7072 6f6a 323c 2f73 7061 e.iff.proj2.
..
. │ │ │ +00005280: 3c73 7061 6e20 636c 6173 733d 2269 6422 Section │ │ │ +000052b0: 3c61 2069 643d 2245 7175 6976 616c 656e
Equivalen │ │ │ +00005310: 6365 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ce...
.Theo │ │ │ +00005350: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem iff_re │ │ │ +000053b0: 666c 3c2f 7370 616e 3e3c 2f61 3e20 3a20 fl : │ │ │ +000053c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ +000053f0: 6120 6964 3d22 413a 3231 2220 636c 6173 a id="A:21" clas │ │ │ +00005400: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +00005410: 2341 3a32 3122 3e3c 7370 616e 2063 6c61 #A:21">A< │ │ │ +00005440: 2f61 3e3a 3c73 7061 6e20 636c 6173 733d /a>:Prop │ │ │ +00005470: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , A < │ │ │ +00005540: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> A.
..
.< │ │ │ +000055c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000055d0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000055e0: 5468 656f 7265 6d3c 2f73 7061 6e3e 203c Theorem < │ │ │ +000055f0: 6120 6964 3d22 6966 665f 7472 616e 7322 a id="iff_trans" │ │ │ +00005600: 2063 6c61 7373 3d22 6964 7265 6622 2068 class="idref" h │ │ │ +00005610: 7265 663d 2223 6966 665f 7472 616e 7322 ref="#iff_trans" │ │ │ +00005620: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 > │ │ │ +00005640: 6966 665f 7472 616e 733c 2f73 7061 6e3e iff_trans │ │ │ +00005650: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall A< │ │ │ +000056d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B │ │ │ +00005730: 3c61 2069 643d 2243 3a32 3422 2063 6c61 C │ │ │ +00005780: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Prop, (A < │ │ │ +000058d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000058e0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000058f0: 3e26 6c74 3b2d 2667 743b 3c2f 7370 616e ><-> B) │ │ │ +00005a40: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00005a50: 203c 6120 636c 6173 733d 2269 6472 6566 ( │ │ │ +00005ac0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 B< │ │ │ +00005b20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ +00005b90: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ +00005ba0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> C< │ │ │ +00005c00: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>) -& │ │ │ +00005ce0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00005cf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00005d00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00005d10: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00005d20: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00005d30: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">(A < │ │ │ +00005e30: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> C) │ │ │ +00005f10: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Theorem │ │ │ +00005f80: 3c73 7061 6e20 636c 6173 733d 2269 6422 i │ │ │ +00005fa0: 6666 5f73 796d 3c2f 7370 616e 3e3c 2f61 ff_sym : forall A │ │ │ +00006060: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00006080: 423c 2f73 7061 6e3e 3c2f 613e 3a3c 7370 B:Pr │ │ │ +000060b0: 6f70 3c2f 7370 616e 3e2c 203c 6120 636c op, │ │ │ +00006100: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ +00006160: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00006170: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00006180: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A <-&g │ │ │ +00006200: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ +00006240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00006250: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00006260: 3e42 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >B) │ │ │ +000062e0: 203c 6120 636c 6173 733d 2269 6472 6566 ->
│ │ │ +000063c0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (B │ │ │ +00006420: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ +000064a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 A │ │ │ +00006500: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +00006550: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ +00006580: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.End │ │ │ +000065b0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 │ │ │ +000065f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Equivalence.
..< │ │ │ +00006630: 6272 2f3e 0a23 5b3c 7370 616e 2063 6c61 br/>.#[global]
.Hint
Unfold iff: extcore.
..
│ │ │ +00006760: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Backw │ │ │ +00006780: 6172 6420 6469 7265 6374 696f 6e20 6f66 ard direction of │ │ │ +00006790: 2074 6865 2065 7175 6976 616c 656e 6365 the equivalence │ │ │ +000067a0: 7320 6162 6f76 6520 646f 6573 206e 6f74 s above does not │ │ │ +000067b0: 206e 6565 6420 6173 7375 6d70 7469 6f6e need assumption │ │ │ +000067c0: 7320 0a3c 2f64 6976 3e0a 3c64 6976 2063 s .
.
...Theorem and_iff_compa │ │ │ +00006880: 745f 6c3c 2f73 7061 6e3e 3c2f 613e 203a t_l : │ │ │ +00006890: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +000068c0: 3c61 2069 643d 2241 3a32 3722 2063 6c61 A │ │ │ +00006910: 3c2f 613e 203c 6120 6964 3d22 423a 3238 B C : │ │ │ +000069c0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop,.   │ │ │ +00006a00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (< │ │ │ +00006a70: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B &l │ │ │ +00006b40: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> C) -&g │ │ │ +00006c90: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (A │ │ │ +00006d70: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00006de0: 2f5c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 /\ < │ │ │ +00006e20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00006e30: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00006e40: 3e42 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >B <-&g │ │ │ +00006ec0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ +00006f00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00006f10: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00006f20: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A /\< │ │ │ +00006fa0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C< │ │ │ +00007000: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ +00007050: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00007060: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00007070: 3e29 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >)...
.Theo │ │ │ +000070b0: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem and_if │ │ │ +00007120: 665f 636f 6d70 6174 5f72 3c2f 7370 616e f_compat_r : forall< │ │ │ +00007160: 2f73 7061 6e3e 203c 6120 6964 3d22 413a /span> < │ │ │ +00007190: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000071a0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +000071b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 B │ │ │ +00007210: 203c 6120 6964 3d22 433a 3332 2220 636c C : Prop
,
.  │ │ │ +000072a0: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; (< │ │ │ +00007310: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>B <-> C │ │ │ +000074c0: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) -> │ │ │ +00007540: 3c2f 613e 203c 6120 636c 6173 733d 2269 (B /\ │ │ │ +00007690: 3c2f 613e 203c 6120 636c 6173 733d 2269 A │ │ │ +000076f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ +00007760: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ +00007770: 3c2f 613e 203c 6120 636c 6173 733d 2269 C │ │ │ +000077d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ A) │ │ │ +00007920: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Theorem │ │ │ +000079a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 o │ │ │ +000079c0: 725f 6966 665f 636f 6d70 6174 5f6c 3c2f r_iff_compat_l : for │ │ │ +00007a00: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all A │ │ │ +00007a60: 3c61 2069 643d 2242 3a33 3422 2063 6c61 B │ │ │ +00007ab0: 3c2f 613e 203c 6120 6964 3d22 433a 3335 C : Pro │ │ │ +00007b30: 703c 2f73 7061 6e3e 2c3c 6272 2f3e 0a26 p,
.& │ │ │ +00007b40: 6e62 7370 3b26 6e62 7370 3b3c 6120 636c nbsp;  │ │ │ +00007b90: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ +00007bf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00007c00: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00007c10: 3e42 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >B <-&g │ │ │ +00007c90: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ +00007cd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00007ce0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00007cf0: 3e43 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >C) │ │ │ +00007d70: 203c 6120 636c 6173 733d 2269 6472 6566 ->
│ │ │ +00007e50: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (A │ │ │ +00007eb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 \/ B
<->
A
\/ C)
.
.. │ │ │ +000081d0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Theorem or_iff_compat │ │ │ +00008270: 5f72 3c2f 7370 616e 3e3c 2f61 3e20 3a20 _r : │ │ │ +00008280: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ +000082b0: 6120 6964 3d22 413a 3336 2220 636c 6173 a id="A:36" clas │ │ │ +000082c0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +000082d0: 2341 3a33 3622 3e3c 7370 616e 2063 6c61 #A:36">A< │ │ │ +00008300: 2f61 3e20 3c61 2069 643d 2242 3a33 3722 /a> B
C : │ │ │ +000083b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop,
.  < │ │ │ +000083f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00008400: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00008410: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00008420: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00008430: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">(B < │ │ │ +00008530: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> C) │ │ │ +00008610: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00008680: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; ( │ │ │ +00008700: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ +00008760: 3c61 2063 6c61 7373 3d22 6964 7265 6622 \ │ │ │ +000087d0: 2f3c 2f73 7061 6e3e 3c2f 613e 203c 6120 / │ │ │ +00008830: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A <-> │ │ │ +000088b0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ +00008910: 433c 2f73 7061 6e3e 3c2f 613e 203c 6120 C \/ A │ │ │ +00008a60: 293c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 ).
..
.Theor │ │ │ +00008aa0: 656d 3c2f 7370 616e 3e20 3c61 2069 643d em imp_iff │ │ │ +00008b10: 5f63 6f6d 7061 745f 6c3c 2f73 7061 6e3e _compat_l │ │ │ +00008b20: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall A< │ │ │ +00008ba0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B │ │ │ +00008c00: 3c61 2069 643d 2243 3a34 3122 2063 6c61 C │ │ │ +00008c50: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop,
.  │ │ │ +00008c90: 266e 6273 703b 3c61 2063 6c61 7373 3d22  (B
<->
C
) │ │ │ +00008eb0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00008f30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ( │ │ │ +00008ff0: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ +00009050: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00009060: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00009070: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> B │ │ │ +000091c0: 293c 2f73 7061 6e3e 3c2f 613e 203c 6120 ) <-> │ │ │ +00009240: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; ( │ │ │ +000092c0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 A< │ │ │ +00009320: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00009390: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 C │ │ │ +000093f0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c )).
..
.Theorem imp_iff_compat │ │ │ +00009590: 5f72 3c2f 7370 616e 3e3c 2f61 3e20 3a20 _r : │ │ │ +000095a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ +000095d0: 6120 6964 3d22 413a 3432 2220 636c 6173 a id="A:42" clas │ │ │ +000095e0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +000095f0: 2341 3a34 3222 3e3c 7370 616e 2063 6c61 #A:42">A< │ │ │ +00009620: 2f61 3e20 3c61 2069 643d 2242 3a34 3322 /a> B
C : │ │ │ +000096d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop,
.  < │ │ │ +00009710: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00009720: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00009730: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00009740: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00009750: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">(B < │ │ │ +00009850: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> C) │ │ │ +00009930: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +000099a0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; ( │ │ │ +00009a20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (B -& │ │ │ +00009b60: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00009b70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00009b80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00009b90: 6f67 6963 2e68 746d 6c23 413a 3432 223e ogic.html#A:42"> │ │ │ +00009ba0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) < │ │ │ +00009c90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00009ca0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00009cb0: 3e26 6c74 3b2d 2667 743b 3c2f 7370 616e ><-> < │ │ │ +00009d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00009d20: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00009d30: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ +00009d90: 433c 2f73 7061 6e3e 3c2f 613e 203c 6120 C -> │ │ │ +00009e10: 3c2f 613e 203c 6120 636c 6173 733d 2269 A │ │ │ +00009e70: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ) │ │ │ +00009ee0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +00009f30: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ +00009f60: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ +00009f90: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem not_iff_c │ │ │ +0000a000: 6f6d 7061 743c 2f73 7061 6e3e 3c2f 613e ompat │ │ │ +0000a010: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall A < │ │ │ +0000a0c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000a0d0: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ +0000a0e0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ +0000a110: 726f 703c 2f73 7061 6e3e 2c3c 6272 2f3e rop,
│ │ │ +0000a120: 0a26 6e62 7370 3b26 6e62 7370 3b3c 6120 .  ( │ │ │ +0000a1a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0000a200: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ +0000a270: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0000a280: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B< │ │ │ +0000a2e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000a2f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000a300: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000a310: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0000a320: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">) ->< │ │ │ +0000a3c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0000a410: 3c73 7061 6e20 636c 6173 733d 2269 6422 (~ A <-> ~B │ │ │ +0000a670: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ).
..< │ │ │ +0000a6f0: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...S │ │ │ +0000a710: 6f6d 6520 6571 7569 7661 6c65 6e63 6573 ome equivalences │ │ │ +0000a720: 200a 3c2f 6469 763e 0a3c 6469 7620 636c .
.
..
.Theorem neg_false
: fora │ │ │ +0000a800: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll A : │ │ │ +0000a860: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop, < │ │ │ +0000a890: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000a8a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000a8b0: 6f67 6963 2e68 746d 6c23 3633 6136 3832 ogic.html#63a682 │ │ │ +0000a8c0: 3835 6338 3164 6238 6639 6263 3435 3632 85c81db8f9bc4562 │ │ │ +0000a8d0: 3333 6262 3965 6431 3831 223e 3c73 7061 33bb9ed181">~< │ │ │ +0000a900: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A< │ │ │ +0000a960: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ +0000a9e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> (A < │ │ │ +0000ab30: 3b2d 2667 743b 3c2f 7370 616e 3e3c 2f61 ;-> False │ │ │ +0000abf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ +0000ac20: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ +0000ac50: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem and_cancel_l< │ │ │ +0000acc0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ +0000acf0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall A │ │ │ +0000ad50: 203c 6120 6964 3d22 423a 3439 2220 636c B C< │ │ │ +0000adf0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ +0000ae20: 6f70 3c2f 7370 616e 3e2c 3c62 722f 3e0a op,
. │ │ │ +0000ae30: 266e 6273 703b 266e 6273 703b 3c61 2063   (< │ │ │ +0000aeb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000aec0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000aed0: 6f67 6963 2e68 746d 6c23 423a 3439 223e ogic.html#B:49"> │ │ │ +0000aee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ +0000af10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000af20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000af30: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000af40: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0000af50: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->
A
) < │ │ │ +0000b0a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000b0b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000b0c0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> (C │ │ │ +0000b1a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +0000b210: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ +0000b270: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A) │ │ │ +0000b2f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> ( │ │ │ +0000b3d0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c (A < │ │ │ +0000b500: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000b510: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000b520: 3e2f 5c3c 2f73 7061 6e3e 3c2f 613e 203c >/\ < │ │ │ +0000b530: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000b540: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000b550: 6f67 6963 2e68 746d 6c23 423a 3439 223e ogic.html#B:49"> │ │ │ +0000b560: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ +0000b590: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000b5a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000b5b0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000b5c0: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0000b5d0: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ +0000b600: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0000b610: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000b620: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000b630: 6f67 6963 2e68 746d 6c23 413a 3438 223e ogic.html#A:48"> │ │ │ +0000b640: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +0000b670: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000b680: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000b690: 6f67 6963 2e68 746d 6c23 6261 3262 3065 ogic.html#ba2b0e │ │ │ +0000b6a0: 3439 3264 3262 3436 3735 6130 6163 6633 492d2b4675a0acf3 │ │ │ +0000b6b0: 6561 3932 6161 6261 6464 223e 3c73 7061 ea92aabadd">/\ │ │ │ +0000b6e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 C │ │ │ +0000b740: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c ) &l │ │ │ +0000b830: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> (< │ │ │ +0000b8b0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>B <-> C) │ │ │ +0000ba70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 )< │ │ │ +0000bae0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +0000baf0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Theorem │ │ │ +0000bb20: 203c 6120 6964 3d22 616e 645f 6361 6e63
and_canc │ │ │ +0000bb80: 656c 5f72 3c2f 7370 616e 3e3c 2f61 3e20 el_r │ │ │ +0000bb90: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ +0000bbc0: 203c 6120 6964 3d22 413a 3531 2220 636c A B< │ │ │ +0000bc60: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> C │ │ │ +0000bcc0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop,< │ │ │ +0000bcf0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0000bd00: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;( │ │ │ +0000bd70: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 B< │ │ │ +0000bdd0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0000be40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 A │ │ │ +0000bea0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +0000bef0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ +0000bf20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000bf30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000bf40: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000bf50: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0000bf60: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->
(< │ │ │ +0000c000: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>C < │ │ │ +0000c0b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000c0c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000c0d0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> A) │ │ │ +0000c1b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +0000c220: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; ( │ │ │ +0000c2a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (B /\< │ │ │ +0000c3f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A< │ │ │ +0000c450: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ +0000c4c0: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ +0000c4d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> C< │ │ │ +0000c530: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ +0000c5b0: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +0000c610: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ) <-> (< │ │ │ +0000c780: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000c790: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000c7a0: 6f67 6963 2e68 746d 6c23 423a 3532 223e ogic.html#B:52"> │ │ │ +0000c7b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 B < │ │ │ +0000c7e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000c7f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000c800: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000c810: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0000c820: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ +0000c850: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0000c860: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000c870: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000c880: 6f67 6963 2e68 746d 6c23 433a 3533 223e ogic.html#C:53"> │ │ │ +0000c890: 3c73 7061 6e20 636c 6173 733d 2269 6422 C)).
.. │ │ │ +0000c9b0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Theorem and_comm
: fora │ │ │ +0000ca70: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll A < │ │ │ +0000cad0: 6120 6964 3d22 423a 3535 2220 636c 6173 a id="B:55" clas │ │ │ +0000cae0: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +0000caf0: 2342 3a35 3522 3e3c 7370 616e 2063 6c61 #B:55">B< │ │ │ +0000cb20: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : Prop, A< │ │ │ +0000cbb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ +0000cc30: 203c 6120 636c 6173 733d 2269 6472 6566 B │ │ │ +0000cc90: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +0000cd00: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0000cd10: 203c 6120 636c 6173 733d 2269 6472 6566 B │ │ │ +0000cd70: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0000cde0: 2f5c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 /\ < │ │ │ +0000ce20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000ce30: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000ce40: 3e41 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >A...
.Theo │ │ │ +0000ce80: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem and_ │ │ │ +0000cee0: 6173 736f 633c 2f73 7061 6e3e 3c2f 613e assoc │ │ │ +0000cef0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall A < │ │ │ +0000cfa0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000cfb0: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ +0000cfc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 C │ │ │ +0000d020: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop, │ │ │ +0000d050: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0000d0c0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (A │ │ │ +0000d120: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 /\ B
)< │ │ │ +0000d280: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ +0000d300: 203c 6120 636c 6173 733d 2269 6472 6566 C │ │ │ +0000d360: 203c 6120 636c 6173 733d 2269 6472 6566 < │ │ │ +0000d3d0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0000d3e0: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +0000d440: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0000d4b0: 2f5c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 /\ < │ │ │ +0000d4f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000d500: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000d510: 3e42 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >B /\< │ │ │ +0000d590: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C< │ │ │ +0000d5f0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +0000d600: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Theorem │ │ │ +0000d630: 3c2f 7370 616e 3e20 3c61 2069 643d 226f or_ │ │ │ +0000d690: 6361 6e63 656c 5f6c 3c2f 7370 616e 3e3c cancel_l< │ │ │ +0000d6a0: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : forall A B < │ │ │ +0000d780: 6120 6964 3d22 433a 3631 2220 636c 6173 a id="C:61" clas │ │ │ +0000d790: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +0000d7a0: 2343 3a36 3122 3e3c 7370 616e 2063 6c61 #C:61">C< │ │ │ +0000d7d0: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : Prop,
. & │ │ │ +0000d810: 6e62 7370 3b3c 6120 636c 6173 733d 2269 nbsp;(
B - │ │ │ +0000d950: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0000d960: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ~ │ │ │ +0000d9d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 A │ │ │ +0000da30: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +0000da80: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ +0000dab0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000dac0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000dad0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000dae0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0000daf0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> (< │ │ │ +0000db90: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>C < │ │ │ +0000dc40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000dc50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000dc60: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> < │ │ │ +0000dcc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000dcd0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000dce0: 3e7e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >~ < │ │ │ +0000dd20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000dd30: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000dd40: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A) │ │ │ +0000ddc0: 203c 6120 636c 6173 733d 2269 6472 6566 ->
│ │ │ +0000dea0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 ((< │ │ │ +0000df20: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>A │ │ │ +0000dfd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 \/ │ │ │ +0000e000: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ +0000e060: 3c61 2063 6c61 7373 3d22 6964 7265 6622 <- │ │ │ +0000e0d0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0000e0e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0000e140: 3c61 2063 6c61 7373 3d22 6964 7265 6622 \ │ │ │ +0000e1b0: 2f3c 2f73 7061 6e3e 3c2f 613e 203c 6120 / │ │ │ +0000e210: 433c 2f73 7061 6e3e 3c2f 613e 3c61 2063 C)< │ │ │ +0000e290: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ +0000e300: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ +0000e310: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ( │ │ │ +0000e380: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B< │ │ │ +0000e3e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ +0000e460: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> C< │ │ │ +0000e4c0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>)) │ │ │ +0000e5b0: 3c2f 613e 2e3c 6272 2f3e 0a3c 7370 616e .
.Theo │ │ │ +0000e5e0: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem │ │ │ +0000e640: 6f72 5f63 616e 6365 6c5f 723c 2f73 7061 or_cancel_r : forall │ │ │ +0000e680: 3c2f 7370 616e 3e20 3c61 2069 643d 2241 │ │ │ +0000e6b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0000e6d0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A B C : Prop,
.&nbs │ │ │ +0000e7c0: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; ( │ │ │ +0000e830: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c
B< │ │ │ +0000e890: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0000e8e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> │ │ │ +0000e960: 3c73 7061 6e20 636c 6173 733d 2269 6422 ~ < │ │ │ +0000e990: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000e9a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000e9b0: 6f67 6963 2e68 746d 6c23 413a 3632 223e ogic.html#A:62"> │ │ │ +0000e9c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) -> < │ │ │ +0000eb20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000eb30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0000eb40: 3e28 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >( │ │ │ +0000eba0: 433c 2f73 7061 6e3e 3c2f 613e 203c 6120 C -> │ │ │ +0000ec20: 3c2f 613e 203c 6120 636c 6173 733d 2269 ~ │ │ │ +0000eca0: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +0000ed00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 )< │ │ │ +0000ed70: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0000ede0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (< │ │ │ +0000ee60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000ee70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000ee80: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000ee90: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0000eea0: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">(B \/ A &l │ │ │ +0000f080: 743b 2d26 6774 3b3c 2f73 7061 6e3e 3c2f t;-> C │ │ │ +0000f140: 3c73 7061 6e20 636c 6173 733d 2269 6422 \/ │ │ │ +0000f170: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A< │ │ │ +0000f1d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000f1e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000f1f0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0000f200: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0000f210: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">) │ │ │ +0000f290: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> │ │ │ +0000f310: 3c73 7061 6e20 636c 6173 733d 2269 6422 (< │ │ │ +0000f370: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000f380: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000f390: 3e42 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >B <-&g │ │ │ +0000f410: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; < │ │ │ +0000f450: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0000f460: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0000f470: 3e43 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >C) │ │ │ +0000f4f0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ).
.T │ │ │ +0000f590: 6865 6f72 656d 3c2f 7370 616e 3e20 3c61 heorem or_co │ │ │ +0000f5f0: 6d6d 3c2f 7370 616e 3e3c 2f61 3e20 3a20 mm : │ │ │ +0000f600: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ +0000f630: 6120 6964 3d22 413a 3635 2220 636c 6173 a id="A:65" clas │ │ │ +0000f640: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +0000f650: 2341 3a36 3522 3e3c 7370 616e 2063 6c61 #A:65">A< │ │ │ +0000f680: 2f61 3e20 3c61 2069 643d 2242 3a36 3622 /a> B : Prop │ │ │ +0000f700: 3c2f 7370 616e 3e2c 203c 6120 636c 6173 , ( │ │ │ +0000f780: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0000f7e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 \ │ │ │ +0000f850: 2f3c 2f73 7061 6e3e 3c2f 613e 203c 6120 / │ │ │ +0000f8b0: 423c 2f73 7061 6e3e 3c2f 613e 3c61 2063 B)< │ │ │ +0000f930: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ +0000f9a0: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ +0000f9b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ( │ │ │ +0000fa20: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B< │ │ │ +0000fa80: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> \/ A │ │ │ +0000fbb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ +0000fbe0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ +0000fc10: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem or_as │ │ │ +0000fc70: 736f 633c 2f73 7061 6e3e 3c2f 613e 203a soc : │ │ │ +0000fc80: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +0000fcb0: 3c61 2069 643d 2241 3a36 3722 2063 6c61 A │ │ │ +0000fd00: 3c2f 613e 203c 6120 6964 3d22 423a 3638 B C : │ │ │ +0000fdb0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop, < │ │ │ +0000fde0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0000fdf0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0000fe00: 6f67 6963 2e68 746d 6c23 6630 3331 6665 ogic.html#f031fe │ │ │ +0000fe10: 3139 3537 6334 6134 6138 6532 3137 6161 1957c4a4a8e217aa │ │ │ +0000fe20: 3436 6166 3262 3465 3235 223e 3c73 7061 46af2b4e25">(< │ │ │ +0000fe50: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>A \/ B) < │ │ │ +00010060: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010070: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00010080: 3e5c 2f3c 2f73 7061 6e3e 3c2f 613e 203c >\/ < │ │ │ +00010090: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000100a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000100b0: 6f67 6963 2e68 746d 6c23 433a 3639 223e ogic.html#C:69"> │ │ │ +000100c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 C < │ │ │ +000100f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00010100: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00010110: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00010120: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +00010130: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x"><-& │ │ │ +00010160: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00010170: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00010180: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00010190: 6f67 6963 2e68 746d 6c23 413a 3637 223e ogic.html#A:67"> │ │ │ +000101a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +000101d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000101e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000101f0: 6f67 6963 2e68 746d 6c23 6630 3331 6665 ogic.html#f031fe │ │ │ +00010200: 3139 3537 6334 6134 6138 6532 3137 6161 1957c4a4a8e217aa │ │ │ +00010210: 3436 6166 3262 3465 3235 223e 3c73 7061 46af2b4e25">\/ │ │ │ +00010240: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 B │ │ │ +000102a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 \/
C
.
.< │ │ │ +00010390: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000103a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000103b0: 4c65 6d6d 613c 2f73 7061 6e3e 203c 6120 Lemma iff_an │ │ │ +00010410: 643c 2f73 7061 6e3e 3c2f 613e 203a 203c d : < │ │ │ +00010420: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010430: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00010440: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall A B : Prop< │ │ │ +00010520: 2f73 7061 6e3e 2c20 3c61 2063 6c61 7373 /span>, ( │ │ │ +00010590: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c A< │ │ │ +000105f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> <->< │ │ │ +00010670: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> B< │ │ │ +000106d0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ +00010720: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00010730: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00010740: 3e29 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >) -> (A │ │ │ +000108a0: 203c 6120 636c 6173 733d 2269 6472 6566 ->
B
)< │ │ │ +000109f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> /\ │ │ │ +00010a70: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00010ae0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (B │ │ │ +00010b40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00010bc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A< │ │ │ +00010c20: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +00010c70: 3c73 7061 6e20 636c 6173 733d 2269 6422 ).< │ │ │ +00010ca0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ +00010cd0: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma iff │ │ │ +00010d30: 5f74 6f5f 616e 643c 2f73 7061 6e3e 3c2f _to_and : forall A B : │ │ │ +00010e20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop, (A │ │ │ +00010f20: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ +00010f90: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ +00010fa0: 3c2f 613e 203c 6120 636c 6173 733d 2269 B │ │ │ +00011000: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ) │ │ │ +00011070: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 <-> │ │ │ +000110f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 (A -& │ │ │ +00011240: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00011250: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00011260: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00011270: 6f67 6963 2e68 746d 6c23 423a 3733 223e ogic.html#B:73"> │ │ │ +00011280: 3c73 7061 6e20 636c 6173 733d 2269 6422 B) /\ (B -> A) │ │ │ +000115d0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.< │ │ │ +00011610: 6831 2063 6c61 7373 3d22 7365 6374 696f h1 class="sectio │ │ │ +00011620: 6e22 3e46 6972 7374 2d6f 7264 6572 2071 n">First-order q │ │ │ +00011630: 7561 6e74 6966 6965 7273 3c2f 6831 3e0a uantifiers. │ │ │ +00011640: 0a3c 6469 7620 636c 6173 733d 2270 6172 .
. │ │ │ +00011660: 0a20 3c73 7061 6e20 636c 6173 733d 2269 . ex P │ │ │ +000116e0: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2c20 , │ │ │ +000116f0: 6f72 2073 696d 706c 7920 3c73 7061 6e20 or simply exists │ │ │ +00011740: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c x< │ │ │ +00011780: 2f73 7061 6e3e 2c3c 2f73 7061 6e3e 203c /span>, < │ │ │ +00011790: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000117a0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">P
x, or a │ │ │ +00011820: 6c73 6f20 3c73 7061 6e20 636c 6173 733d lso exi │ │ │ +00011860: 7374 733c 2f73 7061 6e3e 3c2f 7370 616e sts x │ │ │ +000118b0: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :A< │ │ │ +000118d0: 2f73 7061 6e3e 2c3c 2f73 7061 6e3e 203c /span>, < │ │ │ +000118e0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000118f0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">P x,. │ │ │ +00011970: 6578 7072 6573 7365 7320 7468 6520 6578 expresses the ex │ │ │ +00011980: 6973 7465 6e63 6520 6f66 2061 6e20 3c73 istence of an x of some type │ │ │ +000119e0: 203c 7370 616e 2063 6c61 7373 3d22 696e A< │ │ │ +00011a20: 2f73 7061 6e3e 2069 6e20 3c73 7061 6e20 /span> in Set which. │ │ │ +00011a80: 7361 7469 7366 6965 7320 7468 6520 7072 satisfies the pr │ │ │ +00011a90: 6564 6963 6174 6520 3c73 7061 6e20 636c edicate P< │ │ │ +00011ad0: 2f73 7061 6e3e 3c2f 7370 616e 3e2e 2020 /span>. │ │ │ +00011ae0: 5468 6973 2069 7320 6578 6973 7465 6e74 This is existent │ │ │ +00011af0: 6961 6c20 7175 616e 7469 6669 6361 7469 ial quantificati │ │ │ +00011b00: 6f6e 2e0a 0a3c 6469 7620 636c 6173 733d on...
.. e │ │ │ +00011b60: 7832 3c2f 7370 616e 3e3c 2f73 7061 6e3e x2 │ │ │ +00011b70: 203c 7370 616e 2063 6c61 7373 3d22 696e P< │ │ │ +00011bb0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +00011bd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q, or │ │ │ +00011c00: 2073 696d 706c 7920 3c73 7061 6e20 636c simply ex │ │ │ +00011c40: 6973 7473 323c 2f73 7061 6e3e 3c2f 7370 ists2 x, P │ │ │ +00011ce0: 203c 7370 616e 2063 6c61 7373 3d22 696e x< │ │ │ +00011d20: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +00011d40: 2661 6d70 3b3c 2f73 7061 6e3e 203c 7370 & Q x, or als │ │ │ +00011de0: 6f0a 2020 2020 3c73 7061 6e20 636c 6173 o. < │ │ │ +00011e00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00011e10: 7469 746c 653d 2276 6172 223e 6578 6973 title="var">exis │ │ │ +00011e20: 7473 323c 2f73 7061 6e3e 3c2f 7370 616e ts2 x │ │ │ +00011e70: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :A< │ │ │ +00011e90: 2f73 7061 6e3e 2c3c 2f73 7061 6e3e 203c /span>, < │ │ │ +00011ea0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00011eb0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">P x & │ │ │ +00011f50: 203c 7370 616e 2063 6c61 7373 3d22 696e Q< │ │ │ +00011f90: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +00011fb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x, ex │ │ │ +00011fe0: 7072 6573 7365 7320 7468 6520 6578 6973 presses the exis │ │ │ +00011ff0: 7465 6e63 6520 6f66 2061 6e20 3c73 7061 tence of an x of. type A which satisf │ │ │ +000120a0: 6965 7320 626f 7468 2070 7265 6469 6361 ies both predica │ │ │ +000120b0: 7465 7320 3c73 7061 6e20 636c 6173 733d tes P and Q...
.. Univer │ │ │ +00012170: 7361 6c20 7175 616e 7469 6669 6361 7469 sal quantificati │ │ │ +00012180: 6f6e 2069 7320 7072 696d 6974 6976 656c on is primitivel │ │ │ +00012190: 7920 7772 6974 7465 6e20 3c73 7061 6e20 y written forall x │ │ │ +00012220: 3c2f 7370 616e 3e3a 3c73 7061 6e20 636c :A, < │ │ │ +00012270: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00012280: 7469 746c 653d 2276 6172 223e 513c 2f73 title="var">Q. By. │ │ │ +000122a0: 2020 2020 7379 6d6d 6574 7279 2077 6974 symmetry wit │ │ │ +000122b0: 6820 6578 6973 7465 6e74 6961 6c20 7175 h existential qu │ │ │ +000122c0: 616e 7469 6669 6361 7469 6f6e 2c20 7468 antification, th │ │ │ +000122d0: 6520 636f 6e73 7472 7563 7469 6f6e 203c e construction < │ │ │ +000122e0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000122f0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">all< │ │ │ +00012320: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> │ │ │ +00012340: 3c73 7061 6e20 636c 6173 733d 2269 6422 P. │ │ │ +00012370: 2069 7320 7072 6f76 6964 6564 2074 6f6f is provided too │ │ │ +00012380: 2e0a 0a3c 2f64 6976 3e0a 3c64 6976 2063 ...
.
...Inductive ex │ │ │ +00012480: 283c 6120 6964 3d22 413a 3734 2220 636c (A:Type) (P:A < │ │ │ +00012600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00012610: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00012620: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop) │ │ │ +00012660: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Prop : │ │ │ +00012690: 3d3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 =
. &nb │ │ │ +000126a0: 7370 3b3c 6120 6964 3d22 6578 5f69 6e74 sp;ex_intro │ │ │ +00012700: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +00012730: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall x:A, P x ->< │ │ │ +00012920: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00012980: 6578 3c2f 7370 616e 3e3c 2f61 3e20 283c ex (< │ │ │ +00012990: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000129a0: 7469 746c 653d 2276 6172 223e 413c 2f73 title="var">A:=A) P.
...Register
ex as< │ │ │ +00012b00: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> core.ex.type │ │ │ +00012b30: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 3c73 .
.R │ │ │ +00012b60: 6567 6973 7465 723c 2f73 7061 6e3e 203c egister < │ │ │ +00012b70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00012b80: 7469 746c 653d 2276 6172 223e 6578 5f69 title="var">ex_i │ │ │ +00012b90: 6e74 726f 3c2f 7370 616e 3e20 3c73 7061 ntro as< │ │ │ +00012bc0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> core.ex.intr │ │ │ +00012bf0: 6f3c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a o.
.. │ │ │ +00012c00: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Section Pro │ │ │ +00012c90: 6a65 6374 696f 6e73 3c2f 7370 616e 3e3c jections< │ │ │ +00012ca0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00012cb0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  Va │ │ │ +00012ce0: 7269 6162 6c65 733c 2f73 7061 6e3e 2028 riables ( │ │ │ +00012cf0: 3c61 2069 643d 2250 726f 6a65 6374 696f
A
:Prop) (P │ │ │ +00012df0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A │ │ │ +00012e50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->Prop).
..
.  D │ │ │ +00012f30: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition
│ │ │ +00012f40: 203c 6120 6964 3d22 6578 5f70 726f 6a31 ex_proj1 (x:< │ │ │ +00013000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00013020: 6f67 6963 2e68 746d 6c23 6578 223e 3c73 ogic.html#ex">ex
< │ │ │ +00013060: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013070: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00013080: 6f67 6963 2e68 746d 6c23 5072 6f6a 6563 ogic.html#Projec │ │ │ +00013090: 7469 6f6e 732e 5022 3e3c 7370 616e 2063 tions.P">P) : A< │ │ │ +00013130: 2f61 3e20 3a3d 3c62 722f 3e0a 266e 6273 /a> :=
.&nbs │ │ │ +00013140: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00013150: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;match
x with < │ │ │ +00013210: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013220: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00013230: 6f67 6963 2e68 746d 6c23 6578 5f69 6e74 ogic.html#ex_int │ │ │ +00013240: 726f 223e 3c73 7061 6e20 636c 6173 733d ro">ex_intr │ │ │ +00013270: 6f3c 2f73 7061 6e3e 3c2f 613e 203c 7370 o _
│ │ │ +000132c0: 613c 2f73 7061 6e3e 203c 7370 616e 2063 a _ = │ │ │ +000132f0: 2667 743b 203c 7370 616e 2063 6c61 7373 > a end< │ │ │ +00013340: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...   │ │ │ +00013360: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition ex_proj2< │ │ │ +000133f0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (x │ │ │ +00013450: 3a3c 6120 636c 6173 733d 2269 6472 6566 : │ │ │ +00013480: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex │ │ │ +000134b0: 203c 6120 636c 6173 733d 2269 6472 6566 P) : P ( │ │ │ +000135e0: 6578 5f70 726f 6a31 3c2f 7370 616e 3e3c ex_proj1< │ │ │ +000135f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x< │ │ │ +00013650: 2f61 3e29 203a 3d3c 6272 2f3e 0a26 6e62 /a>) :=
.&nb │ │ │ +00013660: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00013670: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;match
x with │ │ │ +00013730: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_int │ │ │ +00013790: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c73 ro _ _ b │ │ │ +00013810: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => b end │ │ │ +00013860: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 0a3c
.
..< │ │ │ +00013870: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00013880: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Register e │ │ │ +000138d0: 785f 7072 6f6a 313c 2f73 7061 6e3e 203c x_proj1 < │ │ │ +000138e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000138f0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00013900: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as core.ex.p │ │ │ +00013930: 726f 6a31 3c2f 7370 616e 3e2e 3c62 722f roj1.
.  R │ │ │ +00013970: 6567 6973 7465 723c 2f73 7061 6e3e 203c egister < │ │ │ +00013980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00013990: 7469 746c 653d 2276 6172 223e 6578 5f70 title="var">ex_p │ │ │ +000139a0: 726f 6a32 3c2f 7370 616e 3e20 3c73 7061 roj2 as< │ │ │ +000139d0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> core.ex.proj │ │ │ +00013a00: 323c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 2.
.. │ │ │ +00013a10: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.End Proje │ │ │ +00013aa0: 6374 696f 6e73 3c2f 7370 616e 3e3c 2f61 ctions.
..
.< │ │ │ +00013ac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00013ad0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00013ae0: 496e 6475 6374 6976 653c 2f73 7061 6e3e Inductive │ │ │ +00013af0: 203c 6120 6964 3d22 6578 3222 2063 6c61 ex2
│ │ │ +00013ba0: 283c 6120 6964 3d22 413a 3837 2220 636c (A:Type) (P Q:< │ │ │ +00013cd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013ce0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00013cf0: 6f67 6963 2e68 746d 6c23 413a 3837 223e ogic.html#A:87"> │ │ │ +00013d00: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +00013d30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00013d40: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00013d50: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00013d60: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00013d70: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Prop) : Prop :=
.&nbs │ │ │ +00013e10: 703b 266e 6273 703b 3c61 2069 643d 2265 p; e │ │ │ +00013e70: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ +00013e80: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : forall
x:A, P< │ │ │ +00013fc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x< │ │ │ +00014020: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00014070: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Q x ->< │ │ │ +000141d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> ex2 │ │ │ +00014240: 283c 7370 616e 2063 6c61 7373 3d22 6964 (A< │ │ │ +00014260: 2f73 7061 6e3e 3a3d 3c61 2063 6c61 7373 /span>:=A) P Q
.
.. │ │ │ +00014390: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +000143b0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex2 │ │ │ +000143f0: 3c2f 7370 616e 3e20 6f66 2061 2070 7265 of a pre │ │ │ +00014400: 6469 6361 7465 2063 616e 2062 6520 7072 dicate can be pr │ │ │ +00014410: 6f6a 6563 7465 6420 746f 2061 6e20 3c73 ojected to an ex...
< │ │ │ +00014480: 2f64 6976 3e0a 0a20 2020 2054 6869 7320 /div>.. This │ │ │ +00014490: 616c 6c6f 7773 203c 7370 616e 2063 6c61 allows │ │ │ +000144b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_ │ │ │ +000144d0: 7072 6f6a 313c 2f73 7061 6e3e 3c2f 7370 proj1 and ex │ │ │ +00014520: 5f70 726f 6a32 3c2f 7370 616e 3e3c 2f73 _proj2 to be usabl │ │ │ +00014540: 6520 7769 7468 203c 7370 616e 2063 6c61 e with │ │ │ +00014560: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex2 │ │ │ +00014580: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2e0a .. │ │ │ +00014590: 0a3c 6469 7620 636c 6173 733d 2270 6172 .
. │ │ │ +000145b0: 0a20 2020 2057 6520 6861 7665 2074 776f . We have two │ │ │ +000145c0: 2063 686f 6963 6573 2068 6572 653a 2065 choices here: e │ │ │ +000145d0: 6974 6865 7220 7765 2063 616e 2073 6574 ither we can set │ │ │ +000145e0: 2075 7020 7468 6520 6465 6669 6e69 7469 up the definiti │ │ │ +000145f0: 6f6e 2073 6f0a 2020 2020 7468 6174 203c on so. that < │ │ │ +00014600: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00014610: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">ex_proj1
of a │ │ │ +00014650: 2063 6f65 7263 6564 203c 7370 616e 2063 coerced X │ │ │ +00014690: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ +000146a0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000146b0: 6e65 636f 6465 223e 3a3c 2f73 7061 6e3e necode">: │ │ │ +000146c0: 203c 7370 616e 2063 6c61 7373 3d22 696e ex2 P │ │ │ +00014740: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 203c < │ │ │ +00014750: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00014760: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">Q
will unify │ │ │ +000147a0: 7769 7468 203c 7370 616e 2063 6c61 7373 with l │ │ │ +000147e0: 6574 3c2f 7370 616e 3e3c 2f73 7061 6e3e et │ │ │ +000147f0: 0a20 2020 203c 7370 616e 2063 6c61 7373 . (< │ │ │ +00014810: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00014820: 7469 746c 653d 2276 6172 223e 613c 2f73 title="var">a, _, _) := X in< │ │ │ +00014970: 2f73 7061 6e3e 3c2f 7370 616e 3e20 3c73 /span> a by restricti │ │ │ +000149d0: 6e67 2074 6865 2066 6972 7374 2061 7267 ng the first arg │ │ │ +000149e0: 756d 656e 7420 6f66 203c 7370 616e 2063 ument of e │ │ │ +00014a20: 7832 3c2f 7370 616e 3e3c 2f73 7061 6e3e x2 │ │ │ +00014a30: 2074 6f0a 2020 2020 6265 2061 203c 7370 to. be a Prop, or we │ │ │ +00014a90: 2063 616e 2064 6566 696e 6520 6120 6d6f can define a mo │ │ │ +00014aa0: 7265 2067 656e 6572 616c 203c 7370 616e re general ex_of_ex2 which. │ │ │ +00014b00: 2020 2064 6f65 7320 6e6f 7420 7361 7469 does not sati │ │ │ +00014b10: 7366 7920 7468 6973 2063 6f6e 7665 7273 sfy this convers │ │ │ +00014b20: 696f 6e20 7275 6c65 2e20 2057 6520 6368 ion rule. We ch │ │ │ +00014b30: 6f6f 7365 2074 6865 2066 6f72 6d65 722c oose the former, │ │ │ +00014b40: 0a20 2020 2075 6e64 6572 2074 6865 2061 . under the a │ │ │ +00014b50: 7373 756d 7074 696f 6e20 7468 6174 2074 ssumption that t │ │ │ +00014b60: 6865 7265 2069 7320 6e6f 2072 6561 736f here is no reaso │ │ │ +00014b70: 6e20 746f 2074 7572 6e20 616e 203c 7370 n to turn an ex2 into. an │ │ │ +00014bd0: 203c 7370 616e 2063 6c61 7373 3d22 696e ex │ │ │ +00014c10: 3c2f 7370 616e 3e20 756e 6c65 7373 2069 unless i │ │ │ +00014c20: 7420 6973 2074 6f20 7072 6f6a 6563 7420 t is to project │ │ │ +00014c30: 6f75 7420 7468 6520 636f 6d70 6f6e 656e out the componen │ │ │ +00014c40: 7473 2e20 0a3c 2f64 6976 3e0a 3c64 6976 ts. .
.
.. │ │ │ +00014c60: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Definitio │ │ │ +00014c90: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n e │ │ │ +00014cf0: 785f 6f66 5f65 7832 3c2f 7370 616e 3e3c x_of_ex2< │ │ │ +00014d00: 2f61 3e20 283c 6120 6964 3d22 413a 3933 /a> (A : Pro │ │ │ +00014d80: 703c 2f73 7061 6e3e 2920 283c 6120 6964 p) (P │ │ │ +00014de0: 3c61 2069 643d 2251 3a39 3522 2063 6c61 Q │ │ │ +00014e30: 3c2f 613e 203a 203c 6120 636c 6173 733d : A -& │ │ │ +00014f00: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00014f10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00014f20: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00014f30: 5072 6f70 3c2f 7370 616e 3e29 2028 3c61 Prop) (X : ex2 P Q) : ex P
.& │ │ │ +00015180: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := ex_intro │ │ │ +000151f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 P │ │ │ +00015250: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +00015260: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00015270: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00015280: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00015290: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000152a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000152b0: 6e62 7370 3b28 3c73 7061 6e20 636c 6173 nbsp;(let (a, _ │ │ │ +00015360: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , _ │ │ │ +00015380: 3c2f 7370 616e 3e29 203a 3d20 3c61 2063 ) := X │ │ │ +000153e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 in a)
.&nb │ │ │ +00015480: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00015490: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000154a0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000154b0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000154c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000154d0: 3b28 3c73 7061 6e20 636c 6173 733d 2269 ;(let (< │ │ │ +00015500: 6120 6964 3d22 783a 3939 2220 636c 6173 a id="x:99" clas │ │ │ +00015510: 733d 2269 6472 6566 2220 6872 6566 3d22 s="idref" href=" │ │ │ +00015520: 2378 3a39 3922 3e3c 7370 616e 2063 6c61 #x:99">x< │ │ │ +00015550: 2f61 3e2c 203c 6120 6964 3d22 703a 3130 /a>, < │ │ │ +00015580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015590: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ +000155a0: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 7370 , _) as < │ │ │ +00015600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015610: 7469 746c 653d 2276 6172 223e 733c 2f73 title="var">s
return (P │ │ │ +000156b0: 3c2f 613e 2028 3c73 7061 6e20 636c 6173 (let (a, _, │ │ │ +00015760: 3c73 7061 6e20 636c 6173 733d 2269 6422 _) := s in a< │ │ │ +00015870: 2f61 3e29 2920 3a3d 203c 6120 636c 6173 /a>)) := X
in p< │ │ │ +00015960: 2f61 3e29 2e3c 6272 2f3e 0a0a 3c62 722f /a>).
..
.Section
│ │ │ +000159e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex2_Projections │ │ │ +00015a10: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
. & │ │ │ +00015a30: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Variables< │ │ │ +00015a60: 2f73 7061 6e3e 2028 3c61 2069 643d 2265 /span> (A
:Prop) (P
Q:A< │ │ │ +00015c40: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ +00015c90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00015ca0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00015cb0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >->Prop).< │ │ │ +00015cf0: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ +00015d00: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ +00015d30: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion e │ │ │ +00015d90: 785f 7072 6f6a 333c 2f73 7061 6e3e 3c2f x_proj3 (x< │ │ │ +00015df0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:ex │ │ │ +00015e50: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 P Q) : Q (ex_proj1 │ │ │ +00016010: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 ( │ │ │ +00016070: 6578 5f6f 665f 6578 323c 2f73 7061 6e3e ex_of_ex2 │ │ │ +00016080: 3c2f 613e 203c 6120 636c 6173 733d 2269 x)) :=
. │ │ │ +000160f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00016100: 703b 266e 6273 703b 3c73 7061 6e20 636c p; match x with e │ │ │ +00016220: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ +00016230: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _ │ │ │ +00016280: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ b => b e │ │ │ +00016340: 6e64 3c2f 7370 616e 3e2e 3c62 722f 3e0a nd.
. │ │ │ +00016350: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.End
< │ │ │ +000163c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000163d0: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ +000163e0: 6578 325f 5072 6f6a 6563 7469 6f6e 733c ex2_Projections< │ │ │ +000163f0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00016400: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Definit │ │ │ +00016430: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion all< │ │ │ +00016490: 2f61 3e20 283c 6120 6964 3d22 413a 3131 /a> (< │ │ │ +000164c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000164d0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +000164e0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061
:Typ │ │ │ +00016510: 653c 2f73 7061 6e3e 2920 283c 6120 6964 e) (P:A ->< │ │ │ +00016640: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ +00016670: 3c2f 7370 616e 3e29 203a 3d20 3c73 7061 ) := for │ │ │ +000166a0: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all x:A, P │ │ │ +000167c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x.
.Reg │ │ │ +00016850: 6973 7465 723c 2f73 7061 6e3e 203c 7370 ister all
as │ │ │ +000168b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 cor │ │ │ +000168d0: 652e 616c 6c3c 2f73 7061 6e3e 2e3c 6272 e.all.
..
..
│ │ │ +000168f0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Notation "'exists' x │ │ │ +000169c0: 2e2e 2079 202c 2070 2220 3a3d 2028 3c61 .. y , p" := ( │ │ │ +00016a20: 6578 3c2f 7370 616e 3e3c 2f61 3e20 283c ex (< │ │ │ +00016a30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016a40: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00016a50: 6675 6e3c 2f73 7061 6e3e 203c 6120 6964 fun x => .. (ex │ │ │ +00016b10: 3c2f 7370 616e 3e3c 2f61 3e20 283c 7370 (fu │ │ │ +00016b40: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n y │ │ │ +00016ba0: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => p)) .. │ │ │ +00016bd0: 2929 3c62 722f 3e0a 266e 6273 703b 266e ))
. &n │ │ │ +00016be0: 6273 703b 283c 7370 616e 2063 6c61 7373 bsp;(at < │ │ │ +00016c10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016c20: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00016c30: 6c65 7665 6c3c 2f73 7061 6e3e 2032 3030 level 200 │ │ │ +00016c40: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , x │ │ │ +00016c60: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c binder, right │ │ │ +00016cc0: 203c 7370 616e 2063 6c61 7373 3d22 6964 associativity< │ │ │ +00016cf0: 2f73 7061 6e3e 2c3c 6272 2f3e 0a26 6e62 /span>,
.&nb │ │ │ +00016d00: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00016d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00016d20: 7469 746c 653d 2276 6172 223e 666f 726d title="var">form │ │ │ +00016d30: 6174 3c2f 7370 616e 3e20 2227 5b27 2027 at
"'[' ' │ │ │ +00016d40: 6578 6973 7473 2720 2027 2f20 2027 2078 exists' '/ ' x │ │ │ +00016d50: 2020 2e2e 2020 7920 2c20 2027 2f20 2027 .. y , '/ ' │ │ │ +00016d60: 2070 2027 5d27 2229 3c62 722f 3e0a 266e p ']'")
.&n │ │ │ +00016d70: 6273 703b 266e 6273 703b 3a20 3c73 7061 bsp; : type_sc │ │ │ +00016da0: 6f70 653c 2f73 7061 6e3e 2e3c 6272 2f3e ope
.
│ │ │ +00016db0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Notatio │ │ │ +00016de0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n " │ │ │ +00016e70: 3b3c 2f73 7061 6e3e 3c2f 613e 2765 7869 ;'exi │ │ │ +00016e80: 7374 7332 2720 7820 2c20 7020 2661 6d70 sts2' x , p & │ │ │ +00016e90: 3b20 7122 203a 3d20 283c 6120 636c 6173 ; q" := (ex2< │ │ │ +00016ef0: 2f73 7061 6e3e 3c2f 613e 2028 3c73 7061 /span> (fun │ │ │ +00016f20: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 x = │ │ │ +00016f80: 2667 743b 203c 7370 616e 2063 6c61 7373 > p) (fu │ │ │ +00016fd0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n x │ │ │ +00017030: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => q))
.  ( │ │ │ +00017070: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00017090: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ +000170c0: 3c2f 7370 616e 3e20 3230 302c 203c 7370 200, x
│ │ │ +00017110: 6e61 6d65 3c2f 7370 616e 3e2c 203c 7370 name, p at le │ │ │ +00017190: 7665 6c3c 2f73 7061 6e3e 2032 3030 2c20 vel 200, │ │ │ +000171a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000171c0: 7269 6768 743c 2f73 7061 6e3e 203c 7370 right as │ │ │ +000171f0: 736f 6369 6174 6976 6974 793c 2f73 7061 sociativity) : type_scope
.
.Nota │ │ │ +00017260: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion &q │ │ │ +000172f0: 756f 743b 3c2f 7370 616e 3e3c 2f61 3e27 uot;' │ │ │ +00017300: 6578 6973 7473 3227 2078 203a 2041 202c exists2' x : A , │ │ │ +00017310: 2070 2026 616d 703b 2071 2220 3a3d 2028 p & q" := ( │ │ │ +00017320: 3c61 2063 6c61 7373 3d22 6964 7265 6622 │ │ │ +00017350: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex2 ( │ │ │ +000173a0: 413c 2f73 7061 6e3e 3a3d 3c73 7061 6e20 A:=A) │ │ │ +000173d0: 2028 3c73 7061 6e20 636c 6173 733d 2269 (fun x │ │ │ +00017450: 3c2f 613e 203d 2667 743b 203c 7370 616e => p │ │ │ +00017480: 2920 283c 7370 616e 2063 6c61 7373 3d22 ) (fun < │ │ │ +000174b0: 6120 6964 3d22 783a 3131 3722 2063 6c61 a id="x:117" cla │ │ │ +000174c0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000174d0: 2223 783a 3131 3722 3e3c 7370 616e 2063 "#x:117">x => q))
. & │ │ │ +00017540: 6e62 7370 3b28 3c73 7061 6e20 636c 6173 nbsp;(at │ │ │ +00017570: 3c73 7061 6e20 636c 6173 733d 2269 6422 level 20 │ │ │ +000175a0: 302c 203c 7370 616e 2063 6c61 7373 3d22 0, │ │ │ +000175c0: 783c 2f73 7061 6e3e 203c 7370 616e 2063 x name, │ │ │ +00017610: 413c 2f73 7061 6e3e 203c 7370 616e 2063 A at
level │ │ │ +00017670: 2032 3030 2c20 3c73 7061 6e20 636c 6173 200, p at level 200, right associati │ │ │ +00017750: 7669 7479 3c2f 7370 616e 3e2c 3c62 722f vity,
.  &n │ │ │ +00017770: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; format
"'[' 'exist │ │ │ +000177b0: 7332 2720 2027 2f20 2027 2078 2020 3a20 s2' '/ ' x : │ │ │ +000177c0: 2041 202c 2020 272f 2020 2720 275b 2720 A , '/ ' '[' │ │ │ +000177d0: 7020 2026 616d 703b 2020 272f 2720 7120 p & '/' q │ │ │ +000177e0: 275d 2720 275d 2722 293c 6272 2f3e 0a26 ']' ']'")
.& │ │ │ +000177f0: 6e62 7370 3b26 6e62 7370 3b3a 203c 7370 nbsp; : type_s │ │ │ +00017820: 636f 7065 3c2f 7370 616e 3e2e 3c62 722f cope.
..
.Notati │ │ │ +00017860: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on &quo │ │ │ +000178f0: 743b 3c2f 7370 616e 3e3c 2f61 3e27 6578 t;'ex │ │ │ +00017900: 6973 7473 3227 2027 2078 202c 2070 2026 ists2' ' x , p & │ │ │ +00017910: 616d 703b 2071 2220 3a3d 2028 3c61 2063 amp; q" := (e │ │ │ +00017970: 7832 3c2f 7370 616e 3e3c 2f61 3e20 283c x2 (< │ │ │ +00017980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00017990: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000179a0: 6675 6e3c 2f73 7061 6e3e 203c 6120 6964 fun x => p) ( │ │ │ +00017a30: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun x => q)) │ │ │ +00017ae0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00017af0: 703b 283c 7370 616e 2063 6c61 7373 3d22 p;(at le │ │ │ +00017b40: 7665 6c3c 2f73 7061 6e3e 2032 3030 2c20 vel 200, │ │ │ +00017b50: 3c73 7061 6e20 636c 6173 733d 2269 6422 x strict │ │ │ +00017ba0: 203c 7370 616e 2063 6c61 7373 3d22 6964 pattern, │ │ │ +00017bd0: 203c 7370 616e 2063 6c61 7373 3d22 6964 p< │ │ │ +00017bf0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> at │ │ │ +00017c20: 203c 7370 616e 2063 6c61 7373 3d22 6964 level 2 │ │ │ +00017c50: 3030 2c20 3c73 7061 6e20 636c 6173 733d 00, right │ │ │ +00017c80: 203c 7370 616e 2063 6c61 7373 3d22 6964 associativity< │ │ │ +00017cb0: 2f73 7061 6e3e 2920 3a20 3c73 7061 6e20 /span>) : type_scop │ │ │ +00017ce0: 653c 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c e.
.< │ │ │ +00017cf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00017d00: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00017d10: 4e6f 7461 7469 6f6e 3c2f 7370 616e 3e20 Notation
│ │ │ +00017d20: 3c61 2069 643d 2239 6232 3239 3232 3862
│ │ │ +00017d80: 3c73 7061 6e20 636c 6173 733d 2269 6422 "< │ │ │ +00017db0: 2f61 3e27 6578 6973 7473 3227 2027 2078 /a>'exists2' ' x │ │ │ +00017dc0: 203a 2041 202c 2070 2026 616d 703b 2071 : A , p & q │ │ │ +00017dd0: 2220 3a3d 2028 3c61 2063 6c61 7373 3d22 " := (ex2
(A:= │ │ │ +00017e60: 3c73 7061 6e20 636c 6173 733d 2269 6422 A) (fun x< │ │ │ +00017f00: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +00017f10: 203c 7370 616e 2063 6c61 7373 3d22 6964 p< │ │ │ +00017f30: 2f73 7061 6e3e 2920 283c 7370 616e 2063 /span>) (fun < │ │ │ +00017f90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00017fa0: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ +00017fb0: 3c2f 7370 616e 3e3c 2f61 3e20 3d26 6774 => │ │ │ +00017fc0: 3b20 3c73 7061 6e20 636c 6173 733d 2269 ; q │ │ │ +00017fe0: 3c2f 7370 616e 3e29 293c 6272 2f3e 0a26 ))
.& │ │ │ +00017ff0: 6e62 7370 3b26 6e62 7370 3b28 3c73 7061 nbsp; (at level 200, x < │ │ │ +00018080: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018090: 7469 746c 653d 2276 6172 223e 7374 7269 title="var">stri │ │ │ +000180a0: 6374 3c2f 7370 616e 3e20 3c73 7061 6e20 ct patter │ │ │ +000180d0: 6e3c 2f73 7061 6e3e 2c20 3c73 7061 6e20 n, A │ │ │ +00018100: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00018120: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ +00018150: 3c2f 7370 616e 3e20 3230 302c 203c 7370 200, p at le │ │ │ +000181d0: 7665 6c3c 2f73 7061 6e3e 2032 3030 2c20 vel
200, │ │ │ +000181e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00018200: 7269 6768 743c 2f73 7061 6e3e 203c 7370 right as │ │ │ +00018230: 736f 6369 6174 6976 6974 793c 2f73 7061 sociativity,
. & │ │ │ +00018250: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00018260: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;fo │ │ │ +00018280: 726d 6174 3c2f 7370 616e 3e20 2227 5b27 rmat "'[' │ │ │ +00018290: 2027 6578 6973 7473 3227 2020 272f 2020 'exists2' '/ │ │ │ +000182a0: 2720 2720 7820 203a 2020 4120 2c20 2027 ' ' x : A , ' │ │ │ +000182b0: 2f20 2027 2027 5b27 2070 2020 2661 6d70 / ' '[' p & │ │ │ +000182c0: 3b20 2027 2f27 2071 2027 5d27 2027 5d27 ; '/' q ']' ']' │ │ │ +000182d0: 2229 3c62 722f 3e0a 266e 6273 703b 266e ")
. &n │ │ │ +000182e0: 6273 703b 3a20 3c73 7061 6e20 636c 6173 bsp;: type_scope
.
..
.
..
.Deri │ │ │ +00018340: 7665 6420 7275 6c65 7320 666f 7220 756e ved rules for un │ │ │ +00018350: 6976 6572 7361 6c20 7175 616e 7469 6669 iversal quantifi │ │ │ +00018360: 6361 7469 6f6e 200a 3c2f 6469 763e 0a3c cation .
.< │ │ │ +00018370: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ +00018380: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
.Sectio │ │ │ +000183b0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n univer │ │ │ +00018430: 7361 6c5f 7175 616e 7469 6669 6361 7469 sal_quantificati │ │ │ +00018440: 6f6e 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 on...
.  │ │ │ +00018460: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Variable │ │ │ +00018490: 3c2f 7370 616e 3e20 3c61 2069 643d 2275 A< │ │ │ +00018510: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Ty │ │ │ +00018540: 7065 3c2f 7370 616e 3e2e 3c62 722f 3e0a pe.
. │ │ │ +00018550: 266e 6273 703b 266e 6273 703b 3c73 7061   Var │ │ │ +00018580: 6961 626c 653c 2f73 7061 6e3e 203c 6120 iable P │ │ │ +00018610: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A
- │ │ │ +000186f0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00018700: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop.
..
.  │ │ │ +00018740: 266e 6273 703b 3c73 7061 6e20 636c 6173  Theorem ins │ │ │ +000187c0: 743c 2f73 7061 6e3e 3c2f 613e 203a 203c t : < │ │ │ +000187d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000187e0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000187f0: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall x │ │ │ +00018850: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A< │ │ │ +000188c0: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, │ │ │ +00018920: 616c 6c3c 2f73 7061 6e3e 3c2f 613e 2028 all ( │ │ │ +00018930: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun x => │ │ │ +00018a00: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ +00018a30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00018a40: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00018a50: 6f67 6963 2e68 746d 6c23 783a 3132 3822 ogic.html#x:128" │ │ │ +00018a60: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x) │ │ │ +00018a90: 203c 6120 636c 6173 733d 2269 6472 6566 -> │ │ │ +00018b50: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ +00018b80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00018b90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00018ba0: 6f67 6963 2e68 746d 6c23 783a 3132 3722 ogic.html#x:127" │ │ │ +00018bb0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x. │ │ │ +00018be0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a26 6e62
..
.&nb │ │ │ +00018bf0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Theore │ │ │ +00018c20: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m < │ │ │ +00018c50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018c60: 7469 746c 653d 226c 656d 6d61 223e 6765 title="lemma">ge │ │ │ +00018c70: 6e3c 2f73 7061 6e3e 3c2f 613e 203a 203c n : < │ │ │ +00018c80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018c90: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00018ca0: 666f 7261 6c6c 3c2f 7370 616e 3e20 283c forall (< │ │ │ +00018cb0: 6120 6964 3d22 423a 3132 3922 2063 6c61 a id="B:129" cla │ │ │ +00018cc0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00018cd0: 2223 423a 3132 3922 3e3c 7370 616e 2063 "#B:129">B:Prop) (< │ │ │ +00018d60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018d70: 7469 746c 653d 2262 696e 6465 7222 3e66 title="binder">f │ │ │ +00018d80: 3c2f 7370 616e 3e3c 2f61 3e3a 3c73 7061 :for │ │ │ +00018db0: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all y:A, B < │ │ │ +00018f30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00018f40: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00018f50: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> P y
), B │ │ │ +00019090: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00019110: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> all │ │ │ +000191e0: 503c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 P.
..
.End univ │ │ │ +00019290: 6572 7361 6c5f 7175 616e 7469 6669 6361 ersal_quantifica │ │ │ +000192a0: 7469 6f6e 3c2f 7370 616e 3e3c 2f61 3e2e tion. │ │ │ +000192b0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.

Eq │ │ │ +00019300: 7561 6c69 7479 3c2f 6831 3e0a 0a3c 6469 uality

..
.. eq x y │ │ │ +00019400: 2c20 6f72 2073 696d 706c 7920 3c73 7061 , or simply x=y │ │ │ +00019470: 3c2f 7370 616e 3e20 6578 7072 6573 7365
expresse │ │ │ +00019480: 7320 7468 6520 6571 7561 6c69 7479 206f s the equality o │ │ │ +00019490: 6620 3c73 7061 6e20 636c 6173 733d 2269 f x │ │ │ +000194d0: 3c2f 7370 616e 3e20 616e 640a 2020 2020 and. │ │ │ +000194e0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c y. Both x and < │ │ │ +00019590: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000195a0: 7469 746c 653d 2276 6172 223e 793c 2f73 title="var">y must │ │ │ +000195c0: 2062 656c 6f6e 6720 746f 2074 6865 2073 belong to the s │ │ │ +000195d0: 616d 6520 7479 7065 203c 7370 616e 2063 ame type A │ │ │ +00019610: 3c2f 7370 616e 3e3c 2f73 7061 6e3e 2e0a .. │ │ │ +00019620: 2020 2020 5468 6520 6465 6669 6e69 7469 The definiti │ │ │ +00019630: 6f6e 2069 7320 696e 6475 6374 6976 6520 on is inductive │ │ │ +00019640: 616e 6420 7374 6174 6573 2074 6865 2072 and states the r │ │ │ +00019650: 6566 6c65 7869 7669 7479 206f 6620 7468 eflexivity of th │ │ │ +00019660: 6520 6571 7561 6c69 7479 2e0a 2020 2020 e equality.. │ │ │ +00019670: 5468 6520 6f74 6865 7273 2070 726f 7065 The others prope │ │ │ +00019680: 7274 6965 7320 2873 796d 6d65 7472 792c rties (symmetry, │ │ │ +00019690: 2074 7261 6e73 6974 6976 6974 792c 2072 transitivity, r │ │ │ +000196a0: 6570 6c61 6365 6d65 6e74 206f 660a 2020 eplacement of. │ │ │ +000196b0: 2020 6571 7561 6c73 2062 7920 6571 7561 equals by equa │ │ │ +000196c0: 6c73 2920 6172 6520 7072 6f76 6564 2062 ls) are proved b │ │ │ +000196d0: 656c 6f77 2e20 5468 6520 7479 7065 206f elow. The type o │ │ │ +000196e0: 6620 3c73 7061 6e20 636c 6173 733d 2269 f x │ │ │ +00019720: 3c2f 7370 616e 3e20 616e 6420 3c73 7061 and y can be. mad │ │ │ +00019780: 6520 6578 706c 6963 6974 2075 7369 6e67 e explicit using │ │ │ +00019790: 2074 6865 206e 6f74 6174 696f 6e20 3c73 the notation x = < │ │ │ +00019820: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00019830: 7469 746c 653d 2276 6172 223e 793c 2f73 title="var">y :> A │ │ │ +000198b0: 3c2f 7370 616e 3e2e 2054 6869 7320 6973 . This is │ │ │ +000198c0: 204c 6569 626e 697a 2065 7175 616c 6974 Leibniz equalit │ │ │ +000198d0: 790a 2020 2020 6173 2069 7420 6578 7072 y. as it expr │ │ │ +000198e0: 6573 7365 7320 7468 6174 203c 7370 616e esses that x │ │ │ +00019930: 2061 6e64 203c 7370 616e 2063 6c61 7373 and y are e │ │ │ +00019980: 7175 616c 2069 6666 2065 7665 7279 2070 qual iff every p │ │ │ +00019990: 726f 7065 7274 7920 6f6e 0a20 2020 203c roperty on. < │ │ │ +000199a0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000199b0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A which is tr │ │ │ +000199f0: 7565 206f 6620 3c73 7061 6e20 636c 6173 ue of < │ │ │ +00019a10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00019a20: 7469 746c 653d 2276 6172 223e 783c 2f73 title="var">x
is a │ │ │ +00019a40: 6c73 6f20 7472 7565 206f 6620 3c73 7061 lso true of y .
.
...Inductive e │ │ │ +00019bb0: 713c 2f73 7061 6e3e 3c2f 7370 616e 3e3c q< │ │ │ +00019bc0: 2f73 7061 6e3e 3c2f 7370 616e 3e3c 2f73 /span> (A │ │ │ +00019c30: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :Type) ( │ │ │ +00019c60: 3c61 2069 643d 2278 3a31 3333 2220 636c x:A) : A │ │ │ +00019d40: 203c 6120 636c 6173 733d 2269 6472 6566 -> Prop :=
.&n │ │ │ +00019df0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00019e00: 266e 6273 703b 3c61 2069 643d 2265 715f  eq_refl │ │ │ +00019e60: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +00019ea0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ +00019ed0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00019ee0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00019ef0: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ +00019f00: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ +00019f10: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">=< │ │ │ +00019f40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x │ │ │ +00019fa0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063
:> │ │ │ +0001a020: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c A │ │ │ +0001a080: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0001a090: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.where
"
x = y :& │ │ │ +0001a160: 6774 3b20 4122 203a 3d20 2840 3c61 2063 gt; A" := (@< │ │ │ +0001a1a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001a1b0: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ +0001a1c0: 223e 6571 3c2f 7370 616e 3e3c 2f61 3e20 ">eq │ │ │ +0001a1d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A x y) : type_scope.
..
│ │ │ +0001a280: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Arguments eq {A} x │ │ │ +0001a360: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0001a380: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.Ar │ │ │ +0001a3b0: 6775 6d65 6e74 733c 2f73 7061 6e3e 203c guments
< │ │ │ +0001a3c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001a3d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001a3e0: 6f67 6963 2e68 746d 6c23 6571 5f72 6566 ogic.html#eq_ref │ │ │ +0001a3f0: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">eq_refl< │ │ │ +0001a420: 2f73 7061 6e3e 3c2f 613e 207b 3c73 7061 /span>
{A
x │ │ │ +0001a470: 3c2f 7370 616e 3e7d 202c 205b 3c73 7061 } , [A
] │ │ │ +0001a4c0: 783c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a x.
.. │ │ │ +0001a4d0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Arguments │ │ │ +0001a500: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 e │ │ │ +0001a560: 715f 696e 643c 2f73 7061 6e3e 3c2f 613e q_ind │ │ │ +0001a570: 205b 3c73 7061 6e20 636c 6173 733d 2269 [A │ │ │ +0001a590: 3c2f 7370 616e 3e5d 203c 7370 616e 2063 ] x < │ │ │ +0001a5c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001a5d0: 7469 746c 653d 2276 6172 223e 503c 2f73 title="var">P
_ y │ │ │ +0001a630: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0001a650: 2f73 7061 6e3e 203a 203c 7370 616e 2063 /span> : rename< │ │ │ +0001a680: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 7370 /span>.
.Ar │ │ │ +0001a6b0: 6775 6d65 6e74 733c 2f73 7061 6e3e 203c guments
< │ │ │ +0001a6c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001a6d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001a6e0: 6f67 6963 2e68 746d 6c23 6571 5f72 6563 ogic.html#eq_rec │ │ │ +0001a6f0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq_rec [A] │ │ │ +0001a750: 3c73 7061 6e20 636c 6173 733d 2269 6422 x P _ y │ │ │ +0001a7e0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ : │ │ │ +0001a810: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0001a830: 7265 6e61 6d65 3c2f 7370 616e 3e2e 3c62 rename..Arguments eq │ │ │ +0001a8d0: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ +0001a8e0: 205b 3c73 7061 6e20 636c 6173 733d 2269 [A │ │ │ +0001a900: 3c2f 7370 616e 3e5d 203c 7370 616e 2063 ] x < │ │ │ +0001a930: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001a940: 7469 746c 653d 2276 6172 223e 503c 2f73 title="var">P
_ y │ │ │ +0001a9a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0001a9c0: 2f73 7061 6e3e 203a 203c 7370 616e 2063 /span> : rename< │ │ │ +0001a9f0: 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a 3c62 /span>.
...Notation
"
x = y" : │ │ │ +0001aad0: 3d20 283c 6120 636c 6173 733d 2269 6472 = (eq │ │ │ +0001ab50: 783c 2f73 7061 6e3e 203c 7370 616e 2063 x y) │ │ │ +0001ab80: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : t │ │ │ +0001aba0: 7970 655f 7363 6f70 653c 2f73 7061 6e3e ype_scope │ │ │ +0001abb0: 2e3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Notation │ │ │ +0001abe0: 3c2f 7370 616e 3e20 3c61 2069 643d 223a
"x <> │ │ │ +0001ac90: 7920 203a 2667 743b 2054 2220 3a3d 2028 y :> T" := ( │ │ │ +0001aca0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ~ │ │ │ +0001ad10: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 x < │ │ │ +0001ad90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001ada0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0001adb0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >= y :>< │ │ │ +0001ae60: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> │ │ │ +0001ae80: 543c 2f73 7061 6e3e 2920 3a20 3c73 7061 T) : type_sc │ │ │ +0001aeb0: 6f70 653c 2f73 7061 6e3e 2e3c 6272 2f3e ope.
│ │ │ +0001aec0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Notation
" │ │ │ +0001af70: 3c2f 7370 616e 3e3c 2f61 3e78 2026 6c74 x < │ │ │ +0001af80: 3b26 6774 3b20 7922 203a 3d20 283c 6120 ;> y" := (~
( │ │ │ +0001b080: 3c2f 613e 3c73 7061 6e20 636c 6173 733d x = y)
) : type_scop │ │ │ +0001b1f0: 653c 2f73 7061 6e3e 2e3c 6272 2f3e 0a0a e.
.. │ │ │ +0001b200: 3c62 722f 3e0a 235b 3c73 7061 6e20 636c
.#[global]
.Hint Resolve I conj
or_introl │ │ │ +0001b330: 6f72 5f69 6e74 726f 723c 2f73 7061 6e3e or_intror │ │ │ +0001b340: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +0001b360: 636f 7265 3c2f 7370 616e 3e2e 3c62 722f core.
.#[global]< │ │ │ +0001b3a0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Hint Resolve e │ │ │ +0001b420: 715f 7265 666c 3c2f 7370 616e 3e3a 203c q_refl: < │ │ │ +0001b430: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001b440: 7469 746c 653d 2276 6172 223e 636f 7265 title="var">core │ │ │ +0001b450: 3c2f 7370 616e 3e2e 3c62 722f 3e0a 235b
.
.#[ │ │ │ +0001b460: 3c73 7061 6e20 636c 6173 733d 2269 6422 glo │ │ │ +0001b480: 6261 6c3c 2f73 7061 6e3e 5d3c 6272 2f3e bal]
│ │ │ +0001b490: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Hint R │ │ │ +0001b4e0: 6573 6f6c 7665 3c2f 7370 616e 3e20 3c73 esolve ex_in │ │ │ +0001b510: 7472 6f3c 2f73 7061 6e3e 203c 7370 616e tro ex_intro │ │ │ +0001b540: 323c 2f73 7061 6e3e 3a20 3c73 7061 6e20 2: core.
..
. │ │ │ +0001b580: 3c73 7061 6e20 636c 6173 733d 2269 6422 Register │ │ │ +0001b5b0: 203c 7370 616e 2063 6c61 7373 3d22 6964 eq │ │ │ +0001b5d0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ +0001b620: 636f 7265 2e65 712e 7479 7065 3c2f 7370 core.eq.type.
.Regis │ │ │ +0001b660: 7465 723c 2f73 7061 6e3e 203c 7370 616e ter eq_refl< │ │ │ +0001b690: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as c │ │ │ +0001b6e0: 6f72 652e 6571 2e72 6566 6c3c 2f73 7061 ore.eq.refl.
.Regist │ │ │ +0001b720: 6572 3c2f 7370 616e 3e20 3c73 7061 6e20 er eq_ind
as │ │ │ +0001b780: 3c73 7061 6e20 636c 6173 733d 2269 6422 cor │ │ │ +0001b7a0: 652e 6571 2e69 6e64 3c2f 7370 616e 3e2e e.eq.ind. │ │ │ +0001b7b0: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Register< │ │ │ +0001b7e0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> eq_rect as core. │ │ │ +0001b860: 6571 2e72 6563 743c 2f73 7061 6e3e 2e3c eq.rect.< │ │ │ +0001b870: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Sec │ │ │ +0001b8a0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion
Logic_lemma │ │ │ +0001b910: 733c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 s.
..
.  │ │ │ +0001b930: 266e 6273 703b 3c73 7061 6e20 636c 6173  Theorem absurd : forall A< │ │ │ +0001ba40: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> C:Prop, │ │ │ +0001bad0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0001bb30: 203c 6120 636c 6173 733d 2269 6472 6566 -> ~ │ │ │ +0001bc20: 3c2f 613e 203c 6120 636c 6173 733d 2269 A -&g │ │ │ +0001bcf0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ +0001bd30: 3c73 7061 6e20 636c 6173 733d 2269 6422 C.< │ │ │ +0001bd60: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ +0001bd70: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Section │ │ │ +0001bda0: 3c2f 7370 616e 3e20 3c61 2069 643d 224c equality.
.&nb │ │ │ +0001be30: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0001be40: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Variables< │ │ │ +0001be70: 2f73 7061 6e3e 203c 6120 6964 3d22 4c6f /span> A< │ │ │ +0001bef0: 2f61 3e20 3c61 2069 643d 224c 6f67 6963 /a> B │ │ │ +0001bf70: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Type. │ │ │ +0001bfa0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0001bfb0: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  V │ │ │ +0001bfe0: 6172 6961 626c 653c 2f73 7061 6e3e 203c ariable
< │ │ │ +0001bff0: 6120 6964 3d22 4c6f 6769 635f 6c65 6d6d a id="Logic_lemm │ │ │ +0001c000: 6173 2e65 7175 616c 6974 792e 6622 2063 as.equality.f" c │ │ │ +0001c010: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ +0001c020: 663d 2223 4c6f 6769 635f 6c65 6d6d 6173 f="#Logic_lemmas │ │ │ +0001c030: 2e65 7175 616c 6974 792e 6622 3e3c 7370 .equality.f">f │ │ │ +0001c060: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61
: A │ │ │ +0001c0e0: 203c 6120 636c 6173 733d 2269 6472 6566 -> B │ │ │ +0001c1c0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.  &n │ │ │ +0001c1e0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Varia │ │ │ +0001c210: 626c 6573 3c2f 7370 616e 3e20 3c61 2069 bles x
y z : A.
..< │ │ │ +0001c410: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0001c420: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Th │ │ │ +0001c450: 656f 7265 6d3c 2f73 7061 6e3e 203c 6120 eorem eq_sym : │ │ │ +0001c500: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ +0001c530: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001c540: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001c550: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0001c560: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0001c570: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0001c5a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> < │ │ │ +0001c5f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001c600: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0001c610: 3e79 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >y -> y
= │ │ │ +0001c780: 3c2f 613e 203c 6120 636c 6173 733d 2269 x.
..< │ │ │ +0001c800: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0001c810: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  Re │ │ │ +0001c840: 6769 7374 6572 3c2f 7370 616e 3e20 3c73 gister eq_sy │ │ │ +0001c870: 6d3c 2f73 7061 6e3e 203c 7370 616e 2063 m as core.eq.sym.
..
│ │ │ +0001c8e0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0001c8f0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Theore │ │ │ +0001c920: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m eq_trans │ │ │ +0001c980: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : x │ │ │ +0001ca00: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0001ca70: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 =
y │ │ │ +0001caf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> y< │ │ │ +0001cbd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = z < │ │ │ +0001cd10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001cd20: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0001cd30: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> x │ │ │ +0001cdb0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +0001ce30: 203c 6120 636c 6173 733d 2269 6472 6566 z< │ │ │ +0001cea0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +0001ceb0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0001cec0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Regist │ │ │ +0001cef0: 6572 3c2f 7370 616e 3e20 3c73 7061 6e20 er eq_trans< │ │ │ +0001cf20: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> as c │ │ │ +0001cf70: 6f72 652e 6571 2e74 7261 6e73 3c2f 7370 ore.eq.trans.
..
│ │ │ +0001cf90: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0001cfa0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Theore │ │ │ +0001cfd0: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m
eq_t │ │ │ +0001d030: 7261 6e73 5f72 3c2f 7370 616e 3e3c 2f61 rans_r : x = y -&g │ │ │ +0001d210: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; z │ │ │ +0001d290: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0001d300: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = y │ │ │ +0001d380: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> x< │ │ │ +0001d460: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = z.
. │ │ │ +0001d560: 0a3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +0001d570: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +0001d580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001d590: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0001d5a0: 5468 656f 7265 6d3c 2f73 7061 6e3e 203c Theorem < │ │ │ +0001d5b0: 6120 6964 3d22 665f 6571 7561 6c22 2063 a id="f_equal" c │ │ │ +0001d5c0: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ +0001d5d0: 663d 2223 665f 6571 7561 6c22 3e3c 7370 f="#f_equal">f_eq │ │ │ +0001d600: 7561 6c3c 2f73 7061 6e3e 3c2f 613e 203a ual : │ │ │ +0001d610: 203c 6120 636c 6173 733d 2269 6472 6566 x< │ │ │ +0001d680: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +0001d700: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y ->< │ │ │ +0001d7e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> < │ │ │ +0001d830: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001d840: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0001d850: 3e66 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >f x │ │ │ +0001d8d0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0001d940: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = f │ │ │ +0001d9c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y.
..
. │ │ │ +0001da40: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0001da50: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Registe │ │ │ +0001da80: 723c 2f73 7061 6e3e 203c 7370 616e 2063 r f_equal │ │ │ +0001dab0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as │ │ │ +0001db00: 636f 7265 2e65 712e 636f 6e67 723c 2f73 core.eq.congr
.
..
.  &n │ │ │ +0001db30: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Theor │ │ │ +0001db60: 656d 3c2f 7370 616e 3e20 3c61 2069 643d em
not │ │ │ +0001dbc0: 5f65 715f 7379 6d3c 2f73 7061 6e3e 3c2f _eq_sym : x
│ │ │ +0001dc90: 3c73 7061 6e20 636c 6173 733d 2269 6422 <> y │ │ │ +0001dda0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0001ddb0: 203c 6120 636c 6173 733d 2269 6472 6566 y< │ │ │ +0001de20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> &l │ │ │ +0001de90: 743b 2667 743b 3c2f 7370 616e 3e3c 2f61 t;> x │ │ │ +0001df10: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.  E │ │ │ +0001df50: 6e64 3c2f 7370 616e 3e20 3c61 2063 6c61 nd equ │ │ │ +0001dfc0: 616c 6974 793c 2f73 7061 6e3e 3c2f 613e ality │ │ │ +0001dfd0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 266e .
..
.&n │ │ │ +0001dfe0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ +0001e010: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition < │ │ │ +0001e050: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001e060: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0001e070: 6e22 3e65 715f 7369 6e64 5f72 3c2f 7370 n">eq_sind_r :
.& │ │ │ +0001e090: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0001e0a0: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; forall (A:T │ │ │ +0001e150: 7970 653c 2f73 7061 6e3e 2920 283c 6120 ype) (x< │ │ │ +0001e1b0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +0001e210: 3c2f 613e 2920 283c 6120 6964 3d22 503a ) (P: │ │ │ +0001e2a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +0001e2d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001e2e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001e2f0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0001e300: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0001e310: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> SProp │ │ │ +0001e370: 292c 203c 6120 636c 6173 733d 2269 6472 ), P< │ │ │ +0001e3d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ +0001e430: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +0001e4a0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; fo │ │ │ +0001e4d0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall y:A< │ │ │ +0001e590: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, y = x ->< │ │ │ +0001e740: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ +0001e7a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0001e800: 793c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 y.
..
.  │ │ │ +0001e820: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ +0001e850: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ │ │ │ +0001e8b0: 696e 645f 723c 2f73 7061 6e3e 3c2f 613e ind_r │ │ │ +0001e8c0: 203a 3c62 722f 3e0a 266e 6273 703b 266e :
. &n │ │ │ +0001e8d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0001e8e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall ( │ │ │ +0001e910: 3c61 2069 643d 2241 3a31 3534 2220 636c A:Type) ( │ │ │ +0001e9c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0001e9e0: 783c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 x:< │ │ │ +0001ea20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001ea30: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0001ea40: 3e41 3c2f 7370 616e 3e3c 2f61 3e29 2028 >A) ( │ │ │ +0001ea50: 3c61 2069 643d 2250 3a31 3536 2220 636c P:A - │ │ │ +0001eb70: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0001eb80: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop), < │ │ │ +0001ebb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ebc0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001ebd0: 6f67 6963 2e68 746d 6c23 503a 3135 3622 ogic.html#P:156" │ │ │ +0001ebe0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0001ec10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +0001ec70: 203c 6120 636c 6173 733d 2269 6472 6566 ->
forall │ │ │ +0001ed10: 3c2f 7370 616e 3e20 3c61 2069 643d 2279 y:< │ │ │ +0001ed70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ed80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001ed90: 6f67 6963 2e68 746d 6c23 413a 3135 3422 ogic.html#A:154" │ │ │ +0001eda0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A, │ │ │ +0001edd0: 203c 6120 636c 6173 733d 2269 6472 6566 y < │ │ │ +0001ee80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001ee90: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0001eea0: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +0001eee0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x < │ │ │ +0001ef10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001ef20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001ef30: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0001ef40: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0001ef50: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> P y
.
.& │ │ │ +0001f050: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ +0001f080: 6e65 643c 2f73 7061 6e3e 2e3c 6272 2f3e ned.
│ │ │ +0001f090: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ +0001f0a0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Register
eq_ind_r as core.e │ │ │ +0001f150: 712e 696e 645f 723c 2f73 7061 6e3e 2e3c q.ind_r.< │ │ │ +0001f160: 6272 2f3e 0a0a 3c62 722f 3e0a 266e 6273 br/>..
.&nbs │ │ │ +0001f170: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ +0001f1a0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion e │ │ │ +0001f200: 715f 7265 635f 723c 2f73 7061 6e3e 3c2f q_rec_r :
.  │ │ │ +0001f220: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0001f230: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;forall │ │ │ +0001f260: 2028 3c61 2069 643d 2241 3a31 3538 2220 (
A
:Type) (x:< │ │ │ +0001f340: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001f350: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001f360: 6f67 6963 2e68 746d 6c23 413a 3135 3822 ogic.html#A:158" │ │ │ +0001f370: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A) │ │ │ +0001f3a0: 2028 3c61 2069 643d 2250 3a31 3630 2220 (P
:A < │ │ │ +0001f4a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001f4b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0001f4c0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Set), │ │ │ +0001f500: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +0001f560: 203c 6120 636c 6173 733d 2269 6472 6566 x -> foral │ │ │ +0001f660: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l y: │ │ │ +0001f6c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0001f720: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , y │ │ │ +0001f7d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +0001f800: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001f810: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001f820: 6f67 6963 2e68 746d 6c23 783a 3135 3922 ogic.html#x:159" │ │ │ +0001f830: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x │ │ │ +0001f860: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> P
y.
. │ │ │ +0001f9a0: 266e 6273 703b 266e 6273 703b 3c73 7061   Def │ │ │ +0001f9d0: 696e 6564 3c2f 7370 616e 3e2e 3c62 722f ined.
..
. & │ │ │ +0001f9f0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ +0001fa20: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq │ │ │ +0001fa80: 5f72 6563 745f 723c 2f73 7061 6e3e 3c2f _rect_r :
.  │ │ │ +0001faa0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0001fab0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;forall │ │ │ +0001fae0: 2028 3c61 2069 643d 2241 3a31 3632 2220 (
A
:Type) (x:< │ │ │ +0001fbc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0001fbd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0001fbe0: 6f67 6963 2e68 746d 6c23 413a 3136 3222 ogic.html#A:162" │ │ │ +0001fbf0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A) │ │ │ +0001fc20: 2028 3c61 2069 643d 2250 3a31 3634 2220 (P:A < │ │ │ +0001fd20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0001fd30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0001fd40: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Type), │ │ │ +0001fd80: 203c 6120 636c 6173 733d 2269 6472 6566 P x ->< │ │ │ +0001feb0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> fora │ │ │ +0001fee0: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll y │ │ │ +0001ff40: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A, y< │ │ │ +00020000: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00020080: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +000200e0: 203c 6120 636c 6173 733d 2269 6472 6566 -> P y< │ │ │ +00020210: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00020220: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ +00020250: 6669 6e65 643c 2f73 7061 6e3e 2e3c 6272 fined.
.End < │ │ │ +00020290: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000202a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000202b0: 6f67 6963 2e68 746d 6c23 4c6f 6769 635f ogic.html#Logic_ │ │ │ +000202c0: 6c65 6d6d 6173 223e 3c73 7061 6e20 636c lemmas">Logic_l │ │ │ +000202f0: 656d 6d61 733c 2f73 7061 6e3e 3c2f 613e emmas │ │ │ +00020300: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.M │ │ │ +00020330: 6f64 756c 653c 2f73 7061 6e3e 203c 6120 odule EqNotations.
. │ │ │ +000203b0: 266e 6273 703b 266e 6273 703b 3c73 7061   Not │ │ │ +000203e0: 6174 696f 6e3c 2f73 7061 6e3e 203c 6120 ation "< │ │ │ +00020470: 2f73 7061 6e3e 3c2f 613e 2772 6577 2720 /span>'rew' │ │ │ +00020480: 4820 2769 6e27 2048 2722 203a 3d20 283c H 'in' H'" := (< │ │ │ +00020490: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000204a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000204b0: 6f67 6963 2e68 746d 6c23 6571 5f72 6563 ogic.html#eq_rec │ │ │ +000204c0: 7422 3e3c 7370 616e 2063 6c61 7373 3d22 t">eq_rect _ │ │ │ +00020520: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ H' _ │ │ │ +000205b0: 483c 2f73 7061 6e3e 293c 6272 2f3e 0a26 H)
.& │ │ │ +000205c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000205d0: 3b26 6e62 7370 3b28 3c73 7061 6e20 636c ; (at level │ │ │ +00020630: 3130 2c20 3c73 7061 6e20 636c 6173 733d 10, H' at
level 10,
.&nbs │ │ │ +000206c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000206d0: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; format
"'[' 'rew' │ │ │ +00020710: 2048 2020 696e 2020 272f 2720 4827 2027 H in '/' H' ' │ │ │ +00020720: 5d27 2229 2e3c 6272 2f3e 0a26 6e62 7370 ]'").
.  │ │ │ +00020730: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Notation │ │ │ +00020760: 3c2f 7370 616e 3e20 3c61 2069 643d 2237 " │ │ │ +000207f0: 3c2f 7370 616e 3e3c 2f61 3e27 7265 7727 'rew' │ │ │ +00020800: 205b 2050 205d 2048 2027 696e 2720 4827 [ P ] H 'in' H' │ │ │ +00020810: 2220 3a3d 2028 3c61 2063 6c61 7373 3d22 " := (eq │ │ │ +00020870: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ +00020880: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +000208a0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> P H' _ H) │ │ │ +00020940: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00020950: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +00020960: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00020970: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ +00020980: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t
level< │ │ │ +000209b0: 2f73 7061 6e3e 2031 302c 203c 7370 616e /span> 10, H' at lev │ │ │ +00020a30: 656c 3c2f 7370 616e 3e20 3130 2c3c 6272 el 10,
.  & │ │ │ +00020a50: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00020a60: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;fo │ │ │ +00020a80: 726d 6174 3c2f 7370 616e 3e20 2227 5b27 rmat "'[' │ │ │ +00020a90: 2027 7265 7727 2020 5b20 5020 5d20 2027 'rew' [ P ] ' │ │ │ +00020aa0: 2f20 2020 2027 2048 2020 696e 2020 272f / ' H in '/ │ │ │ +00020ab0: 2720 4827 2027 5d27 2229 2e3c 6272 2f3e ' H' ']'").
│ │ │ +00020ac0: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  No │ │ │ +00020af0: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation " │ │ │ +00020b90: 3c2f 7370 616e 3e3c 2f61 3e27 7265 7727 'rew' │ │ │ +00020ba0: 2026 6c74 3b2d 2048 2027 696e 2720 4827 <- H 'in' H' │ │ │ +00020bb0: 2220 3a3d 2028 3c61 2063 6c61 7373 3d22 " := ( │ │ │ +00020c10: 6571 5f72 6563 745f 723c 2f73 7061 6e3e eq_rect_r │ │ │ +00020c20: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ H' H │ │ │ +00020c90: 3c2f 7370 616e 3e29 3c62 722f 3e0a 266e )
.&n │ │ │ +00020ca0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00020cb0: 266e 6273 703b 283c 7370 616e 2063 6c61  (at │ │ │ +00020ce0: 203c 7370 616e 2063 6c61 7373 3d22 6964 level 1 │ │ │ +00020d10: 302c 203c 7370 616e 2063 6c61 7373 3d22 0, │ │ │ +00020d30: 4827 3c2f 7370 616e 3e20 3c73 7061 6e20 H' at
level 10,
.  │ │ │ +00020da0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00020db0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; format "'[' 'rew' │ │ │ +00020df0: 266c 743b 2d20 2048 2020 696e 2020 272f <- H in '/ │ │ │ +00020e00: 2720 4827 2027 5d27 2229 2e3c 6272 2f3e ' H' ']'").
│ │ │ +00020e10: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  No │ │ │ +00020e40: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation
│ │ │ +00020ed0: 2671 756f 743b 3c2f 7370 616e 3e3c 2f61 "'rew' <- [ P │ │ │ +00020ef0: 205d 2048 2027 696e 2720 4827 2220 3a3d ] H 'in' H'" := │ │ │ +00020f00: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (eq_r │ │ │ +00020f60: 6563 745f 723c 2f73 7061 6e3e 3c2f 613e ect_r │ │ │ +00020f70: 203c 7370 616e 2063 6c61 7373 3d22 6964 P< │ │ │ +00020f90: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> H' H)
.  │ │ │ +00020ff0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00021000: 703b 283c 7370 616e 2063 6c61 7373 3d22 p;(at le │ │ │ +00021050: 7665 6c3c 2f73 7061 6e3e 2031 302c 203c vel
10, < │ │ │ +00021060: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00021070: 7469 746c 653d 2276 6172 223e 4827 3c2f title="var">H' at │ │ │ +000210b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 level 10 │ │ │ +000210e0: 2c3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 ,
. &nb │ │ │ +000210f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00021100: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;format │ │ │ +00021130: 2227 5b27 2027 7265 7727 2020 266c 743b "'[' 'rew' < │ │ │ +00021140: 2d20 205b 2050 205d 2020 272f 2020 2020 - [ P ] '/ │ │ │ +00021150: 2720 4820 2069 6e20 2027 2f27 2048 2720 ' H in '/' H' │ │ │ +00021160: 275d 2722 292e 3c62 722f 3e0a 266e 6273 ']'").
.&nbs │ │ │ +00021170: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Notatio │ │ │ +000211a0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n "'rew' -> │ │ │ +00021250: 3b20 4820 2769 6e27 2048 2722 203a 3d20 ; H 'in' H'" := │ │ │ +00021260: 283c 6120 636c 6173 733d 2269 6472 6566 (eq_rect │ │ │ +000212c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _ _ │ │ │ +00021310: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c H' < │ │ │ +00021340: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00021350: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
H)
│ │ │ +00021390: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +000213a0: 7370 3b26 6e62 7370 3b28 3c73 7061 6e20 sp; (at level 10, H' at< │ │ │ +00021450: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
10, only p │ │ │ +000214d0: 6172 7369 6e67 3c2f 7370 616e 3e29 2e3c arsing).< │ │ │ +000214e0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +000214f0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Notation "'rew' -> │ │ │ +000215c0: 205b 2050 205d 2048 2027 696e 2720 4827 [ P ] H 'in' H' │ │ │ +000215d0: 2220 3a3d 2028 3c61 2063 6c61 7373 3d22 " := (eq │ │ │ +00021630: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ +00021640: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00021660: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> P H' _ H) │ │ │ +00021700: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00021710: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +00021720: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00021730: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ +00021740: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t
level< │ │ │ +00021770: 2f73 7061 6e3e 2031 302c 203c 7370 616e /span> 10, H' at lev │ │ │ +000217f0: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el 10, only< │ │ │ +00021820: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> parsing).
..
│ │ │ +00021860: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  No │ │ │ +00021890: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation
│ │ │ +00021910: 3c73 7061 6e20 636c 6173 733d 2269 6422 "< │ │ │ +00021940: 2f61 3e27 7265 7727 2027 6465 7065 6e64 /a>'rew' 'depend │ │ │ +00021950: 656e 7427 2048 2027 696e 2720 4827 223c ent' H 'in' H'"< │ │ │ +00021960: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00021970: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ +00021980: 283c 7370 616e 2063 6c61 7373 3d22 6964 (match < │ │ │ +000219b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000219c0: 7469 746c 653d 2276 6172 223e 483c 2f73 title="var">H
with
. &nb │ │ │ +00021a10: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00021a20: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00021a30: 3b26 6e62 7370 3b7c 203c 6120 636c 6173 ; |
eq_refl │ │ │ +00021aa0: 3c2f 613e 203d 2667 743b 203c 7370 616e => H'
. &nb │ │ │ +00021ae0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00021af0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00021b00: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; end)
. & │ │ │ +00021b40: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00021b50: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00021b60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ +00021b70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00021b90: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ +00021bc0: 3c2f 7370 616e 3e20 3130 2c20 3c73 7061 10, H' at le │ │ │ +00021c40: 7665 6c3c 2f73 7061 6e3e 2031 302c 3c62 vel
10,.   │ │ │ +00021c60: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00021c70: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00021c80: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00021c90: 3c73 7061 6e20 636c 6173 733d 2269 6422 for │ │ │ +00021cb0: 6d61 743c 2f73 7061 6e3e 2022 275b 2720 mat "'[' │ │ │ +00021cc0: 2772 6577 2720 2027 6465 7065 6e64 656e 'rew' 'dependen │ │ │ +00021cd0: 7427 2020 272f 2020 2020 2720 4820 2069 t' '/ ' H i │ │ │ +00021ce0: 6e20 2027 2f27 2048 2720 275d 2722 292e n '/' H' ']'"). │ │ │ +00021cf0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00021d00: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Notation "'rew' 'd │ │ │ +00021df0: 6570 656e 6465 6e74 2720 2d26 6774 3b20 ependent' -> │ │ │ +00021e00: 4820 2769 6e27 2048 2722 3c62 722f 3e0a H 'in' H'"
. │ │ │ +00021e10: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00021e20: 703b 266e 6273 703b 3a3d 2028 3c73 7061 p; := (mat │ │ │ +00021e50: 6368 3c2f 7370 616e 3e20 3c73 7061 6e20 ch
H │ │ │ +00021e80: 3c73 7061 6e20 636c 6173 733d 2269 6422 with
.  &n │ │ │ +00021ec0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00021ed0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00021ee0: 703b 7c20 3c61 2063 6c61 7373 3d22 6964 p;| eq_ │ │ │ +00021f40: 7265 666c 3c2f 7370 616e 3e3c 2f61 3e20 refl │ │ │ +00021f50: 3d26 6774 3b20 3c73 7061 6e20 636c 6173 => H'
.  &n │ │ │ +00021f90: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00021fa0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00021fb0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;end).   │ │ │ +00021ff0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00022000: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00022010: 6273 703b 266e 6273 703b 283c 7370 616e bsp; (at level 10, H' at │ │ │ +000220c0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c level 10, only │ │ │ +00022140: 7061 7273 696e 673c 2f73 7061 6e3e 292e parsing). │ │ │ +00022150: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00022160: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Notation "
'rew' 'd │ │ │ +00022250: 6570 656e 6465 6e74 2720 266c 743b 2d20 ependent' <- │ │ │ +00022260: 4820 2769 6e27 2048 2722 3c62 722f 3e0a H 'in' H'"
. │ │ │ +00022270: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00022280: 703b 266e 6273 703b 3a3d 2028 3c73 7061 p; := (mat │ │ │ +000222b0: 6368 3c2f 7370 616e 3e20 3c61 2063 6c61 ch
eq_s │ │ │ +00022310: 796d 3c2f 7370 616e 3e3c 2f61 3e20 3c73 ym H with │ │ │ +00022370: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00022380: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00022390: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000223a0: 266e 6273 703b 7c20 3c61 2063 6c61 7373  | eq_refl< │ │ │ +00022410: 2f61 3e20 3d26 6774 3b20 3c73 7061 6e20 /a> => H' │ │ │ +00022440: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00022450: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00022460: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00022470: 266e 6273 703b 3c73 7061 6e20 636c 6173  end)
. &n │ │ │ +000224b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000224c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000224d0: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +000224e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000224f0: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ +00022500: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t level< │ │ │ +00022530: 2f73 7061 6e3e 2031 302c 203c 7370 616e /span> 10, H' at lev │ │ │ +000225b0: 656c 3c2f 7370 616e 3e20 3130 2c3c 6272 el 10,
.  & │ │ │ +000225d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000225e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000225f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00022600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00022610: 7469 746c 653d 2276 6172 223e 666f 726d title="var">form │ │ │ +00022620: 6174 3c2f 7370 616e 3e20 2227 5b27 2027 at "'[' ' │ │ │ +00022630: 7265 7727 2020 2764 6570 656e 6465 6e74 rew' 'dependent │ │ │ +00022640: 2720 2026 6c74 3b2d 2020 272f 2020 2020 ' <- '/ │ │ │ +00022650: 2720 4820 2069 6e20 2027 2f27 2048 2720 ' H in '/' H' │ │ │ +00022660: 275d 2722 292e 3c62 722f 3e0a 266e 6273 ']'").
.&nbs │ │ │ +00022670: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Notatio │ │ │ +000226a0: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n
" │ │ │ +00022730: 3b3c 2f73 7061 6e3e 3c2f 613e 2772 6577 ;'rew │ │ │ +00022740: 2720 2764 6570 656e 6465 6e74 2720 5b20 ' 'dependent' [ │ │ │ +00022750: 2766 756e 2720 7920 7020 3d26 6774 3b20 'fun' y p => │ │ │ +00022760: 5020 5d20 4820 2769 6e27 2048 2722 3c62 P ] H 'in' H'".   │ │ │ +00022780: 266e 6273 703b 266e 6273 703b 3a3d 2028   := ( │ │ │ +00022790: 3c73 7061 6e20 636c 6173 733d 2269 6422 match H as < │ │ │ +00022810: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00022820: 7469 746c 653d 2276 6172 223e 703c 2f73 title="var">p in ( │ │ │ +00022860: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ = y │ │ │ +00022920: 3c2f 7370 616e 3e29 203c 7370 616e 2063 ) return │ │ │ +00022950: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c P w │ │ │ +000229a0: 6974 683c 2f73 7061 6e3e 3c62 722f 3e0a ith
. │ │ │ +000229b0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000229c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000229d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000229e0: 7c20 3c61 2063 6c61 7373 3d22 6964 7265 | eq_re │ │ │ +00022a40: 666c 3c2f 7370 616e 3e3c 2f61 3e20 3d26 fl =& │ │ │ +00022a50: 6774 3b20 3c73 7061 6e20 636c 6173 733d gt; H'
. │ │ │ +00022a80: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00022a90: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00022aa0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00022ab0: 3c73 7061 6e20 636c 6173 733d 2269 6422 end)
.  &n │ │ │ +00022af0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00022b00: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00022b10: 703b 266e 6273 703b 283c 7370 616e 2063 p; (at level │ │ │ +00022b70: 2031 302c 203c 7370 616e 2063 6c61 7373 10, H' at level 10, y name< │ │ │ +00022c40: 2f73 7061 6e3e 2c20 3c73 7061 6e20 636c /span>, p name< │ │ │ +00022c90: 2f73 7061 6e3e 2c3c 6272 2f3e 0a26 6e62 /span>,
.&nb │ │ │ +00022ca0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00022cb0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00022cc0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00022cd0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; format "'[' 'rew' │ │ │ +00022d10: 2764 6570 656e 6465 6e74 2720 205b 2027 'dependent' [ ' │ │ │ +00022d20: 6675 6e27 2020 7920 2070 2020 3d26 6774 fun' y p => │ │ │ +00022d30: 3b20 2050 205d 2020 272f 2020 2020 2720 ; P ] '/ ' │ │ │ +00022d40: 4820 2069 6e20 2027 2f27 2048 2720 275d H in '/' H' '] │ │ │ +00022d50: 2722 292e 3c62 722f 3e0a 266e 6273 703b '").
.  │ │ │ +00022d60: 266e 6273 703b 3c73 7061 6e20 636c 6173  Notation< │ │ │ +00022d90: 2f73 7061 6e3e 203c 6120 6964 3d22 3332 /span> "< │ │ │ +00022e20: 2f73 7061 6e3e 3c2f 613e 2772 6577 2720 /span>'rew' │ │ │ +00022e30: 2764 6570 656e 6465 6e74 2720 2d26 6774 'dependent' -> │ │ │ +00022e40: 3b20 5b20 2766 756e 2720 7920 7020 3d26 ; [ 'fun' y p =& │ │ │ +00022e50: 6774 3b20 5020 5d20 4820 2769 6e27 2048 gt; P ] H 'in' H │ │ │ +00022e60: 2722 3c62 722f 3e0a 266e 6273 703b 266e '"
. &n │ │ │ +00022e70: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00022e80: 3a3d 2028 3c73 7061 6e20 636c 6173 733d := (match H │ │ │ +00022ed0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c as
│ │ │ +00022f20: 703c 2f73 7061 6e3e 203c 7370 616e 2063 p in (_ = y) re │ │ │ +00023040: 7475 726e 3c2f 7370 616e 3e20 3c73 7061 turn P
with.   │ │ │ +000230b0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000230c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000230d0: 6273 703b 7c20 3c61 2063 6c61 7373 3d22 bsp;| e │ │ │ +00023130: 715f 7265 666c 3c2f 7370 616e 3e3c 2f61 q_refl => H'.   │ │ │ +00023180: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00023190: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000231a0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;end) │ │ │ +000231d0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000231e0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000231f0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00023200: 266e 6273 703b 266e 6273 703b 283c 7370   (at< │ │ │ +00023230: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
10, H' │ │ │ +00023290: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000232b0: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ +000232e0: 3c2f 7370 616e 3e20 3130 2c20 3c73 7061 10, y n │ │ │ +00023330: 616d 653c 2f73 7061 6e3e 2c20 3c73 7061 ame, p n │ │ │ +00023380: 616d 653c 2f73 7061 6e3e 2c20 3c73 7061 ame, only
parsing │ │ │ +000233e0: 292e 3c62 722f 3e0a 266e 6273 703b 266e ).
. &n │ │ │ +000233f0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Notation
"
'rew' 'd │ │ │ +000234c0: 6570 656e 6465 6e74 2720 266c 743b 2d20 ependent' <- │ │ │ +000234d0: 5b20 2766 756e 2720 7920 7020 3d26 6774 [ 'fun' y p => │ │ │ +000234e0: 3b20 5020 5d20 4820 2769 6e27 2048 2722 ; P ] H 'in' H'" │ │ │ +000234f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00023500: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ +00023510: 2028 3c73 7061 6e20 636c 6173 733d 2269 (match │ │ │ +00023540: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_sym< │ │ │ +000235a0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> H as
p in (_ = y) < │ │ │ +00023710: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00023720: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00023730: 7265 7475 726e 3c2f 7370 616e 3e20 3c73 return P with │ │ │ +00023790: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000237a0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000237b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000237c0: 266e 6273 703b 7c20 3c61 2063 6c61 7373  | eq_refl< │ │ │ +00023830: 2f61 3e20 3d26 6774 3b20 3c73 7061 6e20 /a> => H' │ │ │ +00023860: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00023870: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00023880: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00023890: 266e 6273 703b 3c73 7061 6e20 636c 6173  end)
. &n │ │ │ +000238d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000238e0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000238f0: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +00023900: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00023910: 7469 746c 653d 2274 6163 7469 6322 3e61 title="tactic">a │ │ │ +00023920: 743c 2f73 7061 6e3e 203c 7370 616e 2063 t level< │ │ │ +00023950: 2f73 7061 6e3e 2031 302c 203c 7370 616e /span> 10, H' at lev │ │ │ +000239d0: 656c 3c2f 7370 616e 3e20 3130 2c20 3c73 el 10, y name, p name,
.  & │ │ │ +00023a90: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00023aa0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00023ab0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00023ac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00023ad0: 7469 746c 653d 2276 6172 223e 666f 726d title="var">form │ │ │ +00023ae0: 6174 3c2f 7370 616e 3e20 2227 5b27 2027 at "'[' ' │ │ │ +00023af0: 7265 7727 2020 2764 6570 656e 6465 6e74 rew' 'dependent │ │ │ +00023b00: 2720 2026 6c74 3b2d 2020 5b20 2766 756e ' <- [ 'fun │ │ │ +00023b10: 2720 2079 2020 7020 203d 2667 743b 2020 ' y p => │ │ │ +00023b20: 5020 5d20 2027 2f20 2020 2027 2048 2020 P ] '/ ' H │ │ │ +00023b30: 696e 2020 272f 2720 4827 2027 5d27 2229 in '/' H' ']'") │ │ │ +00023b40: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +00023b50: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Notation
"'rew' 'de │ │ │ +00023c20: 7065 6e64 656e 7427 205b 2050 205d 2048 pendent' [ P ] H │ │ │ +00023c30: 2027 696e 2720 4827 223c 6272 2f3e 0a26 'in' H'"
.& │ │ │ +00023c40: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00023c50: 3b26 6e62 7370 3b3a 3d20 283c 7370 616e ; := (matc │ │ │ +00023c80: 683c 2f73 7061 6e3e 203c 7370 616e 2063 h H < │ │ │ +00023cb0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00023cc0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00023cd0: 6173 3c2f 7370 616e 3e20 3c73 7061 6e20 as p │ │ │ +00023d00: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00023d20: 696e 3c2f 7370 616e 3e20 283c 7370 616e in (_ │ │ │ +00023d50: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00023dc0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 7370 = y) return │ │ │ +00023e40: 503c 2f73 7061 6e3e 203c 6120 636c 6173 P y p< │ │ │ +00023f00: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> with │ │ │ +00023f30: 3c2f 7370 616e 3e3c 6272 2f3e 0a26 6e62
.&nb │ │ │ +00023f40: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00023f50: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00023f60: 3b26 6e62 7370 3b26 6e62 7370 3b7c 203c ;  | < │ │ │ +00023f70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00023f80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00023f90: 6f67 6963 2e68 746d 6c23 6571 5f72 6566 ogic.html#eq_ref │ │ │ +00023fa0: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">eq_refl< │ │ │ +00023fd0: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +00023fe0: 203c 7370 616e 2063 6c61 7373 3d22 6964 H' │ │ │ +00024000: 3c2f 7370 616e 3e3c 6272 2f3e 0a26 6e62
.&nb │ │ │ +00024010: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00024020: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024030: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  en │ │ │ +00024060: 643c 2f73 7061 6e3e 293c 6272 2f3e 0a26 d
)
.& │ │ │ +00024070: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024080: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00024090: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000240a0: 6e62 7370 3b28 3c73 7061 6e20 636c 6173 nbsp;(at │ │ │ +000240d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 level 10 │ │ │ +00024100: 2c20 3c73 7061 6e20 636c 6173 733d 2269 , H │ │ │ +00024120: 273c 2f73 7061 6e3e 203c 7370 616e 2063 ' at level │ │ │ +00024180: 2031 302c 3c62 722f 3e0a 266e 6273 703b 10,
.  │ │ │ +00024190: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000241a0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000241b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000241c0: 266e 6273 703b 3c73 7061 6e20 636c 6173  format │ │ │ +000241f0: 2022 275b 2720 2772 6577 2720 2027 6465 "'[' 'rew' 'de │ │ │ +00024200: 7065 6e64 656e 7427 2020 5b20 5020 5d20 pendent' [ P ] │ │ │ +00024210: 2027 2f20 2020 2027 2048 2020 696e 2020 '/ ' H in │ │ │ +00024220: 272f 2720 4827 2027 5d27 2229 2e3c 6272 '/' H' ']'").
.  < │ │ │ +00024240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00024250: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00024260: 4e6f 7461 7469 6f6e 3c2f 7370 616e 3e20 Notation
│ │ │ +00024270: 3c61 2069 643d 2234 6533 6135 6339 6161 │ │ │ +000242d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 "< │ │ │ +00024300: 2f61 3e27 7265 7727 2027 6465 7065 6e64 /a>'rew' 'depend │ │ │ +00024310: 656e 7427 202d 2667 743b 205b 2050 205d ent' -> [ P ] │ │ │ +00024320: 2048 2027 696e 2720 4827 223c 6272 2f3e H 'in' H'"
│ │ │ +00024330: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00024340: 7370 3b26 6e62 7370 3b3a 3d20 283c 7370 sp; := (ma │ │ │ +00024370: 7463 683c 2f73 7061 6e3e 203c 7370 616e tch
H │ │ │ +000243a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 as p in (_ │ │ │ +00024490: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +000244c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000244d0: 7469 746c 653d 2276 6172 223e 793c 2f73 title="var">y
) return
P y │ │ │ +00024590: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +000245f0: 703c 2f73 7061 6e3e 3c2f 613e 203c 7370 p wi │ │ │ +00024620: 7468 3c2f 7370 616e 3e3c 6272 2f3e 0a26 th
.& │ │ │ +00024630: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024640: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00024650: 7370 3b26 6e62 7370 3b26 6e62 7370 3b7c sp;  | │ │ │ +00024660: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ref │ │ │ +000246c0: 6c3c 2f73 7061 6e3e 3c2f 613e 203d 2667 l =&g │ │ │ +000246d0: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; │ │ │ +000246f0: 4827 3c2f 7370 616e 3e3c 6272 2f3e 0a26 H'
.& │ │ │ +00024700: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024710: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00024720: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3c sp;  < │ │ │ +00024730: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00024740: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00024750: 656e 643c 2f73 7061 6e3e 293c 6272 2f3e end)
│ │ │ +00024760: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00024770: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00024780: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024790: 3b26 6e62 7370 3b28 3c73 7061 6e20 636c ; (at level │ │ │ +000247f0: 3130 2c20 3c73 7061 6e20 636c 6173 733d 10, H' at
level 10,
.&nbs │ │ │ +00024880: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00024890: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000248a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000248b0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; only │ │ │ +000248e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 pa │ │ │ +00024900: 7273 696e 673c 2f73 7061 6e3e 292e 3c62 rsing)..   │ │ │ +00024920: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ +00024950: 203c 6120 6964 3d22 3534 3664 3561 3539 " │ │ │ +000249e0: 3c2f 613e 2772 6577 2720 2764 6570 656e 'rew' 'depen │ │ │ +000249f0: 6465 6e74 2720 266c 743b 2d20 5b20 5020 dent' <- [ P │ │ │ +00024a00: 5d20 4820 2769 6e27 2048 2722 3c62 722f ] H 'in' H'"
.  &n │ │ │ +00024a20: 6273 703b 266e 6273 703b 3a3d 2028 3c73 bsp; := (m │ │ │ +00024a50: 6174 6368 3c2f 7370 616e 3e20 3c61 2063 atch
< │ │ │ +00024a90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00024aa0: 7469 746c 653d 226c 656d 6d61 223e 6571 title="lemma">eq │ │ │ +00024ab0: 5f73 796d 3c2f 7370 616e 3e3c 2f61 3e20 _sym │ │ │ +00024ac0: 3c73 7061 6e20 636c 6173 733d 2269 6422 H as │ │ │ +00024b10: 203c 7370 616e 2063 6c61 7373 3d22 6964 p< │ │ │ +00024b30: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> in │ │ │ +00024b60: 2028 3c73 7061 6e20 636c 6173 733d 2269 (_ │ │ │ +00024b80: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 =< │ │ │ +00024c00: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> y) retu │ │ │ +00024c50: 726e 3c2f 7370 616e 3e20 3c73 7061 6e20 rn P │ │ │ +00024c80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ +00024ce0: 203c 6120 636c 6173 733d 2269 6472 6566 p with.   │ │ │ +00024d80: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00024d90: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00024da0: 6273 703b 7c20 3c61 2063 6c61 7373 3d22 bsp;| e │ │ │ +00024e00: 715f 7265 666c 3c2f 7370 616e 3e3c 2f61 q_refl => H'.   │ │ │ +00024e50: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00024e60: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00024e70: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;end) │ │ │ +00024ea0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00024eb0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00024ec0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00024ed0: 266e 6273 703b 266e 6273 703b 283c 7370   (at< │ │ │ +00024f00: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> level
10, H' │ │ │ +00024f60: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00024f80: 6174 3c2f 7370 616e 3e20 3c73 7061 6e20 at level │ │ │ +00024fb0: 3c2f 7370 616e 3e20 3130 2c3c 6272 2f3e 10,
│ │ │ +00024fc0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00024fd0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00024fe0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00024ff0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 7370 ;  format │ │ │ +00025020: 3c2f 7370 616e 3e20 2227 5b27 2027 7265 "'[' 're │ │ │ +00025030: 7727 2020 2764 6570 656e 6465 6e74 2720 w' 'dependent' │ │ │ +00025040: 2026 6c74 3b2d 2020 5b20 5020 5d20 2027 <- [ P ] ' │ │ │ +00025050: 2f20 2020 2027 2048 2020 696e 2020 272f / ' H in '/ │ │ │ +00025060: 2720 4827 2027 5d27 2229 2e3c 6272 2f3e ' H' ']'").
│ │ │ +00025070: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .End EqNotations │ │ │ +00025100: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Import │ │ │ +00025140: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 │ │ │ +00025180: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000251a0: 4571 4e6f 7461 7469 6f6e 733c 2f73 7061 EqNotations.
...Section
equ │ │ │ +00025250: 616c 6974 795f 6465 703c 2f73 7061 6e3e ality_dep │ │ │ +00025260: 3c2f 613e 2e3c 6272 2f3e 0a26 6e62 7370 .
.  │ │ │ +00025270: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Variable │ │ │ +000252a0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 A : Type.
. &n │ │ │ +00025350: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Variable
B │ │ │ +000253f0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A │ │ │ +00025450: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +000254d0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Type │ │ │ +00025500: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +00025510: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Variable
│ │ │ +00025580: 3c73 7061 6e20 636c 6173 733d 2269 6422 f : │ │ │ +000255b0: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +000255e0: 3c61 2069 643d 2278 3a31 3832 2220 636c x, B x.
. & │ │ │ +00025710: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Variables< │ │ │ +00025740: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span>
x │ │ │ +00025810: 793c 2f73 7061 6e3e 3c2f 613e 203a 203c y : < │ │ │ +00025820: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00025830: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00025840: 6f67 6963 2e68 746d 6c23 6571 7561 6c69 ogic.html#equali │ │ │ +00025850: 7479 5f64 6570 2e41 223e 3c73 7061 6e20 ty_dep.A">A.
.. │ │ │ +00025890: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000258a0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Theorem f_equal_d │ │ │ +00025930: 6570 3c2f 7370 616e 3e3c 2f61 3e20 283c ep (< │ │ │ +00025940: 6120 6964 3d22 483a 3138 3922 2063 6c61 a id="H:189" cla │ │ │ +00025950: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00025960: 2223 483a 3138 3922 3e3c 7370 616e 2063 "#H:189">H: x │ │ │ +00025a00: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00025a70: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = y) : rew │ │ │ +00025b60: 3c2f 613e 203c 6120 636c 6173 733d 2269 H │ │ │ +00025c10: 3c73 7061 6e20 636c 6173 733d 2269 6422 in │ │ │ +00025c40: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f x< │ │ │ +00025d10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00025d90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f y< │ │ │ +00025e60: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00025e70: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .End
equality_ │ │ │ +00025f00: 6465 703c 2f73 7061 6e3e 3c2f 613e 2e3c dep.< │ │ │ +00025f10: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ +00025f40: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma f_equal_dep2
{A │ │ │ +00026010: 203c 6120 6964 3d22 4127 3a31 3931 2220 A'< │ │ │ +00026060: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B B' │ │ │ +00026110: 3c2f 7370 616e 3e3c 2f61 3e7d 2028 3c61 } (f │ │ │ +00026170: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00026240: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00026250: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A') (< │ │ │ +000262e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000262f0: 7469 746c 653d 2262 696e 6465 7222 3e67 title="binder">g │ │ │ +00026300: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +00026330: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall a< │ │ │ +00026390: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +000263f0: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , B a - │ │ │ +00026520: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00026530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B' (f │ │ │ +000265f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 a))
.&nb │ │ │ +00026660: 7370 3b26 6e62 7370 3b7b 3c61 2069 643d sp; {x1< │ │ │ +000266c0: 2f61 3e20 3c61 2069 643d 2278 323a 3139 /a> │ │ │ +000266f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00026710: 7832 3c2f 7370 616e 3e3c 2f61 3e20 3a20 x2 : │ │ │ +00026720: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +00026780: 7d20 7b3c 6120 6964 3d22 7931 3a31 3939 } {< │ │ │ +000267b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000267c0: 7469 746c 653d 2262 696e 6465 7222 3e79 title="binder">y │ │ │ +000267d0: 313c 2f73 7061 6e3e 3c2f 613e 203a 203c 1 : < │ │ │ +000267e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000267f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00026800: 6f67 6963 2e68 746d 6c23 423a 3139 3222 ogic.html#B:192" │ │ │ +00026810: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >B │ │ │ +00026840: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x1} {y2 : │ │ │ +00026900: 203c 6120 636c 6173 733d 2269 6472 6566 B x2 │ │ │ +000269c0: 3c2f 613e 7d20 283c 6120 6964 3d22 483a } (H : │ │ │ +00026a20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x1 │ │ │ +00026ad0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00026b00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00026b10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00026b20: 6f67 6963 2e68 746d 6c23 7832 3a31 3938 ogic.html#x2:198 │ │ │ +00026b30: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x2) :
.  │ │ │ +00026b70: 266e 6273 703b 3c61 2063 6c61 7373 3d22   │ │ │ +00026bc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +00026bf0: 203c 6120 636c 6173 733d 2269 6472 6566 H in │ │ │ +00026cc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00026d00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00026d10: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00026d20: 3e79 313c 2f73 7061 6e3e 3c2f 613e 203c >y1 < │ │ │ +00026d30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00026d40: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00026d50: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00026d60: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00026d70: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00026da0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00026e00: 7932 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y2 -> │ │ │ +00026ed0: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +00026f00: 203c 6120 636c 6173 733d 2269 6472 6566 f_equal f H in g< │ │ │ +00027100: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x1 y1 = g x2 y │ │ │ +00027360: 323c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2.
..
.Lemma │ │ │ +000273a0: 3c2f 7370 616e 3e20 3c61 2069 643d 2272 rew_opp │ │ │ +00027400: 5f72 3c2f 7370 616e 3e3c 2f61 3e20 3c61 _r A │ │ │ +00027460: 3c2f 613e 2028 3c61 2069 643d 2250 3a32 ( │ │ │ +00027490: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000274b0: 503c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 P:< │ │ │ +000274f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00027500: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00027510: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A-> │ │ │ +00027590: 3c2f 613e 3c73 7061 6e20 636c 6173 733d Type │ │ │ +000275c0: 2920 283c 6120 6964 3d22 783a 3230 3422 ) (x y │ │ │ +00027670: 3a3c 6120 636c 6173 733d 2269 6472 6566 :A) (H< │ │ │ +00027720: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:x │ │ │ +00027780: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c =y) (a: │ │ │ +000278c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +00027920: 203c 6120 636c 6173 733d 2269 6472 6566 y) : < │ │ │ +000279d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000279e0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000279f0: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ +00027a00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 H │ │ │ +00027a60: 203c 6120 636c 6173 733d 2269 6472 6566 in< │ │ │ +00027ad0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> r │ │ │ +00027b50: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ +00027bb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 <- H< │ │ │ +00027c40: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> in a = a< │ │ │ +00027e00: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00027e10: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Lemma < │ │ │ +00027e40: 6120 6964 3d22 7265 775f 6f70 705f 6c22 a id="rew_opp_l" │ │ │ +00027e50: 2063 6c61 7373 3d22 6964 7265 6622 2068 class="idref" h │ │ │ +00027e60: 7265 663d 2223 7265 775f 6f70 705f 6c22 ref="#rew_opp_l" │ │ │ +00027e70: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 > │ │ │ +00027e90: 7265 775f 6f70 705f 6c3c 2f73 7061 6e3e rew_opp_l │ │ │ +00027ea0: 3c2f 613e 203c 6120 6964 3d22 413a 3230
< │ │ │ +00027ed0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00027ee0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +00027ef0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (P< │ │ │ +00027f50: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +00027fb0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 -> │ │ │ +00028020: 3c2f 7370 616e 3e3c 2f61 3e3c 7370 616e Type │ │ │ +00028050: 3c2f 7370 616e 3e29 2028 3c61 2069 643d ) (x │ │ │ +000280b0: 203c 6120 6964 3d22 793a 3231 3122 2063 y:A
) (H:x< │ │ │ +00028270: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00028280: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00028290: 3e3d 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >=< │ │ │ +000282d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000282e0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000282f0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 2028 >y) ( │ │ │ +00028300: 3c61 2069 643d 2261 3a32 3133 2220 636c a:P x
) : │ │ │ +00028490: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ +000284a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000284b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000284c0: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +000284d0: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f27 tions.:::'rew'_' │ │ │ +000284e0: 266c 743b 2d27 5f78 5f27 696e 275f 7822 <-'_x_'in'_x" │ │ │ +000284f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 ><-< │ │ │ +00028520: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H │ │ │ +00028580: 3c2f 613e 203c 6120 636c 6173 733d 2269 in rew H i │ │ │ +00028750: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n < │ │ │ +00028790: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000287a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000287b0: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a = a< │ │ │ +00028890: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +000288a0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Theorem │ │ │ +000288d0: 3c2f 7370 616e 3e20 3c61 2069 643d 2266 f_equal2< │ │ │ +00028930: 2f73 7061 6e3e 3c2f 613e 203a 3c62 722f /span> :
.  f │ │ │ +00028970: 6f72 616c 6c3c 2f73 7061 6e3e 2028 3c61 orall (A1 A2 B:Type) (f:< │ │ │ +00028b10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00028b20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00028b30: 6f67 6963 2e68 746d 6c23 4131 3a32 3134 ogic.html#A1:214 │ │ │ +00028b40: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">A1 -> A │ │ │ +00028c40: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 -> │ │ │ +00028cc0: 3c2f 613e 203c 6120 636c 6173 733d 2269 B) (x1 y1 │ │ │ +00028dd0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 :< │ │ │ +00028e10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00028e20: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00028e30: 3e41 313c 2f73 7061 6e3e 3c2f 613e 293c >A1)< │ │ │ +00028e40: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00028e50: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (x2 y2:A2 │ │ │ +00028f70: 3c2f 613e 292c 203c 6120 636c 6173 733d ), x1 = y1 │ │ │ +00029120: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00029130: 203c 6120 636c 6173 733d 2269 6472 6566 x2< │ │ │ +00029190: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00029210: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y2 ->< │ │ │ +000292e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ +00029340: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00029380: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029390: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000293a0: 3e78 313c 2f73 7061 6e3e 3c2f 613e 203c >x1 < │ │ │ +000293b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000293c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000293d0: 6f67 6963 2e68 746d 6c23 7832 3a32 3230 ogic.html#x2:220 │ │ │ +000293e0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x2 < │ │ │ +00029460: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029470: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00029480: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +000294c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 f < │ │ │ +000294f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00029500: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00029510: 6f67 6963 2e68 746d 6c23 7931 3a32 3139 ogic.html#y1:219 │ │ │ +00029520: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">y1 y2 │ │ │ +000295b0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Register │ │ │ +00029610: 665f 6571 7561 6c32 3c2f 7370 616e 3e20 f_equal2 │ │ │ +00029620: 3c73 7061 6e20 636c 6173 733d 2269 6422 as core.eq. │ │ │ +00029670: 636f 6e67 7232 3c2f 7370 616e 3e2e 3c62 congr2...
.Theo │ │ │ +000296b0: 7265 6d3c 2f73 7061 6e3e 203c 6120 6964 rem f_equa │ │ │ +00029710: 6c33 3c2f 7370 616e 3e3c 2f61 3e20 3a3c l3 :< │ │ │ +00029720: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00029730: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;forall │ │ │ +00029760: 283c 6120 6964 3d22 4131 3a32 3232 2220 (A1< │ │ │ +000297b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A2 │ │ │ +00029810: 3c2f 613e 203c 6120 6964 3d22 4133 3a32 A3 < │ │ │ +00029870: 6120 6964 3d22 423a 3232 3522 2063 6c61 a id="B:225" cla │ │ │ +00029880: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00029890: 2223 423a 3232 3522 3e3c 7370 616e 2063 "#B:225">B:Type) (< │ │ │ +00029920: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029930: 7469 746c 653d 2262 696e 6465 7222 3e66 title="binder">f │ │ │ +00029940: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 :< │ │ │ +00029980: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029990: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000299a0: 3e41 313c 2f73 7061 6e3e 3c2f 613e 203c >A1
< │ │ │ +000299b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000299c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000299d0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +000299e0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +000299f0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> A2 < │ │ │ +00029ad0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029ae0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00029af0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> A3 │ │ │ +00029b60: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00029bd0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; < │ │ │ +00029c10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00029c20: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00029c30: 3e42 3c2f 7370 616e 3e3c 2f61 3e29 2028 >B) ( │ │ │ +00029c40: 3c61 2069 643d 2278 313a 3232 3722 2063 x1 y1< │ │ │ +00029cf0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A1)
.&nb │ │ │ +00029d60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00029d70: 6e62 7370 3b28 3c61 2069 643d 2278 323a nbsp;(x2 │ │ │ +00029dd0: 3c61 2069 643d 2279 323a 3233 3022 2063 y2:A │ │ │ +00029e80: 323c 2f73 7061 6e3e 3c2f 613e 2920 283c 2) (< │ │ │ +00029e90: 6120 6964 3d22 7833 3a32 3331 2220 636c a id="x3:231" cl │ │ │ +00029ea0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00029eb0: 3d22 2378 333a 3233 3122 3e3c 7370 616e ="#x3:231">x3
y3:A3),
.&nb │ │ │ +00029fb0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00029fc0: 6e62 7370 3b3c 6120 636c 6173 733d 2269 nbsp;x1 =< │ │ │ +0002a0a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y1 -& │ │ │ +0002a170: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0002a180: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002a190: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002a1a0: 6f67 6963 2e68 746d 6c23 7832 3a32 3239 ogic.html#x2:229 │ │ │ +0002a1b0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x2 < │ │ │ +0002a230: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002a240: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0002a250: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= y2 │ │ │ +0002a2c0: 203c 6120 636c 6173 733d 2269 6472 6566 ->
x3 │ │ │ +0002a390: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = y3< │ │ │ +0002a470: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002a4c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> f< │ │ │ +0002a550: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x1 x2 x │ │ │ +0002a670: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 =
f y │ │ │ +0002a7b0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ +0002a7f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 y2 │ │ │ +0002a820: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y3.
..
. │ │ │ +0002a890: 3c73 7061 6e20 636c 6173 733d 2269 6422 Theorem │ │ │ +0002a8c0: 3c61 2069 643d 2266 5f65 7175 616c 3422
│ │ │ +0002a8f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 f │ │ │ +0002a910: 5f65 7175 616c 343c 2f73 7061 6e3e 3c2f _equal4 :
.  │ │ │ +0002a930: 266e 6273 703b 3c73 7061 6e20 636c 6173  forall
(A1 │ │ │ +0002a9c0: 3c61 2069 643d 2241 323a 3233 3422 2063 A2 A3< │ │ │ +0002aa70: 2f61 3e20 3c61 2069 643d 2241 343a 3233 /a> │ │ │ +0002aaa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0002aac0: 4134 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A4 B │ │ │ +0002ab20: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Type) (f< │ │ │ +0002aba0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>: │ │ │ +0002ac00: 4131 3c2f 7370 616e 3e3c 2f61 3e20 3c61 A1 -> A2 │ │ │ +0002ad50: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0002ad60: 203c 6120 636c 6173 733d 2269 6472 6566 A3< │ │ │ +0002adc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0002ae30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +0002ae70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002ae80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0002ae90: 3e41 343c 2f73 7061 6e3e 3c2f 613e 203c >A4 < │ │ │ +0002aea0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002aeb0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002aec0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0002aed0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0002aee0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> B)
.&n │ │ │ +0002af80: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0002af90: 266e 6273 703b 283c 6120 6964 3d22 7831  (x1 │ │ │ +0002aff0: 203c 6120 6964 3d22 7931 3a32 3430 2220 y1< │ │ │ +0002b040: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>: │ │ │ +0002b0a0: 4131 3c2f 7370 616e 3e3c 2f61 3e29 2028 A1
) ( │ │ │ +0002b0b0: 3c61 2069 643d 2278 323a 3234 3122 2063 x2 y2< │ │ │ +0002b160: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A2) (x3 < │ │ │ +0002b250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002b260: 7469 746c 653d 2262 696e 6465 7222 3e79 title="binder">y │ │ │ +0002b270: 333c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 3: │ │ │ +0002b2b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A3) │ │ │ +0002b2e0: 2028 3c61 2069 643d 2278 343a 3234 3522 (x4 │ │ │ +0002b330: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 y4:A4),
. │ │ │ +0002b400: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0002b410: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; x1< │ │ │ +0002b470: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = y1 < │ │ │ +0002b5a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002b5b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0002b5c0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> x2 │ │ │ +0002b630: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +0002b6b0: 203c 6120 636c 6173 733d 2269 6472 6566 y2< │ │ │ +0002b710: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0002b780: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +0002b7c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002b7d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0002b7e0: 3e78 333c 2f73 7061 6e3e 3c2f 613e 203c >x3 < │ │ │ +0002b7f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002b800: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002b810: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0002b820: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0002b830: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0002b860: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002b8c0: 7933 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y3 -> x4 = │ │ │ +0002ba20: 3c2f 613e 203c 6120 636c 6173 733d 2269 y4 - │ │ │ +0002baf0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0002bb00: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ +0002bb60: 203c 6120 636c 6173 733d 2269 6472 6566 x1< │ │ │ +0002bbc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x2 x3 x │ │ │ +0002bce0: 343c 2f73 7061 6e3e 3c2f 613e 203c 6120 4 =
f y │ │ │ +0002be20: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ +0002be60: 3c73 7061 6e20 636c 6173 733d 2269 6422 y2 │ │ │ +0002be90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y3 y4.
..
.Theorem f_equal5 :
.&nb │ │ │ +0002c000: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; forall │ │ │ +0002c030: 3c2f 7370 616e 3e20 283c 6120 6964 3d22 (A1 < │ │ │ +0002c0c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002c0d0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +0002c0e0: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2
A3 A4 │ │ │ +0002c1a0: 203c 6120 6964 3d22 4135 3a32 3531 2220 A5< │ │ │ +0002c1f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> B:Type) │ │ │ +0002c280: 283c 6120 6964 3d22 663a 3235 3322 2063 (f:A1< │ │ │ +0002c330: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002c380: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> A2 -&g │ │ │ +0002c480: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; A3 │ │ │ +0002c4f0: 203c 6120 636c 6173 733d 2269 6472 6566 ->
A4 │ │ │ +0002c5c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +0002c640: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A5 -& │ │ │ +0002c710: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0002c720: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002c730: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002c740: 6f67 6963 2e68 746d 6c23 423a 3235 3222 ogic.html#B:252" │ │ │ +0002c750: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >B) │ │ │ +0002c780: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0002c790: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +0002c7a0: 6120 6964 3d22 7831 3a32 3534 2220 636c a id="x1:254" cl │ │ │ +0002c7b0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +0002c7c0: 3d22 2378 313a 3235 3422 3e3c 7370 616e ="#x1:254">x1
y1:A1) (x2 y2 │ │ │ +0002c960: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 :< │ │ │ +0002c9a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002c9b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0002c9c0: 3e41 323c 2f73 7061 6e3e 3c2f 613e 2920 >A2) │ │ │ +0002c9d0: 283c 6120 6964 3d22 7833 3a32 3538 2220 (x3< │ │ │ +0002ca20: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> y3 │ │ │ +0002ca80: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A3) (x4< │ │ │ +0002cb40: 2f61 3e20 3c61 2069 643d 2279 343a 3236 /a> │ │ │ +0002cb70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0002cb90: 7934 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 y4:A4 │ │ │ +0002cc00: 2920 283c 6120 6964 3d22 7835 3a32 3632 ) (< │ │ │ +0002cc30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002cc40: 7469 746c 653d 2262 696e 6465 7222 3e78 title="binder">x │ │ │ +0002cc50: 353c 2f73 7061 6e3e 3c2f 613e 203c 6120 5 y5:A5),
│ │ │ +0002cd20: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0002cd30: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp; x1 │ │ │ +0002cd90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = y1< │ │ │ +0002ce70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002cec0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->
. &n │ │ │ +0002cf00: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0002cf10: 3c61 2063 6c61 7373 3d22 6964 7265 6622
x2 │ │ │ +0002cfc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +0002cff0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002d000: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002d010: 6f67 6963 2e68 746d 6c23 7932 3a32 3537 ogic.html#y2:257 │ │ │ +0002d020: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">y2 ->
.& │ │ │ +0002d0d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0002d0e0: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; x3 = y3
│ │ │ +0002d290: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0002d2a0: 203c 6120 636c 6173 733d 2269 6472 6566 x4< │ │ │ +0002d300: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +0002d380: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y4 ->< │ │ │ +0002d450: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002d4b0: 7835 3c2f 7370 616e 3e3c 2f61 3e20 3c61 x5 = y │ │ │ +0002d590: 353c 2f73 7061 6e3e 3c2f 613e 203c 6120 5 -> │ │ │ +0002d610: 3c2f 613e 203c 6120 636c 6173 733d 2269 f x1 x2 │ │ │ +0002d730: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +0002d770: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002d780: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0002d790: 3e78 333c 2f73 7061 6e3e 3c2f 613e 203c >x3 < │ │ │ +0002d7a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002d7b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002d7c0: 6f67 6963 2e68 746d 6c23 7834 3a32 3630 ogic.html#x4:260 │ │ │ +0002d7d0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x4 x5 │ │ │ +0002d860: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +0002d8e0: 203c 6120 636c 6173 733d 2269 6472 6566 f y1 │ │ │ +0002d9a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 y2 y3< │ │ │ +0002da60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0002dac0: 7934 3c2f 7370 616e 3e3c 2f61 3e20 3c61 y4 y5 │ │ │ +0002db30: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.T │ │ │ +0002db60: 6865 6f72 656d 3c2f 7370 616e 3e20 3c61 heorem f_equ │ │ │ +0002dbd0: 616c 5f63 6f6d 706f 7365 3c2f 7370 616e al_compose │ │ │ +0002dc10: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0002dc30: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A B< │ │ │ +0002dc90: 2f61 3e20 3c61 2069 643d 2243 3a32 3636 /a> C< │ │ │ +0002dce0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (a b:A< │ │ │ +0002ddf0: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (f< │ │ │ +0002de50: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +0002deb0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 -> │ │ │ +0002df20: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B │ │ │ +0002df80: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (g │ │ │ +0002dfe0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :B-> │ │ │ +0002e0b0: 3b3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 ; │ │ │ +0002e110: 433c 2f73 7061 6e3e 3c2f 613e 2920 283c C) (< │ │ │ +0002e120: 6120 6964 3d22 653a 3237 3122 2063 6c61 a id="e:271" cla │ │ │ +0002e130: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0002e140: 2223 653a 3237 3122 3e3c 7370 616e 2063 "#e:271">e:a=b) :
.  │ │ │ +0002e2c0: 266e 6273 703b 3c61 2063 6c61 7373 3d22  f_equal │ │ │ +0002e320: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0002e380: 673c 2f73 7061 6e3e 3c2f 613e 2028 3c61 g (f_equal< │ │ │ +0002e3f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f │ │ │ +0002e450: 3c2f 613e 203c 6120 636c 6173 733d 2269 e) = f_equal (fun │ │ │ +0002e5f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0002e610: 613c 2f73 7061 6e3e 3c2f 613e 203d 2667 a =&g │ │ │ +0002e620: 743b 203c 6120 636c 6173 733d 2269 6472 t; g< │ │ │ +0002e680: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (f a)) e.
. │ │ │ +0002e7b0: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ +0002e7c0: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ +0002e7d0: 0a54 6865 2067 726f 7570 6f69 6420 7374 .The groupoid st │ │ │ +0002e7e0: 7275 6374 7572 6520 6f66 2065 7175 616c ructure of equal │ │ │ +0002e7f0: 6974 7920 0a3c 2f64 6976 3e0a 3c64 6976 ity .
.
.. │ │ │ +0002e810: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Theorem eq_trans_refl │ │ │ +0002e8b0: 5f6c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 _l A │ │ │ +0002e910: 3c2f 613e 2028 3c61 2069 643d 2278 3a32 ( │ │ │ +0002e940: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0002e960: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y< │ │ │ +0002e9c0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +0002ea20: 3c2f 613e 2920 283c 6120 6964 3d22 653a ) (e: │ │ │ +0002eab0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x=y) : eq_trans │ │ │ +0002ec20: 3c2f 613e 203c 6120 636c 6173 733d 2269 eq │ │ │ +0002ec80: 5f72 6566 6c3c 2f73 7061 6e3e 3c2f 613e _refl │ │ │ +0002ec90: 203c 6120 636c 6173 733d 2269 6472 6566 e < │ │ │ +0002ed40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002ed50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0002ed60: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +0002eda0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e.< │ │ │ +0002edd0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.The │ │ │ +0002ee00: 6f72 656d 3c2f 7370 616e 3e20 3c61 2069 orem eq_tran │ │ │ +0002ee70: 735f 7265 666c 5f72 3c2f 7370 616e 3e3c s_refl_r< │ │ │ +0002ee80: 2f61 3e20 3c61 2069 643d 2241 3a32 3737 /a> A< │ │ │ +0002eed0: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (x y:A< │ │ │ +0002efe0: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (e< │ │ │ +0002f040: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:x │ │ │ +0002f0a0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ +0002f120: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002f130: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002f140: 6f67 6963 2e68 746d 6c23 793a 3237 3922 ogic.html#y:279" │ │ │ +0002f150: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y) │ │ │ +0002f180: 203a 203c 6120 636c 6173 733d 2269 6472 : eq_trans< │ │ │ +0002f1e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ +0002f240: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0002f280: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl =< │ │ │ +0002f330: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ +0002f390: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Theorem eq_sym_involu │ │ │ +0002f440: 7469 7665 3c2f 7370 616e 3e3c 2f61 3e20 tive │ │ │ +0002f450: 3c61 2069 643d 2241 3a32 3831 2220 636c A
(x < │ │ │ +0002f500: 6120 6964 3d22 793a 3238 3322 2063 6c61 a id="y:283" cla │ │ │ +0002f510: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0002f520: 2223 793a 3238 3322 3e3c 7370 616e 2063 "#y:283">y:A) (e: │ │ │ +0002f610: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +0002f670: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +0002f6e0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c y │ │ │ +0002f740: 3c2f 7370 616e 3e3c 2f61 3e29 203a 203c ) : < │ │ │ +0002f750: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0002f760: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0002f770: 6f67 6963 2e68 746d 6c23 6571 5f73 796d ogic.html#eq_sym │ │ │ +0002f780: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq_sym (eq_sym e) = e.
...Theorem eq_trans_ │ │ │ +0002fa00: 7379 6d5f 696e 765f 6c3c 2f73 7061 6e3e sym_inv_l │ │ │ +0002fa10: 3c2f 613e 203c 6120 6964 3d22 413a 3238 < │ │ │ +0002fa40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0002fa50: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +0002fa60: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (x< │ │ │ +0002fac0: 2f61 3e20 3c61 2069 643d 2279 3a32 3837 /a> y< │ │ │ +0002fb10: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ +0002fb70: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (e │ │ │ +0002fbd0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :x= │ │ │ +0002fcb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ +0002fd10: 2920 3a20 3c61 2063 6c61 7373 3d22 6964 ) : eq_trans │ │ │ +0002fd70: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 ( │ │ │ +0002fdb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +0002fdd0: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ +0002fde0: 203c 6120 636c 6173 733d 2269 6472 6566 e) e< │ │ │ +0002fea0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +0002ff20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_refl │ │ │ +0002ff80: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Theore │ │ │ +0002ffc0: 6d3c 2f73 7061 6e3e 203c 6120 6964 3d22 m eq_t │ │ │ +00030030: 7261 6e73 5f73 796d 5f69 6e76 5f72 3c2f rans_sym_inv_r A │ │ │ +000300a0: 2028 3c61 2069 643d 2278 3a32 3930 2220 (x
y: │ │ │ +00030150: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +000301b0: 2920 283c 6120 6964 3d22 653a 3239 3222 ) (e:x< │ │ │ +00030260: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>=y) : eq_ │ │ │ +000303a0: 7472 616e 733c 2f73 7061 6e3e 3c2f 613e trans │ │ │ +000303b0: 203c 6120 636c 6173 733d 2269 6472 6566 e (eq_sym e) = │ │ │ +00030550: 3c2f 613e 203c 6120 636c 6173 733d 2269 eq │ │ │ +000305b0: 5f72 6566 6c3c 2f73 7061 6e3e 3c2f 613e _refl │ │ │ +000305c0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 .
..
.T │ │ │ +000305f0: 6865 6f72 656d 3c2f 7370 616e 3e20 3c61 heorem eq_tran │ │ │ +00030660: 735f 6173 736f 633c 2f73 7061 6e3e 3c2f s_assoc A (x y z │ │ │ +000307d0: 3c61 2069 643d 2274 3a32 3937 2220 636c t:A) (e │ │ │ +000308e0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :x │ │ │ +000309b0: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 = │ │ │ +00030a10: 793c 2f73 7061 6e3e 3c2f 613e 2920 283c y) (< │ │ │ +00030a20: 6120 6964 3d22 6527 3a32 3939 2220 636c a id="e':299" cl │ │ │ +00030a30: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00030a40: 3d22 2365 273a 3239 3922 3e3c 7370 616e ="#e':299">e':y= │ │ │ +00030b50: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 z │ │ │ +00030bb0: 3c2f 613e 2920 283c 6120 6964 3d22 6527 ) (e''< │ │ │ +00030c10: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:z │ │ │ +00030c70: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 =< │ │ │ +00030cf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00030d00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00030d10: 6f67 6963 2e68 746d 6c23 743a 3239 3722 ogic.html#t:297" │ │ │ +00030d20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >t) │ │ │ +00030d50: 203a 3c62 722f 3e0a 266e 6273 703b 266e :
. &n │ │ │ +00030d60: 6273 703b 3c61 2063 6c61 7373 3d22 6964 bsp;eq_trans │ │ │ +00030dc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00030e20: 653c 2f73 7061 6e3e 3c2f 613e 2028 3c61 e (eq_trans e' e │ │ │ +00030f50: 2727 3c2f 7370 616e 3e3c 2f61 3e29 203c '') < │ │ │ +00030f60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00030f70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00030f80: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00030f90: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00030fa0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00030fd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00031010: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +00031030: 715f 7472 616e 733c 2f73 7061 6e3e 3c2f q_trans (eq_trans │ │ │ +000310a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00031100: 653c 2f73 7061 6e3e 3c2f 613e 203c 6120 e │ │ │ +00031140: 3c73 7061 6e20 636c 6173 733d 2269 6422 e') │ │ │ +00031170: 203c 6120 636c 6173 733d 2269 6472 6566 e''.
..
.Theorem
│ │ │ +00031260: 7265 775f 6d61 703c 2f73 7061 6e3e 3c2f rew_map A B │ │ │ +00031320: 2028 3c61 2069 643d 2250 3a33 3033 2220 (P:B │ │ │ +00031440: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00031450: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type) (< │ │ │ +00031480: 6120 6964 3d22 663a 3330 3422 2063 6c61 a id="f:304" cla │ │ │ +00031490: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000314a0: 2223 663a 3330 3422 3e3c 7370 616e 2063 "#f:304">f:A-&g │ │ │ +000315a0: 743b 3c2f 7370 616e 3e3c 2f61 3e3c 6120 t;< │ │ │ +000315e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000315f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00031600: 3e42 3c2f 7370 616e 3e3c 2f61 3e29 203c >B) < │ │ │ +00031610: 6120 6964 3d22 7831 3a33 3035 2220 636c a id="x1:305" cl │ │ │ +00031620: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00031630: 3d22 2378 313a 3330 3522 3e3c 7370 616e ="#x1:305">x1 x2 (H< │ │ │ +00031710: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>: │ │ │ +00031770: 7831 3c2f 7370 616e 3e3c 2f61 3e3c 6120 x1=x2< │ │ │ +00031850: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (y< │ │ │ +000318b0: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:P │ │ │ +00031910: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f x1)) :
.  < │ │ │ +000319f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00031a00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00031a10: 6f67 6963 2e68 746d 6c23 3737 3334 6431 ogic.html#7734d1 │ │ │ +00031a20: 3765 6235 6630 3664 3338 3433 6635 3039 7eb5f06d3843f509 │ │ │ +00031a30: 3934 3665 6435 6261 3435 223e 3c73 7061 946ed5ba45">re │ │ │ +00031a60: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w [
fun x< │ │ │ +00031b60: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +00031b70: 203c 6120 636c 6173 733d 2269 6472 6566 P (f< │ │ │ +00031c30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ +00031c90: 3c2f 613e 293c 6120 636c 6173 733d 2269 )] │ │ │ +00031d10: 203c 6120 636c 6173 733d 2269 6472 6566 H < │ │ │ +00031dc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00031dd0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00031de0: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ +00031df0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00031e00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00031e10: 6f67 6963 2e68 746d 6c23 793a 3330 3822 ogic.html#y:308" │ │ │ +00031e20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >y │ │ │ +00031e50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00031ec0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 rew f_equa │ │ │ +00031fa0: 6c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 l < │ │ │ +00031fe0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00031ff0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00032000: 3e66 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >f │ │ │ +00032040: 3c73 7061 6e20 636c 6173 733d 2269 6422 H < │ │ │ +00032070: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00032080: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00032090: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +000320a0: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +000320b0: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in y.
. │ │ │ +00032150: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Theorem< │ │ │ +00032180: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> < │ │ │ +000321c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000321d0: 7469 746c 653d 226c 656d 6d61 223e 6571 title="lemma">eq │ │ │ +000321e0: 5f74 7261 6e73 5f6d 6170 3c2f 7370 616e _trans_map {A B │ │ │ +000322a0: 3c2f 613e 7d20 7b3c 6120 6964 3d22 7831 } {x1 │ │ │ +00032300: 203c 6120 6964 3d22 7832 3a33 3133 2220 x2< │ │ │ +00032350: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> x3 │ │ │ +000323b0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A} {y1:B x1} {y2:B x2} {y3:B x3}
.&nbs │ │ │ +00032780: 703b 266e 6273 703b 283c 6120 6964 3d22 p; (H1:x1= │ │ │ +000328c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x2) (H2:< │ │ │ +00032980: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00032990: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000329a0: 6f67 6963 2e68 746d 6c23 7832 3a33 3133 ogic.html#x2:313 │ │ │ +000329b0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">x2 │ │ │ +00032a50: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 =< │ │ │ +00032a90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00032aa0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00032ab0: 3e78 333c 2f73 7061 6e3e 3c2f 613e 2920 >x3) │ │ │ +00032ac0: 283c 6120 6964 3d22 4831 273a 3332 3022 (< │ │ │ +00032af0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00032b00: 7469 746c 653d 2262 696e 6465 7222 3e48 title="binder">H │ │ │ +00032b10: 3127 3c2f 7370 616e 3e3c 2f61 3e3a 203c 1': < │ │ │ +00032b20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00032b30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00032b40: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +00032b50: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +00032b60: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">rew H │ │ │ +00032bf0: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 in y1 = y2) (H2': rew< │ │ │ +00032e90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H2 in │ │ │ +00032f70: 203c 6120 636c 6173 733d 2269 6472 6566 y2< │ │ │ +00032fd0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00033050: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y3) :
.  │ │ │ +000330c0: 3b26 6e62 7370 3b3c 6120 636c 6173 733d ; 
rew eq_trans H │ │ │ +00033200: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ +00033240: 3c73 7061 6e20 636c 6173 733d 2269 6422 H2 │ │ │ +00033270: 3c61 2063 6c61 7373 3d22 6964 7265 6622 in y │ │ │ +00033340: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 =
y3 │ │ │ +00033420: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Lemma< │ │ │ +00033460: 2f73 7061 6e3e 203c 6120 6964 3d22 6d61 /span> map_subs │ │ │ +000334c0: 743c 2f73 7061 6e3e 3c2f 613e 207b 3c61 t {A │ │ │ +00033520: 3c2f 613e 7d20 7b3c 6120 6964 3d22 503a } {P Q │ │ │ +000335d0: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A-> │ │ │ +000336a0: 3b3c 2f73 7061 6e3e 3c2f 613e 3c73 7061 ;Typ │ │ │ +000336d0: 653c 2f73 7061 6e3e 7d20 283c 6120 6964 e} (f : forall x, P │ │ │ +00033810: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00033870: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x -> │ │ │ +000338f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q x) {x │ │ │ +00033a10: 3c61 2069 643d 2279 3a33 3238 2220 636c y} (H: │ │ │ +00033ac0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +00033b20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00033b90: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c y │ │ │ +00033bf0: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (z │ │ │ +00033c50: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :P x) :
.& │ │ │ +00033d20: 6e62 7370 3b26 6e62 7370 3b3c 6120 636c nbsp; rew H in │ │ │ +00033e80: 203c 6120 636c 6173 733d 2269 6472 6566 f x z< │ │ │ +00033fa0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00034020: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ +00034080: 203c 6120 636c 6173 733d 2269 6472 6566 y (r │ │ │ +00034150: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ +00034190: 3c73 7061 6e20 636c 6173 733d 2269 6422 H < │ │ │ +000341c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000341d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000341e0: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +000341f0: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +00034200: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in
z).
│ │ │ +000342a0: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Lemma │ │ │ +00034310: 3c73 7061 6e20 636c 6173 733d 2269 6422 m │ │ │ +00034330: 6170 5f73 7562 7374 5f6d 6170 3c2f 7370 ap_subst_map {A │ │ │ +000343a0: 3c61 2069 643d 2242 3a33 3332 2220 636c B} {P: │ │ │ +00034450: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +000344b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->Type} { │ │ │ +00034580: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000345a0: 513c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 Q:< │ │ │ +000345e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000345f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00034600: 3e42 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >B-> │ │ │ +00034680: 3c2f 613e 3c73 7061 6e20 636c 6173 733d Type │ │ │ +000346b0: 7d20 283c 6120 6964 3d22 663a 3333 3522 } (f:A< │ │ │ +00034760: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>< │ │ │ +000347b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000347c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000347d0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >->B) (g< │ │ │ +00034890: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : fo │ │ │ +000348c0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall x, P │ │ │ +00034980: 3c2f 613e 203c 6120 636c 6173 733d 2269 x -&g │ │ │ +00034a50: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; │ │ │ +00034a90: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q ( │ │ │ +00034ac0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 f │ │ │ +00034b20: 203c 6120 636c 6173 733d 2269 6472 6566 x))
. & │ │ │ +00034b90: 6e62 7370 3b7b 3c61 2069 643d 2278 3a33 nbsp;{ │ │ │ +00034bc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00034be0: 783c 2f73 7061 6e3e 3c2f 613e 203c 6120 x y< │ │ │ +00034c40: 2f61 3e7d 2028 3c61 2069 643d 2248 3a33 /a>} ( │ │ │ +00034c70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00034c90: 483c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 H:< │ │ │ +00034cd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00034ce0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00034cf0: 3e78 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >x=
y
) (z:P x< │ │ │ +00034ef0: 2f61 3e29 203a 3c62 722f 3e0a 266e 6273 /a>) :
.&nbs │ │ │ +00034f00: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; 
rew f_equal
f H< │ │ │ +000350a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ +00035120: 3c2f 613e 203c 6120 636c 6173 733d 2269 g x z =< │ │ │ +000352c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> g │ │ │ +00035320: 3c2f 613e 203c 6120 636c 6173 733d 2269 y (rew H i │ │ │ +000354d0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n < │ │ │ +00035510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00035520: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00035530: 3e7a 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >z).< │ │ │ +00035540: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Lem │ │ │ +00035570: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma rew_swa │ │ │ +000355d0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p A< │ │ │ +00035630: 2f61 3e20 283c 6120 6964 3d22 503a 3334 /a> (< │ │ │ +00035660: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00035670: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ +00035680: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ +000356e0: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A->< │ │ │ +00035760: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a>Type) │ │ │ +00035790: 203c 6120 6964 3d22 7831 3a33 3434 2220 x1< │ │ │ +000357e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> x2 │ │ │ +00035840: 3c2f 613e 2028 3c61 2069 643d 2248 3a33 ( │ │ │ +00035870: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00035890: 483c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 H: │ │ │ +000358d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x1< │ │ │ +00035900: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00035910: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00035920: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00035930: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00035940: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00035970: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>x │ │ │ +000359d0: 323c 2f73 7061 6e3e 3c2f 613e 2920 283c 2) (< │ │ │ +000359e0: 6120 6964 3d22 7931 3a33 3437 2220 636c a id="y1:347" cl │ │ │ +000359f0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00035a00: 3d22 2379 313a 3334 3722 3e3c 7370 616e ="#y1:347">y1:P x │ │ │ +00035af0: 313c 2f73 7061 6e3e 3c2f 613e 2920 283c 1) (< │ │ │ +00035b00: 6120 6964 3d22 7932 3a33 3438 2220 636c a id="y2:348" cl │ │ │ +00035b10: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00035b20: 3d22 2379 323a 3334 3822 3e3c 7370 616e ="#y2:348">y2
:P x │ │ │ +00035c10: 323c 2f73 7061 6e3e 3c2f 613e 2920 3a20 2) : │ │ │ +00035c20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew< │ │ │ +00035c90: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> H │ │ │ +00035cf0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 in y1
= │ │ │ +00035e50: 3c2f 613e 203c 6120 636c 6173 733d 2269 y2 - │ │ │ +00035f20: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00035f30: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y1 │ │ │ +00035fe0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00036010: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00036020: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00036030: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +00036040: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f27 tions.:::'rew'_' │ │ │ +00036050: 266c 743b 2d27 5f78 5f27 696e 275f 7822 <-'_x_'in'_x" │ │ │ +00036060: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >rew <- H in y │ │ │ +00036250: 323c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2.
..
.Lemma │ │ │ +00036290: 3c2f 7370 616e 3e20 3c61 2069 643d 2272 rew │ │ │ +000362f0: 5f63 6f6d 706f 7365 3c2f 7370 616e 3e3c _compose< │ │ │ +00036300: 2f61 3e20 3c61 2069 643d 2241 3a33 3439 /a> A< │ │ │ +00036350: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (P:A< │ │ │ +00036410: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>->< │ │ │ +00036480: 2f73 7061 6e3e 3c2f 613e 3c73 7061 6e20 /span>Type< │ │ │ +000364b0: 2f73 7061 6e3e 2920 3c61 2069 643d 2278 /span>) x1 x2 │ │ │ +00036560: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 x3 (H1 │ │ │ +00036620: 3a3c 6120 636c 6173 733d 2269 6472 6566 :x1< │ │ │ +00036680: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +000366d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 =x2 │ │ │ +00036760: 2920 283c 6120 6964 3d22 4832 3a33 3535 ) (< │ │ │ +00036790: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000367a0: 7469 746c 653d 2262 696e 6465 7222 3e48 title="binder">H │ │ │ +000367b0: 323c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 2: │ │ │ +000367f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x2< │ │ │ +00036820: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00036830: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00036840: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00036850: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00036860: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00036890: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>x │ │ │ +000368f0: 333c 2f73 7061 6e3e 3c2f 613e 2920 283c 3) (< │ │ │ +00036900: 6120 6964 3d22 793a 3335 3622 2063 6c61 a id="y:356" cla │ │ │ +00036910: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00036920: 2223 793a 3335 3622 3e3c 7370 616e 2063 "#y:356">y:P x1) :
.  rew
H2 │ │ │ +00036b00: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 in │ │ │ +00036bd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +00036c00: 203c 6120 636c 6173 733d 2269 6472 6566 H1< │ │ │ +00036c60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ +00036cd0: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in │ │ │ +00036d10: 3c73 7061 6e20 636c 6173 733d 2269 6422 y < │ │ │ +00036d40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00036d50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00036d60: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00036d70: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00036d80: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00036db0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> rew │ │ │ +00036e80: 3c73 7061 6e20 636c 6173 733d 2269 6422 (eq_trans H1 H2 │ │ │ +00036fd0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c )< │ │ │ +00037050: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ +000370c0: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in │ │ │ +00037100: 3c73 7061 6e20 636c 6173 733d 2269 6422 y.< │ │ │ +00037130: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Extra prop │ │ │ +00037160: 6572 7469 6573 206f 6620 6571 7561 6c69 erties of equali │ │ │ +00037170: 7479 200a 3c2f 6469 763e 0a3c 6469 7620 ty .
.
..< │ │ │ +00037190: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Theorem eq_i │ │ │ +00037220: 645f 636f 6d6d 5f6c 3c2f 7370 616e 3e3c d_comm_l< │ │ │ +00037230: 2f61 3e20 3c61 2069 643d 2241 3a33 3537 /a> A< │ │ │ +00037280: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (f:A< │ │ │ +00037340: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>->< │ │ │ +000373b0: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>A< │ │ │ +00037410: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (Hf:forall │ │ │ +000374d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000374f0: 613c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 a, │ │ │ +00037530: 3c73 7061 6e20 636c 6173 733d 2269 6422 a < │ │ │ +00037560: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00037570: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00037580: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00037590: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +000375a0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +000375d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ +00037630: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00037690: 613c 2f73 7061 6e3e 3c2f 613e 2920 3c61 a) a │ │ │ +000376f0: 3c2f 613e 203a 203c 6120 636c 6173 733d : f_equa │ │ │ +00037750: 6c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 l < │ │ │ +00037790: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000377a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000377b0: 3e66 3c2f 7370 616e 3e3c 2f61 3e20 283c >f (< │ │ │ +000377c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000377d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000377e0: 6f67 6963 2e68 746d 6c23 4866 3a33 3630 ogic.html#Hf:360 │ │ │ +000377f0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Hf a) = │ │ │ +00037900: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Hf (f │ │ │ +000379c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 a).
...Theorem eq_id │ │ │ +00037ac0: 5f63 6f6d 6d5f 723c 2f73 7061 6e3e 3c2f _comm_r A (f:A->A) (Hf:forall
< │ │ │ +00037d70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00037d80: 7469 746c 653d 2262 696e 6465 7222 3e61 title="binder">a │ │ │ +00037d90: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ +00037dd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00037de0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00037df0: 3e66 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >f │ │ │ +00037e30: 3c73 7061 6e20 636c 6173 733d 2269 6422 a < │ │ │ +00037e60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00037e70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00037e80: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00037e90: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00037ea0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00037ed0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ +00037f30: 3c2f 7370 616e 3e3c 2f61 3e29 203c 6120 ) a< │ │ │ +00037f90: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : f_equal │ │ │ +00037ff0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00038050: 663c 2f73 7061 6e3e 3c2f 613e 2028 3c61 f (Hf │ │ │ +000380c0: 203c 6120 636c 6173 733d 2269 6472 6566 a) │ │ │ +00038170: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +000381a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000381b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000381c0: 6f67 6963 2e68 746d 6c23 4866 3a33 3635 ogic.html#Hf:365 │ │ │ +000381d0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">Hf (f< │ │ │ +00038260: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +000382c0: 3c2f 613e 292e 3c62 722f 3e0a 0a3c 6272 ).
..
.Lemma │ │ │ +00038300: 203c 6120 6964 3d22 6571 5f72 6566 6c5f eq_refl_map_di │ │ │ +00038370: 7374 723c 2f73 7061 6e3e 3c2f 613e 203c str < │ │ │ +00038380: 6120 6964 3d22 413a 3336 3922 2063 6c61 a id="A:369" cla │ │ │ +00038390: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000383a0: 2223 413a 3336 3922 3e3c 7370 616e 2063 "#A:369">A │ │ │ +00038400: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00038420: 423c 2f73 7061 6e3e 3c2f 613e 203c 6120 B x< │ │ │ +00038480: 2f61 3e20 283c 6120 6964 3d22 663a 3337 /a> (< │ │ │ +000384b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000384c0: 7469 746c 653d 2262 696e 6465 7222 3e66 title="binder">f │ │ │ +000384d0: 3c2f 7370 616e 3e3c 2f61 3e3a 3c61 2063 : │ │ │ +00038530: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A->< │ │ │ +000385b0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>B< │ │ │ +00038610: 2f61 3e29 203a 203c 6120 636c 6173 733d /a>) : f_equa │ │ │ +00038670: 6c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 l < │ │ │ +000386b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000386c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000386d0: 3e66 3c2f 7370 616e 3e3c 2f61 3e20 283c >f (< │ │ │ +000386e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000386f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00038700: 6f67 6963 2e68 746d 6c23 6571 5f72 6566 ogic.html#eq_ref │ │ │ +00038710: 6c22 3e3c 7370 616e 2063 6c61 7373 3d22 l">eq_refl< │ │ │ +00038740: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x │ │ │ +000387a0: 3c2f 7370 616e 3e3c 2f61 3e29 203c 6120 ) = eq_refl │ │ │ +00038890: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (f
x).
.. │ │ │ +00038960: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Lemma eq_trans_ │ │ │ +00038a00: 6d61 705f 6469 7374 723c 2f73 7061 6e3e map_distr │ │ │ +00038a10: 3c2f 613e 203c 6120 6964 3d22 413a 3337 < │ │ │ +00038a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00038a50: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +00038a60: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 B x y │ │ │ +00038b70: 203c 6120 6964 3d22 7a3a 3337 3722 2063 z (f: │ │ │ +00038c20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +00038c80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ->B) (e │ │ │ +00038db0: 3a3c 6120 636c 6173 733d 2269 6472 6566 :x │ │ │ +00038e80: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 = │ │ │ +00038ee0: 793c 2f73 7061 6e3e 3c2f 613e 2920 283c y) (< │ │ │ +00038ef0: 6120 6964 3d22 6527 3a33 3830 2220 636c a id="e':380" cl │ │ │ +00038f00: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00038f10: 3d22 2365 273a 3338 3022 3e3c 7370 616e ="#e':380">e':y= │ │ │ +00039020: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 z │ │ │ +00039080: 3c2f 613e 2920 3a20 3c61 2063 6c61 7373 ) : f_equ │ │ │ +000390e0: 616c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 al │ │ │ +00039120: 3c73 7061 6e20 636c 6173 733d 2269 6422 f ( │ │ │ +00039150: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_trans e e' │ │ │ +00039270: 3c2f 7370 616e 3e3c 2f61 3e29 203c 6120 ) =
eq_ │ │ │ +00039350: 7472 616e 733c 2f73 7061 6e3e 3c2f 613e trans │ │ │ +00039360: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (f_equal f e) ( │ │ │ +000394c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 f │ │ │ +000394e0: 5f65 7175 616c 3c2f 7370 616e 3e3c 2f61 _equal f e').
...Lemma eq_sym_map_dist │ │ │ +00039660: 723c 2f73 7061 6e3e 3c2f 613e 203c 6120 r A< │ │ │ +000396c0: 2f61 3e20 3c61 2069 643d 2242 3a33 3832 /a> B< │ │ │ +00039710: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2069 /span> (x y:A< │ │ │ +00039820: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (f< │ │ │ +00039880: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +000398e0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 -> │ │ │ +00039950: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B │ │ │ +000399b0: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (e │ │ │ +00039a10: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :x= │ │ │ +00039af0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 y │ │ │ +00039b50: 2920 3a20 3c61 2063 6c61 7373 3d22 6964 ) : eq_sym (f_eq │ │ │ +00039c10: 7561 6c3c 2f73 7061 6e3e 3c2f 613e 203c ual < │ │ │ +00039c20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00039c30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00039c40: 6f67 6963 2e68 746d 6c23 663a 3338 3522 ogic.html#f:385" │ │ │ +00039c50: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >f │ │ │ +00039c80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ +00039ce0: 2920 3c61 2063 6c61 7373 3d22 6964 7265 ) < │ │ │ +00039d30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00039d40: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00039d50: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= f_equal< │ │ │ +00039dc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f │ │ │ +00039e20: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (eq_sym e< │ │ │ +00039ee0: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
.Lemma< │ │ │ +00039f20: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_tra │ │ │ +00039f90: 6e73 5f73 796d 5f64 6973 7472 3c2f 7370 ns_sym_distr A ( │ │ │ +0003a000: 3c61 2069 643d 2278 3a33 3838 2220 636c x y z │ │ │ +0003a100: 3c2f 613e 3a3c 6120 636c 6173 733d 2269 :A) (e:< │ │ │ +0003a1c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003a1d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003a1e0: 6f67 6963 2e68 746d 6c23 783a 3338 3822 ogic.html#x:388" │ │ │ +0003a1f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x< │ │ │ +0003a220: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003a230: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003a240: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0003a250: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0003a260: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0003a290: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>y< │ │ │ +0003a2f0: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (e':y=z) : eq_sym ( │ │ │ +0003a530: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +0003a550: 715f 7472 616e 733c 2f73 7061 6e3e 3c2f q_trans e< │ │ │ +0003a5c0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e') =< │ │ │ +0003a6a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> eq_trans │ │ │ +0003a700: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 ( │ │ │ +0003a740: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +0003a760: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ +0003a770: 203c 6120 636c 6173 733d 2269 6472 6566 e'< │ │ │ +0003a7d0: 2f61 3e29 2028 3c61 2063 6c61 7373 3d22 /a>) (eq_sym e< │ │ │ +0003a890: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
.Lemma< │ │ │ +0003a8d0: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_tra │ │ │ +0003a940: 6e73 5f72 6577 5f64 6973 7472 3c2f 7370 ns_rew_distr A ( │ │ │ +0003a9b0: 3c61 2069 643d 2250 3a33 3934 2220 636c P:A - │ │ │ +0003aad0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0003aae0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type) (< │ │ │ +0003ab10: 6120 6964 3d22 783a 3339 3522 2063 6c61 a id="x:395" cla │ │ │ +0003ab20: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0003ab30: 2223 783a 3339 3522 3e3c 7370 616e 2063 "#x:395">x │ │ │ +0003ab90: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0003abb0: 793c 2f73 7061 6e3e 3c2f 613e 203c 6120 y z< │ │ │ +0003ac10: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +0003ac70: 3c2f 613e 2920 283c 6120 6964 3d22 653a ) (e: │ │ │ +0003ad00: 3c73 7061 6e20 636c 6173 733d 2269 6422 x=y) (e':y=z) (k< │ │ │ +0003aff0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:P │ │ │ +0003b050: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063
│ │ │ +0003b0b0: 783c 2f73 7061 6e3e 3c2f 613e 2920 3a3c x) :< │ │ │ +0003b0c0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0003b0d0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 6120 ;  rew ( │ │ │ +0003b1d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_trans e e' │ │ │ +0003b2f0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c )< │ │ │ +0003b370: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ +0003b3e0: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in │ │ │ +0003b420: 3c73 7061 6e20 636c 6173 733d 2269 6422 k < │ │ │ +0003b450: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003b460: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003b470: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0003b480: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0003b490: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0003b4c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> rew e' in r │ │ │ +0003b690: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ +0003b6d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e < │ │ │ +0003b700: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003b710: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003b720: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +0003b730: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +0003b740: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in k.
. │ │ │ +0003b7e0: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
.Lemma
rew_const< │ │ │ +0003b870: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> A P
(x │ │ │ +0003b980: 203c 6120 6964 3d22 793a 3430 3422 2063 y:A
) (e:x< │ │ │ +0003bb40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003bb50: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0003bb60: 3e3d 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >=< │ │ │ +0003bba0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003bbb0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0003bbc0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 2028 >y) ( │ │ │ +0003bbd0: 3c61 2069 643d 226b 3a34 3036 2220 636c k:P) :
. │ │ │ +0003bc90: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0003bca0: 703b 266e 6273 703b 3c61 2063 6c61 7373 p; rew [fun _ => P] │ │ │ +0003bed0: 3c2f 613e 203c 6120 636c 6173 733d 2269 e in k< │ │ │ +0003c010: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +0003c090: 3c61 2063 6c61 7373 3d22 6964 7265 6622 k │ │ │ +0003c0f0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 0a3c .
..
..< │ │ │ +0003c100: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Notation sym_eq := │ │ │ +0003c1d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +0003c1f0: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ +0003c200: 2028 3c73 7061 6e20 636c 6173 733d 2269 (o │ │ │ +0003c220: 6e6c 793c 2f73 7061 6e3e 203c 7370 616e nly parsing< │ │ │ +0003c250: 2f73 7061 6e3e 292e 3c62 722f 3e0a 3c73 /span>).
.N │ │ │ +0003c280: 6f74 6174 696f 6e3c 2f73 7061 6e3e 203c otation
< │ │ │ +0003c290: 6120 6964 3d22 7472 616e 735f 6571 2220 a id="trans_eq" │ │ │ +0003c2a0: 636c 6173 733d 2269 6472 6566 2220 6872 class="idref" hr │ │ │ +0003c2b0: 6566 3d22 2374 7261 6e73 5f65 7122 3e3c ef="#trans_eq">< │ │ │ +0003c2c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003c2d0: 7469 746c 653d 2261 6262 7265 7669 6174 title="abbreviat │ │ │ +0003c2e0: 696f 6e22 3e74 7261 6e73 5f65 713c 2f73 ion">trans_eq := │ │ │ +0003c350: 6571 5f74 7261 6e73 3c2f 7370 616e 3e3c eq_trans< │ │ │ +0003c360: 2f61 3e20 283c 7370 616e 2063 6c61 7373 /a> (only parsi │ │ │ +0003c3b0: 6e67 3c2f 7370 616e 3e29 2e3c 6272 2f3e ng
).
│ │ │ +0003c3c0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Notation
sym_ │ │ │ +0003c450: 6e6f 745f 6571 3c2f 7370 616e 3e3c 2f61 not_eq := not_e │ │ │ +0003c4c0: 715f 7379 6d3c 2f73 7061 6e3e 3c2f 613e q_sym │ │ │ +0003c4d0: 2028 3c73 7061 6e20 636c 6173 733d 2269 (o │ │ │ +0003c4f0: 6e6c 793c 2f73 7061 6e3e 203c 7370 616e nly parsing< │ │ │ +0003c520: 2f73 7061 6e3e 292e 3c62 722f 3e0a 0a3c /span>).
..< │ │ │ +0003c530: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Notation │ │ │ +0003c5c0: 7265 666c 5f65 7175 616c 3c2f 7370 616e refl_equal := eq_refl │ │ │ +0003c640: 3c2f 613e 2028 3c73 7061 6e20 636c 6173 (only < │ │ │ +0003c670: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003c680: 7469 746c 653d 2276 6172 223e 7061 7273 title="var">pars │ │ │ +0003c690: 696e 673c 2f73 7061 6e3e 292e 3c62 722f ing
).
.Notation sym_e │ │ │ +0003c730: 7175 616c 3c2f 7370 616e 3e3c 2f61 3e20 qual │ │ │ +0003c740: 3a3d 203c 6120 636c 6173 733d 2269 6472 := eq_sym (only │ │ │ +0003c7d0: 203c 7370 616e 2063 6c61 7373 3d22 6964 pa │ │ │ +0003c7f0: 7273 696e 673c 2f73 7061 6e3e 292e 3c62 rsing)..Notation
trans_equal
:= │ │ │ +0003c8e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +0003c900: 715f 7472 616e 733c 2f73 7061 6e3e 3c2f q_trans (only parsin │ │ │ +0003c960: 673c 2f73 7061 6e3e 292e 3c62 722f 3e0a g).
. │ │ │ +0003c970: 3c73 7061 6e20 636c 6173 733d 2269 6422 Notation │ │ │ +0003c9a0: 203c 6120 6964 3d22 7379 6d5f 6e6f 745f
sym_not_equal := not_eq_sym
(only │ │ │ +0003cad0: 7061 7273 696e 673c 2f73 7061 6e3e 292e parsing). │ │ │ +0003cae0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a23 5b3c
..
.#[< │ │ │ +0003caf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003cb00: 7469 746c 653d 2276 6172 223e 676c 6f62 title="var">glob │ │ │ +0003cb10: 616c 3c2f 7370 616e 3e5d 3c62 722f 3e0a al
]
. │ │ │ +0003cb20: 3c73 7061 6e20 636c 6173 733d 2269 6422 Hint Im │ │ │ +0003cb70: 6d65 6469 6174 653c 2f73 7061 6e3e 203c mediate < │ │ │ +0003cb80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003cb90: 7469 746c 653d 2276 6172 223e 6571 5f73 title="var">eq_s │ │ │ +0003cba0: 796d 3c2f 7370 616e 3e20 3c73 7061 6e20 ym not_eq_sy │ │ │ +0003cbd0: 6d3c 2f73 7061 6e3e 3a20 3c73 7061 6e20 m: core.
..
. │ │ │ +0003cc10: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Basic │ │ │ +0003cc30: 6465 6669 6e69 7469 6f6e 7320 6162 6f75 definitions abou │ │ │ +0003cc40: 7420 7265 6c61 7469 6f6e 7320 616e 6420 t relations and │ │ │ +0003cc50: 7072 6f70 6572 7469 6573 200a 3c2f 6469 properties ..
..
.De │ │ │ +0003cca0: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ +0003ccb0: 3c61 2069 643d 2273 7562 7265 6c61 7469 subrel │ │ │ +0003cd10: 6174 696f 6e3c 2f73 7061 6e3e 3c2f 613e ation │ │ │ +0003cd20: 2028 3c61 2069 643d 2241 3a34 3037 2220 (A
B │ │ │ +0003cdd0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : Type) │ │ │ +0003ce00: 283c 6120 6964 3d22 523a 3430 3922 2063 (R R' : A │ │ │ +0003cf10: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 -> │ │ │ +0003cf80: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c B │ │ │ +0003cfe0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +0003d030: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->Prop) │ │ │ +0003d090: 3a3d 3c62 722f 3e0a 266e 6273 703b 266e :=
. &n │ │ │ +0003d0a0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;forall
x y │ │ │ +0003d180: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , R x< │ │ │ +0003d240: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> y │ │ │ +0003d2a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +0003d310: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; │ │ │ +0003d350: 3c73 7061 6e20 636c 6173 733d 2269 6422 R' │ │ │ +0003d380: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +0003d3e0: 203c 6120 636c 6173 733d 2269 6472 6566 y.
..
.< │ │ │ +0003d450: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003d460: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0003d470: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition unique< │ │ │ +0003d4e0: 2f61 3e20 283c 6120 6964 3d22 413a 3431 /a> (< │ │ │ +0003d510: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003d520: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +0003d530: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : T │ │ │ +0003d560: 7970 653c 2f73 7061 6e3e 2920 283c 6120 ype) (P< │ │ │ +0003d5c0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A-&g │ │ │ +0003d690: 743b 3c2f 7370 616e 3e3c 2f61 3e3c 7370 t;Pr │ │ │ +0003d6c0: 6f70 3c2f 7370 616e 3e29 2028 3c61 2069 op) (x:A< │ │ │ +0003d780: 2f61 3e29 203a 3d3c 6272 2f3e 0a26 6e62 /a>) :=
.&nb │ │ │ +0003d790: 7370 3b26 6e62 7370 3b3c 6120 636c 6173 sp; 
P x< │ │ │ +0003d850: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> /\
forall< │ │ │ +0003d900: 2f73 7061 6e3e 2028 3c61 2069 643d 2278 /span> (x':A), P x'
│ │ │ +0003daf0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0003db00: 203c 6120 636c 6173 733d 2269 6472 6566 x │ │ │ +0003dbd0: 3d3c 2f73 7061 6e3e 3c2f 613e 3c61 2063 =< │ │ │ +0003dc10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003dc20: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0003dc30: 3e78 273c 2f73 7061 6e3e 3c2f 613e 2e3c >x'.< │ │ │ +0003dc40: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.Def │ │ │ +0003dc70: 696e 6974 696f 6e3c 2f73 7061 6e3e 203c inition < │ │ │ +0003dc80: 6120 6964 3d22 756e 6971 7565 6e65 7373 a id="uniqueness │ │ │ +0003dc90: 2220 636c 6173 733d 2269 6472 6566 2220 " class="idref" │ │ │ +0003dca0: 6872 6566 3d22 2375 6e69 7175 656e 6573 href="#uniquenes │ │ │ +0003dcb0: 7322 3e3c 7370 616e 2063 6c61 7373 3d22 s">uniquenes │ │ │ +0003dce0: 733c 2f73 7061 6e3e 3c2f 613e 2028 3c61 s (A │ │ │ +0003dd40: 3c2f 613e 3a3c 7370 616e 2063 6c61 7373 :Type) (P< │ │ │ +0003ddc0: 2f73 7061 6e3e 3c2f 613e 3a3c 6120 636c /span>:A │ │ │ +0003de20: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c │ │ │ +0003de70: 3c73 7061 6e20 636c 6173 733d 2269 6422 ->Prop) │ │ │ +0003ded0: 3a3d 203c 7370 616e 2063 6c61 7373 3d22 := forall x y, │ │ │ +0003dfb0: 203c 6120 636c 6173 733d 2269 6472 6566 P x ->< │ │ │ +0003e0e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ +0003e140: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0003e1a0: 793c 2f73 7061 6e3e 3c2f 613e 203c 6120 y -> │ │ │ +0003e220: 3c2f 613e 203c 6120 636c 6173 733d 2269 x = y.
..
. │ │ │ +0003e370: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Unique │ │ │ +0003e390: 2065 7869 7374 656e 6365 200a 3c2f 6469 existence ..
..
.No │ │ │ +0003e3e0: 7461 7469 6f6e 3c2f 7370 616e 3e20 3c61 tation
│ │ │ +0003e470: 2671 756f 743b 3c2f 7370 616e 3e3c 2f61 "'exists' ! x .. │ │ │ +0003e490: 2079 202c 2070 2220 3a3d 3c62 722f 3e0a y , p" :=
. │ │ │ +0003e4a0: 266e 6273 703b 266e 6273 703b 283c 6120   (e │ │ │ +0003e500: 783c 2f73 7061 6e3e 3c2f 613e 2028 3c61 x (unique (fun x< │ │ │ +0003e5f0: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +0003e600: 202e 2e20 283c 6120 636c 6173 733d 2269 .. (ex │ │ │ +0003e660: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 (uni │ │ │ +0003e6c0: 7175 653c 2f73 7061 6e3e 3c2f 613e 2028 que ( │ │ │ +0003e6d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun y => p)) │ │ │ +0003e780: 2920 2e2e 2929 293c 6272 2f3e 0a26 6e62 ) ..)))
.&nb │ │ │ +0003e790: 7370 3b26 6e62 7370 3b28 3c73 7061 6e20 sp; (at level 200, x binder │ │ │ +0003e840: 3c2f 7370 616e 3e2c 203c 7370 616e 2063 , right associati │ │ │ +0003e8a0: 7669 7479 3c2f 7370 616e 3e2c 3c62 722f vity,
.  &n │ │ │ +0003e8c0: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;format " │ │ │ +0003e8f0: 275b 2720 2765 7869 7374 7327 2020 2120 '[' 'exists' ! │ │ │ +0003e900: 2027 2f20 2027 2078 2020 2e2e 2020 7920 '/ ' x .. y │ │ │ +0003e910: 2c20 2027 2f20 2027 2070 2027 5d27 2229 , '/ ' p ']'") │ │ │ +0003e920: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0003e930: 703b 3a20 3c73 7061 6e20 636c 6173 733d p;: type_scope.
..
. │ │ │ +0003e970: 3c73 7061 6e20 636c 6173 733d 2269 6422 Lemma
uni │ │ │ +0003ea00: 7175 655f 6578 6973 7465 6e63 653c 2f73 que_existence : fora │ │ │ +0003ea40: 6c6c 3c2f 7370 616e 3e20 283c 6120 6964 ll (A:Type) │ │ │ +0003ead0: 283c 6120 6964 3d22 503a 3432 3422 2063 (P:A
- │ │ │ +0003ebf0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e3c >
< │ │ │ +0003ec00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003ec10: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0003ec20: 5072 6f70 3c2f 7370 616e 3e29 2c3c 6272 Prop),
.  < │ │ │ +0003ec40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003ec50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003ec60: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0003ec70: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0003ec80: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">(( │ │ │ +0003eda0: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists x,< │ │ │ +0003ee80: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ +0003eee0: 3c2f 613e 203c 6120 636c 6173 733d 2269 x) │ │ │ +0003efc0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0003f030: 2f5c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 /\ uniquen │ │ │ +0003f0a0: 6573 733c 2f73 7061 6e3e 3c2f 613e 203c ess < │ │ │ +0003f0b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003f0c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003f0d0: 6f67 6963 2e68 746d 6c23 503a 3432 3422 ogic.html#P:424" │ │ │ +0003f0e0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P< │ │ │ +0003f110: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003f120: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003f130: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0003f140: 5f73 636f 7065 3a78 5f27 266c 743b 2d26 _scope:x_'<-& │ │ │ +0003f150: 6774 3b27 5f78 223e 3c73 7061 6e20 636c gt;'_x">) │ │ │ +0003f1d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> │ │ │ +0003f250: 3c73 7061 6e20 636c 6173 733d 2269 6422 (exi │ │ │ +0003f2f0: 7374 733c 2f73 7061 6e3e 3c2f 613e 3c61 sts! x │ │ │ +0003f3d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ +0003f440: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0003f4a0: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ +0003f4e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003f4f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0003f500: 3e78 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >x) │ │ │ +0003f580: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.Lemma │ │ │ +0003f5c0: 3c61 2069 643d 2266 6f72 616c 6c5f 6578 forall_ex │ │ │ +0003f650: 6973 7473 5f75 6e69 7175 655f 646f 6d61 ists_unique_doma │ │ │ +0003f660: 696e 5f63 6f69 6e63 6964 653c 2f73 7061 in_coincide :
.&n │ │ │ +0003f680: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; foral │ │ │ +0003f6b0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l A │ │ │ +0003f710: 283c 6120 6964 3d22 503a 3432 3822 2063 (P:A
- │ │ │ +0003f830: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e3c >< │ │ │ +0003f840: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003f850: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0003f860: 5072 6f70 3c2f 7370 616e 3e29 2c20 3c61 Prop), ( │ │ │ +0003f950: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists │ │ │ +0003f9d0: 213c 2f73 7061 6e3e 3c2f 613e 203c 6120 ! x< │ │ │ +0003fa30: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +0003fa80: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ +0003fab0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0003fac0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0003fad0: 6f67 6963 2e68 746d 6c23 503a 3432 3822 ogic.html#P:428" │ │ │ +0003fae0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0003fb10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +0003fb70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 )< │ │ │ +0003fbe0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0003fc50: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0003fc60: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  fo │ │ │ +0003fc90: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall Q:A< │ │ │ +0003fd50: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>->< │ │ │ +0003fdc0: 2f73 7061 6e3e 3c2f 613e 3c73 7061 6e20 /span>Prop< │ │ │ +0003fdf0: 2f73 7061 6e3e 2c20 3c61 2063 6c61 7373 /span>, (< │ │ │ +0003fe70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0003fe80: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0003fe90: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall x │ │ │ +0003fef0: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , P x - │ │ │ +00040020: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00040030: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +00040090: 203c 6120 636c 6173 733d 2269 6472 6566 x)
<->
( │ │ │ +00040260: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ +000402d0: 7869 7374 733c 2f73 7061 6e3e 3c2f 613e xists │ │ │ +000402e0: 203c 6120 6964 3d22 783a 3433 3222 2063 x, P< │ │ │ +00040410: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ +00040470: 3c2f 613e 203c 6120 636c 6173 733d 2269 /\ Q x< │ │ │ +000405b0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>)< │ │ │ +00040620: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00040630: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Lemma for │ │ │ +000406f0: 616c 6c5f 6578 6973 7473 5f63 6f69 6e63 all_exists_coinc │ │ │ +00040700: 6964 655f 756e 6971 7565 5f64 6f6d 6169 ide_unique_domai │ │ │ +00040710: 6e3c 2f73 7061 6e3e 3c2f 613e 203a 3c62 n :.   │ │ │ +00040730: 3c73 7061 6e20 636c 6173 733d 2269 6422 forall < │ │ │ +00040760: 6120 6964 3d22 413a 3433 3322 2063 6c61 a id="A:433" cla │ │ │ +00040770: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00040780: 2223 413a 3433 3322 3e3c 7370 616e 2063 "#A:433">A (P: │ │ │ +00040840: 3c73 7061 6e20 636c 6173 733d 2269 6422 A->Prop),
. & │ │ │ +00040920: 6e62 7370 3b3c 6120 636c 6173 733d 2269 nbsp;(
forall< │ │ │ +000409c0: 2f73 7061 6e3e 203c 6120 6964 3d22 513a /span> Q: │ │ │ +00040a50: 3c73 7061 6e20 636c 6173 733d 2269 6422 A->Prop, (< │ │ │ +00040b90: 2f73 7061 6e3e 3c2f 613e 3c73 7061 6e20 /span>foral │ │ │ +00040bc0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l x, │ │ │ +00040c20: 203c 6120 636c 6173 733d 2269 6472 6566 P x ->< │ │ │ +00040d50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ +00040db0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00040e10: 783c 2f73 7061 6e3e 3c2f 613e 3c61 2063 x)< │ │ │ +00040e90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> & │ │ │ +00040f00: 6c74 3b2d 2667 743b 3c2f 7370 616e 3e3c lt;->< │ │ │ +00040f10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ( │ │ │ +00040f80: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c exists │ │ │ +00041000: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 x< │ │ │ +000410b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000410c0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000410d0: 3e2c 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >, │ │ │ +00041110: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ +00041140: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00041150: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00041160: 6f67 6963 2e68 746d 6c23 783a 3433 3722 ogic.html#x:437" │ │ │ +00041170: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x │ │ │ +000411a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 / │ │ │ +00041210: 5c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 \ < │ │ │ +00041250: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00041260: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00041270: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ +000412b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 x))
.&n │ │ │ +000413d0: 6273 703b 266e 6273 703b 3c61 2063 6c61 bsp; < │ │ │ +00041420: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00041430: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00041440: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> (exists! │ │ │ +000415c0: 203c 6120 6964 3d22 783a 3433 3822 2063 x, P< │ │ │ +000416f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> x │ │ │ +00041750: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 ).
..< │ │ │ +000417d0: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...< │ │ │ +000417f0: 6120 6964 3d22 6c61 6238 3631 223e 3c2f a id="lab861">

Being inha │ │ │ +00041820: 6269 7465 643c 2f68 313e 0a0a 3c64 6976 bited

..
.. The │ │ │ +00041850: 2070 7265 6469 6361 7465 203c 7370 616e predicate inhabited can be │ │ │ +000418b0: 7573 6564 2069 6e20 6469 6666 6572 656e used in differen │ │ │ +000418c0: 7420 636f 6e74 6578 7473 2e20 4966 203c t contexts. If < │ │ │ +000418d0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000418e0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A
is. thou │ │ │ +00041920: 6768 7420 6173 2061 2074 7970 652c 203c ght as a type, < │ │ │ +00041930: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00041940: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">inhabited A states that < │ │ │ +000419d0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +000419e0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">A
is inhabite │ │ │ +00041a20: 642e 2049 6620 3c73 7061 6e20 636c 6173 d. If < │ │ │ +00041a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00041a50: 7469 746c 653d 2276 6172 223e 413c 2f73 title="var">A
is. │ │ │ +00041a70: 2020 2074 686f 7567 6874 2061 7320 6120 thought as a │ │ │ +00041a80: 636f 6d70 7574 6174 696f 6e61 6c6c 7920 computationally │ │ │ +00041a90: 7265 6c65 7661 6e74 2070 726f 706f 7369 relevant proposi │ │ │ +00041aa0: 7469 6f6e 2c20 7468 656e 0a20 2020 203c tion, then. < │ │ │ +00041ab0: 7370 616e 2063 6c61 7373 3d22 696e 6c69 span class="inli │ │ │ +00041ac0: 6e65 636f 6465 223e 3c73 7061 6e20 636c necode">inhabited A weakens A │ │ │ +00041b90: 2073 6f20 6173 2074 6f20 6869 6465 2069 so as to hide i │ │ │ +00041ba0: 7473 2063 6f6d 7075 7461 7469 6f6e 616c ts computational │ │ │ +00041bb0: 206d 6561 6e69 6e67 2e0a 2020 2020 5468 meaning.. Th │ │ │ +00041bc0: 6520 736f 2d77 6561 6b65 6e65 6420 7072 e so-weakened pr │ │ │ +00041bd0: 6f6f 6620 7265 6d61 696e 7320 636f 6d70 oof remains comp │ │ │ +00041be0: 7574 6174 696f 6e61 6c6c 7920 7265 6c65 utationally rele │ │ │ +00041bf0: 7661 6e74 2062 7574 206f 6e6c 7920 696e vant but only in │ │ │ +00041c00: 0a20 2020 2061 2070 726f 706f 7369 7469 . a propositi │ │ │ +00041c10: 6f6e 616c 2063 6f6e 7465 7874 2e0a 0a3c onal context...< │ │ │ +00041c20: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
..
. │ │ │ +00041c40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Inductive inha │ │ │ +00041d20: 6269 7465 643c 2f73 7061 6e3e 3c2f 7370 bited ( │ │ │ +00041d40: 3c61 2069 643d 2241 3a34 3431 2220 636c A:Type) : Prop := inha │ │ │ +00041e50: 6269 7473 3c2f 7370 616e 3e3c 2f61 3e20 bits │ │ │ +00041e60: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A ->< │ │ │ +00041f30: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> inhabite │ │ │ +00041fa0: 643c 2f73 7061 6e3e 3c2f 613e 203c 6120 d < │ │ │ +00041fe0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00041ff0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00042000: 3e41 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >A...
.#[global │ │ │ +00042040: 3c2f 7370 616e 3e5d 3c62 722f 3e0a 3c73
]
.H │ │ │ +00042070: 696e 743c 2f73 7061 6e3e 203c 7370 616e int Reso │ │ │ +000420a0: 6c76 653c 2f73 7061 6e3e 203c 7370 616e lve inhabits │ │ │ +000420d0: 3c2f 7370 616e 3e3a 203c 7370 616e 2063 : core.
..
.< │ │ │ +00042110: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00042120: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00042130: 4c65 6d6d 613c 2f73 7061 6e3e 203c 6120 Lemma exis │ │ │ +000421a0: 7473 5f69 6e68 6162 6974 6564 3c2f 7370 ts_inhabited : foral │ │ │ +000421e0: 6c3c 2f73 7061 6e3e 2028 3c61 2069 643d l (A │ │ │ +00042240: 3a3c 7370 616e 2063 6c61 7373 3d22 6964 :Type) ( │ │ │ +00042270: 3c61 2069 643d 2250 3a34 3435 2220 636c P:A-& │ │ │ +00042390: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 3c73 gt;P │ │ │ +000423c0: 726f 703c 2f73 7061 6e3e 292c 3c62 722f rop),
.  ( │ │ │ +000424c0: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists x,< │ │ │ +000425a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ +00042600: 3c2f 613e 203c 6120 636c 6173 733d 2269 x)
│ │ │ +00042740: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00042750: 203c 6120 636c 6173 733d 2269 6472 6566 inhabi │ │ │ +000427b0: 7465 643c 2f73 7061 6e3e 3c2f 613e 203c ted < │ │ │ +000427c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000427d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000427e0: 6f67 6963 2e68 746d 6c23 413a 3434 3422 ogic.html#A:444" │ │ │ +000427f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A. │ │ │ +00042820: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
..
.Le │ │ │ +00042850: 6d6d 613c 2f73 7061 6e3e 203c 6120 6964 mma │ │ │ +000428c0: 696e 6861 6269 7465 645f 636f 7661 7269 inhabited_covari │ │ │ +000428d0: 616e 743c 2f73 7061 6e3e 3c2f 613e 2028 ant ( │ │ │ +000428e0: 3c61 2069 643d 2241 3a34 3437 2220 636c A B : │ │ │ +00042990: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type) : │ │ │ +000429c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 (< │ │ │ +00042a30: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>A< │ │ │ +00042a90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00042b00: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00042b60: 423c 2f73 7061 6e3e 3c2f 613e 3c61 2063 B) │ │ │ +00042be0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> inhabited A -& │ │ │ +00042d90: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00042da0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00042db0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00042dc0: 6f67 6963 2e68 746d 6c23 696e 6861 6269 ogic.html#inhabi │ │ │ +00042dd0: 7465 6422 3e3c 7370 616e 2063 6c61 7373 ted">inhabite │ │ │ +00042e00: 643c 2f73 7061 6e3e 3c2f 613e 203c 6120 d < │ │ │ +00042e40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00042e50: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00042e60: 3e42 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >B...
.
..
.Declaration │ │ │ +00042ea0: 206f 6620 7374 6570 6c20 616e 6420 7374 of stepl and st │ │ │ +00042eb0: 6570 7220 666f 7220 6571 2061 6e64 2069 epr for eq and i │ │ │ +00042ec0: 6666 200a 3c2f 6469 763e 0a3c 6469 7620 ff .
.
..< │ │ │ +00042ee0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Lemma eq_stepl : forall< │ │ │ +00042fa0: 2f73 7061 6e3e 2028 3c61 2069 643d 2241 /span> (A : │ │ │ +00043000: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type) ( │ │ │ +00043030: 3c61 2069 643d 2278 3a34 3530 2220 636c x y z │ │ │ +00043130: 3c2f 613e 203a 203c 6120 636c 6173 733d : A), x< │ │ │ +000431f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = y - │ │ │ +00043340: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00043350: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +000433b0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00043420: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +00043460: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00043470: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00043480: 3e7a 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >z -> z = y< │ │ │ +00043640: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00043650: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .Declare Left S │ │ │ +00043680: 7465 703c 2f73 7061 6e3e 203c 6120 636c tep
│ │ │ +000436c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 e │ │ │ +000436e0: 715f 7374 6570 6c3c 2f73 7061 6e3e 3c2f q_stepl.
.Declar │ │ │ +00043720: 6520 5269 6768 7420 5374 6570 3c2f 7370 e Right Step
eq_trans │ │ │ +00043790: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
..
.Lemma< │ │ │ +000437d0: 2f73 7061 6e3e 203c 6120 6964 3d22 6966 /span> iff_step │ │ │ +00043830: 6c3c 2f73 7061 6e3e 3c2f 613e 203a 203c l : < │ │ │ +00043840: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00043850: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00043860: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall A │ │ │ +000438c0: 3c2f 613e 203c 6120 6964 3d22 423a 3435 < │ │ │ +000438f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00043900: 7469 746c 653d 2262 696e 6465 7222 3e42 title="binder">B │ │ │ +00043910: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 C : Prop, (A │ │ │ +00043ac0: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> B)< │ │ │ +00043bc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00043c10: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> (A │ │ │ +00043d60: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> C)< │ │ │ +00043e60: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00043eb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> (C │ │ │ +00044000: 3c73 7061 6e20 636c 6173 733d 2269 6422 <-> B)< │ │ │ +00044100: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00044110: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
.Declare │ │ │ +00044140: 204c 6566 7420 5374 6570 3c2f 7370 616e Left Step iff_stepl │ │ │ +000441b0: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.Declare Right │ │ │ +000441f0: 2053 7465 703c 2f73 7061 6e3e 203c 6120 Step iff_trans.
...
..
.Mo │ │ │ +00044290: 7265 2070 726f 7065 7274 6965 7320 6f66 re properties of │ │ │ +000442a0: 203c 7370 616e 2063 6c61 7373 3d22 696e ex │ │ │ +000442e0: 3c2f 7370 616e 3e20 616e 6420 3c73 7061 and ex2 that rely on │ │ │ +00044340: 2065 7175 616c 6974 7920 6265 696e 6720 equality being │ │ │ +00044350: 7072 6573 656e 7420 0a3c 6469 7620 636c present .
│ │ │ +00044370: 203c 2f64 6976 3e0a 0a20 5765 2064 6566
.. We def │ │ │ +00044380: 696e 6520 7265 7374 7269 6374 6564 2076 ine restricted v │ │ │ +00044390: 6572 7369 6f6e 7320 6f66 203c 7370 616e ersions of ex_rect< │ │ │ +000443e0: 2f73 7061 6e3e 2061 6e64 203c 7370 616e /span> and ex_rec which. │ │ │ +00044440: 616c 6c6f 7720 656c 696d 696e 6174 696f allow eliminatio │ │ │ +00044450: 6e20 696e 746f 206e 6f6e 2d50 726f 7020 n into non-Prop │ │ │ +00044460: 736f 7274 7320 7768 656e 2074 6865 2069 sorts when the i │ │ │ +00044470: 6e64 7563 7469 7665 2069 7320 6e6f 740a nductive is not. │ │ │ +00044480: 2020 2020 696e 666f 726d 6174 6976 6520 informative │ │ │ +00044490: 0a3c 6469 7620 636c 6173 733d 2270 6172 .
. │ │ │ +000444b0: 0a20 ceb7 2050 7269 6e63 6970 6c65 7320 . .. Principles │ │ │ +000444c0: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.Defi │ │ │ +00044500: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition ex │ │ │ +00044560: 5f65 7461 3c2f 7370 616e 3e3c 2f61 3e20 _eta │ │ │ +00044570: 7b3c 6120 6964 3d22 413a 3435 3622 2063 {A : Prop< │ │ │ +000445f0: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P} │ │ │ +00044650: 2028 3c61 2069 643d 2270 3a34 3539 2220 (p : exists │ │ │ +00044720: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 a : A, │ │ │ +00044860: 203c 6120 636c 6173 733d 2269 6472 6566 P a)
. & │ │ │ +00044930: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;:
p =< │ │ │ +00044a10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex │ │ │ +00044a70: 5f69 6e74 726f 3c2f 7370 616e 3e3c 2f61 _intro _ │ │ │ +00044aa0: 3c2f 7370 616e 3e20 283c 6120 636c 6173 (ex_proj1 p) (ex_proj2 p).
. . │ │ │ +00044c50: 3c62 722f 3e0a 3c73 7061 6e20 636c 6173
.Definitio │ │ │ +00044c80: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n ex2_e │ │ │ +00044ce0: 7461 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ta {< │ │ │ +00044cf0: 6120 6964 3d22 413a 3436 3022 2063 6c61 a id="A:460" cla │ │ │ +00044d00: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00044d10: 2223 413a 3436 3022 3e3c 7370 616e 2063 "#A:460">A : Prop
} {P Q │ │ │ +00044e20: 3c2f 613e 7d20 283c 6120 6964 3d22 703a } (p : │ │ │ +00044e80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ +00044ef0: 7869 7374 7332 3c2f 7370 616e 3e3c 2f61 xists2 a │ │ │ +00044f70: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 : A
,< │ │ │ +000450d0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ +00045130: 3c2f 613e 203c 6120 636c 6173 733d 2269 a & Q a)
.&n │ │ │ +000452e0: 6273 703b 266e 6273 703b 3a20 3c61 2063 bsp; : │ │ │ +00045340: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p = < │ │ │ +00045400: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00045410: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +00045420: 6f72 223e 6578 5f69 6e74 726f 323c 2f73 or">ex_intro2
_ < │ │ │ +00045460: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00045470: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_
(e │ │ │ +000454e0: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 (ex │ │ │ +00045550: 5f6f 665f 6578 323c 2f73 7061 6e3e 3c2f _of_ex2 p< │ │ │ +000455c0: 2f61 3e29 2920 283c 6120 636c 6173 733d /a>)) ( │ │ │ +00045620: 6578 5f70 726f 6a32 3c2f 7370 616e 3e3c ex_proj2< │ │ │ +00045630: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (e │ │ │ +00045690: 785f 6f66 5f65 7832 3c2f 7370 616e 3e3c x_of_ex2< │ │ │ +000456a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ +00045700: 3c2f 613e 2929 2028 3c61 2063 6c61 7373 )) (ex_proj3 │ │ │ +00045770: 3c2f 613e 203c 6120 636c 6173 733d 2269 p).
. .< │ │ │ +000457e0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Section
ex_Prop.
.&nb │ │ │ +00045880: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Variab │ │ │ +000458b0: 6c65 733c 2f73 7061 6e3e 2028 3c61 2069 les ( │ │ │ +00045910: 413c 2f73 7061 6e3e 3c2f 613e 3a3c 7370 A:Pr │ │ │ +00045940: 6f70 3c2f 7370 616e 3e29 2028 3c61 2069 op) ( │ │ │ +000459a0: 503c 2f73 7061 6e3e 3c2f 613e 3a3c 6120 P:< │ │ │ +000459e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000459f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00045a00: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A-> │ │ │ +00045a80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d Prop │ │ │ +00045ab0: 292e 3c62 722f 3e0a 0a3c 6272 2f3e 0a26 ).
..
.& │ │ │ +00045ac0: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ +00045af0: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition │ │ │ +00045b50: 6578 5f72 6563 743c 2f73 7061 6e3e 3c2f ex_rect ( │ │ │ +00045b90: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00045bb0: 5030 3c2f 7370 616e 3e3c 2f61 3e20 3a20 P0 : │ │ │ +00045bc0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +00045bf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00045c00: 7469 746c 653d 2269 6e64 7563 7469 7665 title="inductive │ │ │ +00045c10: 223e 6578 3c2f 7370 616e 3e3c 2f61 3e20 ">ex │ │ │ +00045c20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +00045c80: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00045cf0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Ty │ │ │ +00045d20: 7065 3c2f 7370 616e 3e29 2028 3c61 2069 pe) (f : forall x< │ │ │ +00045e00: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> p, P0 (ex_intro │ │ │ +00045f30: 3c2f 613e 203c 6120 636c 6173 733d 2269 P x< │ │ │ +00045ff0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ +00046050: 3c2f 7370 616e 3e3c 2f61 3e29 293c 6272 ))
.  & │ │ │ +00046070: 6e62 7370 3b26 6e62 7370 3b3a 203c 7370 nbsp; : fo │ │ │ +000460a0: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall e, P0 e
.&nb │ │ │ +000461d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000461e0: 6e62 7370 3b3a 3d20 3c73 7061 6e20 636c nbsp;:= fun
e< │ │ │ +00046260: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +00046270: 203c 6120 636c 6173 733d 2269 6472 6566 rew< │ │ │ +000462f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> <- │ │ │ +000463d0: 6578 5f65 7461 3c2f 7370 616e 3e3c 2f61 ex_eta e in │ │ │ +000464c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 f _ _.
. &n │ │ │ +00046580: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ +000465b0: 2f73 7061 6e3e 203c 6120 6964 3d22 6578 /span> ex_rec
: fora │ │ │ +00046640: 6c6c 3c2f 7370 616e 3e20 283c 6120 6964 ll (P0 │ │ │ +000466a0: 3c2f 613e 203a 203c 6120 636c 6173 733d : ex P │ │ │ +00046760: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +000467e0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Set) │ │ │ +00046810: 2028 3c61 2069 643d 2266 3a34 3739 2220 (f
: fora │ │ │ +00046890: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll x │ │ │ +000468f0: 203c 6120 6964 3d22 703a 3437 3822 2063 p, P0 │ │ │ +000469a0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 (ex_intro< │ │ │ +00046a10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ +00046a80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +00046ae0: 203c 6120 636c 6173 733d 2269 6472 6566 p)),
.  │ │ │ +00046b50: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00046b60: 703b 266e 6273 703b 266e 6273 703b 3c73 p;  f │ │ │ +00046b90: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall e< │ │ │ +00046bf0: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, P0 e
.&n │ │ │ +00046cc0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00046cd0: 266e 6273 703b 3a3d 203c 6120 636c 6173  := ex_rect< │ │ │ +00046d40: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00046d50: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 .End
ex_Prop │ │ │ +00046de0: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.
..
.Equa │ │ │ +00046e10: 6c69 7479 2066 6f72 203c 7370 616e 2063 lity for e │ │ │ +00046e50: 783c 2f73 7061 6e3e 3c2f 7370 616e 3e20 x │ │ │ +00046e60: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.Sect │ │ │ +00046ea0: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion < │ │ │ +00046ed0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00046ee0: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ +00046ef0: 6578 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ex..   │ │ │ +00046f10: 3c73 7061 6e20 636c 6173 733d 2269 6422 Local Unset Imp │ │ │ +00046f40: 6c69 6369 7420 4172 6775 6d65 6e74 733c licit Arguments< │ │ │ +00046f50: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 2f64 /span>.
...
.Projectin │ │ │ +00046f80: 6720 616e 2065 7175 616c 6974 7920 6f66 g an equality of │ │ │ +00046f90: 2061 2070 6169 7220 746f 2065 7175 616c a pair to equal │ │ │ +00046fa0: 6974 7920 6f66 2074 6865 2066 6972 7374 ity of the first │ │ │ +00046fb0: 2063 6f6d 706f 6e65 6e74 7320 0a3c 2f64 components ..
. &nb │ │ │ +00046fe0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition │ │ │ +00047070: 6578 5f70 726f 6a31 5f65 713c 2f73 7061 ex_proj1_eq {A : │ │ │ +000470e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ +00047110: 3c61 2069 643d 2250 3a34 3832 2220 636c P : A < │ │ │ +00047210: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00047220: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00047230: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +00047270: 7b3c 6120 6964 3d22 753a 3438 3422 2063 {u v : │ │ │ +00047320: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00047390: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists a : A │ │ │ +00047450: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a} (p : u │ │ │ +00047650: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +000476d0: 203c 6120 636c 6173 733d 2269 6472 6566 v)
. &n │ │ │ +00047740: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00047750: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : ex_pr │ │ │ +000477b0: 6f6a 313c 2f73 7061 6e3e 3c2f 613e 203c oj1 < │ │ │ +000477c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000477d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000477e0: 6f67 6963 2e68 746d 6c23 753a 3438 3422 ogic.html#u:484" │ │ │ +000477f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ +00047820: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00047890: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj1
v
.& │ │ │ +00047970: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00047980: 3b26 6e62 7370 3b3a 3d20 3c61 2063 6c61 ; := f_e │ │ │ +000479e0: 7175 616c 3c2f 7370 616e 3e3c 2f61 3e20 qual │ │ │ +000479f0: 2840 3c61 2063 6c61 7373 3d22 6964 7265 (@ex_pr │ │ │ +00047a50: 6f6a 313c 2f73 7061 6e3e 3c2f 613e 203c oj1 < │ │ │ +00047a60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00047a70: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ _) │ │ │ +00047b00: 703c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 p.
..
.
│ │ │ +00047b20: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
.Projecting a │ │ │ +00047b40: 6e20 6571 7561 6c69 7479 206f 6620 6120 n equality of a │ │ │ +00047b50: 7061 6972 2074 6f20 6571 7561 6c69 7479 pair to equality │ │ │ +00047b60: 206f 6620 7468 6520 7365 636f 6e64 2063 of the second c │ │ │ +00047b70: 6f6d 706f 6e65 6e74 7320 0a3c 2f64 6976 omponents .
.
.   │ │ │ +00047ba0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition ex │ │ │ +00047c30: 5f70 726f 6a32 5f65 713c 2f73 7061 6e3e _proj2_eq │ │ │ +00047c40: 3c2f 613e 207b 3c61 2069 643d 2241 3a34 { │ │ │ +00047c70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00047c90: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ +00047ca0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00047cb0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00047cc0: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {P │ │ │ +00047d20: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00047df0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00047e00: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +00047e30: 6120 6964 3d22 753a 3439 3022 2063 6c61 a id="u:490" cla │ │ │ +00047e40: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00047e50: 2223 753a 3439 3022 3e3c 7370 616e 2063 "#u:490">u │ │ │ +00047eb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00047ed0: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +00047ee0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00047ef0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00047f00: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +00047f10: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +00047f20: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ +00047f50: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ +00047f60: 3c61 2069 643d 2261 3a34 3839 2220 636c a : A, │ │ │ +00048090: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a} (p │ │ │ +000481b0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : u │ │ │ +00048260: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00048290: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000482a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000482b0: 6f67 6963 2e68 746d 6c23 763a 3439 3122 ogic.html#v:491" │ │ │ +000482c0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ +000482f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00048300: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ +00048310: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew< │ │ │ +00048380: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> ex_proj1_ │ │ │ +000483f0: 6571 3c2f 7370 616e 3e3c 2f61 3e20 3c61 eq │ │ │ +00048430: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +00048460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00048470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00048480: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +00048490: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +000484a0: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in
ex_proj2 u = ex_p │ │ │ +00048680: 726f 6a32 3c2f 7370 616e 3e3c 2f61 3e20 roj2 │ │ │ +00048690: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ +000486f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00048700: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ +00048710: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ +00048810: 6465 7065 6e64 656e 743c 2f73 7061 6e3e dependent │ │ │ +00048820: 3c2f 613e 203c 6120 636c 6173 733d 2269 p in │ │ │ +00048900: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00048940: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_refl.
..< │ │ │ +00048980: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...E │ │ │ +000489a0: 7175 616c 6974 7920 6f66 203c 7370 616e quality of ex is itself a ex (forwards-r │ │ │ +00048a50: 6561 736f 6e69 6e67 2076 6572 7369 6f6e easoning version │ │ │ +00048a60: 2920 0a3c 2f64 6976 3e0a 3c64 6976 2063 ) .
.
.&nb │ │ │ +00048a80: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ +00048ab0: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_ex_ │ │ │ +00048b30: 696e 7472 6f5f 756e 6375 7272 6965 643c intro_uncurried< │ │ │ +00048b40: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Type} {P< │ │ │ +00048c20: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +00048c60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00048c70: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00048c80: 3e41 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >A -> Prop} {u1 < │ │ │ +00048d90: 6120 6964 3d22 7631 3a34 3936 2220 636c a id="v1:496" cl │ │ │ +00048da0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00048db0: 3d22 2376 313a 3439 3622 3e3c 7370 616e ="#v1:496">v1 : A │ │ │ +00048e40: 3c2f 7370 616e 3e3c 2f61 3e7d 207b 3c61 } {u2 : P< │ │ │ +00048f00: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00048f60: 7531 3c2f 7370 616e 3e3c 2f61 3e7d 207b u1} { │ │ │ +00048f70: 3c61 2069 643d 2276 323a 3439 3822 2063 v2 : │ │ │ +00049020: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ +00049060: 3c73 7061 6e20 636c 6173 733d 2269 6422 v1} │ │ │ +00049090: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +000490a0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000490b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000490c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000490d0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000490e0: 6273 703b 283c 6120 6964 3d22 7071 3a35 bsp;(pq : │ │ │ +00049140: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +000491b0: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists p : │ │ │ +00049270: 7531 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u1 = v │ │ │ +00049350: 313c 2f73 7061 6e3e 3c2f 613e 3c61 2063 1, rew p< │ │ │ +000494b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ +00049520: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in u2 │ │ │ +00049590: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00049600: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = │ │ │ +00049640: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2) │ │ │ +00049670: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00049680: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ +00049690: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_int │ │ │ +000496f0: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c73 ro _ u1 u2 = │ │ │ +000498c0: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ +000498d0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ v │ │ │ +00049950: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ +00049990: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2. │ │ │ +000499c0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Equality │ │ │ +000499f0: 6f66 203c 7370 616e 2063 6c61 7373 3d22 of ex is its │ │ │ +00049a40: 656c 6620 6120 3c73 7061 6e20 636c 6173 elf a < │ │ │ +00049a60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00049a70: 7469 746c 653d 2276 6172 223e 6578 3c2f title="var">ex (ba │ │ │ +00049a90: 636b 7761 7264 732d 7265 6173 6f6e 696e ckwards-reasonin │ │ │ +00049aa0: 6720 7665 7273 696f 6e29 200a 3c2f 6469 g version) ..
. &nbs │ │ │ +00049ad0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition eq_ex_unc │ │ │ +00049b70: 7572 7269 6564 3c2f 7370 616e 3e3c 2f61 urried {A : Pro │ │ │ +00049c00: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P : A │ │ │ +00049cc0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00049d30: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ +00049d60: 6f70 3c2f 7370 616e 3e7d 2028 3c61 2069 op} (u v : exist │ │ │ +00049e90: 733c 2f73 7061 6e3e 3c2f 613e 203c 6120 s a< │ │ │ +00049ef0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A, P a< │ │ │ +0004a090: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ +0004a0a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0004a0b0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0004a0c0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0004a0d0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0004a0e0: 703b 266e 6273 703b 283c 6120 6964 3d22 p; (
pq : exists │ │ │ +0004a1f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0004a210: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ +0004a220: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004a230: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004a240: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +0004a250: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ +0004a280: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004a2e0: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = ex_proj1 v, re │ │ │ +0004a520: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w < │ │ │ +0004a560: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004a570: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004a580: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p in ex_proj2 │ │ │ +0004a670: 3c2f 613e 203c 6120 636c 6173 733d 2269 u = ex_pr │ │ │ +0004a7b0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ +0004a7c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004a7d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004a7e0: 6f67 6963 2e68 746d 6c23 763a 3530 3522 ogic.html#v:505" │ │ │ +0004a7f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ +0004a820: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0004a830: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ +0004a840: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +0004a8a0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0004a910: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +0004a950: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004a960: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004a970: 3e76 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >v...
.
..
.Curried ver │ │ │ +0004a9b0: 7369 6f6e 206f 6620 7072 6f76 696e 6720 sion of proving │ │ │ +0004a9c0: 6571 7561 6c69 7479 206f 6620 3c73 7061 equality of ex types .
│ │ │ +0004aa20: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
.   │ │ │ +0004aa40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition eq_ │ │ │ +0004aad0: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ +0004aae0: 2f61 3e20 7b3c 6120 6964 3d22 413a 3530 /a> {< │ │ │ +0004ab10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004ab20: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +0004ab30: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : T │ │ │ +0004ab60: 7970 653c 2f73 7061 6e3e 7d20 7b3c 6120 ype} {P< │ │ │ +0004abc0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A -& │ │ │ +0004ac90: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0004aca0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004acb0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0004acc0: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {u1 v1 : A │ │ │ +0004ade0: 3c2f 613e 7d20 7b3c 6120 6964 3d22 7532 } {u2 │ │ │ +0004ae40: 203a 203c 6120 636c 6173 733d 2269 6472 : P< │ │ │ +0004aea0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u1} {v2 : P v1}
.& │ │ │ +0004b030: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0004b040: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0004b050: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0004b060: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0004b070: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (p │ │ │ +0004b0d0: 3c2f 613e 203a 203c 6120 636c 6173 733d : u1 = v1
) (q : │ │ │ +0004b2e0: 7265 773c 2f73 7061 6e3e 3c2f 613e 203c rew < │ │ │ +0004b2f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004b300: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004b310: 6f67 6963 2e68 746d 6c23 703a 3531 3422 ogic.html#p:514" │ │ │ +0004b320: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p │ │ │ +0004b350: 3c61 2063 6c61 7373 3d22 6964 7265 6622 in u │ │ │ +0004b420: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 = v2 │ │ │ +0004b500: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +0004b520: 6273 703b 266e 6273 703b 3a20 3c61 2063 bsp; : ex_intro _ │ │ │ +0004b5c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u1 u2 = ex_i │ │ │ +0004b760: 6e74 726f 3c2f 7370 616e 3e3c 2f61 3e20 ntro │ │ │ +0004b770: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ v1
v2 │ │ │ +0004b850: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0004b860: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0004b870: 7370 3b26 6e62 7370 3b3a 3d20 3c61 2063 sp; := eq_ex_intro_un │ │ │ +0004b8f0: 6375 7272 6965 643c 2f73 7061 6e3e 3c2f curried (ex │ │ │ +0004b960: 5f69 6e74 726f 3c2f 7370 616e 3e3c 2f61 _intro _ │ │ │ +0004b990: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 p q).
│ │ │ +0004ba60: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ +0004ba70: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.Curried versio │ │ │ +0004ba90: 6e20 6f66 2070 726f 7669 6e67 2065 7175 n of proving equ │ │ │ +0004baa0: 616c 6974 7920 6f66 203c 7370 616e 2063 ality of e │ │ │ +0004bae0: 783c 2f73 7061 6e3e 3c2f 7370 616e 3e20 x │ │ │ +0004baf0: 7479 7065 7320 0a3c 2f64 6976 3e0a 3c64 types .
. │ │ │ +0004bb10: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ +0004bb40: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ +0004bb50: 3c61 2069 643d 2265 715f 6578 2220 636c eq │ │ │ +0004bba0: 5f65 783c 2f73 7061 6e3e 3c2f 613e 207b _ex { │ │ │ +0004bbb0: 3c61 2069 643d 2241 3a35 3136 2220 636c A : Prop} {P : │ │ │ +0004bc90: 203c 6120 636c 6173 733d 2269 6472 6566 A -> Prop< │ │ │ +0004bd90: 2f73 7061 6e3e 7d20 283c 6120 6964 3d22 /span>} (u │ │ │ +0004bdf0: 3c61 2069 643d 2276 3a35 3230 2220 636c v : exists a │ │ │ +0004bf20: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +0004bf80: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +0004bfd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ +0004c000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004c010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004c020: 6f67 6963 2e68 746d 6c23 503a 3531 3722 ogic.html#P:517" │ │ │ +0004c030: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0004c060: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +0004c0c0: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ +0004c0d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0004c0e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0004c0f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0004c100: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0004c110: 6e62 7370 3b28 3c61 2069 643d 2270 3a35 nbsp;( │ │ │ +0004c140: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0004c160: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ +0004c170: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004c180: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004c190: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +0004c1a0: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ +0004c1d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004c230: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u
= ex_proj1
v) (q │ │ │ +0004c3e0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : re │ │ │ +0004c450: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w < │ │ │ +0004c490: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004c4a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004c4b0: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p in
ex_proj2 │ │ │ +0004c5a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u = ex_pr │ │ │ +0004c6e0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ +0004c6f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004c700: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004c710: 6f67 6963 2e68 746d 6c23 763a 3532 3022 ogic.html#v:520" │ │ │ +0004c720: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ +0004c750: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0004c760: 703b 266e 6273 703b 266e 6273 703b 3a20 p;  : │ │ │ +0004c770: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +0004c7d0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0004c840: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +0004c880: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004c890: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004c8a0: 3e76 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >v
.  & │ │ │ +0004c8c0: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := eq │ │ │ +0004c930: 5f65 785f 756e 6375 7272 6965 643c 2f73 _ex_uncurried
u v< │ │ │ +0004ca00: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (ex_intro _ │ │ │ +0004caa0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ +0004cb00: 203c 6120 636c 6173 733d 2269 6472 6566 q).
..
. │ │ │ +0004cb70: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.In ord │ │ │ +0004cb90: 6572 2074 6f20 6861 7665 2061 2070 6572 er to have a per │ │ │ +0004cba0: 666f 726d 616e 7420 3c73 7061 6e20 636c formant in │ │ │ +0004cbe0: 7665 7273 696f 6e5f 7369 676d 613c 2f73 version_sigma, we │ │ │ +0004cc00: 6465 6669 6e65 0a20 2020 2020 2073 7065 define. spe │ │ │ +0004cc10: 6369 616c 697a 6564 2076 6572 7369 6f6e cialized version │ │ │ +0004cc20: 7320 666f 7220 7768 656e 2077 6520 6861 s for when we ha │ │ │ +0004cc30: 7665 2063 6f6e 7374 7275 6374 6f72 7320 ve constructors │ │ │ +0004cc40: 6f6e 206f 6e65 206f 720a 2020 2020 2020 on one or. │ │ │ +0004cc50: 626f 7468 2073 6964 6573 206f 6620 7468 both sides of th │ │ │ +0004cc60: 6520 6571 7561 6c69 7479 200a 3c2f 6469 e equality ..
. &nbs │ │ │ +0004cc90: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition < │ │ │ +0004cd00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004cd10: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0004cd20: 6e22 3e65 715f 6578 5f69 6e74 726f 5f6c n">eq_ex_intro_l │ │ │ +0004cd30: 3c2f 7370 616e 3e3c 2f61 3e20 7b3c 6120 {A< │ │ │ +0004cd90: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : Prop} {< │ │ │ +0004cdf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004ce00: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ +0004ce10: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +0004ce50: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +0004ce80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004ce90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004cea0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0004ceb0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0004cec0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Prop} u1 < │ │ │ +0004cf80: 6120 6964 3d22 7532 3a35 3236 2220 636c a id="u2:526" cl │ │ │ +0004cf90: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +0004cfa0: 3d22 2375 323a 3532 3622 3e3c 7370 616e ="#u2:526">u2 (v │ │ │ +0004d030: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ +0004d080: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ +0004d0b0: 2f61 3e20 3c61 2069 643d 2261 3a35 3237 /a> a< │ │ │ +0004d100: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +0004d140: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004d150: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004d160: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ +0004d2a0: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ +0004d2b0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0004d2c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0004d2d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0004d2e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0004d2f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b28 sp;  ( │ │ │ +0004d300: 3c61 2069 643d 2270 3a35 3239 2220 636c p : u1 │ │ │ +0004d3b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_proj1 │ │ │ +0004d4a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v) (q : │ │ │ +0004d560: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ +0004d5d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004d630: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p in u2 = e │ │ │ +0004d7f0: 785f 7072 6f6a 323c 2f73 7061 6e3e 3c2f x_proj2 v< │ │ │ +0004d860: 2f61 3e29 3c62 722f 3e0a 266e 6273 703b /a>)
.  │ │ │ +0004d870: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0004d880: 703b 3a20 3c61 2063 6c61 7373 3d22 6964 p;:
ex │ │ │ +0004d8e0: 5f69 6e74 726f 3c2f 7370 616e 3e3c 2f61 _intro P u1 u2
= │ │ │ +0004da90: 3c2f 613e 203c 6120 636c 6173 733d 2269 v
.  │ │ │ +0004db00: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0004db10: 7370 3b3a 3d20 3c61 2063 6c61 7373 3d22 sp;:= eq_e │ │ │ +0004db70: 783c 2f73 7061 6e3e 3c2f 613e 2028 3c61 x (ex_intro │ │ │ +0004dbe0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004dc40: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P │ │ │ +0004dc80: 3c73 7061 6e20 636c 6173 733d 2269 6422 u1 │ │ │ +0004dcb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u2) v │ │ │ +0004dd70: 3c2f 613e 203c 6120 636c 6173 733d 2269 p q.
.&nb │ │ │ +0004de40: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ +0004de70: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_ex_ │ │ │ +0004dee0: 696e 7472 6f5f 723c 2f73 7061 6e3e 3c2f intro_r {A< │ │ │ +0004df40: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ +0004df70: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P : A -&g │ │ │ +0004e0a0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; P │ │ │ +0004e0d0: 726f 703c 2f73 7061 6e3e 7d20 283c 6120 rop} (u< │ │ │ +0004e130: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : exists a : │ │ │ +0004e210: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0004e270: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ +0004e2e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004e340: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ +0004e380: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004e390: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004e3a0: 3e61 3c2f 7370 616e 3e3c 2f61 3e29 203c >a) < │ │ │ +0004e3b0: 6120 6964 3d22 7631 3a35 3335 2220 636c a id="v1:535" cl │ │ │ +0004e3c0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +0004e3d0: 3d22 2376 313a 3533 3522 3e3c 7370 616e ="#v1:535">v1 v2
. &n │ │ │ +0004e470: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0004e480: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0004e490: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0004e4a0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0004e4b0: 266e 6273 703b 283c 6120 6964 3d22 703a  (
p : │ │ │ +0004e510: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ +0004e570: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ +0004e5b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004e5c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004e5d0: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = v │ │ │ +0004e6b0: 313c 2f73 7061 6e3e 3c2f 613e 2920 283c 1) (< │ │ │ +0004e6c0: 6120 6964 3d22 713a 3533 3822 2063 6c61 a id="q:538" cla │ │ │ +0004e6d0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0004e6e0: 2223 713a 3533 3822 3e3c 7370 616e 2063 "#q:538">q : rew p< │ │ │ +0004e7f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> │ │ │ +0004e860: 696e 3c2f 7370 616e 3e3c 2f61 3e20 3c61 in ex_proj2< │ │ │ +0004e8d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ +0004e930: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 =
v2< │ │ │ +0004ea10: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ +0004ea20: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0004ea30: 7370 3b26 6e62 7370 3b3a 203c 6120 636c sp; : u │ │ │ +0004ea90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_intro P v1 v │ │ │ +0004eca0: 323c 2f73 7061 6e3e 3c2f 613e 3c62 722f 2
.  &n │ │ │ +0004ecc0: 6273 703b 266e 6273 703b 3a3d 203c 6120 bsp; := < │ │ │ +0004ed00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004ed10: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +0004ed20: 6e22 3e65 715f 6578 3c2f 7370 616e 3e3c n">eq_ex< │ │ │ +0004ed30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ +0004ed90: 3c2f 613e 2028 3c61 2063 6c61 7373 3d22 ( │ │ │ +0004edf0: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ +0004ee00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ +0004ee60: 3c2f 613e 203c 6120 636c 6173 733d 2269 v1 v2< │ │ │ +0004ef20: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) │ │ │ +0004ef80: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ +0004efc0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004efd0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004efe0: 3e71 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >q...
.
..
.Induction p │ │ │ +0004f020: 7269 6e63 6970 6c65 2066 6f72 203c 7370 rinciple for @eq (< │ │ │ +0004f090: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004f0a0: 7469 746c 653d 2276 6172 223e 6578 3c2f title="var">ex _) .
.
.& │ │ │ +0004f120: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ +0004f150: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition │ │ │ +0004f190: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex_eta {A │ │ │ +0004f220: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ +0004f250: 207b 3c61 2069 643d 2250 3a35 3430 2220 {P : A │ │ │ +0004f300: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +0004f380: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +0004f3b0: 7d20 7b3c 6120 6964 3d22 753a 3534 3222 } {u v │ │ │ +0004f460: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ +0004f4b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists< │ │ │ +0004f4e0: 2f61 3e20 3c61 2069 643d 2261 3a35 3431 /a> a< │ │ │ +0004f530: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +0004f570: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0004f580: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0004f590: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ +0004f6d0: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (p< │ │ │ +0004f730: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : u = v< │ │ │ +0004f870: 2f61 3e29 203a 203c 6120 636c 6173 733d /a>) : p =< │ │ │ +0004f950: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> eq_ex< │ │ │ +0004f9b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ +0004fa10: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0004fa70: 763c 2f73 7061 6e3e 3c2f 613e 2028 3c61 v (ex_pro │ │ │ +0004fae0: 6a31 5f65 713c 2f73 7061 6e3e 3c2f 613e j1_eq │ │ │ +0004faf0: 203c 6120 636c 6173 733d 2269 6472 6566 p) ( │ │ │ +0004fbb0: 6578 5f70 726f 6a32 5f65 713c 2f73 7061 ex_proj2_eq p).
. │ │ │ +0004fc30: 266e 6273 703b 266e 6273 703b 3c73 7061   Def │ │ │ +0004fc60: 696e 6974 696f 6e3c 2f73 7061 6e3e 203c inition < │ │ │ +0004fc70: 6120 6964 3d22 6571 5f65 785f 7265 6374 a id="eq_ex_rect │ │ │ +0004fc80: 2220 636c 6173 733d 2269 6472 6566 2220 " class="idref" │ │ │ +0004fc90: 6872 6566 3d22 2365 715f 6578 5f72 6563 href="#eq_ex_rec │ │ │ +0004fca0: 7422 3e3c 7370 616e 2063 6c61 7373 3d22 t">eq_ex_rec │ │ │ +0004fcd0: 743c 2f73 7061 6e3e 3c2f 613e 207b 3c61 t {A │ │ │ +0004fd30: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : Prop} { │ │ │ +0004fd90: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0004fdb0: 503c 2f73 7061 6e3e 3c2f 613e 203a 203c P : < │ │ │ +0004fdc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0004fdd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0004fde0: 6f67 6963 2e68 746d 6c23 413a 3534 3522 ogic.html#A:545" │ │ │ +0004fdf0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ +0004fe20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop
} {u v │ │ │ +0004ff70: 3c2f 613e 203a 203c 6120 636c 6173 733d : exists a : │ │ │ +00050050: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +00050120: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ +00050160: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00050170: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00050180: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ +000501c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a} │ │ │ +000501f0: 283c 6120 6964 3d22 513a 3535 3022 2063 (Q : u< │ │ │ +000502a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v - │ │ │ +000503f0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00050400: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type)
.  & │ │ │ +00050440: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00050450: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00050460: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00050470: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00050480: 3b28 3c61 2069 643d 2266 3a35 3533 2220 ;(f
: fora │ │ │ +00050500: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ +00050560: 203c 6120 6964 3d22 713a 3535 3222 2063 q, Q (eq_ex u v< │ │ │ +00050740: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ +000507a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 q))
.&nb │ │ │ +00050810: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00050820: 6e62 7370 3b3a 203c 7370 616e 2063 6c61 nbsp;: forall │ │ │ +00050880: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000508a0: 703c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 p, │ │ │ +000508e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ +00050910: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00050920: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00050930: 6f67 6963 2e68 746d 6c23 703a 3535 3422 ogic.html#p:554" │ │ │ +00050940: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p< │ │ │ +00050970: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00050980: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ +00050990: 3c73 7061 6e20 636c 6173 733d 2269 6422 fun p => rew │ │ │ +00050a90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00050b10: 266c 743b 2d3c 2f73 7061 6e3e 3c2f 613e <- │ │ │ +00050b20: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ex │ │ │ +00050b80: 5f65 7461 3c2f 7370 616e 3e3c 2f61 3e20 _eta │ │ │ +00050b90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ +00050bf0: 203c 6120 636c 6173 733d 2269 6472 6566 in f< │ │ │ +00050cd0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _. │ │ │ +00050d20: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00050d30: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
eq_ex │ │ │ +00050dc0: 5f72 6563 3c2f 7370 616e 3e3c 2f61 3e20 _rec │ │ │ +00050dd0: 7b3c 6120 6964 3d22 413a 3535 3622 2063 {A : Prop< │ │ │ +00050e50: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ +00050eb0: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : A ->< │ │ │ +00050f80: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> Prop │ │ │ +00050fb0: 3c2f 7370 616e 3e7d 207b 3c61 2069 643d } {u │ │ │ +00051010: 203c 6120 6964 3d22 763a 3535 3922 2063 v} (Q │ │ │ +000510c0: 203a 203c 6120 636c 6173 733d 2269 6472 : u< │ │ │ +00051120: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +000511a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v │ │ │ +00051200: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00051270: 3a26 6774 3b3c 2f73 7061 6e3e 3c2f 613e :> │ │ │ +00051280: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +000512f0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (exist │ │ │ +00051370: 733c 2f73 7061 6e3e 3c2f 613e 203c 6120 s a< │ │ │ +000513d0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A, P a< │ │ │ +00051570: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +000515c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ +000515f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00051600: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00051610: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +00051620: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +00051630: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Set) := eq_ex_rect Q.
.& │ │ │ +00051770: 6e62 7370 3b26 6e62 7370 3b3c 7370 616e nbsp; Defi │ │ │ +000517a0: 6e69 7469 6f6e 3c2f 7370 616e 3e20 3c61 nition │ │ │ +000517e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex_ind
{A │ │ │ +00051870: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ +000518a0: 207b 3c61 2069 643d 2250 3a35 3633 2220 {P
: A │ │ │ +00051950: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +000519d0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +00051a00: 7d20 7b3c 6120 6964 3d22 753a 3536 3422 } {u v │ │ │ +00051ab0: 7d20 283c 6120 6964 3d22 513a 3536 3722 } (Q : │ │ │ +00051b60: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = v :> (exists │ │ │ +00051df0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00051e10: 613c 2f73 7061 6e3e 3c2f 613e 203a 203c a : < │ │ │ +00051e20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00051e30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00051e40: 6f67 6963 2e68 746d 6c23 413a 3536 3222 ogic.html#A:562" │ │ │ +00051e50: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A< │ │ │ +00051e80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00051e90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00051ea0: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +00051eb0: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +00051ec0: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">,< │ │ │ +00051ef0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> P │ │ │ +00051f50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00051fb0: 613c 2f73 7061 6e3e 3c2f 613e 3c61 2063 a) - │ │ │ +000520a0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +000520b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop) := │ │ │ +000520e0: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ex │ │ │ +00052140: 5f72 6563 3c2f 7370 616e 3e3c 2f61 3e20 _rec │ │ │ +00052150: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +000521b0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
..
...
.In order │ │ │ +000521e0: 2074 6f20 6861 7665 2061 2070 6572 666f to have a perfo │ │ │ +000521f0: 726d 616e 7420 3c73 7061 6e20 636c 6173 rmant < │ │ │ +00052210: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00052220: 7469 746c 653d 2276 6172 223e 696e 7665 title="var">inve │ │ │ +00052230: 7273 696f 6e5f 7369 676d 613c 2f73 7061 rsion_sigma, we de │ │ │ +00052250: 6669 6e65 0a20 2020 2020 2073 7065 6369 fine. speci │ │ │ +00052260: 616c 697a 6564 2076 6572 7369 6f6e 7320 alized versions │ │ │ +00052270: 666f 7220 7768 656e 2077 6520 6861 7665 for when we have │ │ │ +00052280: 2063 6f6e 7374 7275 6374 6f72 7320 6f6e constructors on │ │ │ +00052290: 206f 6e65 206f 720a 2020 2020 2020 626f one or. bo │ │ │ +000522a0: 7468 2073 6964 6573 206f 6620 7468 6520 th sides of the │ │ │ +000522b0: 6571 7561 6c69 7479 200a 3c2f 6469 763e equality .
│ │ │ +000522c0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
.   │ │ │ +000522e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition eq_ex_rect_ex_i │ │ │ +00052390: 6e74 726f 5f6c 3c2f 7370 616e 3e3c 2f61 ntro_l {A : Pro │ │ │ +00052420: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P : A │ │ │ +000524e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00052550: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ +00052580: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {u1 u2 │ │ │ +00052640: 3c61 2069 643d 2276 3a35 3732 2220 636c v} (Q │ │ │ +000526f0: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : _ │ │ │ +00052710: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 - │ │ │ +00052780: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00052790: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type)
.  & │ │ │ +000527d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000527e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000527f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00052800: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00052810: 3b28 3c61 2069 643d 2266 3a35 3736 2220 ;(f
: fora │ │ │ +00052890: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ +000528f0: 203c 6120 6964 3d22 713a 3537 3522 2063 q, Q (eq_ex_i │ │ │ +00052a10: 6e74 726f 5f6c 3c2f 7370 616e 3e3c 2f61 ntro_l ( │ │ │ +00052a40: 503c 2f73 7061 6e3e 3a3d 3c61 2063 6c61 P:=P< │ │ │ +00052aa0: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) < │ │ │ +00052ae0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00052af0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00052b00: 3e75 313c 2f73 7061 6e3e 3c2f 613e 203c >u1 < │ │ │ +00052b10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00052b20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00052b30: 6f67 6963 2e68 746d 6c23 7532 3a35 3731 ogic.html#u2:571 │ │ │ +00052b40: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u2 v p< │ │ │ +00052c30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> q │ │ │ +00052c90: 3c2f 613e 2929 3c62 722f 3e0a 266e 6273 ))
.&nbs │ │ │ +00052ca0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00052cb0: 6273 703b 3a20 3c73 7061 6e20 636c 6173 bsp;: forall
< │ │ │ +00052d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00052d20: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ +00052d30: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ +00052d70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00052d80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00052d90: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ +00052dd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p.   │ │ │ +00052e10: 266e 6273 703b 266e 6273 703b 3a3d 203c   := < │ │ │ +00052e20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00052e30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00052e40: 6f67 6963 2e68 746d 6c23 6571 5f65 785f ogic.html#eq_ex_ │ │ │ +00052e50: 7265 6374 223e 3c73 7061 6e20 636c 6173 rect">eq_ex_ │ │ │ +00052e80: 7265 6374 3c2f 7370 616e 3e3c 2f61 3e20 rect │ │ │ +00052e90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +00052ef0: 203c 6120 636c 6173 733d 2269 6472 6566 f.
. &n │ │ │ +00052f60: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ +00052f90: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> eq_ex_rect_ │ │ │ +00053010: 6578 5f69 6e74 726f 5f72 3c2f 7370 616e ex_intro_r {A : │ │ │ +00053080: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +000530b0: 6120 6964 3d22 503a 3537 3922 2063 6c61 a id="P:579" cla │ │ │ +000530c0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000530d0: 2223 503a 3537 3922 3e3c 7370 616e 2063 "#P:579">P : A
│ │ │ +000531d0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +000531e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ +00053210: 3c61 2069 643d 2275 3a35 3830 2220 636c u v1 │ │ │ +000532c0: 203c 6120 6964 3d22 7632 3a35 3832 2220 v2< │ │ │ +00053310: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (Q< │ │ │ +00053370: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : _ ->< │ │ │ +00053410: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Type │ │ │ +00053440: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ +00053450: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00053460: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00053470: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00053480: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00053490: 6e62 7370 3b28 3c61 2069 643d 2266 3a35 nbsp;(
│ │ │ +000534c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000534e0: 663c 2f73 7061 6e3e 3c2f 613e 203a 203c f : < │ │ │ +000534f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00053500: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00053510: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall p │ │ │ +00053570: 3c2f 613e 203c 6120 6964 3d22 713a 3538 < │ │ │ +000535a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000535b0: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ +000535c0: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ +00053600: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00053610: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00053620: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 283c >Q (< │ │ │ +00053630: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00053640: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00053650: 6f67 6963 2e68 746d 6c23 6571 5f65 785f ogic.html#eq_ex_ │ │ │ +00053660: 696e 7472 6f5f 7222 3e3c 7370 616e 2063 intro_r">eq_ │ │ │ +00053690: 6578 5f69 6e74 726f 5f72 3c2f 7370 616e ex_intro_r (P:= │ │ │ +00053700: 3c73 7061 6e20 636c 6173 733d 2269 6422 P) │ │ │ +00053730: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00053790: 203c 6120 636c 6173 733d 2269 6472 6566 v1< │ │ │ +000537f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v2 p q
))
. │ │ │ +00053920: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00053930: 703b 266e 6273 703b 3a20 3c73 7061 6e20 p; : foral │ │ │ +00053960: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l p, │ │ │ +000539c0: 203c 6120 636c 6173 733d 2269 6472 6566 Q p
. &n │ │ │ +00053a90: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00053aa0: 3a3d 203c 6120 636c 6173 733d 2269 6472 :=
eq │ │ │ +00053b00: 5f65 785f 7265 6374 3c2f 7370 616e 3e3c _ex_rect< │ │ │ +00053b10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ +00053b70: 3c2f 613e 203c 6120 636c 6173 733d 2269 f.
.&nbs │ │ │ +00053be0: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Definit │ │ │ +00053c10: 696f 6e3c 2f73 7061 6e3e 203c 6120 6964 ion eq_ex_rect_ │ │ │ +00053c90: 6578 5f69 6e74 726f 3c2f 7370 616e 3e3c ex_intro< │ │ │ +00053ca0: 2f61 3e20 7b3c 6120 6964 3d22 413a 3538 /a> {< │ │ │ +00053cd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00053ce0: 7469 746c 653d 2262 696e 6465 7222 3e41 title="binder">A │ │ │ +00053cf0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : P │ │ │ +00053d20: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {P< │ │ │ +00053d80: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A -& │ │ │ +00053e50: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00053e60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00053e70: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00053e80: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {u1 u2 v1 │ │ │ +00053f90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v2} (Q : │ │ │ +00054050: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00054070: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> -& │ │ │ +000540e0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +000540f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00054100: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00054110: 5479 7065 3c2f 7370 616e 3e29 3c62 722f Type)
.  &n │ │ │ +00054130: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00054140: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00054150: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00054160: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00054170: 283c 6120 6964 3d22 663a 3539 3722 2063 (f : foral │ │ │ +000541f0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l p │ │ │ +00054250: 3c61 2069 643d 2271 3a35 3936 2220 636c q, Q
(@eq_ex_int │ │ │ +00054370: 726f 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ro │ │ │ +000543b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +000543e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000543f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00054400: 6f67 6963 2e68 746d 6c23 503a 3538 3922 ogic.html#P:589" │ │ │ +00054410: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +00054440: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u1 v1 u2
v2 │ │ │ +000545c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00054620: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ +00054660: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00054670: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00054680: 3e71 3c2f 7370 616e 3e3c 2f61 3e29 293c >q))< │ │ │ +00054690: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +000546a0: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ +000546b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000546c0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +000546d0: 666f 7261 6c6c 3c2f 7370 616e 3e20 3c61 forall p │ │ │ +00054730: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , Q p
.&nb │ │ │ +00054800: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00054810: 6e62 7370 3b3a 3d20 3c61 2063 6c61 7373 nbsp;:= < │ │ │ +00054850: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00054860: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00054870: 6e22 3e65 715f 6578 5f72 6563 743c 2f73 n">eq_ex_rect
Q f< │ │ │ +00054940: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
│ │ │ +00054950: 0a0a 3c62 722f 3e0a 266e 6273 703b 266e ..
. &n │ │ │ +00054960: 6273 703b 3c73 7061 6e20 636c 6173 733d bsp;Definition< │ │ │ +00054990: 2f73 7061 6e3e 203c 6120 6964 3d22 6571 /span> < │ │ │ +000549e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000549f0: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00054a00: 6e22 3e65 715f 6578 5f72 6563 745f 756e n">eq_ex_rect_un │ │ │ +00054a10: 6375 7272 6965 643c 2f73 7061 6e3e 3c2f curried {A< │ │ │ +00054a70: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ +00054aa0: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P : A -&g │ │ │ +00054bd0: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; P │ │ │ +00054c00: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {u< │ │ │ +00054c60: 2f61 3e20 3c61 2069 643d 2276 3a36 3033 /a> v< │ │ │ +00054cb0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : exis │ │ │ +00054d30: 7473 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ts a │ │ │ +00054d90: 3c2f 613e 203a 203c 6120 636c 6173 733d : A, P< │ │ │ +00054ed0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +00054f30: 3c2f 613e 7d20 283c 6120 6964 3d22 513a } (Q : │ │ │ +00054f90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00054ff0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00055060: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +000550a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000550b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000550c0: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >v -> Type)
. & │ │ │ +00055180: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00055190: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000551a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000551b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000551c0: 3b26 6e62 7370 3b28 3c61 2069 643d 2266 ; (f : │ │ │ +00055220: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +00055250: 3c61 2069 643d 2270 713a 3630 3522 2063 pq, Q │ │ │ +00055300: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120
(< │ │ │ +00055340: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00055350: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00055360: 6e22 3e65 715f 6578 3c2f 7370 616e 3e3c n">eq_ex< │ │ │ +00055370: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ +000553d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v ( │ │ │ +00055490: 6578 5f70 726f 6a31 3c2f 7370 616e 3e3c ex_proj1< │ │ │ +000554a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> pq) (ex_proj2 pq)))
│ │ │ +000555e0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +000555f0: 7370 3b26 6e62 7370 3b3a 203c 7370 616e sp; : fora │ │ │ +00055620: 6c6c 3c2f 7370 616e 3e20 3c61 2069 643d ll p │ │ │ +00055680: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , Q p< │ │ │ +00055740: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ +00055750: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00055760: 3b3a 3d20 3c61 2063 6c61 7373 3d22 6964 ;:=
e │ │ │ +000557c0: 715f 6578 5f72 6563 743c 2f73 7061 6e3e q_ex_rect │ │ │ +000557d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q (fun p q │ │ │ +00055910: 203d 2667 743b 203c 6120 636c 6173 733d => f (ex_intro _ < │ │ │ +00055a40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00055a50: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00055a60: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p │ │ │ +00055aa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 q)) │ │ │ +00055ad0: 2e3c 6272 2f3e 0a26 6e62 7370 3b26 6e62 .
. &nb │ │ │ +00055ae0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition │ │ │ +00055b80: 6571 5f65 785f 7265 635f 756e 6375 7272 eq_ex_rec_uncurr │ │ │ +00055b90: 6965 643c 2f73 7061 6e3e 3c2f 613e 207b ied { │ │ │ +00055ba0: 3c61 2069 643d 2241 3a36 3130 2220 636c A : Prop} {P : │ │ │ +00055c80: 203c 6120 636c 6173 733d 2269 6472 6566 A -> Prop< │ │ │ +00055d80: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {u │ │ │ +00055de0: 3c61 2069 643d 2276 3a36 3133 2220 636c v} (Q │ │ │ +00055e90: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : u │ │ │ +00055f40: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00055f70: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00055f80: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00055f90: 6f67 6963 2e68 746d 6c23 763a 3631 3322 ogic.html#v:613" │ │ │ +00055fa0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v │ │ │ +00055fd0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ +00056040: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00056050: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ( │ │ │ +000560c0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c exists │ │ │ +00056140: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 a : A, │ │ │ +00056280: 203c 6120 636c 6173 733d 2269 6472 6566 P a< │ │ │ +00056390: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000563a0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000563b0: 3e29 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >) -> Set) := eq_ex │ │ │ +000564d0: 5f72 6563 745f 756e 6375 7272 6965 643c _rect_uncurried< │ │ │ +000564e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ +00056540: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.  D │ │ │ +00056580: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition │ │ │ +00056590: 203c 6120 6964 3d22 6571 5f65 785f 696e eq_ex │ │ │ +00056600: 5f69 6e64 5f75 6e63 7572 7269 6564 3c2f _ind_uncurried {A : Prop │ │ │ +000566a0: 7d20 7b3c 6120 6964 3d22 503a 3631 3722 } {P : │ │ │ +00056750: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ +000567d0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop} {u< │ │ │ +00056850: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> v} (Q< │ │ │ +00056900: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +00056940: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00056950: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00056960: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u = v< │ │ │ +00056a40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> :>< │ │ │ +00056ac0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> (exists a : │ │ │ +00056c20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +00056c80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ +00056cf0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00056d50: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ +00056d90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00056da0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00056db0: 3e61 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >a) │ │ │ +00056ea0: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00056eb0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop) : │ │ │ +00056ee0: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = eq_ex_rec_ │ │ │ +00056f50: 756e 6375 7272 6965 643c 2f73 7061 6e3e uncurried │ │ │ +00056f60: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q.
..
.
..
.Equ │ │ │ +00056ff0: 616c 6974 7920 6f66 203c 7370 616e 2063 ality of e │ │ │ +00057030: 783c 2f73 7061 6e3e 3c2f 7370 616e 3e20 x │ │ │ +00057040: 7768 656e 2074 6865 2070 726f 7065 7274 when the propert │ │ │ +00057050: 7920 6973 2061 6e20 6850 726f 7020 0a3c y is an hProp .< │ │ │ +00057060: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
. & │ │ │ +00057080: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ +000570b0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq_ex_hprop {A │ │ │ +00057180: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Prop} │ │ │ +000571b0: 207b 3c61 2069 643d 2250 3a36 3233 2220 {P : A │ │ │ +00057260: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +000572e0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +00057310: 7d20 283c 6120 6964 3d22 505f 6870 726f } (P_hprop │ │ │ +00057370: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +000573a0: 6f72 616c 6c3c 2f73 7061 6e3e 2028 3c61 orall (x │ │ │ +00057400: 3c2f 613e 203a 203c 6120 636c 6173 733d : A) (p │ │ │ +000574c0: 203c 6120 6964 3d22 713a 3632 3622 2063 q : P< │ │ │ +00057570: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> x │ │ │ +000575d0: 3c2f 7370 616e 3e3c 2f61 3e29 2c20 3c61 ), │ │ │ +00057610: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +00057640: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00057650: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00057660: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00057670: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00057680: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +000576b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> q │ │ │ +00057710: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +00057730: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00057740: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00057750: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00057760: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00057770: 283c 6120 6964 3d22 753a 3632 3922 2063 (u v : │ │ │ +00057820: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00057890: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists a : A │ │ │ +00057950: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c ,
P a
)
.& │ │ │ +00057aa0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00057ab0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00057ac0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00057ad0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00057ae0: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (p │ │ │ +00057b40: 3c2f 613e 203a 203c 6120 636c 6173 733d : │ │ │ +00057ba0: 6578 5f70 726f 6a31 3c2f 7370 616e 3e3c ex_proj1< │ │ │ +00057bb0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ +00057c10: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +00057c90: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ +00057cf0: 6a31 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j1 │ │ │ +00057d30: 3c73 7061 6e20 636c 6173 733d 2269 6422 v)< │ │ │ +00057d60: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00057d70: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ +00057d80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00057d90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00057da0: 6f67 6963 2e68 746d 6c23 753a 3632 3922 ogic.html#u:629" │ │ │ +00057db0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ +00057de0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00057e50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00057eb0: 763c 2f73 7061 6e3e 3c2f 613e 3c62 722f v
.  &n │ │ │ +00057ed0: 6273 703b 266e 6273 703b 3a3d 203c 6120 bsp; := < │ │ │ +00057f10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00057f20: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00057f30: 6e22 3e65 715f 6578 3c2f 7370 616e 3e3c n">eq_ex< │ │ │ +00057f40: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ +00057fa0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v p ( │ │ │ +000580a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 P_hprop │ │ │ +000580d0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ _ │ │ │ +00058120: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00058140: 2f73 7061 6e3e 292e 3c62 722f 3e0a 0a3c /span>).
..< │ │ │ +00058150: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00058160: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition eq_ex_ │ │ │ +00058200: 696e 7472 6f5f 6870 726f 703c 2f73 7061 intro_hprop {A : │ │ │ +00058270: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type} { │ │ │ +000582a0: 3c61 2069 643d 2250 3a36 3333 2220 636c P : A < │ │ │ +000583a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000583b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000583c0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +00058400: 283c 6120 6964 3d22 505f 6870 726f 703a (P_hprop : for │ │ │ +00058490: 616c 6c3c 2f73 7061 6e3e 2028 3c61 2069 all
(x : A) (p < │ │ │ +000585b0: 6120 6964 3d22 713a 3633 3622 2063 6c61 a id="q:636" cla │ │ │ +000585c0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000585d0: 2223 713a 3633 3622 3e3c 7370 616e 2063 "#q:636">q : P
x), │ │ │ +00058720: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p = q)
. │ │ │ +00058810: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00058820: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00058830: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00058840: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00058850: 703b 266e 6273 703b 266e 6273 703b 7b3c p;  {< │ │ │ +00058860: 6120 6964 3d22 7531 3a36 3338 2220 636c a id="u1:638" cl │ │ │ +00058870: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00058880: 3d22 2375 313a 3633 3822 3e3c 7370 616e ="#u1:638">u1
v1 : A} {u2 : P │ │ │ +00058a30: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1} {v2< │ │ │ +00058af0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : P v1}
. │ │ │ +00058bc0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00058bd0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00058be0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00058bf0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00058c00: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +00058c10: 6120 6964 3d22 703a 3634 3222 2063 6c61 a id="p:642" cla │ │ │ +00058c20: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00058c30: 2223 703a 3634 3222 3e3c 7370 616e 2063 "#p:642">p : u1< │ │ │ +00058cc0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v1)
. │ │ │ +00058db0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00058dc0: 703b 266e 6273 703b 3a20 3c61 2063 6c61 p; : < │ │ │ +00058e00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00058e10: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +00058e20: 6f72 223e 6578 5f69 6e74 726f 3c2f 7370 or">ex_intro P
u1 │ │ │ +00058ef0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00058f30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00058f40: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00058f50: 3e75 323c 2f73 7061 6e3e 3c2f 613e 203c >u2 < │ │ │ +00058f60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00058f70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00058f80: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00058f90: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00058fa0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00058fd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00059010: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_intro
P v │ │ │ +00059100: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 │ │ │ +00059140: 3c73 7061 6e20 636c 6173 733d 2269 6422 v2< │ │ │ +00059170: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00059180: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ +00059190: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_e │ │ │ +000591f0: 785f 696e 7472 6f3c 2f73 7061 6e3e 3c2f x_intro p< │ │ │ +00059260: 2f61 3e20 283c 6120 636c 6173 733d 2269 /a> (P │ │ │ +000592c0: 5f68 7072 6f70 3c2f 7370 616e 3e3c 2f61 _hprop _ │ │ │ +000592f0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ _).
..
.
..
.Equi │ │ │ +00059370: 7661 6c65 6e63 6520 6f66 2065 7175 616c valence of equal │ │ │ +00059380: 6974 7920 6f66 203c 7370 616e 2063 6c61 ity of │ │ │ +000593a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex< │ │ │ +000593c0: 2f73 7061 6e3e 3c2f 7370 616e 3e20 7769 /span> wi │ │ │ +000593d0: 7468 2061 203c 7370 616e 2063 6c61 7373 th a ex of e │ │ │ +00059420: 7175 616c 6974 7920 2057 6520 636f 756c quality We coul │ │ │ +00059430: 6420 6163 7475 616c 6c79 2070 726f 7665 d actually prove │ │ │ +00059440: 2061 6e20 6973 6f6d 6f72 7068 6973 6d20 an isomorphism │ │ │ +00059450: 6865 7265 2c20 616e 6420 6e6f 7420 6a75 here, and not ju │ │ │ +00059460: 7374 203c 7370 616e 2063 6c61 7373 3d22 st < │ │ │ +00059480: 2d26 6774 3b3c 2f73 7061 6e3e 2c0a 2020 ->,. │ │ │ +00059490: 2020 2020 6275 7420 666f 7220 7369 6d70 but for simp │ │ │ +000594a0: 6c69 6369 7479 2c20 7765 2064 6f6e 2774 licity, we don't │ │ │ +000594b0: 2e20 0a3c 2f64 6976 3e0a 3c64 6976 2063 . .
.
.&nb │ │ │ +000594d0: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ +00059500: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_ex_uncu │ │ │ +00059580: 7272 6965 645f 6966 663c 2f73 7061 6e3e rried_iff │ │ │ +00059590: 3c2f 613e 207b 3c61 2069 643d 2241 3a36 { │ │ │ +000595c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000595e0: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ +000595f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00059600: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00059610: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {P │ │ │ +00059670: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00059740: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00059750: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} (< │ │ │ +00059780: 6120 6964 3d22 753a 3634 3622 2063 6c61 a id="u:646" cla │ │ │ +00059790: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000597a0: 2223 753a 3634 3622 3e3c 7370 616e 2063 "#u:646">u │ │ │ +00059800: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00059820: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +00059830: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00059840: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00059850: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +00059860: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +00059870: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ +000598a0: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ +000598b0: 3c61 2069 643d 2261 3a36 3435 2220 636c a : A, │ │ │ +000599e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a)
.&nb │ │ │ +00059ab0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00059ac0: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;: u =< │ │ │ +00059ba0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +00059c00: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ +00059c70: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ +00059c80: 3c2f 613e 203c 6120 636c 6173 733d 2269 exists │ │ │ +00059d30: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00059d50: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ +00059d60: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00059d70: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00059d80: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +00059d90: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ +00059dc0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00059e20: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = ex_proj1 v, re │ │ │ +0005a060: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w < │ │ │ +0005a0a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005a0b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0005a0c0: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p in ex_proj2 │ │ │ +0005a1b0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u = ex_pr │ │ │ +0005a2f0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ +0005a300: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005a310: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005a320: 6f67 6963 2e68 746d 6c23 763a 3634 3722 ogic.html#v:647" │ │ │ +0005a330: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v. │ │ │ +0005a360: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Equivalen │ │ │ +0005a390: 6365 206f 6620 6571 7561 6c69 7479 206f ce of equality o │ │ │ +0005a3a0: 6620 3c73 7061 6e20 636c 6173 733d 2269 f ex involvi │ │ │ +0005a3f0: 6e67 2068 5072 6f70 7320 7769 7468 2065 ng hProps with e │ │ │ +0005a400: 7175 616c 6974 7920 6f66 2074 6865 2066 quality of the f │ │ │ +0005a410: 6972 7374 2063 6f6d 706f 6e65 6e74 7320 irst components │ │ │ +0005a420: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.  │ │ │ +0005a440: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ +0005a470: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on eq_e │ │ │ +0005a4e0: 785f 6870 726f 705f 6966 663c 2f73 7061 x_hprop_iff {A : │ │ │ +0005a550: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ +0005a580: 3c61 2069 643d 2250 3a36 3530 2220 636c P : A < │ │ │ +0005a680: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005a690: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0005a6a0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +0005a6e0: 283c 6120 6964 3d22 505f 6870 726f 703a (P_hprop : for │ │ │ +0005a770: 616c 6c3c 2f73 7061 6e3e 2028 3c61 2069 all (x : A) (p < │ │ │ +0005a890: 6120 6964 3d22 713a 3635 3322 2063 6c61 a id="q:653" cla │ │ │ +0005a8a0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0005a8b0: 2223 713a 3635 3322 3e3c 7370 616e 2063 "#q:653">q : P x), │ │ │ +0005aa00: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p = q)
. │ │ │ +0005aaf0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0005ab00: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0005ab10: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0005ab20: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0005ab30: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +0005ab40: 6120 6964 3d22 753a 3635 3622 2063 6c61 a id="u:656" cla │ │ │ +0005ab50: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0005ab60: 2223 753a 3635 3622 3e3c 7370 616e 2063 "#u:656">u │ │ │ +0005abc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0005abe0: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +0005abf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005ac00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005ac10: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +0005ac20: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +0005ac30: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ +0005ac60: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ +0005ac70: 3c61 2069 643d 2261 3a36 3535 2220 636c a : A, │ │ │ +0005ada0: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a)
.&nb │ │ │ +0005ae70: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0005ae80: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;: u =< │ │ │ +0005af60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +0005afc0: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ +0005b030: 266c 743b 2d26 6774 3b3c 2f73 7061 6e3e <-> │ │ │ +0005b040: 3c2f 613e 203c 6120 636c 6173 733d 2269 │ │ │ +0005b0b0: 283c 2f73 7061 6e3e 3c2f 613e 3c61 2063 (ex_proj1 u = e │ │ │ +0005b260: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 v< │ │ │ +0005b2d0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a>)< │ │ │ +0005b340: 2f73 7061 6e3e 3c2f 613e 3c62 722f 3e0a /span>
. │ │ │ +0005b350: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0005b360: 703b 266e 6273 703b 3a3d 203c 6120 636c p; := conj │ │ │ +0005b3d0: 2028 3c73 7061 6e20 636c 6173 733d 2269 (fun p │ │ │ +0005b450: 3c2f 613e 203d 2667 743b 203c 6120 636c => < │ │ │ +0005b490: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005b4a0: 7469 746c 653d 226c 656d 6d61 223e 665f title="lemma">f_ │ │ │ +0005b4b0: 6571 7561 6c3c 2f73 7061 6e3e 3c2f 613e equal │ │ │ +0005b4c0: 2028 403c 6120 636c 6173 733d 2269 6472 (@ex_p │ │ │ +0005b520: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ +0005b530: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _) < │ │ │ +0005b5b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005b5c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0005b5d0: 3e70 3c2f 7370 616e 3e3c 2f61 3e29 2028 >p) ( │ │ │ +0005b5e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_e │ │ │ +0005b640: 785f 6870 726f 703c 2f73 7061 6e3e 3c2f x_hprop P_h │ │ │ +0005b6b0: 7072 6f70 3c2f 7370 616e 3e3c 2f61 3e20 prop │ │ │ +0005b6c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +0005b720: 203c 6120 636c 6173 733d 2269 6472 6566 v).
..
. │ │ │ +0005b790: 266e 6273 703b 266e 6273 703b 3c73 7061   Lem │ │ │ +0005b7c0: 6d61 3c2f 7370 616e 3e20 3c61 2069 643d ma rew_ex {A' : Type │ │ │ +0005b8b0: 7d20 7b3c 6120 6964 3d22 783a 3636 3022 } {x} {P : A' - │ │ │ +0005ba30: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0005ba40: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} (< │ │ │ +0005ba70: 6120 6964 3d22 513a 3636 3322 2063 6c61 a id="Q:663" cla │ │ │ +0005ba80: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0005ba90: 2223 513a 3636 3322 3e3c 7370 616e 2063 "#Q:663">Q : forall< │ │ │ +0005baf0: 2f73 7061 6e3e 203c 6120 6964 3d22 613a /span> a, < │ │ │ +0005bb50: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005bb60: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005bb70: 6f67 6963 2e68 746d 6c23 503a 3636 3122 ogic.html#P:661" │ │ │ +0005bb80: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0005bbb0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +0005bc10: 203c 6120 636c 6173 733d 2269 6472 6566 ->
Prop) (u : │ │ │ +0005bd10: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0005bd80: 6578 6973 7473 3c2f 7370 616e 3e3c 2f61 exists p : P │ │ │ +0005be40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0005bea0: 783c 2f73 7061 6e3e 3c2f 613e 3c61 2063 x, Q x p< │ │ │ +0005c040: 2f73 7061 6e3e 3c2f 613e 2920 7b3c 6120 /span>) {y< │ │ │ +0005c0a0: 2f61 3e7d 2028 3c61 2069 643d 2248 3a36 /a>} ( │ │ │ +0005c0d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0005c0f0: 483c 2f73 7061 6e3e 3c2f 613e 203a 203c H : < │ │ │ +0005c100: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005c110: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005c120: 6f67 6963 2e68 746d 6c23 783a 3636 3022 ogic.html#x:660" │ │ │ +0005c130: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x │ │ │ +0005c160: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +0005c1d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0005c230: 793c 2f73 7061 6e3e 3c2f 613e 293c 6272 y)
.  & │ │ │ +0005c250: 6e62 7370 3b26 6e62 7370 3b3a 203c 6120 nbsp; : rew< │ │ │ +0005c2d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> [fun a
=> < │ │ │ +0005c3e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005c3f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005c400: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +0005c410: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +0005c420: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ +0005c450: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ +0005c460: 3c61 2069 643d 2270 3a36 3639 2220 636c p : P a< │ │ │ +0005c570: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>, Q a p
]< │ │ │ +0005c790: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> H │ │ │ +0005c7f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 in u
. &n │ │ │ +0005c8e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0005c8f0: 266e 6273 703b 266e 6273 703b 3c61 2063   
= ex_intro
.  │ │ │ +0005c9f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0005ca00: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0005ca10: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0005ca20: 3b26 6e62 7370 3b28 3c61 2063 6c61 7373 ; (Q
y)
. │ │ │ +0005caf0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0005cb00: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0005cb10: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0005cb20: 266e 6273 703b 266e 6273 703b 283c 6120   (rew H
in ex_p │ │ │ +0005cce0: 726f 6a31 3c2f 7370 616e 3e3c 2f61 3e20 roj1 │ │ │ +0005ccf0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +0005cd50: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ +0005cd60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0005cd70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0005cd80: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0005cd90: 7370 3b28 3c61 2063 6c61 7373 3d22 6964 sp;(rew< │ │ │ +0005ce10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> dependent H
< │ │ │ +0005cf60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005cf70: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0005cf80: 3e69 6e3c 2f73 7061 6e3e 3c2f 613e 203c >in < │ │ │ +0005cf90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005cfa0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005cfb0: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +0005cfc0: 6a32 223e 3c73 7061 6e20 636c 6173 733d j2">ex_proj2 │ │ │ +0005cff0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0005d050: 753c 2f73 7061 6e3e 3c2f 613e 292e 3c62 u)..End │ │ │ +0005d090: 3c61 2063 6c61 7373 3d22 6964 7265 6622 < │ │ │ +0005d0c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005d0d0: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ +0005d0e0: 6578 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ex..Global Argu │ │ │ +0005d120: 6d65 6e74 733c 2f73 7061 6e3e 203c 6120 ments eq_ex_i │ │ │ +0005d190: 6e74 726f 3c2f 7370 616e 3e3c 2f61 3e20 ntro │ │ │ +0005d1a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A P _ _ │ │ │ +0005d230: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _ _ !p !q / .
..
.Section ex2_Prop
.
.&nb │ │ │ +0005d380: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Variab │ │ │ +0005d3b0: 6c65 733c 2f73 7061 6e3e 2028 3c61 2069 les ( │ │ │ +0005d3f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A:< │ │ │ +0005d420: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005d430: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0005d440: 5072 6f70 3c2f 7370 616e 3e29 2028 3c61 Prop) (P │ │ │ +0005d4b0: 203c 6120 6964 3d22 6578 325f 5072 6f70 Q< │ │ │ +0005d510: 2f61 3e3a 3c61 2063 6c61 7373 3d22 6964 /a>:A │ │ │ +0005d570: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 -> │ │ │ +0005d5e0: 3c2f 7370 616e 3e3c 2f61 3e3c 7370 616e Prop │ │ │ +0005d610: 3c2f 7370 616e 3e29 2e3c 6272 2f3e 0a0a ).
.. │ │ │ +0005d620: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0005d630: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
ex2_rec │ │ │ +0005d6c0: 743c 2f73 7061 6e3e 3c2f 613e 2028 3c61 t (P0 : ex2 │ │ │ +0005d780: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 P Q - │ │ │ +0005d8c0: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0005d8d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Type) (< │ │ │ +0005d900: 6120 6964 3d22 663a 3638 3022 2063 6c61 a id="f:680" cla │ │ │ +0005d910: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0005d920: 2223 663a 3638 3022 3e3c 7370 616e 2063 "#f:680">f : forall< │ │ │ +0005d980: 2f73 7061 6e3e 203c 6120 6964 3d22 783a /span> x p │ │ │ +0005da30: 3c2f 613e 203c 6120 6964 3d22 713a 3637 < │ │ │ +0005da60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005da70: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ +0005da80: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , │ │ │ +0005dac0: 3c73 7061 6e20 636c 6173 733d 2269 6422 P0 │ │ │ +0005daf0: 283c 6120 636c 6173 733d 2269 6472 6566 (ex_i │ │ │ +0005db50: 6e74 726f 323c 2f73 7061 6e3e 3c2f 613e ntro2 │ │ │ +0005db60: 203c 6120 636c 6173 733d 2269 6472 6566 P │ │ │ +0005dc20: 513c 2f73 7061 6e3e 3c2f 613e 203c 6120 Q < │ │ │ +0005dc60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005dc70: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0005dc80: 3e78 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >x │ │ │ +0005dcc0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +0005dcf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005dd00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005dd10: 6f67 6963 2e68 746d 6c23 713a 3637 3922 ogic.html#q:679" │ │ │ +0005dd20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >q) │ │ │ +0005dd50: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ +0005dd60: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ +0005dd70: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +0005dda0: 3c61 2069 643d 2265 3a36 3831 2220 636c e, P0< │ │ │ +0005de50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> e │ │ │ +0005deb0: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0005dec0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0005ded0: 7370 3b26 6e62 7370 3b3a 3d20 3c73 7061 sp; := fun │ │ │ +0005df00: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 e = │ │ │ +0005df60: 2667 743b 203c 6120 636c 6173 733d 2269 > rew < │ │ │ +0005e060: 2d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 - ex2_eta e
in< │ │ │ +0005e1b0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ +0005e210: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _ _ │ │ │ +0005e260: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _..   │ │ │ +0005e2a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition ex2_rec : foral │ │ │ +0005e360: 6c3c 2f73 7061 6e3e 2028 3c61 2069 643d l (P0< │ │ │ +0005e3c0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : ex2 < │ │ │ +0005e460: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005e470: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0005e480: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P Q< │ │ │ +0005e4f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0005e560: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Set │ │ │ +0005e590: 3c2f 7370 616e 3e29 2028 3c61 2069 643d ) (f │ │ │ +0005e5f0: 203a 203c 7370 616e 2063 6c61 7373 3d22 : forall x
p │ │ │ +0005e6d0: 3c61 2069 643d 2271 3a36 3836 2220 636c q, P0< │ │ │ +0005e780: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (ex_intro2 │ │ │ +0005e7f0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 P Q x
p q< │ │ │ +0005e9e0: 2f73 7061 6e3e 3c2f 613e 2929 2c3c 6272 /span>)),
.  & │ │ │ +0005ea00: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0005ea10: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; forall │ │ │ +0005ea70: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0005ea90: 653c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 e, P0 │ │ │ +0005eb00: 203c 6120 636c 6173 733d 2269 6472 6566 e
. &nb │ │ │ +0005eb70: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ +0005eb80: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = ex2_r │ │ │ +0005ebe0: 6563 743c 2f73 7061 6e3e 3c2f 613e 2e3c ect.< │ │ │ +0005ebf0: 6272 2f3e 0a0a 3c62 722f 3e0a 3c73 7061 br/>..
.End │ │ │ +0005ec20: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373
ex │ │ │ +0005ec80: 325f 5072 6f70 3c2f 7370 616e 3e3c 2f61 2_Prop.
..
.< │ │ │ +0005eca0: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
.Equalit │ │ │ +0005ecc0: 7920 666f 7220 3c73 7061 6e20 636c 6173 y for < │ │ │ +0005ece0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005ecf0: 7469 746c 653d 2276 6172 223e 6578 323c title="var">ex2< │ │ │ +0005ed00: 2f73 7061 6e3e 3c2f 7370 616e 3e20 0a3c /span> .< │ │ │ +0005ed10: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.Sectio │ │ │ +0005ed50: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n < │ │ │ +0005ed80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005ed90: 7469 746c 653d 2273 6563 7469 6f6e 223e title="section"> │ │ │ +0005eda0: 6578 323c 2f73 7061 6e3e 3c2f 613e 2e3c ex2.< │ │ │ +0005edb0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0005edc0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Local Coercion │ │ │ +0005edf0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 ex_of_ex2 : ex2 >-> │ │ │ +0005f000: 6578 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 ex..   │ │ │ +0005f020: 3c73 7061 6e20 636c 6173 733d 2269 6422 Local Unset Imp │ │ │ +0005f050: 6c69 6369 7420 4172 6775 6d65 6e74 733c licit Arguments< │ │ │ +0005f060: 2f73 7061 6e3e 2e3c 6272 2f3e 0a3c 2f64 /span>.
...
.Projectin │ │ │ +0005f090: 6720 616e 2065 7175 616c 6974 7920 6f66 g an equality of │ │ │ +0005f0a0: 2061 2070 6169 7220 746f 2065 7175 616c a pair to equal │ │ │ +0005f0b0: 6974 7920 6f66 2074 6865 2066 6972 7374 ity of the first │ │ │ +0005f0c0: 2063 6f6d 706f 6e65 6e74 7320 0a3c 2f64 components ..
. &nb │ │ │ +0005f0f0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition ex_of_ex2_eq {A : Prop │ │ │ +0005f220: 7d20 7b3c 6120 6964 3d22 503a 3639 3022 } {P Q │ │ │ +0005f2d0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +0005f330: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0005f3a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ +0005f3d0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {u v : exists │ │ │ +0005f500: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 a : A< │ │ │ +0005f660: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +0005f6b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ +0005f6e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005f6f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005f700: 6f67 6963 2e68 746d 6c23 503a 3639 3022 ogic.html#P:690" │ │ │ +0005f710: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0005f740: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +0005f7a0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0005f810: 2661 6d70 3b3c 2f73 7061 6e3e 3c2f 613e & │ │ │ +0005f820: 203c 6120 636c 6173 733d 2269 6472 6566 Q a} (< │ │ │ +0005f910: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0005f920: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ +0005f930: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +0005f970: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ +0005f9a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0005f9b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0005f9c0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0005f9d0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0005f9e0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0005fa10: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> v │ │ │ +0005fa70: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +0005fa90: 6273 703b 266e 6273 703b 3a20 3c61 2063 bsp; : │ │ │ +0005faf0: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = v :> exists< │ │ │ +0005fcd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a : A │ │ │ +0005fd90: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 , │ │ │ +0005fe10: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +0005fe70: 203c 6120 636c 6173 733d 2269 6472 6566 a
. &nb │ │ │ +0005fee0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ +0005fef0: 3d20 3c61 2063 6c61 7373 3d22 6964 7265 = f_equal _ │ │ │ +0005ffb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p.< │ │ │ +0005ffe0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0005fff0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition ex_p │ │ │ +00060090: 726f 6a31 5f6f 665f 6578 325f 6571 3c2f roj1_of_ex2_eq {A : Prop │ │ │ +00060130: 7d20 7b3c 6120 6964 3d22 503a 3639 3922 } {P Q │ │ │ +000601e0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +00060240: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +000602b0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ +000602e0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {u v
: exists │ │ │ +00060410: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 a : A< │ │ │ +00060570: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +000605c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ +000605f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00060600: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00060610: 6f67 6963 2e68 746d 6c23 503a 3639 3922 ogic.html#P:699" │ │ │ +00060620: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +00060650: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +000606b0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00060720: 2661 6d70 3b3c 2f73 7061 6e3e 3c2f 613e & │ │ │ +00060730: 203c 6120 636c 6173 733d 2269 6472 6566 Q a} (< │ │ │ +00060820: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00060830: 7469 746c 653d 2262 696e 6465 7222 3e70 title="binder">p │ │ │ +00060840: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +00060880: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ +000608b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000608c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000608d0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +000608e0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +000608f0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00060920: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> v │ │ │ +00060980: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +000609a0: 6273 703b 266e 6273 703b 3a20 3c61 2063 bsp; : ex_proj1
u = e │ │ │ +00060b50: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 v< │ │ │ +00060bc0: 2f61 3e3c 6272 2f3e 0a26 6e62 7370 3b26 /a>
. & │ │ │ +00060bd0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00060be0: 3b3a 3d20 3c61 2063 6c61 7373 3d22 6964 ;:=
│ │ │ +00060c40: 6578 5f70 726f 6a31 5f65 713c 2f73 7061 ex_proj1_eq (ex_of_ex2_e │ │ │ +00060cc0: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q < │ │ │ +00060d00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00060d10: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00060d20: 3e70 3c2f 7370 616e 3e3c 2f61 3e29 2e3c >p).< │ │ │ +00060d30: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
...
.Projecting │ │ │ +00060d60: 2061 6e20 6571 7561 6c69 7479 206f 6620 an equality of │ │ │ +00060d70: 6120 7061 6972 2074 6f20 6571 7561 6c69 a pair to equali │ │ │ +00060d80: 7479 206f 6620 7468 6520 7365 636f 6e64 ty of the second │ │ │ +00060d90: 2063 6f6d 706f 6e65 6e74 7320 0a3c 2f64 components ..
. &nb │ │ │ +00060dc0: 7370 3b3c 7370 616e 2063 6c61 7373 3d22 sp;Definition ex │ │ │ +00060e60: 5f70 726f 6a32 5f6f 665f 6578 325f 6571 _proj2_of_ex2_eq │ │ │ +00060e70: 3c2f 7370 616e 3e3c 2f61 3e20 7b3c 6120 {A< │ │ │ +00060ed0: 2f61 3e20 3a20 3c73 7061 6e20 636c 6173 /a> : Prop} {< │ │ │ +00060f30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00060f40: 7469 746c 653d 2262 696e 6465 7222 3e50 title="binder">P │ │ │ +00060f50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 Q : A -&g │ │ │ +00061080: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c73 t; P │ │ │ +000610b0: 726f 703c 2f73 7061 6e3e 7d20 7b3c 6120 rop} {u< │ │ │ +00061110: 2f61 3e20 3c61 2069 643d 2276 3a37 3132 /a> v< │ │ │ +00061160: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : exis │ │ │ +000611e0: 7473 323c 2f73 7061 6e3e 3c2f 613e 203c ts2 < │ │ │ +000611f0: 6120 6964 3d22 613a 3730 3922 2063 6c61 a id="a:709" cla │ │ │ +00061200: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00061210: 2223 613a 3730 3922 3e3c 7370 616e 2063 "#a:709">a : │ │ │ +000612e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 A, │ │ │ +000613c0: 203c 6120 636c 6173 733d 2269 6472 6566 P a │ │ │ +000614d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 & Q< │ │ │ +00061560: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +000615c0: 3c2f 613e 7d20 283c 6120 6964 3d22 703a } (p : │ │ │ +00061620: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00061680: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +000616f0: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +00061730: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00061740: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00061750: 3e76 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >v).   │ │ │ +00061770: 266e 6273 703b 266e 6273 703b 3a20 3c61   : rew ex_p │ │ │ +00061860: 726f 6a31 5f6f 665f 6578 325f 6571 3c2f roj1_of_ex2_eq p< │ │ │ +000618d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> in │ │ │ +00061950: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ +000619b0: 5f70 726f 6a32 3c2f 7370 616e 3e3c 2f61 _proj2 u │ │ │ +00061a70: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00061aa0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00061ab0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00061ac0: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +00061ad0: 6a32 223e 3c73 7061 6e20 636c 6173 733d j2">ex_proj2 │ │ │ +00061b00: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00061b60: 763c 2f73 7061 6e3e 3c2f 613e 3c62 722f v
.  &n │ │ │ +00061b80: 6273 703b 266e 6273 703b 3a3d 203c 6120 bsp; := rew< │ │ │ +00061c10: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> depe │ │ │ +00061c90: 6e64 656e 743c 2f73 7061 6e3e 3c2f 613e ndent │ │ │ +00061ca0: 203c 6120 636c 6173 733d 2269 6472 6566 p in eq_refl< │ │ │ +00061df0: 2f61 3e2e 3c62 722f 3e0a 0a3c 6272 2f3e /a>.
..
│ │ │ +00061e00: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
.Proje │ │ │ +00061e20: 6374 696e 6720 616e 2065 7175 616c 6974 cting an equalit │ │ │ +00061e30: 7920 6f66 2061 2070 6169 7220 746f 2065 y of a pair to e │ │ │ +00061e40: 7175 616c 6974 7920 6f66 2074 6865 2074 quality of the t │ │ │ +00061e50: 6869 7264 2063 6f6d 706f 6e65 6e74 7320 hird components │ │ │ +00061e60: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
.  │ │ │ +00061e80: 3b26 6e62 7370 3b3c 7370 616e 2063 6c61 ; Definiti │ │ │ +00061eb0: 6f6e 3c2f 7370 616e 3e20 3c61 2069 643d on │ │ │ +00061ef0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj3_eq< │ │ │ +00061f20: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Prop} {P< │ │ │ +00062000: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> Q : A │ │ │ +000620c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 -> │ │ │ +00062130: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Pr │ │ │ +00062160: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {u v : exist │ │ │ +00062290: 7332 3c2f 7370 616e 3e3c 2f61 3e20 3c61 s2 a :< │ │ │ +00062390: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> A │ │ │ +000623f0: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 , │ │ │ +00062470: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +000624d0: 203c 6120 636c 6173 733d 2269 6472 6566 a < │ │ │ +00062580: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00062590: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +000625a0: 3e26 616d 703b 3c2f 7370 616e 3e3c 2f61 >& Q a< │ │ │ +00062670: 2f61 3e7d 2028 3c61 2069 643d 2270 3a37 /a>} ( │ │ │ +000626a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000626c0: 703c 2f73 7061 6e3e 3c2f 613e 203a 203c p : < │ │ │ +000626d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000626e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000626f0: 6f67 6963 2e68 746d 6c23 753a 3731 3922 ogic.html#u:719" │ │ │ +00062700: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ +00062730: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +000627a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00062800: 763c 2f73 7061 6e3e 3c2f 613e 293c 6272 v)
.  & │ │ │ +00062820: 6e62 7370 3b26 6e62 7370 3b3a 203c 6120 nbsp; : rew ex_pr │ │ │ +00062910: 6f6a 315f 6f66 5f65 7832 5f65 713c 2f73 oj1_of_ex2_eq
p in< │ │ │ +00062a00: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ +00062a60: 7072 6f6a 333c 2f73 7061 6e3e 3c2f 613e proj3 │ │ │ +00062a70: 203c 6120 636c 6173 733d 2269 6472 6566 u < │ │ │ +00062b20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00062b30: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00062b40: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= ex_proj3< │ │ │ +00062bb0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> v │ │ │ +00062c10: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +00062c20: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +00062c30: 7370 3b26 6e62 7370 3b3a 3d20 3c61 2063 sp; := rew depen │ │ │ +00062d40: 6465 6e74 3c2f 7370 616e 3e3c 2f61 3e20 dent │ │ │ +00062d50: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ +00062db0: 203c 6120 636c 6173 733d 2269 6472 6566 in │ │ │ +00062e90: 6571 5f72 6566 6c3c 2f73 7061 6e3e 3c2f eq_refl.
..
. │ │ │ +00062eb0: 3c2f 6469 763e 0a0a 3c64 6976 2063 6c61
..
.Equali │ │ │ +00062ed0: 7479 206f 6620 3c73 7061 6e20 636c 6173 ty of < │ │ │ +00062ef0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00062f00: 7469 746c 653d 2276 6172 223e 6578 323c title="var">ex2< │ │ │ +00062f10: 2f73 7061 6e3e 3c2f 7370 616e 3e20 6973 /span> is │ │ │ +00062f20: 2069 7473 656c 6620 6120 3c73 7061 6e20 itself a │ │ │ +00062f60: 6578 323c 2f73 7061 6e3e 3c2f 7370 616e ex2 (fowards-reaso │ │ │ +00062f80: 6e69 6e67 2076 6572 7369 6f6e 2920 0a3c ning version) .< │ │ │ +00062f90: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
. & │ │ │ +00062fb0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ +00062fe0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265 eq_ex_in │ │ │ +00063060: 7472 6f32 5f75 6e63 7572 7269 6564 3c2f tro2_uncurried {A : Type │ │ │ +00063100: 7d20 7b3c 6120 6964 3d22 503a 3732 3322 } {P Q │ │ │ +000631b0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +00063210: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00063280: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ +000632b0: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {u1 │ │ │ +00063310: 3c2f 613e 203c 6120 6964 3d22 7631 3a37 v1 : │ │ │ +00063370: 203c 6120 636c 6173 733d 2269 6472 6566 A} { │ │ │ +00063400: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00063420: 7532 3c2f 7370 616e 3e3c 2f61 3e20 3a20 u2 : │ │ │ +00063430: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +00063490: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +000634f0: 2f61 3e7d 207b 3c61 2069 643d 2276 323a /a>} {v2 │ │ │ +00063550: 3a20 3c61 2063 6c61 7373 3d22 6964 7265 : P v1} {u3 : Q │ │ │ +000636d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u1} {v3< │ │ │ +00063790: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : Q v1}
. │ │ │ +00063860: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00063870: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00063880: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00063890: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000638a0: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +000638b0: 6120 6964 3d22 7071 723a 3733 3322 2063 a id="pqr:733" c │ │ │ +000638c0: 6c61 7373 3d22 6964 7265 6622 2068 7265 lass="idref" hre │ │ │ +000638d0: 663d 2223 7071 723a 3733 3322 3e3c 7370 f="#pqr:733">pqr │ │ │ +00063900: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : exi │ │ │ +00063980: 7374 7332 3c2f 7370 616e 3e3c 2f61 3e20 sts2 │ │ │ +00063990: 3c61 2069 643d 2270 3a37 3331 2220 636c p : u1
= │ │ │ +00063b60: 3c2f 613e 203c 6120 636c 6173 733d 2269 v1, r │ │ │ +00063cb0: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ +00063cf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +00063d20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00063d30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00063d40: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +00063d50: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +00063d60: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in
u2 │ │ │ +00063df0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v2< │ │ │ +00063ed0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ +00063f50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> rew p in │ │ │ +000640b0: 203c 6120 636c 6173 733d 2269 6472 6566 u3< │ │ │ +00064110: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00064190: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v3)
. & │ │ │ +00064200: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00064210: 3b3a 203c 6120 636c 6173 733d 2269 6472 ;:
ex │ │ │ +00064270: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 │ │ │ +000642a0: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _ < │ │ │ +000642d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000642e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000642f0: 6f67 6963 2e68 746d 6c23 7531 3a37 3235 ogic.html#u1:725 │ │ │ +00064300: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u1 u2 │ │ │ +00064390: 3c2f 613e 203c 6120 636c 6173 733d 2269 u3 =< │ │ │ +00064470: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ +000644d0: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ +000644e0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _ │ │ │ +00064530: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1 v2 v3
.
.. │ │ │ +00064660: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +00064680: 4571 7561 6c69 7479 206f 6620 3c73 7061 Equality of ex2 is itself a │ │ │ +000646e0: 3c73 7061 6e20 636c 6173 733d 2269 6e6c ex2 │ │ │ +00064720: 3c2f 7370 616e 3e20 2862 6163 6b77 6172 (backwar │ │ │ +00064730: 6473 2d72 6561 736f 6e69 6e67 2076 6572 ds-reasoning ver │ │ │ +00064740: 7369 6f6e 2920 0a3c 2f64 6976 3e0a 3c64 sion) .
. │ │ │ +00064760: 0a26 6e62 7370 3b26 6e62 7370 3b3c 7370 .  De │ │ │ +00064790: 6669 6e69 7469 6f6e 3c2f 7370 616e 3e20 finition │ │ │ +000647a0: 3c61 2069 643d 2265 715f 6578 325f 756e │ │ │ +000647e0: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex2_uncur │ │ │ +00064810: 7269 6564 3c2f 7370 616e 3e3c 2f61 3e20 ried │ │ │ +00064820: 7b3c 6120 6964 3d22 413a 3733 3422 2063 {A : Prop< │ │ │ +000648a0: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ +00064900: 3c61 2069 643d 2251 3a37 3336 2220 636c Q : A < │ │ │ +00064a00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00064a10: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00064a20: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +00064a60: 283c 6120 6964 3d22 753a 3733 3922 2063 (u v : │ │ │ +00064b10: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00064b80: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 a : A, │ │ │ +00064d60: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a & Q a
)
.& │ │ │ +00064f70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00064f80: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00064f90: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00064fa0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00064fb0: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (pqr< │ │ │ +00065010: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : exis │ │ │ +00065090: 7473 323c 2f73 7061 6e3e 3c2f 613e 203c ts2 < │ │ │ +000650a0: 6120 6964 3d22 703a 3734 3122 2063 6c61 a id="p:741" cla │ │ │ +000650b0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +000650c0: 2223 703a 3734 3122 3e3c 7370 616e 2063 "#p:741">p : │ │ │ +00065190: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ +000651f0: 5f70 726f 6a31 3c2f 7370 616e 3e3c 2f61 _proj1 u │ │ │ +000652b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +000652e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000652f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00065300: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +00065310: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ +00065340: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +000653a0: 763c 2f73 7061 6e3e 3c2f 613e 3c61 2063 v,
.&nb │ │ │ +00065430: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00065440: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00065450: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00065460: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00065470: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00065480: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00065490: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000654a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000654b0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000654c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000654d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000654e0: 3b26 6e62 7370 3b26 6e62 7370 3b3c 6120 ;  rew p
in ex_p │ │ │ +000656a0: 726f 6a32 3c2f 7370 616e 3e3c 2f61 3e20 roj2 │ │ │ +000656b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00065710: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00065780: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = ex_proj2 v< │ │ │ +00065850: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ +000658d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> rew p in │ │ │ +00065a30: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ +00065a90: 6a33 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j3 │ │ │ +00065ad0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ +00065b00: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00065b10: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00065b20: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00065b30: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00065b40: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00065b70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00065bb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj3 v)
.& │ │ │ +00065c50: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00065c60: 3b26 6e62 7370 3b3a 203c 6120 636c 6173 ; : u = v.
...
..
.Cu │ │ │ +00065dd0: 7272 6965 6420 7665 7273 696f 6e20 6f66 rried version of │ │ │ +00065de0: 2070 726f 7669 6e67 2065 7175 616c 6974 proving equalit │ │ │ +00065df0: 7920 6f66 203c 7370 616e 2063 6c61 7373 y of ex type │ │ │ +00065e40: 7320 0a3c 2f64 6976 3e0a 3c64 6976 2063 s .
.
.&nb │ │ │ +00065e60: 7370 3b26 6e62 7370 3b3c 7370 616e 2063 sp; Defini │ │ │ +00065e90: 7469 6f6e 3c2f 7370 616e 3e20 3c61 2069 tion eq_e │ │ │ +00065ef0: 7832 3c2f 7370 616e 3e3c 2f61 3e20 7b3c x2 {< │ │ │ +00065f00: 6120 6964 3d22 413a 3734 3422 2063 6c61 a id="A:744" cla │ │ │ +00065f10: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00065f20: 2223 413a 3734 3422 3e3c 7370 616e 2063 "#A:744">A : Prop} {P Q │ │ │ +00066030: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00066100: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00066110: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} (< │ │ │ +00066140: 6120 6964 3d22 753a 3734 3922 2063 6c61 a id="u:749" cla │ │ │ +00066150: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00066160: 2223 753a 3734 3922 3e3c 7370 616e 2063 "#u:749">u │ │ │ +000661c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000661e0: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +000661f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00066200: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00066210: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +00066220: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +00066230: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">ex │ │ │ +00066260: 6973 7473 323c 2f73 7061 6e3e 3c2f 613e ists2 │ │ │ +00066270: 203c 6120 6964 3d22 613a 3734 3722 2063 a< │ │ │ +000662e0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : A, P< │ │ │ +000664a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +00066500: 3c2f 613e 203c 6120 636c 6173 733d 2269 & │ │ │ +00066580: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a)
.&nb │ │ │ +00066650: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00066660: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00066670: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00066680: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00066690: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (p : ex │ │ │ +00066750: 5f70 726f 6a31 3c2f 7370 616e 3e3c 2f61 _proj1 u │ │ │ +00066810: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +00066840: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00066850: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00066860: 6f67 6963 2e68 746d 6c23 6578 5f70 726f ogic.html#ex_pro │ │ │ +00066870: 6a31 223e 3c73 7061 6e20 636c 6173 733d j1">ex_proj1 │ │ │ +000668a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00066900: 763c 2f73 7061 6e3e 3c2f 613e 293c 6272 v)
.  & │ │ │ +00066920: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00066930: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00066940: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00066950: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00066960: 3b28 3c61 2069 643d 2271 3a37 3532 2220 ;(q
: rew p in │ │ │ +00066b10: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ +00066b70: 6a32 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j2 │ │ │ +00066bb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ +00066be0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00066bf0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00066c00: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +00066c10: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +00066c20: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +00066c50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00066c90: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj2 v)
.& │ │ │ +00066d30: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00066d40: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00066d50: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00066d60: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00066d70: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (r │ │ │ +00066dd0: 3c2f 613e 203a 203c 6120 636c 6173 733d : rew p i │ │ │ +00066f20: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n ex_proj3 u< │ │ │ +00066ff0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> =
│ │ │ +000670d0: 6578 5f70 726f 6a33 3c2f 7370 616e 3e3c ex_proj3< │ │ │ +000670e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +00067140: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ +00067150: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00067160: 7370 3b3a 203c 6120 636c 6173 733d 2269 sp;: u = v
. &n │ │ │ +000672b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000672c0: 3a3d 203c 6120 636c 6173 733d 2269 6472 :=
│ │ │ +00067300: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex2_uncur │ │ │ +00067330: 7269 6564 3c2f 7370 616e 3e3c 2f61 3e20 ried │ │ │ +00067340: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +000673a0: 203c 6120 636c 6173 733d 2269 6472 6566 v (ex │ │ │ +00067460: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 │ │ │ +00067490: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _ < │ │ │ +000674c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000674d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000674e0: 6f67 6963 2e68 746d 6c23 703a 3735 3122 ogic.html#p:751" │ │ │ +000674f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p │ │ │ +00067520: 3c61 2063 6c61 7373 3d22 6964 7265 6622 q │ │ │ +00067580: 203c 6120 636c 6173 733d 2269 6472 6566 r).
..
. │ │ │ +000675f0: 266e 6273 703b 266e 6273 703b 3c73 7061   Def │ │ │ +00067620: 696e 6974 696f 6e3c 2f73 7061 6e3e 203c inition < │ │ │ +00067630: 6120 6964 3d22 6571 5f65 785f 696e 7472 a id="eq_ex_intr │ │ │ +00067640: 6f32 2220 636c 6173 733d 2269 6472 6566 o2" class="idref │ │ │ +00067650: 2220 6872 6566 3d22 2365 715f 6578 5f69 " href="#eq_ex_i │ │ │ +00067660: 6e74 726f 3222 3e3c 7370 616e 2063 6c61 ntro2">eq_ex │ │ │ +00067690: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 {A< │ │ │ +000676f0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Ty │ │ │ +00067720: 7065 3c2f 7370 616e 3e7d 207b 3c61 2069 pe} {P Q : │ │ │ +00067830: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ +000678b0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop} { │ │ │ +00067910: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00067930: 7531 3c2f 7370 616e 3e3c 2f61 3e20 3c61 u1 v1 : A< │ │ │ +000679f0: 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 6120 /span>} {u2 : P u │ │ │ +00067b10: 313c 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 1} {< │ │ │ +00067b20: 6120 6964 3d22 7632 3a37 3630 2220 636c a id="v2:760" cl │ │ │ +00067b30: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00067b40: 3d22 2376 323a 3736 3022 3e3c 7370 616e ="#v2:760">v2 : P │ │ │ +00067bd0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00067c10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00067c20: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00067c30: 3e76 313c 2f73 7061 6e3e 3c2f 613e 7d20 >v1} │ │ │ +00067c40: 7b3c 6120 6964 3d22 7533 3a37 3631 2220 {u3< │ │ │ +00067c90: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +00067cd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00067ce0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00067cf0: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q u1 │ │ │ +00067d60: 7d20 7b3c 6120 6964 3d22 7633 3a37 3632 } {< │ │ │ +00067d90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00067da0: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ +00067db0: 333c 2f73 7061 6e3e 3c2f 613e 203a 203c 3 : < │ │ │ +00067dc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00067dd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00067de0: 6f67 6963 2e68 746d 6c23 513a 3735 3622 ogic.html#Q:756" │ │ │ +00067df0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ +00067e20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1}
. & │ │ │ +00067e90: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00067ea0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00067eb0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00067ec0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00067ed0: 3b26 6e62 7370 3b28 3c61 2069 643d 2270 ; (
p : │ │ │ +00067f30: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +00067f90: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00068010: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1)
. & │ │ │ +00068080: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00068090: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000680a0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000680b0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000680c0: 3b26 6e62 7370 3b28 3c61 2069 643d 2271 ; (
q : │ │ │ +00068120: 203c 6120 636c 6173 733d 2269 6472 6566 rew │ │ │ +00068190: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +000681f0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p in u2 = v2)
.& │ │ │ +000683c0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000683d0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000683e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000683f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00068400: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (r │ │ │ +00068460: 3c2f 613e 203a 203c 6120 636c 6173 733d : rew p i │ │ │ +000685b0: 6e3c 2f73 7061 6e3e 3c2f 613e 203c 6120 n │ │ │ +000685f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 u3 │ │ │ +00068620: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00068690: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +000686d0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000686e0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000686f0: 3e76 333c 2f73 7061 6e3e 3c2f 613e 293c >v3)< │ │ │ +00068700: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00068710: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ +00068720: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00068730: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00068740: 6f67 6963 2e68 746d 6c23 6578 5f69 6e74 ogic.html#ex_int │ │ │ +00068750: 726f 3222 3e3c 7370 616e 2063 6c61 7373 ro2">ex_int │ │ │ +00068780: 726f 323c 2f73 7061 6e3e 3c2f 613e 203c ro2 < │ │ │ +00068790: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000687a0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000687b0: 6f67 6963 2e68 746d 6c23 503a 3735 3522 ogic.html#P:755" │ │ │ +000687c0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +000687f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +00068850: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +000688b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u2 u3 = ex_intro2 P Q v1< │ │ │ +00068b80: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00068be0: 7632 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v2 v3 │ │ │ +00068c50: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00068c60: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ +00068c70: 203c 6120 636c 6173 733d 2269 6472 6566 eq_ex_in │ │ │ +00068ce0: 7472 6f32 5f75 6e63 7572 7269 6564 3c2f tro2_uncurried (ex_intro2< │ │ │ +00068d60: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ +00068d90: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00068db0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> p q
r).
│ │ │ +00068ee0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
.
.. │ │ │ +00068ef0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
.In order to ha │ │ │ +00068f10: 7665 2061 2070 6572 666f 726d 616e 7420 ve a performant │ │ │ +00068f20: 3c73 7061 6e20 636c 6173 733d 2269 6e6c inversion_ │ │ │ +00068f60: 7369 676d 613c 2f73 7061 6e3e 3c2f 7370 sigma, we define. │ │ │ +00068f80: 2020 2020 2073 7065 6369 616c 697a 6564 specialized │ │ │ +00068f90: 2076 6572 7369 6f6e 7320 666f 7220 7768 versions for wh │ │ │ +00068fa0: 656e 2077 6520 6861 7665 2063 6f6e 7374 en we have const │ │ │ +00068fb0: 7275 6374 6f72 7320 6f6e 206f 6e65 206f ructors on one o │ │ │ +00068fc0: 720a 2020 2020 2020 626f 7468 2073 6964 r. both sid │ │ │ +00068fd0: 6573 206f 6620 7468 6520 6571 7561 6c69 es of the equali │ │ │ +00068fe0: 7479 200a 3c2f 6469 763e 0a3c 6469 7620 ty .
.
.&n │ │ │ +00069000: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ +00069030: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition eq_ │ │ │ +000690a0: 6578 5f69 6e74 726f 325f 6c3c 2f73 7061 ex_intro2_l {A : │ │ │ +00069110: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} { │ │ │ +00069140: 3c61 2069 643d 2250 3a37 3637 2220 636c P Q : │ │ │ +000691f0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +00069250: 203c 6120 636c 6173 733d 2269 6472 6566 -> Prop} u1 │ │ │ +00069350: 203c 6120 6964 3d22 7532 3a37 3730 2220 u2< │ │ │ +000693a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> u3 │ │ │ +00069400: 3c2f 613e 2028 3c61 2069 643d 2276 3a37 ( │ │ │ +00069430: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00069450: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +00069460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00069470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00069480: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +00069490: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +000694a0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">ex │ │ │ +000694d0: 6973 7473 323c 2f73 7061 6e3e 3c2f 613e ists2 │ │ │ +000694e0: 203c 6120 6964 3d22 613a 3737 3222 2063 a< │ │ │ +00069550: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : A, P< │ │ │ +00069710: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +00069770: 3c2f 613e 203c 6120 636c 6173 733d 2269 & │ │ │ +000697f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a)
.&nb │ │ │ +000698c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000698d0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000698e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +000698f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00069900: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (p : u1 =< │ │ │ +00069a40: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ +00069aa0: 7072 6f6a 313c 2f73 7061 6e3e 3c2f 613e proj1 │ │ │ +00069ab0: 203c 6120 636c 6173 733d 2269 6472 6566 v) (q< │ │ │ +00069b60: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : rew p in u2 = ex_pr │ │ │ +00069e00: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ +00069e10: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00069e20: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00069e30: 6f67 6963 2e68 746d 6c23 763a 3737 3422 ogic.html#v:774" │ │ │ +00069e40: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v) │ │ │ +00069e70: 2028 3c61 2069 643d 2272 3a37 3737 2220 (r
: rew p in │ │ │ +0006a020: 203c 6120 636c 6173 733d 2269 6472 6566 u3< │ │ │ +0006a080: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +0006a100: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ +0006a160: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 < │ │ │ +0006a1a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006a1b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0006a1c0: 3e76 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >v).   │ │ │ +0006a1e0: 266e 6273 703b 266e 6273 703b 3a20 3c61   : ex_intr │ │ │ +0006a250: 6f32 3c2f 7370 616e 3e3c 2f61 3e20 3c61 o2 │ │ │ +0006a290: 3c73 7061 6e20 636c 6173 733d 2269 6422 P < │ │ │ +0006a2c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006a2d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006a2e0: 6f67 6963 2e68 746d 6c23 513a 3736 3822 ogic.html#Q:768" │ │ │ +0006a2f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ +0006a320: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u1 u2 u3 = │ │ │ +0006a4c0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v
.  │ │ │ +0006a530: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006a540: 7370 3b3a 3d20 3c61 2063 6c61 7373 3d22 sp;:= eq_ │ │ │ +0006a5a0: 6578 323c 2f73 7061 6e3e 3c2f 613e 2028 ex2 ( │ │ │ +0006a5b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_in │ │ │ +0006a610: 7472 6f32 3c2f 7370 616e 3e3c 2f61 3e20 tro2 │ │ │ +0006a620: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +0006a680: 203c 6120 636c 6173 733d 2269 6472 6566 Q u1 │ │ │ +0006a740: 3c2f 613e 203c 6120 636c 6173 733d 2269 u2 u3< │ │ │ +0006a800: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) │ │ │ +0006a860: 763c 2f73 7061 6e3e 3c2f 613e 203c 6120 v < │ │ │ +0006a8a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006a8b0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0006a8c0: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p │ │ │ +0006a900: 3c73 7061 6e20 636c 6173 733d 2269 6422 q < │ │ │ +0006a930: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006a940: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006a950: 6f67 6963 2e68 746d 6c23 723a 3737 3722 ogic.html#r:777" │ │ │ +0006a960: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >r. │ │ │ +0006a990: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0006a9a0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition
eq_ex_intro │ │ │ +0006aa40: 325f 723c 2f73 7061 6e3e 3c2f 613e 207b 2_r { │ │ │ +0006aa50: 3c61 2069 643d 2241 3a37 3738 2220 636c A : Prop} {P < │ │ │ +0006ab30: 6120 6964 3d22 513a 3738 3022 2063 6c61 a id="Q:780" cla │ │ │ +0006ab40: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0006ab50: 2223 513a 3738 3022 3e3c 7370 616e 2063 "#Q:780">Q : A
│ │ │ +0006ac50: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +0006ac60: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} ( │ │ │ +0006ac90: 3c61 2069 643d 2275 3a37 3833 2220 636c u : exists2< │ │ │ +0006ad60: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a │ │ │ +0006ade0: 3c2f 613e 203c 6120 636c 6173 733d 2269 : │ │ │ +0006ae60: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +0006af30: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ +0006af70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006af80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0006af90: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ +0006afd0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a < │ │ │ +0006b000: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006b010: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006b020: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +0006b030: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +0006b040: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">&a │ │ │ +0006b070: 6d70 3b3c 2f73 7061 6e3e 3c2f 613e 203c mp; < │ │ │ +0006b080: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006b090: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006b0a0: 6f67 6963 2e68 746d 6c23 513a 3738 3022 ogic.html#Q:780" │ │ │ +0006b0b0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ +0006b0e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +0006b140: 2920 3c61 2069 643d 2276 313a 3738 3422 ) v1 │ │ │ +0006b190: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v2 v3< │ │ │ +0006b250: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0006b260: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006b270: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0006b280: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006b290: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006b2a0: 7370 3b28 3c61 2069 643d 2270 3a37 3837 sp;(p< │ │ │ +0006b2f0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : ex_proj1 u< │ │ │ +0006b3c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> = v1) (q : < │ │ │ +0006b550: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006b560: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0006b570: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ +0006b580: 3c61 2063 6c61 7373 3d22 6964 7265 6622 p │ │ │ +0006b5e0: 203c 6120 636c 6173 733d 2269 6472 6566 in< │ │ │ +0006b650: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0006b690: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj2 u = │ │ │ +0006b7a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v2) (r │ │ │ +0006b860: 203a 203c 6120 636c 6173 733d 2269 6472 : r │ │ │ +0006b8d0: 6577 3c2f 7370 616e 3e3c 2f61 3e20 3c61 ew │ │ │ +0006b910: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +0006b940: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006b950: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006b960: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +0006b970: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f78 tions.:::'rew'_x │ │ │ +0006b980: 5f27 696e 275f 7822 3e3c 7370 616e 2063 _'in'_x">in ex_proj3 u = v3)
.&nbs │ │ │ +0006bb70: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0006bb80: 6273 703b 3a20 3c61 2063 6c61 7373 3d22 bsp;: u = ex │ │ │ +0006bcc0: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 P< │ │ │ +0006bd30: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> Q │ │ │ +0006bd90: 3c2f 613e 203c 6120 636c 6173 733d 2269 v1 v2< │ │ │ +0006be50: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0006beb0: 7633 3c2f 7370 616e 3e3c 2f61 3e3c 6272 v3
.  & │ │ │ +0006bed0: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := eq_ex2 u (< │ │ │ +0006bfe0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006bff0: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +0006c000: 6f72 223e 6578 5f69 6e74 726f 323c 2f73 or">ex_intro2
P Q< │ │ │ +0006c0d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0006c130: 7631 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v1 v2 │ │ │ +0006c1a0: 203c 6120 636c 6173 733d 2269 6472 6566 v3< │ │ │ +0006c200: 2f61 3e29 203c 6120 636c 6173 733d 2269 /a>) p q r.
..< │ │ │ +0006c330: 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c 6469 br/>.
...E │ │ │ +0006c350: 7175 616c 6974 7920 6f66 203c 7370 616e quality of ex2 when the seco │ │ │ +0006c3b0: 6e64 2070 726f 7065 7274 7920 6973 2061 nd property is a │ │ │ +0006c3c0: 6e20 6850 726f 7020 0a3c 2f64 6976 3e0a n hProp .
. │ │ │ +0006c3d0: 3c64 6976 2063 6c61 7373 3d22 636f 6465
.  < │ │ │ +0006c3f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006c400: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0006c410: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition eq │ │ │ +0006c480: 5f65 7832 5f68 7072 6f70 3c2f 7370 616e _ex2_hprop {A : │ │ │ +0006c4f0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +0006c520: 6120 6964 3d22 503a 3739 3122 2063 6c61 a id="P:791" cla │ │ │ +0006c530: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0006c540: 2223 503a 3739 3122 3e3c 7370 616e 2063 "#P:791">P │ │ │ +0006c5a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0006c5c0: 513c 2f73 7061 6e3e 3c2f 613e 203a 203c Q : < │ │ │ +0006c5d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006c5e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006c5f0: 6f67 6963 2e68 746d 6c23 413a 3739 3022 ogic.html#A:790" │ │ │ +0006c600: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ +0006c630: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop} (Q_h │ │ │ +0006c730: 7072 6f70 3c2f 7370 616e 3e3c 2f61 3e20 prop │ │ │ +0006c740: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ +0006c770: 2028 3c61 2069 643d 2278 3a37 3933 2220 (x : A │ │ │ +0006c820: 3c2f 7370 616e 3e3c 2f61 3e29 2028 3c61 ) (p │ │ │ +0006c880: 3c2f 613e 203c 6120 6964 3d22 713a 3739 < │ │ │ +0006c8b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006c8c0: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ +0006c8d0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +0006c910: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ +0006c940: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006c950: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006c960: 6f67 6963 2e68 746d 6c23 783a 3739 3322 ogic.html#x:793" │ │ │ +0006c970: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >x) │ │ │ +0006c9a0: 2c20 3c61 2063 6c61 7373 3d22 6964 7265 , p │ │ │ +0006ca50: 3c73 7061 6e20 636c 6173 733d 2269 6422 = < │ │ │ +0006ca80: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006ca90: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006caa0: 6f67 6963 2e68 746d 6c23 713a 3739 3522 ogic.html#q:795" │ │ │ +0006cab0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >q) │ │ │ +0006cae0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +0006caf0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0006cb00: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0006cb10: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0006cb20: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0006cb30: 6273 703b 283c 6120 6964 3d22 753a 3739 bsp;(< │ │ │ +0006cb60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006cb70: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ +0006cb80: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2069 v : exists2 a │ │ │ +0006cce0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0006cd50: 3a3c 2f73 7061 6e3e 3c2f 613e 203c 6120 : < │ │ │ +0006cd90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006cda0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0006cdb0: 3e41 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >A, P a< │ │ │ +0006cef0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> &< │ │ │ +0006cf70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> Q │ │ │ +0006cfd0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0006d030: 613c 2f73 7061 6e3e 3c2f 613e 293c 6272 a)
.  & │ │ │ +0006d050: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006d060: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006d070: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0006d080: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006d090: 3b28 3c61 2069 643d 2270 3a38 3032 2220 ;(p
: u │ │ │ +0006d140: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v
:>
exists a │ │ │ +0006d380: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +0006d3e0: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +0006d430: 3c73 7061 6e20 636c 6173 733d 2269 6422 , < │ │ │ +0006d460: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006d470: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006d480: 6f67 6963 2e68 746d 6c23 503a 3739 3122 ogic.html#P:791" │ │ │ +0006d490: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +0006d4c0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +0006d520: 293c 6272 2f3e 0a26 6e62 7370 3b26 6e62 )
. &nb │ │ │ +0006d530: 7370 3b26 6e62 7370 3b26 6e62 7370 3b3a sp;  : │ │ │ +0006d540: 203c 6120 636c 6173 733d 2269 6472 6566 u < │ │ │ +0006d5f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006d600: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0006d610: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +0006d650: 3c73 7061 6e20 636c 6173 733d 2269 6422 v.   │ │ │ +0006d690: 266e 6273 703b 266e 6273 703b 3a3d 203c   := < │ │ │ +0006d6a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006d6b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006d6c0: 6f67 6963 2e68 746d 6c23 6571 5f65 7832 ogic.html#eq_ex2 │ │ │ +0006d6d0: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">eq_ex2 u v (ex_proj1_ │ │ │ +0006d830: 6571 3c2f 7370 616e 3e3c 2f61 3e20 3c61 eq │ │ │ +0006d870: 3c73 7061 6e20 636c 6173 733d 2269 6422 p) │ │ │ +0006d8a0: 283c 6120 636c 6173 733d 2269 6472 6566 (ex_ │ │ │ +0006d900: 7072 6f6a 325f 6571 3c2f 7370 616e 3e3c proj2_eq< │ │ │ +0006d910: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> p │ │ │ +0006d970: 3c2f 613e 2920 283c 6120 636c 6173 733d ) (< │ │ │ +0006d9b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0006d9c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0006d9d0: 3e51 5f68 7072 6f70 3c2f 7370 616e 3e3c >Q_hprop< │ │ │ +0006d9e0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _ │ │ │ +0006da30: 3c73 7061 6e20 636c 6173 733d 2269 6422 _).
...   │ │ │ +0006da70: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition
eq_ex_i │ │ │ +0006db20: 6e74 726f 325f 6870 726f 705f 6e6f 6e64 ntro2_hprop_nond │ │ │ +0006db30: 6570 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ep {< │ │ │ +0006db40: 6120 6964 3d22 413a 3830 3322 2063 6c61 a id="A:803" cla │ │ │ +0006db50: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0006db60: 2223 413a 3830 3322 3e3c 7370 616e 2063 "#A:803">A : Type
} {P : │ │ │ +0006dc20: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0006dc80: 203c 6120 636c 6173 733d 2269 6472 6566 -> Prop} {Q : │ │ │ +0006dd80: 203c 7370 616e 2063 6c61 7373 3d22 6964 Prop} ( │ │ │ +0006ddb0: 3c61 2069 643d 2251 5f68 7072 6f70 3a38 Q_hprop
: fora │ │ │ +0006de40: 6c6c 3c2f 7370 616e 3e20 283c 6120 6964 ll (p q : Q │ │ │ +0006df50: 3c2f 7370 616e 3e3c 2f61 3e29 2c20 3c61 ), │ │ │ +0006df90: 3c73 7061 6e20 636c 6173 733d 2269 6422 p < │ │ │ +0006dfc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006dfd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006dfe0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0006dff0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0006e000: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0006e030: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> q │ │ │ +0006e090: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +0006e0b0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0006e0c0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0006e0d0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0006e0e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0006e0f0: 7b3c 6120 6964 3d22 7531 3a38 3039 2220 {u1< │ │ │ +0006e140: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> v1 │ │ │ +0006e1a0: 3c2f 613e 203a 203c 6120 636c 6173 733d : A} {u2< │ │ │ +0006e260: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : P
u1} {v2 : P
v1 │ │ │ +0006e440: 3c2f 7370 616e 3e3c 2f61 3e7d 207b 3c61 } {u3 v3 : Q │ │ │ +0006e560: 3c2f 613e 7d3c 6272 2f3e 0a26 6e62 7370 }
.  │ │ │ +0006e570: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006e580: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0006e590: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006e5a0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006e5b0: 7370 3b26 6e62 7370 3b28 3c61 2069 643d sp; (p │ │ │ +0006e610: 203a 203c 6120 636c 6173 733d 2269 6472 : ex_ │ │ │ +0006e670: 696e 7472 6f3c 2f73 7061 6e3e 3c2f 613e intro │ │ │ +0006e680: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0006e6a0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> u1 u │ │ │ +0006e760: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2 = ex_intro _ │ │ │ +0006e8b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 v1 │ │ │ +0006e8e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v2)
. & │ │ │ +0006e950: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006e960: 3b3a 203c 6120 636c 6173 733d 2269 6472 ;:
ex │ │ │ +0006e9c0: 5f69 6e74 726f 323c 2f73 7061 6e3e 3c2f _intro2 │ │ │ +0006e9f0: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _ < │ │ │ +0006ea20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006ea30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006ea40: 6f67 6963 2e68 746d 6c23 7531 3a38 3039 ogic.html#u1:809 │ │ │ +0006ea50: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u1 u2 │ │ │ +0006eae0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u3 =< │ │ │ +0006ebc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> e │ │ │ +0006ec20: 785f 696e 7472 6f32 3c2f 7370 616e 3e3c x_intro2< │ │ │ +0006ec30: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _ _ │ │ │ +0006ec80: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v1 v2 v3

.&n │ │ │ +0006edb0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0006edc0: 266e 6273 703b 3a3d 203c 6120 636c 6173  := rew [fun v3 => _ = │ │ │ +0006eff0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_in │ │ │ +0006f050: 7472 6f32 3c2f 7370 616e 3e3c 2f61 3e20 tro2 │ │ │ +0006f060: 3c73 7061 6e20 636c 6173 733d 2269 6422 _ _ _ _ │ │ │ +0006f0f0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 v3< │ │ │ +0006f150: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>] (Q_hpr │ │ │ +0006f2b0: 6f70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 op u3 │ │ │ +0006f320: 203c 6120 636c 6173 733d 2269 6472 6566 v3< │ │ │ +0006f380: 2f61 3e3c 6120 636c 6173 733d 2269 6472 /a> │ │ │ +0006f3d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ) < │ │ │ +0006f400: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006f410: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006f420: 6f67 6963 2e68 746d 6c23 3737 3334 6431 ogic.html#7734d1 │ │ │ +0006f430: 3765 6235 6630 3664 3338 3433 6635 3039 7eb5f06d3843f509 │ │ │ +0006f440: 3934 3665 6435 6261 3435 223e 3c73 7061 946ed5ba45">in │ │ │ +0006f470: 3c2f 7370 616e 3e3c 2f61 3e3c 6272 2f3e
│ │ │ +0006f480: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +0006f490: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0006f4a0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006f4b0: 3b3c 6120 636c 6173 733d 2269 6472 6566 ;f_equal
(fun u< │ │ │ +0006f590: 2f73 7061 6e3e 3c2f 613e 203d 2667 743b /span> => │ │ │ +0006f5a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 match < │ │ │ +0006f5d0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0006f5e0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0006f5f0: 6f67 6963 2e68 746d 6c23 753a 3831 3722 ogic.html#u:817" │ │ │ +0006f600: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ +0006f630: 3c73 7061 6e20 636c 6173 733d 2269 6422 with ex_intro< │ │ │ +0006f6c0: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ +0006f6f0: 203c 7370 616e 2063 6c61 7373 3d22 6964 u1 │ │ │ +0006f710: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c u2 = │ │ │ +0006f740: 2667 743b 203c 6120 636c 6173 733d 2269 > │ │ │ +0006f7a0: 6578 5f69 6e74 726f 323c 2f73 7061 6e3e ex_intro2 │ │ │ +0006f7b0: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ _ │ │ │ +0006f800: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +0006f860: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u2 u3 end) p.
..< │ │ │ +0006f9c0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0006f9d0: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition eq_e │ │ │ +0006fa70: 785f 696e 7472 6f32 5f68 7072 6f70 3c2f x_intro2_hprop {A : Type │ │ │ +0006fb10: 7d20 7b3c 6120 6964 3d22 503a 3832 3022 } {P Q │ │ │ +0006fbc0: 203a 203c 6120 636c 6173 733d 2269 6472 : A< │ │ │ +0006fc20: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0006fc90: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Pro │ │ │ +0006fcc0: 703c 2f73 7061 6e3e 7d3c 6272 2f3e 0a26 p}
.& │ │ │ +0006fcd0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006fce0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0006fcf0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0006fd00: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0006fd10: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (P_hprop : forall │ │ │ +0006fdb0: 3c2f 7370 616e 3e20 3c61 2069 643d 2278 x ( │ │ │ +0006fe10: 3c61 2069 643d 2270 3a38 3233 2220 636c p q : │ │ │ +0006fec0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +0006ff20: 203c 6120 636c 6173 733d 2269 6472 6566 x), p │ │ │ +0006ffe0: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +00070060: 203c 6120 636c 6173 733d 2269 6472 6566 q)
. &n │ │ │ +000700d0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000700e0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000700f0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00070100: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00070110: 266e 6273 703b 283c 6120 6964 3d22 515f  (Q_h │ │ │ +00070170: 7072 6f70 3c2f 7370 616e 3e3c 2f61 3e20 prop
│ │ │ +00070180: 3a20 3c73 7061 6e20 636c 6173 733d 2269 : forall │ │ │ +000701b0: 203c 6120 6964 3d22 783a 3832 3622 2063 x (p │ │ │ +00070260: 3c61 2069 643d 2271 3a38 3238 2220 636c q : Q x< │ │ │ +00070370: 2f73 7061 6e3e 3c2f 613e 292c 203c 6120 /span>), < │ │ │ +000703b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000703c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000703d0: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p
= q< │ │ │ +000704b0: 2f73 7061 6e3e 3c2f 613e 293c 6272 2f3e /span>)
│ │ │ +000704c0: 0a26 6e62 7370 3b26 6e62 7370 3b26 6e62 .  &nb │ │ │ +000704d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000704e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000704f0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00070500: 7370 3b26 6e62 7370 3b26 6e62 7370 3b7b sp;  { │ │ │ +00070510: 3c61 2069 643d 2275 313a 3833 3022 2063 u1 v1< │ │ │ +000705c0: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : A} {u2 : P u1
} {v2 │ │ │ +000707a0: 3c2f 613e 203a 203c 6120 636c 6173 733d : P v1< │ │ │ +00070860: 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 6120 /span>} {u3 : Q u │ │ │ +00070980: 313c 2f73 7061 6e3e 3c2f 613e 7d20 7b3c 1} {< │ │ │ +00070990: 6120 6964 3d22 7633 3a38 3335 2220 636c a id="v3:835" cl │ │ │ +000709a0: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +000709b0: 3d22 2376 333a 3833 3522 3e3c 7370 616e ="#v3:835">v3
: Q │ │ │ +00070a40: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00070a80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00070a90: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00070aa0: 3e76 313c 2f73 7061 6e3e 3c2f 613e 7d3c >v1}< │ │ │ +00070ab0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00070ac0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00070ad0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00070ae0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00070af0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00070b00: 7370 3b28 3c61 2069 643d 2270 3a38 3336 sp;(p< │ │ │ +00070b50: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : │ │ │ +00070b90: 3c73 7061 6e20 636c 6173 733d 2269 6422 u1 │ │ │ +00070bc0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +00070c30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 < │ │ │ +00070c70: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00070c80: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00070c90: 3e76 313c 2f73 7061 6e3e 3c2f 613e 293c >v1)< │ │ │ +00070ca0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00070cb0: 3b26 6e62 7370 3b26 6e62 7370 3b3a 203c ;  : < │ │ │ +00070cc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00070cd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00070ce0: 6f67 6963 2e68 746d 6c23 6578 5f69 6e74 ogic.html#ex_int │ │ │ +00070cf0: 726f 3222 3e3c 7370 616e 2063 6c61 7373 ro2">ex_int │ │ │ +00070d20: 726f 323c 2f73 7061 6e3e 3c2f 613e 203c ro2 < │ │ │ +00070d30: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00070d40: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00070d50: 6f67 6963 2e68 746d 6c23 503a 3832 3022 ogic.html#P:820" │ │ │ +00070d60: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +00070d90: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +00070df0: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +00070e50: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u2 u3 = ex_intro2 P Q v1< │ │ │ +00071120: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +00071180: 7632 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v2 v3 │ │ │ +000711f0: 3c62 722f 3e0a 266e 6273 703b 266e 6273
. &nbs │ │ │ +00071200: 703b 266e 6273 703b 266e 6273 703b 3a3d p;  := │ │ │ +00071210: 203c 6120 636c 6173 733d 2269 6472 6566 eq │ │ │ +00071270: 5f65 785f 696e 7472 6f32 3c2f 7370 616e _ex_intro2 p ( │ │ │ +00071320: 3c73 7061 6e20 636c 6173 733d 2269 6422 P_hprop │ │ │ +00071350: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ _ │ │ │ +000713a0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +000713c0: 2f73 7061 6e3e 2920 283c 6120 636c 6173 /span>) (Q_hprop _ _ _ │ │ │ +000714a0: 3c2f 7370 616e 3e29 2e3c 6272 2f3e 0a0a ).
.. │ │ │ +000714b0: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
.
... │ │ │ +000714d0: 4571 7569 7661 6c65 6e63 6520 6f66 2065 Equivalence of e │ │ │ +000714e0: 7175 616c 6974 7920 6f66 203c 7370 616e quality of ex2 with a │ │ │ +00071570: 6578 323c 2f73 7061 6e3e 3c2f 7370 616e ex2 of equality W │ │ │ +00071590: 6520 636f 756c 6420 6163 7475 616c 6c79 e could actually │ │ │ +000715a0: 2070 726f 7665 2061 6e20 6973 6f6d 6f72 prove an isomor │ │ │ +000715b0: 7068 6973 6d20 6865 7265 2c20 616e 6420 phism here, and │ │ │ +000715c0: 6e6f 7420 6a75 7374 203c 7370 616e 2063 not just <->,. but fo │ │ │ +00071600: 7220 7369 6d70 6c69 6369 7479 2c20 7765 r simplicity, we │ │ │ +00071610: 2064 6f6e 2774 2e20 0a3c 2f64 6976 3e0a don't. .
. │ │ │ +00071620: 3c64 6976 2063 6c61 7373 3d22 636f 6465
.  < │ │ │ +00071640: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00071650: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00071660: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition eq │ │ │ +000716e0: 5f65 7832 5f75 6e63 7572 7269 6564 5f69 _ex2_uncurried_i │ │ │ +000716f0: 6666 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ff {< │ │ │ +00071700: 6120 6964 3d22 413a 3833 3722 2063 6c61 a id="A:837" cla │ │ │ +00071710: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00071720: 2223 413a 3833 3722 3e3c 7370 616e 2063 "#A:837">A : Prop} {P Q │ │ │ +00071830: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00071900: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00071910: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} (< │ │ │ +00071940: 6120 6964 3d22 753a 3834 3222 2063 6c61 a id="u:842" cla │ │ │ +00071950: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00071960: 2223 753a 3834 3222 3e3c 7370 616e 2063 "#u:842">u │ │ │ +000719c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +000719e0: 763c 2f73 7061 6e3e 3c2f 613e 203a 203c v : < │ │ │ +000719f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00071a00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00071a10: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +00071a20: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +00071a30: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">ex │ │ │ +00071a60: 6973 7473 323c 2f73 7061 6e3e 3c2f 613e ists2 │ │ │ +00071a70: 203c 6120 6964 3d22 613a 3834 3022 2063 a< │ │ │ +00071ae0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> : A, P< │ │ │ +00071ca0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> a │ │ │ +00071d00: 3c2f 613e 203c 6120 636c 6173 733d 2269 & │ │ │ +00071d80: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a)
.&nb │ │ │ +00071e50: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00071e60: 6e62 7370 3b3a 203c 6120 636c 6173 733d nbsp;: u =< │ │ │ +00071f40: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +00071fa0: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ +00071fb0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00071fc0: 703b 266e 6273 703b 266e 6273 703b 3c61 p;  <-&g │ │ │ +00072040: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; exi │ │ │ +000720c0: 7374 7332 3c2f 7370 616e 3e3c 2f61 3e20 sts2 │ │ │ +000720d0: 3c61 2069 643d 2270 3a38 3434 2220 636c p : e │ │ │ +00072220: 785f 7072 6f6a 313c 2f73 7061 6e3e 3c2f x_proj1 u< │ │ │ +00072290: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00072310: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ +00072370: 313c 2f73 7061 6e3e 3c2f 613e 203c 6120 1 < │ │ │ +000723b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000723c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000723d0: 3e76 3c2f 7370 616e 3e3c 2f61 3e3c 6120 >v,

.&n │ │ │ +00072460: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00072470: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00072480: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00072490: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000724a0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000724b0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000724c0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000724d0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +000724e0: 703b 3c61 2063 6c61 7373 3d22 6964 7265 p;re │ │ │ +00072550: 773c 2f73 7061 6e3e 3c2f 613e 203c 6120 w < │ │ │ +00072590: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000725a0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000725b0: 3e70 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >p in ex_proj2 │ │ │ +000726a0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u = ex_pr │ │ │ +000727e0: 6f6a 323c 2f73 7061 6e3e 3c2f 613e 203c oj2 < │ │ │ +000727f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00072800: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00072810: 6f67 6963 2e68 746d 6c23 763a 3834 3322 ogic.html#v:843" │ │ │ +00072820: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >v │ │ │ +00072850: 3c61 2063 6c61 7373 3d22 6964 7265 6622 & │ │ │ +000728c0: 616d 703b 3c2f 7370 616e 3e3c 2f61 3e20 amp; │ │ │ +000728d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew< │ │ │ +00072940: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> p │ │ │ +000729a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 in e │ │ │ +00072a80: 785f 7072 6f6a 333c 2f73 7061 6e3e 3c2f x_proj3 u< │ │ │ +00072af0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> = │ │ │ +00072b70: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ex_proj │ │ │ +00072bd0: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 < │ │ │ +00072c10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00072c20: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00072c30: 3e76 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >v...
.
..
.Induction p │ │ │ +00072c70: 7269 6e63 6970 6c65 2066 6f72 203c 7370 rinciple for @eq (< │ │ │ +00072ce0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00072cf0: 7469 746c 653d 2276 6172 223e 6578 323c title="var">ex2< │ │ │ +00072d00: 2f73 7061 6e3e 3c2f 7370 616e 3e20 3c73 /span> _ _) ..
. &nbs │ │ │ +00072dc0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition eq_ │ │ │ +00072e50: 6578 325f 6574 613c 2f73 7061 6e3e 3c2f ex2_eta {A< │ │ │ +00072eb0: 2f73 7061 6e3e 3c2f 613e 203a 203c 7370 /span> : Pr │ │ │ +00072ee0: 6f70 3c2f 7370 616e 3e7d 207b 3c61 2069 op} {P Q : │ │ │ +00072ff0: 413c 2f73 7061 6e3e 3c2f 613e 203c 6120 A -> │ │ │ +00073070: 3c2f 613e 203c 7370 616e 2063 6c61 7373 Prop} {u< │ │ │ +000730f0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> v : exists2 │ │ │ +00073200: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00073220: 3c73 7061 6e20 6964 3d22 613a 3835 3022 a │ │ │ +00073250: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ +000732c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00073320: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A, P a & Q< │ │ │ +00073540: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ +000735a0: 3c2f 7370 616e 3e3c 2f61 3e7d 2028 3c61 } (p │ │ │ +00073600: 3c2f 613e 203a 203c 6120 636c 6173 733d : u =< │ │ │ +000736e0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +00073740: 3c2f 613e 293c 6272 2f3e 0a26 6e62 7370 )
.  │ │ │ +00073750: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00073760: 7370 3b3a 203c 6120 636c 6173 733d 2269 sp;: p = eq_ex2< │ │ │ +000738a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ +00073900: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00073960: 763c 2f73 7061 6e3e 3c2f 613e 2028 3c61 v (ex_proj1_of_ex2 │ │ │ +000739e0: 5f65 713c 2f73 7061 6e3e 3c2f 613e 203c _eq < │ │ │ +000739f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00073a00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00073a10: 6f67 6963 2e68 746d 6c23 703a 3835 3322 ogic.html#p:853" │ │ │ +00073a20: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p) │ │ │ +00073a50: 2028 3c61 2063 6c61 7373 3d22 6964 7265 (ex_proj2_of │ │ │ +00073ac0: 5f65 7832 5f65 713c 2f73 7061 6e3e 3c2f _ex2_eq p< │ │ │ +00073b30: 2f61 3e29 2028 3c61 2063 6c61 7373 3d22 /a>) (ex_proj3_eq p).
│ │ │ +00073c10: 0a20 266e 6273 703b 266e 6273 703b 3c73 .   D │ │ │ +00073c40: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition │ │ │ +00073c50: 203c 6120 6964 3d22 6571 5f65 7832 5f72 eq_ex │ │ │ +00073cb0: 325f 7265 6374 3c2f 7370 616e 3e3c 2f61 2_rect {A : Pro │ │ │ +00073d40: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q : A │ │ │ +00073e50: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00073ed0: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +00073f00: 7d20 7b3c 6120 6964 3d22 753a 3835 3922 } {u v │ │ │ +00073fb0: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ +00074000: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists2 │ │ │ +00074030: 3c2f 613e 203c 6120 6964 3d22 613a 3835 < │ │ │ +00074060: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00074070: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ +00074080: 7370 616e 2069 643d 2261 3a38 3538 2220 span id="a:858" │ │ │ +00074090: 636c 6173 733d 2269 6422 3e61 3c2f 7370 class="id">a < │ │ │ +000740b0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000740c0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000740d0: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +000740e0: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +000740f0: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">:< │ │ │ +00074120: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> A │ │ │ +00074180: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c , P a
&
Q a< │ │ │ +00074400: 2f73 7061 6e3e 3c2f 613e 7d20 283c 6120 /span>} (R< │ │ │ +00074460: 2f61 3e20 3a20 3c61 2063 6c61 7373 3d22 /a> : u = v< │ │ │ +000745a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +00074610: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Typ │ │ │ +00074640: 653c 2f73 7061 6e3e 293c 6272 2f3e 0a26 e)
.& │ │ │ +00074650: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00074660: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00074670: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00074680: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00074690: 3b26 6e62 7370 3b26 6e62 7370 3b28 3c61 ;  (f │ │ │ +000746f0: 3c2f 613e 203a 203c 7370 616e 2063 6c61 : forall │ │ │ +00074750: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00074770: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p q< │ │ │ +000747d0: 2f61 3e20 3c61 2069 643d 2272 3a38 3634 /a> r< │ │ │ +00074820: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, │ │ │ +00074880: 523c 2f73 7061 6e3e 3c2f 613e 2028 3c61 R (eq_ex2
u v p q< │ │ │ +00074a70: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> r │ │ │ +00074ad0: 3c2f 7370 616e 3e3c 2f61 3e29 293c 6272 ))
.  & │ │ │ +00074af0: 6e62 7370 3b26 6e62 7370 3b3a 203c 7370 nbsp; : fo │ │ │ +00074b20: 7261 6c6c 3c2f 7370 616e 3e20 3c61 2069 rall p, R │ │ │ +00074be0: 3c2f 613e 203c 6120 636c 6173 733d 2269 p
.  │ │ │ +00074c50: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00074c60: 7370 3b3a 3d20 3c73 7061 6e20 636c 6173 sp;:= fun p
=> < │ │ │ +00074cf0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00074d00: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00074d10: 6f67 6963 2e68 746d 6c23 4571 4e6f 7461 ogic.html#EqNota │ │ │ +00074d20: 7469 6f6e 732e 3a3a 3a27 7265 7727 5f27 tions.:::'rew'_' │ │ │ +00074d30: 266c 743b 2d27 5f78 5f27 696e 275f 7822 <-'_x_'in'_x" │ │ │ +00074d40: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >rew <- eq_ex2_eta p in< │ │ │ +00074f40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ +00074fa0: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _ _ │ │ │ +00074ff0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c _..   │ │ │ +00075030: 3c73 7061 6e20 636c 6173 733d 2269 6422 Definition eq_ex │ │ │ +000750c0: 325f 7265 633c 2f73 7061 6e3e 3c2f 613e 2_rec │ │ │ +000750d0: 207b 3c61 2069 643d 2241 3a38 3638 2220 {A
: Prop │ │ │ +00075150: 3c2f 7370 616e 3e7d 207b 3c61 2069 643d } {P │ │ │ +000751b0: 203c 6120 6964 3d22 513a 3837 3022 2063 Q : A< │ │ │ +00075260: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +000752b0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop} │ │ │ +00075310: 207b 3c61 2069 643d 2275 3a38 3731 2220 {u v} │ │ │ +000753c0: 2028 3c61 2069 643d 2252 3a38 3735 2220 (R : u │ │ │ +00075470: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = v
:> ( │ │ │ +00075650: 3c2f 613e 3c61 2063 6c61 7373 3d22 6964 exists2 │ │ │ +00075700: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00075720: 3c73 7061 6e20 6964 3d22 613a 3837 3422 a
│ │ │ +00075750: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ +000757c0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00075820: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A, P a & Q< │ │ │ +00075a40: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ +00075aa0: 3c2f 7370 616e 3e3c 2f61 3e3c 6120 636c ) -& │ │ │ +00075b90: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +00075ba0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00075bb0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +00075bc0: 5365 743c 2f73 7061 6e3e 2920 3a3d 203c Set) := < │ │ │ +00075bd0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00075be0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00075bf0: 6f67 6963 2e68 746d 6c23 6571 5f65 7832 ogic.html#eq_ex2 │ │ │ +00075c00: 5f72 6563 7422 3e3c 7370 616e 2063 6c61 _rect">eq_ex │ │ │ +00075c30: 325f 7265 6374 3c2f 7370 616e 3e3c 2f61 2_rect R.
. & │ │ │ +00075cb0: 6e62 7370 3b3c 7370 616e 2063 6c61 7373 nbsp;Definition │ │ │ +00075ce0: 3c2f 7370 616e 3e20 3c61 2069 643d 2265
│ │ │ +00075d40: 6571 5f65 7832 5f69 6e64 3c2f 7370 616e eq_ex2_ind {A : │ │ │ +00075db0: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +00075de0: 6120 6964 3d22 503a 3837 3722 2063 6c61 a id="P:877" cla │ │ │ +00075df0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00075e00: 2223 503a 3837 3722 3e3c 7370 616e 2063 "#P:877">P │ │ │ +00075e60: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00075e80: 513c 2f73 7061 6e3e 3c2f 613e 203a 203c Q : < │ │ │ +00075e90: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00075ea0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00075eb0: 6f67 6963 2e68 746d 6c23 413a 3837 3622 ogic.html#A:876" │ │ │ +00075ec0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >A │ │ │ +00075ef0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 -> Prop} {u v │ │ │ +00076040: 3c2f 613e 7d20 283c 6120 6964 3d22 523a } (R : │ │ │ +000760a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00076100: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00076170: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +000761b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000761c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000761d0: 3e76 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >v :&g │ │ │ +00076250: 743b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 t; (exists2< │ │ │ +00076350: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> a │ │ │ +000763d0: 3c2f 613e 203c 6120 636c 6173 733d 2269 : │ │ │ +00076450: 203c 6120 636c 6173 733d 2269 6472 6566 A │ │ │ +00076520: 2c3c 2f73 7061 6e3e 3c2f 613e 203c 6120 , < │ │ │ +00076560: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00076570: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00076580: 3e50 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >P │ │ │ +000765c0: 3c73 7061 6e20 636c 6173 733d 2269 6422 a < │ │ │ +000765f0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00076600: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00076610: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +00076620: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +00076630: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">&a │ │ │ +00076660: 6d70 3b3c 2f73 7061 6e3e 3c2f 613e 203c mp; < │ │ │ +00076670: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00076680: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00076690: 6f67 6963 2e68 746d 6c23 513a 3837 3822 ogic.html#Q:878" │ │ │ +000766a0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >Q │ │ │ +000766d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 a │ │ │ +00076730: 3c61 2063 6c61 7373 3d22 6964 7265 6622 ) │ │ │ +000767a0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00076820: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +00076850: 2920 3a3d 203c 6120 636c 6173 733d 2269 ) := │ │ │ +000768b0: 6571 5f65 7832 5f72 6563 3c2f 7370 616e eq_ex2_rec R.
...
..
.In │ │ │ +00076950: 206f 7264 6572 2074 6f20 6861 7665 2061 order to have a │ │ │ +00076960: 2070 6572 666f 726d 616e 7420 3c73 7061 performant inversion_sigm │ │ │ +000769b0: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e2c a, │ │ │ +000769c0: 2077 6520 6465 6669 6e65 0a20 2020 2020 we define. │ │ │ +000769d0: 2073 7065 6369 616c 697a 6564 2076 6572 specialized ver │ │ │ +000769e0: 7369 6f6e 7320 666f 7220 7768 656e 2077 sions for when w │ │ │ +000769f0: 6520 6861 7665 2063 6f6e 7374 7275 6374 e have construct │ │ │ +00076a00: 6f72 7320 6f6e 206f 6e65 206f 720a 2020 ors on one or. │ │ │ +00076a10: 2020 2020 626f 7468 2073 6964 6573 206f both sides o │ │ │ +00076a20: 6620 7468 6520 6571 7561 6c69 7479 200a f the equality . │ │ │ +00076a30: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.  │ │ │ +00076a50: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ +00076a80: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n eq_ex │ │ │ +00076b00: 325f 7265 6374 5f65 785f 696e 7472 6f32 2_rect_ex_intro2 │ │ │ +00076b10: 5f6c 3c2f 7370 616e 3e3c 2f61 3e20 7b3c _l {< │ │ │ +00076b20: 6120 6964 3d22 413a 3838 3422 2063 6c61 a id="A:884" cla │ │ │ +00076b30: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00076b40: 2223 413a 3838 3422 3e3c 7370 616e 2063 "#A:884">A : Prop} {P Q │ │ │ +00076c50: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +00076d20: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +00076d30: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +00076d60: 6120 6964 3d22 7531 3a38 3837 2220 636c a id="u1:887" cl │ │ │ +00076d70: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00076d80: 3d22 2375 313a 3838 3722 3e3c 7370 616e ="#u1:887">u1 u2 < │ │ │ +00076e40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00076e50: 7469 746c 653d 2262 696e 6465 7222 3e75 title="binder">u │ │ │ +00076e60: 333c 2f73 7061 6e3e 3c2f 613e 203c 6120 3 v< │ │ │ +00076ec0: 2f61 3e7d 2028 3c61 2069 643d 2252 3a38 /a>} ( │ │ │ +00076ef0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00076f10: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ +00076f20: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00076f30: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ -> │ │ │ +00076fb0: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 7370 ; Ty │ │ │ +00076fe0: 7065 3c2f 7370 616e 3e29 3c62 722f 3e0a pe)
. │ │ │ +00076ff0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00077000: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00077010: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00077020: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00077030: 703b 266e 6273 703b 266e 6273 703b 283c p;  (< │ │ │ +00077040: 6120 6964 3d22 663a 3839 3522 2063 6c61 a id="f:895" cla │ │ │ +00077050: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00077060: 2223 663a 3839 3522 3e3c 7370 616e 2063 "#f:895">f : forall< │ │ │ +000770c0: 2f73 7061 6e3e 203c 6120 6964 3d22 703a /span> p q │ │ │ +00077170: 3c2f 613e 203c 6120 6964 3d22 723a 3839 < │ │ │ +000771a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000771b0: 7469 746c 653d 2262 696e 6465 7222 3e72 title="binder">r │ │ │ +000771c0: 3c2f 7370 616e 3e3c 2f61 3e2c 203c 6120 , < │ │ │ +00077200: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00077210: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00077220: 3e52 3c2f 7370 616e 3e3c 2f61 3e20 283c >R (< │ │ │ +00077230: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00077240: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00077250: 6f67 6963 2e68 746d 6c23 6571 5f65 785f ogic.html#eq_ex_ │ │ │ +00077260: 696e 7472 6f32 5f6c 223e 3c73 7061 6e20 intro2_l">eq │ │ │ +00077290: 5f65 785f 696e 7472 6f32 5f6c 3c2f 7370 _ex_intro2_l
(P:= │ │ │ +000772d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 P │ │ │ +00077330: 2920 283c 7370 616e 2063 6c61 7373 3d22 ) ( │ │ │ +00077350: 513c 2f73 7061 6e3e 3a3d 3c61 2063 6c61 Q:=Q< │ │ │ +000773b0: 2f73 7061 6e3e 3c2f 613e 2920 3c61 2063 /span>) < │ │ │ +000773f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00077400: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00077410: 3e75 313c 2f73 7061 6e3e 3c2f 613e 203c >u1 < │ │ │ +00077420: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00077430: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +00077440: 6f67 6963 2e68 746d 6c23 7532 3a38 3838 ogic.html#u2:888 │ │ │ +00077450: 223e 3c73 7061 6e20 636c 6173 733d 2269 ">u2 u3 │ │ │ +000774e0: 3c2f 613e 203c 6120 636c 6173 733d 2269 v p q r))
. │ │ │ +00077670: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00077680: 703b 266e 6273 703b 3a20 3c73 7061 6e20 p; : foral │ │ │ +000776b0: 6c3c 2f73 7061 6e3e 203c 6120 6964 3d22 l p, │ │ │ +00077710: 203c 6120 636c 6173 733d 2269 6472 6566 R p
. &n │ │ │ +000777e0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +000777f0: 3a3d 203c 6120 636c 6173 733d 2269 6472 :=
e │ │ │ +00077850: 715f 6578 325f 7265 6374 3c2f 7370 616e q_ex2_rect R f.
.&n │ │ │ +00077930: 6273 703b 266e 6273 703b 3c73 7061 6e20 bsp; Defin │ │ │ +00077960: 6974 696f 6e3c 2f73 7061 6e3e 203c 6120 ition e │ │ │ +000779e0: 715f 6578 325f 7265 6374 5f65 785f 696e q_ex2_rect_ex_in │ │ │ +000779f0: 7472 6f32 5f72 3c2f 7370 616e 3e3c 2f61 tro2_r {A : Pro │ │ │ +00077a80: 703c 2f73 7061 6e3e 7d20 7b3c 6120 6964 p} {P Q
: A │ │ │ +00077b90: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ->< │ │ │ +00077c10: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> Prop │ │ │ +00077c40: 7d20 7b3c 6120 6964 3d22 753a 3930 3022 } {u v1< │ │ │ +00077cf0: 2f61 3e20 3c61 2069 643d 2276 323a 3930 /a> │ │ │ +00077d20: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00077d40: 7632 3c2f 7370 616e 3e3c 2f61 3e20 3c61 v2 v3} (R │ │ │ +00077e00: 203a 203c 7370 616e 2063 6c61 7373 3d22 : │ │ │ +00077e20: 5f3c 2f73 7061 6e3e 203c 6120 636c 6173 _ │ │ │ +00077e90: 2d26 6774 3b3c 2f73 7061 6e3e 3c2f 613e -> │ │ │ +00077ea0: 203c 7370 616e 2063 6c61 7373 3d22 6964 Type).   │ │ │ +00077ee0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00077ef0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00077f00: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00077f10: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00077f20: 703b 283c 6120 6964 3d22 663a 3930 3822 p;(f : for │ │ │ +00077fa0: 616c 6c3c 2f73 7061 6e3e 203c 6120 6964 all p q r, │ │ │ +000780b0: 203c 6120 636c 6173 733d 2269 6472 6566 R (eq_ex_intro2_r │ │ │ +00078180: 3c2f 7370 616e 3e3c 2f61 3e20 283c 7370 (P:=P │ │ │ +00078210: 3c2f 613e 2920 283c 7370 616e 2063 6c61 ) (Q:= │ │ │ +00078270: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q) │ │ │ +000782a0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 u │ │ │ +00078300: 203c 6120 636c 6173 733d 2269 6472 6566 v1< │ │ │ +00078360: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v2 v3 p< │ │ │ +00078480: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> q │ │ │ +000784e0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +00078540: 723c 2f73 7061 6e3e 3c2f 613e 2929 3c62 r)).   │ │ │ +00078560: 266e 6273 703b 266e 6273 703b 3a20 3c73   : f │ │ │ +00078590: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall p< │ │ │ +000785f0: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, R p
.&nbs │ │ │ +000786c0: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +000786d0: 6273 703b 3a3d 203c 6120 636c 6173 733d bsp;:= < │ │ │ +00078710: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00078720: 7469 746c 653d 2264 6566 696e 6974 696f title="definitio │ │ │ +00078730: 6e22 3e65 715f 6578 325f 7265 6374 3c2f n">eq_ex2_rect R< │ │ │ +000787a0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> f │ │ │ +00078800: 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 722f .
.  D │ │ │ +00078840: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition │ │ │ +00078850: 203c 6120 6964 3d22 6571 5f65 7832 5f72 e │ │ │ +000788c0: 715f 6578 325f 7265 6374 5f65 785f 696e q_ex2_rect_ex_in │ │ │ +000788d0: 7472 6f32 3c2f 7370 616e 3e3c 2f61 3e20 tro2 │ │ │ +000788e0: 7b3c 6120 6964 3d22 413a 3931 3022 2063 {A
: Prop< │ │ │ +00078960: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ +000789c0: 3c61 2069 643d 2251 3a39 3132 2220 636c Q : A < │ │ │ +00078ac0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00078ad0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00078ae0: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +00078b20: 7b3c 6120 6964 3d22 7531 3a39 3133 2220 {u1< │ │ │ +00078b70: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> u2 │ │ │ +00078bd0: 3c2f 613e 203c 6120 6964 3d22 7533 3a39 u3 < │ │ │ +00078c30: 6120 6964 3d22 7631 3a39 3136 2220 636c a id="v1:916" cl │ │ │ +00078c40: 6173 733d 2269 6472 6566 2220 6872 6566 ass="idref" href │ │ │ +00078c50: 3d22 2376 313a 3931 3622 3e3c 7370 616e ="#v1:916">v1 v2 < │ │ │ +00078d10: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00078d20: 7469 746c 653d 2262 696e 6465 7222 3e76 title="binder">v │ │ │ +00078d30: 333c 2f73 7061 6e3e 3c2f 613e 7d20 283c 3} (< │ │ │ +00078d40: 6120 6964 3d22 523a 3931 3922 2063 6c61 a id="R:919" cla │ │ │ +00078d50: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +00078d60: 2223 523a 3931 3922 3e3c 7370 616e 2063 "#R:919">R : _ -> Type)
. & │ │ │ +00078e70: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00078e80: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00078e90: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00078ea0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00078eb0: 3b26 6e62 7370 3b28 3c61 2069 643d 2266 ; (f : │ │ │ +00078f10: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +00078f40: 3c61 2069 643d 2270 3a39 3230 2220 636c p q r │ │ │ +00079040: 3c2f 613e 2c20 3c61 2063 6c61 7373 3d22 , R (@eq_ex_intr │ │ │ +00079110: 6f32 3c2f 7370 616e 3e3c 2f61 3e20 3c61 o2 │ │ │ +00079150: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +00079180: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +00079190: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000791a0: 6f67 6963 2e68 746d 6c23 503a 3931 3122 ogic.html#P:911" │ │ │ +000791b0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >P │ │ │ +000791e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q │ │ │ +00079240: 203c 6120 636c 6173 733d 2269 6472 6566 u1< │ │ │ +000792a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v1 u2 v │ │ │ +000793c0: 323c 2f73 7061 6e3e 3c2f 613e 203c 6120 2
│ │ │ +00079400: 3c73 7061 6e20 636c 6173 733d 2269 6422 u3 │ │ │ +00079430: 3c61 2063 6c61 7373 3d22 6964 7265 6622 v3 p< │ │ │ +000794f0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> q │ │ │ +00079550: 3c2f 613e 203c 6120 636c 6173 733d 2269 r))
.&nb │ │ │ +000795c0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000795d0: 6e62 7370 3b3a 203c 7370 616e 2063 6c61 nbsp;: forall │ │ │ +00079630: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +00079650: 703c 2f73 7061 6e3e 3c2f 613e 2c20 3c61 p, │ │ │ +00079690: 3c73 7061 6e20 636c 6173 733d 2269 6422 R < │ │ │ +000796c0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +000796d0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +000796e0: 6f67 6963 2e68 746d 6c23 703a 3932 3422 ogic.html#p:924" │ │ │ +000796f0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >p< │ │ │ +00079720: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +00079730: 3b26 6e62 7370 3b26 6e62 7370 3b3a 3d20 ;  := │ │ │ +00079740: 3c61 2063 6c61 7373 3d22 6964 7265 6622 eq_e │ │ │ +000797a0: 7832 5f72 6563 743c 2f73 7061 6e3e 3c2f x2_rect R< │ │ │ +00079810: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> f │ │ │ +00079870: 3c2f 613e 2e3c 6272 2f3e 0a0a 3c62 722f .
..
.  D │ │ │ +000798b0: 6566 696e 6974 696f 6e3c 2f73 7061 6e3e efinition
│ │ │ +000798c0: 203c 6120 6964 3d22 6571 5f65 7832 5f72 e │ │ │ +00079930: 715f 6578 325f 7265 6374 5f75 6e63 7572 q_ex2_rect_uncur │ │ │ +00079940: 7269 6564 3c2f 7370 616e 3e3c 2f61 3e20 ried │ │ │ +00079950: 7b3c 6120 6964 3d22 413a 3932 3522 2063 {A : Prop< │ │ │ +000799d0: 2f73 7061 6e3e 7d20 7b3c 6120 6964 3d22 /span>} {P │ │ │ +00079a30: 3c61 2069 643d 2251 3a39 3237 2220 636c Q : A < │ │ │ +00079b30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00079b40: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00079b50: 3e2d 2667 743b 3c2f 7370 616e 3e3c 2f61 >-> Prop} │ │ │ +00079b90: 7b3c 6120 6964 3d22 753a 3933 3022 2063 {u v : │ │ │ +00079c40: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00079cb0: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 a : A, │ │ │ +00079e90: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a & Q a} (R : u │ │ │ +0007a150: 3c2f 613e 203c 6120 636c 6173 733d 2269 = │ │ │ +0007a1d0: 203c 6120 636c 6173 733d 2269 6472 6566 v -> Type< │ │ │ +0007a2d0: 2f73 7061 6e3e 293c 6272 2f3e 0a26 6e62 /span>)
.&nb │ │ │ +0007a2e0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0007a2f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0007a300: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0007a310: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0007a320: 6e62 7370 3b26 6e62 7370 3b28 3c61 2069 nbsp; (f : forall pqr │ │ │ +0007a410: 203a 203c 6120 636c 6173 733d 2269 6472 : │ │ │ +0007a460: 3c73 7061 6e20 636c 6173 733d 2269 6422 exists2 │ │ │ +0007a490: 3c2f 613e 203c 6120 6964 3d22 703a 3933 < │ │ │ +0007a4c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007a4d0: 7469 746c 653d 2262 696e 6465 7222 3e3c title="binder">< │ │ │ +0007a4e0: 7370 616e 2069 643d 2270 3a39 3334 2220 span id="p:934" │ │ │ +0007a4f0: 636c 6173 733d 2269 6422 3e70 3c2f 7370 class="id">p
< │ │ │ +0007a510: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007a520: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007a530: 6f67 6963 2e68 746d 6c23 3539 6261 3262 ogic.html#59ba2b │ │ │ +0007a540: 3437 6432 3831 3465 3636 6638 3231 3061 47d2814e66f8210a │ │ │ +0007a550: 3634 3961 6536 6536 6263 223e 3c73 7061 649ae6e6bc">:< │ │ │ +0007a580: 2f73 7061 6e3e 3c2f 613e 203c 7370 616e /span> _ │ │ │ +0007a5b0: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +0007a620: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 7370 = _< │ │ │ +0007a6a0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007a6b0: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0007a6c0: 3e2c 3c2f 7370 616e 3e3c 2f61 3e20 3c73 >, _ &< │ │ │ +0007a770: 2f61 3e20 3c73 7061 6e20 636c 6173 733d /a> _, R │ │ │ +0007a7f0: 3c2f 7370 616e 3e3c 2f61 3e20 283c 6120 ( │ │ │ +0007a830: 3c73 7061 6e20 636c 6173 733d 2269 6422 eq_ex2 u v (ex_proj1 pqr< │ │ │ +0007a9f0: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (ex_proj2 │ │ │ +0007aac0: 7071 723c 2f73 7061 6e3e 3c2f 613e 2920 pqr) │ │ │ +0007aad0: 283c 6120 636c 6173 733d 2269 6472 6566 (ex_pro │ │ │ +0007ab30: 6a33 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j3 pqr)))
.  │ │ │ +0007abb0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0007abc0: 7370 3b3a 203c 7370 616e 2063 6c61 7373 sp;: forall
p< │ │ │ +0007ac40: 2f73 7061 6e3e 3c2f 613e 2c20 3c61 2063 /span>, │ │ │ +0007aca0: 523c 2f73 7061 6e3e 3c2f 613e 203c 6120 R < │ │ │ +0007ace0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007acf0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0007ad00: 3e70 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >p
.  & │ │ │ +0007ad20: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := eq_ex2 │ │ │ +0007ad90: 5f72 6563 743c 2f73 7061 6e3e 3c2f 613e _rect │ │ │ +0007ada0: 203c 6120 636c 6173 733d 2269 6472 6566 R (fun < │ │ │ +0007ae30: 6120 6964 3d22 703a 3933 3822 2063 6c61 a id="p:938" cla │ │ │ +0007ae40: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0007ae50: 2223 703a 3933 3822 3e3c 7370 616e 2063 "#p:938">p │ │ │ +0007aeb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007aed0: 713c 2f73 7061 6e3e 3c2f 613e 203c 6120 q r< │ │ │ +0007af30: 2f61 3e20 3d26 6774 3b20 3c61 2063 6c61 /a> => f< │ │ │ +0007af90: 2f73 7061 6e3e 3c2f 613e 2028 3c61 2063 /span> (ex_intro2 │ │ │ +0007b000: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 _ _ │ │ │ +0007b050: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 p
q r< │ │ │ +0007b170: 2f73 7061 6e3e 3c2f 613e 2929 2e3c 6272 /span>)).
.  < │ │ │ +0007b190: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007b1a0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0007b1b0: 4465 6669 6e69 7469 6f6e 3c2f 7370 616e Definition eq │ │ │ +0007b230: 5f65 7832 5f72 6563 5f75 6e63 7572 7269 _ex2_rec_uncurri │ │ │ +0007b240: 6564 3c2f 7370 616e 3e3c 2f61 3e20 7b3c ed {< │ │ │ +0007b250: 6120 6964 3d22 413a 3934 3122 2063 6c61 a id="A:941" cla │ │ │ +0007b260: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0007b270: 2223 413a 3934 3122 3e3c 7370 616e 2063 "#A:941">A : Prop
} {P Q │ │ │ +0007b380: 3c2f 613e 203a 203c 6120 636c 6173 733d : A - │ │ │ +0007b450: 2667 743b 3c2f 7370 616e 3e3c 2f61 3e20 > │ │ │ +0007b460: 3c73 7061 6e20 636c 6173 733d 2269 6422 Prop} {< │ │ │ +0007b490: 6120 6964 3d22 753a 3934 3422 2063 6c61 a id="u:944" cla │ │ │ +0007b4a0: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0007b4b0: 2223 753a 3934 3422 3e3c 7370 616e 2063 "#u:944">u │ │ │ +0007b510: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007b530: 763c 2f73 7061 6e3e 3c2f 613e 7d20 283c v} (< │ │ │ +0007b540: 6120 6964 3d22 523a 3934 3822 2063 6c61 a id="R:948" cla │ │ │ +0007b550: 7373 3d22 6964 7265 6622 2068 7265 663d ss="idref" href= │ │ │ +0007b560: 2223 523a 3934 3822 3e3c 7370 616e 2063 "#R:948">R : u
= │ │ │ +0007b670: 3c2f 613e 203c 6120 636c 6173 733d 2269 v :> ( │ │ │ +0007b840: 6578 6973 7473 323c 2f73 7061 6e3e 3c2f exists2 a : A, │ │ │ +0007ba20: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a & Q a
)< │ │ │ +0007bca0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> -> │ │ │ +0007bd10: 3c2f 7370 616e 3e3c 2f61 3e20 3c73 7061 Set │ │ │ +0007bd40: 3c2f 7370 616e 3e29 203a 3d20 3c61 2063 ) := eq_ex2_rect_un │ │ │ +0007bdc0: 6375 7272 6965 643c 2f73 7061 6e3e 3c2f curried R< │ │ │ +0007be30: 2f61 3e2e 3c62 722f 3e0a 266e 6273 703b /a>.
.  │ │ │ +0007be40: 266e 6273 703b 3c73 7061 6e20 636c 6173  Definitio │ │ │ +0007be70: 6e3c 2f73 7061 6e3e 203c 6120 6964 3d22 n
eq_ex2_ind_ │ │ │ +0007bef0: 756e 6375 7272 6965 643c 2f73 7061 6e3e uncurried │ │ │ +0007bf00: 3c2f 613e 207b 3c61 2069 643d 2241 3a39 { │ │ │ +0007bf30: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007bf50: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ +0007bf60: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007bf70: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0007bf80: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {P │ │ │ +0007bfe0: 3c2f 613e 203c 6120 6964 3d22 513a 3935 < │ │ │ +0007c010: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007c020: 7469 746c 653d 2262 696e 6465 7222 3e51 title="binder">Q │ │ │ +0007c030: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +0007c070: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +0007c0a0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007c0b0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007c0c0: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0007c0d0: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0007c0e0: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">->
Prop} { │ │ │ +0007c170: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007c190: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u v< │ │ │ +0007c1f0: 2f61 3e7d 2028 3c61 2069 643d 2252 3a39 /a>} ( │ │ │ +0007c220: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007c240: 523c 2f73 7061 6e3e 3c2f 613e 203a 203c R : < │ │ │ +0007c250: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007c260: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007c270: 6f67 6963 2e68 746d 6c23 753a 3935 3222 ogic.html#u:952" │ │ │ +0007c280: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >u │ │ │ +0007c2b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 = │ │ │ +0007c320: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0007c380: 763c 2f73 7061 6e3e 3c2f 613e 203c 6120 v :> │ │ │ +0007c400: 3b3c 2f73 7061 6e3e 3c2f 613e 203c 6120 ; (exists2 │ │ │ +0007c570: 613c 2f73 7061 6e3e 3c2f 7370 616e 3e3c a< │ │ │ +0007c580: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> : │ │ │ +0007c600: 3c61 2063 6c61 7373 3d22 6964 7265 6622 A │ │ │ +0007c660: 3c61 2063 6c61 7373 3d22 6964 7265 6622 , │ │ │ +0007c6d0: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0007c730: 503c 2f73 7061 6e3e 3c2f 613e 203c 6120 P < │ │ │ +0007c770: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007c780: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0007c790: 3e61 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >a &am │ │ │ +0007c810: 703b 3c2f 7370 616e 3e3c 2f61 3e20 3c61 p; │ │ │ +0007c850: 3c73 7061 6e20 636c 6173 733d 2269 6422 Q < │ │ │ +0007c880: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007c890: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007c8a0: 6f67 6963 2e68 746d 6c23 613a 3935 3522 ogic.html#a:955" │ │ │ +0007c8b0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >a< │ │ │ +0007c8e0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007c8f0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007c900: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ +0007c910: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ +0007c920: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">)< │ │ │ +0007c950: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0007c9a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 -> Prop) │ │ │ +0007ca00: 203a 3d20 3c61 2063 6c61 7373 3d22 6964 := eq_ex2_ │ │ │ +0007ca70: 7265 635f 756e 6375 7272 6965 643c 2f73 rec_uncurried R.
. │ │ │ +0007caf0: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
.
..< │ │ │ +0007cb00: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ +0007cb10: 0a45 7175 6976 616c 656e 6365 206f 6620 .Equivalence of │ │ │ +0007cb20: 6571 7561 6c69 7479 206f 6620 3c73 7061 equality of ex2 involving hP │ │ │ +0007cb80: 726f 7073 2077 6974 6820 6571 7561 6c69 rops with equali │ │ │ +0007cb90: 7479 206f 6620 7468 6520 6669 7273 7420 ty of the first │ │ │ +0007cba0: 636f 6d70 6f6e 656e 7473 200a 3c2f 6469 components ..
. &nbs │ │ │ +0007cbd0: 703b 3c73 7061 6e20 636c 6173 733d 2269 p;Definition eq_ex2_ │ │ │ +0007cc70: 6870 726f 705f 6966 663c 2f73 7061 6e3e hprop_iff │ │ │ +0007cc80: 3c2f 613e 207b 3c61 2069 643d 2241 3a39 { │ │ │ +0007ccb0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007ccd0: 413c 2f73 7061 6e3e 3c2f 613e 203a 203c A : < │ │ │ +0007cce0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007ccf0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0007cd00: 5072 6f70 3c2f 7370 616e 3e7d 207b 3c61 Prop} {P │ │ │ +0007cd60: 3c2f 613e 203c 6120 6964 3d22 513a 3935 < │ │ │ +0007cd90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007cda0: 7469 746c 653d 2262 696e 6465 7222 3e51 title="binder">Q │ │ │ +0007cdb0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : │ │ │ +0007cdf0: 3c73 7061 6e20 636c 6173 733d 2269 6422 A < │ │ │ +0007ce20: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007ce30: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007ce40: 6f67 6963 2e68 746d 6c23 3a3a 7479 7065 ogic.html#::type │ │ │ +0007ce50: 5f73 636f 7065 3a78 5f27 2d26 6774 3b27 _scope:x_'->' │ │ │ +0007ce60: 5f78 223e 3c73 7061 6e20 636c 6173 733d _x">-> Prop} (Q_hp │ │ │ +0007cf20: 726f 703c 2f73 7061 6e3e 3c2f 613e 203a rop : │ │ │ +0007cf30: 203c 7370 616e 2063 6c61 7373 3d22 6964 forall │ │ │ +0007cf60: 283c 6120 6964 3d22 783a 3936 3022 2063 (x : A< │ │ │ +0007d010: 2f73 7061 6e3e 3c2f 613e 2920 283c 6120 /span>) (p< │ │ │ +0007d070: 2f61 3e20 3c61 2069 643d 2271 3a39 3632 /a> q< │ │ │ +0007d0c0: 2f73 7061 6e3e 3c2f 613e 203a 203c 6120 /span> : < │ │ │ +0007d100: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007d110: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0007d120: 3e51 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >Q │ │ │ +0007d160: 3c73 7061 6e20 636c 6173 733d 2269 6422 x), │ │ │ +0007d190: 203c 6120 636c 6173 733d 2269 6472 6566 p < │ │ │ +0007d240: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007d250: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0007d260: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +0007d2a0: 3c73 7061 6e20 636c 6173 733d 2269 6422 q)< │ │ │ +0007d2d0: 6272 2f3e 0a26 6e62 7370 3b26 6e62 7370 br/>.   │ │ │ +0007d2e0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0007d2f0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0007d300: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0007d310: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0007d320: 7370 3b28 3c61 2069 643d 2275 3a39 3636 sp;(u< │ │ │ +0007d370: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> v : exists2 │ │ │ +0007d480: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ +0007d4a0: 3c73 7061 6e20 6964 3d22 613a 3936 3522 a │ │ │ +0007d4d0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 : │ │ │ +0007d540: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 │ │ │ +0007d5a0: 413c 2f73 7061 6e3e 3c2f 613e 3c61 2063 A, P a & Q< │ │ │ +0007d7c0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> a │ │ │ +0007d820: 3c2f 7370 616e 3e3c 2f61 3e29 3c62 722f )
.  &n │ │ │ +0007d840: 6273 703b 266e 6273 703b 3a20 3c61 2063 bsp; : │ │ │ +0007d8a0: 753c 2f73 7061 6e3e 3c2f 613e 203c 6120 u = v <-> (u < │ │ │ +0007db30: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007db40: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0007db50: 3e3d 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >= │ │ │ +0007db90: 3c73 7061 6e20 636c 6173 733d 2269 6422 v < │ │ │ +0007dbc0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007dbd0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007dbe0: 6f67 6963 2e68 746d 6c23 6238 6232 6562 ogic.html#b8b2eb │ │ │ +0007dbf0: 6338 6531 6138 6239 6161 3933 3563 3037 c8e1a8b9aa935c07 │ │ │ +0007dc00: 3032 6566 6235 6463 6366 223e 3c73 7061 02efb5dccf">:& │ │ │ +0007dc30: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0007dc40: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007dc50: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007dc60: 6f67 6963 2e68 746d 6c23 6138 3833 6264 ogic.html#a883bd │ │ │ +0007dc70: 6430 3130 3939 3335 3739 6639 3964 3630 d010993579f99d60 │ │ │ +0007dc80: 6233 3737 3562 6366 3534 223e 3c73 7061 b3775bcf54">ex │ │ │ +0007dcb0: 6973 7473 3c2f 7370 616e 3e3c 2f61 3e20 ists │ │ │ +0007dcc0: 3c61 2069 643d 2261 3a39 3638 2220 636c a : A, │ │ │ +0007ddf0: 3c2f 613e 203c 6120 636c 6173 733d 2269 P a< │ │ │ +0007df00: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007df10: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +0007df20: 3e29 3c2f 7370 616e 3e3c 2f61 3e3c 6272 >)
.  & │ │ │ +0007df40: 6e62 7370 3b26 6e62 7370 3b3a 3d20 3c61 nbsp; := < │ │ │ +0007df80: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007df90: 7469 746c 653d 2263 6f6e 7374 7275 6374 title="construct │ │ │ +0007dfa0: 6f72 223e 636f 6e6a 3c2f 7370 616e 3e3c or">conj< │ │ │ +0007dfb0: 2f61 3e20 283c 7370 616e 2063 6c61 7373 /a> (fun │ │ │ +0007dfe0: 203c 6120 6964 3d22 703a 3936 3922 2063 p => f_equal< │ │ │ +0007e0a0: 2f61 3e20 2840 3c61 2063 6c61 7373 3d22 /a> (@ │ │ │ +0007e100: 6578 5f6f 665f 6578 323c 2f73 7061 6e3e ex_of_ex2 │ │ │ +0007e110: 3c2f 613e 203c 7370 616e 2063 6c61 7373 _ _ │ │ │ +0007e160: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0007e180: 2f73 7061 6e3e 2920 3c61 2063 6c61 7373 /span>) p
) (eq_ex2_h │ │ │ +0007e250: 7072 6f70 3c2f 7370 616e 3e3c 2f61 3e20 prop │ │ │ +0007e260: 3c61 2063 6c61 7373 3d22 6964 7265 6622 Q_hpro │ │ │ +0007e2c0: 703c 2f73 7061 6e3e 3c2f 613e 203c 6120 p < │ │ │ +0007e300: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007e310: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +0007e320: 3e75 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >u │ │ │ +0007e360: 3c73 7061 6e20 636c 6173 733d 2269 6422 v). │ │ │ +0007e390: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
..
...
.Non-depen │ │ │ +0007e3c0: 6465 6e74 2063 6c61 7373 6966 6963 6174 dent classificat │ │ │ +0007e3d0: 696f 6e20 6f66 2065 7175 616c 6974 7920 ion of equality │ │ │ +0007e3e0: 6f66 203c 7370 616e 2063 6c61 7373 3d22 of ex .
.
.   │ │ │ +0007e450: 3b3c 7370 616e 2063 6c61 7373 3d22 6964 ;Definition eq_ex2_nondep< │ │ │ +0007e4f0: 2f73 7061 6e3e 3c2f 613e 207b 3c61 2069 /span> {A : Prop} {B< │ │ │ +0007e5d0: 2f73 7061 6e3e 3c2f 613e 203c 6120 6964 /span> C : Prop │ │ │ +0007e660: 7d20 283c 6120 6964 3d22 753a 3937 3322 } (u v │ │ │ +0007e710: 203a 2040 3c61 2063 6c61 7373 3d22 6964 : @ex2 A (fun _ => │ │ │ +0007e830: 3c61 2063 6c61 7373 3d22 6964 7265 6622 B │ │ │ +0007e890: 2920 283c 7370 616e 2063 6c61 7373 3d22 ) (fun < │ │ │ +0007e8c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007e8d0: 7469 746c 653d 2276 6172 223e 5f3c 2f73 title="var">_ => C │ │ │ +0007e940: 3c2f 7370 616e 3e3c 2f61 3e29 293c 6272 ))
.  & │ │ │ +0007e960: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0007e970: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +0007e980: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +0007e990: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0007e9a0: 3b28 3c61 2069 643d 2270 3a39 3735 2220 ;(p
: │ │ │ +0007ea30: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj1 u
= │ │ │ +0007eb40: 3c2f 613e 203c 6120 636c 6173 733d 2269 ex │ │ │ +0007eba0: 5f70 726f 6a31 3c2f 7370 616e 3e3c 2f61 _proj1 v) (< │ │ │ +0007ec40: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007ec50: 7469 746c 653d 2262 696e 6465 7222 3e71 title="binder">q │ │ │ +0007ec60: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c61 : ex_proj2< │ │ │ +0007ecd0: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> u │ │ │ +0007ed30: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 = ex_proj2 │ │ │ +0007ee20: 3c2f 613e 203c 6120 636c 6173 733d 2269 v) (r : │ │ │ +0007eee0: 203c 6120 636c 6173 733d 2269 6472 6566 ex_pro │ │ │ +0007ef40: 6a33 3c2f 7370 616e 3e3c 2f61 3e20 3c61 j3 │ │ │ +0007ef80: 3c73 7061 6e20 636c 6173 733d 2269 6422 u < │ │ │ +0007efb0: 6120 636c 6173 733d 2269 6472 6566 2220 a class="idref" │ │ │ +0007efc0: 6872 6566 3d22 436f 712e 496e 6974 2e4c href="Coq.Init.L │ │ │ +0007efd0: 6f67 6963 2e68 746d 6c23 3663 6430 6637 ogic.html#6cd0f7 │ │ │ +0007efe0: 6232 3862 3630 3932 3330 3430 3837 6337 b28b6092304087c7 │ │ │ +0007eff0: 3034 3934 3337 6262 3161 223e 3c73 7061 049437bb1a">=< │ │ │ +0007f020: 2f73 7061 6e3e 3c2f 613e 203c 6120 636c /span> │ │ │ +0007f060: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_proj3 v
)
.& │ │ │ +0007f100: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +0007f110: 3b26 6e62 7370 3b3a 203c 6120 636c 6173 ; : u = v
.&nbs │ │ │ +0007f260: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +0007f270: 6273 703b 3a3d 2040 3c61 2063 6c61 7373 bsp;:= @e │ │ │ +0007f2d0: 715f 6578 323c 2f73 7061 6e3e 3c2f 613e q_ex2 │ │ │ +0007f2e0: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +0007f300: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ _ u< │ │ │ +0007f3b0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> v │ │ │ +0007f410: 3c2f 613e 203c 6120 636c 6173 733d 2269 p (eq_tr │ │ │ +0007f4d0: 616e 733c 2f73 7061 6e3e 3c2f 613e 2028 ans ( │ │ │ +0007f4e0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 rew_const _ │ │ │ +0007f570: 3c73 7061 6e20 636c 6173 733d 2269 6422 _) q) (< │ │ │ +0007f630: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007f640: 7469 746c 653d 226c 656d 6d61 223e 6571 title="lemma">eq │ │ │ +0007f650: 5f74 7261 6e73 3c2f 7370 616e 3e3c 2f61 _trans (rew_cons │ │ │ +0007f6c0: 743c 2f73 7061 6e3e 3c2f 613e 203c 7370 t _ │ │ │ +0007f710: 5f3c 2f73 7061 6e3e 2920 3c61 2063 6c61 _) r< │ │ │ +0007f770: 2f73 7061 6e3e 3c2f 613e 292e 3c62 722f /span>).
..
.
. │ │ │ +0007f790: 0a3c 6469 7620 636c 6173 733d 2264 6f63 .
.Classificatio │ │ │ +0007f7b0: 6e20 6f66 2074 7261 6e73 706f 7274 696e n of transportin │ │ │ +0007f7c0: 6720 6163 726f 7373 2061 6e20 6571 7561 g across an equa │ │ │ +0007f7d0: 6c69 7479 206f 6620 3c73 7061 6e20 636c lity of ex │ │ │ +0007f810: 323c 2f73 7061 6e3e 3c2f 7370 616e 3e73 2s │ │ │ +0007f820: 200a 3c2f 6469 763e 0a3c 6469 7620 636c .
.
.&nbs │ │ │ +0007f840: 703b 266e 6273 703b 3c73 7061 6e20 636c p; Lemma rew_ex2 {A' │ │ │ +0007f930: 203a 203c 7370 616e 2063 6c61 7373 3d22 : Type} │ │ │ +0007f960: 207b 3c61 2069 643d 2278 3a39 3739 2220 {x} {P : A' -& │ │ │ +0007fae0: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0007faf0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007fb00: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0007fb10: 5072 6f70 3c2f 7370 616e 3e7d 2028 3c61 Prop} (Q │ │ │ +0007fb70: 3c2f 613e 203c 6120 6964 3d22 523a 3938 < │ │ │ +0007fba0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007fbb0: 7469 746c 653d 2262 696e 6465 7222 3e52 title="binder">R │ │ │ +0007fbc0: 3c2f 7370 616e 3e3c 2f61 3e20 3a20 3c73 : f │ │ │ +0007fbf0: 6f72 616c 6c3c 2f73 7061 6e3e 203c 6120 orall a< │ │ │ +0007fc50: 2f61 3e2c 203c 6120 636c 6173 733d 2269 /a>, P a -& │ │ │ +0007fd80: 6774 3b3c 2f73 7061 6e3e 3c2f 613e 203c gt; < │ │ │ +0007fd90: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +0007fda0: 7469 746c 653d 226b 6579 776f 7264 223e title="keyword"> │ │ │ +0007fdb0: 5072 6f70 3c2f 7370 616e 3e29 3c62 722f Prop)
.  &n │ │ │ +0007fdd0: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +0007fde0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +0007fdf0: 703b 283c 6120 6964 3d22 753a 3938 3622 p;(u : exist │ │ │ +0007fec0: 7332 3c2f 7370 616e 3e3c 2f61 3e20 3c61 s2 p :< │ │ │ +0007ffc0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> P │ │ │ +00080020: 3c2f 613e 203c 6120 636c 6173 733d 2269 x, │ │ │ +00080100: 203c 6120 636c 6173 733d 2269 6472 6566 Q x p< │ │ │ +00080220: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> &< │ │ │ +000802a0: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> R │ │ │ +00080300: 3c2f 613e 203c 6120 636c 6173 733d 2269 x p)
.&nb │ │ │ +000803d0: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +000803e0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +000803f0: 3b26 6e62 7370 3b26 6e62 7370 3b7b 3c61 ;  {y │ │ │ +00080450: 3c2f 613e 7d20 283c 6120 6964 3d22 483a } (H : │ │ │ +000804b0: 3c61 2063 6c61 7373 3d22 6964 7265 6622 x │ │ │ +00080510: 203c 6120 636c 6173 733d 2269 6472 6566 │ │ │ +00080580: 3d3c 2f73 7061 6e3e 3c2f 613e 203c 6120 = < │ │ │ +000805c0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000805d0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000805e0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >y).   │ │ │ +00080600: 266e 6273 703b 266e 6273 703b 3a20 3c61   : rew │ │ │ +00080680: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 [fun a => │ │ │ +00080790: 3c61 2063 6c61 7373 3d22 6964 7265 6622 e │ │ │ +00080800: 7869 7374 7332 3c2f 7370 616e 3e3c 2f61 xists2 p │ │ │ +00080880: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 : P a, │ │ │ +00080a40: 3c2f 613e 203c 6120 636c 6173 733d 2269 Q a p & R
a p< │ │ │ +00080d00: 2f73 7061 6e3e 3c2f 613e 3c61 2063 6c61 /span>] H in< │ │ │ +00080e60: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> u │ │ │ +00080ec0: 3c2f 613e 3c62 722f 3e0a 266e 6273 703b
.  │ │ │ +00080ed0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00080ee0: 703b 266e 6273 703b 266e 6273 703b 3c61 p;  = │ │ │ +00080fa0: 3c73 7061 6e20 636c 6173 733d 2269 6422 ex_intro2
.& │ │ │ +00080fe0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00080ff0: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00081000: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00081010: 6e62 7370 3b26 6e62 7370 3b28 3c61 2063 nbsp; ( │ │ │ +00081070: 513c 2f73 7061 6e3e 3c2f 613e 203c 6120 Q < │ │ │ +000810b0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000810c0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +000810d0: 3e79 3c2f 7370 616e 3e3c 2f61 3e29 3c62 >y).   │ │ │ +000810f0: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00081100: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00081110: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00081120: 283c 6120 636c 6173 733d 2269 6472 6566 (R y)
. & │ │ │ +000811f0: 6e62 7370 3b26 6e62 7370 3b26 6e62 7370 nbsp;   │ │ │ +00081200: 3b26 6e62 7370 3b26 6e62 7370 3b26 6e62 ;  &nb │ │ │ +00081210: 7370 3b26 6e62 7370 3b26 6e62 7370 3b26 sp;  & │ │ │ +00081220: 6e62 7370 3b28 3c61 2063 6c61 7373 3d22 nbsp;(
│ │ │ +00081270: 3c73 7061 6e20 636c 6173 733d 2269 6422 rew │ │ │ +000812a0: 203c 6120 636c 6173 733d 2269 6472 6566 H in │ │ │ +00081370: 3c2f 7370 616e 3e3c 2f61 3e20 3c61 2063 ex_proj1
u)
. │ │ │ +00081450: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00081460: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00081470: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00081480: 266e 6273 703b 266e 6273 703b 283c 6120   (rew< │ │ │ +00081510: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> depe │ │ │ +00081590: 6e64 656e 743c 2f73 7061 6e3e 3c2f 613e ndent │ │ │ +000815a0: 203c 6120 636c 6173 733d 2269 6472 6566 H in ex_proj2 │ │ │ +000816f0: 3c2f 613e 203c 6120 636c 6173 733d 2269 u)
.&nbs │ │ │ +00081760: 703b 266e 6273 703b 266e 6273 703b 266e p;  &n │ │ │ +00081770: 6273 703b 266e 6273 703b 266e 6273 703b bsp;   │ │ │ +00081780: 266e 6273 703b 266e 6273 703b 266e 6273   &nbs │ │ │ +00081790: 703b 266e 6273 703b 283c 6120 636c 6173 p; (< │ │ │ +000817f0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00081800: 7469 746c 653d 226e 6f74 6174 696f 6e22 title="notation" │ │ │ +00081810: 3e72 6577 3c2f 7370 616e 3e3c 2f61 3e20 >rew │ │ │ +00081820: 3c61 2063 6c61 7373 3d22 6964 7265 6622 dependen │ │ │ +000818a0: 743c 2f73 7061 6e3e 3c2f 613e 203c 6120 t < │ │ │ +000818e0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +000818f0: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ +00081900: 3e48 3c2f 7370 616e 3e3c 2f61 3e20 3c61 >H in< │ │ │ +00081990: 2f61 3e20 3c61 2063 6c61 7373 3d22 6964 /a> ex_ │ │ │ +000819f0: 7072 6f6a 333c 2f73 7061 6e3e 3c2f 613e proj3 │ │ │ +00081a00: 203c 6120 636c 6173 733d 2269 6472 6566 u).
.End
ex2 │ │ │ +00081af0: 3c2f 613e 2e3c 6272 2f3e 0a3c 7370 616e .
.Glob │ │ │ +00081b20: 616c 2041 7267 756d 656e 7473 3c2f 7370 al Arguments eq_ex_intro2
A < │ │ │ +00081bd0: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ +00081be0: 7469 746c 653d 2276 6172 223e 503c 2f73 title="var">P Q _ │ │ │ +00081c40: 203c 7370 616e 2063 6c61 7373 3d22 6964 _< │ │ │ +00081c60: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> _ _ │ │ │ +00081cd0: 5f3c 2f73 7061 6e3e 203c 7370 616e 2063 _ _ ! │ │ │ +00081d00: 3c73 7061 6e20 636c 6173 733d 2269 6422 p !q !r / .
..
.
. │ │ │ +00081dc0: 2020 203c 6469 7620 636c 6173 733d 2262
. │ │ │ +00081de0: 203c 6832 2063 6c61 7373 3d22 7469 746c

Navigation. . < │ │ │ +00081e30: 756c 2063 6c61 7373 3d22 6d65 6e75 223e ul class="menu"> │ │ │ +00081e40: 0a20 2020 2020 2020 2020 2020 2020 203c . < │ │ │ +00081e50: 6c69 2063 6c61 7373 3d22 6c65 6166 223e li class="leaf"> │ │ │ +00081e60: 5374 616e 6461 7264 204c 6962 7261 7279 Standard Library │ │ │ +00081e70: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ +00081e80: 203c 756c 2063 6c61 7373 3d22 6d65 6e75 . │ │ │ +00081f30: 2020 2020 2020 2020 2020 3c2f 6c69 3e0a . │ │ │ +00081f40: 2020 2020 2020 2020 2020 2020 3c2f 756c . .

.
. │ │ │ +00081f80: 2020 203c 2f64 6976 3e0a 0a20 203c 2f64
.. .. ...... │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Nat.html │ │ │ @@ -50,15 +50,15 @@ │ │ │ Require Decimal Hexadecimal Number.
│ │ │ Local Open Scope nat_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Peano natural numbers, definitions of operations

│ │ │ +

Peano natural numbers, definitions of operations

│ │ │ │ │ │
│ │ │ │ │ │ This file is meant to be used as a whole module, │ │ │ without importing it, leading to qualified definitions │ │ │ (e.g. Nat.pred) │ │ │
│ │ │ @@ -67,15 +67,15 @@ │ │ │
│ │ │ Definition t := nat.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Constants

│ │ │ +

Constants

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Local Notation "0" := O.
│ │ │ Local Notation "1" := (S O).
│ │ │ @@ -86,15 +86,15 @@ │ │ │ Definition one := 1.
│ │ │ Definition two := 2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic operations

│ │ │ +

Basic operations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition succ := S.
│ │ │ │ │ │ @@ -155,15 +155,15 @@ │ │ │
│ │ │ Register sub as num.nat.sub.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Comparisons

│ │ │ +

Comparisons

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint eqb n m : bool :=
│ │ │   match n, m with
│ │ │ @@ -201,15 +201,15 @@ │ │ │
│ │ │ Infix "?=" := compare (at level 70) : nat_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Minimum, maximum

│ │ │ +

Minimum, maximum

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint max n m :=
│ │ │   match n, m with
│ │ │ @@ -226,15 +226,15 @@ │ │ │     | S n', S m' => S (min n' m')
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Parity tests

│ │ │ +

Parity tests

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint even n : bool :=
│ │ │   match n with
│ │ │ @@ -246,15 +246,15 @@ │ │ │
│ │ │ Definition odd n := negb (even n).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Power

│ │ │ +

Power

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint pow n m :=
│ │ │   match m with
│ │ │ @@ -264,15 +264,15 @@ │ │ │
│ │ │ where "n ^ m" := (pow n m) : nat_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Tail-recursive versions of add and mul

│ │ │ +

Tail-recursive versions of add and mul

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint tail_add n m :=
│ │ │   match n with
│ │ │ @@ -298,15 +298,15 @@ │ │ │
│ │ │ Definition tail_mul n m := tail_addmul 0 n m.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversion with a decimal representation for printing/parsing

│ │ │ +

Conversion with a decimal representation for printing/parsing

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Local Notation ten := (S (S (S (S (S (S (S (S (S (S O)))))))))).
│ │ │ │ │ │ @@ -422,15 +422,15 @@ │ │ │
│ │ │ Definition to_num_int n := Number.IntDecimal (to_int n).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Euclidean division

│ │ │ +

Euclidean division

│ │ │ │ │ │
│ │ │ │ │ │ This division is linear and tail-recursive. │ │ │ In divmod, y is the predecessor of the actual divisor, │ │ │ and u is y minus the real remainder │ │ │ │ │ │ @@ -465,15 +465,15 @@ │ │ │ Infix "/" := div : nat_scope.
│ │ │ Infix "mod" := modulo (at level 40, no associativity) : nat_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Greatest common divisor

│ │ │ +

Greatest common divisor

│ │ │ │ │ │
│ │ │ │ │ │ We use Euclid algorithm, which is normally not structural, │ │ │ but Coq is now clever enough to accept this (behind modulo │ │ │ there is a subtraction, which now preserves being a subterm) │ │ │ │ │ │ @@ -487,27 +487,27 @@ │ │ │    | S a' => gcd (b mod (S a')) (S a')
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Square

│ │ │ +

Square

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition square n := n * n.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Square root

│ │ │ +

Square root

│ │ │ │ │ │
│ │ │ │ │ │ The following square root function is linear (and tail-recursive). │ │ │ With Peano representation, we can't do better. For faster algorithm, │ │ │ see Psqrt/Zsqrt/Nsqrt... │ │ │ │ │ │ @@ -537,15 +537,15 @@ │ │ │
│ │ │ Definition sqrt n := sqrt_iter n 0 0 0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Log2

│ │ │ +

Log2

│ │ │ │ │ │
│ │ │ │ │ │ This base-2 logarithm is linear and tail-recursive. │ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Number.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decimal or Hexadecimal numbers

│ │ │ +

Decimal or Hexadecimal numbers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Decimal Hexadecimal.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Tactics.html │ │ │ @@ -51,15 +51,15 @@ │ │ │ Require Import Logic.
│ │ │ Require Import Specif.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Useful tactics

│ │ │ +

Useful tactics

│ │ │ │ │ │
│ │ │ │ │ │ Ex falso quodlibet : a tactic for proving False instead of the current goal. │ │ │ This is just a nicer name for tactics such as cut False. │ │ │
│ │ │
│ │ │ @@ -372,15 +372,15 @@ │ │ │ Tactic Notation "dependent" "destruction" ident(H) :=
│ │ │   fail "To use dependent destruction, first [Require Import Coq.Program.Equality.]".
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

inversion_sigma

│ │ │ +

inversion_sigma

│ │ │ The built-in inversion will frequently leave equalities of │ │ │ dependent pairs. When the first type in the pair is an hProp or │ │ │ otherwise simplifies, inversion_sigma is useful; it will replace │ │ │ the equality of pairs with a pair of equalities, one involving a │ │ │ term casted along the other. This might also prove useful for │ │ │ writing a version of inversion / dependent destruction which │ │ │ does not lose information, i.e., does not turn a goal which is │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Tauto.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The tauto and intuition tactics

│ │ │ +

The tauto and intuition tactics

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Notations.
│ │ │ Require Import Ltac.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Init.Wf.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

This module proves the validity of

│ │ │ +

This module proves the validity of

│ │ │ │ │ │
    │ │ │
  • well-founded recursion (also known as course of values) │ │ │ │ │ │
  • │ │ │
  • well-founded induction │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.List.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Basics: definition of polymorphic lists and some operations

│ │ │ +

Basics: definition of polymorphic lists and some operations

│ │ │ │ │ │
│ │ │ │ │ │ The definition of list is now in Init/Datatypes, │ │ │ as well as the definitions of length and app │ │ │
│ │ │
│ │ │ @@ -143,15 +143,15 @@ │ │ │
│ │ │   Variable A : Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic facts

│ │ │ +

Generic facts

│ │ │ │ │ │
│ │ │ │ │ │ Discrimination │ │ │
│ │ │
│ │ │   Theorem nil_cons (x:A) (l:list A) : [] <> x :: l.
│ │ │ @@ -178,30 +178,30 @@ │ │ │   Theorem length_zero_iff_nil (l : list A):
│ │ │     length l = 0 <-> l = [].
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Head and tail

│ │ │ +

Head and tail

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Theorem hd_error_nil : hd_error (@nil A) = None.
│ │ │ │ │ │
│ │ │   Theorem hd_error_cons (l : list A) (x : A) : hd_error (x::l) = Some x.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Facts about app

│ │ │ +

Facts about app

│ │ │ │ │ │
│ │ │ │ │ │ Discrimination │ │ │
│ │ │
│ │ │   Theorem app_cons_not_nil (x y:list A) (a:A) : [] <> x ++ a :: y.
│ │ │ @@ -305,15 +305,15 @@ │ │ │   Lemma app_inv_tail_iff:
│ │ │     forall l l1 l2 : list A, l1 ++ l = l2 ++ l <-> l1 = l2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Facts about In

│ │ │ +

Facts about In

│ │ │ │ │ │
│ │ │ │ │ │ Characterization of In │ │ │
│ │ │
│ │ │ │ │ │ @@ -391,30 +391,30 @@ │ │ │
│ │ │ Local Ltac Tauto.intuition_solver ::= auto with datatypes.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Operations on the elements of a list

│ │ │ +

Operations on the elements of a list

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Elts.
│ │ │ │ │ │
│ │ │   Variable A : Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Nth element of a list

│ │ │ +

Nth element of a list

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Fixpoint nth (n:nat) (l:list A) (default:A) {struct l} : A :=
│ │ │     match n, l with
│ │ │ @@ -608,15 +608,15 @@ │ │ │   Lemma nth_error_nth_None (l : list A) (n : nat) (d : A) :
│ │ │     nth_error l n = None -> nth n l d = d.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Last element of a list

│ │ │ +

Last element of a list

│ │ │ │ │ │
│ │ │ │ │ │ last l d returns the last element of the list l, │ │ │ or the default value d if l is empty. │ │ │
│ │ │
│ │ │ @@ -663,15 +663,15 @@ │ │ │
│ │ │   Lemma removelast_last : forall l a, removelast (l ++ [a]) = l.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Remove

│ │ │ +

Remove

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Hypothesis eq_dec : forall x y : A, {x = y}+{x <> y}.
│ │ │ │ │ │ @@ -714,15 +714,15 @@ │ │ │
│ │ │   Lemma remove_length_lt : forall l x, In x l -> length (remove x l) < length l.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Counting occurrences of an element

│ │ │ +

Counting occurrences of an element

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Fixpoint count_occ (l : list A) (x : A) : nat :=
│ │ │     match l with
│ │ │ @@ -777,30 +777,30 @@ │ │ │
│ │ │ End Elts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Manipulating whole lists

│ │ │ +

Manipulating whole lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section ListOps.
│ │ │ │ │ │
│ │ │   Variable A : Type.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Reverse

│ │ │ +

Reverse

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Fixpoint rev (l:list A) : list A :=
│ │ │     match l with
│ │ │ @@ -889,15 +889,15 @@ │ │ │
│ │ │   Lemma rev_alt : forall l, rev l = rev_append l [].
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Concatenation

│ │ │ +

Concatenation

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Fixpoint concat (l : list (list A)) : list A :=
│ │ │   match l with
│ │ │ @@ -918,15 +918,15 @@ │ │ │   Lemma in_concat : forall l y,
│ │ │     In y (concat l) <-> exists x, In x l /\ In y x.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidable equality on lists

│ │ │ +

Decidable equality on lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Hypothesis eq_dec : forall (x y : A), {x = y}+{x <> y}.
│ │ │ │ │ │ @@ -939,19 +939,19 @@ │ │ │
│ │ │ End ListOps.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Applying functions to the elements of a list

│ │ │ +

Applying functions to the elements of a list

│ │ │ │ │ │
│ │ │ │ │ │ -

Map

│ │ │ +

Map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Map.
│ │ │   Variables (A : Type) (B : Type).
│ │ │ @@ -1031,15 +1031,15 @@ │ │ │
│ │ │ End Map.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Flat Map

│ │ │ +

Flat Map

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section FlatMap.
│ │ │   Variables (A : Type) (B : Type).
│ │ │ @@ -1210,15 +1210,15 @@ │ │ │         (list_power t l')
│ │ │     end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Boolean operations over lists

│ │ │ +

Boolean operations over lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section Bool.
│ │ │     Variable A : Type.
│ │ │ @@ -1374,15 +1374,15 @@ │ │ │
│ │ │   End Bool.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Further filtering facts

│ │ │ +

Further filtering facts

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section Filtering.
│ │ │     Variables (A : Type).
│ │ │ @@ -1456,15 +1456,15 @@ │ │ │
│ │ │   End Filtering.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Operations on lists of pairs or lists of lists

│ │ │ +

Operations on lists of pairs or lists of lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section ListPairs.
│ │ │     Variables (A : Type) (B : Type).
│ │ │ @@ -1586,19 +1586,19 @@ │ │ │
│ │ │   End ListPairs.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Miscellaneous operations on lists

│ │ │ +

Miscellaneous operations on lists

│ │ │ │ │ │
│ │ │ │ │ │ -

Length order of lists

│ │ │ +

Length order of lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section length_order.
│ │ │   Variable A : Type.
│ │ │ @@ -1634,15 +1634,15 @@ │ │ │ Hint Resolve lel_refl lel_cons_cons lel_cons lel_nil lel_nil nil_cons:
│ │ │   datatypes.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Set inclusion on list

│ │ │ +

Set inclusion on list

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section SetIncl.
│ │ │ │ │ │ @@ -1724,15 +1724,15 @@ │ │ │ Hint Resolve incl_refl incl_tl incl_tran incl_appl incl_appr incl_cons
│ │ │   incl_app incl_map: datatypes.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cutting a list at some position

│ │ │ +

Cutting a list at some position

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Cutting.
│ │ │ │ │ │ @@ -1903,15 +1903,15 @@ │ │ │       skipn n (map f l) = map f (skipn n l).
│ │ │ End CuttingMap.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Combining pairs of lists of possibly-different lengths

│ │ │ +

Combining pairs of lists of possibly-different lengths

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Combining.
│ │ │     Variables (A B : Type).
│ │ │ @@ -1935,15 +1935,15 @@ │ │ │
│ │ │ End Combining.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Predicate for List addition/removal (no need for decidability)

│ │ │ +

Predicate for List addition/removal (no need for decidability)

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Add.
│ │ │ │ │ │ @@ -1979,15 +1979,15 @@ │ │ │
│ │ │ End Add.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Lists without redundancy

│ │ │ +

Lists without redundancy

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section ReDun.
│ │ │ │ │ │ @@ -2131,15 +2131,15 @@ │ │ │
│ │ │ Lemma NoDup_map_inv A B (f:A->B) l : NoDup (map f l) -> NoDup l.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Sequence of natural numbers

│ │ │ +

Sequence of natural numbers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section NatSeq.
│ │ │ │ │ │ @@ -2195,15 +2195,15 @@ │ │ │
│ │ │ End NatSeq.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

List comparison

│ │ │ +

List comparison

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Compare.
│ │ │ │ │ │ @@ -2341,15 +2341,15 @@ │ │ │
│ │ │ Section Exists_Forall.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Existential and universal predicates over lists

│ │ │ +

Existential and universal predicates over lists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Variable A:Type.
│ │ │ │ │ │ @@ -2857,15 +2857,15 @@ │ │ │ Lemma list_max_lt : forall l n, l <> nil ->
│ │ │   list_max l < n <-> Forall (fun k => k < n) l.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Inversion of predicates over lists based on head symbol

│ │ │ +

Inversion of predicates over lists based on head symbol

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac is_list_constr c :=
│ │ │  match c with
│ │ │ @@ -2885,15 +2885,15 @@ │ │ │   | _ => idtac
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Exporting hints and tactics

│ │ │ +

Exporting hints and tactics

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Global Hint Rewrite
│ │ │   rev_involutive
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.SetoidList.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Export List.
│ │ │ Require Export Sorted.
│ │ │ Require Export Setoid Basics Morphisms.
│ │ │ Set Implicit Arguments.
│ │ │
│ │ │ │ │ │
│ │ │ -

Logical relations over lists with respect to a setoid equality

│ │ │ +

Logical relations over lists with respect to a setoid equality

│ │ │ │ │ │ or ordering. │ │ │
│ │ │ │ │ │ This can be seen as a complement of predicate lelistA and sort │ │ │ found in Sorting. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Lists.StreamMemo.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Import Eqdep_dec.
│ │ │ Require Import Streams.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Memoization

│ │ │ +

Memoization

│ │ │ │ │ │
│ │ │ │ │ │ Successive outputs of a given function f are stored in │ │ │ a stream in order to avoid duplicated computations. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ChoiceFacts.html │ │ │ @@ -46,15 +46,15 @@ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Some facts and definitions concerning choice and description in │ │ │ - intuitionistic logic.

References:

│ │ │ + intuitionistic logic.

References:

│ │ │ │ │ │
│ │ │ │ │ │ [Bell] John L. Bell, Choice principles in intuitionistic set theory, │ │ │ unpublished. │ │ │ │ │ │
│ │ │ @@ -85,15 +85,15 @@ │ │ │
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definitions

│ │ │ +

Definitions

│ │ │ │ │ │
│ │ │ │ │ │ Choice, reification and description schemes │ │ │
│ │ │ │ │ │ We make them all polymorphic. Most of them have existentials as conclusion │ │ │ @@ -112,15 +112,15 @@ │ │ │
│ │ │ Variable P:A->Prop.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Constructive choice and description

│ │ │ +

Constructive choice and description

│ │ │ │ │ │
│ │ │ │ │ │ AC_rel = relational form of the (non extensional) axiom of choice │ │ │ (a "set-theoretic" axiom of choice) │ │ │
│ │ │
│ │ │ @@ -342,15 +342,15 @@ │ │ │   forall P:A->Prop,
│ │ │     (exists! x, P x) -> { x:A | P x }.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Weakly classical choice and description

│ │ │ +

Weakly classical choice and description

│ │ │ │ │ │
│ │ │ │ │ │ GAC_rel = guarded relational form of the (non extensional) axiom of choice │ │ │
│ │ │
│ │ │ │ │ │ @@ -621,15 +621,15 @@ │ │ │ │ │ │
│ │ │ │ │ │ with no prerequisite on the non-emptiness of domains │ │ │ │ │ │
│ │ │ │ │ │ -

Table of contents

│ │ │ +

Table of contents

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ @@ -678,15 +678,15 @@ │ │ │ │ │ │
│ │ │ │ │ │ 9.2. AC_fun_setoid = AC_fun + Ext_pred_repr + PI │ │ │ │ │ │
│ │ │ │ │ │ -

AC_rel + AC! = AC_fun

│ │ │ +

AC_rel + AC! = AC_fun

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We show that the functional formulation of the axiom of Choice │ │ │ (usual formulation in type theory) is equivalent to its relational │ │ │ formulation (only formulation of set theory) + functional relation │ │ │ @@ -718,26 +718,26 @@ │ │ │   forall A B : Type, FunctionalChoice_on A B <->
│ │ │     RelationalChoice_on A B /\ FunctionalRelReification_on A B.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Connection between the guarded, non guarded and omniscient choices

│ │ │ +

Connection between the guarded, non guarded and omniscient choices

│ │ │ │ │ │
│ │ │ │ │ │ We show that the guarded formulations of the axiom of choice │ │ │ are equivalent to their "omniscient" variant and comes from the non guarded │ │ │ formulation in presence either of the independence of general premises │ │ │ or subset types (themselves derivable from subtypes thanks to proof- │ │ │ irrelevance) │ │ │
│ │ │ │ │ │ -

AC_rel + PI -> GAC_rel and AC_rel + IGP -> GAC_rel and GAC_rel = OAC_rel

│ │ │ +

AC_rel + PI -> GAC_rel and AC_rel + IGP -> GAC_rel and GAC_rel = OAC_rel

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma rel_choice_and_proof_irrel_imp_guarded_rel_choice :
│ │ │   RelationalChoice -> ProofIrrelevance -> GuardedRelationalChoice.
│ │ │ @@ -767,15 +767,15 @@ │ │ │ Corollary guarded_iff_omniscient_rel_choice :
│ │ │   GuardedRelationalChoice <-> OmniscientRelationalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AC_fun + IGP = GAC_fun = OAC_fun = AC_fun + Drinker

│ │ │ +

AC_fun + IGP = GAC_fun = OAC_fun = AC_fun + Drinker

│ │ │ │ │ │
│ │ │ │ │ │ AC_fun + IGP = GAC_fun │ │ │
│ │ │
│ │ │ │ │ │ @@ -842,15 +842,15 @@ │ │ │ Theorem guarded_iff_omniscient_fun_choice :
│ │ │   GuardedFunctionalChoice <-> OmniscientFunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

D_iota -> ID_iota and D_epsilon <-> ID_epsilon + Drinker

│ │ │ +

D_iota -> ID_iota and D_epsilon <-> ID_epsilon + Drinker

│ │ │ │ │ │
│ │ │ │ │ │ D_iota -> ID_iota │ │ │
│ │ │
│ │ │ │ │ │ @@ -886,15 +886,15 @@ │ │ │   (EpsilonStatement ->
│ │ │    SmallDrinker'sParadox * ConstructiveIndefiniteDescription).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Derivability of choice for decidable relations with well-ordered codomain

│ │ │ +

Derivability of choice for decidable relations with well-ordered codomain

│ │ │ │ │ │
│ │ │ │ │ │ Countable codomains, such as nat, can be equipped with a │ │ │ well-order, which implies the existence of a least element on │ │ │ inhabited decidable subsets. As a consequence, the relational form of │ │ │ the axiom of choice is derivable on nat for decidable relations. │ │ │ @@ -919,19 +919,19 @@ │ │ │     forall R:A->nat->Prop,
│ │ │       (forall x y, decidable (R x y)) -> FunctionalChoice_on_rel R.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AC_fun = AC_fun_dep = AC_trunc

│ │ │ +

AC_fun = AC_fun_dep = AC_trunc

│ │ │ │ │ │
│ │ │ │ │ │ -

Choice on dependent and non dependent function types are equivalent

│ │ │ +

Choice on dependent and non dependent function types are equivalent

│ │ │ │ │ │
│ │ │ │ │ │ The easy part │ │ │
│ │ │
│ │ │ │ │ │ @@ -962,15 +962,15 @@ │ │ │ Theorem non_dep_dep_functional_choice :
│ │ │   FunctionalChoice -> DependentFunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functional choice and truncation choice are equivalent

│ │ │ +

Functional choice and truncation choice are equivalent

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem functional_choice_to_inhabited_forall_commute :
│ │ │   FunctionalChoice -> InhabitedForallCommute.
│ │ │ @@ -979,15 +979,15 @@ │ │ │ Theorem inhabited_forall_commute_to_functional_choice :
│ │ │   InhabitedForallCommute -> FunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Reification of dependent and non dependent functional relation are equivalent

│ │ │ +

Reification of dependent and non dependent functional relation are equivalent

│ │ │ │ │ │
│ │ │ │ │ │ The easy part │ │ │
│ │ │
│ │ │ │ │ │ @@ -1014,19 +1014,19 @@ │ │ │ Corollary dep_iff_non_dep_functional_rel_reification :
│ │ │   FunctionalRelReification <-> DependentFunctionalRelReification.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Non contradiction of constructive descriptions wrt functional axioms of choice

│ │ │ +

Non contradiction of constructive descriptions wrt functional axioms of choice

│ │ │ │ │ │
│ │ │ │ │ │ -

Non contradiction of indefinite description

│ │ │ +

Non contradiction of indefinite description

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma relative_non_contradiction_of_indefinite_descr :
│ │ │   forall C:Prop, (ConstructiveIndefiniteDescription -> C)
│ │ │ @@ -1036,15 +1036,15 @@ │ │ │ Lemma constructive_indefinite_descr_fun_choice :
│ │ │   ConstructiveIndefiniteDescription -> FunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Non contradiction of definite description

│ │ │ +

Non contradiction of definite description

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma relative_non_contradiction_of_definite_descr :
│ │ │   forall C:Prop, (ConstructiveDefiniteDescription -> C)
│ │ │ @@ -1080,15 +1080,15 @@ │ │ │ │ │ │ but expecting FunctionalChoice (resp. FunctionalRelReification) to │ │ │ be applied on the same Type universes on both sides of the first │ │ │ (resp. second) equivalence breaks the stratification of universes. │ │ │ │ │ │
│ │ │ │ │ │ -

Excluded-middle + definite description => computational excluded-middle

│ │ │ +

Excluded-middle + definite description => computational excluded-middle

│ │ │ │ │ │
│ │ │ │ │ │ The idea for the following proof comes from [ChicliPottierSimpson02] │ │ │
│ │ │ │ │ │ Classical logic and axiom of unique choice (i.e. functional │ │ │ @@ -1124,15 +1124,15 @@ │ │ │   (forall P:Prop, P \/ ~ P) ->
│ │ │   forall C:Prop, ((forall P:Prop, {P} + {~ P}) -> C) -> C.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Choice => Dependent choice => Countable choice

│ │ │ +

Choice => Dependent choice => Countable choice

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Arith.
│ │ │ │ │ │ @@ -1144,27 +1144,27 @@ │ │ │ Theorem functional_dependent_choice_imp_functional_countable_choice :
│ │ │    FunctionalDependentChoice -> FunctionalCountableChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

About the axiom of choice over setoids

│ │ │ +

About the axiom of choice over setoids

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import ClassicalFacts PropExtensionalityFacts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Consequences of the choice of a representative in an equivalence class

│ │ │ +

Consequences of the choice of a representative in an equivalence class

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem repr_fun_choice_imp_ext_prop_repr :
│ │ │   RepresentativeFunctionalChoice -> ExtensionalPropositionRepresentative.
│ │ │ @@ -1177,15 +1177,15 @@ │ │ │ Theorem repr_fun_choice_imp_ext_function_repr :
│ │ │   RepresentativeFunctionalChoice -> ExtensionalFunctionRepresentative.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

This is a variant of Diaconescu and Goodman-Myhill theorems

│ │ │ +

This is a variant of Diaconescu and Goodman-Myhill theorems

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem repr_fun_choice_imp_excluded_middle :
│ │ │   RepresentativeFunctionalChoice -> ExcludedMiddle.
│ │ │ @@ -1194,15 +1194,15 @@ │ │ │ Theorem repr_fun_choice_imp_relational_choice :
│ │ │   RepresentativeFunctionalChoice -> RelationalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AC_fun_setoid = AC_fun_setoid_gen = AC_fun_setoid_simple

│ │ │ +

AC_fun_setoid = AC_fun_setoid_gen = AC_fun_setoid_simple

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem gen_setoid_fun_choice_imp_setoid_fun_choice :
│ │ │   forall A B, GeneralizedSetoidFunctionalChoice_on A B -> SetoidFunctionalChoice_on A B.
│ │ │ @@ -1227,15 +1227,15 @@ │ │ │ Corollary setoid_fun_choice_iff_simple_setoid_fun_choice :
│ │ │   forall A B, SetoidFunctionalChoice_on A B <-> SimpleSetoidFunctionalChoice_on A B.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AC_fun_setoid = AC! + AC_fun_repr

│ │ │ +

AC_fun_setoid = AC! + AC_fun_repr

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem setoid_fun_choice_imp_fun_choice :
│ │ │   forall A B, SetoidFunctionalChoice_on A B -> FunctionalChoice_on A B.
│ │ │ @@ -1263,27 +1263,27 @@ │ │ │ Note: What characterization to give of │ │ │ RepresentativeFunctionalChoice? A formulation of it as a functional │ │ │ relation would certainly be equivalent to the formulation of │ │ │ SetoidFunctionalChoice as a functional relation, but in their │ │ │ functional forms, SetoidFunctionalChoice seems strictly stronger │ │ │
│ │ │ │ │ │ -

AC_fun_setoid = AC_fun + Ext_fun_repr + EM

│ │ │ +

AC_fun_setoid = AC_fun + Ext_fun_repr + EM

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Import EqNotations.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

This is the main theorem in [Carlström04]

│ │ │ +

This is the main theorem in [Carlström04]

│ │ │ │ │ │
│ │ │ │ │ │ Note: all ingredients have a computational meaning when taken in │ │ │ separation. However, to compute with the functional choice, │ │ │ existential quantification has to be thought as a strong │ │ │ existential, which is incompatible with the computational content of │ │ │ @@ -1299,15 +1299,15 @@ │ │ │ Theorem setoid_functional_choice_first_characterization :
│ │ │   FunctionalChoice /\ ExtensionalFunctionRepresentative /\ ExcludedMiddle <-> SetoidFunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

AC_fun_setoid = AC_fun + Ext_pred_repr + PI

│ │ │ +

AC_fun_setoid = AC_fun + Ext_pred_repr + PI

│ │ │ │ │ │
│ │ │ │ │ │ Note: all ingredients have a computational meaning when taken in │ │ │ separation. However, to compute with the functional choice, │ │ │ existential quantification has to be thought as a strong │ │ │ existential, which is incompatible with proof-irrelevance which │ │ │ @@ -1323,15 +1323,15 @@ │ │ │ Theorem setoid_functional_choice_second_characterization :
│ │ │   FunctionalChoice /\ ExtensionalPredicateRepresentative /\ ProofIrrelevance <-> SetoidFunctionalChoice.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Compatibility notations

│ │ │ +

Compatibility notations

│ │ │ │ │ │
│ │ │
│ │ │ Notation description_rel_choice_imp_funct_choice :=
│ │ │   functional_rel_reification_and_rel_choice_imp_fun_choice (only parsing).
│ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalEpsilon.html │ │ │ @@ -129,15 +129,15 @@ │ │ │
│ │ │ Opaque epsilon.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Weaker lemmas (compatibility lemmas)

│ │ │ +

Weaker lemmas (compatibility lemmas)

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem choice :
│ │ │   forall (A B : Type) (R : A->B->Prop),
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ClassicalFacts.html │ │ │ @@ -110,15 +110,15 @@ │ │ │ │ │ │
│ │ │ │ │ │ 4.2 Classical logic = choice of representatives in a partition of bool │ │ │ │ │ │
│ │ │ │ │ │ -

Prop degeneracy = excluded-middle + prop extensionality

│ │ │ +

Prop degeneracy = excluded-middle + prop extensionality

│ │ │ │ │ │
│ │ │ │ │ │ i.e. (forall A, A=True \/ A=False) │ │ │ <-> │ │ │ (forall A, A\/~A) /\ (forall A B, (A<->B) -> A=B) │ │ │ │ │ │ @@ -186,19 +186,19 @@ │ │ │ Lemma provable_prop_ext :
│ │ │   prop_extensionality -> provable_prop_extensionality.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Classical logic and proof-irrelevance

│ │ │ +

Classical logic and proof-irrelevance

│ │ │ │ │ │
│ │ │ │ │ │ -

CC |- prop ext + A inhabited -> (A = A->A) -> A has fixpoint

│ │ │ +

CC |- prop ext + A inhabited -> (A = A->A) -> A has fixpoint

│ │ │ │ │ │
│ │ │ │ │ │ We successively show that: │ │ │ │ │ │
│ │ │ │ │ │ @@ -243,15 +243,15 @@ │ │ │ │ │ │
│ │ │ Remark: prop_extensionality can be replaced in lemma ext_prop_fixpoint │ │ │ by the weakest property provable_prop_extensionality. │ │ │ │ │ │
│ │ │ │ │ │ -

CC |- prop_ext /\ dep elim on bool -> proof-irrelevance

│ │ │ +

CC |- prop_ext /\ dep elim on bool -> proof-irrelevance

│ │ │ │ │ │
│ │ │ │ │ │ proof_irrelevance asserts equality of all proofs of a given formula │ │ │
│ │ │
│ │ │ Definition proof_irrelevance := forall (A:Prop) (a1 a2:A), a1 = a2.
│ │ │ @@ -340,15 +340,15 @@ │ │ │
│ │ │ Remark: prop_extensionality can be replaced in lemma │ │ │ ext_prop_dep_proof_irrel_gen by the weakest property │ │ │ provable_prop_extensionality. │ │ │ │ │ │
│ │ │ │ │ │ -

CIC |- prop. ext. -> proof-irrelevance

│ │ │ +

CIC |- prop. ext. -> proof-irrelevance

│ │ │ │ │ │
│ │ │ │ │ │ In the Calculus of Inductive Constructions, inductively defined booleans │ │ │ enjoy dependent case analysis, hence directly proof-irrelevance from │ │ │ propositional extensionality. │ │ │ │ │ │ @@ -394,15 +394,15 @@ │ │ │ │ │ │ [Berardi90] Stefano Berardi, "Type dependence and constructive │ │ │ mathematics", Ph. D. thesis, Dipartimento Matematica, Università di │ │ │ Torino, 1990. │ │ │ │ │ │
│ │ │ │ │ │ -

CC |- excluded-middle + dep elim on bool -> proof-irrelevance

│ │ │ +

CC |- excluded-middle + dep elim on bool -> proof-irrelevance

│ │ │ │ │ │
│ │ │ │ │ │ This is a proof in the pure Calculus of Construction that │ │ │ classical logic in Prop + dependent elimination of disjunction entails │ │ │ proof-irrelevance. │ │ │ │ │ │ @@ -566,15 +566,15 @@ │ │ │
│ │ │ End Proof_irrelevance_WEM_CC.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

CIC |- excluded-middle -> proof-irrelevance

│ │ │ +

CIC |- excluded-middle -> proof-irrelevance

│ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Since, dependent elimination is derivable in the Calculus of │ │ │ @@ -631,15 +631,15 @@ │ │ │ Remark: in the Set-impredicative CCI, Hurkens' paradox still holds with │ │ │ bool in Set and since ~true=false for true and false │ │ │ in bool from Set, we get the inconsistency of │ │ │ em : forall A:Prop, {A}+{~A} in the Set-impredicative CCI. │ │ │ │ │ │
│ │ │ │ │ │ -

Weak classical axioms

│ │ │ +

Weak classical axioms

│ │ │ │ │ │
│ │ │ │ │ │ We show the following increasing in the strength of axioms: │ │ │
    │ │ │
  • weak excluded-middle and classical De Morgan's law │ │ │ │ │ │ @@ -653,15 +653,15 @@ │ │ │
  • excluded-middle │ │ │ │ │ │
  • │ │ │
│ │ │ │ │ │
│ │ │ │ │ │ -

Weak excluded-middle

│ │ │ +

Weak excluded-middle

│ │ │ │ │ │
│ │ │ │ │ │ The weak classical logic based on ~~A \/ ~A is referred to with │ │ │ name KC in [ChagrovZakharyaschev97]. See [SorbiTerwijn11] for │ │ │ a short survey. │ │ │ │ │ │ @@ -708,15 +708,15 @@ │ │ │ Definition classical_de_morgan_law :=
│ │ │   forall A B:Prop, ~(A /\ B) -> ~A \/ ~B.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Gödel-Dummett axiom

│ │ │ +

Gödel-Dummett axiom

│ │ │ │ │ │
│ │ │ │ │ │ (A->B) \/ (B->A) is studied in [Dummett59] and is based on [Gödel33]. │ │ │ │ │ │
│ │ │ │ │ │ @@ -779,15 +779,15 @@ │ │ │ Lemma weak_excluded_middle_iff_classical_de_morgan_law :
│ │ │   weak_excluded_middle <-> classical_de_morgan_law.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Independence of general premises and drinker's paradox

│ │ │ +

Independence of general premises and drinker's paradox

│ │ │ │ │ │
│ │ │ │ │ │ Independence of general premises is the unconstrained, non │ │ │ constructive, version of the Independence of Premises as │ │ │ considered in [Troelstra73]. │ │ │ │ │ │ @@ -869,19 +869,19 @@ │ │ │ Lemma excluded_middle_independence_general_premises :
│ │ │   generalized_excluded_middle -> DrinkerParadox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Axioms equivalent to classical logic

│ │ │ +

Axioms equivalent to classical logic

│ │ │ │ │ │
│ │ │ │ │ │ -

Principle of unrestricted minimization

│ │ │ +

Principle of unrestricted minimization

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Coq.Arith.PeanoNat.
│ │ │ │ │ │ @@ -946,15 +946,15 @@ │ │ │
│ │ │ End Example_of_undecidable_predicate_with_the_minimization_property.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Choice of representatives in a partition of bool

│ │ │ +

Choice of representatives in a partition of bool

│ │ │ │ │ │
│ │ │ │ │ │ This is similar to Bell's "weak extensional selection principle" in [Bell] │ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Diaconescu.html │ │ │ @@ -104,15 +104,15 @@ │ │ │
│ │ │ Require ClassicalFacts ChoiceFacts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Pred. Ext. + Rel. Axiom of Choice -> Excluded-Middle

│ │ │ +

Pred. Ext. + Rel. Axiom of Choice -> Excluded-Middle

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section PredExt_RelChoice_imp_EM.
│ │ │ │ │ │ @@ -200,15 +200,15 @@ │ │ │
│ │ │ End PredExt_RelChoice_imp_EM.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Proof-Irrel. + Rel. Axiom of Choice -> Excl.-Middle for Equality

│ │ │ +

Proof-Irrel. + Rel. Axiom of Choice -> Excl.-Middle for Equality

│ │ │ │ │ │
│ │ │ │ │ │ This is an adaptation of Diaconescu's theorem, exploiting the │ │ │ form of extensionality provided by proof-irrelevance │ │ │
│ │ │
│ │ │ @@ -307,15 +307,15 @@ │ │ │
│ │ │ End ProofIrrel_RelChoice_imp_EqEM.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extensional Hilbert's epsilon description operator -> Excluded-Middle

│ │ │ +

Extensional Hilbert's epsilon description operator -> Excluded-Middle

│ │ │ │ │ │
│ │ │ │ │ │ Proof sketch from Bell [Bell93] (with thanks to P. Castéran) │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.EqdepFacts.html │ │ │ @@ -112,15 +112,15 @@ │ │ │ equalities assuming axiom eq_rect_eq │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Definition of dependent equality and equivalence with equality of dependent pairs

│ │ │ +

Definition of dependent equality and equivalence with equality of dependent pairs

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Import EqNotations.
│ │ │ │ │ │ @@ -280,15 +280,15 @@ │ │ │ #[global]
│ │ │ Hint Immediate eq_dep_sym: core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Eq_rect_eq <-> Eq_dep_eq <-> UIP <-> UIP_refl <-> K

│ │ │ +

Eq_rect_eq <-> Eq_dep_eq <-> UIP <-> UIP_refl <-> K

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Equivalences.
│ │ │ │ │ │ @@ -506,15 +506,15 @@ │ │ │ Notation Inj_dep_pairT := Inj_dep_pair.
│ │ │ Notation eq_dep_eq__inj_pairT2 := eq_dep_eq__inj_pair2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definition of the functor that builds properties of dependent equalities assuming axiom eq_rect_eq

│ │ │ +

Definition of the functor that builds properties of dependent equalities assuming axiom eq_rect_eq

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type EqdepElimination.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Eqdep_dec.html │ │ │ @@ -84,15 +84,15 @@ │ │ │ from a proof of decidability of equality for a set in Set │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Streicher's K and injectivity of dependent pair hold on decidable types

│ │ │ +

Streicher's K and injectivity of dependent pair hold on decidable types

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │ @@ -245,15 +245,15 @@ │ │ │
│ │ │ Unset Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definition of the functor that builds properties of dependent equalities on decidable sets in Type

│ │ │ +

Definition of the functor that builds properties of dependent equalities on decidable sets in Type

│ │ │ │ │ │
│ │ │ │ │ │ The signature of decidable sets in Type │ │ │
│ │ │
│ │ │ │ │ │ @@ -369,15 +369,15 @@ │ │ │
│ │ │ End DecidableEqDep.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definition of the functor that builds properties of dependent equalities on decidable sets in Set

│ │ │ +

Definition of the functor that builds properties of dependent equalities on decidable sets in Set

│ │ │ │ │ │
│ │ │ │ │ │ The signature of decidable sets in Set │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.ExtensionalityFacts.html │ │ │ @@ -101,15 +101,15 @@ │ │ │
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definitions

│ │ │ +

Definitions

│ │ │ │ │ │
│ │ │ │ │ │ Being an inverse │ │ │
│ │ │
│ │ │ │ │ │ @@ -193,27 +193,27 @@ │ │ │ Local Notation BijectivityBijectiveComp := (forall A B C (f:A->B) g,
│ │ │   is_inverse f g -> is_inverse (A:=B->C) (action f) (action g)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functional extensionality <-> Equality of projections from diagonal

│ │ │ +

Functional extensionality <-> Equality of projections from diagonal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem FunctExt_iff_EqDeltaProjs : FunctionalExtensionality <-> EqDeltaProjs.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functional extensionality <-> Unicity of bijection inverse

│ │ │ +

Functional extensionality <-> Unicity of bijection inverse

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma FunctExt_UniqInverse : FunctionalExtensionality -> UniqueInverse.
│ │ │ │ │ │ @@ -223,15 +223,15 @@ │ │ │
│ │ │ Theorem FunctExt_iff_UniqInverse : FunctionalExtensionality <-> UniqueInverse.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functional extensionality <-> Bijectivity of bijective composition

│ │ │ +

Functional extensionality <-> Bijectivity of bijective composition

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma FunctExt_BijComp : FunctionalExtensionality -> BijectivityBijectiveComp.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.FinFun.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functions on finite domains

│ │ │ +

Functions on finite domains

│ │ │ │ │ │
│ │ │ │ │ │ Main result : for functions f:A->A with finite A, │ │ │ f injective <-> f bijective <-> f surjective. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.Hurkens.html │ │ │ @@ -172,15 +172,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A modular proof of Hurkens's paradox.

│ │ │ +

A modular proof of Hurkens's paradox.

│ │ │ │ │ │
│ │ │ │ │ │ It relies on an axiomatisation of a shallow embedding of system U- │ │ │ (i.e. types of U- are interpreted by types of Coq). The │ │ │ universes are encoded in a style, due to Martin-Löf, where they │ │ │ are given by a set of names and a family El:Name->Type which │ │ │ @@ -199,35 +199,35 @@ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Axiomatisation of impredicative universes in a Martin-Löf style

│ │ │ +

Axiomatisation of impredicative universes in a Martin-Löf style

│ │ │ │ │ │
│ │ │ │ │ │ System U- has two impredicative universes. In the proof of the │ │ │ paradox they are slightly asymmetric (in particular the reduction │ │ │ rules of the small universe are not needed). Therefore, the │ │ │ axioms are duplicated allowing for a weaker requirement than the │ │ │ actual system U-. │ │ │
│ │ │ │ │ │ -

Large universe

│ │ │ +

Large universe

│ │ │ │ │ │
│ │ │
│ │ │ Variable U1 : Type.
│ │ │ Variable El1 : U1 -> Type.
│ │ │
│ │ │ │ │ │
│ │ │ -

Closure by small product

│ │ │ +

Closure by small product

│ │ │ │ │ │
│ │ │
│ │ │ Variable Forall1 : forall u:U1, (El1 u -> U1) -> U1.
│ │ │   Notation "'∀₁' x : A , B" := (Forall1 A (fun x => B)).
│ │ │   Notation "A '⟶₁' B" := (Forall1 A (fun _ => B)).
│ │ │ Variable lam1 : forall u B, (forall x:El1 u, El1 (B x)) -> El1 ( x:u, B x).
│ │ │ @@ -235,15 +235,15 @@ │ │ │ Variable app1 : forall u B (f:El1 (Forall1 u B)) (x:El1 u), El1 (B x).
│ │ │   Notation "f '·₁' x" := (app1 _ _ f x).
│ │ │ Variable beta1 : forall u B (f:forall x:El1 u, El1 (B x)) x,
│ │ │                    (λ₁ y, f y) · x = f x.
│ │ │
│ │ │ │ │ │
│ │ │ -

Closure by large products

│ │ │ +

Closure by large products

│ │ │ U1 only needs to quantify over itself. │ │ │
│ │ │
│ │ │ Variable ForallU1 : (U1->U1) -> U1.
│ │ │   Notation "'∀₂' A , F" := (ForallU1 (fun A => F)).
│ │ │ Variable lamU1 : forall F, (forall A:U1, El1 (F A)) -> El1 ( A, F A).
│ │ │   Notation "'λ₂' x , u" := (lamU1 _ (fun x => u)).
│ │ │ @@ -252,54 +252,54 @@ │ │ │ Variable betaU1 : forall F (f:forall A:U1, El1 (F A)) A,
│ │ │                     (λ₂ x, f x) · [ A ] = f A.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Small universe

│ │ │ +

Small universe

│ │ │ The small universe is an element of the large one. │ │ │
│ │ │
│ │ │ Variable u0 : U1.
│ │ │ Notation U0 := (El1 u0).
│ │ │ Variable El0 : U0 -> Type.
│ │ │
│ │ │ │ │ │
│ │ │ -

Closure by small product

│ │ │ +

Closure by small product

│ │ │ U0 does not need reduction rules │ │ │
│ │ │
│ │ │ Variable Forall0 : forall u:U0, (El0 u -> U0) -> U0.
│ │ │   Notation "'∀₀' x : A , B" := (Forall0 A (fun x => B)).
│ │ │   Notation "A '⟶₀' B" := (Forall0 A (fun _ => B)).
│ │ │ Variable lam0 : forall u B, (forall x:El0 u, El0 (B x)) -> El0 ( x:u, B x).
│ │ │   Notation "'λ₀' x , u" := (lam0 _ _ (fun x => u)).
│ │ │ Variable app0 : forall u B (f:El0 (Forall0 u B)) (x:El0 u), El0 (B x).
│ │ │   Notation "f '·₀' x" := (app0 _ _ f x).
│ │ │
│ │ │ │ │ │
│ │ │ -

Closure by large products

│ │ │ +

Closure by large products

│ │ │ │ │ │
│ │ │
│ │ │ Variable ForallU0 : forall u:U1, (El1 u->U0) -> U0.
│ │ │   Notation "'∀₀¹' A : U , F" := (ForallU0 U (fun A => F)).
│ │ │ Variable lamU0 : forall U F, (forall A:El1 U, El0 (F A)) -> El0 (₀¹ A:U, F A).
│ │ │   Notation "'λ₀¹' x , u" := (lamU0 _ _ (fun x => u)).
│ │ │ Variable appU0 : forall U F (f:El0(₀¹ A:U,F A)) (A:El1 U), El0 (F A).
│ │ │   Notation "f '·₀' [ A ]" := (appU0 _ _ f A).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Automating the rewrite rules of our encoding.

│ │ │ +

Automating the rewrite rules of our encoding.

│ │ │ │ │ │
│ │ │
│ │ │ Local Ltac simplify :=
│ │ │   
│ │ │   (repeat rewrite ?beta1, ?betaU1);
│ │ │   lazy beta.
│ │ │ @@ -309,28 +309,28 @@ │ │ │   (repeat rewrite ?beta1, ?betaU1 in h);
│ │ │   lazy beta in h.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Hurkens's paradox.

│ │ │ +

Hurkens's paradox.

│ │ │ │ │ │
│ │ │ │ │ │ An inhabitant of U0 standing for False. │ │ │
│ │ │
│ │ │ Variable F:U0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Preliminary definitions

│ │ │ +

Preliminary definitions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition V : U1 := A, ((A u0) A u0) A u0.
│ │ │ Definition U : U1 := V u0.
│ │ │ @@ -351,15 +351,15 @@ │ │ │   (₀¹ i:U₁u0, le i x i · (λ₁ v, (sb v) · [U] · le' · x)) F
│ │ │ .
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Proof

│ │ │ +

Proof

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma Omega : El0 (₀¹ i:U₁u0, induct i i · WF).
│ │ │ Proof.
│ │ │ @@ -436,15 +436,15 @@ │ │ │
│ │ │ End Generic.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Impredicative universes are not retracts.

│ │ │ +

Impredicative universes are not retracts.

│ │ │ │ │ │
│ │ │ │ │ │ There can be no retract to an impredicative Coq universe from a │ │ │ smaller type. In this version of the proof, the impredicativity of │ │ │ the universe is postulated with a pair of functions from the │ │ │ universe to its type and back which commute with dependent product │ │ │ @@ -463,15 +463,15 @@ │ │ │ Let U1:U2 := Type.
│ │ │ Variable U0:U1.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

U1 is impredicative

│ │ │ +

U1 is impredicative

│ │ │ │ │ │
│ │ │
│ │ │ Variable u22u1 : U2 -> U1.
│ │ │ Hypothesis u22u1_unit : forall (c:U2), c -> u22u1 c.
│ │ │
│ │ │ │ │ │ @@ -490,28 +490,28 @@ │ │ │ Hypothesis u22u1_coherent : forall (F:U1 -> U1) (f:forall x:U1, F x) (x:U1),
│ │ │                               u22u1_counit _ (u22u1_unit _ f) x = f x.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

U0 is a retract of U1

│ │ │ +

U0 is a retract of U1

│ │ │ │ │ │
│ │ │
│ │ │ Variable u02u1 : U0 -> U1.
│ │ │ Variable u12u0 : U1 -> U0.
│ │ │ Hypothesis u12u0_unit : forall (b:U1), b -> u02u1 (u12u0 b).
│ │ │ Hypothesis u12u0_counit : forall (b:U1), u02u1 (u12u0 b) -> b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem paradox : forall F:U1, F.
│ │ │ Proof.
│ │ │ @@ -567,15 +567,15 @@ │ │ │
│ │ │ End NoRetractToImpredicativeUniverse.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Modal fragments of Prop are not retracts

│ │ │ +

Modal fragments of Prop are not retracts

│ │ │ │ │ │
│ │ │ │ │ │ In presence of a a monadic modality on Prop, we can define a │ │ │ subset of Prop of modal propositions which is also a complete │ │ │ Heyting algebra. These cannot be a retract of a modal │ │ │ proposition. This is a case where the universe in system U- are │ │ │ @@ -586,15 +586,15 @@ │ │ │
│ │ │ Module NoRetractToModalProposition.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Monadic modality

│ │ │ +

Monadic modality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │ @@ -609,15 +609,15 @@ │ │ │   eapply incr in h; eauto.
│ │ │ Qed.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The universe of modal propositions

│ │ │ +

The universe of modal propositions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition MProp := { P:Prop | M P -> P }.
│ │ │ Definition El : MProp -> Prop := @proj1_sig _ _.
│ │ │ @@ -639,15 +639,15 @@ │ │ │     eauto using modal.
│ │ │ Defined.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Retract of the modal fragment of Prop in a small type

│ │ │ +

Retract of the modal fragment of Prop in a small type

│ │ │ │ │ │
│ │ │ │ │ │ The retract is axiomatized using logical equivalence as the │ │ │ equality on propositions. │ │ │
│ │ │
│ │ │ @@ -659,15 +659,15 @@ │ │ │ Hypothesis p2p1 : forall A:MProp, El (b2p (p2b A)) -> El A.
│ │ │ Hypothesis p2p2 : forall A:MProp, El A -> El (b2p (p2b A)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem paradox : forall B:MProp, El B.
│ │ │ Proof.
│ │ │ @@ -718,15 +718,15 @@ │ │ │
│ │ │ End NoRetractToModalProposition.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The negative fragment of Prop is not a retract

│ │ │ +

The negative fragment of Prop is not a retract

│ │ │ │ │ │
│ │ │ │ │ │ The existence in the pure Calculus of Constructions of a retract │ │ │ from the negative fragment of Prop into a negative proposition │ │ │ is inconsistent. This is an instance of the previous result. │ │ │
│ │ │ @@ -735,15 +735,15 @@ │ │ │
│ │ │ Module NoRetractToNegativeProp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The universe of negative propositions.

│ │ │ +

The universe of negative propositions.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition NProp := { P:Prop | ~~P -> P }.
│ │ │ Definition El : NProp -> Prop := @proj1_sig _ _.
│ │ │ @@ -751,15 +751,15 @@ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Retract of the negative fragment of Prop in a small type

│ │ │ +

Retract of the negative fragment of Prop in a small type

│ │ │ │ │ │
│ │ │ │ │ │ The retract is axiomatized using logical equivalence as the │ │ │ equality on propositions. │ │ │
│ │ │
│ │ │ @@ -771,15 +771,15 @@ │ │ │ Hypothesis p2p1 : forall A:NProp, El (b2p (p2b A)) -> El A.
│ │ │ Hypothesis p2p2 : forall A:NProp, El A -> El (b2p (p2b A)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem paradox : forall B:NProp, El B.
│ │ │ Proof.
│ │ │ @@ -802,15 +802,15 @@ │ │ │
│ │ │ End NoRetractToNegativeProp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Prop is not a retract

│ │ │ +

Prop is not a retract

│ │ │ │ │ │
│ │ │ │ │ │ The existence in the pure Calculus of Constructions of a retract │ │ │ from Prop into a small type of Prop is inconsistent. This is a │ │ │ special case of the previous result. │ │ │
│ │ │ @@ -819,15 +819,15 @@ │ │ │
│ │ │ Module NoRetractFromSmallPropositionToProp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The universe of propositions.

│ │ │ +

The universe of propositions.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition NProp := { P:Prop | P -> P}.
│ │ │ Definition El : NProp -> Prop := @proj1_sig _ _.
│ │ │ @@ -835,15 +835,15 @@ │ │ │
│ │ │ Section MParadox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Retract of Prop in a small type, using the identity modality.

│ │ │ +

Retract of Prop in a small type, using the identity modality.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Variable bool : NProp.
│ │ │ Variable p2b : NProp -> El bool.
│ │ │ @@ -851,15 +851,15 @@ │ │ │ Hypothesis p2p1 : forall A:NProp, El (b2p (p2b A)) -> El A.
│ │ │ Hypothesis p2p2 : forall A:NProp, El A -> El (b2p (p2b A)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem mparadox : forall B:NProp, El B.
│ │ │ Proof.
│ │ │ @@ -882,15 +882,15 @@ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Retract of Prop in a small type

│ │ │ +

Retract of Prop in a small type

│ │ │ │ │ │
│ │ │ │ │ │ The retract is axiomatized using logical equivalence as the │ │ │ equality on propositions. │ │ │
│ │ │
│ │ │ @@ -900,15 +900,15 @@ │ │ │ Hypothesis p2p1 : forall A:Prop, b2p (p2b A) -> A.
│ │ │ Hypothesis p2p2 : forall A:Prop, A -> b2p (p2b A).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem paradox : forall B:Prop, B.
│ │ │ Proof.
│ │ │ @@ -927,15 +927,15 @@ │ │ │
│ │ │ End NoRetractFromSmallPropositionToProp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Large universes are not retracts of Prop.

│ │ │ +

Large universes are not retracts of Prop.

│ │ │ │ │ │
│ │ │ │ │ │ The existence in the Calculus of Constructions with universes of a │ │ │ retract from some Type universe into Prop is inconsistent. │ │ │
│ │ │
│ │ │ @@ -952,29 +952,29 @@ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Assumption of a retract from Type into Prop

│ │ │ +

Assumption of a retract from Type into Prop

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Variable down : Type1 -> Prop.
│ │ │ Variable up : Prop -> Type1.
│ │ │ Hypothesis up_down : forall (A:Type1), up (down A) = A :> Type1.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Paradox

│ │ │ +

Paradox

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Theorem paradox : forall P:Prop, P.
│ │ │ Proof.
│ │ │ @@ -1021,15 +1021,15 @@ │ │ │
│ │ │ End NoRetractFromTypeToProp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A<>Type

│ │ │ +

A<>Type

│ │ │ │ │ │
│ │ │ │ │ │ No Coq universe can be equal to one of its elements. │ │ │
│ │ │
│ │ │ │ │ │ @@ -1042,29 +1042,29 @@ │ │ │
│ │ │ Section Paradox.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Universe U is equal to one of its elements.

│ │ │ +

Universe U is equal to one of its elements.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Let U := Type.
│ │ │ Variable A:U.
│ │ │ Hypothesis h : U=A.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Universe U is a retract of A

│ │ │ +

Universe U is a retract of A

│ │ │ │ │ │
│ │ │ │ │ │ The following context is actually sufficient for the paradox to │ │ │ hold. The hypothesis h:U=A is only used to define down, up │ │ │ and up_down. │ │ │
│ │ │ @@ -1146,15 +1146,15 @@ │ │ │
│ │ │ End TypeNeqSmallType.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Prop<>Type.

│ │ │ +

Prop<>Type.

│ │ │ │ │ │
│ │ │ │ │ │ Special case of TypeNeqSmallType. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropExtensionalityFacts.html │ │ │ @@ -113,15 +113,15 @@ │ │ │
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Definitions

│ │ │ +

Definitions

│ │ │ │ │ │
│ │ │ │ │ │ Propositional extensionality │ │ │
│ │ │
│ │ │ │ │ │ @@ -177,19 +177,19 @@ │ │ │ Local Notation PropositionalFunctionalExtensionality :=
│ │ │   (forall (A:Type) (P Q : A -> Prop), (forall x, P x = Q x) -> P = Q).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Propositional and predicate extensionality

│ │ │ +

Propositional and predicate extensionality

│ │ │ │ │ │
│ │ │ │ │ │ -

Predicate extensionality <-> Propositional extensionality + Propositional functional extensionality

│ │ │ +

Predicate extensionality <-> Propositional extensionality + Propositional functional extensionality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma PredExt_imp_PropExt : PredicateExtensionality -> PropositionalExtensionality.
│ │ │ │ │ │ @@ -204,27 +204,27 @@ │ │ │ Theorem PropExt_and_PropFunExt_iff_PredExt :
│ │ │   PropositionalExtensionality /\ PropositionalFunctionalExtensionality <-> PredicateExtensionality.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Propositional extensionality and provable proposition extensionality

│ │ │ +

Propositional extensionality and provable proposition extensionality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma PropExt_imp_ProvPropExt : PropositionalExtensionality -> ProvablePropositionExtensionality.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Propositional extensionality and refutable proposition extensionality

│ │ │ +

Propositional extensionality and refutable proposition extensionality

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma PropExt_imp_RefutPropExt : PropositionalExtensionality -> RefutablePropositionExtensionality.
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.PropFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic facts about Prop as a type

│ │ │ +

Basic facts about Prop as a type

│ │ │ │ │ │
│ │ │ │ │ │ An intuitionistic theorem from topos theory [LambekScott] │ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Logic.SetIsType.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The Set universe seen as a synonym for Type

│ │ │ +

The Set universe seen as a synonym for Type

│ │ │ │ │ │
│ │ │ │ │ │ After loading this file, Set becomes just another name for Type. │ │ │ This allows easily performing a Set-to-Type migration, or at least │ │ │ test whether a development relies or not on specific features of │ │ │ Set: simply insert some Require Export of this file at starting │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetAVL.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

MSetAVL : Implementation of MSetInterface via AVL trees

│ │ │ +

MSetAVL : Implementation of MSetInterface via AVL trees

│ │ │ │ │ │
│ │ │ │ │ │ This module implements finite sets using AVL trees. │ │ │ It follows the implementation from Ocaml's standard library, │ │ │ │ │ │
│ │ │ @@ -87,29 +87,29 @@ │ │ │
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Ops : the pure functions

│ │ │ +

Ops : the pure functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Ops (Import I:Int)(X:OrderedType) <: MSetInterface.Ops X.
│ │ │ Local Open Scope Int_scope.
│ │ │ Local Notation int := I.t.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic trees instantiated with integer height

│ │ │ +

Generic trees instantiated with integer height

│ │ │ │ │ │
│ │ │ │ │ │ We reuse a generic definition of trees where the information │ │ │ parameter is a Int.t. Functions like mem or fold are also │ │ │ provided by this generic functor. │ │ │
│ │ │ @@ -121,15 +121,15 @@ │ │ │
│ │ │ Definition t := tree.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Height of trees

│ │ │ +

Height of trees

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition height (s : t) : int :=
│ │ │   match s with
│ │ │ @@ -137,27 +137,27 @@ │ │ │   | Node h _ _ _ => h
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Singleton set

│ │ │ +

Singleton set

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition singleton x := Node 1 Leaf x Leaf.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Helper functions

│ │ │ +

Helper functions

│ │ │ │ │ │
│ │ │ │ │ │ create l x r creates a node, assuming l and r │ │ │ to be balanced and |height l - height r| <= 2. │ │ │
│ │ │
│ │ │ @@ -212,15 +212,15 @@ │ │ │     else
│ │ │       create l x r.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint add x s := match s with
│ │ │    | Leaf => Node 1 Leaf x Leaf
│ │ │ @@ -232,15 +232,15 @@ │ │ │       end
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Join

│ │ │ +

Join

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Same as bal but does not assume anything regarding heights │ │ │ of l and r. │ │ │ │ │ │ @@ -261,15 +261,15 @@ │ │ │           end
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extraction of minimum element

│ │ │ +

Extraction of minimum element

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Morally, remove_min is to be applied to a non-empty tree │ │ │ t = Node h l x r. Since we can't deal here with assert false │ │ │ for t=Leaf, we pre-unpack t (and forget about h). │ │ │ @@ -285,15 +285,15 @@ │ │ │        let (l',m) := remove_min ll lx lr in (bal l' x r, m)
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Merging two trees

│ │ │ +

Merging two trees

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ merge t1 t2 builds the union of t1 and t2 assuming all elements │ │ │ of t1 to be smaller than all elements of t2, and │ │ │ |height t1 - height t2| <= 2. │ │ │ @@ -309,15 +309,15 @@ │ │ │         let (s2',m) := remove_min l2 x2 r2 in bal s1 m s2'
│ │ │ end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint remove x s := match s with
│ │ │   | Leaf => Leaf
│ │ │ @@ -329,15 +329,15 @@ │ │ │       end
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Concatenation

│ │ │ +

Concatenation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Same as merge but does not assume anything about heights. │ │ │ │ │ │
│ │ │ @@ -353,15 +353,15 @@ │ │ │             join s1 m s2'
│ │ │    end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Splitting

│ │ │ +

Splitting

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ split x s returns a triple (l, present, r) where │ │ │
    │ │ │
  • l is the set of elements of s that are < x │ │ │ @@ -393,15 +393,15 @@ │ │ │      end
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Intersection

│ │ │ +

Intersection

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint inter s1 s2 := match s1, s2 with
│ │ │     | Leaf, _ => Leaf
│ │ │ @@ -412,15 +412,15 @@ │ │ │             else concat (inter l1 l2') (inter r1 r2')
│ │ │     end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Difference

│ │ │ +

Difference

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint diff s1 s2 := match s1, s2 with
│ │ │  | Leaf, _ => Leaf
│ │ │ @@ -431,15 +431,15 @@ │ │ │     else join (diff l1 l2') x1 (diff r1 r2')
│ │ │ end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Union

│ │ │ +

Union

│ │ │ │ │ │
│ │ │ │ │ │ In ocaml, heights of s1 and s2 are compared each time in order │ │ │ to recursively perform the split on the smaller set. │ │ │ Unfortunately, this leads to a non-structural algorithm. The │ │ │ following code is a simplification of the ocaml version: no │ │ │ @@ -462,15 +462,15 @@ │ │ │      join (union l1 l2') x1 (union r1 r2')
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Filter

│ │ │ +

Filter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint filter (f:elt->bool) s := match s with
│ │ │   | Leaf => Leaf
│ │ │ @@ -480,15 +480,15 @@ │ │ │     if f x then join l' x r' else concat l' r'
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Partition

│ │ │ +

Partition

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint partition (f:elt->bool)(s : t) : t*t :=
│ │ │   match s with
│ │ │ @@ -503,15 +503,15 @@ │ │ │
│ │ │ End Ops.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

MakeRaw

│ │ │ +

MakeRaw

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Functor of pure functions + a posteriori proofs of invariant │ │ │ preservation │ │ │
│ │ │ @@ -602,15 +602,15 @@ │ │ │
│ │ │ Local Open Scope pair_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Singleton set

│ │ │ +

Singleton set

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma singleton_spec : forall x y, InT y (singleton x) <-> X.eq y x.
│ │ │ │ │ │ @@ -618,15 +618,15 @@ │ │ │ #[global]
│ │ │ Instance singleton_ok x : Ok (singleton x).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Helper functions

│ │ │ +

Helper functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma create_spec :
│ │ │  forall l x r y, InT y (create l x r) <-> X.eq y x \/ InT y l \/ InT y r.
│ │ │ @@ -645,15 +645,15 @@ │ │ │ Instance bal_ok l x r `(Ok l, Ok r, lt_tree x l, gt_tree x r) :
│ │ │  Ok (bal l x r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma add_spec' : forall s x y,
│ │ │  InT y (add x s) <-> X.eq y x \/ InT y s.
│ │ │ @@ -669,15 +669,15 @@ │ │ │
│ │ │ Local Open Scope Int_scope.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Join

│ │ │ +

Join

│ │ │ │ │ │
│ │ │ │ │ │ Function/Functional Scheme can't deal with internal fix. │ │ │ Let's do its job by hand: │ │ │
│ │ │
│ │ │ @@ -708,15 +708,15 @@ │ │ │ Instance join_ok : forall l x r `(Ok l, Ok r, lt_tree x l, gt_tree x r),
│ │ │  Ok (join l x r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Extraction of minimum element

│ │ │ +

Extraction of minimum element

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_min_spec : forall l x r y h,
│ │ │  InT y (Node h l x r) <->
│ │ │ @@ -732,15 +732,15 @@ │ │ │  gt_tree (remove_min l x r)#2 (remove_min l x r)#1.
│ │ │ Local Hint Resolve remove_min_gt_tree : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Merging two trees

│ │ │ +

Merging two trees

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma merge_spec : forall s1 s2 y,
│ │ │  InT y (merge s1 s2) <-> InT y s1 \/ InT y s2.
│ │ │ @@ -751,15 +751,15 @@ │ │ │  `(forall y1 y2 : elt, InT y1 s1 -> InT y2 s2 -> X.lt y1 y2),
│ │ │  Ok (merge s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma remove_spec : forall s x y `{Ok s},
│ │ │  (InT y (remove x s) <-> InT y s /\ ~ X.eq y x).
│ │ │ @@ -768,15 +768,15 @@ │ │ │ #[global]
│ │ │ Instance remove_ok s x `(Ok s) : Ok (remove x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Concatenation

│ │ │ +

Concatenation

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma concat_spec : forall s1 s2 y,
│ │ │  InT y (concat s1 s2) <-> InT y s1 \/ InT y s2.
│ │ │ @@ -787,15 +787,15 @@ │ │ │  `(forall y1 y2 : elt, InT y1 s1 -> InT y2 s2 -> X.lt y1 y2),
│ │ │  Ok (concat s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Splitting

│ │ │ +

Splitting

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma split_spec1 : forall s x y `{Ok s},
│ │ │  (InT y (split x s)#l <-> InT y s /\ X.lt y x).
│ │ │ @@ -819,15 +819,15 @@ │ │ │ #[global]
│ │ │ Instance split_ok2 s x `(Ok s) : Ok (split x s)#r.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Intersection

│ │ │ +

Intersection

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac destruct_split := match goal with
│ │ │  | H : split ?x ?s = << ?u, ?v, ?w >> |- _ =>
│ │ │ @@ -849,15 +849,15 @@ │ │ │ #[global]
│ │ │ Instance inter_ok s1 s2 `(Ok s1, Ok s2) : Ok (inter s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Difference

│ │ │ +

Difference

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma diff_spec_ok : forall s1 s2 `{Ok s1, Ok s2},
│ │ │  Ok (diff s1 s2) /\ (forall y, InT y (diff s1 s2) <-> InT y s1 /\ ~InT y s2).
│ │ │ @@ -870,15 +870,15 @@ │ │ │ #[global]
│ │ │ Instance diff_ok s1 s2 `(Ok s1, Ok s2) : Ok (diff s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Union

│ │ │ +

Union

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma union_spec : forall s1 s2 y `{Ok s1, Ok s2},
│ │ │  (InT y (union s1 s2) <-> InT y s1 \/ InT y s2).
│ │ │ @@ -887,15 +887,15 @@ │ │ │ #[global]
│ │ │ Instance union_ok s1 s2 : forall `(Ok s1, Ok s2), Ok (union s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Filter

│ │ │ +

Filter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma filter_spec : forall s x f,
│ │ │  Proper (X.eq==>Logic.eq) f ->
│ │ │ @@ -909,15 +909,15 @@ │ │ │ #[global]
│ │ │ Instance filter_ok s f `(H : Ok s) : Ok (filter f s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Partition

│ │ │ +

Partition

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma partition_spec1' s f : (partition f s)#1 = filter f s.
│ │ │ │ │ │ @@ -946,15 +946,15 @@ │ │ │
│ │ │ End MakeRaw.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Encapsulation

│ │ │ +

Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Now, in order to really provide a functor implementing S, we │ │ │ need to encapsulate everything into a type of binary search trees. │ │ │ They also happen to be well-balanced, but this has no influence │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetDecide.html │ │ │ @@ -71,15 +71,15 @@ │ │ │ Module WDecideOn (E : DecidableType)(Import M : WSetsOn E).
│ │ │  Module F := MSetFacts.WFactsOn E M.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Overview

│ │ │ +

Overview

│ │ │ │ │ │ This functor defines the tactic fsetdec, which will │ │ │ solve any valid goal of the form │ │ │
│ │ │      forall s1 ... sn,
│ │ │      forall x1 ... xm,
│ │ │      P1 -> ... -> Pk -> P
│ │ │ @@ -177,41 +177,41 @@
│ │ │  
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Facts and Tactics for Propositional Logic

│ │ │ +

Facts and Tactics for Propositional Logic

│ │ │ │ │ │ These lemmas and tactics are in a module so that they do │ │ │ not affect the namespace if you import the enclosing │ │ │ module Decide. │ │ │
│ │ │
│ │ │   Module MSetLogicalFacts.
│ │ │     Export Decidable.
│ │ │     Export Setoid.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Lemmas and Tactics About Decidable Propositions

│ │ │ +

Lemmas and Tactics About Decidable Propositions

│ │ │ │ │ │
│ │ │ │ │ │ -

Propositional Equivalences Involving Negation

│ │ │ +

Propositional Equivalences Involving Negation

│ │ │ │ │ │ These are all written with the unfolded form of │ │ │ negation, since I am not sure if setoid rewriting will │ │ │ always perform conversion. │ │ │
│ │ │ │ │ │ -

Tactics for Negations

│ │ │ +

Tactics for Negations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │     Tactic Notation "fold" "any" "not" :=
│ │ │       repeat (
│ │ │ @@ -454,28 +454,28 @@ │ │ │   End MSetLogicalFacts.
│ │ │   Import MSetLogicalFacts.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Auxiliary Tactics

│ │ │ +

Auxiliary Tactics

│ │ │ │ │ │ Again, these lemmas and tactics are in a module so that │ │ │ they do not affect the namespace if you import the │ │ │ enclosing module Decide. │ │ │
│ │ │
│ │ │   Module MSetDecideAuxiliary.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic Tactics

│ │ │ +

Generic Tactics

│ │ │ │ │ │ We begin by defining a few generic, useful tactics. │ │ │
│ │ │ │ │ │ remove logical hypothesis inter-dependencies (fix 2136). │ │ │
│ │ │
│ │ │ @@ -584,15 +584,15 @@ │ │ │         | H: _ |- _ => progress (decompose record H); clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Discarding Irrelevant Hypotheses

│ │ │ +

Discarding Irrelevant Hypotheses

│ │ │ │ │ │ We will want to clear the context of any │ │ │ non-MSet-related hypotheses in order to increase the │ │ │ speed of the tactic. To do this, we will need to be │ │ │ able to decide which are relevant. We do this by making │ │ │ a simple inductive definition classifying the │ │ │ propositions of interest. │ │ │ @@ -664,15 +664,15 @@ │ │ │           else clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Turning Set Operators into Propositional Connectives

│ │ │ +

Turning Set Operators into Propositional Connectives

│ │ │ │ │ │ The lemmas from MSetFacts will be used to break down │ │ │ set operations into propositional formulas built over │ │ │ the predicates In and E.eq applied only to │ │ │ variables. We are going to use them with autorewrite. │ │ │ │ │ │
│ │ │ @@ -690,15 +690,15 @@ │ │ │
│ │ │     Global Hint Rewrite eq_refl_iff : set_eq_simpl.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Decidability of MSet Propositions

│ │ │ +

Decidability of MSet Propositions

│ │ │ │ │ │
│ │ │ │ │ │ In is decidable. │ │ │
│ │ │
│ │ │     Lemma dec_In : forall x s,
│ │ │ @@ -725,15 +725,15 @@ │ │ │     #[global]
│ │ │     Hint Resolve dec_In dec_eq : MSet_decidability.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Normalizing Propositions About Equality

│ │ │ +

Normalizing Propositions About Equality

│ │ │ │ │ │ We have to deal with the fact that E.eq may be │ │ │ convertible with Coq's equality. Thus, we will find the │ │ │ following tactics useful to replace one form with the │ │ │ other everywhere. │ │ │
│ │ │ │ │ │ @@ -808,15 +808,15 @@ │ │ │         end);
│ │ │       autorewrite with set_eq_simpl in *.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Considering Decidability of Base Propositions

│ │ │ +

Considering Decidability of Base Propositions

│ │ │ │ │ │ This tactic adds assertions about the decidability of │ │ │ E.eq and In to the context. This is necessary for │ │ │ the completeness of the fsetdec tactic. However, in │ │ │ order to minimize the cost of proof search, we should be │ │ │ careful to not add more than we need. Once negations │ │ │ have been pushed to the leaves of the propositions, we │ │ │ @@ -857,15 +857,15 @@ │ │ │         | _: ~ ?P, H : ?P \/ ~ ?P |- _ => clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Handling Empty, Subset, and Equal

│ │ │ +

Handling Empty, Subset, and Equal

│ │ │ │ │ │ This tactic instantiates universally quantified │ │ │ hypotheses (which arise from the unfolding of Empty, │ │ │ Subset, and Equal) for each of the set element │ │ │ expressions that is involved in some membership or │ │ │ equality fact. Then it throws away those hypotheses, │ │ │ which should no longer be needed. │ │ │ @@ -905,15 +905,15 @@ │ │ │           clear H
│ │ │         end).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The Core fsetdec Auxiliary Tactics

│ │ │ +

The Core fsetdec Auxiliary Tactics

│ │ │ │ │ │
│ │ │ │ │ │ Here is the crux of the proof search. Recursion through │ │ │ intuition! (This will terminate if I correctly │ │ │ understand the behavior of intuition.) │ │ │
│ │ │ @@ -947,15 +947,15 @@ │ │ │   End MSetDecideAuxiliary.
│ │ │   Import MSetDecideAuxiliary.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The fsetdec Tactic

│ │ │ +

The fsetdec Tactic

│ │ │ │ │ │ Here is the top-level tactic (the only one intended for │ │ │ clients of this library). It's specification is given at │ │ │ the top of the file. │ │ │
│ │ │
│ │ │   Ltac fsetdec :=
│ │ │ @@ -1061,15 +1061,15 @@ │ │ │       fsetdec_body
│ │ │     end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Examples

│ │ │ +

Examples

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Module MSetDecideTestCases.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetEqProperties.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This module proves many properties of finite sets that │ │ │ are consequences of the axiomatization in FsetInterface │ │ │ Contrary to the functor in FsetProperties it uses │ │ │ sets operations instead of predicates over sets, i.e. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This functor derives additional facts from MSetInterface.S. These │ │ │ facts are mainly the specifications of MSetInterface.S written using │ │ │ different styles: equivalence and boolean equalities. │ │ │ Moreover, we prove that E.Eq and Equal are setoid equalities. │ │ │ @@ -84,15 +84,15 @@ │ │ │ Notation eq_dec := E.eq_dec.
│ │ │ Definition eqb x y := if eq_dec x y then true else false.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using implications :

│ │ │ +

Specifications written using implications :

│ │ │ │ │ │ this used to be the default interface. │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section ImplSpec.
│ │ │ @@ -201,15 +201,15 @@ │ │ │     filter_1 filter_2 for_all_2 exists_2 elements_2
│ │ │     : set.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using equivalences :

│ │ │ +

Specifications written using equivalences :

│ │ │ │ │ │ this is now provided by the default interface. │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section IffSpec.
│ │ │ @@ -290,15 +290,15 @@ │ │ │   || rewrite union_iff || rewrite inter_iff || rewrite diff_iff
│ │ │   || rewrite empty_iff)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Specifications written using boolean predicates

│ │ │ +

Specifications written using boolean predicates

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Section BoolSpec.
│ │ │ Variable s s' s'' : t.
│ │ │ @@ -354,15 +354,15 @@ │ │ │
│ │ │ End BoolSpec.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Declarations of morphisms with respects to E.eq and Equal

│ │ │ +

Declarations of morphisms with respects to E.eq and Equal

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Instance In_m : Proper (E.eq==>Equal==>iff) In.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetGenTree.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

MSetGenTree : sets via generic trees

│ │ │ +

MSetGenTree : sets via generic trees

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This module factorizes common parts in implementations │ │ │ of finite sets as AVL trees and as Red-Black trees. The nodes │ │ │ of the trees defined here include an generic information │ │ │ @@ -103,15 +103,15 @@ │ │ │  Parameter t : Set.
│ │ │ End InfoTyp.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Ops : the pure functions

│ │ │ +

Ops : the pure functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type Ops (X:OrderedType)(Info:InfoTyp).
│ │ │ │ │ │ @@ -125,15 +125,15 @@ │ │ │ | Leaf : tree
│ │ │ | Node : Info.t -> tree -> X.t -> tree -> tree.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The empty set and emptyness test

│ │ │ +

The empty set and emptyness test

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition empty := Leaf.
│ │ │ │ │ │ @@ -144,15 +144,15 @@ │ │ │  | _ => false
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Membership test

│ │ │ +

Membership test

│ │ │ │ │ │
│ │ │ │ │ │ The mem function is deciding membership. It exploits the │ │ │ binary search tree invariant to achieve logarithmic complexity. │ │ │
│ │ │
│ │ │ @@ -169,15 +169,15 @@ │ │ │    end
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Minimal, maximal, arbitrary elements

│ │ │ +

Minimal, maximal, arbitrary elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint min_elt (t : tree) : option elt :=
│ │ │  match t with
│ │ │ @@ -197,15 +197,15 @@ │ │ │
│ │ │ Definition choose := min_elt.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Iteration on elements

│ │ │ +

Iteration on elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint fold {A: Type} (f: elt -> A -> A) (t: tree) (base: A) : A :=
│ │ │   match t with
│ │ │ @@ -254,15 +254,15 @@ │ │ │  | Node _ l _ r => S (min (mindepth l) (mindepth r))
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Testing universal or existential properties.

│ │ │ +

Testing universal or existential properties.

│ │ │ │ │ │
│ │ │ │ │ │ We do not use the standard boolean operators of Coq, │ │ │ but lazy ones. │ │ │
│ │ │
│ │ │ @@ -279,15 +279,15 @@ │ │ │   | Node _ l x r => f x ||| exists_ f l ||| exists_ f r
│ │ │ end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Comparison of trees

│ │ │ +

Comparison of trees

│ │ │ │ │ │
│ │ │ │ │ │ The algorithm here has been suggested by Xavier Leroy, │ │ │ and transformed into c.p.s. by Benjamin Grégoire. │ │ │ The original ocaml code (with non-structural recursive calls) │ │ │ has also been formalized (thanks to Function+measure), see │ │ │ @@ -386,15 +386,15 @@ │ │ │ Definition equal s1 s2 :=
│ │ │  match compare s1 s2 with Eq => true | _ => false end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Subset test

│ │ │ +

Subset test

│ │ │ │ │ │
│ │ │ │ │ │ In ocaml, recursive calls are made on "half-trees" such as │ │ │ (Node _ l1 x1 Leaf) and (Node _ Leaf x1 r1). Instead of these │ │ │ non-structural calls, we propose here two specialized functions │ │ │ for these situations. This version should be almost as efficient │ │ │ @@ -445,27 +445,27 @@ │ │ │
│ │ │ End Ops.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Props : correctness proofs of these generic operations

│ │ │ +

Props : correctness proofs of these generic operations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type Props (X:OrderedType)(Info:InfoTyp)(Import M:Ops X Info).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Occurrence in a tree

│ │ │ +

Occurrence in a tree

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Inductive InT (x : elt) : tree -> Prop :=
│ │ │   | IsRoot : forall c l r y, X.eq x y -> InT x (Node c l y r)
│ │ │ @@ -475,15 +475,15 @@ │ │ │
│ │ │ Definition In := InT.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Some shortcuts

│ │ │ +

Some shortcuts

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition Equal s s' := forall a : elt, InT a s <-> InT a s'.
│ │ │ Definition Subset s s' := forall a : elt, InT a s -> InT a s'.
│ │ │ @@ -491,15 +491,15 @@ │ │ │ Definition For_all (P : elt -> Prop) s := forall x, InT x s -> P x.
│ │ │ Definition Exists (P : elt -> Prop) s := exists x, InT x s /\ P x.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Binary search trees

│ │ │ +

Binary search trees

│ │ │ │ │ │
│ │ │ │ │ │ lt_tree x s: all elements in s are smaller than x │ │ │ (resp. greater for gt_tree) │ │ │
│ │ │
│ │ │ @@ -569,27 +569,27 @@ │ │ │   | Node _ l x r => isok l && isok r && ltb_tree x l && gtb_tree x r
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Known facts about ordered types

│ │ │ +

Known facts about ordered types

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Import MX := OrderedTypeFacts X.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Automation and dedicated tactics

│ │ │ +

Automation and dedicated tactics

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Scheme tree_ind := Induction for tree Sort Prop.
│ │ │ Scheme bst_ind := Induction for bst Sort Prop.
│ │ │ @@ -688,15 +688,15 @@ │ │ │ #[global]
│ │ │ Instance isok_Ok s : isok s = true -> Ok s | 10.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic results about In

│ │ │ +

Basic results about In

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma In_1 :
│ │ │  forall s x y, X.eq x y -> InT x s -> InT y s.
│ │ │ @@ -786,15 +786,15 @@ │ │ │    | _ => eauto with typeclass_instances
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Empty set

│ │ │ +

Empty set

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma empty_spec : Empty empty.
│ │ │ │ │ │ @@ -802,39 +802,39 @@ │ │ │ #[global]
│ │ │ Instance empty_ok : Ok empty.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Emptyness test

│ │ │ +

Emptyness test

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma is_empty_spec : forall s, is_empty s = true <-> Empty s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Membership

│ │ │ +

Membership

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma mem_spec : forall s x `{Ok s}, mem x s = true <-> InT x s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Minimal and maximal elements

│ │ │ +

Minimal and maximal elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma min_elt_spec1 s x : min_elt s = Some x -> InT x s.
│ │ │ │ │ │ @@ -866,15 +866,15 @@ │ │ │   choose s = Some x -> choose s' = Some x' ->
│ │ │   Equal s s' -> X.eq x x'.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Elements

│ │ │ +

Elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma elements_spec1' : forall s acc x,
│ │ │  InA X.eq x (elements_aux acc s) <-> InT x s \/ InA X.eq x acc.
│ │ │ @@ -942,15 +942,15 @@ │ │ │
│ │ │ Lemma elements_sort_ok s : sort X.lt (elements s) -> Ok s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

for_all and exists

│ │ │ +

for_all and exists

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma for_all_spec s f : Proper (X.eq==>eq) f ->
│ │ │  (for_all f s = true <-> For_all (fun x => f x = true) s).
│ │ │ @@ -959,15 +959,15 @@ │ │ │ Lemma exists_spec s f : Proper (X.eq==>eq) f ->
│ │ │  (exists_ f s = true <-> Exists (fun x => f x = true) s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma fold_spec' {A} (f : elt -> A -> A) (s : tree) (i : A) (acc : list elt) :
│ │ │  fold_left (flip f) (elements_aux acc s) i = fold_left (flip f) acc (fold f s i).
│ │ │ @@ -976,15 +976,15 @@ │ │ │ Lemma fold_spec (s:tree) {A} (i : A) (f : elt -> A -> A) :
│ │ │  fold f s i = fold_left (flip f) (elements s) i.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Subset

│ │ │ +

Subset

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma subsetl_spec : forall subset_l1 l1 x1 c1 s2
│ │ │  `{Ok (Node c1 l1 x1 Leaf), Ok s2},
│ │ │ @@ -1001,15 +1001,15 @@ │ │ │ Lemma subset_spec : forall s1 s2 `{Ok s1, Ok s2},
│ │ │  (subset s1 s2 = true <-> Subset s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Comparison

│ │ │ +

Comparison

│ │ │ │ │ │
│ │ │ │ │ │ Relations eq and lt over trees │ │ │
│ │ │
│ │ │ │ │ │ @@ -1103,28 +1103,28 @@ │ │ │ Lemma compare_spec : forall s1 s2 `{Ok s1, Ok s2},
│ │ │  CompSpec eq lt s1 s2 (compare s1 s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Equality test

│ │ │ +

Equality test

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma equal_spec : forall s1 s2 `{Ok s1, Ok s2},
│ │ │  equal s1 s2 = true <-> eq s1 s2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A few results about mindepth and maxdepth

│ │ │ +

A few results about mindepth and maxdepth

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma mindepth_maxdepth s : mindepth s <= maxdepth s.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetInterface.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite set library

│ │ │ +

Finite set library

│ │ │ │ │ │
│ │ │ │ │ │ Set interfaces, inspired by the one of Ocaml. When compared with │ │ │ Ocaml, the main differences are: │ │ │
    │ │ │
  • the lack of iter function, useless since Coq is purely functional │ │ │ @@ -314,15 +314,15 @@ │ │ │   Include HasWOps.
    │ │ │ End WOps.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Functorial signature for weak sets

│ │ │ +

Functorial signature for weak sets

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Weak sets are sets without ordering on base elements, only │ │ │ a decidable equality. │ │ │
│ │ │ @@ -428,15 +428,15 @@ │ │ │
│ │ │ End WSetsOn.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Static signature for weak sets

│ │ │ +

Static signature for weak sets

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to the functorial signature WSetsOn, except that the │ │ │ module E of base elements is incorporated in the signature. │ │ │
│ │ │ @@ -448,15 +448,15 @@ │ │ │   Include WSetsOn E.
│ │ │ End WSets.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functorial signature for sets on ordered elements

│ │ │ +

Functorial signature for sets on ordered elements

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Based on WSetsOn, plus ordering on sets and min_elt and max_elt │ │ │ and some stronger specifications for other functions. │ │ │
│ │ │ @@ -560,15 +560,15 @@ │ │ │
│ │ │ End SetsOn.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Static signature for sets on ordered elements

│ │ │ +

Static signature for sets on ordered elements

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Similar to the functorial signature SetsOn, except that the │ │ │ module E of base elements is incorporated in the signature. │ │ │
│ │ │ @@ -583,15 +583,15 @@ │ │ │
│ │ │ Module Type S := Sets.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Some subtyping tests

│ │ │ +

Some subtyping tests

│ │ │ │ │ │
│ │ │  WSetsOn ---> WSets
│ │ │   |           |
│ │ │   |           |
│ │ │   V           V
│ │ │  SetsOn  ---> Sets
│ │ │ @@ -600,15 +600,15 @@
│ │ │  Module Sfun_WSfun (E:OrderedType)(M : SetsOn E) <: WSetsOn E := M.
│ │ │  Module S_Sfun (M : Sets) <: SetsOn M.E := M.
│ │ │  Module WS_WSfun (M : WSets) <: WSetsOn M.E := M.
│ │ │  
│ │ │ │ │ │
│ │ │ │ │ │ -

Signatures for set representations with ill-formed values.

│ │ │ +

Signatures for set representations with ill-formed values.

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Motivation: │ │ │ │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent │ │ │ interface MSetInterface.S using strictly ordered list. │ │ │
│ │ │
│ │ │ @@ -62,15 +62,15 @@ │ │ │ Require Export MSetInterface OrdersFacts OrdersLists.
│ │ │ Set Implicit Arguments.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functions over lists

│ │ │ +

Functions over lists

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ First, we provide sets as lists which are not necessarily sorted. │ │ │ The specs are proved under the additional condition of being sorted. │ │ │ And the functions returning sets are proved to preserve this invariant. │ │ │ @@ -90,15 +90,15 @@ │ │ │
│ │ │   Definition is_empty (l : t) := if l then true else false.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The set operations.

│ │ │ +

The set operations.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Fixpoint mem x s :=
│ │ │     match s with
│ │ │ @@ -298,15 +298,15 @@ │ │ │
│ │ │   Include Ops X.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Proofs of set operation specifications.

│ │ │ +

Proofs of set operation specifications.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section ForNotations.
│ │ │ │ │ │ @@ -639,15 +639,15 @@ │ │ │
│ │ │ End MakeRaw.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Encapsulation

│ │ │ +

Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Now, in order to really provide a functor implementing S, we │ │ │ need to encapsulate everything into a type of strictly ordered lists. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetProperties.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This functor derives additional properties from MSetInterface.S. │ │ │ Contrary to the functor in MSetEqProperties it uses │ │ │ predicates over sets instead of sets operations, i.e. │ │ │ In x s instead of mem x s=true, │ │ │ @@ -338,30 +338,30 @@ │ │ │     remove_diff_singleton diff_inter_empty diff_inter_all Add_add Add_remove
│ │ │     Equal_remove add_add : set.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of elements

│ │ │ +

Properties of elements

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma elements_Empty : forall s, Empty s <-> elements s = nil.
│ │ │ │ │ │
│ │ │   Lemma elements_empty : elements empty = nil.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions between lists and sets

│ │ │ +

Conversions between lists and sets

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Definition of_list (l : list elt) := List.fold_right add empty l.
│ │ │ │ │ │ @@ -377,15 +377,15 @@ │ │ │
│ │ │   Lemma of_list_3 : forall s, of_list (to_list s) [=] s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold

│ │ │ +

Fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Section Fold.
│ │ │ │ │ │ @@ -405,15 +405,15 @@ │ │ │   Lemma fold_spec_right (s:t)(A:Type)(i:A)(f : elt -> A -> A) :
│ │ │     fold f s i = List.fold_right f i (rev (elements s)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Induction principles for fold (contributed by S. Lescuyer)

│ │ │ +

Induction principles for fold (contributed by S. Lescuyer)

│ │ │ │ │ │
│ │ │ │ │ │ In the following lemma, the step hypothesis is deliberately restricted │ │ │ to the precise set s we are considering. │ │ │
│ │ │
│ │ │ @@ -511,15 +511,15 @@ │ │ │
│ │ │   Lemma fold_identity : forall s, fold add s empty [=] s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Alternative (weaker) specifications for fold

│ │ │ +

Alternative (weaker) specifications for fold

│ │ │ │ │ │
│ │ │ │ │ │ When MSets was first designed, the order in which Ocaml's Set.fold │ │ │ takes the set elements was unspecified. This specification reflects │ │ │ this fact: │ │ │ │ │ │ @@ -583,15 +583,15 @@ │ │ │   Lemma fold_commutes : forall i s x,
│ │ │    eqA (fold f s (f x i)) (f x (fold f s i)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold is a morphism

│ │ │ +

Fold is a morphism

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma fold_init : forall i i' s, eqA i i' ->
│ │ │    eqA (fold f s i) (fold f s i').
│ │ │ @@ -600,15 +600,15 @@ │ │ │   Lemma fold_equal :
│ │ │    forall i s s', s[=]s' -> eqA (fold f s i) (fold f s' i).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Fold and other set operators

│ │ │ +

Fold and other set operators

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma fold_empty : forall i, fold f empty i = i.
│ │ │ │ │ │ @@ -652,31 +652,31 @@ │ │ │
│ │ │   End Fold.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal

│ │ │ +

Cardinal

│ │ │ │ │ │
│ │ │ │ │ │ -

Characterization of cardinal in terms of fold

│ │ │ +

Characterization of cardinal in terms of fold

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_fold : forall s, cardinal s = fold (fun _ => S) s 0.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Old specifications for cardinal.

│ │ │ +

Old specifications for cardinal.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_0 :
│ │ │      forall s, exists l : list elt,
│ │ │ @@ -691,15 +691,15 @@ │ │ │   Lemma cardinal_2 :
│ │ │     forall s s' x, ~ In x s -> Add x s s' -> cardinal s' = S (cardinal s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal and (non-)emptiness

│ │ │ +

Cardinal and (non-)emptiness

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma cardinal_Empty : forall s, Empty s <-> cardinal s = 0.
│ │ │ │ │ │ @@ -716,15 +716,15 @@ │ │ │   Lemma cardinal_inv_2b :
│ │ │    forall s, cardinal s <> 0 -> { x : elt | In x s }.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal is a morphism

│ │ │ +

Cardinal is a morphism

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma Equal_cardinal : forall s s', s[=]s' -> cardinal s = cardinal s'.
│ │ │ │ │ │ @@ -736,15 +736,15 @@ │ │ │   #[global]
│ │ │   Hint Resolve Add_add Add_remove Equal_remove cardinal_inv_1 Equal_cardinal : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Cardinal and set operators

│ │ │ +

Cardinal and set operators

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │   Lemma empty_cardinal : cardinal empty = 0.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetRBT.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

MSetRBT : Implementation of MSetInterface via Red-Black trees

│ │ │ +

MSetRBT : Implementation of MSetInterface via Red-Black trees

│ │ │ │ │ │
│ │ │ │ │ │ Initial author: Andrew W. Appel, 2011. │ │ │ Extra modifications by: Pierre Letouzey │ │ │ │ │ │
│ │ │ @@ -149,27 +149,27 @@ │ │ │  Definition t := color.
│ │ │ End Color.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Ops : the pure functions

│ │ │ +

Ops : the pure functions

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Ops (X:Orders.OrderedType) <: MSetInterface.Ops X.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic trees instantiated with color

│ │ │ +

Generic trees instantiated with color

│ │ │ │ │ │
│ │ │ │ │ │ We reuse a generic definition of trees where the information │ │ │ parameter is a color. Functions like mem or fold are also │ │ │ provided by this generic functor. │ │ │
│ │ │ @@ -183,27 +183,27 @@ │ │ │ Local Notation Rd := (Node Red).
│ │ │ Local Notation Bk := (Node Black).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic tree

│ │ │ +

Basic tree

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition singleton (k: elt) : tree := Bk Leaf k Leaf.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Changing root color

│ │ │ +

Changing root color

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition makeBlack t :=
│ │ │  match t with
│ │ │ @@ -218,15 +218,15 @@ │ │ │  | Node _ a x b => Rd a x b
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Balancing

│ │ │ +

Balancing

│ │ │ │ │ │
│ │ │ │ │ │ We adapt when one side is not a true red-black tree. │ │ │ Both sides have the same black depth. │ │ │
│ │ │
│ │ │ @@ -299,15 +299,15 @@ │ │ │    end
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint ins x s :=
│ │ │  match s with
│ │ │ @@ -331,15 +331,15 @@ │ │ │
│ │ │ Definition add x s := makeBlack (ins x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint append (l:tree) : tree -> tree :=
│ │ │  match l with
│ │ │ @@ -391,15 +391,15 @@ │ │ │
│ │ │ Definition remove x t := makeBlack (del x t).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Removing minimal element

│ │ │ +

Removing minimal element

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint delmin l x r : (elt * tree) :=
│ │ │  match l with
│ │ │ @@ -421,15 +421,15 @@ │ │ │    Some (k, makeBlack t)
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Tree-ification

│ │ │ +

Tree-ification

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We rebuild a tree of size if pred then n-1 else n as soon │ │ │ as the list l has enough elements │ │ │
│ │ │ @@ -484,15 +484,15 @@ │ │ │ Definition treeify (l:list elt) :=
│ │ │  fst (treeify_aux true (plength l) l).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Filtering

│ │ │ +

Filtering

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Fixpoint filter_aux (f: elt -> bool) s acc :=
│ │ │  match s with
│ │ │ @@ -522,15 +522,15 @@ │ │ │   let (ok,ko) := partition_aux f s nil nil in
│ │ │   (treeify ok, treeify ko).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Union, intersection, difference

│ │ │ +

Union, intersection, difference

│ │ │ │ │ │
│ │ │ │ │ │ union of the elements of l1 and l2 into a third acc list. │ │ │
│ │ │
│ │ │ │ │ │ @@ -682,15 +682,15 @@ │ │ │
│ │ │ End Ops.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

MakeRaw : the pure functions and their specifications

│ │ │ +

MakeRaw : the pure functions and their specifications

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type MakeRaw (X:Orders.OrderedType) <: MSetInterface.RawSets X.
│ │ │ Include Ops X.
│ │ │ @@ -720,15 +720,15 @@ │ │ │ Local Hint Resolve lt_tree_not_in lt_tree_trans gt_tree_not_in gt_tree_trans : core.
│ │ │ Local Hint Resolve elements_spec2 : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Singleton set

│ │ │ +

Singleton set

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma singleton_spec x y : InT y (singleton x) <-> X.eq y x.
│ │ │ │ │ │ @@ -736,15 +736,15 @@ │ │ │ #[global]
│ │ │ Instance singleton_ok x : Ok (singleton x).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

makeBlack, MakeRed

│ │ │ +

makeBlack, MakeRed

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma makeBlack_spec s x : InT x (makeBlack s) <-> InT x s.
│ │ │ │ │ │ @@ -759,15 +759,15 @@ │ │ │ #[global]
│ │ │ Instance makeRed_ok s `{Ok s} : Ok (makeRed s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic handling for red-matching and red-red-matching

│ │ │ +

Generic handling for red-matching and red-red-matching

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition isblack t :=
│ │ │  match t with Bk _ _ _ => True | _ => False end.
│ │ │ @@ -884,15 +884,15 @@ │ │ │   r
│ │ │   (rbalS l x r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Balancing for insertion

│ │ │ +

Balancing for insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma lbal_spec l x r y :
│ │ │    InT y (lbal l x r) <-> X.eq y x \/ InT y l \/ InT y r.
│ │ │ @@ -930,15 +930,15 @@ │ │ │ Ltac autorew := autorewrite with rb.
│ │ │ Tactic Notation "autorew" "in" ident(H) := autorewrite with rb in H.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma ins_spec : forall s x y,
│ │ │  InT y (ins x s) <-> X.eq y x \/ InT y s.
│ │ │ @@ -963,15 +963,15 @@ │ │ │ #[global]
│ │ │ Instance add_ok s x `{Ok s} : Ok (add x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Balancing for deletion

│ │ │ +

Balancing for deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma lbalS_spec l x r y :
│ │ │   InT y (lbalS l x r) <-> X.eq y x \/ InT y l \/ InT y r.
│ │ │ @@ -993,15 +993,15 @@ │ │ │
│ │ │ Global Hint Rewrite lbalS_spec rbalS_spec : rb.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Append for deletion

│ │ │ +

Append for deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac append_tac l r :=
│ │ │  induction l as [| lc ll _ lx lr IHlr];
│ │ │ @@ -1046,15 +1046,15 @@ │ │ │ Lemma append_ok : forall x l r `{Ok l, Ok r},
│ │ │  lt_tree x l -> gt_tree x r -> Ok (append l r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma del_spec : forall s x y `{Ok s},
│ │ │  InT y (del x s) <-> InT y s /\ ~X.eq y x.
│ │ │ @@ -1077,15 +1077,15 @@ │ │ │ #[global]
│ │ │ Instance remove_ok s x `{Ok s} : Ok (remove x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Removing the minimal element

│ │ │ +

Removing the minimal element

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma delmin_spec l y r c x s' `{O : Ok (Node c l y r)} :
│ │ │  delmin l y r = (x,s') ->
│ │ │ @@ -1106,15 +1106,15 @@ │ │ │  | None => True
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Treeify

│ │ │ +

Treeify

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Notation ifpred p n := (if p then pred n else n%nat).
│ │ │ │ │ │ @@ -1158,15 +1158,15 @@ │ │ │
│ │ │ Lemma treeify_ok l : sort X.lt l -> Ok (treeify l).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Filter

│ │ │ +

Filter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma filter_aux_elements s f acc :
│ │ │  filter_aux f s acc = List.filter f (elements s) ++ acc.
│ │ │ @@ -1184,15 +1184,15 @@ │ │ │ #[global]
│ │ │ Instance filter_ok s f `(Ok s) : Ok (filter f s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Partition

│ │ │ +

Partition

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma partition_aux_spec s f acc1 acc2 :
│ │ │  partition_aux f s acc1 acc2 =
│ │ │ @@ -1220,15 +1220,15 @@ │ │ │ #[global]
│ │ │ Instance partition_ok2 s f `(Ok s) : Ok (snd (partition f s)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

An invariant for binary list functions with accumulator.

│ │ │ +

An invariant for binary list functions with accumulator.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac inA :=
│ │ │  rewrite ?InA_app_iff, ?InA_cons, ?InA_nil, ?InA_rev in *; auto_tc.
│ │ │ @@ -1267,15 +1267,15 @@ │ │ │ Lemma INV_rev l1 l2 acc :
│ │ │  INV l1 l2 acc -> Sorted X.lt (rev_append l1 acc).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

union

│ │ │ +

union

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma union_list_ok l1 l2 acc :
│ │ │  INV l1 l2 acc -> sort X.lt (union_list l1 l2 acc).
│ │ │ @@ -1315,15 +1315,15 @@ │ │ │ Lemma union_spec : forall s1 s2 y `{Ok s1, Ok s2},
│ │ │  (InT y (union s1 s2) <-> InT y s1 \/ InT y s2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

inter

│ │ │ +

inter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma inter_list_ok l1 l2 acc :
│ │ │  INV l1 l2 acc -> sort X.lt (inter_list l1 l2 acc).
│ │ │ @@ -1356,15 +1356,15 @@ │ │ │ Lemma inter_spec s1 s2 y `{Ok s1, Ok s2} :
│ │ │  InT y (inter s1 s2) <-> InT y s1 /\ InT y s2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

difference

│ │ │ +

difference

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma diff_list_ok l1 l2 acc :
│ │ │  INV l1 l2 acc -> sort X.lt (diff_list l1 l2 acc).
│ │ │ @@ -1405,15 +1405,15 @@ │ │ │
│ │ │ End MakeRaw.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Balancing properties

│ │ │ +

Balancing properties

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We now prove that all operations preserve a red-black invariant, │ │ │ and that trees have hence a logarithmic depth. │ │ │ │ │ │ @@ -1428,15 +1428,15 @@ │ │ │ Local Notation Bk := (Node Black).
│ │ │ Import M.MX.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Red-Black invariants

│ │ │ +

Red-Black invariants

│ │ │ │ │ │
│ │ │ │ │ │ In a red-black tree : │ │ │
    │ │ │
  • a red node has no red children │ │ │ │ │ │ @@ -1499,15 +1499,15 @@ │ │ │
    │ │ │ Class Rbt (t:tree) := RBT : exists d, rbt d t.
    │ │ │ │ │ │
    │ │ │
│ │ │ │ │ │
│ │ │ -

Basic tactics and results about red-black

│ │ │ +

Basic tactics and results about red-black

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Scheme rbt_ind := Induction for rbt Sort Prop.
│ │ │ Local Hint Constructors rbt rrt arbt : core.
│ │ │ @@ -1534,15 +1534,15 @@ │ │ │
│ │ │ Local Hint Resolve arb_nrr_rb arb_nr_rb : core.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

A Red-Black tree has indeed a logarithmic depth

│ │ │ +

A Red-Black tree has indeed a logarithmic depth

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition redcarac s := rcase (fun _ _ _ => 1) (fun _ => 0) s.
│ │ │ │ │ │ @@ -1560,27 +1560,27 @@ │ │ │ Lemma maxdepth_lowerbound s : s<>Leaf ->
│ │ │  Nat.log2 (cardinal s) < maxdepth s.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Singleton

│ │ │ +

Singleton

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma singleton_rb x : Rbt (singleton x).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

makeBlack and makeRed

│ │ │ +

makeBlack and makeRed

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma makeBlack_rb n t : arbt n t -> Rbt (makeBlack t).
│ │ │ │ │ │ @@ -1588,15 +1588,15 @@ │ │ │ Lemma makeRed_rr t n :
│ │ │  rbt (S n) t -> notred t -> rrt n (makeRed t).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Balancing

│ │ │ +

Balancing

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma lbal_rb n l k r :
│ │ │  arbt n l -> rbt n r -> rbt (S n) (lbal l k r).
│ │ │ @@ -1625,15 +1625,15 @@ │ │ │ Lemma rbalS_arb n l x r :
│ │ │  rbt (S n) l -> arbt n r -> arbt (S n) (rbalS l x r).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Insertion

│ │ │ +

Insertion

│ │ │ │ │ │
│ │ │ │ │ │ The next lemmas combine simultaneous results about rbt and arbt. │ │ │ A first solution here: statement with if ... then ... else │ │ │
│ │ │
│ │ │ @@ -1658,15 +1658,15 @@ │ │ │ #[global]
│ │ │ Instance add_rb x s : Rbt s -> Rbt (add x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Deletion

│ │ │ +

Deletion

│ │ │ │ │ │
│ │ │ │ │ │ A second approach here: statement with ... /\ ... │ │ │
│ │ │
│ │ │ │ │ │ @@ -1689,15 +1689,15 @@ │ │ │ #[global]
│ │ │ Instance remove_rb s x : Rbt s -> Rbt (remove x s).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Treeify

│ │ │ +

Treeify

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition treeify_rb_invariant size depth (f:treeify_t) :=
│ │ │  forall acc,
│ │ │ @@ -1736,15 +1736,15 @@ │ │ │ #[global]
│ │ │ Instance treeify_rb l : Rbt (treeify l).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Filtering

│ │ │ +

Filtering

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Instance filter_rb f s : Rbt (filter f s).
│ │ │ @@ -1757,15 +1757,15 @@ │ │ │ #[global]
│ │ │ Instance partition_rb2 f s : Rbt (snd (partition f s)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Union, intersection, difference

│ │ │ +

Union, intersection, difference

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ #[global]
│ │ │ Instance fold_add_rb s1 s2 : Rbt s2 -> Rbt (fold add s1 s2).
│ │ │ @@ -1786,15 +1786,15 @@ │ │ │
│ │ │ End BalanceProps.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Final Encapsulation

│ │ │ +

Final Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Now, in order to really provide a functor implementing S, we │ │ │ need to encapsulate everything into a type of binary search trees. │ │ │ They also happen to be well-balanced, but this has no influence │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetToFiniteSet.html │ │ │ @@ -45,28 +45,28 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library : conversion to old Finite_sets

│ │ │ +

Finite sets library : conversion to old Finite_sets

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Ensembles Finite_sets.
│ │ │ Require Import MSetInterface MSetProperties OrdersEx.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Going from MSets with usual Leibniz equality

│ │ │ +

Going from MSets with usual Leibniz equality

│ │ │ │ │ │ to the good old Ensembles and Finite_sets theory. │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module WS_to_Finite_set (U:UsualDecidableType)(M: WSetsOn U).
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.MSets.MSetWeakList.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Finite sets library

│ │ │ +

Finite sets library

│ │ │ │ │ │
│ │ │ │ │ │ This file proposes an implementation of the non-dependent │ │ │ interface MSetWeakInterface.S using lists without redundancy. │ │ │
│ │ │
│ │ │ @@ -65,25 +65,25 @@ │ │ │
│ │ │ Local Ltac Tauto.intuition_solver ::= auto with typeclass_instances.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Functions over lists

│ │ │ +

Functions over lists

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ First, we provide sets as lists which are (morally) without redundancy. │ │ │ The specs are proved under the additional condition of no redundancy. │ │ │ And the functions returning sets are proved to preserve this invariant. │ │ │
│ │ │ │ │ │ -

The set operations.

│ │ │ +

The set operations.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Ops (X: DecidableType) <: WOps X.
│ │ │ │ │ │ @@ -190,15 +190,15 @@ │ │ │
│ │ │ End Ops.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Proofs of set operation specifications.

│ │ │ +

Proofs of set operation specifications.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module MakeRaw (X:DecidableType) <: WRawSets X.
│ │ │   Include Ops X.
│ │ │ @@ -422,15 +422,15 @@ │ │ │
│ │ │ End MakeRaw.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Encapsulation

│ │ │ +

Encapsulation

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Now, in order to really provide a functor implementing S, we │ │ │ need to encapsulate everything into a type of lists without redundancy. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.BinNat.html │ │ │ @@ -51,15 +51,15 @@ │ │ │  Equalities OrdersFacts GenericMinMax Bool NAxioms NMaxMin NProperties.
│ │ │ Require BinNatDef.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Binary natural numbers, operations and properties

│ │ │ +

Binary natural numbers, operations and properties

│ │ │ │ │ │
│ │ │ │ │ │ The type N and its constructors N0 and Npos are now │ │ │ defined in BinNums.v │ │ │
│ │ │ │ │ │ @@ -891,15 +891,15 @@ │ │ │
│ │ │ Lemma pred_div2_up p : Pos.pred_N (Pos.div2_up p) = div2 (Pos.pred_N p).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of iter

│ │ │ +

Properties of iter

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma iter_swap_gen A B (f:A -> B) (g:A -> A) (h:B -> B) :
│ │ │  (forall a, f (g a) = h (f a)) -> forall n a,
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.BinNatDef.html │ │ │ @@ -57,56 +57,56 @@ │ │ │ Local Notation "1" := (Npos 1).
│ │ │ Local Notation "2" := (Npos 2).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Binary natural numbers, definitions of operations

│ │ │ +

Binary natural numbers, definitions of operations

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module N.
│ │ │ │ │ │
│ │ │ Definition t := N.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Nicer name N.pos for constructor Npos

│ │ │ +

Nicer name N.pos for constructor Npos

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Notation pos := Npos.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Constants

│ │ │ +

Constants

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition zero := 0.
│ │ │ Definition one := 1.
│ │ │ Definition two := 2.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Operation x -> 2*x+1

│ │ │ +

Operation x -> 2*x+1

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition succ_double x :=
│ │ │   match x with
│ │ │ @@ -114,15 +114,15 @@ │ │ │   | pos p => pos p~1
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Operation x -> 2*x

│ │ │ +

Operation x -> 2*x

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition double n :=
│ │ │   match n with
│ │ │ @@ -130,15 +130,15 @@ │ │ │   | pos p => pos p~0
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Successor

│ │ │ +

Successor

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition succ n :=
│ │ │   match n with
│ │ │ @@ -146,15 +146,15 @@ │ │ │   | pos p => pos (Pos.succ p)
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Predecessor

│ │ │ +

Predecessor

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition pred n :=
│ │ │   match n with
│ │ │ @@ -162,15 +162,15 @@ │ │ │   | pos p => Pos.pred_N p
│ │ │   end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

The successor of a N can be seen as a positive

│ │ │ +

The successor of a N can be seen as a positive

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition succ_pos (n : N) : positive :=
│ │ │  match n with
│ │ │ @@ -178,15 +178,15 @@ │ │ │    | pos p => Pos.succ p
│ │ │  end.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Addition

│ │ │ +

Addition

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Definition add n m :=
│ │ │   match n, m with
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.NArith.Nnat.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import BinPos BinNat PeanoNat Pnat.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions from N to nat

│ │ │ +

Conversions from N to nat

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module N2Nat.
│ │ │ │ │ │ @@ -164,15 +164,15 @@ │ │ │  N2Nat.id
│ │ │  : Nnat.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversions from nat to N

│ │ │ +

Conversions from nat to N

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Nat2N.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.AltBinNotations.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Alternative Binary Number Notations

│ │ │ +

Alternative Binary Number Notations

│ │ │ │ │ │
│ │ │ │ │ │ Faster but less safe parsers and printers of positive, N, Z. │ │ │
│ │ │ │ │ │ By default, literals in types positive, N, Z are parsed and │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.BinNums.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Binary Numerical Datatypes

│ │ │ +

Binary Numerical Datatypes

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Set Implicit Arguments.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.CyclicAxioms.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Signature and specification of bounded integers

│ │ │ +

Signature and specification of bounded integers

│ │ │ │ │ │
│ │ │ │ │ │ This file specifies d-bit integers as Z/nZ with n=2^d │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Abstract.NZCyclic.html │ │ │ @@ -53,15 +53,15 @@ │ │ │ Require Import CyclicAxioms.
│ │ │ Require Import Lia.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

From CyclicType to NZAxiomsSig

│ │ │ +

From CyclicType to NZAxiomsSig

│ │ │ │ │ │
│ │ │ │ │ │ A Z/nZ representation given by a module type CyclicType │ │ │ implements NZAxiomsSig, e.g. the common properties between │ │ │ N and Z with no ordering. Notice that the n in Z/nZ is │ │ │ a power of 2. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Cyclic63.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Uint63 numbers defines indeed a cyclic structure : Z/(2^63)Z

│ │ │ +

Uint63 numbers defines indeed a cyclic structure : Z/(2^63)Z

│ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Author: Arnaud Spiwack (+ Pierre Letouzey) │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Cyclic.Int63.Ring63.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Uint63 numbers defines Z/(2^63)Z, and can hence be equipped

│ │ │ +

Uint63 numbers defines Z/(2^63)Z, and can hence be equipped

│ │ │ │ │ │ with a ring structure and a ring tactic │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Cyclic63 CyclicAxioms.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalFacts : some facts about Decimal numbers

│ │ │ +

DecimalFacts : some facts about Decimal numbers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Decimal Arith ZArith.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalN.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalN

│ │ │ +

DecimalN

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and N │ │ │ are bijections │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalNat.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalNat

│ │ │ +

DecimalNat

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and nat │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalPos.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalPos

│ │ │ +

DecimalPos

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and positive │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalQ.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalQ

│ │ │ +

DecimalQ

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and Q │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalR.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalR

│ │ │ +

DecimalR

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and R │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalString.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import Decimal Ascii String.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversion between decimal numbers and Coq strings

│ │ │ +

Conversion between decimal numbers and Coq strings

│ │ │ │ │ │
│ │ │ │ │ │ Pretty straightforward, which is precisely the point of the │ │ │ Decimal.int datatype. The only catch is Decimal.Nil : we could │ │ │ choose to convert it as "" or as "0". In the first case, it is │ │ │ awkward to consider "" (or "-") as a number, while in the second case │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.DecimalZ.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

DecimalZ

│ │ │ +

DecimalZ

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between decimal numbers and Z │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalFacts.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalFacts : some facts about Hexadecimal numbers

│ │ │ +

HexadecimalFacts : some facts about Hexadecimal numbers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Require Import Hexadecimal Arith ZArith.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalN.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalN

│ │ │ +

HexadecimalN

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and N │ │ │ are bijections │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalNat.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalNat

│ │ │ +

HexadecimalNat

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and nat │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalPos.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalPos

│ │ │ +

HexadecimalPos

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and positive │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalQ.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalQ

│ │ │ +

HexadecimalQ

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and Q │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalR.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalR

│ │ │ +

HexadecimalR

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and R │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalString.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import Hexadecimal Ascii String.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Conversion between hexadecimal numbers and Coq strings

│ │ │ +

Conversion between hexadecimal numbers and Coq strings

│ │ │ │ │ │
│ │ │ │ │ │ Pretty straightforward, which is precisely the point of the │ │ │ Hexadecimal.int datatype. The only catch is Hexadecimal.Nil : we could │ │ │ choose to convert it as "" or as "0". In the first case, it is │ │ │ awkward to consider "" (or "-") as a number, while in the second case │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.HexadecimalZ.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

HexadecimalZ

│ │ │ +

HexadecimalZ

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ Proofs that conversions between hexadecimal numbers and Z │ │ │ are bijections. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZBits.html │ │ │ @@ -469,15 +469,15 @@ │ │ │  ((exists n, forall m, 0<=m -> f m = n.[m]) <->
│ │ │   (exists k, forall m, k<=m -> f m = f k)).
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of shifts

│ │ │ +

Properties of shifts

│ │ │ │ │ │
│ │ │ │ │ │ First, a unified specification for shiftl : the shiftl_spec │ │ │ below (combined with testbit_neg_r) is equivalent to │ │ │ shiftl_spec_low and shiftl_spec_high. │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivEucl.html │ │ │ @@ -51,15 +51,15 @@ │ │ │ From Coq.Numbers.Integer.Abstract Require Import ZAxioms ZMulOrder ZSgnAbs.
│ │ │ From Coq.Numbers.NatInt Require Import NZDiv.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Euclidean Division for integers, Euclid convention

│ │ │ +

Euclidean Division for integers, Euclid convention

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We use here the "usual" formulation of the Euclid Theorem │ │ │ forall a b, b<>0 -> exists r q, a = b*q+r /\ 0 <= r < |b| │ │ │ │ │ │ @@ -242,15 +242,15 @@ │ │ │
│ │ │ Theorem mod_small: forall a b, 0<=a<b -> a mod b == a.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic values of divisions and modulo.

│ │ │ +

Basic values of divisions and modulo.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma div_0_l: forall a, a~=0 -> 0/a == 0.
│ │ │ │ │ │ @@ -278,15 +278,15 @@ │ │ │
│ │ │ Theorem div_unique_exact a b q: b~=0 -> a == b*q -> q == a/b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order results about mod and div

│ │ │ +

Order results about mod and div

│ │ │ │ │ │
│ │ │ │ │ │ A modulo cannot grow beyond its starting point. │ │ │
│ │ │
│ │ │ │ │ │ @@ -407,15 +407,15 @@ │ │ │
│ │ │ Lemma div_le_compat_l: forall p q r, 0<=p -> 0<q<=r -> p/r <= p/q.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Relations between usual operations and mod and div

│ │ │ +

Relations between usual operations and mod and div

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma mod_add : forall a b c, c~=0 ->
│ │ │  (a + b * c) mod c == a mod c.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivFloor.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZAxioms ZMulOrder ZSgnAbs NZDiv.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Euclidean Division for integers (Floor convention)

│ │ │ +

Euclidean Division for integers (Floor convention)

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We use here the convention known as Floor, or Round-Toward-Bottom, │ │ │ where a/b is the closest integer below the exact fraction. │ │ │ It can be summarized by: │ │ │ @@ -280,15 +280,15 @@ │ │ │
│ │ │ Theorem mod_small: forall a b, 0<=a<b -> a mod b == a.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic values of divisions and modulo.

│ │ │ +

Basic values of divisions and modulo.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma div_0_l: forall a, a~=0 -> 0/a == 0.
│ │ │ │ │ │ @@ -316,15 +316,15 @@ │ │ │
│ │ │ Theorem div_unique_exact a b q: b~=0 -> a == b*q -> q == a/b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order results about mod and div

│ │ │ +

Order results about mod and div

│ │ │ │ │ │
│ │ │ │ │ │ A modulo cannot grow beyond its starting point. │ │ │
│ │ │
│ │ │ │ │ │ @@ -453,15 +453,15 @@ │ │ │
│ │ │ Lemma div_le_compat_l: forall p q r, 0<=p -> 0<q<=r -> p/r <= p/q.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Relations between usual operations and mod and div

│ │ │ +

Relations between usual operations and mod and div

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma mod_add : forall a b c, c~=0 ->
│ │ │  (a + b * c) mod c == a mod c.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZDivTrunc.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZAxioms ZMulOrder ZSgnAbs NZDiv.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Euclidean Division for integers (Trunc convention)

│ │ │ +

Euclidean Division for integers (Trunc convention)

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ We use here the convention known as Trunc, or Round-Toward-Zero, │ │ │ where a/b is the integer with the largest absolute value to │ │ │ be between zero and the exact fraction. It can be summarized by: │ │ │ @@ -205,15 +205,15 @@ │ │ │
│ │ │ Theorem rem_small: forall a b, 0<=a<b -> a rem b == a.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Basic values of divisions and modulo.

│ │ │ +

Basic values of divisions and modulo.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Lemma quot_0_l: forall a, a~=0 -> 0÷a == 0.
│ │ │ │ │ │ @@ -303,15 +303,15 @@ │ │ │ Lemma rem_bound_abs :
│ │ │  forall a b, b~=0 -> abs (a rem b) < abs b.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Order results about rem and quot

│ │ │ +

Order results about rem and quot

│ │ │ │ │ │
│ │ │ │ │ │ A modulo cannot grow beyond its starting point. │ │ │
│ │ │
│ │ │ │ │ │ @@ -438,15 +438,15 @@ │ │ │
│ │ │ Lemma quot_le_compat_l: forall p q r, 0<=p -> 0<q<=r -> p÷r <= p÷q.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Relations between usual operations and rem and quot

│ │ │ +

Relations between usual operations and rem and quot

│ │ │ │ │ │
│ │ │ │ │ │ Unlike with other division conventions, some results here aren't │ │ │ always valid, and need to be restricted. For instance │ │ │ (a+b*c) rem c <> a rem c for a=9,b=-5,c=2 │ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZLcm.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZAxioms ZMulOrder ZSgnAbs ZGcd ZDivTrunc ZDivFloor.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Least Common Multiple

│ │ │ +

Least Common Multiple

│ │ │ │ │ │
│ │ │ │ │ │ Unlike other functions around, we will define lcm below instead of │ │ │ axiomatizing it. Indeed, there is no "prior art" about lcm in the │ │ │ standard library to be compliant with, and the generic definition │ │ │ of lcm via gcd is quite reasonable. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Abstract.ZMaxMin.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │ Require Import ZAxioms ZMulOrder GenericMinMax.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of minimum and maximum specific to integer numbers

│ │ │ +

Properties of minimum and maximum specific to integer numbers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Module Type ZMaxMinProp (Import Z : ZAxiomsMiniSig').
│ │ │ Include ZMulOrderProp Z.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Integer.Binary.ZBinary.html │ │ │ @@ -67,15 +67,15 @@ │ │ │  <: UsualDecidableTypeFull
│ │ │  := BinInt.Z.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

An order tactic for integers

│ │ │ +

An order tactic for integers

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Ltac z_order := Z.order.
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NaryFunctions.html │ │ │ @@ -53,15 +53,15 @@ │ │ │
│ │ │ Require Import List.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Generic dependently-typed operators about n-ary functions

│ │ │ +

Generic dependently-typed operators about n-ary functions

│ │ │ │ │ │
│ │ │ │ │ │ The type of n-ary function: nfun A n B is │ │ │ A -> ... -> A -> B with n occurrences of A in this type. │ │ │
│ │ │
│ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAdd.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Some properties of the addition for modules implementing NZBasicFunsSig'

│ │ │ +

Some properties of the addition for modules implementing NZBasicFunsSig'

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This file defines the NZAddProp functor type. This functor type is meant │ │ │ to be Included in a module implementing NZBasicFunsSig'. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAddOrder.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Properties of orders and addition for modules implementing NZOrdAxiomsSig'

│ │ │ +

Properties of orders and addition for modules implementing NZOrdAxiomsSig'

│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ This file defines the NZAddOrderProp functor type, meant to be Included │ │ │ in a module implementing NZOrdAxiomsSig' (see Coq.Numbers.NatInt.NZAxioms). │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZAxioms.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ Initial Author : Evgeny Makarov, INRIA, 2007 │ │ │
│ │ │ │ │ │ -

Axioms for a domain with zero, succ, pred.

│ │ │ +

Axioms for a domain with zero, succ, pred.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ From Coq.Structures Require Export Equalities Orders.
│ │ │ │ │ │ @@ -141,15 +141,15 @@ │ │ │      forall x y : t, CompareSpec (eq x y) (lt x y) (lt y x) (compare x y).
│ │ │  End │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ -

Axiomatization of a domain with zero, succ, pred and a bi-directional induction principle.

│ │ │ +

Axiomatization of a domain with zero, succ, pred and a bi-directional induction principle.

│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │ @@ -223,15 +223,15 @@ │ │ │     A 0 -> (forall n, A n <-> A (S n)) -> forall n, A n.
│ │ │ End IsNZDomain.
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │
│ │ │ -

Axiomatization of some more constants

│ │ │ +

Axiomatization of some more constants

│ │ │ │ │ │
│ │ │ │ │ │ Simply denoting "1" for (S 0) and so on works ok when implementing │ │ │ by nat, but leaves some (N.succ N0) when implementing by N. │ │ │ │ │ │
│ │ │ @@ -280,15 +280,15 @@ │ │ │
  • three constants 0, 1 = S 0, 2 = S 1 │ │ │ │ │ │
  • │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ -

    Axiomatization of basic operations : + - *

    │ │ │ +

    Axiomatization of basic operations : + - *

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type AddSubMul (Import T:Typ).
    │ │ │  Parameters Inline add sub mul : t -> t -> t.
    │ │ │ @@ -336,15 +336,15 @@ │ │ │ Module Type NZAxiomsSig := NZBasicFunsSig.
    │ │ │ Module Type NZAxiomsSig' := NZBasicFunsSig'.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Axiomatization of order

    │ │ │ +

    Axiomatization of order

    │ │ │ │ │ │
    │ │ │ │ │ │ The module type HasLt (resp. HasLe) is just a type equipped with │ │ │ a relation lt (resp. le) in Prop. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZBase.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic lemmas about modules implementing NZDomainSig'

    │ │ │ +

    Basic lemmas about modules implementing NZDomainSig'

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ This file defines the functor type NZBaseProp which adds the following │ │ │ lemmas: │ │ │
      │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZDiv.html │ │ │ @@ -186,15 +186,15 @@ │ │ │
      │ │ │ Theorem mod_small: forall a b, 0<=a<b -> a mod b == a.
      │ │ │ │ │ │
      │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic values of divisions and modulo.

    │ │ │ +

    Basic values of divisions and modulo.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma div_0_l: forall a, 0<a -> 0/a == 0.
    │ │ │ │ │ │ @@ -219,15 +219,15 @@ │ │ │
    │ │ │ Lemma mod_mul : forall a b, 0<=a -> 0<b -> (a*b) mod b == 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order results about mod and div

    │ │ │ +

    Order results about mod and div

    │ │ │ │ │ │
    │ │ │ │ │ │ A modulo cannot grow beyond its starting point. │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -331,15 +331,15 @@ │ │ │ Lemma div_le_compat_l: forall p q r, 0<=p -> 0<q<=r ->
    │ │ │     p/r <= p/q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relations between usual operations and mod and div

    │ │ │ +

    Relations between usual operations and mod and div

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mod_add : forall a b c, 0<=a -> 0<=a+b*c -> 0<c ->
    │ │ │  (a + b * c) mod c == a mod c.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZDomain.html │ │ │ @@ -74,15 +74,15 @@ │ │ │ Module NZDomainProp (Import NZ:NZDomainSig').
    │ │ │ Include NZBaseProp NZ.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relationship between points thanks to succ and pred.

    │ │ │ +

    Relationship between points thanks to succ and pred.

    │ │ │ │ │ │
    │ │ │ │ │ │ For any two points, one is an iterated successor of the other. │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -125,15 +125,15 @@ │ │ │ Lemma itersucc0_or_iterpred0 :
    │ │ │  forall n, exists p:nat, n == (S^p) 0 \/ n == (P^p) 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Study of initial point w.r.t. succ (if any).

    │ │ │ +

    Study of initial point w.r.t. succ (if any).

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition initial n := forall m, n ~= S m.
    │ │ │ │ │ │ @@ -249,15 +249,15 @@ │ │ │
    │ │ │ │ │ │ IIa) if exists k<>O, 0 == S^k 0, then we have a cyclic structure Z/nZ │ │ │ IIb) otherwise, we have Z │ │ │ │ │ │
    │ │ │ │ │ │ -

    An alternative induction principle using S and P.

    │ │ │ +

    An alternative induction principle using S and P.

    │ │ │ │ │ │
    │ │ │ │ │ │ It is weaker than bi_induction. For instance it cannot prove that │ │ │ we can go from one point by many S or many P, but only by many │ │ │ S mixed with many P. Think of a model with two copies of N: │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZLog.html │ │ │ @@ -414,15 +414,15 @@ │ │ │  (Import E : NZPowProp A B D)
    │ │ │  (Import F : NZLog2Prop A B C D E).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    log2_up : a binary logarithm that rounds up instead of down

    │ │ │ +

    log2_up : a binary logarithm that rounds up instead of down

    │ │ │ │ │ │
    │ │ │ │ │ │ For once, we define instead of axiomatizing, thanks to log2 │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZMul.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some properties of the multiplication for modules implementing NZBasicFunsSig'

    │ │ │ +

    Some properties of the multiplication for modules implementing NZBasicFunsSig'

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ This file defines the NZMulProp functor type on top of NZAddProp. This │ │ │ functor type is meant to be Included in a module implementing NZBasicFunsSig'. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZMulOrder.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of orders and multiplication for modules implementing NZOrdAxiomsSig'

    │ │ │ +

    Properties of orders and multiplication for modules implementing NZOrdAxiomsSig'

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ This file defines the NZMulOrderProp functor type, meant to be Included │ │ │ in a module implementing NZOrdAxiomsSig' (see Coq.Numbers.NatInt.NZAxioms). │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZOrder.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Lemmas about orders for modules implementing NZOrdSig'

    │ │ │ +

    Lemmas about orders for modules implementing NZOrdSig'

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ This file defines the NZOrderProp functor type, meant to be Included in │ │ │ a module implementing the NZOrdSig' module type. │ │ │ │ │ │ @@ -101,19 +101,19 @@ │ │ │ Module Type NZOrderProp
    │ │ │  (Import NZ : NZOrdSig')(Import NZBase : NZBaseProp NZ).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic facts about le, lt, eq and succ

    │ │ │ +

    Basic facts about le, lt, eq and succ

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Direct consequences of the specifications of lt and le

    │ │ │ +

    Direct consequences of the specifications of lt and le

    │ │ │ │ │ │
    │ │ │
    │ │ │ #[global]
    │ │ │ Instance le_wd : Proper (eq==>eq==>iff) le.
    │ │ │ │ │ │
    │ │ │ @@ -163,15 +163,15 @@ │ │ │
    │ │ │ Notation lt_eq_gt_cases := lt_trichotomy (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Asymmetry and transitivity.

    │ │ │ +

    Asymmetry and transitivity.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem lt_asymm : forall n m, n < m -> ~ m < n.
    │ │ │ │ │ │ @@ -184,15 +184,15 @@ │ │ │
    │ │ │ Theorem le_trans : forall n m p, n <= m -> m <= p -> n <= p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some type classes about order

    │ │ │ +

    Some type classes about order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ #[global]
    │ │ │ Instance lt_strorder : StrictOrder lt.
    │ │ │ @@ -205,15 +205,15 @@ │ │ │ #[global]
    │ │ │ Instance le_partialorder : PartialOrder _ le.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Making the generic order tactic

    │ │ │ +

    Making the generic order tactic

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition lt_compat := lt_wd.
    │ │ │ Definition lt_total := lt_trichotomy.
    │ │ │ @@ -232,15 +232,15 @@ │ │ │ End Private_OrderTac.
    │ │ │ Ltac order := Private_OrderTac.Tac.order.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some direct consequences of order

    │ │ │ +

    Some direct consequences of order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem lt_neq : forall n m, n < m -> n ~= m.
    │ │ │ │ │ │ @@ -277,15 +277,15 @@ │ │ │
    │ │ │ Theorem le_antisymm : forall n m, n <= m -> m <= n -> n == m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    More properties of < and <= with respect to S and 0

    │ │ │ +

    More properties of < and <= with respect to S and 0

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem le_succ_r : forall n m, n <= S m <-> n <= m \/ n == S m.
    │ │ │ │ │ │ @@ -333,15 +333,15 @@ │ │ │
    │ │ │ Theorem lt_1_l : forall n m, 0 < n -> n < m -> 1 < m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    More Trichotomy, decidability and double negation elimination

    │ │ │ +

    More Trichotomy, decidability and double negation elimination

    │ │ │ │ │ │
    │ │ │ │ │ │ The following theorem is cleary redundant, but helps not to │ │ │ remember whether one has to say le_gt_cases or lt_ge_cases. │ │ │
    │ │ │
    │ │ │ @@ -444,15 +444,15 @@ │ │ │
    │ │ │ Lemma lt_succ_pred : forall z n, z < n -> S (P n) == n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order-based induction principles

    │ │ │ +

    Order-based induction principles

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section WF.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.NatInt.NZSqrt.html │ │ │ @@ -344,15 +344,15 @@ │ │ │  (Import C : NZMulOrderProp A)
    │ │ │  (Import D : NZSqrtProp A B C).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    sqrt_up : a square root that rounds up instead of down

    │ │ │ +

    sqrt_up : a square root that rounds up instead of down

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Notation "a ²" := (a*a) (at level 5, no associativity, format "a ²").
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NDiv.html │ │ │ @@ -154,15 +154,15 @@ │ │ │
    │ │ │ Theorem mod_small: forall a b, a<b -> a mod b == a.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic values of divisions and modulo.

    │ │ │ +

    Basic values of divisions and modulo.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma div_0_l: forall a, a~=0 -> 0/a == 0.
    │ │ │ │ │ │ @@ -187,15 +187,15 @@ │ │ │
    │ │ │ Lemma mod_mul : forall a b, b~=0 -> (a*b) mod b == 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order results about mod and div

    │ │ │ +

    Order results about mod and div

    │ │ │ │ │ │
    │ │ │ │ │ │ A modulo cannot grow beyond its starting point. │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -285,15 +285,15 @@ │ │ │
    │ │ │ Lemma div_le_compat_l: forall p q r, 0<q<=r -> p/r <= p/q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relations between usual operations and mod and div

    │ │ │ +

    Relations between usual operations and mod and div

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mod_add : forall a b c, c~=0 ->
    │ │ │  (a + b * c) mod c == a mod c.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NLcm.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
    │ │ │ Require Import NAxioms NSub NDiv NGcd.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Least Common Multiple

    │ │ │ +

    Least Common Multiple

    │ │ │ │ │ │
    │ │ │ │ │ │ Unlike other functions around, we will define lcm below instead of │ │ │ axiomatizing it. Indeed, there is no "prior art" about lcm in the │ │ │ standard library to be compliant with, and the generic definition │ │ │ of lcm via gcd is quite reasonable. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Abstract.NMaxMin.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
    │ │ │ Require Import NAxioms NSub GenericMinMax.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of minimum and maximum specific to natural numbers

    │ │ │ +

    Properties of minimum and maximum specific to natural numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type NMaxMinProp (Import N : NAxiomsMiniSig').
    │ │ │ Include NSubProp N.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Numbers.Natural.Binary.NBinary.html │ │ │ @@ -55,15 +55,15 @@ │ │ │
    │ │ │ Local Open Scope N_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    BinNat.N already implements NAxiomSig

    │ │ │ +

    BinNat.N already implements NAxiomSig

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module N <: NAxiomsSig := N.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.BinPos.html │ │ │ @@ -53,15 +53,15 @@ │ │ │
    │ │ │ Require Export BinPosDef.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Binary positive numbers, operations and properties

    │ │ │ +

    Binary positive numbers, operations and properties

    │ │ │ │ │ │
    │ │ │ │ │ │ Initial development by Pierre Crégut, CNET, Lannion, France │ │ │
    │ │ │ │ │ │ The type positive and its constructors xI and xO and xH │ │ │ @@ -87,15 +87,15 @@ │ │ │  <: UsualDecidableTypeFull
    │ │ │  <: TotalOrder.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definitions of operations, now in a separate file

    │ │ │ +

    Definitions of operations, now in a separate file

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Include BinPosDef.Pos.
    │ │ │ │ │ │ @@ -109,15 +109,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Logical Predicates

    │ │ │ +

    Logical Predicates

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition eq := @Logic.eq positive.
    │ │ │ Definition eq_equiv := @eq_equivalence positive.
    │ │ │ @@ -141,50 +141,50 @@ │ │ │ Notation "x < y < z" := (x < y /\ y < z) : positive_scope.
    │ │ │ Notation "x < y <= z" := (x < y /\ y <= z) : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of operations over positive numbers

    │ │ │ +

    Properties of operations over positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Decidability of equality on binary positive numbers

    │ │ │ +

    Decidability of equality on binary positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma eq_dec : forall x y:positive, {x = y} + {x <> y}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of successor on binary positive numbers

    │ │ │ +

    Properties of successor on binary positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Specification of xI in term of succ and xO

    │ │ │ +

    Specification of xI in term of succ and xO

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma xI_succ_xO p : p~1 = succ p~0.
    │ │ │ │ │ │
    │ │ │ Lemma succ_discr p : p <> succ p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Successor and double

    │ │ │ +

    Successor and double

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pred_double_spec p : pred_double p = pred (p~0).
    │ │ │ │ │ │ @@ -200,15 +200,15 @@ │ │ │
    │ │ │ Lemma pred_double_xO_discr p : pred_double p <> p~0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Successor and predecessor

    │ │ │ +

    Successor and predecessor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma succ_not_1 p : succ p <> 1.
    │ │ │ │ │ │ @@ -221,107 +221,107 @@ │ │ │
    │ │ │ Lemma succ_pred p : p <> 1 -> succ (pred p) = p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injectivity of successor

    │ │ │ +

    Injectivity of successor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma succ_inj p q : succ p = succ q -> p = q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Predecessor to N

    │ │ │ +

    Predecessor to N

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pred_N_succ p : pred_N (succ p) = Npos p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of addition on binary positive numbers

    │ │ │ +

    Properties of addition on binary positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Specification of succ in term of add

    │ │ │ +

    Specification of succ in term of add

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_1_r p : p + 1 = succ p.
    │ │ │ │ │ │
    │ │ │ Lemma add_1_l p : 1 + p = succ p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of add_carry

    │ │ │ +

    Specification of add_carry

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem add_carry_spec p q : add_carry p q = succ (p + q).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Commutativity

    │ │ │ +

    Commutativity

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem add_comm p q : p + q = q + p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Permutation of add and succ

    │ │ │ +

    Permutation of add and succ

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem add_succ_r p q : p + succ q = succ (p + q).
    │ │ │ │ │ │
    │ │ │ Theorem add_succ_l p q : succ p + q = succ (p + q).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    No neutral elements for addition

    │ │ │ +

    No neutral elements for addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma add_no_neutral p q : q + p <> p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Simplification

    │ │ │ +

    Simplification

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_carry_add p q r s :
    │ │ │   add_carry p r = add_carry q s -> p + r = q + s.
    │ │ │ @@ -346,27 +346,27 @@ │ │ │ Lemma add_carry_reg_l p q r :
    │ │ │   add_carry p q = add_carry p r -> q = r.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition is associative

    │ │ │ +

    Addition is associative

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem add_assoc p q r : p + (q + r) = p + q + r.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Commutation of addition and double

    │ │ │ +

    Commutation of addition and double

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_xO p q : (p + q)~0 = p~0 + q~0.
    │ │ │ │ │ │ @@ -378,27 +378,27 @@ │ │ │ Lemma add_xO_pred_double p q :
    │ │ │   pred_double (p + q) = p~0 + pred_double q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Miscellaneous

    │ │ │ +

    Miscellaneous

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_diag p : p + p = p~0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Peano induction and recursion on binary positive positive numbers

    │ │ │ +

    Peano induction and recursion on binary positive positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ The Peano-like recursor function for positive (due to Daniel Schepler) │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -508,61 +508,61 @@ │ │ │ Lemma peano_equiv (P:positive->Type) (a:P 1) (f:forall p, P p -> P (succ p)) p :
    │ │ │    PeanoView_iter P a f p (peanoView p) = peano_rect P a f p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of multiplication on binary positive numbers

    │ │ │ +

    Properties of multiplication on binary positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    One is neutral for multiplication

    │ │ │ +

    One is neutral for multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_1_l p : 1 * p = p.
    │ │ │ │ │ │
    │ │ │ Lemma mul_1_r p : p * 1 = p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Right reduction properties for multiplication

    │ │ │ +

    Right reduction properties for multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_xO_r p q : p * q~0 = (p * q)~0.
    │ │ │ │ │ │
    │ │ │ Lemma mul_xI_r p q : p * q~1 = p + (p * q)~0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Commutativity of multiplication

    │ │ │ +

    Commutativity of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem mul_comm p q : p * q = q * p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Distributivity of multiplication over addition

    │ │ │ +

    Distributivity of multiplication over addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem mul_add_distr_l p q r :
    │ │ │   p * (q + r) = p * q + p * r.
    │ │ │ @@ -571,57 +571,57 @@ │ │ │ Theorem mul_add_distr_r p q r :
    │ │ │   (p + q) * r = p * r + q * r.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Associativity of multiplication

    │ │ │ +

    Associativity of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem mul_assoc p q r : p * (q * r) = p * q * r.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Successor and multiplication

    │ │ │ +

    Successor and multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_succ_l p q : (succ p) * q = q + p * q.
    │ │ │ │ │ │
    │ │ │ Lemma mul_succ_r p q : p * (succ q) = p + p * q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Parity properties of multiplication

    │ │ │ +

    Parity properties of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_xI_mul_xO_discr p q r : p~1 * r <> q~0 * r.
    │ │ │ │ │ │
    │ │ │ Lemma mul_xO_discr p q : p~0 * q <> q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Simplification properties of multiplication

    │ │ │ +

    Simplification properties of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem mul_reg_r p q r : p * r = q * r -> p = q.
    │ │ │ │ │ │ @@ -634,15 +634,15 @@ │ │ │
    │ │ │ Lemma mul_cancel_l p q r : r * p = r * q <-> p = q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Inversion of multiplication

    │ │ │ +

    Inversion of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_eq_1_l p q : p * q = 1 -> p = 1.
    │ │ │ │ │ │ @@ -652,30 +652,30 @@ │ │ │
    │ │ │ Notation mul_eq_1 := mul_eq_1_l.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square

    │ │ │ +

    Square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma square_xO p : p~0 * p~0 = (p*p)~0~0.
    │ │ │ │ │ │
    │ │ │ Lemma square_xI p : p~1 * p~1 = (p*p+p)~0~1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of iter

    │ │ │ +

    Properties of iter

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma iter_swap_gen A B (f:A->B)(g:A->A)(h:B->B) :
    │ │ │  (forall a, f (g a) = h (f a)) -> forall p a,
    │ │ │ @@ -713,42 +713,42 @@ │ │ │     (forall x:A, Inv x -> Inv (f x)) ->
    │ │ │     forall x:A, Inv x -> Inv (iter f x p).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of power

    │ │ │ +

    Properties of power

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pow_1_r p : p^1 = p.
    │ │ │ │ │ │
    │ │ │ Lemma pow_succ_r p q : p^(succ q) = p * p^q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of square

    │ │ │ +

    Properties of square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma square_spec p : square p = p * p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of sub_mask

    │ │ │ +

    Properties of sub_mask

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sub_mask_succ_r p q :
    │ │ │   sub_mask p (succ q) = sub_mask_carry p q.
    │ │ │ @@ -787,15 +787,15 @@ │ │ │
    │ │ │ Lemma sub_mask_neg_iff p q : sub_mask p q = IsNeg <-> exists r, p + r = q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of boolean comparisons

    │ │ │ +

    Properties of boolean comparisons

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem eqb_eq p q : (p =? q) = true <-> p=q.
    │ │ │ │ │ │ @@ -816,15 +816,15 @@ │ │ │
    │ │ │ Include BoolEqualityFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of comparison on binary positive numbers

    │ │ │ +

    Properties of comparison on binary positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ First, we express compare_cont in term of compare │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -1010,15 +1010,15 @@ │ │ │
    │ │ │ Definition le_lteq := lt_eq_cases.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Facts about gt and ge

    │ │ │ +

    Facts about gt and ge

    │ │ │ │ │ │
    │ │ │ │ │ │ The predicates lt and le are now favored in the statements │ │ │ of theorems, the use of gt and ge is hence not recommended. │ │ │ We provide here the bare minimal results to related them with │ │ │ lt and le. │ │ │ @@ -1043,15 +1043,15 @@ │ │ │
    │ │ │ Lemma le_ge p q : p <= q -> q >= p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and the successor

    │ │ │ +

    Comparison and the successor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma compare_succ_r p q :
    │ │ │   switch_Eq Gt (p ?= succ q) = switch_Eq Lt (p ?= q).
    │ │ │ @@ -1069,15 +1069,15 @@ │ │ │
    │ │ │ Lemma compare_succ_succ p q : (succ p ?= succ q) = (p ?= q).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    1 is the least positive number

    │ │ │ +

    1 is the least positive number

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma le_1_l p : 1 <= p.
    │ │ │ │ │ │ @@ -1087,15 +1087,15 @@ │ │ │
    │ │ │ Lemma lt_1_succ p : 1 < succ p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of the order

    │ │ │ +

    Properties of the order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma le_nlt p q : p <= q <-> ~ q < p.
    │ │ │ │ │ │ @@ -1160,30 +1160,30 @@ │ │ │ #[global]
    │ │ │ Instance le_partorder : PartialOrder Logic.eq le.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and addition

    │ │ │ +

    Comparison and addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_compare_mono_l p q r : (p+q ?= p+r) = (q ?= r).
    │ │ │ │ │ │
    │ │ │ Lemma add_compare_mono_r p q r : (q+p ?= r+p) = (q ?= r).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and addition

    │ │ │ +

    Order and addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma lt_add_diag_r p q : p < p + q.
    │ │ │ │ │ │ @@ -1205,30 +1205,30 @@ │ │ │
    │ │ │ Lemma add_le_mono p q r s : p<=q -> r<=s -> p+r <= q+s.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and multiplication

    │ │ │ +

    Comparison and multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_compare_mono_l p q r : (p*q ?= p*r) = (q ?= r).
    │ │ │ │ │ │
    │ │ │ Lemma mul_compare_mono_r p q r : (q*p ?= r*p) = (q ?= r).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and multiplication

    │ │ │ +

    Order and multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_lt_mono_l p q r : q<r <-> p*q < p*r.
    │ │ │ │ │ │ @@ -1256,15 +1256,15 @@ │ │ │
    │ │ │ Lemma pow_gt_1 n p : 1<n -> 1<n^p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of subtraction on binary positive numbers

    │ │ │ +

    Properties of subtraction on binary positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sub_1_r p : sub p 1 = pred p.
    │ │ │ │ │ │ @@ -1274,15 +1274,15 @@ │ │ │
    │ │ │ Theorem sub_succ_r p q : p - (succ q) = pred (p - q).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of subtraction without underflow

    │ │ │ +

    Properties of subtraction without underflow

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sub_mask_pos' p q :
    │ │ │   q < p -> exists r, sub_mask p q = IsPos r /\ q + r = p.
    │ │ │ @@ -1372,15 +1372,15 @@ │ │ │
    │ │ │ Lemma sub_diag p : p-p = 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Results concerning size and size_nat

    │ │ │ +

    Results concerning size and size_nat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma size_nat_monotone p q : p<q -> (size_nat p <= size_nat q)%nat.
    │ │ │ │ │ │ @@ -1390,15 +1390,15 @@ │ │ │
    │ │ │ Lemma size_le p : 2^(size p) <= p~0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of min and max

    │ │ │ +

    Properties of min and max

    │ │ │ │ │ │
    │ │ │ │ │ │ First, the specification │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -1486,30 +1486,30 @@ │ │ │
    │ │ │ Lemma mul_min_distr_r n m p : min (n * p) (m * p) = min n m * p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Results concerning iter_op

    │ │ │ +

    Results concerning iter_op

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma iter_op_succ : forall A (op:A->A->A),
    │ │ │  (forall x y z, op x (op y z) = op (op x y) z) ->
    │ │ │  forall p a,
    │ │ │  iter_op op (succ p) a = op a (iter_op op p a).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Results about of_nat and of_succ_nat

    │ │ │ +

    Results about of_nat and of_succ_nat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma of_nat_succ (n:nat) : of_succ_nat n = of_nat (S n).
    │ │ │ │ │ │ @@ -1519,15 +1519,15 @@ │ │ │
    │ │ │ Lemma succ_of_nat (n:nat) : n<>O -> succ (of_nat n) = of_succ_nat n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Correctness proofs for the square root function

    │ │ │ +

    Correctness proofs for the square root function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive SqrtSpec : positive*mask -> positive -> Prop :=
    │ │ │  | SqrtExact s x : x=s*s -> SqrtSpec (s,IsNul) x
    │ │ │ @@ -1545,15 +1545,15 @@ │ │ │ Lemma sqrt_spec p :
    │ │ │  let s := sqrt p in s*s <= p < (succ s)*(succ s).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Correctness proofs for the gcd function

    │ │ │ +

    Correctness proofs for the gcd function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma divide_add_cancel_l p q r : (p | r) -> (p | q + r) -> (p | q).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.BinPosDef.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Binary positive numbers, operations

    │ │ │ +

    Binary positive numbers, operations

    │ │ │ │ │ │
    │ │ │ │ │ │ Initial development by Pierre Crégut, CNET, Lannion, France │ │ │
    │ │ │ │ │ │ The type positive and its constructors xI and xO and xH │ │ │ @@ -94,19 +94,19 @@ │ │ │
    │ │ │ Definition t := positive.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operations over positive numbers

    │ │ │ +

    Operations over positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Successor

    │ │ │ +

    Successor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint succ x :=
    │ │ │   match x with
    │ │ │ @@ -115,15 +115,15 @@ │ │ │     | 1 => 1~0
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition

    │ │ │ +

    Addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint add x y :=
    │ │ │   match x, y with
    │ │ │ @@ -154,15 +154,15 @@ │ │ │
    │ │ │ Infix "+" := add : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operation x -> 2*x-1

    │ │ │ +

    Operation x -> 2*x-1

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint pred_double x :=
    │ │ │   match x with
    │ │ │ @@ -171,15 +171,15 @@ │ │ │     | 1 => 1
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Predecessor

    │ │ │ +

    Predecessor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pred x :=
    │ │ │   match x with
    │ │ │ @@ -188,15 +188,15 @@ │ │ │     | 1 => 1
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The predecessor of a positive number can be seen as a N

    │ │ │ +

    The predecessor of a positive number can be seen as a N

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pred_N x :=
    │ │ │   match x with
    │ │ │ @@ -205,30 +205,30 @@ │ │ │     | 1 => N0
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An auxiliary type for subtraction

    │ │ │ +

    An auxiliary type for subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive mask : Set :=
    │ │ │ | IsNul : mask
    │ │ │ | IsPos : positive -> mask
    │ │ │ | IsNeg : mask.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operation x -> 2*x+1

    │ │ │ +

    Operation x -> 2*x+1

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition succ_double_mask (x:mask) : mask :=
    │ │ │   match x with
    │ │ │ @@ -237,15 +237,15 @@ │ │ │     | IsPos p => IsPos p~1
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operation x -> 2*x

    │ │ │ +

    Operation x -> 2*x

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition double_mask (x:mask) : mask :=
    │ │ │   match x with
    │ │ │ @@ -254,15 +254,15 @@ │ │ │     | IsPos p => IsPos p~0
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operation x -> 2*x-2

    │ │ │ +

    Operation x -> 2*x-2

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition double_pred_mask x : mask :=
    │ │ │   match x with
    │ │ │ @@ -271,15 +271,15 @@ │ │ │     | 1 => IsNul
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Predecessor with mask

    │ │ │ +

    Predecessor with mask

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pred_mask (p : mask) : mask :=
    │ │ │   match p with
    │ │ │ @@ -289,15 +289,15 @@ │ │ │     | IsNeg => IsNeg
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Subtraction, result as a mask

    │ │ │ +

    Subtraction, result as a mask

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint sub_mask (x y:positive) {struct y} : mask :=
    │ │ │   match x, y with
    │ │ │ @@ -322,15 +322,15 @@ │ │ │     | 1, _ => IsNeg
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Subtraction, result as a positive, returning 1 if x<=y

    │ │ │ +

    Subtraction, result as a positive, returning 1 if x<=y

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition sub x y :=
    │ │ │   match sub_mask x y with
    │ │ │ @@ -341,15 +341,15 @@ │ │ │
    │ │ │ Infix "-" := sub : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication

    │ │ │ +

    Multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint mul x y :=
    │ │ │   match x with
    │ │ │ @@ -361,15 +361,15 @@ │ │ │
    │ │ │ Infix "*" := mul : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Iteration over a positive number

    │ │ │ +

    Iteration over a positive number

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition iter {A} (f:A -> A) : A -> positive -> A :=
    │ │ │   fix iter_fix x n := match n with
    │ │ │ @@ -378,30 +378,30 @@ │ │ │     | xI n' => f (iter_fix (iter_fix x n') n')
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power

    │ │ │ +

    Power

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pow (x:positive) := iter (mul x) 1.
    │ │ │ │ │ │
    │ │ │ Infix "^" := pow : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square

    │ │ │ +

    Square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint square p :=
    │ │ │   match p with
    │ │ │ @@ -410,15 +410,15 @@ │ │ │     | 1 => 1
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Division by 2 rounded below but for 1

    │ │ │ +

    Division by 2 rounded below but for 1

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition div2 p :=
    │ │ │   match p with
    │ │ │ @@ -443,15 +443,15 @@ │ │ │    | p~1 => succ p
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Number of digits in a positive number

    │ │ │ +

    Number of digits in a positive number

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint size_nat p : nat :=
    │ │ │   match p with
    │ │ │ @@ -476,15 +476,15 @@ │ │ │     | p~0 => succ (size p)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison on binary positive numbers

    │ │ │ +

    Comparison on binary positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint compare_cont (r:comparison) (x y:positive) {struct y} : comparison :=
    │ │ │   match x, y with
    │ │ │ @@ -519,15 +519,15 @@ │ │ │  | Gt => p
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Boolean equality and comparisons

    │ │ │ +

    Boolean equality and comparisons

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint eqb p q {struct q} :=
    │ │ │   match p, q with
    │ │ │ @@ -550,15 +550,15 @@ │ │ │ Infix "<=?" := leb (at level 70, no associativity) : positive_scope.
    │ │ │ Infix "<?" := ltb (at level 70, no associativity) : positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    A Square Root function for positive numbers

    │ │ │ +

    A Square Root function for positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ We proceed by blocks of two digits : if p is written qbb' │ │ │ then sqrt(p) will be sqrt(q)~0 or sqrt(q)~1. │ │ │ For deciding easily in which case we are, we store the remainder │ │ │ (as a mask, since it can be null). │ │ │ @@ -596,15 +596,15 @@ │ │ │
    │ │ │ Definition sqrt p := fst (sqrtrem p).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Greatest Common Divisor

    │ │ │ +

    Greatest Common Divisor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition divide p q := exists r, q = r*p.
    │ │ │ Notation "( p | q )" := (divide p q) (at level 0) : positive_scope.
    │ │ │ @@ -871,15 +871,15 @@ │ │ │     | p~1, Npos n => testbit p (pred_N n)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From binary positive numbers to Peano natural numbers

    │ │ │ +

    From binary positive numbers to Peano natural numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition iter_op {A}(op:A->A->A) :=
    │ │ │   fix iter (p:positive)(a:A) : A :=
    │ │ │ @@ -891,15 +891,15 @@ │ │ │ │ │ │
    │ │ │ Definition to_nat (x:positive) : nat := iter_op plus x (S O).
    │ │ │ Arguments to_nat x: simpl never.
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From Peano natural numbers to binary positive numbers

    │ │ │ +

    From Peano natural numbers to binary positive numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ A version preserving positive numbers, and sending 0 to 1. │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -920,15 +920,15 @@ │ │ │     | S x => succ (of_succ_nat x)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion with a decimal representation for printing/parsing

    │ │ │ +

    Conversion with a decimal representation for printing/parsing

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Notation ten := 1~0~1~0.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.PArith.POrderedType.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Local Open Scope positive_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    DecidableType structure for positive numbers

    │ │ │ +

    DecidableType structure for positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Positive_as_DT <: UsualDecidableTypeFull := Pos.
    │ │ │ │ │ │ @@ -67,15 +67,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ Note that the last module fulfills by subtyping many other │ │ │ interfaces, such as DecidableType or EqualityType. │ │ │
    │ │ │ │ │ │ -

    OrderedType structure for positive numbers

    │ │ │ +

    OrderedType structure for positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Positive_as_OT <: OrderedTypeFull := Pos.
    │ │ │ │ │ │ @@ -83,15 +83,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ Note that Positive_as_OT can also be seen as a UsualOrderedType │ │ │ and a OrderedType (and also as a DecidableType). │ │ │
    │ │ │ │ │ │ -

    An order tactic for positive numbers

    │ │ │ +

    An order tactic for positive numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module PositiveOrder := OTF_to_OrderTac Positive_as_OT.
    │ │ │ Ltac p_order := PositiveOrder.order.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Program.Combinators.html │ │ │ @@ -43,15 +43,15 @@ │ │ │ │ │ │

    Library Coq.Program.Combinators

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proofs about standard combinators, exports functional extensionality.

    │ │ │ +

    Proofs about standard combinators, exports functional extensionality.

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ Author: Matthieu Sozeau │ │ │ Institution: LRI, CNRS UMR 8623 - University Paris Sud │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.QArith_base.html │ │ │ @@ -51,15 +51,15 @@ │ │ │ Require Export ZArith.BinInt.
    │ │ │ Require Export Morphisms Setoid Bool.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of Q and basic properties

    │ │ │ +

    Definition of Q and basic properties

    │ │ │ │ │ │
    │ │ │ │ │ │ Rationals are pairs of Z and positive numbers. │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -194,15 +194,15 @@ │ │ │
    │ │ │ Lemma Qcompare_spec x y : CompareSpec (x==y) (x<y) (y<x) (x ?= y).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of equality.

    │ │ │ +

    Properties of equality.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem Qeq_refl x : x == x.
    │ │ │ │ │ │ @@ -286,15 +286,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Qnot_eq_sym : qarith.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition, multiplication and opposite

    │ │ │ +

    Addition, multiplication and opposite

    │ │ │ │ │ │
    │ │ │ │ │ │ The addition, multiplication and opposite are defined │ │ │ in the straightforward way: │ │ │
    │ │ │
    │ │ │ @@ -553,15 +553,15 @@ │ │ │
    │ │ │ Lemma Qmake_Qdiv a b : a#b==inject_Z a/inject_Z (Zpos b).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Setoid compatibility results

    │ │ │ +

    Setoid compatibility results

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ #[global]
    │ │ │ Instance Qplus_comp : Proper (Qeq==>Qeq==>Qeq) Qplus.
    │ │ │ @@ -627,15 +627,15 @@ │ │ │
    │ │ │ Lemma Q_apart_0_1 : ~ 1 == 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Qadd

    │ │ │ +

    Properties of Qadd

    │ │ │ │ │ │
    │ │ │ │ │ │ Addition is associative: │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -667,15 +667,15 @@ │ │ │
    │ │ │ Theorem Qplus_comm : forall x y, x+y == y+x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Qopp

    │ │ │ +

    Properties of Qopp

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qopp_involutive : forall q, - -q == q.
    │ │ │ │ │ │ @@ -698,15 +698,15 @@ │ │ │ Lemma Qplus_inj_l (x y z: Q):
    │ │ │   z + x == z + y <-> x == y.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Qmult

    │ │ │ +

    Properties of Qmult

    │ │ │ │ │ │
    │ │ │ │ │ │ Multiplication is associative: │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -780,15 +780,15 @@ │ │ │
    │ │ │ Theorem Qmult_integral_l : forall x y, ~ x == 0 -> x*y == 0 -> y == 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    inject_Z is a ring homomorphism:

    │ │ │ +

    inject_Z is a ring homomorphism:

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma inject_Z_plus (x y: Z): inject_Z (x + y) = inject_Z x + inject_Z y.
    │ │ │ │ │ │ @@ -798,15 +798,15 @@ │ │ │
    │ │ │ Lemma inject_Z_opp (x: Z): inject_Z (- x) = - inject_Z x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Inverse and division.

    │ │ │ +

    Inverse and division.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qinv_involutive : forall q, (/ / q) == q.
    │ │ │ │ │ │ @@ -850,19 +850,19 @@ │ │ │
    │ │ │ Lemma Qmult_inj_l (x y z: Q): ~ z == 0 -> (z * x == z * y <-> x == y).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Reduction and construction of Q

    │ │ │ +

    Reduction and construction of Q

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Removal/introduction of common factor in both numerator and denominator.

    │ │ │ +

    Removal/introduction of common factor in both numerator and denominator.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qreduce_l : forall (a : Z) (b z : positive),
    │ │ │   (Zpos z)*a # z*b == a#b.
    │ │ │ @@ -899,15 +899,15 @@ │ │ │ Lemma Qreduce_zero: forall (d : positive),
    │ │ │   (0#d == 0)%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Construction of a new rational by multiplication with an integer or pure fraction

    │ │ │ +

    Construction of a new rational by multiplication with an integer or pure fraction

    │ │ │ │ │ │
    │ │ │ │ │ │ (or to be more precise multiplication with a rational of the form z/1 or 1/p) │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -925,15 +925,15 @@ │ │ │
    │ │ │ Lemma Qmult_frac_r : forall (a:Z) (b c:positive), (a # (b * c)) == (a#b) * (1#c).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of order upon Q.

    │ │ │ +

    Properties of order upon Q.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qle_refl x : x<=x.
    │ │ │ │ │ │ @@ -1039,15 +1039,15 @@ │ │ │ Hint Resolve Qle_not_lt Qlt_not_le Qnot_le_lt Qnot_lt_le
    │ │ │  Qlt_le_weak Qlt_not_eq Qle_antisym Qle_refl: qarith.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some decidability results about orders.

    │ │ │ +

    Some decidability results about orders.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Q_dec : forall x y, {x<y} + {y<x} + {x==y}.
    │ │ │ │ │ │ @@ -1057,15 +1057,15 @@ │ │ │
    │ │ │ Lemma Qarchimedean : forall q : Q, { p : positive | q < Z.pos p # 1 }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility of addition with order

    │ │ │ +

    Compatibility of addition with order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qopp_le_compat : forall p q, p<=q -> -q <= -p.
    │ │ │ │ │ │ @@ -1110,15 +1110,15 @@ │ │ │ Lemma Qplus_lt_compat : forall x y z t : Q,
    │ │ │   x < y -> z < t -> x + z < y + t.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility of multiplication with order.

    │ │ │ +

    Compatibility of multiplication with order.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qmult_le_compat_r : forall x y z, x <= y -> 0 <= z -> x*z <= y*z.
    │ │ │   Open Scope Z_scope.
    │ │ │ @@ -1169,15 +1169,15 @@ │ │ │
    │ │ │ Lemma Qmult_le_compat_nonneg: forall x y z t : Q, 0 <= x <= y -> 0 <= z <= t -> x * z <= y * t.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility of inversion and division with order

    │ │ │ +

    Compatibility of inversion and division with order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qinv_le_0_compat : forall a, 0 <= a -> 0 <= /a.
    │ │ │ │ │ │ @@ -1220,15 +1220,15 @@ │ │ │ Lemma Qinv_lt_contravar : forall a b : Q,
    │ │ │     0 < a -> 0 < b -> (a < b <-> /b < /a).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rational to the n-th power

    │ │ │ +

    Rational to the n-th power

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Qpower_positive : Q -> positive -> Q :=
    │ │ │  pow_pos Qmult.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.QOrderedType.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Local Open Scope Q_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    DecidableType structure for rational numbers

    │ │ │ +

    DecidableType structure for rational numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Q_as_DT <: DecidableTypeFull.
    │ │ │  Definition t := Q.
    │ │ │ @@ -89,15 +89,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ Note that the last module fulfills by subtyping many other │ │ │ interfaces, such as DecidableType or EqualityType. │ │ │
    │ │ │ │ │ │ -

    OrderedType structure for rational numbers

    │ │ │ +

    OrderedType structure for rational numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Q_as_OT <: OrderedTypeFull.
    │ │ │  Include Q_as_DT.
    │ │ │ @@ -120,15 +120,15 @@ │ │ │
    │ │ │ End Q_as_OT.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An order tactic for Q numbers

    │ │ │ +

    An order tactic for Q numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module QOrder := OTF_to_OrderTac Q_as_OT.
    │ │ │ Ltac q_order := QOrder.order.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.Qcabs.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An absolute value for normalized rational numbers.

    │ │ │ +

    An absolute value for normalized rational numbers.

    │ │ │ │ │ │
    │ │ │ │ │ │ Contributed by Cédric Auger │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.Qfield.html │ │ │ @@ -50,15 +50,15 @@ │ │ │ Require Export QArith_base.
    │ │ │ Require Import NArithRing.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    field and ring tactics for rational numbers

    │ │ │ +

    field and ring tactics for rational numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Qsrt : ring_theory 0 1 Qplus Qmult Qminus Qopp Qeq.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.Qminmax.html │ │ │ @@ -48,15 +48,15 @@ │ │ │
    │ │ │ Require Import QArith_base Orders QOrderedType GenericMinMax.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Maximum and Minimum of two rational numbers

    │ │ │ +

    Maximum and Minimum of two rational numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Open Scope Q_scope.
    │ │ │ │ │ │ @@ -97,15 +97,15 @@ │ │ │
    │ │ │ Include MinMaxProperties Q_as_OT QHasMinMax.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties specific to the Q domain

    │ │ │ +

    Properties specific to the Q domain

    │ │ │ │ │ │
    │ │ │ │ │ │ Compatibilities (consequences of monotonicity) │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.QArith.Qpower.html │ │ │ @@ -48,64 +48,64 @@ │ │ │
    │ │ │ Require Import Zpow_facts Qfield Qreduction.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Qpower_positive

    │ │ │ +

    Properties of Qpower_positive

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Values of Qpower_positive for specific arguments

    │ │ │ +

    Values of Qpower_positive for specific arguments

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_positive_1 : forall n, Qpower_positive 1 n == 1.
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_positive_0 : forall n, Qpower_positive 0 n == 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relation of Qpower_positive to zero

    │ │ │ +

    Relation of Qpower_positive to zero

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_not_0_positive : forall a n, ~a==0 -> ~Qpower_positive a n == 0.
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_pos_positive : forall p n, 0 <= p -> 0 <= Qpower_positive p n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower_positive and multiplication, exponent subtraction

    │ │ │ +

    Qpower_positive and multiplication, exponent subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qmult_power_positive : forall a b n, Qpower_positive (a*b) n == (Qpower_positive a n)*(Qpower_positive b n).
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_plus_positive : forall a n m, Qpower_positive a (n+m) == (Qpower_positive a n)*(Qpower_positive a m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower_positive and inversion, division, exponent subtraction

    │ │ │ +

    Qpower_positive and inversion, division, exponent subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qinv_power_positive : forall a n, Qpower_positive (/a) n == /(Qpower_positive a n).
    │ │ │ │ │ │ @@ -114,28 +114,28 @@ │ │ │   (m < n)%positive ->
    │ │ │   Qpower_positive a (n-m)%positive == (Qpower_positive a n)/(Qpower_positive a m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower and exponent multiplication

    │ │ │ +

    Qpower and exponent multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_mult_positive : forall a n m,
    │ │ │   Qpower_positive a (n*m) == Qpower_positive (Qpower_positive a n) m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower_positive decomposition

    │ │ │ +

    Qpower_positive decomposition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_decomp_positive p x y :
    │ │ │   Qpower_positive (x#y) p = x ^ Zpos p # (y ^ p).
    │ │ │ @@ -143,19 +143,19 @@ │ │ │
    │ │ │ Notation Qpower_decomp := Qpower_decomp_positive (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Qpower

    │ │ │ +

    Properties of Qpower

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Values of Qpower for specific arguments

    │ │ │ +

    Values of Qpower for specific arguments

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_0 : forall n, (n<>0)%Z -> 0^n == 0.
    │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ Lemma Qpower_1_r: forall q:Q,
    │ │ │   q^1 == q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relation of Qpower to zero

    │ │ │ +

    Relation of Qpower to zero

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_not_0: forall (a : Q) (z : Z),
    │ │ │   ~ a == 0 -> ~ Qpower a z == 0.
    │ │ │ @@ -192,15 +192,15 @@ │ │ │
    │ │ │ Lemma Qpower_0_lt: forall (a : Q) (z : Z), 0 < a -> 0 < Qpower a z.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relation of Qpower to 1

    │ │ │ +

    Relation of Qpower to 1

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_1_lt_pos:
    │ │ │   forall (q : Q) (n : positive), (1<q)%Q -> (1 < q ^ (Z.pos n))%Q.
    │ │ │ @@ -217,15 +217,15 @@ │ │ │ Lemma Qpower_1_le:
    │ │ │   forall (q : Q) (n : Z), (1<=q)%Q -> (0<=n)%Z -> (1 <= q ^ n)%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower and multiplication, exponent addition

    │ │ │ +

    Qpower and multiplication, exponent addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qmult_power : forall a b n, (a*b)^n == a^n*b^n.
    │ │ │ │ │ │ @@ -235,15 +235,15 @@ │ │ │
    │ │ │ Lemma Qpower_plus' : forall a n m, (n+m <> 0)%Z -> a^(n+m) == a^n*a^m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower and inversion, division, exponent subtraction

    │ │ │ +

    Qpower and inversion, division, exponent subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qinv_power : forall a n, (/a)^n == /a^n.
    │ │ │ │ │ │ @@ -268,27 +268,27 @@ │ │ │ Lemma Qpower_minus_neg: forall (a b : positive) (n m : Z),
    │ │ │   (Z.neg a#b) ^ (n - m) == (Z.neg a#b) ^ n * (Z.neg b#a) ^ m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower and exponent multiplication

    │ │ │ +

    Qpower and exponent multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_mult : forall a n m, a^(n*m) == (a^n)^m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower decomposition

    │ │ │ +

    Qpower decomposition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_decomp_pos: forall (p : positive) (a : Z) (b : positive),
    │ │ │   (a # b) ^ (Z.pos p) == a ^ (Z.pos p) # (b ^ p)%positive.
    │ │ │ @@ -301,15 +301,15 @@ │ │ │ Lemma Qpower_decomp_neg_neg: forall (p a b: positive),
    │ │ │   (Z.neg a # b) ^ (Z.neg p) == (Z.neg b) ^ (Z.pos p) # (a ^ p)%positive.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility of Qpower with relational operators

    │ │ │ +

    Compatibility of Qpower with relational operators

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qpower_lt_compat_l:
    │ │ │   forall (q : Q) (n m : Z), (n < m)%Z -> (1<q)%Q -> (q ^ n < q ^ m)%Q.
    │ │ │ @@ -326,39 +326,39 @@ │ │ │ Lemma Qpower_le_compat_l_inv:
    │ │ │   forall (q : Q) (n m : Z), (q ^ n <= q ^ m)%Q -> (1<q)%Q -> (n <= m)%Z.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Qpower and inject_Z

    │ │ │ +

    Qpower and inject_Z

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zpower_Qpower : forall (a n:Z), (0<=n)%Z -> inject_Z (a^n) == (inject_Z a)^n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square

    │ │ │ +

    Square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qsqr_nonneg : forall a, 0 <= a^2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power of 2 positive upper bound

    │ │ │ +

    Power of 2 positive upper bound

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Qarchimedean_power2_pos : forall q : Q,
    │ │ │   {p : positive | (q < Z.pos (2^p) # 1)%Q}.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.AltSeries.html │ │ │ @@ -54,15 +54,15 @@ │ │ │ Require Import Lra.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Formalization of alternated series

    │ │ │ +

    Formalization of alternated series

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition tg_alt (Un:nat -> R) (i:nat) : R := (-1) ^ i * Un i.
    │ │ │ Definition positivity_seq (Un:nat -> R) : Prop := forall n:nat, 0 <= Un n.
    │ │ │ │ │ │
    │ │ │ @@ -117,15 +117,15 @@ │ │ │     Un_cv Un 0 ->
    │ │ │     { l:R | Un_cv (fun N:nat => sum_f_R0 (tg_alt Un) N) l }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Convergence of alternated series

    │ │ │ +

    Convergence of alternated series

    │ │ │ │ │ │
    │ │ │
    │ │ │ Theorem alternated_series :
    │ │ │   forall Un:nat -> R,
    │ │ │     Un_decreasing Un ->
    │ │ │     Un_cv Un 0 ->
    │ │ │ @@ -139,15 +139,15 @@ │ │ │     Un_cv (fun N:nat => sum_f_R0 (tg_alt Un) N) l ->
    │ │ │     sum_f_R0 (tg_alt Un) (S (2 * N)) <= l <= sum_f_R0 (tg_alt Un) (2 * N).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Application : construction of PI

    │ │ │ +

    Application : construction of PI

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition PI_tg (n:nat) := / INR (2 * n + 1).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Cauchy.ConstructiveCauchyReals.html │ │ │ @@ -404,15 +404,15 @@ │ │ │   : CMorphisms.Proper
    │ │ │       (CMorphisms.respectful Qeq CRealEq) inject_Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Algebraic operations

    │ │ │ +

    Algebraic operations

    │ │ │ │ │ │
    │ │ │ │ │ │ We reduce the rational numbers to accelerate calculations. │ │ │
    │ │ │
    │ │ │ Definition CReal_plus_seq (x y : CReal) :=
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Cauchy.ConstructiveCauchyRealsMult.html │ │ │ @@ -5556,16 +5556,16 @@ │ │ │ 00015b30: 6976 6543 6175 6368 7952 6561 6c73 4d75 iveCauchyRealsMu │ │ │ 00015b40: 6c74 2e68 746d 6c23 783a 3130 3522 3e3c lt.html#x:105">< │ │ │ 00015b50: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ 00015b60: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ 00015b70: 3e78 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >x...
    .
    ..
    .

    .

    Fiel │ │ │ 00015bd0: 643c 2f68 313e 0a0a 3c2f 6469 763e 0a3c d

    ..
    .< │ │ │ 00015be0: 6469 7620 636c 6173 733d 2263 6f64 6522 div class="code" │ │ │ 00015bf0: 3e0a 0a3c 6272 2f3e 0a3c 7370 616e 2063 >..
    .Lemma< │ │ │ 00015c20: 2f73 7061 6e3e 203c 6120 6964 3d22 4352 /span> Require Import Lia.
    │ │ │ Require Import Lqa. Require Import PosExtra.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power of 2 open and closed upper and lower bounds for q : Q

    │ │ │ +

    Power of 2 open and closed upper and lower bounds for q : Q

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint Pos_log2floor_plus1 (p : positive) : positive :=
    │ │ │   match p with
    │ │ │ @@ -92,15 +92,15 @@ │ │ │   | 1%positive => true
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power of two closed upper bound q <= 2^z

    │ │ │ +

    Power of two closed upper bound q <= 2^z

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Qbound_le_ZExp2 (q : Q) : Z :=
    │ │ │   match Qnum q with
    │ │ │ @@ -121,15 +121,15 @@ │ │ │ Lemma Qbound_leabs_ZExp2_spec : forall (q : Q),
    │ │ │   (Qabs q <= 2^(Qbound_leabs_ZExp2 q))%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power of two open upper bound q < 2^z and Qabs q < 2^z

    │ │ │ +

    Power of two open upper bound q < 2^z and Qabs q < 2^z

    │ │ │ │ │ │
    │ │ │ │ │ │ Compute a z such that q<2^z. │ │ │ z shall be close to as small as possible, but we need a compromise between │ │ │ the tighness of the bound and the computation speed and proof complexity. │ │ │ Looking just at the log2 of the numerator and denominator, this is a tight bound │ │ │ @@ -167,15 +167,15 @@ │ │ │ Lemma Qbound_ltabs_ZExp2_spec : forall (q : Q),
    │ │ │   (Qabs q < 2^(Qbound_ltabs_ZExp2 q))%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power of 2 open lower bounds for 2^z < q and 2^z < Qabs q

    │ │ │ +

    Power of 2 open lower bounds for 2^z < q and 2^z < Qabs q

    │ │ │ │ │ │
    │ │ │ │ │ │ Note: the -2 is required cause of the Qlt limit. │ │ │ In case q is a power of two, the lower and upper bound must be a factor of 4 apart │ │ │
    │ │ │
    │ │ │ @@ -198,15 +198,15 @@ │ │ │ Lemma Qlowbound_ltabs_ZExp2_spec : forall (q : Q) (Hqgt0 : ~ q == 0),
    │ │ │   (2^(Qlowbound_ltabs_ZExp2 q) < Qabs q)%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Existential formulations of power of 2 lower and upper bounds

    │ │ │ +

    Existential formulations of power of 2 lower and upper bounds

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition QarchimedeanExp2_Z (q : Q)
    │ │ │   : {z : Z | (q < 2^z)%Q}
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.ClassicalDedekindReals.html │ │ │ @@ -59,15 +59,15 @@ │ │ │ Require Import QExtra.
    │ │ │ Require CMorphisms.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Q Auxiliary Lemmas

    │ │ │ +

    Q Auxiliary Lemmas

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │ @@ -82,19 +82,19 @@ │ │ │ Local Lemma Qpower_2_neg_le_one : forall n : nat,
    │ │ │     (2 ^ (- Z.of_nat n) <= 1)%Q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Dedekind cuts

    │ │ │ +

    Dedekind cuts

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Definition

    │ │ │ +

    Definition

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ Classical Dedekind reals. With the 3 logical axioms funext, │ │ │ @@ -128,15 +128,15 @@ │ │ │      
    │ │ │      /\ (forall q:Q, f q = true -> ~(forall r:Q, Qle r q \/ f r = false)).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties

    │ │ │ +

    Properties

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma isLowerCut_hprop : forall (f : Q -> bool),
    │ │ │     IsHProp (isLowerCut f).
    │ │ │ @@ -160,50 +160,50 @@ │ │ │     -> f r = false
    │ │ │     -> Qlt q r.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Classical Dedekind reals

    │ │ │ +

    Classical Dedekind reals

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Definition

    │ │ │ +

    Definition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition DReal : Set
    │ │ │   := { f : Q -> bool | isLowerCut f }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Induction principle

    │ │ │ +

    Induction principle

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint DRealQlim_rec (f : Q -> bool) (low : isLowerCut f) (n p : nat) { struct p }
    │ │ │   : f (proj1_sig (lowerCutBelow f low) + (Z.of_nat p # Pos.of_nat (S n)))%Q = false
    │ │ │     -> { q : Q | f q = true /\ f (q + (1 # Pos.of_nat (S n)))%Q = false }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion to and from constructive Cauchy real CReal

    │ │ │ +

    Conversion to and from constructive Cauchy real CReal

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Conversion from CReal to DReal

    │ │ │ +

    Conversion from CReal to DReal

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma DRealAbstr_aux :
    │ │ │   forall x H,
    │ │ │ @@ -214,15 +214,15 @@ │ │ │
    │ │ │ Definition DRealAbstr : CReal -> DReal.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion from DReal to CReal

    │ │ │ +

    Conversion from DReal to CReal

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition DRealQlim (x : DReal) (n : nat)
    │ │ │   : { q : Q | proj1_sig x q = true /\ proj1_sig x (q + (1# Pos.of_nat (S n)))%Q = false }.
    │ │ │ @@ -265,15 +265,15 @@ │ │ │   bound := CReal_of_DReal_bound x
    │ │ │ |}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order for DReal

    │ │ │ +

    Order for DReal

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Rle (x y : DReal)
    │ │ │   := forall q:Q, proj1_sig x q = true -> proj1_sig y q = true.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.RIneq.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic lemmas for the classical real numbers

    │ │ │ +

    Basic lemmas for the classical real numbers

    │ │ │ │ │ │
    │ │ │ │ │ │ This file provides several hundred basic lemmas about foundamental │ │ │ operations on R: │ │ │
      │ │ │
    • addition denoted by Rplus (notation: infix +), │ │ │ @@ -133,15 +133,15 @@ │ │ │ Local Open Scope Z_scope.
      │ │ │ Local Open Scope R_scope.
      │ │ │ │ │ │
      │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relation between orders and equality

    │ │ │ +

    Relation between orders and equality

    │ │ │ │ │ │
    │ │ │ │ │ │ Reflexivity of the large orders │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -223,31 +223,31 @@ │ │ │
    │ │ │ Lemma Rdichotomy : forall r1 r2, r1 <> r2 -> r1 < r2 \/ r1 > r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Strong decidable equality

    │ │ │ +

    Strong decidable equality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Req_dec_T : forall r1 r2:R, {r1 = r2} + {r1 <> r2}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relating <, >, <= and >=

    │ │ │ +

    Relating <, >, <= and >=

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Relating strict and large orders

    │ │ │ +

    Relating strict and large orders

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rlt_le : forall r1 r2, r1 < r2 -> r1 <= r2.
    │ │ │ #[global]
    │ │ │ @@ -344,15 +344,15 @@ │ │ │ #[global]
    │ │ │ Hint Immediate Req_ge_sym: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Asymmetry

    │ │ │ +

    Asymmetry

    │ │ │ │ │ │
    │ │ │ │ │ │ Remark: Rlt_asym is in Raxioms.v │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -365,15 +365,15 @@ │ │ │
    │ │ │ #[export] Instance Rgt_Asymmetric : Asymmetric Rgt | 10 := Rgt_asym.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Antisymmetry

    │ │ │ +

    Antisymmetry

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rle_antisym : forall r1 r2, r1 <= r2 -> r2 <= r1 -> r1 = r2.
    │ │ │ #[global]
    │ │ │ @@ -394,15 +394,15 @@ │ │ │
    │ │ │ Lemma Rge_ge_eq : forall r1 r2, r1 >= r2 /\ r2 >= r1 <-> r1 = r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility with equality

    │ │ │ +

    Compatibility with equality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rlt_eq_compat :
    │ │ │   forall r1 r2 r3 r4, r1 = r2 -> r2 < r4 -> r4 = r3 -> r1 < r3.
    │ │ │ @@ -411,15 +411,15 @@ │ │ │ Lemma Rgt_eq_compat :
    │ │ │   forall r1 r2 r3 r4, r1 = r2 -> r2 > r4 -> r4 = r3 -> r1 > r3.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Transitivity

    │ │ │ +

    Transitivity

    │ │ │ │ │ │
    │ │ │ │ │ │ Remark: Rlt_trans is in Raxioms │ │ │
    │ │ │
    │ │ │ #[export] Instance Rlt_Transitive : Transitive Rlt | 10 := Rlt_trans.
    │ │ │ @@ -454,15 +454,15 @@ │ │ │
    │ │ │ Lemma Rgt_ge_trans : forall r1 r2 r3, r1 > r2 -> r2 >= r3 -> r1 > r3.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    (Classical) decidability with sumbool types

    │ │ │ +

    (Classical) decidability with sumbool types

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rlt_dec : forall r1 r2, {r1 < r2} + {~ r1 < r2}.
    │ │ │ │ │ │ @@ -505,15 +505,15 @@ │ │ │
    │ │ │ Lemma Rge_gt_or_eq_dec : forall r1 r2, r1 >= r2 -> {r1 > r2} + {r1 = r2}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Same theorems with disjunctions instead of sumbools

    │ │ │ +

    Same theorems with disjunctions instead of sumbools

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Private_sumbool_to_or {A B : Prop} : {A} + {B} -> A \/ B.
    │ │ │ │ │ │ @@ -559,15 +559,15 @@ │ │ │
    │ │ │ Lemma Rge_gt_or_eq : forall r1 r2, r1 >= r2 -> r1 > r2 \/ r1 = r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition

    │ │ │ +

    Addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rplus_eq_compat_l : forall r r1 r2, r1 = r2 -> r + r1 = r + r2.
    │ │ │ │ │ │ @@ -633,15 +633,15 @@ │ │ │
    │ │ │ Lemma Rplus_0_l_uniq : forall r r1, r1 + r = r -> r1 = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite

    │ │ │ +

    Opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_eq_compat : forall r1 r2, r1 = r2 -> - r1 = - r2.
    │ │ │ #[global]
    │ │ │ @@ -675,15 +675,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Ropp_plus_distr: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication

    │ │ │ +

    Multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rmult_eq_compat_l : forall r r1 r2, r1 = r2 -> r * r1 = r * r2.
    │ │ │ │ │ │ @@ -791,15 +791,15 @@ │ │ │ Lemma Rmult_integral_contrapositive_currified :
    │ │ │   forall r1 r2, r1 <> 0 -> r2 <> 0 -> r1 * r2 <> 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite and multiplication

    │ │ │ +

    Opposite and multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_mult_distr_l : forall r1 r2, - (r1 * r2) = - r1 * r2.
    │ │ │ │ │ │ @@ -819,15 +819,15 @@ │ │ │
    │ │ │ Lemma Ropp_mult_distr_r_reverse : forall r1 r2, r1 * - r2 = - (r1 * r2).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Subtraction

    │ │ │ +

    Subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rminus_def : forall r1 r2, r1 - r2 = r1 + - r2.
    │ │ │ │ │ │ @@ -931,15 +931,15 @@ │ │ │
    │ │ │ Lemma Rminus_plus_l_l : forall r r1 r2, (r + r1) - (r + r2) = r1 - r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Inverse

    │ │ │ +

    Inverse

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rinv_0 : / 0 = 0.
    │ │ │ │ │ │ @@ -985,15 +985,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Rmult_inv_m_id_r Rmult_inv_r_id_l Rmult_inv_r_id_m: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square function

    │ │ │ +

    Square function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Rsqr r : R := r * r.
    │ │ │ Notation "r ²" := (Rsqr r) (at level 1, format "r ²") : R_scope.
    │ │ │ @@ -1007,19 +1007,19 @@ │ │ │
    │ │ │ Lemma Rsqr_0_uniq : forall r, Rsqr r = 0 -> r = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and addition

    │ │ │ +

    Order and addition

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Compatibility

    │ │ │ +

    Compatibility

    │ │ │ │ │ │
    │ │ │ │ │ │ Remark: Rplus_lt_compat_l is in Raxioms.v │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -1112,15 +1112,15 @@ │ │ │ Lemma Rplus_eq_0 :
    │ │ │   forall r1 r2, 0 <= r1 -> 0 <= r2 -> r1 + r2 = 0 -> r1 = 0 /\ r2 = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Cancellation

    │ │ │ +

    Cancellation

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rplus_lt_reg_l : forall r r1 r2, r + r1 < r + r2 -> r1 < r2.
    │ │ │ │ │ │ @@ -1164,15 +1164,15 @@ │ │ │ #[global]
    │ │ │ Hint Immediate Rplus_le_lt_0_neq_0: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison of addition with left operand

    │ │ │ +

    Comparison of addition with left operand

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rplus_pos_gt : forall r1 r2, r2 > 0 -> r1 + r2 > r1.
    │ │ │ │ │ │ @@ -1185,15 +1185,15 @@ │ │ │
    │ │ │ Lemma Rplus_npos_le : forall r1 r2, r2 <= 0 -> r1 + r2 <= r1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of addition

    │ │ │ +

    Sign of addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rplus_pos_pos : forall r1 r2, r1 > 0 -> r2 > 0 -> r1 + r2 > 0.
    │ │ │ │ │ │ @@ -1218,19 +1218,19 @@ │ │ │
    │ │ │ Lemma Rplus_npos_neg : forall r1 r2, r1 <= 0 -> r2 < 0 -> r1 + r2 < 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and opposite

    │ │ │ +

    Order and opposite

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Contravariant compatibility

    │ │ │ +

    Contravariant compatibility

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_gt_lt_contravar : forall r1 r2, r1 > r2 -> - r1 < - r2.
    │ │ │ #[global]
    │ │ │ @@ -1298,15 +1298,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Ropp_0_ge_le_contravar: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Cancellation

    │ │ │ +

    Cancellation

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_lt_cancel : forall r1 r2, - r2 < - r1 -> r1 < r2.
    │ │ │ #[global]
    │ │ │ @@ -1323,37 +1323,37 @@ │ │ │
    │ │ │ Lemma Ropp_ge_cancel : forall r1 r2, - r2 >= - r1 -> r1 >= r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of opposite

    │ │ │ +

    Sign of opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_pos : forall r, r > 0 -> - r < 0.
    │ │ │ │ │ │
    │ │ │ Lemma Ropp_neg : forall r, r < 0 -> - r > 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and multiplication

    │ │ │ +

    Order and multiplication

    │ │ │ │ │ │
    │ │ │ │ │ │ Remark: Rmult_lt_compat_l is in Raxioms.v │ │ │
    │ │ │ │ │ │ -

    Covariant compatibility

    │ │ │ +

    Covariant compatibility

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rmult_lt_compat_r : forall r r1 r2, 0 < r -> r1 < r2 -> r1 * r < r2 * r.
    │ │ │ #[global]
    │ │ │ @@ -1416,15 +1416,15 @@ │ │ │   forall r1 r2 r3 r4,
    │ │ │     0 <= r1 -> 0 <= r3 -> r1 < r2 -> r3 < r4 -> r1 * r3 < r2 * r4.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Contravariant compatibility

    │ │ │ +

    Contravariant compatibility

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rmult_le_compat_neg_l :
    │ │ │   forall r r1 r2, r <= 0 -> r1 <= r2 -> r * r2 <= r * r1.
    │ │ │ @@ -1441,15 +1441,15 @@ │ │ │ Lemma Rmult_lt_gt_compat_neg_l :
    │ │ │   forall r r1 r2, r < 0 -> r1 < r2 -> r * r1 > r * r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of multiplication

    │ │ │ +

    Sign of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rmult_lt_0_compat : forall r1 r2, 0 < r1 -> 0 < r2 -> 0 < r1 * r2.
    │ │ │ │ │ │ @@ -1476,15 +1476,15 @@ │ │ │ Lemma Rmult_neg_cases :
    │ │ │   forall r1 r2, r1 * r2 < 0 -> (r1 > 0 /\ r2 < 0) \/ (r1 < 0 /\ r2 > 0).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and square function

    │ │ │ +

    Order and square function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rle_0_sqr : forall r, 0 <= Rsqr r.
    │ │ │ │ │ │ @@ -1497,15 +1497,15 @@ │ │ │ Lemma Rplus_sqr_eq_0 :
    │ │ │   forall r1 r2, Rsqr r1 + Rsqr r2 = 0 -> r1 = 0 /\ r2 = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Zero is less than one

    │ │ │ +

    Zero is less than one

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rlt_0_1 : 0 < 1.
    │ │ │ #[global]
    │ │ │ @@ -1514,15 +1514,15 @@ │ │ │
    │ │ │ Lemma Rle_0_1 : 0 <= 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of inverse

    │ │ │ +

    Sign of inverse

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rinv_0_lt_compat : forall r, 0 < r -> 0 < / r.
    │ │ │ #[global]
    │ │ │ @@ -1533,15 +1533,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Rinv_lt_0_compat: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Cancellation in inequalities of products

    │ │ │ +

    Cancellation in inequalities of products

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rmult_lt_reg_l : forall r r1 r2, 0 < r -> r * r1 < r * r2 -> r1 < r2.
    │ │ │ │ │ │ @@ -1560,15 +1560,15 @@ │ │ │
    │ │ │ Lemma Rmult_le_reg_r : forall r r1 r2, 0 < r -> r1 * r <= r2 * r -> r1 <= r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and inverse

    │ │ │ +

    Order and inverse

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rinv_0_lt_contravar : forall r1 r2, 0 < r1 -> r1 < r2 -> / r2 < / r1.
    │ │ │ #[global]
    │ │ │ @@ -1591,30 +1591,30 @@ │ │ │ Lemma Rinv_le_contravar :
    │ │ │   forall x y, 0 < x -> x <= y -> / y <= / x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of inverse

    │ │ │ +

    Sign of inverse

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rinv_pos : forall r, r > 0 -> / r > 0.
    │ │ │ │ │ │
    │ │ │ Lemma Rinv_neg : forall r, r < 0 -> / r < 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order and subtraction

    │ │ │ +

    Order and subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rlt_minus : forall r1 r2, r1 < r2 -> r1 - r2 < 0.
    │ │ │ #[global]
    │ │ │ @@ -1650,15 +1650,15 @@ │ │ │
    │ │ │ Lemma Rgt_minus_pos : forall r1 r2, 0 < r2 -> r1 > r1 - r2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Division

    │ │ │ +

    Division

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rdiv_def : forall r1 r2, r1 / r2 = r1 * / r2.
    │ │ │ │ │ │ @@ -1750,15 +1750,15 @@ │ │ │
    │ │ │ Lemma Rdiv_opp_r : forall x y, x / - y = - (x / y).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign of division

    │ │ │ +

    Sign of division

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rdiv_pos_pos : forall r1 r2, r1 > 0 -> r2 > 0 -> r1 / r2 > 0.
    │ │ │ │ │ │ @@ -1775,15 +1775,15 @@ │ │ │ Lemma Rdiv_pos_cases :
    │ │ │   forall r1 r2 : R, r1 / r2 > 0 -> r1 > 0 /\ r2 > 0 \/ r1 < 0 /\ r2 < 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Miscellaneous

    │ │ │ +

    Miscellaneous

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │ @@ -1829,15 +1829,15 @@ │ │ │   forall E : R -> Prop,
    │ │ │     bound E -> (exists x : R, E x) -> exists m : R, is_lub E m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injection from nat to R

    │ │ │ +

    Injection from nat to R

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma S_INR : forall n, INR (S n) = INR n + 1.
    │ │ │ │ │ │ @@ -1928,15 +1928,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve not_1_INR: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injection from positive to R

    │ │ │ +

    Injection from positive to R

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma IPR_2_xH : IPR_2 xH = 2.
    │ │ │ │ │ │ @@ -2009,15 +2009,15 @@ │ │ │
    │ │ │ Lemma IPR_le : forall p q:positive, IPR p <= IPR q -> (p <= q)%positive.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injection from Z to R

    │ │ │ +

    Injection from Z to R

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma IZN : forall n:Z, (0 <= n)%Z -> exists m : nat, n = Z.of_nat m.
    │ │ │ │ │ │
    │ │ │ Lemma INR_IZR_INZ : forall n:nat, INR n = IZR (Z.of_nat n).
    │ │ │ @@ -2146,15 +2146,15 @@ │ │ │ Add Field RField : Rfield
    │ │ │   (completeness Zeq_bool_IZR, morphism R_rm, constants [IZR_tac], power_tac R_power_theory [Rpow_tac]).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definitions of new types

    │ │ │ +

    Definitions of new types

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Record nonnegreal : Type := mknonnegreal
    │ │ │   {nonneg :> R; cond_nonneg : 0 <= nonneg}.
    │ │ │ @@ -2173,15 +2173,15 @@ │ │ │ Record nonzeroreal : Type := mknonzeroreal
    │ │ │   {nonzero :> R; cond_nonzero : nonzero <> 0}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    A few common instances

    │ │ │ +

    A few common instances

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pos_half_prf : 0 < / 2.
    │ │ │ │ │ │ @@ -2189,15 +2189,15 @@ │ │ │ Definition posreal_one := mkposreal (1) (Rlt_0_1).
    │ │ │ Definition posreal_half := mkposreal (/ 2) pos_half_prf.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility

    │ │ │ +

    Compatibility

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation prod_neq_R0 := Rmult_integral_contrapositive_currified (only parsing).
    │ │ │ Notation minus_Rgt := Rminus_gt (only parsing).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.ROrderedType.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    DecidableType structure for real numbers

    │ │ │ +

    DecidableType structure for real numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Req_dec : forall r1 r2:R, {r1 = r2} + {r1 <> r2}.
    │ │ │ │ │ │ @@ -86,15 +86,15 @@ │ │ │ interfaces, such as DecidableType or EqualityType. │ │ │
    │ │ │ │ │ │ Note that R_as_DT can also be seen as a DecidableType │ │ │ and a DecidableTypeOrig. │ │ │
    │ │ │ │ │ │ -

    OrderedType structure for binary integers

    │ │ │ +

    OrderedType structure for binary integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Rcompare x y :=
    │ │ │  match total_order_T x y with
    │ │ │ @@ -134,15 +134,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ Note that R_as_OT can also be seen as a UsualOrderedType │ │ │ and a OrderedType (and also as a DecidableType). │ │ │
    │ │ │ │ │ │ -

    An order tactic for real numbers

    │ │ │ +

    An order tactic for real numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module ROrder := OTF_to_OrderTac R_as_OT.
    │ │ │ Ltac r_order := ROrder.order.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.R_Ifp.html │ │ │ @@ -58,15 +58,15 @@ │ │ │ Require Import ZArith Ztac.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Fractional part

    │ │ │ +

    Fractional part

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition Int_part (r:R) : Z := (up r - 1)%Z.
    │ │ │ @@ -93,15 +93,15 @@ │ │ │
    │ │ │ Lemma base_fp : forall r:R, frac_part r >= 0 /\ frac_part r < 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties

    │ │ │ +

    Properties

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma base_Int_part :
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.R_sqrt.html │ │ │ @@ -51,15 +51,15 @@ │ │ │ Require Import Rsqrt_def.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Continuous extension of Rsqrt on R

    │ │ │ +

    Continuous extension of Rsqrt on R

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition sqrt (x:R) : R :=
    │ │ │   match Rcase_abs x with
    │ │ │     | left _ => 0
    │ │ │     | right a => Rsqrt (mknonnegreal x (Rge_le _ _ a))
    │ │ │ @@ -192,15 +192,15 @@ │ │ │   forall a b c d:R,
    │ │ │     a * c + b * d <= sqrt (Rsqr a + Rsqr b) * sqrt (Rsqr c + Rsqr d).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Resolution of a*X^2+b*X+c=0

    │ │ │ +

    Resolution of a*X^2+b*X+c=0

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Delta (a:nonzeroreal) (b c:R) : R := Rsqr b - 4 * a * c.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Ranalysis1.html │ │ │ @@ -53,15 +53,15 @@ │ │ │ Local Open Scope R_scope.
    │ │ │ Implicit Type f : R -> R.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic operations on functions

    │ │ │ +

    Basic operations on functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition plus_fct f1 f2 (x:R) : R := f1 x + f2 x.
    │ │ │ Definition opp_fct f (x:R) : R := - f x.
    │ │ │ Definition mult_fct f1 f2 (x:R) : R := f1 x * f2 x.
    │ │ │ Definition mult_real_fct (a:R) f (x:R) : R := a * f x.
    │ │ │ @@ -102,15 +102,15 @@ │ │ │ Definition fct_cte (a x:R) : R := a.
    │ │ │ Definition id (x:R) := x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Variations of functions

    │ │ │ +

    Variations of functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition increasing f : Prop := forall x y:R, x <= y -> f x <= f y.
    │ │ │ Definition decreasing f : Prop := forall x y:R, x <= y -> f y <= f x.
    │ │ │ Definition strict_increasing f : Prop := forall x y:R, x < y -> f x < f y.
    │ │ │ Definition strict_decreasing f : Prop := forall x y:R, x < y -> f y < f x.
    │ │ │ @@ -123,15 +123,15 @@ │ │ │ Definition constant_D_eq f (D:R -> Prop) (c:R) : Prop :=
    │ │ │   forall x:R, D x -> f x = c.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of continuity as a limit

    │ │ │ +

    Definition of continuity as a limit

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition continuity_pt f (x0:R) : Prop := continue_in f no_cond x0.
    │ │ │ @@ -227,15 +227,15 @@ │ │ │ Lemma continuity_comp :
    │ │ │   forall f1 f2, continuity f1 -> continuity f2 -> continuity (f2 o f1).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Derivative's definition using Landau's kernel

    │ │ │ +

    Derivative's definition using Landau's kernel

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition derivable_pt_lim f (x l:R) : Prop :=
    │ │ │   forall eps:R,
    │ │ │ @@ -267,15 +267,15 @@ │ │ │ Definition antiderivative f (g:R -> R) (a b:R) : Prop :=
    │ │ │   (forall x:R,
    │ │ │     a <= x <= b -> exists pr : derivable_pt g x, f x = derive_pt g x pr) /\
    │ │ │   a <= b.
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Class of differential functions

    │ │ │ +

    Class of differential functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Record Differential : Type := mkDifferential
    │ │ │   {d1 :> R -> R; cond_diff : derivable d1}.
    │ │ │ │ │ │
    │ │ │ @@ -323,15 +323,15 @@ │ │ │   forall f (x l:R) (pr:derivable_pt f x),
    │ │ │     derive_pt f x pr = l -> derivable_pt_lim f x l.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Equivalence of this definition with the one using limit concept

    │ │ │ +

    Equivalence of this definition with the one using limit concept

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma derive_pt_D_in :
    │ │ │   forall f (df:R -> R) (x:R) (pr:derivable_pt f x),
    │ │ │     D_in f df no_cond x <-> derive_pt f x pr = df x.
    │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │   (forall z, a < z < b -> f z = g z) ->
    │ │ │   derivable_pt_lim f x l -> derivable_pt_lim g x l.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    derivability -> continuity

    │ │ │ +

    derivability -> continuity

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma derivable_derive :
    │ │ │   forall f (x:R) (pr:derivable_pt f x), exists l : R, derive_pt f x pr = l.
    │ │ │ │ │ │
    │ │ │ @@ -372,19 +372,19 @@ │ │ │
    │ │ │ Theorem derivable_continuous : forall f, derivable f -> continuity f.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Main rules

    │ │ │ +

    Main rules

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Rules for derivable_pt_lim (value of the derivative at a point)

    │ │ │ +

    Rules for derivable_pt_lim (value of the derivative at a point)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derivable_pt_lim_id : forall x:R, derivable_pt_lim id x 1.
    │ │ │ │ │ │ @@ -454,15 +454,15 @@ │ │ │
    │ │ │ Lemma derivable_pt_lim_Rsqr : forall x:R, derivable_pt_lim Rsqr x (2 * x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rules for derivable_pt (derivability at a point)

    │ │ │ +

    Rules for derivable_pt (derivability at a point)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derivable_pt_id : forall x:R, derivable_pt id x.
    │ │ │ │ │ │ @@ -520,15 +520,15 @@ │ │ │
    │ │ │ Lemma derivable_pt_Rsqr : forall x:R, derivable_pt Rsqr x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rules for derivable (derivability on whole domain)

    │ │ │ +

    Rules for derivable (derivability on whole domain)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derivable_id : derivable id.
    │ │ │ │ │ │ @@ -564,15 +564,15 @@ │ │ │
    │ │ │ Lemma derivable_Rsqr : derivable Rsqr.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rules for derive_pt (derivative function on whole domain)

    │ │ │ +

    Rules for derive_pt (derivative function on whole domain)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derive_pt_id : forall x:R, derive_pt id x (derivable_pt_id _) = 1.
    │ │ │ │ │ │ @@ -634,15 +634,15 @@ │ │ │ Lemma derive_pt_Rsqr :
    │ │ │   forall x:R, derive_pt Rsqr x (derivable_pt_Rsqr _) = 2 * x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition and derivative of power function with natural number exponent

    │ │ │ +

    Definition and derivative of power function with natural number exponent

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pow_fct (n:nat) (y:R) : R := y ^ n.
    │ │ │ │ │ │ @@ -668,15 +668,15 @@ │ │ │   forall (n:nat) (x:R),
    │ │ │     derive_pt (fun y:R => y ^ n) x (derivable_pt_pow n x) = INR n * x ^ pred n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Irrelevance of derivability proof for derivative

    │ │ │ +

    Irrelevance of derivability proof for derivative

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pr_nu :
    │ │ │   forall f (x:R) (pr1 pr2:derivable_pt f x),
    │ │ │ @@ -696,15 +696,15 @@ │ │ │   forall f (x1 x2:R) (pr1:derivable_pt f x1) (pr2:derivable_pt f x2),
    │ │ │     x1 = x2 -> derive_pt f x1 pr1 = derive_pt f x2 pr2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Local extremum's condition

    │ │ │ +

    Local extremum's condition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem deriv_maximum :
    │ │ │   forall f (a b c:R) (pr:derivable_pt f c),
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Ranalysis5.html │ │ │ @@ -59,15 +59,15 @@ │ │ │
    │ │ │ Local Ltac Tauto.intuition_solver ::= auto with rorders real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Preliminaries lemmas

    │ │ │ +

    Preliminaries lemmas

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma f_incr_implies_g_incr_interv : forall f g:R->R, forall lb ub,
    │ │ │        lb < ub ->
    │ │ │ @@ -135,19 +135,19 @@ │ │ │     (forall x, lb <= x <= ub -> continuity_pt f x) ->
    │ │ │     {x | lb <= x <= ub /\ f x = y}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The derivative of a reciprocal function

    │ │ │ +

    The derivative of a reciprocal function

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Continuity of the reciprocal function

    │ │ │ +

    Continuity of the reciprocal function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma continuity_pt_recip_prelim : forall (f g:R->R) (lb ub : R) (Pr1:lb < ub),
    │ │ │     (forall x y, lb <= x -> x < y -> y <= ub -> f x < f y) ->
    │ │ │ @@ -167,15 +167,15 @@ │ │ │        f lb < b < f ub ->
    │ │ │        continuity_pt g b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Derivability of the reciprocal function

    │ │ │ +

    Derivability of the reciprocal function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derivable_pt_lim_recip_interv : forall (f g:R->R) (lb ub x:R)
    │ │ │                                         (Prf:forall a : R, g lb <= a <= g ub -> derivable_pt f a) (Prg : continuity_pt g x),
    │ │ │ @@ -241,15 +241,15 @@ │ │ │     <> 0 ->
    │ │ │     derivable_pt g x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Value of the derivative of the reciprocal function

    │ │ │ +

    Value of the derivative of the reciprocal function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma derive_pt_recip_interv_prelim0 (f g:R->R) (lb ub x:R)
    │ │ │       (Prf:derivable_pt f (g x)) (Prg:derivable_pt g x)
    │ │ │ @@ -317,15 +317,15 @@ │ │ │        1 / (derive_pt f (g x) (Prf (g x) (derive_pt_recip_interv_prelim1_1_decr f g lb ub x
    │ │ │        lb_lt_ub x_encad f_decr g_wf f_eq_g))).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Existence of the derivative of a function which is the limit of a sequence of functions

    │ │ │ +

    Existence of the derivative of a function which is the limit of a sequence of functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Ratan.html │ │ │ @@ -311,21 +311,21 @@ │ │ │ 00001360: 6173 733d 2269 6422 2074 6974 6c65 3d22 ass="id" title=" │ │ │ 00001370: 7661 7222 3e72 6561 6c3c 2f73 7061 6e3e var">real │ │ │ 00001380: 203c 7370 616e 2063 6c61 7373 3d22 6964 ar │ │ │ 000013a0: 6974 683c 2f73 7061 6e3e 2e3c 6272 2f3e ith.
    │ │ │ 000013b0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
    .
    .. │ │ │ 000013c0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
    ..

    Prelimi │ │ │ 00001400: 6e61 7269 6573 3c2f 6831 3e0a 0a3c 6469 naries

    ..
    .. │ │ │ +00001430: 6964 3d22 6c61 6234 3738 223e 3c2f 613e id="lab478"> │ │ │ 00001440: 3c68 3220 636c 6173 733d 2273 6563 7469

    Various gene │ │ │ 00001460: 7269 6320 6c65 6d6d 6173 2077 6869 6368 ric lemmas which │ │ │ 00001470: 2070 726f 6261 626c 7920 7368 6f75 6c64 probably should │ │ │ 00001480: 2067 6f20 736f 6d65 7768 6572 6520 656c go somewhere el │ │ │ 00001490: 7365 3c2f 6832 3e0a 0a3c 2f64 6976 3e0a se

    ..
    . │ │ │ 000014a0: 3c64 6976 2063 6c61 7373 3d22 636f 6465
    │ │ │ 000064f0: 5e3c 2f73 7061 6e3e 3c2f 613e 322e 3c62 ^2...
    .
    ..
    .

    .

    Prop │ │ │ 00006550: 6572 7469 6573 206f 6620 7461 6e67 656e erties of tangen │ │ │ 00006560: 743c 2f68 323e 0a0a 3c64 6976 2063 6c61 t

    ..
    │ │ │ 00006580: 3c2f 6469 763e 0a0a 3c61 2069 643d 226c
    ..

    D │ │ │ 000065b0: 6572 6976 6174 6976 6520 6f66 2074 616e erivative of tan │ │ │ 000065c0: 6765 6e74 3c2f 6833 3e0a 0a3c 2f64 6976 gent

    ..
    .
    ..
    .Lem │ │ │ @@ -1907,15 +1907,15 @@ │ │ │ 00007720: 6334 3833 3731 6430 3737 3037 223e 3c73 c48371d07707"> │ │ │ 00007750: 295e 3c2f 7370 616e 3e3c 2f61 3e32 2e3c )^2.< │ │ │ 00007760: 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f 6469 br/>..
    ...
    .

    Pro │ │ │ 000077b0: 6f66 2074 6861 7420 7461 6e67 656e 7420 of that tangent │ │ │ 000077c0: 6973 2061 2062 696a 6563 7469 6f6e 3c2f is a bijection..

    .
    .. │ │ │ 000077f0: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 7370
    ..
    . │ │ │ 0000cbf0: 7d3c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 }.
    ..
    .
    │ │ │ 0000cc10: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
    .

    .

    Defin │ │ │ 0000cc50: 6974 696f 6e20 6f66 2061 7263 7461 6e67 ition of arctang │ │ │ 0000cc60: 656e 743c 2f68 313e 0a0a 3c64 6976 2063 ent

    ..
    ..

    Definition of a │ │ │ 0000ccc0: 7263 7461 6e67 656e 7420 6173 2074 6865 rctangent as the │ │ │ 0000ccd0: 2072 6563 6970 726f 6361 6c20 6675 6e63 reciprocal func │ │ │ 0000cce0: 7469 6f6e 206f 6620 7461 6e67 656e 7420 tion of tangent │ │ │ 0000ccf0: 616e 6420 7072 6f6f 6620 6f66 2074 6869 and proof of thi │ │ │ 0000cd00: 7320 7374 6174 7573 3c2f 6832 3e0a 0a3c s status

    ..< │ │ │ @@ -4682,16 +4682,16 @@ │ │ │ 00012490: 7373 3d22 6964 2220 7469 746c 653d 2276 ss="id" title="v │ │ │ 000124a0: 6172 6961 626c 6522 3e78 3c2f 7370 616e ariable">x)%R.
    ..
    .
    │ │ │ 000124f0: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
    .

    .

    Deriv │ │ │ 00012530: 6174 6976 6520 6f66 2061 7263 7461 6e67 ative of arctang │ │ │ 00012540: 656e 743c 2f68 323e 0a0a 3c2f 6469 763e ent

    ..
    │ │ │ 00012550: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
    ..
    .Lemm │ │ │ @@ -4890,15 +4890,15 @@ │ │ │ 00013190: 6331 6239 3534 3839 6430 6636 6533 6122 c1b95489d0f6e3a" │ │ │ 000131a0: 3e3c 7370 616e 2063 6c61 7373 3d22 6964 >)) │ │ │ 000131d0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
    ..
    ...
    .

    D │ │ │ 00013220: 6566 696e 6974 696f 6e20 6f66 2074 6865 efinition of the │ │ │ 00013230: 2061 7263 7461 6e67 656e 7420 6675 6e63 arctangent func │ │ │ 00013240: 7469 6f6e 2061 7320 7468 6520 7375 6d20 tion as the sum │ │ │ 00013250: 6f66 2074 6865 2061 7263 7461 6e20 706f of the arctan po │ │ │ 00013260: 7765 7220 7365 7269 6573 3c2f 6832 3e0a wer series

    . │ │ │ 00013270: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
    .
    x
    end
    .
    ..
    .
    ..
    .< │ │ │ +00017230: 643d 226c 6162 3438 3622 3e3c 2f61 3e3c d="lab486">< │ │ │ 00017240: 6832 2063 6c61 7373 3d22 7365 6374 696f h2 class="sectio │ │ │ 00017250: 6e22 3e50 726f 6f66 206f 6620 7468 6520 n">Proof of the │ │ │ 00017260: 6571 7569 7661 6c65 6e63 6520 6f66 2074 equivalence of t │ │ │ 00017270: 6865 2074 776f 2064 6566 696e 6974 696f he two definitio │ │ │ 00017280: 6e73 2062 6574 7765 656e 202d 3120 616e ns between -1 an │ │ │ 00017290: 6420 313c 2f68 323e 0a0a 3c2f 6469 763e d 1..
    │ │ │ 000172a0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
    N).
    . │ │ │ 00023900: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
    .
    ..< │ │ │ 00023910: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -00023920: 0a3c 6120 6964 3d22 6c61 6233 3730 223e . │ │ │ +00023920: 0a3c 6120 6964 3d22 6c61 6234 3837 223e . │ │ │ 00023930: 3c2f 613e 3c68 3220 636c 6173 733d 2273

    Relation │ │ │ 00023950: 2062 6574 7765 656e 2061 7263 7461 6e67 between arctang │ │ │ 00023960: 656e 7420 616e 6420 7369 6e65 2061 6e64 ent and sine and │ │ │ 00023970: 2063 6f73 696e 653c 2f68 323e 0a0a 3c2f cosine

    ...
    ..
    .< │ │ │ @@ -9283,15 +9283,15 @@ │ │ │ 00024420: 6238 6133 6133 6335 3165 3536 3039 6135 b8a3a3c51e5609a5 │ │ │ 00024430: 3039 223e 3c73 7061 6e20 636c 6173 733d 09">..< │ │ │ 00024460: 2f61 3e29 2e3c 6272 2f3e 0a0a 3c62 722f /a>).
    ..
    .
    ..
    .< │ │ │ +00024490: 643d 226c 6162 3438 3822 3e3c 2f61 3e3c d="lab488">< │ │ │ 000244a0: 6831 2063 6c61 7373 3d22 7365 6374 696f h1 class="sectio │ │ │ 000244b0: 6e22 3e44 6566 696e 6974 696f 6e20 6f66 n">Definition of │ │ │ 000244c0: 2061 7263 7369 6e65 2062 6173 6564 206f arcsine based o │ │ │ 000244d0: 6e20 6172 6374 616e 6765 6e74 3c2f 6831 n arctangent..
    .. asin is defi │ │ │ @@ -9459,15 +9459,15 @@ │ │ │ 00024f20: 3664 6232 3762 3861 3361 3363 3531 6535 6db27b8a3a3c51e5 │ │ │ 00024f30: 3630 3961 3530 3922 3e3c 7370 616e 2063 609a509">..
    )).
    │ │ │ 00024f70: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
    .
    .. │ │ │ 00024f80: 3c64 6976 2063 6c61 7373 3d22 646f 6322
    ..

    Relatio │ │ │ 00024fc0: 6e20 6265 7477 6565 6e20 6172 6373 696e n between arcsin │ │ │ 00024fd0: 2061 6e64 2061 7263 7461 6e67 656e 743c and arctangent< │ │ │ 00024fe0: 2f68 323e 0a0a 3c2f 6469 763e 0a3c 6469 /h2>..

    .. │ │ │ 00025000: 0a3c 6272 2f3e 0a3c 7370 616e 2063 6c61 .
    ...< │ │ │ 00025760: 2f73 7061 6e3e 3c2f 613e 2929 2e3c 6272 /span>)).
    ..
    .
    │ │ │ 00025780: 0a0a 3c64 6976 2063 6c61 7373 3d22 646f ..
    .

    .

    arcsi │ │ │ 000257c0: 6e65 206f 6620 7370 6563 6966 6963 2076 ne of specific v │ │ │ 000257d0: 616c 7565 733c 2f68 323e 0a0a 3c2f 6469 alues

    ...
    ..
    .Le │ │ │ @@ -9779,16 +9779,16 @@ │ │ │ 00026320: 663d 2243 6f71 2e52 6561 6c73 2e52 6174 f="Coq.Reals.Rat │ │ │ 00026330: 616e 2e68 746d 6c23 783a 3333 3522 3e3c an.html#x:335">< │ │ │ 00026340: 7370 616e 2063 6c61 7373 3d22 6964 2220 span class="id" │ │ │ 00026350: 7469 746c 653d 2276 6172 6961 626c 6522 title="variable" │ │ │ 00026360: 3e78 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 >x...
    .
    ..
    .

    .

    Boun │ │ │ 000263c0: 6473 206f 6620 6172 6373 696e 653c 2f68 ds of arcsine..

    .
    ..< │ │ │ 000263f0: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.Lemma/2.
    . │ │ │ 00027250: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
    .
    ..< │ │ │ 00027260: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -00027270: 0a3c 6120 6964 3d22 6c61 6233 3735 223e . │ │ │ +00027270: 0a3c 6120 6964 3d22 6c61 6234 3932 223e . │ │ │ 00027280: 3c2f 613e 3c68 3220 636c 6173 733d 2273

    arcsine │ │ │ 000272a0: 6973 2074 6865 206c 6566 7420 616e 6420 is the left and │ │ │ 000272b0: 7269 6768 7420 696e 7665 7273 6520 6f66 right inverse of │ │ │ 000272c0: 2073 696e 653c 2f68 323e 0a0a 3c2f 6469 sine

    ...
    ..
    .x. │ │ │ 00028000: 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 2f64
    ..
    ...
    .

    Re │ │ │ 00028050: 6c61 7469 6f6e 2062 6574 7765 656e 2061 lation between a │ │ │ 00028060: 7263 7369 6e2c 2063 6f73 696e 6520 616e rcsin, cosine an │ │ │ 00028070: 6420 7461 6e67 656e 743c 2f68 323e 0a0a d tangent

    .. │ │ │ 00028080: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
    .
    ..
    │ │ │ 000280a0: 0a3c 7370 616e 2063 6c61 7373 3d22 6964 . │ │ │ 00028e70: 3c73 7061 6e20 636c 6173 733d 2269 6422 ..) │ │ │ 00028ea0: 2e3c 6272 2f3e 0a0a 3c62 722f 3e0a 3c2f .
    ..
    ...
    .

    D │ │ │ 00028ef0: 6572 6976 6174 6976 6520 6f66 2061 7263 erivative of arc │ │ │ 00028f00: 7369 6e65 3c2f 6832 3e0a 0a3c 2f64 6976 sine

    ..
    .
    ..
    .Lem │ │ │ @@ -10693,15 +10693,15 @@ │ │ │ 00029c40: 3664 6232 3762 3861 3361 3363 3531 6535 6db27b8a3a3c51e5 │ │ │ 00029c50: 3630 3961 3530 3922 3e3c 7370 616e 2063 609a509">..).
    . │ │ │ 00029c90: 0a3c 6272 2f3e 0a3c 2f64 6976 3e0a 0a3c .
    .
    ..< │ │ │ 00029ca0: 6469 7620 636c 6173 733d 2264 6f63 223e div class="doc"> │ │ │ -00029cb0: 0a3c 6120 6964 3d22 6c61 6233 3738 223e . │ │ │ +00029cb0: 0a3c 6120 6964 3d22 6c61 6234 3935 223e . │ │ │ 00029cc0: 3c2f 613e 3c68 3120 636c 6173 733d 2273

    Definiti │ │ │ 00029ce0: 6f6e 206f 6620 6172 6363 6f73 696e 6520 on of arccosine │ │ │ 00029cf0: 6261 7365 6420 6f6e 2061 7263 7461 6e67 based on arctang │ │ │ 00029d00: 656e 743c 2f68 313e 0a0a 3c64 6976 2063 ent

    ..
    .. acos │ │ │ @@ -10847,15 +10847,15 @@ │ │ │ 0002a5e0: 3762 3861 3361 3363 3531 6535 3630 3961 7b8a3a3c51e5609a │ │ │ 0002a5f0: 3530 3922 3e3c 7370 616e 2063 6c61 7373 509">.. │ │ │ 0002a620: 3c2f 613e 2929 2e3c 6272 2f3e 0a0a 3c62 )).
    ...
    ..
    .

    Relation be │ │ │ 0002a680: 7477 6565 6e20 6172 6363 6f73 696e 652c tween arccosine, │ │ │ 0002a690: 2061 7263 7369 6e65 2061 6e64 2061 7263 arcsine and arc │ │ │ 0002a6a0: 7461 6e67 656e 743c 2f68 323e 0a0a 3c2f tangent

    ...
    ..
    .< │ │ │ @@ -11177,15 +11177,15 @@ │ │ │ 0002ba80: 436f 712e 5265 616c 732e 5261 7461 6e2e Coq.Reals.Ratan. │ │ │ 0002ba90: 6874 6d6c 2378 3a33 3438 223e 3c73 7061 html#x:348">x< │ │ │ 0002bac0: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>.
    │ │ │ 0002bad0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
    .
    .. │ │ │ 0002bae0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
    ..

    arccosi │ │ │ 0002bb20: 6e65 206f 6620 7370 6563 6966 6963 2076 ne of specific v │ │ │ 0002bb30: 616c 7565 733c 2f68 323e 0a0a 3c2f 6469 alues

    ...
    ..
    ./ │ │ │ 0002c730: 342e 3c62 722f 3e0a 0a3c 6272 2f3e 0a3c 4.
    ..
    .< │ │ │ 0002c740: 2f64 6976 3e0a 0a3c 6469 7620 636c 6173 /div>..
    .

    │ │ │ 0002c780: 426f 756e 6473 206f 6620 6172 6363 6f73 Bounds of arccos │ │ │ 0002c790: 696e 653c 2f68 323e 0a0a 3c2f 6469 763e ine

    ..
    │ │ │ 0002c7a0: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
    ..
    .Lemm │ │ │ @@ -11525,16 +11525,16 @@ │ │ │ 0002d040: 2243 6f71 2e52 6561 6c73 2e52 7472 6967 "Coq.Reals.Rtrig │ │ │ 0002d050: 6f31 2e68 746d 6c23 5049 223e 3c73 7061 o1.html#PI"> │ │ │ 0002d080: 5049 3c2f 7370 616e 3e3c 2f61 3e2e 3c62 PI...
    .
    ..
    .

    .

    arcc │ │ │ 0002d0e0: 6f73 696e 6520 6973 2074 6865 206c 6566 osine is the lef │ │ │ 0002d0f0: 7420 616e 6420 7269 6768 7420 696e 7665 t and right inve │ │ │ 0002d100: 7273 6520 6f66 2063 6f73 696e 653c 2f68 rse of cosine..

    .
    ..< │ │ │ 0002d130: 6272 2f3e 0a3c 7370 616e 2063 6c61 7373 br/>.x.
    .. │ │ │ 0002dc00: 3c62 722f 3e0a 3c2f 6469 763e 0a0a 3c64
    .
    ... │ │ │ -0002dc20: 3c61 2069 643d 226c 6162 3338 3322 3e3c < │ │ │ +0002dc20: 3c61 2069 643d 226c 6162 3530 3022 3e3c < │ │ │ 0002dc30: 2f61 3e3c 6832 2063 6c61 7373 3d22 7365 /a>

    Relation │ │ │ 0002dc50: 6265 7477 6565 6e20 6172 6363 6f73 696e between arccosin │ │ │ 0002dc60: 652c 2073 696e 6520 616e 6420 7461 6e67 e, sine and tang │ │ │ 0002dc70: 656e 743c 2f68 323e 0a0a 3c2f 6469 763e ent

    ..
    │ │ │ 0002dc80: 0a3c 6469 7620 636c 6173 733d 2263 6f64 .
    ..
    .x< │ │ │ 0002ea90: 2f73 7061 6e3e 3c2f 613e 2e3c 6272 2f3e /span>
    .
    │ │ │ 0002eaa0: 0a0a 3c62 722f 3e0a 3c2f 6469 763e 0a0a ..
    .
    .. │ │ │ 0002eab0: 3c64 6976 2063 6c61 7373 3d22 646f 6322
    ..

    Derivat │ │ │ 0002eaf0: 6976 6520 6f66 2061 7263 636f 7369 6e65 ive of arccosine │ │ │ 0002eb00: 3c2f 6832 3e0a 0a3c 2f64 6976 3e0a 3c64

    ..
    . │ │ │ 0002eb20: 0a0a 3c62 722f 3e0a 3c73 7061 6e20 636c ..
    .Require Export Rdefinitions.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Field operations

    │ │ │ +

    Field operations

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Addition

    │ │ │ +

    Addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Open Scope CReal_scope.
    │ │ │ │ │ │ @@ -137,15 +137,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Rplus_0_l: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication

    │ │ │ +

    Multiplication

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma Rmult_comm : forall r1 r2:R, r1 * r2 = r2 * r1.
    │ │ │ @@ -172,15 +172,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve R1_neq_R0: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Distributivity

    │ │ │ +

    Distributivity

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma
    │ │ │ @@ -188,19 +188,19 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Rmult_plus_distr_l: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order

    │ │ │ +

    Order

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Lower

    │ │ │ +

    Lower

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma Rlt_asym : forall r1 r2:R, r1 < r2 -> ~ r2 < r1.
    │ │ │ @@ -218,15 +218,15 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Rlt_asym Rplus_lt_compat_l Rmult_lt_compat_l: real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injection from N to R

    │ │ │ +

    Injection from N to R

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Fixpoint INR (n:nat) : R :=
    │ │ │ @@ -237,15 +237,15 @@ │ │ │   end.
    │ │ │ Arguments INR n%_nat.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    R Archimedean

    │ │ │ +

    R Archimedean

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Rrepr_INR : forall n : nat,
    │ │ │     CRealEq (Rrepr (INR n)) (inject_Z (Z.of_nat n)).
    │ │ │ @@ -265,15 +265,15 @@ │ │ │
    │ │ │ Lemma archimed : forall r:R, IZR (up r) > r /\ IZR (up r) - r <= 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    R Complete

    │ │ │ +

    R Complete

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition is_upper_bound (E:R -> Prop) (m:R) := forall x:R, E x -> x <= m.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rbasic_fun.html │ │ │ @@ -61,15 +61,15 @@ │ │ │
    │ │ │ Implicit Type r : R.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rmin

    │ │ │ +

    Rmin

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition Rmin (x y:R) : R :=
    │ │ │ @@ -127,15 +127,15 @@ │ │ │
    │ │ │ Lemma Rmin_glb_lt : forall x y z:R, z < x -> z < y -> z < Rmin x y.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rmax

    │ │ │ +

    Rmax

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition Rmax (x y:R) : R :=
    │ │ │ @@ -199,15 +199,15 @@ │ │ │
    │ │ │ Lemma Rmax_neg : forall x y:R, x < 0 -> y < 0 -> Rmax x y < 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rabsolu

    │ │ │ +

    Rabsolu

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma Rcase_abs : forall r, {r < 0} + {r >= 0}.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rdefinitions.html │ │ │ @@ -174,15 +174,15 @@ │ │ │ Notation "x < y < z" := (x < y /\ y < z) : R_scope.
    │ │ │ Notation "x < y <= z" := (x < y /\ y <= z) : R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Injection from Z to R

    │ │ │ +

    Injection from Z to R

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint IPR_2 (p:positive) : R :=
    │ │ │   match p with
    │ │ │ @@ -262,15 +262,15 @@ │ │ │
    │ │ │ Definition Q2R (x : Q) : R := (IZR (Qnum x) * / IZR (QDen x))%R.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Number notation for constants

    │ │ │ +

    Number notation for constants

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive IR :=
    │ │ │   | IRZ : IZ -> IR
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rfunctions.html │ │ │ @@ -70,15 +70,15 @@ │ │ │ Local Open Scope nat_scope.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Lemmas about factorial

    │ │ │ +

    Lemmas about factorial

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma INR_fact_neq_0 : forall n:nat, INR (fact n) <> 0.
    │ │ │ │ │ │
    │ │ │ Lemma fact_simpl : forall n:nat, fact (S n) = (S n * fact n)%nat.
    │ │ │ @@ -87,15 +87,15 @@ │ │ │ Lemma simpl_fact :
    │ │ │   forall n:nat, / INR (fact (S n)) * / / INR (fact n) = / INR (S n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power

    │ │ │ +

    Power

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Infix "^" := pow : R_scope.
    │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │
    │ │ │ Lemma Rsqr_pow2 : forall x, Rsqr x = x ^ 2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    PowerRZ

    │ │ │ +

    PowerRZ

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section PowerRZ.
    │ │ │ │ │ │ @@ -375,15 +375,15 @@ │ │ │
    │ │ │ Definition decimal_exp (r:R) (z:Z) : R := (r * 10 ^Z z).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sum of n first naturals

    │ │ │ +

    Sum of n first naturals

    │ │ │ │ │ │
    │ │ │
    │ │ │ Fixpoint sum_nat_f_O (f:nat -> nat) (n:nat) : nat :=
    │ │ │   match n with
    │ │ │     | O => f 0%nat
    │ │ │     | S n' => (sum_nat_f_O f n' + f (S n'))%nat
    │ │ │ @@ -399,15 +399,15 @@ │ │ │
    │ │ │ Definition sum_nat (s n:nat) : nat := sum_nat_f s n (fun x:nat => x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sum

    │ │ │ +

    Sum

    │ │ │ │ │ │
    │ │ │
    │ │ │ Fixpoint sum_f_R0 (f:nat -> R) (N:nat) : R :=
    │ │ │   match N with
    │ │ │     | O => f 0%nat
    │ │ │     | S i => sum_f_R0 f i + f (S i)
    │ │ │ @@ -427,15 +427,15 @@ │ │ │   forall (x:nat -> R) (n:nat),
    │ │ │     Rabs (sum_f_R0 x n) <= sum_f_R0 (fun i:nat => Rabs (x i)) n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Distance in R

    │ │ │ +

    Distance in R

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition Rdist (x y:R) : R := Rabs (x - y).
    │ │ │ @@ -473,15 +473,15 @@ │ │ │ Notation R_dist_plus := Rdist_plus (only parsing).
    │ │ │ Notation R_dist_mult_l := Rdist_mult_l (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Infinite Sum

    │ │ │ +

    Infinite Sum

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition infinite_sum (s:nat -> R) (l:R) : Prop :=
    │ │ │   forall eps:R,
    │ │ │     eps > 0 ->
    │ │ │     exists N : nat,
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rgeom.html │ │ │ @@ -53,15 +53,15 @@ │ │ │ Require Import R_sqrt.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Distance

    │ │ │ +

    Distance

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition dist_euc (x0 y0 x1 y1:R) : R :=
    │ │ │   sqrt (Rsqr (x0 - x1) + Rsqr (y0 - y1)).
    │ │ │ @@ -87,15 +87,15 @@ │ │ │   forall x0 y0 x1 y1 x2 y2:R,
    │ │ │     dist_euc x0 y0 x1 y1 <= dist_euc x0 y0 x2 y2 + dist_euc x2 y2 x1 y1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Translation

    │ │ │ +

    Translation

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition xt (x tx:R) : R := x + tx.
    │ │ │ Definition yt (y ty:R) : R := y + ty.
    │ │ │ @@ -109,15 +109,15 @@ │ │ │     Rsqr (x1 - x2) + Rsqr (y1 - y2) =
    │ │ │     Rsqr (xt x1 tx - xt x2 tx) + Rsqr (yt y1 ty - yt y2 ty).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Rotation

    │ │ │ +

    Rotation

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition xr (x y theta:R) : R := x * cos theta + y * sin theta.
    │ │ │ Definition yr (x y theta:R) : R := - x * sin theta + y * cos theta.
    │ │ │ @@ -143,15 +143,15 @@ │ │ │     dist_euc (xr x1 y1 theta) (yr x1 y1 theta) (xr x2 y2 theta)
    │ │ │     (yr x2 y2 theta).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Similarity

    │ │ │ +

    Similarity

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma isometric_rot_trans :
    │ │ │   forall x1 y1 x2 y2 tx ty theta:R,
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.RiemannInt_SF.html │ │ │ @@ -58,15 +58,15 @@ │ │ │
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Each bounded subset of N has a maximal element

    │ │ │ +

    Each bounded subset of N has a maximal element

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Nbound (I:nat -> Prop) : Prop :=
    │ │ │   exists n : nat, (forall i:nat, I i -> (i <= n)%nat).
    │ │ │ @@ -80,15 +80,15 @@ │ │ │     (exists n : nat, I n) ->
    │ │ │     Nbound I -> { n:nat | I n /\ (forall i:nat, I i -> (i <= n)%nat) }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Step functions

    │ │ │ +

    Step functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition open_interval (a b x:R) : Prop := a < x < b.
    │ │ │ Definition co_interval (a b x:R) : Prop := a <= x < b.
    │ │ │ @@ -120,15 +120,15 @@ │ │ │ Definition IsStepFun (f:R -> R) (a b:R) : Type :=
    │ │ │   { l:list R & is_subdivision f a b l }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Class of step functions

    │ │ │ +

    Class of step functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Record StepFun (a b:R) : Type := mkStepFun
    │ │ │   {fe :> R -> R; pre : IsStepFun fe a b}.
    │ │ │ │ │ │
    │ │ │ @@ -152,29 +152,29 @@ │ │ │       end
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Integral of step functions

    │ │ │ +

    Integral of step functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition RiemannInt_SF (a b:R) (f:StepFun a b) : R :=
    │ │ │   match Rle_dec a b with
    │ │ │     | left _ => Int_SF (subdivision_val f) (subdivision f)
    │ │ │     | right _ => - Int_SF (subdivision_val f) (subdivision f)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of step functions

    │ │ │ +

    Properties of step functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma StepFun_P1 :
    │ │ │   forall (a b:R) (f:StepFun a b),
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rlimit.html │ │ │ @@ -59,15 +59,15 @@ │ │ │ Require Import Lra.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Calculus

    │ │ │ +

    Calculus

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma eps2_Rgt_R0 : forall eps:R, eps > 0 -> eps * / 2 > 0.
    │ │ │ │ │ │
    │ │ │ Lemma eps2 : forall eps:R, eps * / 2 + eps * / 2 = eps.
    │ │ │ @@ -97,15 +97,15 @@ │ │ │ Lemma mul_factor_gt_f :
    │ │ │   forall eps l l':R, eps > 0 -> Rmin 1 (eps * mul_factor l l') > 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Metric space

    │ │ │ +

    Metric space

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Record Metric_Space : Type :=
    │ │ │ @@ -116,15 +116,15 @@ │ │ │     dist_refl : forall x y:Base, dist x y = 0 <-> x = y;
    │ │ │     dist_tri : forall x y z:Base, dist x y <= dist x z + dist z y}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Limit in Metric space

    │ │ │ +

    Limit in Metric space

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition limit_in (X X':Metric_Space) (f:Base X -> Base X')
    │ │ │ @@ -135,15 +135,15 @@ │ │ │       alp > 0 /\
    │ │ │       (forall x:Base X, D x /\ (dist X) x x0 < alp -> (dist X') (f x) l < eps).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    R is a metric space

    │ │ │ +

    R is a metric space

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ Definition R_met : Metric_Space :=
    │ │ │ @@ -151,15 +151,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Limit 1 arg

    │ │ │ +

    Limit 1 arg

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition Dgf (Df Dg:R -> Prop) (f:R -> R) (x:R) := Df x /\ Dg (f x).
    │ │ │ │ │ │
    │ │ │ Definition limit1_in (f:R -> R) (D:R -> Prop) (l x0:R) : Prop :=
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rlogic.html │ │ │ @@ -71,15 +71,15 @@ │ │ │
    │ │ │ Require Import RIneq.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Decidability of arithmetical statements

    │ │ │ +

    Decidability of arithmetical statements

    │ │ │ │ │ │
    │ │ │ │ │ │ One can iterate this lemma and use classical logic to decide any │ │ │ statement in the arithmetical hierarchy. │ │ │
    │ │ │
    │ │ │ @@ -97,15 +97,15 @@ │ │ │
    │ │ │ End Arithmetical_dec.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Derivability of the Archimedean axiom

    │ │ │ +

    Derivability of the Archimedean axiom

    │ │ │ │ │ │
    │ │ │ │ │ │ This is a standard proof (it has been taken from PlanetMath). It is │ │ │ formulated negatively so as to avoid the need for classical │ │ │ logic. Using a proof of {n | ~P n}+{forall n, P n}, we can in │ │ │ principle also derive up and its specification. The proof above │ │ │ @@ -117,15 +117,15 @@ │ │ │ Theorem not_not_archimedean :
    │ │ │   forall r : R, ~ (forall n : nat, (INR n <= r)%R).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Decidability of negated formulas

    │ │ │ +

    Decidability of negated formulas

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sig_not_dec : forall P : Prop, {not (not P)} + {not P}.
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rminmax.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Local Ltac Tauto.intuition_solver ::= auto with real.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Maximum and Minimum of two real numbers

    │ │ │ +

    Maximum and Minimum of two real numbers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │ @@ -108,15 +108,15 @@ │ │ │
    │ │ │ Include UsualMinMaxProperties R_as_OT RHasMinMax.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties specific to the R domain

    │ │ │ +

    Properties specific to the R domain

    │ │ │ │ │ │
    │ │ │ │ │ │ Compatibilities (consequences of monotonicity) │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rpower.html │ │ │ @@ -72,15 +72,15 @@ │ │ │
    │ │ │ Lemma exp_le_3 : exp 1 <= 3.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Exp

    │ │ │ +

    Properties of Exp

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma exp_neq_0 : forall x:R, exp x <> 0.
    │ │ │ │ │ │ @@ -125,15 +125,15 @@ │ │ │
    │ │ │ Theorem exp_Ropp : forall x:R, exp (- x) = / exp x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Ln

    │ │ │ +

    Properties of Ln

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem ln_increasing : forall x y:R, 0 < x -> x < y -> ln x < ln y.
    │ │ │ │ │ │ @@ -165,27 +165,27 @@ │ │ │ Theorem ln_continue :
    │ │ │   forall y:R, 0 < y -> continue_in ln (fun x:R => 0 < x) y.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of Rpower

    │ │ │ +

    Definition of Rpower

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Rpower (x y:R) := exp (y * ln x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Rpower

    │ │ │ +

    Properties of Rpower

    │ │ │ │ │ │
    │ │ │ │ │ │ Note: Rpower is prolongated to 1 on negative real numbers and │ │ │ it thus does not extend integer power. The next two lemmas, which │ │ │ hold for integer power, accidentally hold on negative real numbers │ │ │ as a side effect of the default value taken on negative real │ │ │ @@ -244,15 +244,15 @@ │ │ │
    │ │ │ Theorem ln_lt_2 : / 2 < ln 2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Differentiability of Ln and Rpower

    │ │ │ +

    Differentiability of Ln and Rpower

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem limit1_ext :
    │ │ │   forall (f g:R -> R) (D:R -> Prop) (l x:R),
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rseries.html │ │ │ @@ -54,15 +54,15 @@ │ │ │
    │ │ │ Implicit Type r : R.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of sequence and properties

    │ │ │ +

    Definition of sequence and properties

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section sequence.
    │ │ │ │ │ │ @@ -126,15 +126,15 @@ │ │ │
    │ │ │ End sequence.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of Power Series and properties

    │ │ │ +

    Definition of Power Series and properties

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Isequence.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rtopology.html │ │ │ @@ -55,15 +55,15 @@ │ │ │ Require Import Classical_Pred_Type.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    General definitions and propositions

    │ │ │ +

    General definitions and propositions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition included (D1 D2:R -> Prop) : Prop := forall x:R, D1 x -> D2 x.
    │ │ │ Definition disc (x:R) (delta:posreal) (y:R) : Prop := Rabs (y - x) < delta.
    │ │ │ @@ -303,15 +303,15 @@ │ │ │     (forall c:R, a <= c <= b -> continuity_pt f c) ->
    │ │ │     exists mx : R, (forall c:R, a <= c <= b -> f mx <= f c) /\ a <= mx <= b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proof of Bolzano-Weierstrass theorem

    │ │ │ +

    Proof of Bolzano-Weierstrass theorem

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition ValAdh (un:nat -> R) (x:R) : Prop :=
    │ │ │   forall (V:R -> Prop) (N:nat),
    │ │ │ @@ -376,15 +376,15 @@ │ │ │   forall (un:nat -> R) (X:R -> Prop),
    │ │ │     compact X -> (forall n:nat, X (un n)) -> exists l : R, ValAdh un l.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proof of Heine's theorem

    │ │ │ +

    Proof of Heine's theorem

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition uniform_continuity (f:R -> R) (X:R -> Prop) : Prop :=
    │ │ │   forall eps:posreal,
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rtrigo1.html │ │ │ @@ -160,15 +160,15 @@ │ │ │     1 - tan x * tan y <> 0 ->
    │ │ │     tan (x + y) = (tan x + tan y) / (1 - tan x * tan y).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some properties of cos, sin and tan

    │ │ │ +

    Some properties of cos, sin and tan

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sin_2a : forall x:R, sin (2 * x) = 2 * sin x * cos x.
    │ │ │ │ │ │ @@ -254,15 +254,15 @@ │ │ │
    │ │ │ Lemma cos_sin_0_var : forall x:R, cos x <> 0 \/ sin x <> 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Using series definitions of cos and sin

    │ │ │ +

    Using series definitions of cos and sin

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition sin_lb (a:R) : R := sin_approx a 3.
    │ │ │ Definition sin_ub (a:R) : R := sin_approx a 4.
    │ │ │ @@ -288,15 +288,15 @@ │ │ │
    │ │ │ Lemma PI2_Rlt_PI : PI / 2 < PI.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Increasing and decreasing of cos and sin

    │ │ │ +

    Increasing and decreasing of cos and sin

    │ │ │ │ │ │
    │ │ │
    │ │ │ Theorem sin_gt_0 : forall x:R, 0 < x -> x < PI -> 0 < sin x.
    │ │ │ │ │ │
    │ │ │ Theorem cos_gt_0 : forall x:R, - (PI / 2) < x -> x < PI / 2 -> 0 < cos x.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rtrigo_def.html │ │ │ @@ -50,15 +50,15 @@ │ │ │ Require Import Lra Lia.
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of exponential

    │ │ │ +

    Definition of exponential

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition exp_in (x l:R) : Prop :=
    │ │ │   infinite_sum (fun i:nat => / INR (fact i) * x ^ i) l.
    │ │ │ │ │ │
    │ │ │ @@ -76,15 +76,15 @@ │ │ │
    │ │ │ Lemma exp_0 : exp 0 = 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of hyperbolic functions

    │ │ │ +

    Definition of hyperbolic functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ Definition cosh (x:R) : R := (exp x + exp (- x)) / 2.
    │ │ │ Definition sinh (x:R) : R := (exp x - exp (- x)) / 2.
    │ │ │ Definition tanh (x:R) : R := sinh x / cosh x.
    │ │ │ │ │ │ @@ -150,15 +150,15 @@ │ │ │
    │ │ │ Definition sin (x:R) : R := let (a,_) := exist_sin (Rsqr x) in x * a.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties

    │ │ │ +

    Properties

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma cos_sym : forall x:R, cos x = cos (- x).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Reals.Rtrigo_facts.html │ │ │ @@ -57,15 +57,15 @@ │ │ │
    │ │ │ Local Open Scope R_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Bounds of expressions with trigonometric functions

    │ │ │ +

    Bounds of expressions with trigonometric functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sin2_bound : forall x,
    │ │ │   0 <= (sin x <= 1.
    │ │ │ @@ -74,19 +74,19 @@ │ │ │ Lemma cos2_bound : forall x,
    │ │ │   0 <= (cos x <= 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Express trigonometric functions with each other

    │ │ │ +

    Express trigonometric functions with each other

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Express sin and cos with each other

    │ │ │ +

    Express sin and cos with each other

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma cos_sin : forall x, cos x >=0 ->
    │ │ │   cos x = sqrt(1 - (sin x).
    │ │ │ @@ -111,15 +111,15 @@ │ │ │ Lemma sin_cos_Rabs : forall x,
    │ │ │   Rabs (sin x) = sqrt(1 - (cos x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Express tan with sin and cos

    │ │ │ +

    Express tan with sin and cos

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma tan_sin : forall x, 0 <= cos x ->
    │ │ │   tan x = sin x / sqrt (1 - (sin x).
    │ │ │ @@ -144,15 +144,15 @@ │ │ │ Lemma tan_cos_opp : forall x, 0 >= sin x ->
    │ │ │   tan x = - sqrt (1 - (cos x) / cos x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Express sin and cos with tan

    │ │ │ +

    Express sin and cos with tan

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sin_tan : forall x, 0 < cos x ->
    │ │ │   sin x = tan x / sqrt (1 + (tan x).
    │ │ │ @@ -161,15 +161,15 @@ │ │ │ Lemma cos_tan : forall x, 0 < cos x ->
    │ │ │   cos x = 1 / sqrt (1 + (tan x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Additional shift lemmas for sin, cos, tan

    │ │ │ +

    Additional shift lemmas for sin, cos, tan

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sin_pi_minus : forall x,
    │ │ │   sin (PI - x) = sin x.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Relations.Operators_Properties.html │ │ │ @@ -45,16 +45,16 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some properties of the operators on relations

    │ │ │ -

    Initial version by Bruno Barras

    │ │ │ +

    Some properties of the operators on relations

    │ │ │ +

    Initial version by Bruno Barras

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require Import Relation_Definitions.
    │ │ │ Require Import Relation_Operators.
    │ │ │ @@ -177,20 +177,20 @@ │ │ │
    │ │ │   Section Equivalences.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Equivalences between the different definition of the reflexive,

    │ │ │ +

    Equivalences between the different definition of the reflexive,

    │ │ │ │ │ │ symmetric, transitive closures │ │ │
    │ │ │ │ │ │ -

    Contributed by P. Castéran

    │ │ │ +

    Contributed by P. Castéran

    │ │ │ │ │ │
    │ │ │ │ │ │ Direct transitive closure vs left-step extension │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Relations.Relation_Operators.html │ │ │ @@ -45,34 +45,34 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some operators on relations

    │ │ │ -

    Initial authors: Bruno Barras, Cristina Cornes

    │ │ │ -

    │ │ │ -

    Some of the initial definitions were taken from :

    │ │ │ -

    Constructing Recursion Operators in Type Theory

    │ │ │ -

    L. Paulson JSC (1986) 2, 325-355

    │ │ │ -

    │ │ │ -

    Further extensions by Pierre Castéran

    │ │ │ +

    Some operators on relations

    │ │ │ +

    Initial authors: Bruno Barras, Cristina Cornes

    │ │ │ +

    │ │ │ +

    Some of the initial definitions were taken from :

    │ │ │ +

    Constructing Recursion Operators in Type Theory

    │ │ │ +

    L. Paulson JSC (1986) 2, 325-355

    │ │ │ +

    │ │ │ +

    Further extensions by Pierre Castéran

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require Import Relation_Definitions.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Transitive closure

    │ │ │ +

    Transitive closure

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Transitive_Closure.
    │ │ │   Variable A : Type.
    │ │ │ @@ -120,15 +120,15 @@ │ │ │
    │ │ │ End Transitive_Closure.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Reflexive closure

    │ │ │ +

    Reflexive closure

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Reflexive_Closure.
    │ │ │   Variable A : Type.
    │ │ │ @@ -150,15 +150,15 @@ │ │ │
    │ │ │ End Reflexive_Closure.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Reflexive-transitive closure

    │ │ │ +

    Reflexive-transitive closure

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Reflexive_Transitive_Closure.
    │ │ │   Variable A : Type.
    │ │ │ @@ -210,15 +210,15 @@ │ │ │
    │ │ │ End Reflexive_Transitive_Closure.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Reflexive-symmetric-transitive closure

    │ │ │ +

    Reflexive-symmetric-transitive closure

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Reflexive_Symmetric_Transitive_Closure.
    │ │ │   Variable A : Type.
    │ │ │ @@ -272,15 +272,15 @@ │ │ │
    │ │ │ End Reflexive_Symmetric_Transitive_Closure.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Converse of a relation

    │ │ │ +

    Converse of a relation

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Converse.
    │ │ │   Variable A : Type.
    │ │ │ @@ -290,15 +290,15 @@ │ │ │   Definition transp (x y:A) := R y x.
    │ │ │ End Converse.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Union of relations

    │ │ │ +

    Union of relations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Union.
    │ │ │   Variable A : Type.
    │ │ │ @@ -308,15 +308,15 @@ │ │ │   Definition union (x y:A) := R1 x y \/ R2 x y.
    │ │ │ End Union.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Disjoint union of relations

    │ │ │ +

    Disjoint union of relations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Disjoint_Union.
    │ │ │ Variables A B : Type.
    │ │ │ @@ -332,15 +332,15 @@ │ │ │
    │ │ │ End Disjoint_Union.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Lexicographic order on dependent pairs

    │ │ │ +

    Lexicographic order on dependent pairs

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Lexicographic_Product.
    │ │ │ │ │ │ @@ -365,15 +365,15 @@ │ │ │
    │ │ │ End Lexicographic_Product.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Lexicographic order on pairs

    │ │ │ +

    Lexicographic order on pairs

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Simple_Lexicographic_Product.
    │ │ │ │ │ │ @@ -400,15 +400,15 @@ │ │ │
    │ │ │ End Simple_Lexicographic_Product.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Product of relations

    │ │ │ +

    Product of relations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Symmetric_Product.
    │ │ │   Variable A : Type.
    │ │ │ @@ -426,15 +426,15 @@ │ │ │
    │ │ │ End Symmetric_Product.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiset of two relations

    │ │ │ +

    Multiset of two relations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Section Swap.
    │ │ │   Variable A : Type.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.CPermutation.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Circular Shifts (aka Cyclic Permutations)

    │ │ │ +

    Circular Shifts (aka Cyclic Permutations)

    │ │ │ │ │ │
    │ │ │ │ │ │ The main inductive CPermutation relates lists up to circular shifts of their elements. │ │ │ │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Heap.html │ │ │ @@ -70,19 +70,19 @@ │ │ │
    │ │ │ Section defs.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Trees and heap trees

    │ │ │ +

    Trees and heap trees

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Definition of trees over an ordered set

    │ │ │ +

    Definition of trees over an ordered set

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Variable A : Type.
    │ │ │   Variable leA : relation A.
    │ │ │ @@ -139,15 +139,15 @@ │ │ │   Lemma leA_Tree_Node :
    │ │ │     forall (a b:A) (G D:Tree), leA a b -> leA_Tree a (Tree_Node b G D).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The heap property

    │ │ │ +

    The heap property

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Inductive is_heap : Tree -> Prop :=
    │ │ │     | nil_is_heap : is_heap Tree_Leaf
    │ │ │ @@ -191,15 +191,15 @@ │ │ │   Lemma low_trans :
    │ │ │     forall (T:Tree) (a b:A), leA a b -> leA_Tree b T -> leA_Tree a T.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Merging two sorted lists

    │ │ │ +

    Merging two sorted lists

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │    Inductive merge_lem (l1 l2:list A) : Type :=
    │ │ │     merge_exist :
    │ │ │ @@ -223,15 +223,15 @@ │ │ │     forall l1:list A, Sorted leA l1 ->
    │ │ │     forall l2:list A, Sorted leA l2 -> merge_lem l1 l2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From trees to multisets

    │ │ │ +

    From trees to multisets

    │ │ │ │ │ │
    │ │ │ │ │ │ contents of a tree as a multiset │ │ │
    │ │ │ │ │ │ Nota Bene : In what follows the definition of SingletonBag │ │ │ @@ -259,19 +259,19 @@ │ │ │   #[deprecated(since="8.3", note="Use mergesort.v")]
    │ │ │   Definition equiv_Tree (t1 t2:Tree) := meq (contents t1) (contents t2).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From lists to sorted lists

    │ │ │ +

    From lists to sorted lists

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Specification of heap insertion

    │ │ │ +

    Specification of heap insertion

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Inductive insert_spec (a:A) (T:Tree) : Type :=
    │ │ │     insert_exist :
    │ │ │ @@ -285,15 +285,15 @@ │ │ │   #[deprecated(since="8.3", note="Use mergesort.v")]
    │ │ │   Lemma insert : forall T:Tree, is_heap T -> forall a:A, insert_spec a T.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Building a heap from a list

    │ │ │ +

    Building a heap from a list

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Inductive build_heap (l:list A) : Type :=
    │ │ │     heap_exist :
    │ │ │ @@ -305,15 +305,15 @@ │ │ │   #[deprecated(since="8.3", note="Use mergesort.v")]
    │ │ │   Lemma list_to_heap : forall l:list A, build_heap l.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Building the sorted list

    │ │ │ +

    Building the sorted list

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Inductive flat_spec (T:Tree) : Type :=
    │ │ │     flat_exist :
    │ │ │ @@ -326,15 +326,15 @@ │ │ │   #[deprecated(since="8.3", note="Use mergesort.v")]
    │ │ │   Lemma heap_to_list : forall T:Tree, is_heap T -> flat_spec T.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of treesort

    │ │ │ +

    Specification of treesort

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   #[deprecated(since="8.3", note="Use mergesort.v")]
    │ │ │   Theorem treesort :
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.PermutSetoid.html │ │ │ @@ -85,15 +85,15 @@ │ │ │
    │ │ │ Section Permut.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From lists to multisets

    │ │ │ +

    From lists to multisets

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Variable A : Type.
    │ │ │ Variable eqA : relation A.
    │ │ │ @@ -124,15 +124,15 @@ │ │ │   forall l m:list A,
    │ │ │     meq (list_contents (l ++ m)) (munion (list_contents l) (list_contents m)).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    permutation: definition and basic properties

    │ │ │ +

    permutation: definition and basic properties

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition permutation (l m:list A) := meq (list_contents l) (list_contents m).
    │ │ │ │ │ │ @@ -198,15 +198,15 @@ │ │ │ Lemma permut_rev :
    │ │ │   forall l, permutation l (rev l).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some inversion results.

    │ │ │ +

    Some inversion results.

    │ │ │ │ │ │
    │ │ │
    │ │ │ Lemma permut_conv_inv :
    │ │ │   forall e l1 l2, permutation (e :: l1) (e :: l2) -> permutation l1 l2.
    │ │ │ │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Sorting.Permutation.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    List permutations as a composition of adjacent transpositions

    │ │ │ +

    List permutations as a composition of adjacent transpositions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.Ascii.html │ │ │ @@ -58,15 +58,15 @@ │ │ │ Require Import Bool BinPos BinNat PeanoNat Nnat Coq.Strings.Byte.
    │ │ │ Import IfNotations.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of ascii characters

    │ │ │ +

    Definition of ascii characters

    │ │ │ │ │ │
    │ │ │ │ │ │ Definition of ascii character as a 8 bits constructor │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -138,15 +138,15 @@ │ │ │ Lemma eqb_neq x y : (x =? y)%char = false <-> x <> y.
    │ │ │ Lemma eqb_compat: Morphisms.Proper (Morphisms.respectful eq (Morphisms.respectful eq eq)) eqb.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion between natural numbers modulo 256 and ascii characters

    │ │ │ +

    Conversion between natural numbers modulo 256 and ascii characters

    │ │ │ │ │ │
    │ │ │ │ │ │ Auxiliary function that turns a positive into an ascii by │ │ │ looking at the last 8 bits, ie z mod 2^8 │ │ │
    │ │ │
    │ │ │ @@ -280,15 +280,15 @@ │ │ │ Infix "<?" := ltb : char_scope.
    │ │ │ Infix "<=?" := leb : char_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Concrete syntax

    │ │ │ +

    Concrete syntax

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ Ascii characters can be represented in scope char_scope as follows: │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PString.html │ │ │ @@ -124,15 +124,15 @@ │ │ │   to_Z (length s1) + to_Z (length s2) <= to_Z max_length ->
    │ │ │   to_list (cat s1 s2) = to_list s1 ++ to_list s2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of string length

    │ │ │ +

    Properties of string length

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma valid_length (s : string) :
    │ │ │   to_Z (length s) <= to_Z max_length.
    │ │ │ @@ -165,15 +165,15 @@ │ │ │   to_Z (length s1) + to_Z (length s2) <= to_Z max_length ->
    │ │ │   length (cat s1 s2) = (length s1 + length s2)%uint63.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of string get

    │ │ │ +

    Properties of string get

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma get_char63_valid (s : string) (i : int) :
    │ │ │   char63_valid (get s i).
    │ │ │ @@ -208,15 +208,15 @@ │ │ │   to_Z i < to_Z max_length ->
    │ │ │   get (cat s1 s2) i = get s2 (i - length s1).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of string comparison

    │ │ │ +

    Properties of string comparison

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma char63_compare_refl (c1 c2 : char63) :
    │ │ │   char63_compare c1 c2 = Eq <-> c1 = c2.
    │ │ │ @@ -289,27 +289,27 @@ │ │ │       to_Z i < to_Z (length s2) /\
    │ │ │       char63_compare (get s1 i) (get s2 i) = Lt)).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of make

    │ │ │ +

    Properties of make

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma make_0 (c : char63) : make 0 c = ""%pstring.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of cat

    │ │ │ +

    Properties of cat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma length_0_empty (s : string) : length s = 0%uint63 -> s = ""%pstring.
    │ │ │ │ │ │ @@ -323,15 +323,15 @@ │ │ │ Lemma cat_assoc (s1 s2 s3 : string) :
    │ │ │   cat (cat s1 s2) s3 = cat s1 (cat s2 s3).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of sub

    │ │ │ +

    Properties of sub

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sub_full (s : string) : sub s 0 (length s) = s.
    │ │ │ │ │ │ @@ -371,15 +371,15 @@ │ │ │   (to_Z (length s1) + to_Z (length s2) <= to_Z max_length)%Z ->
    │ │ │   to_list (cat s1 s2) = app (to_list s1) (to_list s2).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Ordered type

    │ │ │ +

    Ordered type

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require OrderedType.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.PrimStringAxioms.html │ │ │ @@ -52,15 +52,15 @@ │ │ │ Definition char63_valid (c : char63) :=
    │ │ │   (c land 255 = c)%uint63.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion to / from lists

    │ │ │ +

    Conversion to / from lists

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition to_list (s : string) : list char63 :=
    │ │ │   List.map (fun i => get s (of_nat i)) (List.seq 0 (to_nat (length s))).
    │ │ │ @@ -87,15 +87,15 @@ │ │ │   forall (s : string),
    │ │ │     List.Forall char63_valid (to_list s).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Axioms relating string operations with list operations

    │ │ │ +

    Axioms relating string operations with list operations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Axiom length_spec :
    │ │ │   forall (s : string),
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Strings.String.html │ │ │ @@ -61,15 +61,15 @@ │ │ │ Require Import Coq.Strings.Byte.
    │ │ │ Import IfNotations.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of strings

    │ │ │ +

    Definition of strings

    │ │ │ │ │ │
    │ │ │ │ │ │ Implementation of string as list of ascii characters │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -132,15 +132,15 @@ │ │ │ Lemma eqb_neq x y : (x =? y)%string = false <-> x <> y.
    │ │ │ Lemma eqb_compat: Morphisms.Proper (Morphisms.respectful eq (Morphisms.respectful eq eq)) eqb.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compare strings lexicographically

    │ │ │ +

    Compare strings lexicographically

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint compare (s1 s2 : string) : comparison :=
    │ │ │   match s1, s2 with
    │ │ │ @@ -182,15 +182,15 @@ │ │ │ Infix "<?" := ltb : string_scope.
    │ │ │ Infix "<=?" := leb : string_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Concatenation of strings

    │ │ │ +

    Concatenation of strings

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Reserved Notation "x ++ y" (right associativity, at level 60).
    │ │ │ │ │ │ @@ -273,15 +273,15 @@ │ │ │  forall (s1 s2 : string) (n : nat),
    │ │ │  get n s2 = get (n + length s1) (s1 ++ s2).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Substrings

    │ │ │ +

    Substrings

    │ │ │ │ │ │
    │ │ │ │ │ │ substring n m s returns the substring of s that starts │ │ │ at position n and of length m; │ │ │ if this does not make sense it returns "" │ │ │
    │ │ │ @@ -322,15 +322,15 @@ │ │ │ Theorem substring_correct2 :
    │ │ │  forall (s : string) (n m p : nat), m <= p -> get p (substring n m s) = None.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Concatenating lists of strings

    │ │ │ +

    Concatenating lists of strings

    │ │ │ │ │ │
    │ │ │ │ │ │ concat sep sl concatenates the list of strings sl, inserting │ │ │ the separator string sep between each. │ │ │
    │ │ │
    │ │ │ @@ -343,15 +343,15 @@ │ │ │   | cons x xs => x ++ sep ++ concat sep xs
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Test functions

    │ │ │ +

    Test functions

    │ │ │ │ │ │
    │ │ │ │ │ │ Test if s1 is a prefix of s2 │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -495,15 +495,15 @@ │ │ │   | None => O
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversion to/from list ascii and list byte

    │ │ │ +

    Conversion to/from list ascii and list byte

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint string_of_list_ascii (s : list ascii) : string
    │ │ │   := match s with
    │ │ │ @@ -538,15 +538,15 @@ │ │ │
    │ │ │ Lemma list_byte_of_string_of_list_byte s : list_byte_of_string (string_of_list_byte s) = s.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Concrete syntax

    │ │ │ +

    Concrete syntax

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ The concrete syntax for strings in scope string_scope follows the │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableType.html │ │ │ @@ -56,39 +56,39 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ NB: This file is here only for compatibility with earlier version of │ │ │ FSets and FMap. Please use Structures/Equalities.v directly now. │ │ │
    │ │ │ │ │ │ -

    Types with Equalities, and nothing more (for subtyping purpose)

    │ │ │ +

    Types with Equalities, and nothing more (for subtyping purpose)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type EqualityType := Equalities.EqualityTypeOrig.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Types with decidable Equalities (but no ordering)

    │ │ │ +

    Types with decidable Equalities (but no ordering)

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type DecidableType := Equalities.DecidableTypeOrig.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Additional notions about keys and datas used in FMap

    │ │ │ +

    Additional notions about keys and datas used in FMap

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module KeyDecidableType(D:DecidableType).
    │ │ │  Import D.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.DecidableTypeEx.html │ │ │ @@ -53,15 +53,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ NB: This file is here only for compatibility with earlier version of │ │ │ FSets and FMap. Please use Structures/Equalities.v directly now. │ │ │
    │ │ │ │ │ │ -

    Examples of Decidable Type structures.

    │ │ │ +

    Examples of Decidable Type structures.

    │ │ │ │ │ │
    │ │ │ │ │ │ A particular case of DecidableType where │ │ │ the equality is the usual one of Coq. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Equalities.html │ │ │ @@ -65,29 +65,29 @@ │ │ │ Module Type Nop.
    │ │ │ End Nop.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Structure with just a base type t

    │ │ │ +

    Structure with just a base type t

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type Typ.
    │ │ │   Parameter Inline(10) t : Type.
    │ │ │ End Typ.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Structure with an equality relation eq

    │ │ │ +

    Structure with an equality relation eq

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type HasEq (Import T:Typ).
    │ │ │   Parameter Inline(30) eq : t -> t -> Prop.
    │ │ │ @@ -105,30 +105,30 @@ │ │ │
    │ │ │ Module Type Eq' := Eq <+ EqNotation.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of the equality via the Equivalence type class

    │ │ │ +

    Specification of the equality via the Equivalence type class

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type IsEq (Import E:Eq).
    │ │ │ #[global]
    │ │ │   Declare Instance eq_equiv : Equivalence eq.
    │ │ │ End IsEq.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Earlier specification of equality by three separate lemmas.

    │ │ │ +

    Earlier specification of equality by three separate lemmas.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type IsEqOrig (Import E:Eq').
    │ │ │   Axiom eq_refl : forall x : t, x==x.
    │ │ │ @@ -140,29 +140,29 @@ │ │ │   Hint Resolve eq_refl eq_trans : core.
    │ │ │ End IsEqOrig.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Types with decidable equality

    │ │ │ +

    Types with decidable equality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type HasEqDec (Import E:Eq').
    │ │ │   Parameter eq_dec : forall x y : t, { x==y } + { ~ x==y }.
    │ │ │ End HasEqDec.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Boolean Equality

    │ │ │ +

    Boolean Equality

    │ │ │ │ │ │
    │ │ │ │ │ │ Having eq_dec is the same as having a boolean equality plus │ │ │ a correctness proof. │ │ │
    │ │ │
    │ │ │ @@ -249,15 +249,15 @@ │ │ │  BooleanDecidableType <+ EqNotation <+ EqbNotation.
    │ │ │ Module Type DecidableTypeFull' := DecidableTypeFull <+ EqNotation.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility wrapper from/to the old version of

    │ │ │ +

    Compatibility wrapper from/to the old version of

    │ │ │ │ │ │ EqualityType and DecidableType │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module BackportEq (E:Eq)(F:IsEq E) <: IsEqOrig E.
    │ │ │ @@ -288,15 +288,15 @@ │ │ │ Module Update_DT (E:DecidableTypeOrig) <: DecidableTypeBoth
    │ │ │  := E <+ UpdateEq.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Having eq_dec is equivalent to having eqb and its spec.

    │ │ │ +

    Having eq_dec is equivalent to having eqb and its spec.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module HasEqDec2Bool (E:Eq)(F:HasEqDec E) <: HasEqBool E.
    │ │ │  Definition eqb x y := if F.eq_dec x y then true else false.
    │ │ │ @@ -386,15 +386,15 @@ │ │ │
    │ │ │ End BoolEqualityFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    UsualDecidableType

    │ │ │ +

    UsualDecidableType

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ A particular case of DecidableType where the equality is │ │ │ the usual one of Coq. │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.EqualitiesFacts.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Keys and datas used in the future MMaps

    │ │ │ +

    Keys and datas used in the future MMaps

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module KeyDecidableType(D:DecidableType).
    │ │ │ │ │ │ @@ -223,15 +223,15 @@ │ │ │
    │ │ │ End KeyDecidableType.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    PairDecidableType

    │ │ │ +

    PairDecidableType

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ From two decidable types, we can build a new DecidableType │ │ │ over their cartesian product. │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.GenericMinMax.html │ │ │ @@ -48,19 +48,19 @@ │ │ │
    │ │ │ Require Import Orders OrdersTac OrdersFacts Setoid Morphisms Basics.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    A Generic construction of min and max

    │ │ │ +

    A Generic construction of min and max

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    First, an interface for types with max and/or min

    │ │ │ +

    First, an interface for types with max and/or min

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type HasMax (Import E:EqLe').
    │ │ │  Parameter Inline max : t -> t -> t.
    │ │ │ @@ -78,15 +78,15 @@ │ │ │
    │ │ │ Module Type HasMinMax (E:EqLe) := HasMax E <+ HasMin E.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Any OrderedTypeFull can be equipped by max and min

    │ │ │ +

    Any OrderedTypeFull can be equipped by max and min

    │ │ │ │ │ │ based on the compare function. │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition gmax {A} (cmp : A->A->comparison) x y :=
    │ │ │ @@ -119,15 +119,15 @@ │ │ │
    │ │ │ End GenericMinMax.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Consequences of the minimalist interface: facts about max and min.

    │ │ │ +

    Consequences of the minimalist interface: facts about max and min.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module MinMaxLogicalProperties (Import O:TotalOrder')(Import M:HasMinMax O).
    │ │ │  Module Import Private_Tac := !MakeOrderTac O O.
    │ │ │ @@ -197,15 +197,15 @@ │ │ │  (Proper (le ==> le) f) ->
    │ │ │  forall x y, max (f x) (f y) == f (max x y).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Semi-lattice algebraic properties of max

    │ │ │ +

    Semi-lattice algebraic properties of max

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma max_id n : max n n == n.
    │ │ │ │ │ │ @@ -224,15 +224,15 @@ │ │ │   destruct (max_spec n m); intuition; order
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Least-upper bound properties of max

    │ │ │ +

    Least-upper bound properties of max

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma le_max_l n m : n <= max n m.
    │ │ │ │ │ │ @@ -383,15 +383,15 @@ │ │ │ Lemma min_le_compat n m p q : n <= m -> p <= q ->
    │ │ │  min n p <= min m q.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Combined properties of min and max

    │ │ │ +

    Combined properties of min and max

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma min_max_absorption n m : max n (min n m) == n.
    │ │ │ │ │ │ @@ -465,15 +465,15 @@ │ │ │
    │ │ │ End MinMaxLogicalProperties.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties requiring a decidable order

    │ │ │ +

    Properties requiring a decidable order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module MinMaxDecProperties (Import O:OrderedTypeFull')(Import M:HasMinMax O).
    │ │ │ │ │ │ @@ -545,15 +545,15 @@ │ │ │  Notation min_max_antimonotone := min_max_antimono.
    │ │ │ End MinMaxProperties.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    When the equality is Leibniz, we can skip a few Proper precondition.

    │ │ │ +

    When the equality is Leibniz, we can skip a few Proper precondition.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module UsualMinMaxLogicalProperties
    │ │ │  (Import O:UsualTotalOrder')(Import M:HasMinMax O).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedType.html │ │ │ @@ -53,15 +53,15 @@ │ │ │
    │ │ │ │ │ │
    │ │ │ NB: This file is here only for compatibility with earlier version of │ │ │ FSets and FMap. Please use Structures/Orders.v directly now. │ │ │
    │ │ │ │ │ │ -

    Ordered types

    │ │ │ +

    Ordered types

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive Compare (X : Type) (lt eq : X -> X -> Prop) (x y : X) : Type :=
    │ │ │   | LT : lt x y -> Compare lt eq x y
    │ │ │ @@ -134,15 +134,15 @@ │ │ │
    │ │ │ End MOT_to_OT.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Ordered types properties

    │ │ │ +

    Ordered types properties

    │ │ │ │ │ │
    │ │ │ │ │ │ Additional properties that can be derived from signature │ │ │ OrderedType. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeAlt.html │ │ │ @@ -46,15 +46,15 @@ │ │ │
    │ │ │ Require Import OrderedType.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An alternative (but equivalent) presentation for an Ordered Type

    │ │ │ +

    An alternative (but equivalent) presentation for an Ordered Type

    │ │ │ │ │ │ inferface. │ │ │
    │ │ │ │ │ │ NB: comparison, defined in Datatypes.v is Eq|Lt|Gt │ │ │ whereas compare, defined in OrderedType.v is EQ _ | LT _ | GT _ │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrderedTypeEx.html │ │ │ @@ -52,15 +52,15 @@ │ │ │ Require Import Ascii String.
    │ │ │ Require Import NArith Ndec.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Examples of Ordered Type structures.

    │ │ │ +

    Examples of Ordered Type structures.

    │ │ │ │ │ │
    │ │ │ │ │ │ First, a particular case of OrderedType where │ │ │ the equality is the usual one of Coq. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.Orders.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Export Relations Morphisms Setoid Equalities.
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Ordered types

    │ │ │ +

    Ordered types

    │ │ │ │ │ │
    │ │ │ │ │ │ First, signatures with only the order relations │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -184,15 +184,15 @@ │ │ │ │ │ │
    │ │ │ NB: in OrderedType, an eq_dec could be deduced from compare. │ │ │ But adding this redundant field allows seeing an OrderedType as a │ │ │ DecidableType. │ │ │
    │ │ │ │ │ │ -

    Versions with eq being the usual Leibniz equality of Coq

    │ │ │ +

    Versions with eq being the usual Leibniz equality of Coq

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type UsualStrOrder := UsualEqualityType <+ HasLt <+ IsStrOrder.
    │ │ │ Module Type UsualDecStrOrder := UsualStrOrder <+ HasCompare.
    │ │ │ @@ -216,15 +216,15 @@ │ │ │ Module Type UsualOrderedType' := UsualOrderedType <+ LtNotation.
    │ │ │ Module Type UsualOrderedTypeFull' := UsualOrderedTypeFull <+ LtLeNotation.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Purely logical versions

    │ │ │ +

    Purely logical versions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type LtIsTotal (Import E:EqLt').
    │ │ │   Axiom lt_total : forall x y, x<y \/ x==y \/ y<x.
    │ │ │ @@ -239,15 +239,15 @@ │ │ │ Module Type TotalOrder' := TotalOrder <+ EqLtLeNotation.
    │ │ │ Module Type UsualTotalOrder' := UsualTotalOrder <+ LtLeNotation.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversions

    │ │ │ +

    Conversions

    │ │ │ │ │ │
    │ │ │ │ │ │ From compare to eqb, and then eq_dec │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -300,15 +300,15 @@ │ │ │ Module OTF_to_TotalOrder (O:OrderedTypeFull) <: TotalOrder
    │ │ │  := O <+ OTF_LtIsTotal.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Versions with boolean comparisons

    │ │ │ +

    Versions with boolean comparisons

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ This style is used in Mergesort │ │ │ │ │ │
    │ │ │ @@ -402,15 +402,15 @@ │ │ │ Module Type OrderFunctions' (E:EqLtLe) :=
    │ │ │   HasCompare E <+ CmpNotation E <+ HasBoolOrdFuns' E <+ BoolOrdSpecs E.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From OrderedTypeFull to TotalTransitiveLeBool

    │ │ │ +

    From OrderedTypeFull to TotalTransitiveLeBool

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OTF_to_TTLB (Import O : OrderedTypeFull') <: TotalTransitiveLeBool.
    │ │ │ │ │ │ @@ -433,15 +433,15 @@ │ │ │
    │ │ │ End OTF_to_TTLB.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From TotalTransitiveLeBool to OrderedTypeFull

    │ │ │ +

    From TotalTransitiveLeBool to OrderedTypeFull

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ le is leb ... = true. │ │ │ eq is le /\ swap le. │ │ │ lt is le /\ ~swap le. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersAlt.html │ │ │ @@ -51,32 +51,32 @@ │ │ │ Require Import OrderedType Orders.
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some alternative (but equivalent) presentations for an Ordered Type

    │ │ │ +

    Some alternative (but equivalent) presentations for an Ordered Type

    │ │ │ │ │ │ inferface. │ │ │
    │ │ │ │ │ │ -

    The original interface

    │ │ │ +

    The original interface

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type OrderedTypeOrig := OrderedType.OrderedType.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An interface based on compare

    │ │ │ +

    An interface based on compare

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type OrderedTypeAlt.
    │ │ │ │ │ │ @@ -98,15 +98,15 @@ │ │ │
    │ │ │ End OrderedTypeAlt.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From OrderedTypeOrig to OrderedType.

    │ │ │ +

    From OrderedTypeOrig to OrderedType.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Update_OT (O:OrderedTypeOrig) <: OrderedType.
    │ │ │ │ │ │ @@ -137,15 +137,15 @@ │ │ │
    │ │ │ End Update_OT.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From OrderedType to OrderedTypeOrig.

    │ │ │ +

    From OrderedType to OrderedTypeOrig.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Backport_OT (O:OrderedType) <: OrderedTypeOrig.
    │ │ │ │ │ │ @@ -166,15 +166,15 @@ │ │ │
    │ │ │ End Backport_OT.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    From OrderedTypeAlt to OrderedType.

    │ │ │ +

    From OrderedTypeAlt to OrderedType.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OT_from_Alt (Import O:OrderedTypeAlt) <: OrderedType.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersEx.html │ │ │ @@ -52,15 +52,15 @@ │ │ │  RelationPairs EqualitiesFacts.
    │ │ │ Require Import Ascii String.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Examples of Ordered Type structures.

    │ │ │ +

    Examples of Ordered Type structures.

    │ │ │ │ │ │
    │ │ │ │ │ │ Ordered Type for bool, nat, Positive, N, Z, ascii, string with the usual or lexicographic order. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersFacts.html │ │ │ @@ -52,15 +52,15 @@ │ │ │
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of compare

    │ │ │ +

    Properties of compare

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type CompareFacts (Import O:DecStrOrder').
    │ │ │ │ │ │ @@ -101,15 +101,15 @@ │ │ │
    │ │ │ End CompareFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of OrderedTypeFull

    │ │ │ +

    Properties of OrderedTypeFull

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OrderedTypeFullFacts (Import O:OrderedTypeFull').
    │ │ │ │ │ │ @@ -161,15 +161,15 @@ │ │ │
    │ │ │ End OrderedTypeFullFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of OrderedType

    │ │ │ +

    Properties of OrderedType

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OrderedTypeFacts (Import O: OrderedType').
    │ │ │ │ │ │ @@ -256,15 +256,15 @@ │ │ │
    │ │ │ End OrderedTypeFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Tests of the order tactic

    │ │ │ +

    Tests of the order tactic

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ Is it at least capable of proving some basic properties ? │ │ │
    │ │ │
    │ │ │ @@ -294,15 +294,15 @@ │ │ │   Lemma eq_is_nlt_ngt x y : x==y <-> ~x<y /\ ~y<x.
    │ │ │ End OrderedTypeTest.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Reversed OrderedTypeFull.

    │ │ │ +

    Reversed OrderedTypeFull.

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ we can switch the orientation of the order. This is used for │ │ │ example when deriving properties of min out of the ones of max │ │ │ (see GenericMinMax). │ │ │ @@ -345,15 +345,15 @@ │ │ │
    │ │ │ Unset Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order relations derived from a compare function.

    │ │ │ +

    Order relations derived from a compare function.

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ We factorize here some common properties for ZArith, NArith │ │ │ and co, where lt and le are defined in terms of compare. │ │ │ Note that we do not require anything here concerning compatibility │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersLists.html │ │ │ @@ -51,15 +51,15 @@ │ │ │
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specialization of results about lists modulo.

    │ │ │ +

    Specialization of results about lists modulo.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OrderedTypeLists (O:OrderedType).
    │ │ │ │ │ │ @@ -106,15 +106,15 @@ │ │ │
    │ │ │ End OrderedTypeLists.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Results about keys and data as manipulated in the future MMaps.

    │ │ │ +

    Results about keys and data as manipulated in the future MMaps.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module KeyOrderedType(O:OrderedType).
    │ │ │  Include KeyDecidableType(O). │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Structures.OrdersTac.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Import Setoid Morphisms Basics Equalities Orders.
    │ │ │ Set Implicit Arguments.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The order tactic

    │ │ │ +

    The order tactic

    │ │ │ │ │ │
    │ │ │ │ │ │ This tactic is designed to solve systems of (in)equations │ │ │ involving eq, lt, le and ~eq on some type. This tactic is │ │ │ domain-agnostic; it will only use equivalence+order axioms, and │ │ │ not analyze elements of the domain. Hypothesis or goal of the form │ │ │ @@ -88,15 +88,15 @@ │ │ │  end.
    │ │ │ Local Infix "+" := trans_ord.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The tactic requirements : a total order

    │ │ │ +

    The tactic requirements : a total order

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ We need : │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties that will be used by the order tactic

    │ │ │ +

    Properties that will be used by the order tactic

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module OrderFacts (Import O:EqLtLe)(P:IsTotalOrder O).
    │ │ │ Include EqLtLeNotation O.
    │ │ │ @@ -234,15 +234,15 @@ │ │ │
    │ │ │ End OrderFacts.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    MakeOrderTac : The functor providing the order tactic.

    │ │ │ +

    MakeOrderTac : The functor providing the order tactic.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module MakeOrderTac (Import O:EqLtLe)(P:IsTotalOrder O).
    │ │ │ Include OrderFacts O P.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.Vectors.VectorDef.html │ │ │ @@ -5874,15 +5874,15 @@ │ │ │ 00016f10: 7265 6622 2068 7265 663d 2223 4954 4552 ref" href="#ITER │ │ │ 00016f20: 4154 4f52 5322 3e3c 7370 616e 2063 6c61 ATORS">ITERATOR │ │ │ 00016f50: 533c 2f73 7061 6e3e 3c2f 613e 2e3c 6272 S.
    .
    ..
    . │ │ │ +00016f80: 6964 3d22 6c61 6233 3234 223e 3c2f 613e id="lab324"> │ │ │ 00016f90: 3c68 3120 636c 6173 733d 2273 6563 7469

    Here are spe │ │ │ 00016fb0: 6369 616c 206e 6f6e 2064 6570 656e 6465 cial non depende │ │ │ 00016fc0: 6e74 2075 7365 6675 6c20 696e 7374 616e nt useful instan │ │ │ 00016fd0: 7469 6174 696f 6e20 6f66 2069 6e64 7563 tiation of induc │ │ │ 00016fe0: 7469 6f6e 2073 6368 656d 6573 3c2f 6831 tion schemes

    ..
    VECT │ │ │ 00024430: 4f52 4c49 5354 3c2f 7370 616e 3e3c 2f61 ORLIST.
    .
    .. │ │ │ 00024450: 3c64 6976 2063 6c61 7373 3d22 646f 6322
    ..

    vector │ │ │ 00024490: 266c 743b 3d26 6774 3b20 6c69 7374 2066 <=> list f │ │ │ 000244a0: 756e 6374 696f 6e73 3c2f 6831 3e0a 0a3c unctions

    ..< │ │ │ 000244b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
    ..
    . │ │ │ 000244d0: 3c73 7061 6e20 636c 6173 733d 2269 6422 │ │ │ │ │ │
    │ │ │ Lemmas are done for functions that use Fin.t but thanks to Peano_dec.le_unique, all │ │ │ is true for the one that use lt │ │ │
    │ │ │ │ │ │ -

    Properties of nth and nth_order

    │ │ │ +

    Properties of nth and nth_order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma eq_nth_iff A n (v1 v2: t A n):
    │ │ │   (forall p1 p2, p1 = p2 -> v1 [@ p1 ] = v2 [@ p2 ]) <-> v1 = v2.
    │ │ │ @@ -132,15 +132,15 @@ │ │ │ Lemma In_nth A: forall n (v : t A n) p,
    │ │ │   In (nth v p) v.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of replace

    │ │ │ +

    Properties of replace

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma nth_replace_eq A: forall n p (v : t A n) a,
    │ │ │   nth (replace v p a) p = a.
    │ │ │ @@ -178,30 +178,30 @@ │ │ │ Lemma replace_append_R A: forall n m (v : t A n) (w : t A m) p a,
    │ │ │   replace (v ++ w) (Fin.R n p) a = v ++ (replace w p a).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of const

    │ │ │ +

    Properties of const

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma const_nth A (a: A) n (p: Fin.t n): (const a n)[@ p] = a.
    │ │ │ │ │ │
    │ │ │ Lemma append_const A (a : A) n m : (const a n) ++ (const a m) = const a (n + m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of map

    │ │ │ +

    Properties of map

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma map_id A: forall n (v : t A n),
    │ │ │   map (fun x => x) v = v.
    │ │ │ @@ -234,29 +234,29 @@ │ │ │ Lemma map2_ext A B C: forall (f g:A->B->C), (forall a b, f a b = g a b) ->
    │ │ │   forall n (v : t A n) (w : t B n), map2 f v w = map2 g v w.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of fold_left

    │ │ │ +

    Properties of fold_left

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma fold_left_right_assoc_eq {A B} {f: A -> B -> A}
    │ │ │   (assoc: forall a b c, f (f a b) c = f (f a c) b)
    │ │ │   {n} (v: t B n): forall a, fold_left f a v = fold_right (fun x y => f y x) v a.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of take

    │ │ │ +

    Properties of take

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma take_O : forall {A} {n} le (v:t A n), take 0 le v = [].
    │ │ │ │ │ │ @@ -270,15 +270,15 @@ │ │ │
    │ │ │ Lemma take_prf_irr : forall {A} p {n} (v:t A n) le le', take p le v = take p le' v.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of uncons and splitat

    │ │ │ +

    Properties of uncons and splitat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma uncons_cons {A} : forall {n : nat} (a : A) (v : t A n),
    │ │ │   uncons (a::v) = (a,v).
    │ │ │ @@ -301,28 +301,28 @@ │ │ │ Lemma append_inj {A} : forall {n m : nat} (v v' : t A n) (w w' : t A m),
    │ │ │   v ++ w = v' ++ w' -> v = v' /\ w = w'.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of In

    │ │ │ +

    Properties of In

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma In_cons_iff A: forall n a b (v : t A n),
    │ │ │   In a (b :: v) <-> (b = a \/ In a v).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of Forall and Forall2

    │ │ │ +

    Properties of Forall and Forall2

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Forall_impl A: forall (P Q : A -> Prop), (forall a, P a -> Q a) ->
    │ │ │   forall n (v : t A n), Forall P v -> Forall Q v.
    │ │ │ @@ -364,15 +364,15 @@ │ │ │ Lemma Forall2_append A B: forall P n m (v : t A n) (v' : t B n) (w : t A m) (w' : t B m),
    │ │ │   Forall2 P v v' -> Forall2 P w w' -> Forall2 P (append v w) (append v' w').
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of shiftin and shiftrepeat

    │ │ │ +

    Properties of shiftin and shiftrepeat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma shiftin_nth A a n (v: t A n) k1 k2 (eq: k1 = k2):
    │ │ │   nth (shiftin a v) (Fin.L_R 1 k1) = nth v k2.
    │ │ │ @@ -403,15 +403,15 @@ │ │ │ Lemma Forall_shiftin A: forall (P : A -> Prop) a n (v : t A n),
    │ │ │   Forall P (shiftin a v) <-> (P a /\ Forall P v).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of rev

    │ │ │ +

    Properties of rev

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma rev_nil A: rev (nil A) = [].
    │ │ │ │ │ │ @@ -441,15 +441,15 @@ │ │ │ Lemma Forall_rev A: forall (P : A -> Prop) n (v : t A n),
    │ │ │   Forall P (rev v) <-> Forall P v.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of to_list

    │ │ │ +

    Properties of to_list

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma to_list_of_list_opp {A} (l: list A): to_list (of_list l) = l.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinInt.html │ │ │ @@ -51,15 +51,15 @@ │ │ │  OrdersFacts ZAxioms ZProperties DecidableClass.
    │ │ │ Require BinIntDef.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Binary Integers

    │ │ │ +

    Binary Integers

    │ │ │ │ │ │
    │ │ │ │ │ │ Initial author: Pierre Crégut, CNET, Lannion, France │ │ │
    │ │ │ │ │ │ The type Z and its constructors Z0 and Zpos and Zneg │ │ │ @@ -86,15 +86,15 @@ │ │ │  <: UsualDecidableTypeFull
    │ │ │  <: TotalOrder.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definitions of operations, now in a separate file

    │ │ │ +

    Definitions of operations, now in a separate file

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Include BinIntDef.Z.
    │ │ │ │ │ │ @@ -118,15 +118,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Logic Predicates

    │ │ │ +

    Logic Predicates

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition eq := @Logic.eq Z.
    │ │ │ Definition eq_equiv := @eq_equivalence Z.
    │ │ │ @@ -168,27 +168,27 @@ │ │ │ Register gtb as num.Z.gtb.
    │ │ │ Register eqb as num.Z.eqb.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Decidability of equality.

    │ │ │ +

    Decidability of equality.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition eq_dec (x y : Z) : {x = y} + {x <> y}.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proofs of morphisms, obvious since eq is Leibniz

    │ │ │ +

    Proofs of morphisms, obvious since eq is Leibniz

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Obligation Tactic := simpl_relation.
    │ │ │ Program Definition succ_wd : Proper (eq==>eq) succ := _.
    │ │ │ @@ -205,15 +205,15 @@ │ │ │ Program Definition pow_wd : Proper (eq==>eq==>eq) pow := _.
    │ │ │ Program Definition testbit_wd : Proper (eq==>eq==>Logic.eq) testbit := _.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of pos_sub

    │ │ │ +

    Properties of pos_sub

    │ │ │ │ │ │
    │ │ │ │ │ │ pos_sub can be written in term of positive comparison │ │ │ and subtraction (cf. earlier definition of addition of Z) │ │ │
    │ │ │
    │ │ │ @@ -276,15 +276,15 @@ │ │ │
    │ │ │ Module Import Private_BootStrap.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Operations and constants

    │ │ │ +

    Operations and constants

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_0_r n : n + 0 = n.
    │ │ │ │ │ │ @@ -294,51 +294,51 @@ │ │ │
    │ │ │ Lemma mul_1_l n : 1 * n = n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition is commutative

    │ │ │ +

    Addition is commutative

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_comm n m : n + m = m + n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite distributes over addition

    │ │ │ +

    Opposite distributes over addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma opp_add_distr n m : - (n + m) = - n + - m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite is injective

    │ │ │ +

    Opposite is injective

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma opp_inj n m : -n = -m -> n = m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition is associative

    │ │ │ +

    Addition is associative

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pos_sub_add p q r :
    │ │ │   pos_sub (p + q) r = pos p + pos_sub q r.
    │ │ │ @@ -352,39 +352,39 @@ │ │ │
    │ │ │ Lemma add_assoc n m p : n + (m + p) = n + m + p.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite is inverse for addition

    │ │ │ +

    Opposite is inverse for addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_opp_diag_r n : n + - n = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication and Opposite

    │ │ │ +

    Multiplication and Opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_opp_r n m : n * - m = - (n * m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Distributivity of multiplication over addition

    │ │ │ +

    Distributivity of multiplication over addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_add_distr_pos (p:positive) n m :
    │ │ │  (n + m) * pos p = n * pos p + m * pos p.
    │ │ │ @@ -395,64 +395,64 @@ │ │ │
    │ │ │ End Private_BootStrap.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proofs of specifications

    │ │ │ +

    Proofs of specifications

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Specification of constants

    │ │ │ +

    Specification of constants

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma one_succ : 1 = succ 0.
    │ │ │ │ │ │
    │ │ │ Lemma two_succ : 2 = succ 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of addition

    │ │ │ +

    Specification of addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_0_l n : 0 + n = n.
    │ │ │ │ │ │
    │ │ │ Lemma add_succ_l n m : succ n + m = succ (n + m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of opposite

    │ │ │ +

    Specification of opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma opp_0 : -0 = 0.
    │ │ │ │ │ │
    │ │ │ Lemma opp_succ n : -(succ n) = pred (-n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of successor and predecessor

    │ │ │ +

    Specification of successor and predecessor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Local Arguments pos_sub : simpl nomatch.
    │ │ │ │ │ │ @@ -462,45 +462,45 @@ │ │ │
    │ │ │ Lemma pred_succ n : pred (succ n) = n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of subtraction

    │ │ │ +

    Specification of subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sub_0_r n : n - 0 = n.
    │ │ │ │ │ │
    │ │ │ Lemma sub_succ_r n m : n - succ m = pred (n - m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of multiplication

    │ │ │ +

    Specification of multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma mul_0_l n : 0 * n = 0.
    │ │ │ │ │ │
    │ │ │ Lemma mul_succ_l n m : succ n * m = n * m + m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of comparisons and order

    │ │ │ +

    Specification of comparisons and order

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma eqb_eq n m : (n =? m) = true <-> n = m.
    │ │ │ │ │ │ @@ -584,15 +584,15 @@ │ │ │
    │ │ │ Lemma lt_succ_r n m : n < succ m <-> n<=m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of minimum and maximum

    │ │ │ +

    Specification of minimum and maximum

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma max_l n m : m<=n -> max n m = n.
    │ │ │ │ │ │ @@ -605,15 +605,15 @@ │ │ │
    │ │ │ Lemma min_r n m : m<=n -> min n m = m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Induction principles based on successor / predecessor

    │ │ │ +

    Induction principles based on successor / predecessor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma peano_ind (P : Z -> Prop) :
    │ │ │   P 0 ->
    │ │ │ @@ -646,30 +646,30 @@ │ │ │ Register le_decidable as num.Z.le_decidable.
    │ │ │ Register lt_decidable as num.Z.lt_decidable.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of absolute value

    │ │ │ +

    Specification of absolute value

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma abs_eq n : 0 <= n -> abs n = n.
    │ │ │ │ │ │
    │ │ │ Lemma abs_neq n : n <= 0 -> abs n = - n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of sign

    │ │ │ +

    Specification of sign

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sgn_null n : n = 0 -> sgn n = 0.
    │ │ │ │ │ │ @@ -679,15 +679,15 @@ │ │ │
    │ │ │ Lemma sgn_neg n : n < 0 -> sgn n = -1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of power

    │ │ │ +

    Specification of power

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pow_0_r n : n^0 = 1.
    │ │ │ │ │ │ @@ -708,27 +708,27 @@ │ │ │
    │ │ │ Lemma pow_pos_fold n p : pow_pos n p = n ^ (pos p).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of square

    │ │ │ +

    Specification of square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma square_spec n : square n = n * n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of square root

    │ │ │ +

    Specification of square root

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma sqrtrem_spec n : 0<=n ->
    │ │ │  let (s,r) := sqrtrem n in n = s*s + r /\ 0 <= r <= 2*s.
    │ │ │ @@ -743,15 +743,15 @@ │ │ │
    │ │ │ Lemma sqrtrem_sqrt n : fst (sqrtrem n) = sqrt n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Specification of logarithm

    │ │ │ +

    Specification of logarithm

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma log2_spec n : 0 < n -> 2^(log2 n) <= n < 2^(succ (log2 n)).
    │ │ │ │ │ │ @@ -772,15 +772,15 @@ │ │ │
    │ │ │ Lemma odd_spec n : odd n = true <-> Odd n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication and Doubling

    │ │ │ +

    Multiplication and Doubling

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma double_spec n : double n = 2*n.
    │ │ │ │ │ │ @@ -790,15 +790,15 @@ │ │ │
    │ │ │ Lemma pred_double_spec n : pred_double n = 2*n - 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Correctness proofs for Trunc division

    │ │ │ +

    Correctness proofs for Trunc division

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma pos_div_eucl_eq a b : 0 < b ->
    │ │ │   let (q, r) := pos_div_eucl a b in pos a = q * b + r.
    │ │ │ @@ -822,15 +822,15 @@ │ │ │
    │ │ │ Lemma mod_neg_bound a b : b < 0 -> b < a mod b <= 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Correctness proofs for Floor division

    │ │ │ +

    Correctness proofs for Floor division

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem quotrem_eq a b : let (q,r) := quotrem a b in a = q * b + r.
    │ │ │ │ │ │ @@ -855,15 +855,15 @@ │ │ │
    │ │ │ Lemma rem_opp_r a b : b<>0 -> rem a (-b) = rem a b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Extra properties about divide

    │ │ │ +

    Extra properties about divide

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma divide_Zpos p q : (pos p|pos q) <-> (p|q)%positive.
    │ │ │ │ │ │ @@ -873,15 +873,15 @@ │ │ │
    │ │ │ Lemma divide_Zpos_Zneg_l n p : (pos p|n) <-> (neg p|n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Correctness proofs for gcd

    │ │ │ +

    Correctness proofs for gcd

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma ggcd_gcd a b : fst (ggcd a b) = gcd a b.
    │ │ │ │ │ │ @@ -914,15 +914,15 @@ │ │ │ Theorem ggcd_opp a b :
    │ │ │   ggcd (-a) b = (let '(g,(aa,bb)) := ggcd a b in (g,(-aa,bb))).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Extra properties about testbit

    │ │ │ +

    Extra properties about testbit

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma testbit_of_N a n :
    │ │ │  testbit (of_N a) (of_N n) = N.testbit a n.
    │ │ │ @@ -939,15 +939,15 @@ │ │ │ Lemma testbit_Zneg a n : 0<=n ->
    │ │ │  testbit (neg a) n = negb (N.testbit (Pos.pred_N a) (to_N n)).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proofs of specifications for bitwise operations

    │ │ │ +

    Proofs of specifications for bitwise operations

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma div2_spec a : div2 a = shiftr a 1.
    │ │ │ │ │ │ @@ -1124,39 +1124,39 @@ │ │ │
    │ │ │ Lemma add_diag n : n + n = 2 * n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and opposite

    │ │ │ +

    Comparison and opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma compare_opp n m : (- n ?= - m) = (m ?= n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and addition

    │ │ │ +

    Comparison and addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma add_compare_mono_l n m p : (n + m ?= n + p) = (m ?= p).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    testbit in terms of comparison.

    │ │ │ +

    testbit in terms of comparison.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma testbit_mod_pow2 a n i (H : 0 <= n)
    │ │ │   : testbit (a mod 2 ^ n) i = ((i <? n) && testbit a i)%bool.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.BinIntDef.html │ │ │ @@ -57,15 +57,15 @@ │ │ │ Local Notation "1" := (Zpos 1).
    │ │ │ Local Notation "2" := (Zpos 2).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Binary Integers, Definitions of Operations

    │ │ │ +

    Binary Integers, Definitions of Operations

    │ │ │ │ │ │
    │ │ │ │ │ │ Initial author: Pierre Crégut, CNET, Lannion, France │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -75,42 +75,42 @@ │ │ │
    │ │ │ Definition t := Z.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Nicer names Z.pos and Z.neg for constructors

    │ │ │ +

    Nicer names Z.pos and Z.neg for constructors

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation pos := Zpos.
    │ │ │ Notation neg := Zneg.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Constants

    │ │ │ +

    Constants

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition zero := 0.
    │ │ │ Definition one := 1.
    │ │ │ Definition two := 2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Doubling and variants

    │ │ │ +

    Doubling and variants

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition double x :=
    │ │ │   match x with
    │ │ │ @@ -135,15 +135,15 @@ │ │ │     | pos p => pos (Pos.pred_double p)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Subtraction of positive into Z

    │ │ │ +

    Subtraction of positive into Z

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint pos_sub (x y:positive) {struct y} : Z :=
    │ │ │   match x, y with
    │ │ │ @@ -158,15 +158,15 @@ │ │ │     | 1, 1 => Z0
    │ │ │   end%positive.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition

    │ │ │ +

    Addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition add x y :=
    │ │ │   match x, y with
    │ │ │ @@ -181,15 +181,15 @@ │ │ │
    │ │ │ Infix "+" := add : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Opposite

    │ │ │ +

    Opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition opp x :=
    │ │ │   match x with
    │ │ │ @@ -201,54 +201,54 @@ │ │ │
    │ │ │ Notation "- x" := (opp x) : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Successor

    │ │ │ +

    Successor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition succ x := x + 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Predecessor

    │ │ │ +

    Predecessor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pred x := x + neg 1.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Subtraction

    │ │ │ +

    Subtraction

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition sub m n := m + -n.
    │ │ │ │ │ │
    │ │ │ Infix "-" := sub : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication

    │ │ │ +

    Multiplication

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition mul x y :=
    │ │ │   match x, y with
    │ │ │ @@ -263,15 +263,15 @@ │ │ │
    │ │ │ Infix "*" := mul : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power function

    │ │ │ +

    Power function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition pow_pos (z:Z) := Pos.iter (mul z) 1.
    │ │ │ │ │ │ @@ -286,15 +286,15 @@ │ │ │
    │ │ │ Infix "^" := pow : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square

    │ │ │ +

    Square

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition square x :=
    │ │ │   match x with
    │ │ │ @@ -303,15 +303,15 @@ │ │ │     | neg p => pos (Pos.square p)
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison

    │ │ │ +

    Comparison

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition compare x y :=
    │ │ │   match x, y with
    │ │ │ @@ -329,15 +329,15 @@ │ │ │
    │ │ │ Infix "?=" := compare (at level 70, no associativity) : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Sign function

    │ │ │ +

    Sign function

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition sgn z :=
    │ │ │   match z with
    │ │ │ @@ -408,15 +408,15 @@ │ │ │ Infix ">=?" := geb (at level 70, no associativity) : Z_scope.
    │ │ │ Infix ">?" := gtb (at level 70, no associativity) : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Minimum and maximum

    │ │ │ +

    Minimum and maximum

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition max n m :=
    │ │ │   match n ?= m with
    │ │ │ @@ -431,15 +431,15 @@ │ │ │     | Gt => m
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Absolute value

    │ │ │ +

    Absolute value

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition abs z :=
    │ │ │   match z with
    │ │ │ @@ -448,15 +448,15 @@ │ │ │     | neg p => pos p
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversions

    │ │ │ +

    Conversions

    │ │ │ │ │ │
    │ │ │ │ │ │ From Z to nat via absolute value │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -623,15 +623,15 @@ │ │ │
    │ │ │ Definition to_num_hex_int n := Number.IntHexadecimal (to_hex_int n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Iteration of a function

    │ │ │ +

    Iteration of a function

    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ By convention, iterating a negative number of times is identity. │ │ │ │ │ │
    │ │ │ @@ -644,30 +644,30 @@ │ │ │     | _ => x
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Euclidean divisions for binary integers

    │ │ │ +

    Euclidean divisions for binary integers

    │ │ │ │ │ │
    │ │ │ │ │ │ Concerning the many possible variants of integer divisions, │ │ │ see the headers of the generic files ZDivFloor, ZDivTrunc, │ │ │ ZDivEucl, and the article by R. Boute mentioned there. │ │ │ We provide here two flavours, Floor and Trunc, while │ │ │ the Euclid convention can be found in file Zeuclid.v │ │ │ For non-zero b, they all satisfy a = b*(a/b) + (a mod b) │ │ │ and |a mod b| < |b| , but the sign of the modulo will differ │ │ │ when a<0 and/or b<0. │ │ │ │ │ │
    │ │ │ │ │ │ -

    Floor division

    │ │ │ +

    Floor division

    │ │ │ │ │ │
    │ │ │ │ │ │ div_eucl provides a Truncated-Toward-Bottom (a.k.a Floor) │ │ │ Euclidean division. Its projections are named div (noted "/") │ │ │ and modulo (noted with an infix "mod"). │ │ │ These functions correspond to the `div` and `mod` of Haskell. │ │ │ @@ -754,15 +754,15 @@ │ │ │ Infix "/" := div : Z_scope.
    │ │ │ Infix "mod" := modulo (at level 40, no associativity) : Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Trunc Division

    │ │ │ +

    Trunc Division

    │ │ │ │ │ │
    │ │ │ │ │ │ quotrem provides a Truncated-Toward-Zero Euclidean division. │ │ │ Its projections are named quot (noted "÷") and rem. │ │ │ These functions correspond to the `quot` and `rem` of Haskell. │ │ │ This division convention is used in most programming languages, │ │ │ @@ -815,15 +815,15 @@ │ │ │ Infix "÷" := quot (at level 40, left associativity) : Z_scope.
    │ │ │
    │ │ │ │ │ │
    │ │ │ No infix notation for rem, otherwise it becomes a keyword │ │ │
    │ │ │ │ │ │ -

    Parity functions

    │ │ │ +

    Parity functions

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition even z :=
    │ │ │   match z with
    │ │ │ @@ -842,15 +842,15 @@ │ │ │     | _ => true
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Division by two

    │ │ │ +

    Division by two

    │ │ │ │ │ │
    │ │ │ │ │ │ div2 performs rounding toward bottom, it is hence a particular │ │ │ case of div, and for all relative number n we have: │ │ │ n = 2 * div2 n + if odd n then 1 else 0. │ │ │
    │ │ │ @@ -888,15 +888,15 @@ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ NB: Z.quot2 used to be named Z.div2 in Coq <= 8.3 │ │ │
    │ │ │ │ │ │ -

    Base-2 logarithm

    │ │ │ +

    Base-2 logarithm

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition log2 z :=
    │ │ │   match z with
    │ │ │ @@ -905,15 +905,15 @@ │ │ │     | _ => 0
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square root

    │ │ │ +

    Square root

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition sqrtrem n :=
    │ │ │  match n with
    │ │ │ @@ -933,15 +933,15 @@ │ │ │   | _ => 0
    │ │ │  end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Greatest Common Divisor

    │ │ │ +

    Greatest Common Divisor

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition gcd a b :=
    │ │ │   match a,b with
    │ │ │ @@ -976,15 +976,15 @@ │ │ │        let '(g,(aa,bb)) := Pos.ggcd a b in (pos g, (neg aa, neg bb))
    │ │ │   end.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Bitwise functions

    │ │ │ +

    Bitwise functions

    │ │ │ │ │ │
    │ │ │ │ │ │ When accessing the bits of negative numbers, all functions │ │ │ below will use the two's complement representation. For instance, │ │ │ -1 will correspond to an infinite stream of true bits. If this │ │ │ isn't what you're looking for, you can use abs first and then │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Int.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An light axiomatization of integers (used in MSetAVL).

    │ │ │ +

    An light axiomatization of integers (used in MSetAVL).

    │ │ │ │ │ │
    │ │ │ │ │ │ We define a signature for an integer datatype based on Z. │ │ │ The goal is to allow a switch after extraction to ocaml's │ │ │ big_int or even int when finiteness isn't a problem │ │ │ (typically : when measuring the height of an AVL tree). │ │ │ @@ -70,15 +70,15 @@ │ │ │
    │ │ │ Local Ltac Tauto.intuition_solver ::= auto with bool.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    A specification of integers

    │ │ │ +

    A specification of integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Type Int.
    │ │ │ │ │ │ @@ -206,15 +206,15 @@ │ │ │
    │ │ │ End Int.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Facts and tactics using Int

    │ │ │ +

    Facts and tactics using Int

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module MoreInt (Import I:Int).
    │ │ │   Local Notation int := I.t.
    │ │ │ @@ -560,15 +560,15 @@ │ │ │
    │ │ │ End MoreInt.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    An implementation of Int

    │ │ │ +

    An implementation of Int

    │ │ │ │ │ │
    │ │ │ │ │ │ It's always nice to know that our Int interface is realizable :-) │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.ZArith_dec.html │ │ │ @@ -70,15 +70,15 @@ │ │ │
    │ │ │   Variables x y : Z.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Decidability of order on binary integers

    │ │ │ +

    Decidability of order on binary integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │   Definition Z_lt_dec : {x < y} + {~ x < y}.
    │ │ │ │ │ │ @@ -112,15 +112,15 @@ │ │ │
    │ │ │ End decidability.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Cotransitivity of order on binary integers

    │ │ │ +

    Cotransitivity of order on binary integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zlt_cotrans : forall n m:Z, n < m -> forall p:Z, {n < p} + {p < m}.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zabs.html │ │ │ @@ -70,15 +70,15 @@ │ │ │
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Properties of absolute value

    │ │ │ +

    Properties of absolute value

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zabs_non_eq := Z.abs_neq (only parsing).
    │ │ │ Notation Zabs_Zopp := Z.abs_opp (only parsing).
    │ │ │ @@ -88,15 +88,15 @@ │ │ │ Notation Zabs_Zsgn := Z.abs_sgn (only parsing).
    │ │ │ Notation Zabs_Zmult := Z.abs_mul (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Proving a property of the absolute value by cases

    │ │ │ +

    Proving a property of the absolute value by cases

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zabs_ind :
    │ │ │   forall (P:Z -> Prop) (n:Z),
    │ │ │ @@ -113,15 +113,15 @@ │ │ │   0 <= x /\ Z.abs x = x \/
    │ │ │   0 > x /\ Z.abs x = -x.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Some results about the sign function.

    │ │ │ +

    Some results about the sign function.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zsgn_Zmult := Z.sgn_mul (only parsing).
    │ │ │ Notation Zsgn_Zopp := Z.sgn_opp (only parsing).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zbitwise.html │ │ │ @@ -148,21 +148,21 @@ │ │ │ Lemma lnot_sub x y : Z.lnot (x - y) = Z.lnot x + y.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Explicit formulas for carry bits during addition. Conceptually, the theory │ │ │ -

    here matches the bitblasting rules for integers. However, the vector of

    │ │ │ +

    here matches the bitblasting rules for integers. However, the vector of

    │ │ │ │ │ │ -

    carry bits is represented as a Z so it can be used in bitwise operations.

    │ │ │ +

    carry bits is represented as a Z so it can be used in bitwise operations.

    │ │ │ │ │ │ -

    The last three lemmas about addcarries are the main interface, but the

    │ │ │ +

    The last three lemmas about addcarries are the main interface, but the

    │ │ │ │ │ │ -

    generalization adccarries is provided as the same theory applies.

    │ │ │ +

    generalization adccarries is provided as the same theory applies.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition adccarries (x y : Z) (c : bool) := (x + y + Z.b2z c) .^ (x .^ y).
    │ │ │ Definition addcarries (x y : Z) := (x + y) .^ (x .^ y).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zbool.html │ │ │ @@ -56,15 +56,15 @@ │ │ │
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Boolean operations from decidability of order

    │ │ │ +

    Boolean operations from decidability of order

    │ │ │ The decidability of equality and order relations over │ │ │ type Z gives some boolean functions with the adequate specification. │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Z_lt_ge_bool (x y:Z) := bool_of_sumbool (Z_lt_ge_dec x y).
    │ │ │ @@ -81,15 +81,15 @@ │ │ │
    │ │ │ Definition Zeven_odd_bool (x:Z) := bool_of_sumbool (Zeven_odd_dec x).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Boolean comparisons of binary integers

    │ │ │ +

    Boolean comparisons of binary integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zle_bool := Z.leb (only parsing).
    │ │ │ Notation Zge_bool := Z.geb (only parsing).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zcompare.html │ │ │ @@ -64,30 +64,30 @@ │ │ │
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison on integers

    │ │ │ +

    Comparison on integers

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_Gt_Lt_antisym : forall n m:Z, (n ?= m) = Gt <-> (m ?= n) = Lt.
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_antisym n m : CompOpp (n ?= m) = (m ?= n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Transitivity of comparison

    │ │ │ +

    Transitivity of comparison

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_Lt_trans :
    │ │ │   forall n m p:Z, (n ?= m) = Lt -> (m ?= p) = Lt -> (n ?= p) = Lt.
    │ │ │ @@ -96,39 +96,39 @@ │ │ │ Lemma Zcompare_Gt_trans :
    │ │ │   forall n m p:Z, (n ?= m) = Gt -> (m ?= p) = Gt -> (n ?= p) = Gt.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and opposite

    │ │ │ +

    Comparison and opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_opp n m : (n ?= m) = (- m ?= - n).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison first-order specification

    │ │ │ +

    Comparison first-order specification

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_Gt_spec n m : (n ?= m) = Gt -> exists h, n + - m = Zpos h.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Comparison and addition

    │ │ │ +

    Comparison and addition

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_plus_compat n m p : (p + n ?= p + m) = (n ?= m).
    │ │ │ │ │ │ @@ -142,27 +142,27 @@ │ │ │
    │ │ │ Lemma Zcompare_Gt_not_Lt n m : (n ?= m) = Gt <-> (n ?= m+1) <> Lt.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Successor and comparison

    │ │ │ +

    Successor and comparison

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_succ_compat n m : (Z.succ n ?= Z.succ m) = (n ?= m).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication and comparison

    │ │ │ +

    Multiplication and comparison

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_mult_compat :
    │ │ │   forall (p:positive) (n m:Z), (Zpos p * n ?= Zpos p * m) = (n ?= m).
    │ │ │ @@ -175,15 +175,15 @@ │ │ │ Lemma Zmult_compare_compat_r n m p :
    │ │ │   p > 0 -> (n ?= m) = (n * p ?= m * p).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relating x ?= y to =, <=, <, >= or >

    │ │ │ +

    Relating x ?= y to =, <=, <, >= or >

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zcompare_elim :
    │ │ │   forall (c1 c2 c3:Prop) (n m:Z),
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zdiv.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Euclidean Division

    │ │ │ +

    Euclidean Division

    │ │ │ │ │ │
    │ │ │ │ │ │ Initial Contribution by Claude Marché and Xavier Urbain │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -85,15 +85,15 @@ │ │ │ #[deprecated(since="8.17",note="Use Coq.ZArith.BinInt.Z.mod_neg_bound instead")]
    │ │ │ Notation Zmod_neg_bound := Z.mod_neg_bound (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Main division theorems

    │ │ │ +

    Main division theorems

    │ │ │ │ │ │
    │ │ │ │ │ │ NB: many things are stated twice for compatibility reasons │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -234,15 +234,15 @@ │ │ │  forall a b q r, 0 <= r < b ->
    │ │ │   a = b*q + r -> r = a mod b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Basic values of divisions and modulo.

    │ │ │ +

    Basic values of divisions and modulo.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zmod_0_l: forall a, 0 mod a = 0.
    │ │ │ │ │ │ @@ -290,15 +290,15 @@ │ │ │
    │ │ │ Lemma Z_div_mult_full : forall a b:Z, b <> 0 -> (a*b)/b = a.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order results about Z.modulo and Z.div

    │ │ │ +

    Order results about Z.modulo and Z.div

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │ @@ -448,15 +448,15 @@ │ │ │ Theorem Zdiv_sgn: forall a b,
    │ │ │   0 <= Z.sgn (a/b) * Z.sgn a * Z.sgn b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relations between usual operations and Z.modulo and Z.div

    │ │ │ +

    Relations between usual operations and Z.modulo and Z.div

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Z_mod_plus_full : forall a b c:Z, (a + b * c) mod c = a mod c.
    │ │ │ │ │ │ @@ -687,15 +687,15 @@ │ │ │
    │ │ │ Lemma Zeven_mod : forall a, Z.even a = Zeq_bool (a mod 2) 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility

    │ │ │ +

    Compatibility

    │ │ │ │ │ │
    │ │ │ │ │ │ Weaker results kept only for compatibility │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -723,15 +723,15 @@ │ │ │
    │ │ │ Lemma Z_mod_zero_opp : forall a b:Z, b > 0 -> a mod b = 0 -> (-a) mod b = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    A direct way to compute Z.modulo

    │ │ │ +

    A direct way to compute Z.modulo

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Fixpoint Zmod_POS (a : positive) (b : Z) : Z :=
    │ │ │   match a with
    │ │ │ @@ -775,17 +775,17 @@ │ │ │ Theorem Zmod'_correct: forall a b, Zmod' a b = a mod b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Another convention is possible for division by negative numbers: │ │ │ -

    quotient is always the biggest integer smaller than or equal to a/b

    │ │ │ +

    quotient is always the biggest integer smaller than or equal to a/b

    │ │ │ │ │ │ -

    remainder is hence always positive or null.

    │ │ │ +

    remainder is hence always positive or null.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem Zdiv_eucl_extended :
    │ │ │   forall b:Z,
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zeuclid.html │ │ │ @@ -59,15 +59,15 @@ │ │ │
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definitions of division for binary integers, Euclid convention.

    │ │ │ +

    Definitions of division for binary integers, Euclid convention.

    │ │ │ │ │ │
    │ │ │ │ │ │ In this convention, the remainder is always positive. │ │ │ For other conventions, see Z.div and Z.quot in file BinIntDef. │ │ │ To avoid collision with the other divisions, we place this one │ │ │ under a module. │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zeven.html │ │ │ @@ -172,15 +172,15 @@ │ │ │ Notation Zodd_bool_succ := Z.odd_succ (only parsing).
    │ │ │ Notation Zodd_bool_pred := Z.odd_pred (only parsing).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Definition of Z.quot2, Z.div2 and properties wrt Zeven

    │ │ │ +

    Definition of Z.quot2, Z.div2 and properties wrt Zeven

    │ │ │ │ │ │ and Zodd │ │ │
    │ │ │ │ │ │ Properties of Z.div2 │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zgcd_alt.html │ │ │ @@ -45,15 +45,15 @@ │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Zgcd_alt : an alternate version of Z.gcd, based on Euclid's algorithm

    │ │ │ +

    Zgcd_alt : an alternate version of Z.gcd, based on Euclid's algorithm

    │ │ │ │ │ │
    │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ Author: Pierre Letouzey │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zhints.html │ │ │ @@ -98,29 +98,29 @@ │ │ │ Require Import Zmisc.
    │ │ │ Require Import Wf_Z.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Simplification lemmas

    │ │ │ +

    Simplification lemmas

    │ │ │ │ │ │
    │ │ │ │ │ │ No subgoal or smaller subgoals │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ #[global]
    │ │ │ Hint Resolve
    │ │ │   
    │ │ │ │ │ │
    │ │ │ -

    Reversible simplification lemmas (no loss of information)

    │ │ │ +

    Reversible simplification lemmas (no loss of information)

    │ │ │ Should clearly be declared as hints │ │ │
    │ │ │ │ │ │ Lemmas ending by eq │ │ │
    │ │ │
    │ │ │   Zsucc_eq_compat
    │ │ │ @@ -167,15 +167,15 @@ │ │ │   Zplus_le_compat_l
    │ │ │   Zplus_le_compat_r
    │ │ │   Z.abs_nonneg
    │ │ │
    │ │ │   
    │ │ │ │ │ │
    │ │ │ -

    Irreversible simplification lemmas

    │ │ │ +

    Irreversible simplification lemmas

    │ │ │ Probably to be declared as hints, when no other simplification is possible │ │ │
    │ │ │ │ │ │ Lemmas ending by eq │ │ │
    │ │ │
    │ │ │   Z_eq_mult
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Znat.html │ │ │ @@ -91,15 +91,15 @@ │ │ │
  • module Zabs2Nat : from Z to nat (via the absolute value) │ │ │ │ │ │
  • │ │ │ │ │ │ │ │ │
    │ │ │ │ │ │ -

    Chains of conversions

    │ │ │ +

    Chains of conversions

    │ │ │ │ │ │
    │ │ │ │ │ │ When combining successive conversions, we have the following │ │ │ commutative diagram: │ │ │
    │ │ │        ---> Nat ----
    │ │ │ @@ -144,15 +144,15 @@
    │ │ │  
    │ │ │ Lemma Zabs_nat_N n : N.of_nat (Z.abs_nat n) = Z.abs_N n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversions between Z and N

    │ │ │ +

    Conversions between Z and N

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module N2Z.
    │ │ │ │ │ │ @@ -521,15 +521,15 @@ │ │ │
    │ │ │ End Zabs2N.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Conversions between Z and nat

    │ │ │ +

    Conversions between Z and nat

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Module Nat2Z.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Znumtheory.html │ │ │ @@ -241,15 +241,15 @@ │ │ │ Lemma Zdivide_mod_minus a b c:
    │ │ │  0 <= c < b -> (b | a - c) -> a mod b = c.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Greatest common divisor (gcd).

    │ │ │ +

    Greatest common divisor (gcd).

    │ │ │ │ │ │
    │ │ │ │ │ │ There is no unicity of the gcd; hence we define the predicate │ │ │ Zis_gcd a b g expressing that g is a gcd of a and b. │ │ │ (We show later that the gcd is actually unique if we discard its sign.) │ │ │
    │ │ │ @@ -303,15 +303,15 @@ │ │ │ Theorem Zis_gcd_unique: forall a b c d : Z,
    │ │ │  Zis_gcd a b c -> Zis_gcd a b d -> c = d \/ c = (- d).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Extended Euclid algorithm.

    │ │ │ +

    Extended Euclid algorithm.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma deprecated_Zis_gcd_for_euclid :
    │ │ │   forall a b d q:Z, Zis_gcd b (a - q * b) d -> Zis_gcd a b d.
    │ │ │ @@ -391,15 +391,15 @@ │ │ │ Theorem Zis_gcd_uniqueness_apart_sign :
    │ │ │   forall a b d d':Z, Zis_gcd a b d -> Zis_gcd a b d' -> d = d' \/ d = - d'.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Bezout's coefficients

    │ │ │ +

    Bezout's coefficients

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive Bezout (a b d:Z) : Prop :=
    │ │ │   Bezout_intro : forall u v:Z, u * a + v * b = d -> Bezout a b d.
    │ │ │ @@ -427,15 +427,15 @@ │ │ │ Lemma Zis_gcd_mult :
    │ │ │   forall a b c d:Z, Zis_gcd a b d -> Zis_gcd (c * a) (c * b) (c * d).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relative primality

    │ │ │ +

    Relative primality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition rel_prime (a b:Z) : Prop := Zis_gcd a b 1.
    │ │ │ │ │ │ @@ -521,15 +521,15 @@ │ │ │
    │ │ │ Theorem Zrel_prime_neq_mod_0: forall a b, 1 < b -> rel_prime a b -> a mod b <> 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Primality

    │ │ │ +

    Primality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Inductive prime (p:Z) : Prop :=
    │ │ │   prime_intro :
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zorder.html │ │ │ @@ -67,30 +67,30 @@ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Properties of the order relations on binary integers │ │ │
    │ │ │ │ │ │ -

    Trichotomy

    │ │ │ +

    Trichotomy

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem Ztrichotomy_inf n m : {n < m} + {n = m} + {n > m}.
    │ │ │ │ │ │
    │ │ │ Theorem Ztrichotomy n m : n < m \/ n = m \/ n > m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Decidability of equality and order on Z

    │ │ │ +

    Decidability of equality and order on Z

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation dec_eq := Z.eq_decidable (only parsing).
    │ │ │ Notation dec_Zle := Z.le_decidable (only parsing).
    │ │ │ @@ -108,15 +108,15 @@ │ │ │
    │ │ │ Theorem not_Zeq n m : n <> m -> n < m \/ m < n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relating strict and large orders

    │ │ │ +

    Relating strict and large orders

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zgt_iff_lt := Z.gt_lt_iff (only parsing).
    │ │ │ Notation Zge_iff_le := Z.ge_le_iff (only parsing).
    │ │ │ @@ -148,15 +148,15 @@ │ │ │
    │ │ │ Lemma not_Zne n m : ~ Zne n m -> n = m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Equivalence and order properties

    │ │ │ +

    Equivalence and order properties

    │ │ │ │ │ │
    │ │ │ │ │ │ Reflexivity │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -272,19 +272,19 @@ │ │ │ #[global]
    │ │ │ Hint Resolve Z.le_trans: zarith.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Compatibility of order and operations on Z

    │ │ │ +

    Compatibility of order and operations on Z

    │ │ │ │ │ │
    │ │ │ │ │ │ -

    Successor

    │ │ │ +

    Successor

    │ │ │ │ │ │
    │ │ │ │ │ │ Compatibility of successor wrt to order │ │ │
    │ │ │
    │ │ │ │ │ │ @@ -454,15 +454,15 @@ │ │ │
    │ │ │ Lemma Zgt_succ_gt_or_eq n m : Z.succ n > m -> n > m \/ m = n.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Addition

    │ │ │ +

    Addition

    │ │ │ Compatibility of addition wrt to order │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zplus_lt_le_compat := Z.add_lt_le_mono (only parsing).
    │ │ │ Notation Zplus_le_lt_compat := Z.add_le_lt_mono (only parsing).
    │ │ │ @@ -524,15 +524,15 @@ │ │ │
    │ │ │ Lemma Zplus_gt_reg_r n m p : n + p > m + p -> n > m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Multiplication

    │ │ │ +

    Multiplication

    │ │ │ Compatibility of multiplication by a positive wrt to order │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zmult_le_compat_r n m p : n <= m -> 0 <= p -> n * p <= m * p.
    │ │ │ │ │ │ @@ -652,30 +652,30 @@ │ │ │
    │ │ │ Lemma Zmult_gt_0_reg_l n m : n > 0 -> n * m > 0 -> m > 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Square

    │ │ │ +

    Square

    │ │ │ Simplification of square wrt order │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Lemma Zlt_square_simpl n m : 0 <= n -> m * m < n * n -> m < n.
    │ │ │ │ │ │
    │ │ │ Lemma Zgt_square_simpl n m : n >= 0 -> n * n > m * m -> n > m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Equivalence between inequalities

    │ │ │ +

    Equivalence between inequalities

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Zle_plus_swap := Z.le_add_le_sub_r (only parsing).
    │ │ │ Notation Zlt_plus_swap := Z.lt_add_lt_sub_r (only parsing).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_def.html │ │ │ @@ -49,15 +49,15 @@ │ │ │ Require Import BinInt Ring_theory.
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power functions over Z

    │ │ │ +

    Power functions over Z

    │ │ │ │ │ │
    │ │ │ │ │ │ Nota : this file is mostly deprecated. The definition of Z.pow │ │ │ and its usual properties are now provided by module BinInt.Z. │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpow_facts.html │ │ │ @@ -128,15 +128,15 @@ │ │ │ Lemma Zpower2_Psize n p :
    │ │ │   Zpos p < 2^(Z.of_nat n) <-> (Pos.size_nat p <= n)%nat.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Z.pow and modulo

    │ │ │ +

    Z.pow and modulo

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem Zpower_mod p q n :
    │ │ │   0 < n -> (p^q) mod n = ((p mod n)^q) mod n.
    │ │ │ @@ -204,15 +204,15 @@ │ │ │ Theorem Zdivide_power_2 x p n :
    │ │ │  0 <= n -> 0 <= x -> prime p -> (x | p^n) -> exists m, x = p^m.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Z.square: a direct definition of z^2

    │ │ │ +

    Z.square: a direct definition of z^2

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Notation Psquare_correct := Pos.square_spec (only parsing).
    │ │ │ Notation Zsquare_correct := Z.square_spec (only parsing).
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zpower.html │ │ │ @@ -50,15 +50,15 @@ │ │ │ Require Export Zpow_def.
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Power functions over Z

    │ │ │ +

    Power functions over Z

    │ │ │ │ │ │
    │ │ │ │ │ │ Nota : this file is mostly deprecated. The definition of Z.pow │ │ │ and its usual properties are now provided by module BinInt.Z. │ │ │ Powers of 2 are also available there (see Z.shiftl and Z.shiftr). │ │ │ Only remain here: │ │ │ @@ -150,15 +150,15 @@ │ │ │
    │ │ │ Section Powers_of_2.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Powers of 2

    │ │ │ +

    Powers of 2

    │ │ │ │ │ │
    │ │ │ │ │ │ For the powers of two, that will be widely used, a more direct │ │ │ calculus is possible. shift n m computes 2^n * m, i.e. │ │ │ m shifted by n positions │ │ │
    │ │ │ @@ -279,15 +279,15 @@ │ │ │
    │ │ │ Section power_div_with_rest.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Division by a power of two.

    │ │ │ +

    Division by a power of two.

    │ │ │ │ │ │
    │ │ │ │ │ │ To x:Z and p:positive, q,r are associated such that │ │ │ x = 2^p.q + r and 0 <= r < 2^p │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.Zquot.html │ │ │ @@ -149,15 +149,15 @@ │ │ │
    │ │ │ Lemma Z_rem_mult a b : Z.rem (a*b) b = 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Division and Opposite

    │ │ │ +

    Division and Opposite

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │ @@ -228,15 +228,15 @@ │ │ │
    │ │ │ Theorem Zrem_lt_neg_neg a b : a<=0 -> b<0 -> b < Z.rem a b <= 0.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Unicity results

    │ │ │ +

    Unicity results

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Definition Remainder a b r :=
    │ │ │   (0 <= a /\ 0 <= r < Z.abs b) \/ (a <= 0 /\ -Z.abs b < r <= 0).
    │ │ │ @@ -261,15 +261,15 @@ │ │ │ Theorem Zrem_unique_full a b q r :
    │ │ │   Remainder a b r -> a = b*q + r -> r = Z.rem a b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Order results about Zrem and Zquot

    │ │ │ +

    Order results about Zrem and Zquot

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │ @@ -359,15 +359,15 @@ │ │ │ Theorem Zquot_sgn: forall a b,
    │ │ │   0 <= Z.sgn (a÷b) * Z.sgn a * Z.sgn b.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Relations between usual operations and Z.modulo and Z.div

    │ │ │ +

    Relations between usual operations and Z.modulo and Z.div

    │ │ │ │ │ │
    │ │ │ │ │ │ First, a result that used to be always valid with Zdiv, │ │ │ but must be restricted here. │ │ │ For instance, now (9+(-5)*2) rem 2 = -1 <> 1 = 9 rem 2 │ │ │
    │ │ │ @@ -523,15 +523,15 @@ │ │ │
    │ │ │ Lemma Zodd_rem : forall a, Z.odd a = negb (Z.eqb (Z.rem a 2) 0).
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Interaction with "historic" Zdiv

    │ │ │ +

    Interaction with "historic" Zdiv

    │ │ │ │ │ │
    │ │ │ │ │ │ They agree at least on positive numbers: │ │ │
    │ │ │
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.ZArith.auxiliary.html │ │ │ @@ -64,15 +64,15 @@ │ │ │
    │ │ │ Local Open Scope Z_scope.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Moving terms from one side to the other of an inequality

    │ │ │ +

    Moving terms from one side to the other of an inequality

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Theorem Zne_left n m : Zne n m -> Zne (n + - m) 0.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.btauto.Algebra.html │ │ │ @@ -140,15 +140,15 @@ │ │ │
    │ │ │ Section Definitions.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Global, inductive definitions.

    │ │ │ +

    Global, inductive definitions.

    │ │ │ │ │ │
    │ │ │ │ │ │ A Horner polynomial is either a constant, or a product P × (i + Q), where i │ │ │ is a variable. │ │ │
    │ │ │
    │ │ │ @@ -213,15 +213,15 @@ │ │ │ Program Instance Decidable_PosLe : forall p q, Decidable (Pos.le p q) :=
    │ │ │   { Decidable_witness := Pos.leb p q }.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    The core reflexive part.

    │ │ │ +

    The core reflexive part.

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ #[local]
    │ │ │ Hint Constructors valid : core.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInt.html │ │ │ @@ -58,19 +58,19 @@ │ │ │ Require Import Arith.
    │ │ │ Require Import ExtrHaskellNatNum.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ +

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ │ │ │ -

    by extracting nat into Int is definitively *not* a good idea.

    │ │ │ +

    by extracting nat into Int is definitively *not* a good idea.

    │ │ │ │ │ │ -

    See comments in ExtrOcamlNatInt.v.

    │ │ │ +

    See comments in ExtrOcamlNatInt.v.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Extract Inductive nat => "Prelude.Int" [ "0" "Prelude.succ" ]
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatInteger.html │ │ │ @@ -58,19 +58,19 @@ │ │ │ Require Import Arith.
    │ │ │ Require Import ExtrHaskellNatNum.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ +

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ │ │ │ -

    by extracting nat into Integer isn't necessarily a good idea.

    │ │ │ +

    by extracting nat into Integer isn't necessarily a good idea.

    │ │ │ │ │ │ -

    See comments in ExtrOcamlNatInt.v.

    │ │ │ +

    See comments in ExtrOcamlNatInt.v.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Extract Inductive nat => "Prelude.Integer" [ "0" "Prelude.succ" ]
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellNatNum.html │ │ │ @@ -43,23 +43,23 @@ │ │ │ │ │ │

    Library Coq.extraction.ExtrHaskellNatNum

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Efficient (but uncertified) extraction of usual nat functions

    │ │ │ +

    Efficient (but uncertified) extraction of usual nat functions

    │ │ │ │ │ │ -

    into equivalent versions in Haskell's Prelude that are defined

    │ │ │ +

    into equivalent versions in Haskell's Prelude that are defined

    │ │ │ │ │ │ -

    for any Num typeclass instances. Useful in combination with

    │ │ │ +

    for any Num typeclass instances. Useful in combination with

    │ │ │ │ │ │ -

    Extract Inductive nat that maps nat onto a Haskell type that

    │ │ │ +

    Extract Inductive nat that maps nat onto a Haskell type that

    │ │ │ │ │ │ -

    implements Num.

    │ │ │ +

    implements Num.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require Coq.extraction.Extraction.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellString.html │ │ │ @@ -43,15 +43,15 @@ │ │ │ │ │ │

    Library Coq.extraction.ExtrHaskellString

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Special handling of ascii and strings for extraction to Haskell.

    │ │ │ +

    Special handling of ascii and strings for extraction to Haskell.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require Coq.extraction.Extraction.
    │ │ │ @@ -64,24 +64,24 @@ │ │ │
    │ │ │ Require Export ExtrHaskellBasic.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    At the moment, Coq's extraction has no way to add extra import

    │ │ │ +

    At the moment, Coq's extraction has no way to add extra import

    │ │ │ │ │ │ -

    statements to the extracted Haskell code. You will have to

    │ │ │ +

    statements to the extracted Haskell code. You will have to

    │ │ │ │ │ │ -

    manually add:

    │ │ │ +

    manually add:

    │ │ │ │ │ │ * │ │ │ -

    import qualified Data.Bits

    │ │ │ +

    import qualified Data.Bits

    │ │ │ │ │ │ -

    import qualified Data.Char

    │ │ │ +

    import qualified Data.Char

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Extract Inductive ascii => "Prelude.Char"
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZInt.html │ │ │ @@ -58,19 +58,19 @@ │ │ │ Require Import ZArith.
    │ │ │ Require Import ExtrHaskellZNum.
    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ +

    Disclaimer: trying to obtain efficient certified programs

    │ │ │ │ │ │ -

    by extracting Z into Int is definitively *not* a good idea.

    │ │ │ +

    by extracting Z into Int is definitively *not* a good idea.

    │ │ │ │ │ │ -

    See comments in ExtrOcamlNatInt.v.

    │ │ │ +

    See comments in ExtrOcamlNatInt.v.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Extract Inductive positive => "Prelude.Int" [
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/Coq.extraction.ExtrHaskellZNum.html │ │ │ @@ -43,23 +43,23 @@ │ │ │ │ │ │

    Library Coq.extraction.ExtrHaskellZNum

    │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ -

    Efficient (but uncertified) extraction of usual Z functions

    │ │ │ +

    Efficient (but uncertified) extraction of usual Z functions

    │ │ │ │ │ │ -

    into equivalent versions in Haskell's Prelude that are defined

    │ │ │ +

    into equivalent versions in Haskell's Prelude that are defined

    │ │ │ │ │ │ -

    for any Num typeclass instances. Useful in combination with

    │ │ │ +

    for any Num typeclass instances. Useful in combination with

    │ │ │ │ │ │ -

    Extract Inductive Z that maps Z onto a Haskell type that

    │ │ │ +

    Extract Inductive Z that maps Z onto a Haskell type that

    │ │ │ │ │ │ -

    implements Num.

    │ │ │ +

    implements Num.

    │ │ │ │ │ │ │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ Require Coq.extraction.Extraction.
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/index_global_B.html │ │ │ @@ -5781,19 +5781,19 @@ │ │ │ 00016940: 3e0a 3c61 2068 7265 663d 2243 6f71 2e49 >.byte [in │ │ │ 00016970: 6475 6374 6976 652c 2069 6e20 3c61 2068 ductive, in Coq.Ini │ │ │ 000169a0: 742e 4279 7465 3c2f 613e 5d3c 6272 2f3e t.Byte]
    │ │ │ -000169b0: 0a3c 6120 6872 6566 3d22 436f 712e 496e .By │ │ │ -000169d0: 7465 3c2f 613e 205b 6c69 6272 6172 795d te [library] │ │ │ -000169e0: 3c62 722f 3e0a 3c61 2068 7265 663d 2243
    .Byte [libra │ │ │ +000169e0: 7279 5d3c 6272 2f3e 0a3c 6120 6872 6566 ry]
    .Byte [ │ │ │ 00016a10: 6c69 6272 6172 795d 3c62 722f 3e0a 3c61 library]
    .Byte │ │ │ 00016a50: 4e6f 7461 7469 6f6e 733c 2f61 3e20 5b6d Notations [m │ │ │ 00016a60: 6f64 756c 652c 2069 6e20 3c61 2068 7265 odule, in │ │ │

    T

    │ │ │ t [definition, in Coq.Init.Nat]
    │ │ │ t [inductive, in Coq.Vectors.Fin]
    │ │ │ t [abbreviation, in Coq.micromega.VarMap]
    │ │ │ t [inductive, in Coq.micromega.VarMap]
    │ │ │ t [inductive, in Coq.Vectors.VectorDef]
    │ │ │ -Tactics [library]
    │ │ │ Tactics [library]
    │ │ │ +Tactics [library]
    │ │ │ tactic_view [constructor, in Coq.ssr.ssreflect]
    │ │ │ Tadd [definition, in Coq.rtauto.Bintree]
    │ │ │ tag [definition, in Coq.ssr.ssrfun]
    │ │ │ Tag [section, in Coq.ssr.ssrfun]
    │ │ │ Tagged [definition, in Coq.ssr.ssrfun]
    │ │ │ tagged [definition, in Coq.ssr.ssrfun]
    │ │ │ Tagged2 [definition, in Coq.ssr.ssrfun]
    │ │ │ @@ -594,16 +594,16 @@ │ │ │ tan_PI3 [lemma, in Coq.Reals.Rtrigo_calc]
    │ │ │ tan_PI6 [lemma, in Coq.Reals.Rtrigo_calc]
    │ │ │ tan_PI4 [lemma, in Coq.Reals.Rtrigo_calc]
    │ │ │ tan_2PI [lemma, in Coq.Reals.Rtrigo_calc]
    │ │ │ tan_PI [lemma, in Coq.Reals.Rtrigo_calc]
    │ │ │ target [projection, in Coq.micromega.ZifyClasses]
    │ │ │ target_prop [projection, in Coq.micromega.ZifyClasses]
    │ │ │ -Tauto [library]
    │ │ │ Tauto [library]
    │ │ │ +Tauto [library]
    │ │ │ tauto_checker_sound [lemma, in Coq.micromega.Tauto]
    │ │ │ tauto_checker [definition, in Coq.micromega.Tauto]
    │ │ │ TBOp [projection, in Coq.micromega.ZifyClasses]
    │ │ │ TBOpInj [projection, in Coq.micromega.ZifyClasses]
    │ │ │ Tcons [constructor, in Coq.Classes.RelationClasses]
    │ │ │ TCst [projection, in Coq.micromega.ZifyClasses]
    │ │ │ TCstInj [projection, in Coq.micromega.ZifyClasses]
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/index_global_W.html │ │ │┄ Ordering differences only │ │ │ @@ -954,16 +954,16 @@ │ │ │ WEqProperties_fun.BasicProperties.s'' [variable, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun.BasicProperties.s' [variable, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun.BasicProperties.s [variable, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun.BasicProperties [section, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun.Add [definition, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun.MP [module, in Coq.FSets.FSetEqProperties]
    │ │ │ WEqProperties_fun [module, in Coq.FSets.FSetEqProperties]
    │ │ │ -Wf [library]
    │ │ │ Wf [library]
    │ │ │ +Wf [library]
    │ │ │ WFacts [module, in Coq.FSets.FMapFacts]
    │ │ │ WFacts [module, in Coq.MSets.MSetFacts]
    │ │ │ WFacts [module, in Coq.FSets.FSetFacts]
    │ │ │ WFactsOn [module, in Coq.MSets.MSetFacts]
    │ │ │ WFactsOn.add_s_m [instance, in Coq.MSets.MSetFacts]
    │ │ │ WFactsOn.add_m [instance, in Coq.MSets.MSetFacts]
    │ │ │ WFactsOn.add_neq_b [lemma, in Coq.MSets.MSetFacts]
    │ │ ├── ./usr/share/doc/libcoq-stdlib/html/index_library_B.html │ │ │┄ Ordering differences only │ │ │ @@ -541,16 +541,16 @@ │ │ │ Bool
    │ │ │ Bool
    │ │ │ BoolEq
    │ │ │ BoolOrder
    │ │ │ Bool_nat
    │ │ │ Btauto
    │ │ │ Bvector
    │ │ │ -Byte
    │ │ │ Byte
    │ │ │ +Byte
    │ │ │

    │ │ │