summaryrefslogtreecommitdiff
path: root/test-suite
diff options
context:
space:
mode:
authorGravatar Benjamin Barenblat <bbaren@debian.org>2018-12-29 14:31:27 -0500
committerGravatar Benjamin Barenblat <bbaren@debian.org>2018-12-29 14:31:27 -0500
commit9043add656177eeac1491a73d2f3ab92bec0013c (patch)
tree2b0092c84bfbf718eca10c81f60b2640dc8cab05 /test-suite
parenta4c7f8bd98be2a200489325ff7c5061cf80ab4f3 (diff)
Imported Upstream version 8.8.2upstream/8.8.2
Diffstat (limited to 'test-suite')
-rw-r--r--test-suite/.csdp.cachebin89077 -> 89077 bytes
-rw-r--r--test-suite/Makefile233
-rw-r--r--test-suite/README.md75
-rw-r--r--test-suite/bench/lists-100.v107
-rw-r--r--test-suite/bench/lists_100.v107
-rw-r--r--test-suite/bugs/4623.v2
-rw-r--r--test-suite/bugs/4624.v2
-rw-r--r--test-suite/bugs/5996.v8
-rw-r--r--test-suite/bugs/7333.v39
-rw-r--r--test-suite/bugs/closed/1238.v (renamed from test-suite/bugs/closed/38.v)2
-rw-r--r--test-suite/bugs/closed/1322.v6
-rw-r--r--test-suite/bugs/closed/1341.v (renamed from test-suite/bugs/closed/121.v)0
-rw-r--r--test-suite/bugs/closed/1362.v26
-rw-r--r--test-suite/bugs/closed/1425.v2
-rw-r--r--test-suite/bugs/closed/1501.v (renamed from test-suite/bugs/opened/1501.v)61
-rw-r--r--test-suite/bugs/closed/1542.v (renamed from test-suite/bugs/closed/328.v)0
-rw-r--r--test-suite/bugs/closed/1543.v (renamed from test-suite/bugs/closed/329.v)0
-rw-r--r--test-suite/bugs/closed/1545.v (renamed from test-suite/bugs/closed/331.v)0
-rw-r--r--test-suite/bugs/closed/1547.v (renamed from test-suite/bugs/closed/335.v)0
-rw-r--r--test-suite/bugs/closed/1551.v (renamed from test-suite/bugs/closed/348.v)2
-rw-r--r--test-suite/bugs/closed/1584.v (renamed from test-suite/bugs/closed/545.v)0
-rw-r--r--test-suite/bugs/closed/1738.v2
-rw-r--r--test-suite/bugs/closed/1859.v20
-rw-r--r--test-suite/bugs/closed/1900.v2
-rw-r--r--test-suite/bugs/closed/1901.v2
-rw-r--r--test-suite/bugs/closed/1905.v2
-rw-r--r--test-suite/bugs/closed/1915.v2
-rw-r--r--test-suite/bugs/closed/1939.v2
-rw-r--r--test-suite/bugs/closed/1962.v2
-rw-r--r--test-suite/bugs/closed/2001.v2
-rw-r--r--test-suite/bugs/closed/2027.v2
-rw-r--r--test-suite/bugs/closed/2136.v2
-rw-r--r--test-suite/bugs/closed/2137.v2
-rw-r--r--test-suite/bugs/closed/2141.v4
-rw-r--r--test-suite/bugs/closed/2245.v11
-rw-r--r--test-suite/bugs/closed/2281.v2
-rw-r--r--test-suite/bugs/closed/2310.v2
-rw-r--r--test-suite/bugs/closed/2319.v2
-rw-r--r--test-suite/bugs/closed/2378.v2
-rw-r--r--test-suite/bugs/closed/2417.v15
-rw-r--r--test-suite/bugs/closed/2456.v (renamed from test-suite/bugs/opened/2456.v)7
-rw-r--r--test-suite/bugs/closed/2464.v2
-rw-r--r--test-suite/bugs/closed/2473.v2
-rw-r--r--test-suite/bugs/closed/2584.v2
-rw-r--r--test-suite/bugs/closed/2586.v2
-rw-r--r--test-suite/bugs/closed/2602.v2
-rw-r--r--test-suite/bugs/closed/2615.v2
-rw-r--r--test-suite/bugs/closed/2640.v17
-rw-r--r--test-suite/bugs/closed/2668.v2
-rw-r--r--test-suite/bugs/closed/2734.v2
-rw-r--r--test-suite/bugs/closed/2750.v2
-rw-r--r--test-suite/bugs/closed/2800.v13
-rw-r--r--test-suite/bugs/closed/2814.v (renamed from test-suite/bugs/opened/2814.v)1
-rw-r--r--test-suite/bugs/closed/2837.v2
-rw-r--r--test-suite/bugs/closed/2848.v2
-rw-r--r--test-suite/bugs/closed/2850.v2
-rw-r--r--test-suite/bugs/closed/2881.v7
-rw-r--r--test-suite/bugs/closed/2955.v2
-rw-r--r--test-suite/bugs/closed/2983.v2
-rw-r--r--test-suite/bugs/closed/2995.v2
-rw-r--r--test-suite/bugs/closed/3008.v2
-rw-r--r--test-suite/bugs/closed/3036.v6
-rw-r--r--test-suite/bugs/closed/3080.v2
-rw-r--r--test-suite/bugs/closed/3100.v (renamed from test-suite/bugs/opened/3100.v)0
-rw-r--r--test-suite/bugs/closed/3125.v27
-rw-r--r--test-suite/bugs/closed/3230.v (renamed from test-suite/bugs/opened/3230.v)0
-rw-r--r--test-suite/bugs/closed/3287.v11
-rw-r--r--test-suite/bugs/closed/3319.v2
-rw-r--r--test-suite/bugs/closed/3320.v (renamed from test-suite/bugs/opened/3320.v)3
-rw-r--r--test-suite/bugs/closed/3323.v2
-rw-r--r--test-suite/bugs/closed/3330.v7
-rw-r--r--test-suite/bugs/closed/3331.v2
-rw-r--r--test-suite/bugs/closed/3332.v2
-rw-r--r--test-suite/bugs/closed/3346.v2
-rw-r--r--test-suite/bugs/closed/3348.v2
-rw-r--r--test-suite/bugs/closed/3350.v2
-rw-r--r--test-suite/bugs/closed/3352.v4
-rw-r--r--test-suite/bugs/closed/3375.v2
-rw-r--r--test-suite/bugs/closed/3387.v2
-rw-r--r--test-suite/bugs/closed/3392.v2
-rw-r--r--test-suite/bugs/closed/3393.v2
-rw-r--r--test-suite/bugs/closed/3402.v2
-rw-r--r--test-suite/bugs/closed/3427.v2
-rw-r--r--test-suite/bugs/closed/3428.v2
-rw-r--r--test-suite/bugs/closed/3439.v2
-rw-r--r--test-suite/bugs/closed/3441.v2
-rw-r--r--test-suite/bugs/closed/3446.v2
-rw-r--r--test-suite/bugs/closed/3477.v2
-rw-r--r--test-suite/bugs/closed/3480.v2
-rw-r--r--test-suite/bugs/closed/3481.v4
-rw-r--r--test-suite/bugs/closed/3482.v2
-rw-r--r--test-suite/bugs/closed/3484.v2
-rw-r--r--test-suite/bugs/closed/3513.v22
-rw-r--r--test-suite/bugs/closed/3520.v2
-rw-r--r--test-suite/bugs/closed/3531.v2
-rw-r--r--test-suite/bugs/closed/3539.v2
-rw-r--r--test-suite/bugs/closed/3559.v1
-rw-r--r--test-suite/bugs/closed/3560.v2
-rw-r--r--test-suite/bugs/closed/3561.v2
-rw-r--r--test-suite/bugs/closed/3567.v2
-rw-r--r--test-suite/bugs/closed/3584.v2
-rw-r--r--test-suite/bugs/closed/3590.v2
-rw-r--r--test-suite/bugs/closed/3594.v2
-rw-r--r--test-suite/bugs/closed/3596.v2
-rw-r--r--test-suite/bugs/closed/3612.v6
-rw-r--r--test-suite/bugs/closed/3618.v2
-rw-r--r--test-suite/bugs/closed/3624.v2
-rw-r--r--test-suite/bugs/closed/3633.v2
-rw-r--r--test-suite/bugs/closed/3638.v2
-rw-r--r--test-suite/bugs/closed/3640.v2
-rw-r--r--test-suite/bugs/closed/3641.v2
-rw-r--r--test-suite/bugs/closed/3648.v2
-rw-r--r--test-suite/bugs/closed/3649.v6
-rw-r--r--test-suite/bugs/closed/3658.v2
-rw-r--r--test-suite/bugs/closed/3661.v2
-rw-r--r--test-suite/bugs/closed/3662.v2
-rw-r--r--test-suite/bugs/closed/3664.v2
-rw-r--r--test-suite/bugs/closed/3666.v2
-rw-r--r--test-suite/bugs/closed/3668.v2
-rw-r--r--test-suite/bugs/closed/3672.v2
-rw-r--r--test-suite/bugs/closed/3690.v75
-rw-r--r--test-suite/bugs/closed/3698.v2
-rw-r--r--test-suite/bugs/closed/3699.v2
-rw-r--r--test-suite/bugs/closed/3700.v2
-rw-r--r--test-suite/bugs/closed/3703.v2
-rw-r--r--test-suite/bugs/closed/3732.v2
-rw-r--r--test-suite/bugs/closed/3735.v2
-rw-r--r--test-suite/bugs/closed/3743.v2
-rw-r--r--test-suite/bugs/closed/3753.v2
-rw-r--r--test-suite/bugs/closed/3782.v2
-rw-r--r--test-suite/bugs/closed/3783.v2
-rw-r--r--test-suite/bugs/closed/3807.v2
-rw-r--r--test-suite/bugs/closed/3808.v2
-rw-r--r--test-suite/bugs/closed/3819.v2
-rw-r--r--test-suite/bugs/closed/3881.v4
-rw-r--r--test-suite/bugs/closed/3886.v2
-rw-r--r--test-suite/bugs/closed/3899.v2
-rw-r--r--test-suite/bugs/closed/3923.v3
-rw-r--r--test-suite/bugs/closed/3943.v50
-rw-r--r--test-suite/bugs/closed/3956.v4
-rw-r--r--test-suite/bugs/closed/3960.v2
-rw-r--r--test-suite/bugs/closed/3974.v2
-rw-r--r--test-suite/bugs/closed/3975.v2
-rw-r--r--test-suite/bugs/closed/3998.v2
-rw-r--r--test-suite/bugs/closed/4031.v2
-rw-r--r--test-suite/bugs/closed/4069.v2
-rw-r--r--test-suite/bugs/closed/4089.v2
-rw-r--r--test-suite/bugs/closed/4095.v2
-rw-r--r--test-suite/bugs/closed/4097.v2
-rw-r--r--test-suite/bugs/closed/4101.v2
-rw-r--r--test-suite/bugs/closed/4120.v2
-rw-r--r--test-suite/bugs/closed/4121.v6
-rw-r--r--test-suite/bugs/closed/4132.v31
-rw-r--r--test-suite/bugs/closed/4151.v2
-rw-r--r--test-suite/bugs/closed/4161.v2
-rw-r--r--test-suite/bugs/closed/4202.v10
-rw-r--r--test-suite/bugs/closed/4203.v2
-rw-r--r--test-suite/bugs/closed/4214.v2
-rw-r--r--test-suite/bugs/closed/4250.v11
-rw-r--r--test-suite/bugs/closed/4251.v2
-rw-r--r--test-suite/bugs/closed/4273.v2
-rw-r--r--test-suite/bugs/closed/4276.v2
-rw-r--r--test-suite/bugs/closed/4287.v2
-rw-r--r--test-suite/bugs/closed/4293.v2
-rw-r--r--test-suite/bugs/closed/4299.v2
-rw-r--r--test-suite/bugs/closed/4306.v32
-rw-r--r--test-suite/bugs/closed/4328.v2
-rw-r--r--test-suite/bugs/closed/4354.v2
-rw-r--r--test-suite/bugs/closed/4366.v2
-rw-r--r--test-suite/bugs/closed/4375.v2
-rw-r--r--test-suite/bugs/closed/4390.v6
-rw-r--r--test-suite/bugs/closed/4394.v19
-rw-r--r--test-suite/bugs/closed/4400.v19
-rw-r--r--test-suite/bugs/closed/4403.v3
-rw-r--r--test-suite/bugs/closed/4416.v2
-rw-r--r--test-suite/bugs/closed/4433.v2
-rw-r--r--test-suite/bugs/closed/4443.v2
-rw-r--r--test-suite/bugs/closed/4450.v2
-rw-r--r--test-suite/bugs/closed/4456.v2
-rw-r--r--test-suite/bugs/closed/4480.v2
-rw-r--r--test-suite/bugs/closed/4498.v2
-rw-r--r--test-suite/bugs/closed/4503.v2
-rw-r--r--test-suite/bugs/closed/4519.v2
-rw-r--r--test-suite/bugs/closed/4527.v3
-rw-r--r--test-suite/bugs/closed/4533.v5
-rw-r--r--test-suite/bugs/closed/4544.v5
-rw-r--r--test-suite/bugs/closed/4603.v2
-rw-r--r--test-suite/bugs/closed/4616.v5
-rw-r--r--test-suite/bugs/closed/4627.v2
-rw-r--r--test-suite/bugs/closed/4656.v4
-rw-r--r--test-suite/bugs/closed/4673.v2
-rw-r--r--test-suite/bugs/closed/4679.v2
-rw-r--r--test-suite/bugs/closed/4709.v18
-rw-r--r--test-suite/bugs/closed/4710.v5
-rw-r--r--test-suite/bugs/closed/4717.v37
-rw-r--r--test-suite/bugs/closed/4720.v50
-rw-r--r--test-suite/bugs/closed/4722.v1
l---------test-suite/bugs/closed/4722/tata1
-rw-r--r--test-suite/bugs/closed/4723.v2
-rw-r--r--test-suite/bugs/closed/4727.v10
-rw-r--r--test-suite/bugs/closed/4733.v52
-rw-r--r--test-suite/bugs/closed/4754.v2
-rw-r--r--test-suite/bugs/closed/4763.v2
-rw-r--r--test-suite/bugs/closed/4769.v4
-rw-r--r--test-suite/bugs/closed/4780.v2
-rw-r--r--test-suite/bugs/closed/4785.v11
-rw-r--r--test-suite/bugs/closed/4785_compat_85.v46
-rw-r--r--test-suite/bugs/closed/4798.v2
-rw-r--r--test-suite/bugs/closed/4811.v2
-rw-r--r--test-suite/bugs/closed/4818.v2
-rw-r--r--test-suite/bugs/closed/4844.v47
-rw-r--r--test-suite/bugs/closed/4852.v54
-rw-r--r--test-suite/bugs/closed/4869.v2
-rw-r--r--test-suite/bugs/closed/4873.v3
-rw-r--r--test-suite/bugs/closed/4877.v2
-rw-r--r--test-suite/bugs/closed/4957.v6
-rw-r--r--test-suite/bugs/closed/4969.v11
-rw-r--r--test-suite/bugs/closed/5019.v5
-rw-r--r--test-suite/bugs/closed/5036.v2
-rw-r--r--test-suite/bugs/closed/5065.v2
-rw-r--r--test-suite/bugs/closed/5123.v2
-rw-r--r--test-suite/bugs/closed/5153.v8
-rw-r--r--test-suite/bugs/closed/5177.v22
-rw-r--r--test-suite/bugs/closed/5180.v2
-rw-r--r--test-suite/bugs/closed/5193.v14
-rw-r--r--test-suite/bugs/closed/5198.v2
-rw-r--r--test-suite/bugs/closed/5203.v2
-rw-r--r--test-suite/bugs/closed/5205.v6
-rw-r--r--test-suite/bugs/closed/5215.v286
-rw-r--r--test-suite/bugs/closed/5215_2.v8
-rw-r--r--test-suite/bugs/closed/5219.v10
-rw-r--r--test-suite/bugs/closed/5233.v2
-rw-r--r--test-suite/bugs/closed/5245.v18
-rw-r--r--test-suite/bugs/closed/5255.v24
-rw-r--r--test-suite/bugs/closed/5277.v11
-rw-r--r--test-suite/bugs/closed/5281.v6
-rw-r--r--test-suite/bugs/closed/5286.v9
-rw-r--r--test-suite/bugs/closed/5300.v39
-rw-r--r--test-suite/bugs/closed/5315.v10
-rw-r--r--test-suite/bugs/closed/5321.v18
-rw-r--r--test-suite/bugs/closed/5322.v14
-rw-r--r--test-suite/bugs/closed/5323.v26
-rw-r--r--test-suite/bugs/closed/5331.v11
-rw-r--r--test-suite/bugs/closed/5345.v7
-rw-r--r--test-suite/bugs/closed/5346.v29
-rw-r--r--test-suite/bugs/closed/5347.v10
-rw-r--r--test-suite/bugs/closed/5359.v218
-rw-r--r--test-suite/bugs/closed/5365.v13
-rw-r--r--test-suite/bugs/closed/5368.v6
-rw-r--r--test-suite/bugs/closed/5372.v8
-rw-r--r--test-suite/bugs/closed/5377.v54
-rw-r--r--test-suite/bugs/closed/5401.v21
-rw-r--r--test-suite/bugs/closed/5414.v12
-rw-r--r--test-suite/bugs/closed/5434.v18
-rw-r--r--test-suite/bugs/closed/5435.v2
-rw-r--r--test-suite/bugs/closed/5449.v6
-rw-r--r--test-suite/bugs/closed/5460.v11
-rw-r--r--test-suite/bugs/closed/5470.v3
-rw-r--r--test-suite/bugs/closed/5476.v28
-rw-r--r--test-suite/bugs/closed/5486.v15
-rw-r--r--test-suite/bugs/closed/5487.v9
-rw-r--r--test-suite/bugs/closed/5501.v21
-rw-r--r--test-suite/bugs/closed/5522.v7
-rw-r--r--test-suite/bugs/closed/5523.v6
-rw-r--r--test-suite/bugs/closed/5526.v3
-rw-r--r--test-suite/bugs/closed/5532.v15
-rw-r--r--test-suite/bugs/closed/5539.v15
-rw-r--r--test-suite/bugs/closed/5550.v10
-rw-r--r--test-suite/bugs/closed/5578.v57
-rw-r--r--test-suite/bugs/closed/5598.v8
-rw-r--r--test-suite/bugs/closed/5608.v33
-rw-r--r--test-suite/bugs/closed/5618.v9
-rw-r--r--test-suite/bugs/closed/5641.v6
-rw-r--r--test-suite/bugs/closed/5666.v4
-rw-r--r--test-suite/bugs/closed/5671.v7
-rw-r--r--test-suite/bugs/closed/5683.v71
-rw-r--r--test-suite/bugs/closed/5692.v88
-rw-r--r--test-suite/bugs/closed/5697.v19
-rw-r--r--test-suite/bugs/closed/5707.v12
-rw-r--r--test-suite/bugs/closed/5713.v15
-rw-r--r--test-suite/bugs/closed/5717.v5
-rw-r--r--test-suite/bugs/closed/5726.v34
-rw-r--r--test-suite/bugs/closed/5741.v4
-rw-r--r--test-suite/bugs/closed/5749.v18
-rw-r--r--test-suite/bugs/closed/5750.v3
-rw-r--r--test-suite/bugs/closed/5755.v16
-rw-r--r--test-suite/bugs/closed/5757.v76
-rw-r--r--test-suite/bugs/closed/5761.v126
-rw-r--r--test-suite/bugs/closed/5762.v34
-rw-r--r--test-suite/bugs/closed/5765.v3
-rw-r--r--test-suite/bugs/closed/5769.v20
-rw-r--r--test-suite/bugs/closed/5786.v29
-rw-r--r--test-suite/bugs/closed/5790.v7
-rw-r--r--test-suite/bugs/closed/5797.v (renamed from test-suite/bugs/closed/846.v)0
-rw-r--r--test-suite/bugs/closed/5845.v (renamed from test-suite/bugs/closed/931.v)0
-rw-r--r--test-suite/bugs/closed/5940.v (renamed from test-suite/bugs/closed/1100.v)0
-rw-r--r--test-suite/bugs/closed/6070.v32
-rw-r--r--test-suite/bugs/closed/6129.v9
-rw-r--r--test-suite/bugs/closed/6191.v16
-rw-r--r--test-suite/bugs/closed/6297.v8
-rw-r--r--test-suite/bugs/closed/6313.v64
-rw-r--r--test-suite/bugs/closed/6323.v9
-rw-r--r--test-suite/bugs/closed/6378.v18
-rw-r--r--test-suite/bugs/closed/6490.v4
-rw-r--r--test-suite/bugs/closed/6529.v16
-rw-r--r--test-suite/bugs/closed/6534.v7
-rw-r--r--test-suite/bugs/closed/6617.v34
-rw-r--r--test-suite/bugs/closed/6631.v7
-rw-r--r--test-suite/bugs/closed/6634.v6
-rw-r--r--test-suite/bugs/closed/6661.v259
-rw-r--r--test-suite/bugs/closed/6677.v5
-rw-r--r--test-suite/bugs/closed/6770.v7
-rw-r--r--test-suite/bugs/closed/6774.v7
-rw-r--r--test-suite/bugs/closed/6775.v43
-rw-r--r--test-suite/bugs/closed/6878.v8
-rw-r--r--test-suite/bugs/closed/6910.v5
-rw-r--r--test-suite/bugs/closed/6951.v2
-rw-r--r--test-suite/bugs/closed/6956.v13
-rw-r--r--test-suite/bugs/closed/7113.v10
-rw-r--r--test-suite/bugs/closed/7195.v12
-rw-r--r--test-suite/bugs/closed/7392.v9
-rw-r--r--test-suite/bugs/closed/7462.v13
-rw-r--r--test-suite/bugs/closed/7554.v12
-rw-r--r--test-suite/bugs/closed/7615.v19
-rw-r--r--test-suite/bugs/closed/7631.v21
-rw-r--r--test-suite/bugs/closed/7695.v20
-rw-r--r--test-suite/bugs/closed/7700.v9
-rw-r--r--test-suite/bugs/closed/7712.v4
-rw-r--r--test-suite/bugs/closed/7723.v58
-rw-r--r--test-suite/bugs/closed/7779.v15
-rw-r--r--test-suite/bugs/closed/7780.v16
-rw-r--r--test-suite/bugs/closed/7795.v65
-rw-r--r--test-suite/bugs/closed/7811.v114
-rw-r--r--test-suite/bugs/closed/7854.v10
-rw-r--r--test-suite/bugs/closed/7867.v4
-rw-r--r--test-suite/bugs/closed/8004.v47
-rw-r--r--test-suite/bugs/closed/808_2411.v2
-rw-r--r--test-suite/bugs/closed/8119.v46
-rw-r--r--test-suite/bugs/closed/8121.v46
-rw-r--r--test-suite/bugs/closed/8288.v7
-rw-r--r--test-suite/bugs/closed/8432.v39
-rw-r--r--test-suite/bugs/closed/8532.v8
-rw-r--r--test-suite/bugs/closed/HoTT_coq_012.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_014.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_032.v1
-rw-r--r--test-suite/bugs/closed/HoTT_coq_053.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_054.v1
-rw-r--r--test-suite/bugs/closed/HoTT_coq_055.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_059.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_062.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_064.v1
-rw-r--r--test-suite/bugs/closed/HoTT_coq_077.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_080.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_097.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_104.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_107.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_108.v2
-rw-r--r--test-suite/bugs/closed/HoTT_coq_123.v8
-rw-r--r--test-suite/bugs/closed/gh6165.v5
-rw-r--r--test-suite/bugs/closed/gh6384.v5
-rw-r--r--test-suite/bugs/closed/gh6385.v5
-rw-r--r--test-suite/bugs/opened/1596.v3
-rw-r--r--test-suite/bugs/opened/1615.v (renamed from test-suite/bugs/opened/743.v)0
-rw-r--r--test-suite/bugs/opened/1811.v2
-rw-r--r--test-suite/bugs/opened/3209.v17
-rw-r--r--test-suite/bugs/opened/3263.v232
-rw-r--r--test-suite/bugs/opened/3424.v (renamed from test-suite/bugs/closed/3424.v)4
-rw-r--r--test-suite/bugs/opened/3794.v2
-rw-r--r--test-suite/bugs/opened/3916.v3
-rw-r--r--test-suite/bugs/opened/3926.v30
-rw-r--r--test-suite/bugs/opened/3948.v25
-rw-r--r--test-suite/bugs/opened/4717.v19
-rw-r--r--test-suite/bugs/opened/4803.v48
-rw-r--r--test-suite/bugs/opened/4813.v4
-rw-r--r--test-suite/bugs/opened/6393.v11
-rw-r--r--test-suite/bugs/opened/6602.v17
-rw-r--r--test-suite/complexity/constructor.v216
-rw-r--r--test-suite/coq-makefile/arg/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/arg/run.sh7
-rw-r--r--test-suite/coq-makefile/compat-subdirs/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/compat-subdirs/run.sh8
-rw-r--r--test-suite/coq-makefile/compat-subdirs/subdir/Makefile3
-rw-r--r--test-suite/coq-makefile/coqdoc1/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/coqdoc1/run.sh51
-rw-r--r--test-suite/coq-makefile/coqdoc2/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/coqdoc2/run.sh51
-rw-r--r--test-suite/coq-makefile/emptyprefix/_CoqProject11
-rw-r--r--test-suite/coq-makefile/emptyprefix/_CoqProject.sub3
-rwxr-xr-xtest-suite/coq-makefile/emptyprefix/run.sh17
-rw-r--r--test-suite/coq-makefile/extend-subdirs/Makefile.local4
-rw-r--r--test-suite/coq-makefile/extend-subdirs/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/extend-subdirs/run.sh8
-rw-r--r--test-suite/coq-makefile/extend-subdirs/subdir/Makefile5
-rw-r--r--test-suite/coq-makefile/findlib-package/Makefile.local1
-rw-r--r--test-suite/coq-makefile/findlib-package/_CoqProject10
-rw-r--r--test-suite/coq-makefile/findlib-package/findlib/foo/META4
-rw-r--r--test-suite/coq-makefile/findlib-package/findlib/foo/Makefile14
-rw-r--r--test-suite/coq-makefile/findlib-package/findlib/foo/foo.mli0
-rw-r--r--test-suite/coq-makefile/findlib-package/findlib/foo/foolib.ml2
-rwxr-xr-xtest-suite/coq-makefile/findlib-package/run.sh18
-rw-r--r--test-suite/coq-makefile/latex1/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/latex1/run.sh13
-rw-r--r--test-suite/coq-makefile/merlin1/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/merlin1/run.sh13
-rw-r--r--test-suite/coq-makefile/mlpack1/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/mlpack1/run.sh23
-rw-r--r--test-suite/coq-makefile/mlpack2/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/mlpack2/run.sh23
-rw-r--r--test-suite/coq-makefile/multiroot/_CoqProject12
-rwxr-xr-xtest-suite/coq-makefile/multiroot/run.sh56
-rw-r--r--test-suite/coq-makefile/native1/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/native1/run.sh33
-rw-r--r--test-suite/coq-makefile/only/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/only/run.sh10
-rw-r--r--test-suite/coq-makefile/plugin1/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/plugin1/run.sh26
-rw-r--r--test-suite/coq-makefile/plugin2/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/plugin2/run.sh26
-rw-r--r--test-suite/coq-makefile/plugin3/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/plugin3/run.sh26
-rw-r--r--test-suite/coq-makefile/quick2vo/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/quick2vo/run.sh12
-rwxr-xr-xtest-suite/coq-makefile/template/init.sh17
-rwxr-xr-xtest-suite/coq-makefile/template/path-init.sh5
-rw-r--r--test-suite/coq-makefile/template/src/test.ml414
-rw-r--r--test-suite/coq-makefile/template/src/test.mli0
-rw-r--r--test-suite/coq-makefile/template/src/test_aux.ml1
-rw-r--r--test-suite/coq-makefile/template/src/test_aux.mli1
-rw-r--r--test-suite/coq-makefile/template/src/test_plugin.mlpack2
-rw-r--r--test-suite/coq-makefile/template/theories/sub/testsub.v1
-rw-r--r--test-suite/coq-makefile/template/theories/test.v7
-rw-r--r--test-suite/coq-makefile/timing/after/Fast.v4
-rw-r--r--test-suite/coq-makefile/timing/after/Slow.v1
-rw-r--r--test-suite/coq-makefile/timing/after/_CoqProject2
-rw-r--r--test-suite/coq-makefile/timing/after/time-of-build-after.log.desired15
-rw-r--r--test-suite/coq-makefile/timing/after/time-of-build-before.log.desired15
-rw-r--r--test-suite/coq-makefile/timing/after/time-of-build-both.log.desired6
-rw-r--r--test-suite/coq-makefile/timing/aggregate/Fast.v1
-rw-r--r--test-suite/coq-makefile/timing/aggregate/Slow.v4
-rw-r--r--test-suite/coq-makefile/timing/aggregate/_CoqProject2
-rw-r--r--test-suite/coq-makefile/timing/before/Fast.v1
-rw-r--r--test-suite/coq-makefile/timing/before/Slow.v4
-rw-r--r--test-suite/coq-makefile/timing/before/_CoqProject2
-rw-r--r--test-suite/coq-makefile/timing/error/A.v1
-rw-r--r--test-suite/coq-makefile/timing/error/_CoqProject1
-rw-r--r--test-suite/coq-makefile/timing/per-file-after/A.v4
-rw-r--r--test-suite/coq-makefile/timing/per-file-after/A.v.timing.diff.desired9
-rw-r--r--test-suite/coq-makefile/timing/per-file-after/_CoqProject1
-rw-r--r--test-suite/coq-makefile/timing/per-file-before/A.v4
-rw-r--r--test-suite/coq-makefile/timing/per-file-before/_CoqProject1
-rwxr-xr-xtest-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/run.sh10
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-after.log.in1760
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-before.log.in1662
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-both.log.expected26
-rwxr-xr-xtest-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/run.sh10
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build-pretty.log.expected26
-rw-r--r--test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build.log.in1760
-rwxr-xr-xtest-suite/coq-makefile/timing/precomputed-time-tests/run.sh10
-rwxr-xr-xtest-suite/coq-makefile/timing/run.sh108
-rw-r--r--test-suite/coq-makefile/uninstall1/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/uninstall1/run.sh18
-rw-r--r--test-suite/coq-makefile/uninstall2/_CoqProject11
-rwxr-xr-xtest-suite/coq-makefile/uninstall2/run.sh18
-rw-r--r--test-suite/coq-makefile/validate1/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/validate1/run.sh8
-rw-r--r--test-suite/coq-makefile/vio2vo/_CoqProject10
-rwxr-xr-xtest-suite/coq-makefile/vio2vo/run.sh13
-rw-r--r--test-suite/coqchk/bug_7539.v26
-rw-r--r--test-suite/coqchk/cumulativity.v67
-rw-r--r--test-suite/coqchk/include.v11
-rw-r--r--test-suite/coqchk/primproj2.v10
-rw-r--r--test-suite/coqchk/univ.v54
-rw-r--r--test-suite/coqdoc/bug5648.html.out53
-rw-r--r--test-suite/coqdoc/bug5648.tex.out59
-rw-r--r--test-suite/coqdoc/bug5648.v19
-rw-r--r--test-suite/coqdoc/bug5700.html.out50
-rw-r--r--test-suite/coqdoc/bug5700.tex.out34
-rw-r--r--test-suite/coqdoc/bug5700.v5
-rw-r--r--test-suite/coqdoc/links.html.out206
-rw-r--r--test-suite/coqdoc/links.tex.out172
-rw-r--r--test-suite/coqwc/BZ5637.out2
-rw-r--r--test-suite/coqwc/BZ5637.v5
-rw-r--r--test-suite/coqwc/BZ5756.out2
-rw-r--r--test-suite/coqwc/BZ5756.v3
-rw-r--r--test-suite/coqwc/false.out2
-rw-r--r--test-suite/coqwc/false.v8
-rw-r--r--test-suite/coqwc/next-obligation.out2
-rw-r--r--test-suite/coqwc/next-obligation.v10
-rw-r--r--test-suite/coqwc/theorem.out2
-rw-r--r--test-suite/coqwc/theorem.v10
-rw-r--r--test-suite/failure/Tauto.v10
-rw-r--r--test-suite/failure/circular_subtyping.v2
-rw-r--r--test-suite/failure/clash_cons.v10
-rw-r--r--test-suite/failure/cofixpoint.v2
-rw-r--r--test-suite/failure/fixpoint1.v10
-rw-r--r--test-suite/failure/fixpointeta.v70
-rw-r--r--test-suite/failure/guard-cofix.v2
-rw-r--r--test-suite/failure/guard.v10
-rw-r--r--test-suite/failure/illtype1.v10
-rw-r--r--test-suite/failure/int31.v2
-rw-r--r--test-suite/failure/positivity.v10
-rw-r--r--test-suite/failure/proofirrelevance.v5
-rw-r--r--test-suite/failure/redef.v10
-rw-r--r--test-suite/failure/search.v10
-rw-r--r--test-suite/failure/sortelim.v2
-rw-r--r--test-suite/ide/blocking-futures.fake1
-rw-r--r--test-suite/ide/bug7088.fake13
-rw-r--r--test-suite/ide/load.fake11
-rw-r--r--test-suite/ide/undo.v103
-rw-r--r--test-suite/ide/undo011.fake34
-rw-r--r--test-suite/ideal-features/Apply.v10
-rw-r--r--test-suite/ideal-features/complexity/evars_subst.v2
-rw-r--r--test-suite/ideal-features/evars_subst.v2
-rw-r--r--test-suite/ideal-features/implicit_binders.v2
-rw-r--r--test-suite/interactive/Back.v2
-rw-r--r--test-suite/interactive/ParalITP.v2
-rw-r--r--test-suite/interactive/proof_block.v2
-rw-r--r--test-suite/kernel/inds.mv3
-rw-r--r--test-suite/micromega/square.v6
-rwxr-xr-xtest-suite/misc/4722.sh15
-rw-r--r--test-suite/misc/berardi_test.v153
-rwxr-xr-xtest-suite/misc/coqc_dash_o.sh15
-rw-r--r--test-suite/misc/coqc_dash_o.v1
-rwxr-xr-xtest-suite/misc/deps-checksum.sh5
-rwxr-xr-xtest-suite/misc/deps-order.sh20
-rwxr-xr-xtest-suite/misc/deps-utf8.sh17
-rw-r--r--test-suite/misc/deps/αβ/γδ.v4
-rw-r--r--test-suite/misc/deps/αβ/εζ.v1
-rwxr-xr-xtest-suite/misc/exitstatus.sh7
-rw-r--r--test-suite/misc/exitstatus/illtyped.v1
-rwxr-xr-xtest-suite/misc/printers.sh3
-rwxr-xr-xtest-suite/misc/universes.sh8
-rw-r--r--test-suite/modules/Demo.v2
-rw-r--r--test-suite/modules/Nat.v2
-rw-r--r--test-suite/modules/PO.v2
-rw-r--r--test-suite/modules/SeveralWith.v12
-rw-r--r--test-suite/modules/Tescik.v2
-rw-r--r--test-suite/modules/WithDefUBinders.v15
-rw-r--r--test-suite/modules/cumpoly.v19
-rw-r--r--test-suite/modules/grammar.v2
-rw-r--r--test-suite/modules/injection_discriminate_inversion.v2
-rw-r--r--test-suite/modules/modeq.v2
-rw-r--r--test-suite/modules/objects2.v2
-rw-r--r--test-suite/modules/pliczek.v2
-rw-r--r--test-suite/modules/plik.v2
-rw-r--r--test-suite/modules/polymorphism.v81
-rw-r--r--test-suite/modules/polymorphism2.v87
-rw-r--r--test-suite/modules/pseudo_circular_with.v2
-rw-r--r--test-suite/modules/sig.v2
-rw-r--r--test-suite/output-modulo-time/ltacprof.out13
-rw-r--r--test-suite/output-modulo-time/ltacprof.v2
-rw-r--r--test-suite/output-modulo-time/ltacprof_abstract.out17
-rw-r--r--test-suite/output-modulo-time/ltacprof_abstract.v8
-rw-r--r--test-suite/output-modulo-time/ltacprof_cutoff.out40
-rw-r--r--test-suite/output-modulo-time/ltacprof_cutoff.v36
-rw-r--r--test-suite/output/Arguments.out4
-rw-r--r--test-suite/output/Arguments_renaming.out16
-rw-r--r--test-suite/output/Cases.out103
-rw-r--r--test-suite/output/Cases.v110
-rw-r--r--test-suite/output/CompactContexts.out7
-rw-r--r--test-suite/output/CompactContexts.v5
-rw-r--r--test-suite/output/ErrorInCanonicalStructures.out5
-rw-r--r--test-suite/output/ErrorInCanonicalStructures.v3
-rw-r--r--test-suite/output/ErrorInCanonicalStructures2.out5
-rw-r--r--test-suite/output/ErrorInCanonicalStructures2.v3
-rw-r--r--test-suite/output/ErrorInModule.out3
-rw-r--r--test-suite/output/ErrorInModule.v4
-rw-r--r--test-suite/output/ErrorInSection.out3
-rw-r--r--test-suite/output/ErrorInSection.v4
-rw-r--r--test-suite/output/Errors.out2
-rw-r--r--test-suite/output/Existentials.out6
-rw-r--r--test-suite/output/Extraction_infix.out20
-rw-r--r--test-suite/output/Extraction_infix.v26
-rw-r--r--test-suite/output/Extraction_matchs_2413.v2
-rw-r--r--test-suite/output/Fixpoint.out2
-rw-r--r--test-suite/output/Fixpoint.v7
-rw-r--r--test-suite/output/FunExt.out19
-rw-r--r--test-suite/output/FunExt.v168
-rw-r--r--test-suite/output/Implicit.v2
-rw-r--r--test-suite/output/Inductive.out4
-rw-r--r--test-suite/output/Inductive.v4
-rw-r--r--test-suite/output/Int31Syntax.out14
-rw-r--r--test-suite/output/Int31Syntax.v13
-rw-r--r--test-suite/output/InvalidDisjunctiveIntro.out16
-rw-r--r--test-suite/output/InvalidDisjunctiveIntro.v18
-rw-r--r--test-suite/output/Load.out6
-rw-r--r--test-suite/output/Load.v7
-rw-r--r--test-suite/output/MExtraction.v12
-rw-r--r--test-suite/output/Notations.out22
-rw-r--r--test-suite/output/Notations.v19
-rw-r--r--test-suite/output/Notations2.out26
-rw-r--r--test-suite/output/Notations2.v33
-rw-r--r--test-suite/output/Notations3.out156
-rw-r--r--test-suite/output/Notations3.v260
-rw-r--r--test-suite/output/NumbersSyntax.out67
-rw-r--r--test-suite/output/NumbersSyntax.v50
-rw-r--r--test-suite/output/PatternsInBinders.out10
-rw-r--r--test-suite/output/PatternsInBinders.v8
-rw-r--r--test-suite/output/PrintAssumptions.out4
-rw-r--r--test-suite/output/PrintAssumptions.v37
-rw-r--r--test-suite/output/PrintInfos.v1
-rw-r--r--test-suite/output/Projections.out2
-rw-r--r--test-suite/output/Projections.v11
-rw-r--r--test-suite/output/RecognizePluginWarning.out0
-rw-r--r--test-suite/output/RecognizePluginWarning.v5
-rw-r--r--test-suite/output/Record.out16
-rw-r--r--test-suite/output/Record.v12
-rw-r--r--test-suite/output/Search.out120
-rw-r--r--test-suite/output/Search.v10
-rw-r--r--test-suite/output/SearchHead.out42
-rw-r--r--test-suite/output/SearchPattern.out101
-rw-r--r--test-suite/output/SearchPattern.v2
-rw-r--r--test-suite/output/Show.out10
-rw-r--r--test-suite/output/Show.v11
-rw-r--r--test-suite/output/ShowMatch.out8
-rw-r--r--test-suite/output/ShowMatch.v13
-rw-r--r--test-suite/output/ShowProof.out1
-rw-r--r--test-suite/output/ShowProof.v6
-rw-r--r--test-suite/output/SuggestProofUsing.out7
-rw-r--r--test-suite/output/SuggestProofUsing.v31
-rw-r--r--test-suite/output/Tactics.out4
-rw-r--r--test-suite/output/Tactics.v12
-rw-r--r--test-suite/output/TypeclassDebug.out18
-rw-r--r--test-suite/output/TypeclassDebug.v8
-rw-r--r--test-suite/output/UnclosedBlocks.out3
-rw-r--r--test-suite/output/UnclosedBlocks.v8
-rw-r--r--test-suite/output/UnivBinders.out181
-rw-r--r--test-suite/output/UnivBinders.v154
-rw-r--r--test-suite/output/UsePluginWarning.out1
-rw-r--r--test-suite/output/UsePluginWarning.v7
-rw-r--r--test-suite/output/Warnings.out3
-rw-r--r--test-suite/output/Warnings.v5
-rw-r--r--test-suite/output/auto.out22
-rw-r--r--test-suite/output/auto.v15
-rw-r--r--test-suite/output/bug5778.out4
-rw-r--r--test-suite/output/bug5778.v7
-rw-r--r--test-suite/output/bug6821.out2
-rw-r--r--test-suite/output/bug6821.v8
-rw-r--r--test-suite/output/goal_output.out8
-rw-r--r--test-suite/output/goal_output.v13
-rw-r--r--test-suite/output/idtac.out11
-rw-r--r--test-suite/output/idtac.v45
-rw-r--r--test-suite/output/inference.out14
-rw-r--r--test-suite/output/inference.v7
-rw-r--r--test-suite/output/load/Load_noproof.v1
-rw-r--r--test-suite/output/load/Load_openproof.v1
-rw-r--r--test-suite/output/load/Load_proof.v2
-rw-r--r--test-suite/output/ltac.out14
-rw-r--r--test-suite/output/ltac.v11
-rw-r--r--test-suite/output/ltac_extra_args.out8
-rw-r--r--test-suite/output/ltac_extra_args.v10
-rw-r--r--test-suite/output/ltac_missing_args.out40
-rw-r--r--test-suite/output/ltac_missing_args.v19
-rw-r--r--test-suite/output/names.out6
-rw-r--r--test-suite/output/names.v4
-rw-r--r--test-suite/output/optimize_heap.out8
-rw-r--r--test-suite/output/optimize_heap.v7
-rw-r--r--test-suite/output/qualification.out1
-rw-r--r--test-suite/output/ssr_clear.out3
-rw-r--r--test-suite/output/ssr_clear.v6
-rw-r--r--test-suite/prerequisite/bind_univs.v7
-rw-r--r--test-suite/prerequisite/module_bug7192.v9
-rw-r--r--test-suite/prerequisite/module_bug8416.v2
-rwxr-xr-xtest-suite/save-logs.sh19
-rw-r--r--test-suite/ssr/rew_polyuniv.v90
-rw-r--r--test-suite/ssr/set_polyuniv.v11
-rw-r--r--test-suite/success/Abstract.v3
-rw-r--r--test-suite/success/BracketsWithGoalSelector.v16
-rw-r--r--test-suite/success/Case19.v21
-rw-r--r--test-suite/success/Case22.v28
-rw-r--r--test-suite/success/Cases.v5
-rw-r--r--test-suite/success/Check.v12
-rw-r--r--test-suite/success/Compat84.v19
-rw-r--r--test-suite/success/CompatCurrentFlag.v3
-rw-r--r--test-suite/success/CompatOldFlag.v5
-rw-r--r--test-suite/success/CompatPreviousFlag.v4
-rw-r--r--test-suite/success/Discriminate.v7
-rw-r--r--test-suite/success/Field.v10
-rw-r--r--test-suite/success/Fixpoint.v30
-rw-r--r--test-suite/success/Funind.v2
-rw-r--r--test-suite/success/FunindExtraction_compat86.v506
-rw-r--r--test-suite/success/Hints.v16
-rw-r--r--test-suite/success/ImplicitArguments.v11
-rw-r--r--test-suite/success/Inductive.v27
-rw-r--r--test-suite/success/Injection.v7
-rw-r--r--test-suite/success/Inversion.v12
-rw-r--r--test-suite/success/InversionSigma.v40
-rw-r--r--test-suite/success/Mod_type.v4
-rw-r--r--test-suite/success/Notations.v27
-rw-r--r--test-suite/success/Notations2.v36
-rw-r--r--test-suite/success/NumberScopes.v21
-rw-r--r--test-suite/success/Omega.v4
-rw-r--r--test-suite/success/Omega0.v2
-rw-r--r--test-suite/success/Omega2.v2
-rw-r--r--test-suite/success/ProgramWf.v2
-rw-r--r--test-suite/success/ROmega.v4
-rw-r--r--test-suite/success/ROmega0.v20
-rw-r--r--test-suite/success/ROmega2.v2
-rw-r--r--test-suite/success/ROmega3.v31
-rw-r--r--test-suite/success/ROmega4.v26
-rw-r--r--test-suite/success/RecTutorial.v1
-rw-r--r--test-suite/success/Record.v5
-rw-r--r--test-suite/success/Rename.v2
-rw-r--r--test-suite/success/Scheme.v23
-rw-r--r--test-suite/success/Scopes.v6
-rw-r--r--test-suite/success/ShowExtraction.v31
-rw-r--r--test-suite/success/Tauto.v10
-rw-r--r--test-suite/success/TestRefine.v10
-rw-r--r--test-suite/success/Try.v2
-rw-r--r--test-suite/success/Typeclasses.v17
-rw-r--r--test-suite/success/abstract_chain.v43
-rw-r--r--test-suite/success/abstract_poly.v20
-rw-r--r--test-suite/success/all-check.v3
-rw-r--r--test-suite/success/bigQ.v66
-rw-r--r--test-suite/success/boundvars.v14
-rw-r--r--test-suite/success/bteauto.v1
-rw-r--r--test-suite/success/cbn.v18
-rw-r--r--test-suite/success/cc.v14
-rw-r--r--test-suite/success/change.v9
-rw-r--r--test-suite/success/change_pattern.v34
-rw-r--r--test-suite/success/clear.v2
-rw-r--r--test-suite/success/coercions.v57
-rw-r--r--test-suite/success/coindprim.v9
-rw-r--r--test-suite/success/cumulativity.v139
-rw-r--r--test-suite/success/decl_mode.v182
-rw-r--r--test-suite/success/decl_mode2.v249
-rw-r--r--test-suite/success/dependentind.v4
-rw-r--r--test-suite/success/destruct.v12
-rw-r--r--test-suite/success/dtauto-let-deps.v24
-rw-r--r--test-suite/success/eauto.v10
-rw-r--r--test-suite/success/eqdecide.v10
-rw-r--r--test-suite/success/evars.v23
-rw-r--r--test-suite/success/extraction.v128
-rw-r--r--test-suite/success/extraction_dep.v7
-rw-r--r--test-suite/success/extraction_impl.v11
-rw-r--r--test-suite/success/extraction_polyprop.v2
-rw-r--r--test-suite/success/forward.v29
-rw-r--r--test-suite/success/guard.v17
-rw-r--r--test-suite/success/hintdb_in_ltac.v14
-rw-r--r--test-suite/success/hintdb_in_ltac_bis.v15
-rw-r--r--test-suite/success/if.v2
-rw-r--r--test-suite/success/indelim.v2
-rw-r--r--test-suite/success/inds_type_sec.v10
-rw-r--r--test-suite/success/induct.v10
-rw-r--r--test-suite/success/intros.v2
-rw-r--r--test-suite/success/keyedrewrite.v2
-rw-r--r--test-suite/success/letproj.v2
-rw-r--r--test-suite/success/ltac.v33
-rw-r--r--test-suite/success/ltac_match_pattern_names.v28
-rw-r--r--test-suite/success/ltac_plus.v2
-rw-r--r--test-suite/success/mutual_ind.v10
-rw-r--r--test-suite/success/name_mangling.v191
-rw-r--r--test-suite/success/polymorphism.v148
-rw-r--r--test-suite/success/primitiveproj.v5
-rw-r--r--test-suite/success/programequality.v2
-rw-r--r--test-suite/success/qed_export.v18
-rw-r--r--test-suite/success/record_syntax.v8
-rw-r--r--test-suite/success/refine.v18
-rw-r--r--test-suite/success/rewrite.v17
-rw-r--r--test-suite/success/rewrite_dep.v2
-rw-r--r--test-suite/success/rewrite_evar.v8
-rw-r--r--test-suite/success/rewrite_strat.v2
-rw-r--r--test-suite/success/setoid_test.v10
-rw-r--r--test-suite/success/setoid_test2.v16
-rw-r--r--test-suite/success/shrink_abstract.v2
-rw-r--r--test-suite/success/simpl.v2
-rw-r--r--test-suite/success/specialize.v54
-rw-r--r--test-suite/success/ssr_delayed_clear_rename.v5
-rw-r--r--test-suite/success/transparent_abstract.v21
-rw-r--r--test-suite/success/unfold.v10
-rw-r--r--test-suite/success/unidecls.v121
-rw-r--r--test-suite/success/unification.v15
-rw-r--r--test-suite/success/univers.v7
-rw-r--r--test-suite/success/univnames.v13
-rw-r--r--test-suite/success/unshelve.v8
-rw-r--r--test-suite/success/vm_evars.v23
-rw-r--r--test-suite/typeclasses/NewSetoid.v10
-rw-r--r--test-suite/typeclasses/deftwice.v2
-rw-r--r--test-suite/typeclasses/unification_delta.v2
779 files changed, 16523 insertions, 2610 deletions
diff --git a/test-suite/.csdp.cache b/test-suite/.csdp.cache
index ba85286d..b99d80e9 100644
--- a/test-suite/.csdp.cache
+++ b/test-suite/.csdp.cache
Binary files differ
diff --git a/test-suite/Makefile b/test-suite/Makefile
index c10cd4ed..85076418 100644
--- a/test-suite/Makefile
+++ b/test-suite/Makefile
@@ -1,10 +1,12 @@
-#######################################################################
-# v # The Coq Proof Assistant / The Coq Development Team #
-# <O___,, # INRIA-Rocquencourt & CNRS-Universite Paris Diderot #
-# \VV/ #############################################################
-# // # This file is distributed under the terms of the #
-# # GNU Lesser General Public License Version 2.1 #
-#######################################################################
+##########################################################################
+## # The Coq Proof Assistant / The Coq Development Team ##
+## v # INRIA, CNRS and contributors - Copyright 1999-2018 ##
+## <O___,, # (see CREDITS file for the list of authors) ##
+## \VV/ ###############################################################
+## // # This file is distributed under the terms of the ##
+## # GNU Lesser General Public License Version 2.1 ##
+## # (see LICENSE file for the text of the license) ##
+##########################################################################
# This is a standalone Makefile to run the test-suite. It can be used
# outside of the Coq source tree (if BIN is overridden).
@@ -27,24 +29,27 @@
# Default value when called from a freshly compiled Coq, but can be
# easily overridden
-BIN := ../bin/
-LIB := $(shell cd ..; pwd)
+LIB := ..
+BIN := $(shell cd ..; pwd)/bin/
-coqtop := $(BIN)coqtop -boot -q -batch -test-mode -R prerequisite TestSuite
-bincoqc := $(BIN)coqc -coqlib $(LIB) -R prerequisite TestSuite
-bincoqchk := $(BIN)coqchk -coqlib $(LIB) -R prerequisite TestSuite
+coqtop := $(BIN)coqtop -coqlib $(LIB) -boot -q -batch -test-mode -R prerequisite TestSuite
+coqc := $(BIN)coqc -coqlib $(LIB) -R prerequisite TestSuite
+coqchk := $(BIN)coqchk -coqlib $(LIB) -R prerequisite TestSuite
+coqdoc := $(BIN)coqdoc
+coqtopbyte := $(BIN)coqtop.byte
-command := $(coqtop) -top Top -async-proofs-cache force -load-vernac-source
-coqc := $(coqtop) -compile
+coqtopload := $(coqtop) -top Top -async-proofs-cache force -load-vernac-source
+coqtopcompile := $(coqtop) -compile
coqdep := $(BIN)coqdep -coqlib $(LIB)
+VERBOSE?=
SHOW := $(if $(VERBOSE),@true,@echo)
HIDE := $(if $(VERBOSE),,@)
REDIR := $(if $(VERBOSE),,> /dev/null 2>&1)
# read out an emacs config and look for coq-prog-args; if such exists, return it
get_coq_prog_args_helper = sed -n s'/^.*coq-prog-args:[[:space:]]*(\([^)]*\)).*/\1/p' $(1)
-get_coq_prog_args = $(strip $(filter-out "-emacs-U" "-emacs",$(shell $(call get_coq_prog_args_helper,$(1)))))
+get_coq_prog_args = $(strip $(shell $(call get_coq_prog_args_helper,$(1))))
SINGLE_QUOTE="
#" # double up on the quotes, in a comment, to appease the emacs syntax highlighter
# wrap the arguments in parens, but only if they exist
@@ -52,7 +57,7 @@ get_coq_prog_args_in_parens = $(subst $(SINGLE_QUOTE),,$(if $(call get_coq_prog_
# get the command to use with this set of arguments; if there's -compile, use coqc, else use coqtop
has_compile_flag = $(filter "-compile",$(call get_coq_prog_args,$(1)))
has_profile_ltac_or_compile_flag = $(filter "-profile-ltac-cutoff" "-profile-ltac" "-compile",$(call get_coq_prog_args,$(1)))
-get_command_based_on_flags = $(if $(call has_profile_ltac_or_compile_flag,$(1)),$(coqc),$(command))
+get_command_based_on_flags = $(if $(call has_profile_ltac_or_compile_flag,$(1)),$(coqtopcompile),$(coqtopload))
bogomips:=
@@ -67,6 +72,7 @@ ifeq (,$(bogomips))
$(warning cannot run complexity tests (no bogomips found))
endif
+# keep these synced with test-suite/save-logs.sh
log_success = "==========> SUCCESS <=========="
log_segfault = "==========> FAILURE <=========="
log_anomaly = "==========> FAILURE <=========="
@@ -82,14 +88,19 @@ COMPLEXITY := $(if $(bogomips),complexity)
BUGS := bugs/opened bugs/closed
+INTERACTIVE := interactive
+
VSUBSYSTEMS := prerequisite success failure $(BUGS) output \
- output-modulo-time interactive micromega $(COMPLEXITY) modules stm
+ output-modulo-time $(INTERACTIVE) micromega $(COMPLEXITY) modules stm \
+ coqdoc
# All subsystems
-SUBSYSTEMS := $(VSUBSYSTEMS) misc bugs ide vio coqchk
+SUBSYSTEMS := $(VSUBSYSTEMS) misc bugs ide vio coqchk coqwc coq-makefile
PREREQUISITELOG = prerequisite/admit.v.log \
- prerequisite/make_local.v.log prerequisite/make_notation.v.log
+ prerequisite/make_local.v.log prerequisite/make_notation.v.log \
+ prerequisite/bind_univs.v.log prerequisite/module_bug8416.v.log \
+ prerequisite/module_bug7192.v.log
#######################################################################
# Phony targets
@@ -150,6 +161,9 @@ summary:
$(call summary_dir, "IDE tests", ide); \
$(call summary_dir, "VI tests", vio); \
$(call summary_dir, "Coqchk tests", coqchk); \
+ $(call summary_dir, "Coqwc tests", coqwc); \
+ $(call summary_dir, "Coq makefile", coq-makefile); \
+ $(call summary_dir, "Coqdoc tests", coqdoc); \
nb_success=`find . -name '*.log' -exec tail -n2 '{}' \; | grep -e $(log_success) | wc -l`; \
nb_failure=`find . -name '*.log' -exec tail -n2 '{}' \; | grep -e $(log_failure) | wc -l`; \
nb_tests=`expr $$nb_success + $$nb_failure`; \
@@ -162,7 +176,18 @@ summary.log:
$(SHOW) BUILDING SUMMARY FILE
$(HIDE)$(MAKE) --quiet summary > "$@"
+# if not on travis we can get the log files (they're just there for a
+# local build, and downloadable on GitLab)
+PRINT_LOGS?=
+TRAVIS?= # special because we want to print travis_fold directives
+ifdef APPVEYOR
+PRINT_LOGS:=APPVEYOR
+endif #APPVEYOR
+
report: summary.log
+ $(HIDE)bash save-logs.sh
+ $(HIDE)if [ -n "${TRAVIS}" ]; then find logs/ -name '*.log' -not -name 'summary.log' -exec 'bash' '-c' 'echo "travis_fold:start:coq.logs.$$(echo '{}' | sed s,/,.,g)"' ';' -exec cat '{}' ';' -exec 'bash' '-c' 'echo "travis_fold:end:coq.logs.$$(echo '{}' | sed s,/,.,g)"' ';'; fi
+ $(HIDE)if [ -n "${PRINT_LOGS}" ]; then find logs/ -name '*.log' -not -name 'summary.log' -exec 'bash' '-c' 'echo {}' ';' -exec cat '{}' ';' -exec 'bash' '-c' 'echo' ';'; fi
$(HIDE)if grep -q -F 'Error!' summary.log ; then echo FAILURES; grep -F 'Error!' summary.log; false; else echo NO FAILURES; fi
#######################################################################
@@ -219,7 +244,7 @@ $(addsuffix .log,$(wildcard prerequisite/*.v)): %.v.log: %.v
@echo "TEST $< $(call get_coq_prog_args_in_parens,"$<")"
$(HIDE){ \
echo $(call log_intro,$<); \
- $(coqc) "$<" $(call get_coq_prog_args,"$<") 2>&1; R=$$?; times; \
+ $(coqtopcompile) "$<" $(call get_coq_prog_args,"$<") 2>&1; R=$$?; times; \
if [ $$R != 0 ]; then \
echo $(log_failure); \
echo " $<...could not be prepared" ; \
@@ -249,7 +274,7 @@ $(addsuffix .log,$(wildcard stm/*.v)): %.v.log: %.v
@echo "TEST $< $(call get_coq_prog_args_in_parens,"$<")"
$(HIDE){ \
echo $(call log_intro,$<); \
- $(coqc) "$<" $(call get_coq_prog_args,"$<") -async-proofs on \
+ $(coqtopcompile) "$<" $(call get_coq_prog_args,"$<") -async-proofs on \
$$opts 2>&1; R=$$?; times; \
if [ $$R = 0 ]; then \
echo $(log_success); \
@@ -286,7 +311,7 @@ $(addsuffix .log,$(wildcard output/*.v)): %.v.log: %.v %.out $(PREREQUISITELOG)
| grep -v "^<W>" \
| sed 's/File "[^"]*"/File "stdin"/' \
> $$tmpoutput; \
- diff -u $*.out $$tmpoutput 2>&1; R=$$?; times; \
+ diff -u --strip-trailing-cr $*.out $$tmpoutput 2>&1; R=$$?; times; \
if [ $$R = 0 ]; then \
echo $(log_success); \
echo " $<...Ok"; \
@@ -297,6 +322,13 @@ $(addsuffix .log,$(wildcard output/*.v)): %.v.log: %.v %.out $(PREREQUISITELOG)
rm $$tmpoutput; \
} > "$@"
+# the expected output for the MExtraction test is
+# /plugins/micromega/micromega.ml except with additional newline
+output/MExtraction.out: ../plugins/micromega/micromega.ml
+ $(SHOW) GEN $@
+ $(HIDE) cp $< $@
+ $(HIDE) echo >> $@
+
$(addsuffix .log,$(wildcard output-modulo-time/*.v)): %.v.log: %.v %.out
@echo "TEST $< $(call get_coq_prog_args_in_parens,"$<")"
$(HIDE){ \
@@ -321,7 +353,7 @@ $(addsuffix .log,$(wildcard output-modulo-time/*.v)): %.v.log: %.v %.out
-e 's/\s*[-+]inf\s*//g' \
-e 's/^[^a-zA-Z]*//' \
$*.out | sort > $$tmpexpected; \
- diff -b -u $$tmpexpected $$tmpoutput 2>&1; R=$$?; times; \
+ diff --strip-trailing-cr -b -u $$tmpexpected $$tmpoutput 2>&1; R=$$?; times; \
if [ $$R = 0 ]; then \
echo $(log_success); \
echo " $<...Ok"; \
@@ -405,79 +437,31 @@ modules/%.vo: modules/%.v
# Miscellaneous tests
#######################################################################
-misc: misc/deps-order.log misc/universes.log misc/deps-checksum.log
+misc: $(patsubst %.sh,%.log,$(wildcard misc/*.sh))
-# Check that both coqdep and coqtop/coqc supports -R
-# Check that both coqdep and coqtop/coqc takes the later -R
-# See bugs 2242, 2337, 2339
-deps-order: misc/deps-order.log
-misc/deps-order.log:
- @echo "TEST misc/deps-order"
- $(HIDE){ \
- echo $(call log_intro,deps-order); \
- rm -f misc/deps/*/*.vo; \
- tmpoutput=`mktemp /tmp/coqcheck.XXXXXX`; \
- $(coqdep) -R misc/deps/lib lib -R misc/deps/client client misc/deps/client/bar.v 2>&1 \
- | head -n 1 > $$tmpoutput; \
- diff -u misc/deps/deps.out $$tmpoutput 2>&1; R=$$?; times; \
- $(bincoqc) -R misc/deps/lib lib misc/deps/lib/foo.v 2>&1; \
- $(bincoqc) -R misc/deps/lib lib -R misc/deps/client client misc/deps/client/foo.v 2>&1; \
- $(coqtop) -R misc/deps/lib lib -R misc/deps/client client -load-vernac-source misc/deps/client/bar.v 2>&1; \
- S=$$?; times; \
- if [ $$R = 0 -a $$S = 0 ]; then \
- echo $(log_success); \
- echo " misc/deps-order...Ok"; \
- else \
- echo $(log_failure); \
- echo " misc/deps-order...Error! (unexpected order)"; \
- fi; \
- rm $$tmpoutput; \
- } > "$@"
-
-deps-checksum: misc/deps-checksum.log
-misc/deps-checksum.log:
- @echo "TEST misc/deps-checksum"
- $(HIDE){ \
- echo $(call log_intro,deps-checksum); \
- rm -f misc/deps/*/*.vo; \
- $(bincoqc) -R misc/deps/A A misc/deps/A/A.v; \
- $(bincoqc) -R misc/deps/B A misc/deps/B/A.v; \
- $(bincoqc) -R misc/deps/B A misc/deps/B/B.v; \
- $(coqtop) -R misc/deps/B A -R misc/deps/A A -load-vernac-source misc/deps/checksum.v 2>&1; \
- if [ $$? = 0 ]; then \
- echo $(log_success); \
- echo " misc/deps-checksum...Ok"; \
- else \
- echo $(log_failure); \
- echo " misc/deps-checksum...Error!"; \
- fi; \
- } > "$@"
+misc/universes.log: misc/universes/all_stdlib.v
+misc/universes/all_stdlib.v:
+ cd .. && $(MAKE) test-suite/$@
-# Sort universes for the whole standard library
-EXPECTED_UNIVERSES := 4 # Prop is not counted
-universes: misc/universes.log
-misc/universes.log: misc/universes/all_stdlib.v
- @echo "TEST misc/universes"
+$(patsubst %.sh,%.log,$(wildcard misc/*.sh)): %.log: %.sh $(PREREQUISITELOG)
+ @echo "TEST $<"
$(HIDE){ \
- $(bincoqc) -R misc/universes Universes misc/universes/all_stdlib 2>&1; \
- $(bincoqc) -R misc/universes Universes misc/universes/universes 2>&1; \
- mv universes.txt misc/universes; \
- N=`awk '{print $$3}' misc/universes/universes.txt | sort -u | wc -l`; \
- times; \
- if [ "$$N" -eq $(EXPECTED_UNIVERSES) ]; then \
+ echo $(call log_intro,$<); \
+ export coqc="$(coqc)"; \
+ export coqtop="$(coqtop)"; \
+ export coqdep="$(coqdep)"; \
+ export coqtopbyte="$(coqtopbyte)"; \
+ "$<" 2>&1; R=$$?; times; \
+ if [ $$R = 0 ]; then \
echo $(log_success); \
- echo " misc/universes...Ok ($(EXPECTED_UNIVERSES) universes)"; \
+ echo " $<...Ok"; \
else \
echo $(log_failure); \
- echo " misc/universes...Error! ($$N/$(EXPECTED_UNIVERSES) universes)"; \
+ echo " $<...Error!"; \
fi; \
} > "$@"
-misc/universes/all_stdlib.v:
- cd .. && $(MAKE) test-suite/$@
-
-
# IDE : some tests of backtracking for coqtop -ideslave
ide : $(patsubst %.fake,%.fake.log,$(wildcard ide/*.fake))
@@ -486,7 +470,7 @@ ide : $(patsubst %.fake,%.fake.log,$(wildcard ide/*.fake))
@echo "TEST $<"
$(HIDE){ \
echo $(call log_intro,$<); \
- $(BIN)fake_ide $< "$(BIN)coqtop -boot -async-proofs on -async-proofs-tactic-error-resilience off -async-proofs-command-error-resilience off" 2>&1; \
+ $(BIN)fake_ide $< "-coqlib $(LIB) -boot -async-proofs on -async-proofs-tactic-error-resilience off -async-proofs-command-error-resilience off" 2>&1; \
if [ $$? = 0 ]; then \
echo $(log_success); \
echo " $<...Ok"; \
@@ -496,14 +480,16 @@ ide : $(patsubst %.fake,%.fake.log,$(wildcard ide/*.fake))
fi; \
} > "$@"
+# vio compilation
+
vio: $(patsubst %.v,%.vio.log,$(wildcard vio/*.v))
%.vio.log:%.v
@echo "TEST $<"
$(HIDE){ \
- $(bincoqc) -quick -R vio vio $* 2>&1 && \
+ $(coqc) -quick -R vio vio $* 2>&1 && \
$(coqtop) -R vio vio -vio2vo $*.vio 2>&1 && \
- $(bincoqchk) -R vio vio -norec $(subst /,.,$*) 2>&1; \
+ $(coqchk) -R vio vio -norec $(subst /,.,$*) 2>&1; \
if [ $$? = 0 ]; then \
echo $(log_success); \
echo " $<...Ok"; \
@@ -513,13 +499,15 @@ vio: $(patsubst %.v,%.vio.log,$(wildcard vio/*.v))
fi; \
} > "$@"
+# coqchk
+
coqchk: $(patsubst %.v,%.chk.log,$(wildcard coqchk/*.v))
%.chk.log:%.v
@echo "TEST $<"
$(HIDE){ \
- $(bincoqc) -R coqchk coqchk $* 2>&1 && \
- $(bincoqchk) -R coqchk coqchk -norec $(subst /,.,$*) 2>&1; \
+ $(coqc) -R coqchk coqchk $* 2>&1 && \
+ $(coqchk) -R coqchk coqchk -norec $(subst /,.,$*) 2>&1; \
if [ $$? = 0 ]; then \
echo $(log_success); \
echo " $<...Ok"; \
@@ -528,3 +516,66 @@ coqchk: $(patsubst %.v,%.chk.log,$(wildcard coqchk/*.v))
echo " $<...Error!"; \
fi; \
} > "$@"
+
+# coqwc : test output
+
+coqwc : $(patsubst %.v,%.v.log,$(wildcard coqwc/*.v))
+
+coqwc/%.v.log : coqwc/%.v
+ $(HIDE){ \
+ echo $(call log_intro,$<); \
+ tmpoutput=`mktemp /tmp/coqwc.XXXXXX`; \
+ $(BIN)coqwc $< 2>&1 > $$tmpoutput; \
+ diff -u --strip-trailing-cr coqwc/$*.out $$tmpoutput 2>&1; R=$$?; times; \
+ if [ $$R = 0 ]; then \
+ echo $(log_success); \
+ echo " $<...Ok"; \
+ else \
+ echo $(log_failure); \
+ echo " $<...Error! (unexpected output)"; \
+ fi; \
+ rm $$tmpoutput; \
+ } > "$@"
+
+# coq_makefile
+
+coq-makefile: $(patsubst %/run.sh,%.log,$(wildcard coq-makefile/*/run.sh))
+
+coq-makefile/%.log : coq-makefile/%/run.sh
+ @echo "TEST coq-makefile/$*"
+ $(HIDE)(\
+ export COQBIN=$(BIN);\
+ cd coq-makefile/$* && \
+ bash run.sh 2>&1; \
+ if [ $$? = 0 ]; then \
+ echo $(log_success); \
+ echo " $<...Ok"; \
+ else \
+ echo $(log_failure); \
+ echo " $<...Error!"; \
+ fi; \
+ ) > "$@"
+
+# coqdoc
+
+coqdoc: $(patsubst %.sh,%.log,$(wildcard coqdoc/*.sh))
+
+$(addsuffix .log,$(wildcard coqdoc/*.v)): %.v.log: %.v %.html.out %.tex.out $(PREREQUISITELOG)
+ @echo "TEST $< $(call get_coq_prog_args_in_parens,"$<")"
+ $(HIDE){ \
+ echo $(call log_intro,$<); \
+ $(coqc) -R coqdoc Coqdoc $* 2>&1; \
+ cd coqdoc; \
+ f=`basename $*`; \
+ $(coqdoc) -utf8 -R . Coqdoc -coqlib http://coq.inria.fr/stdlib --html $$f.v; \
+ $(coqdoc) -utf8 -R . Coqdoc -coqlib http://coq.inria.fr/stdlib --latex $$f.v; \
+ diff -u --strip-trailing-cr $$f.html.out Coqdoc.$$f.html 2>&1; R=$$?; times; \
+ grep -v "^%%" Coqdoc.$$f.tex | diff -u --strip-trailing-cr $$f.tex.out - 2>&1; S=$$?; times; \
+ if [ $$R = 0 -a $$S = 0 ]; then \
+ echo $(log_success); \
+ echo " $<...Ok"; \
+ else \
+ echo $(log_failure); \
+ echo " $<...Error! (unexpected output)"; \
+ fi; \
+ } > "$@"
diff --git a/test-suite/README.md b/test-suite/README.md
new file mode 100644
index 00000000..1d119564
--- /dev/null
+++ b/test-suite/README.md
@@ -0,0 +1,75 @@
+# Coq Test Suite
+
+The test suite can be run from the Coq root directory by `make test-suite`.
+This does a clean step first, so if you've already run it, then change something,
+you'll have to do a lot of work again.
+
+If you run `make` from the `test-suite` directory, there is no clean step.
+You can also run `make aaa/bbb/ccc.v.log` to build the log for one test,
+or `make ddd` where `ddd` is on of the sub-directories of `test-suite`
+to just build the logs for that directory.
+In these cases, a summary is not printed, but can be generated by `make summary`.
+
+`make -B` can be used to rerun tests ( -B meaning always remake).
+
+From the `test-suite` directory, `make report` (included in `make
+all`) prints a summary of which tests failed using the produced log
+files (this still works when only some tests are built as described
+above). Setting the `PRINT_LOGS` variable will make it print the logs
+of the failing tests.
+
+For instance, running the following in the `test-suite` directory:
+
+```bash
+$ echo Fail. > success/fail.v # make some failing test
+
+$ make
+TEST prerequisite/make_local.v
+...
+TEST success/fail.v
+...
+BUILDING SUMMARY FILE
+FAILURES
+ success/fail.v...Error! (should be accepted)
+Makefile:189: recipe for target 'all failed
+make: *** [report] Error 1
+
+$ make report PRINT_LOGS=1
+BUILDING SUMMARY FILE
+logs/success/fail.v.log
+==========> TESTING success/fail.v <==========
+Welcome to Coq (version information)
+Skipping rcfile loading.
+File "/path/to/success/fail.v", line 1, characters 4-5:
+Error:
+Syntax error: [vernac:Vernac.vernac_control] expected after 'Fail' (in [vernac:Vernac.vernac_control]).
+
+0m0.000000s 0m0.000000s
+0m0.040000s 0m0.000000s
+==========> FAILURE <==========
+ success/fail.v...Error! (should be accepted)
+
+FAILURES
+ success/fail.v...Error! (should be accepted)
+Makefile:189: recipe for target 'report' failed
+make: *** [report] Error 1
+
+$ echo 'Comments "foo".' > success/fail.v
+
+$ make
+TEST success/fail.v
+BUILDING SUMMARY FILE
+NO FAILURES
+```
+
+See [`test-suite/Makefile`](/test-suite/Makefile) for more information.
+
+## Adding a test
+
+Regression tests for closed bugs should be added to `test-suite/bugs/closed`, as `1234.v` where `1234` is the bug number.
+Files in this directory are tested for successful compilation.
+When you fix a bug, you should usually add a regression test here as well.
+
+The error "(bug seems to be opened, please check)" when running `make test-suite` means that a test in `bugs/closed` failed to compile.
+
+There are also output tests in `test-suite/output` which consist of a `.v` file and a `.out` file with the expected output.
diff --git a/test-suite/bench/lists-100.v b/test-suite/bench/lists-100.v
deleted file mode 100644
index 5c64716c..00000000
--- a/test-suite/bench/lists-100.v
+++ /dev/null
@@ -1,107 +0,0 @@
-(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
-(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
-(************************************************************************)
-Inductive list0 : Set := nil0 : list0 | cons0 : Set -> list0 -> list0.
-Inductive list1 : Set := nil1 : list1 | cons1 : Set -> list1 -> list1.
-Inductive list2 : Set := nil2 : list2 | cons2 : Set -> list2 -> list2.
-Inductive list3 : Set := nil3 : list3 | cons3 : Set -> list3 -> list3.
-Inductive list4 : Set := nil4 : list4 | cons4 : Set -> list4 -> list4.
-Inductive list5 : Set := nil5 : list5 | cons5 : Set -> list5 -> list5.
-Inductive list6 : Set := nil6 : list6 | cons6 : Set -> list6 -> list6.
-Inductive list7 : Set := nil7 : list7 | cons7 : Set -> list7 -> list7.
-Inductive list8 : Set := nil8 : list8 | cons8 : Set -> list8 -> list8.
-Inductive list9 : Set := nil9 : list9 | cons9 : Set -> list9 -> list9.
-Inductive list10 : Set := nil10 : list10 | cons10 : Set -> list10 -> list10.
-Inductive list11 : Set := nil11 : list11 | cons11 : Set -> list11 -> list11.
-Inductive list12 : Set := nil12 : list12 | cons12 : Set -> list12 -> list12.
-Inductive list13 : Set := nil13 : list13 | cons13 : Set -> list13 -> list13.
-Inductive list14 : Set := nil14 : list14 | cons14 : Set -> list14 -> list14.
-Inductive list15 : Set := nil15 : list15 | cons15 : Set -> list15 -> list15.
-Inductive list16 : Set := nil16 : list16 | cons16 : Set -> list16 -> list16.
-Inductive list17 : Set := nil17 : list17 | cons17 : Set -> list17 -> list17.
-Inductive list18 : Set := nil18 : list18 | cons18 : Set -> list18 -> list18.
-Inductive list19 : Set := nil19 : list19 | cons19 : Set -> list19 -> list19.
-Inductive list20 : Set := nil20 : list20 | cons20 : Set -> list20 -> list20.
-Inductive list21 : Set := nil21 : list21 | cons21 : Set -> list21 -> list21.
-Inductive list22 : Set := nil22 : list22 | cons22 : Set -> list22 -> list22.
-Inductive list23 : Set := nil23 : list23 | cons23 : Set -> list23 -> list23.
-Inductive list24 : Set := nil24 : list24 | cons24 : Set -> list24 -> list24.
-Inductive list25 : Set := nil25 : list25 | cons25 : Set -> list25 -> list25.
-Inductive list26 : Set := nil26 : list26 | cons26 : Set -> list26 -> list26.
-Inductive list27 : Set := nil27 : list27 | cons27 : Set -> list27 -> list27.
-Inductive list28 : Set := nil28 : list28 | cons28 : Set -> list28 -> list28.
-Inductive list29 : Set := nil29 : list29 | cons29 : Set -> list29 -> list29.
-Inductive list30 : Set := nil30 : list30 | cons30 : Set -> list30 -> list30.
-Inductive list31 : Set := nil31 : list31 | cons31 : Set -> list31 -> list31.
-Inductive list32 : Set := nil32 : list32 | cons32 : Set -> list32 -> list32.
-Inductive list33 : Set := nil33 : list33 | cons33 : Set -> list33 -> list33.
-Inductive list34 : Set := nil34 : list34 | cons34 : Set -> list34 -> list34.
-Inductive list35 : Set := nil35 : list35 | cons35 : Set -> list35 -> list35.
-Inductive list36 : Set := nil36 : list36 | cons36 : Set -> list36 -> list36.
-Inductive list37 : Set := nil37 : list37 | cons37 : Set -> list37 -> list37.
-Inductive list38 : Set := nil38 : list38 | cons38 : Set -> list38 -> list38.
-Inductive list39 : Set := nil39 : list39 | cons39 : Set -> list39 -> list39.
-Inductive list40 : Set := nil40 : list40 | cons40 : Set -> list40 -> list40.
-Inductive list41 : Set := nil41 : list41 | cons41 : Set -> list41 -> list41.
-Inductive list42 : Set := nil42 : list42 | cons42 : Set -> list42 -> list42.
-Inductive list43 : Set := nil43 : list43 | cons43 : Set -> list43 -> list43.
-Inductive list44 : Set := nil44 : list44 | cons44 : Set -> list44 -> list44.
-Inductive list45 : Set := nil45 : list45 | cons45 : Set -> list45 -> list45.
-Inductive list46 : Set := nil46 : list46 | cons46 : Set -> list46 -> list46.
-Inductive list47 : Set := nil47 : list47 | cons47 : Set -> list47 -> list47.
-Inductive list48 : Set := nil48 : list48 | cons48 : Set -> list48 -> list48.
-Inductive list49 : Set := nil49 : list49 | cons49 : Set -> list49 -> list49.
-Inductive list50 : Set := nil50 : list50 | cons50 : Set -> list50 -> list50.
-Inductive list51 : Set := nil51 : list51 | cons51 : Set -> list51 -> list51.
-Inductive list52 : Set := nil52 : list52 | cons52 : Set -> list52 -> list52.
-Inductive list53 : Set := nil53 : list53 | cons53 : Set -> list53 -> list53.
-Inductive list54 : Set := nil54 : list54 | cons54 : Set -> list54 -> list54.
-Inductive list55 : Set := nil55 : list55 | cons55 : Set -> list55 -> list55.
-Inductive list56 : Set := nil56 : list56 | cons56 : Set -> list56 -> list56.
-Inductive list57 : Set := nil57 : list57 | cons57 : Set -> list57 -> list57.
-Inductive list58 : Set := nil58 : list58 | cons58 : Set -> list58 -> list58.
-Inductive list59 : Set := nil59 : list59 | cons59 : Set -> list59 -> list59.
-Inductive list60 : Set := nil60 : list60 | cons60 : Set -> list60 -> list60.
-Inductive list61 : Set := nil61 : list61 | cons61 : Set -> list61 -> list61.
-Inductive list62 : Set := nil62 : list62 | cons62 : Set -> list62 -> list62.
-Inductive list63 : Set := nil63 : list63 | cons63 : Set -> list63 -> list63.
-Inductive list64 : Set := nil64 : list64 | cons64 : Set -> list64 -> list64.
-Inductive list65 : Set := nil65 : list65 | cons65 : Set -> list65 -> list65.
-Inductive list66 : Set := nil66 : list66 | cons66 : Set -> list66 -> list66.
-Inductive list67 : Set := nil67 : list67 | cons67 : Set -> list67 -> list67.
-Inductive list68 : Set := nil68 : list68 | cons68 : Set -> list68 -> list68.
-Inductive list69 : Set := nil69 : list69 | cons69 : Set -> list69 -> list69.
-Inductive list70 : Set := nil70 : list70 | cons70 : Set -> list70 -> list70.
-Inductive list71 : Set := nil71 : list71 | cons71 : Set -> list71 -> list71.
-Inductive list72 : Set := nil72 : list72 | cons72 : Set -> list72 -> list72.
-Inductive list73 : Set := nil73 : list73 | cons73 : Set -> list73 -> list73.
-Inductive list74 : Set := nil74 : list74 | cons74 : Set -> list74 -> list74.
-Inductive list75 : Set := nil75 : list75 | cons75 : Set -> list75 -> list75.
-Inductive list76 : Set := nil76 : list76 | cons76 : Set -> list76 -> list76.
-Inductive list77 : Set := nil77 : list77 | cons77 : Set -> list77 -> list77.
-Inductive list78 : Set := nil78 : list78 | cons78 : Set -> list78 -> list78.
-Inductive list79 : Set := nil79 : list79 | cons79 : Set -> list79 -> list79.
-Inductive list80 : Set := nil80 : list80 | cons80 : Set -> list80 -> list80.
-Inductive list81 : Set := nil81 : list81 | cons81 : Set -> list81 -> list81.
-Inductive list82 : Set := nil82 : list82 | cons82 : Set -> list82 -> list82.
-Inductive list83 : Set := nil83 : list83 | cons83 : Set -> list83 -> list83.
-Inductive list84 : Set := nil84 : list84 | cons84 : Set -> list84 -> list84.
-Inductive list85 : Set := nil85 : list85 | cons85 : Set -> list85 -> list85.
-Inductive list86 : Set := nil86 : list86 | cons86 : Set -> list86 -> list86.
-Inductive list87 : Set := nil87 : list87 | cons87 : Set -> list87 -> list87.
-Inductive list88 : Set := nil88 : list88 | cons88 : Set -> list88 -> list88.
-Inductive list89 : Set := nil89 : list89 | cons89 : Set -> list89 -> list89.
-Inductive list90 : Set := nil90 : list90 | cons90 : Set -> list90 -> list90.
-Inductive list91 : Set := nil91 : list91 | cons91 : Set -> list91 -> list91.
-Inductive list92 : Set := nil92 : list92 | cons92 : Set -> list92 -> list92.
-Inductive list93 : Set := nil93 : list93 | cons93 : Set -> list93 -> list93.
-Inductive list94 : Set := nil94 : list94 | cons94 : Set -> list94 -> list94.
-Inductive list95 : Set := nil95 : list95 | cons95 : Set -> list95 -> list95.
-Inductive list96 : Set := nil96 : list96 | cons96 : Set -> list96 -> list96.
-Inductive list97 : Set := nil97 : list97 | cons97 : Set -> list97 -> list97.
-Inductive list98 : Set := nil98 : list98 | cons98 : Set -> list98 -> list98.
-Inductive list99 : Set := nil99 : list99 | cons99 : Set -> list99 -> list99.
diff --git a/test-suite/bench/lists_100.v b/test-suite/bench/lists_100.v
deleted file mode 100644
index 5c64716c..00000000
--- a/test-suite/bench/lists_100.v
+++ /dev/null
@@ -1,107 +0,0 @@
-(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
-(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
-(************************************************************************)
-Inductive list0 : Set := nil0 : list0 | cons0 : Set -> list0 -> list0.
-Inductive list1 : Set := nil1 : list1 | cons1 : Set -> list1 -> list1.
-Inductive list2 : Set := nil2 : list2 | cons2 : Set -> list2 -> list2.
-Inductive list3 : Set := nil3 : list3 | cons3 : Set -> list3 -> list3.
-Inductive list4 : Set := nil4 : list4 | cons4 : Set -> list4 -> list4.
-Inductive list5 : Set := nil5 : list5 | cons5 : Set -> list5 -> list5.
-Inductive list6 : Set := nil6 : list6 | cons6 : Set -> list6 -> list6.
-Inductive list7 : Set := nil7 : list7 | cons7 : Set -> list7 -> list7.
-Inductive list8 : Set := nil8 : list8 | cons8 : Set -> list8 -> list8.
-Inductive list9 : Set := nil9 : list9 | cons9 : Set -> list9 -> list9.
-Inductive list10 : Set := nil10 : list10 | cons10 : Set -> list10 -> list10.
-Inductive list11 : Set := nil11 : list11 | cons11 : Set -> list11 -> list11.
-Inductive list12 : Set := nil12 : list12 | cons12 : Set -> list12 -> list12.
-Inductive list13 : Set := nil13 : list13 | cons13 : Set -> list13 -> list13.
-Inductive list14 : Set := nil14 : list14 | cons14 : Set -> list14 -> list14.
-Inductive list15 : Set := nil15 : list15 | cons15 : Set -> list15 -> list15.
-Inductive list16 : Set := nil16 : list16 | cons16 : Set -> list16 -> list16.
-Inductive list17 : Set := nil17 : list17 | cons17 : Set -> list17 -> list17.
-Inductive list18 : Set := nil18 : list18 | cons18 : Set -> list18 -> list18.
-Inductive list19 : Set := nil19 : list19 | cons19 : Set -> list19 -> list19.
-Inductive list20 : Set := nil20 : list20 | cons20 : Set -> list20 -> list20.
-Inductive list21 : Set := nil21 : list21 | cons21 : Set -> list21 -> list21.
-Inductive list22 : Set := nil22 : list22 | cons22 : Set -> list22 -> list22.
-Inductive list23 : Set := nil23 : list23 | cons23 : Set -> list23 -> list23.
-Inductive list24 : Set := nil24 : list24 | cons24 : Set -> list24 -> list24.
-Inductive list25 : Set := nil25 : list25 | cons25 : Set -> list25 -> list25.
-Inductive list26 : Set := nil26 : list26 | cons26 : Set -> list26 -> list26.
-Inductive list27 : Set := nil27 : list27 | cons27 : Set -> list27 -> list27.
-Inductive list28 : Set := nil28 : list28 | cons28 : Set -> list28 -> list28.
-Inductive list29 : Set := nil29 : list29 | cons29 : Set -> list29 -> list29.
-Inductive list30 : Set := nil30 : list30 | cons30 : Set -> list30 -> list30.
-Inductive list31 : Set := nil31 : list31 | cons31 : Set -> list31 -> list31.
-Inductive list32 : Set := nil32 : list32 | cons32 : Set -> list32 -> list32.
-Inductive list33 : Set := nil33 : list33 | cons33 : Set -> list33 -> list33.
-Inductive list34 : Set := nil34 : list34 | cons34 : Set -> list34 -> list34.
-Inductive list35 : Set := nil35 : list35 | cons35 : Set -> list35 -> list35.
-Inductive list36 : Set := nil36 : list36 | cons36 : Set -> list36 -> list36.
-Inductive list37 : Set := nil37 : list37 | cons37 : Set -> list37 -> list37.
-Inductive list38 : Set := nil38 : list38 | cons38 : Set -> list38 -> list38.
-Inductive list39 : Set := nil39 : list39 | cons39 : Set -> list39 -> list39.
-Inductive list40 : Set := nil40 : list40 | cons40 : Set -> list40 -> list40.
-Inductive list41 : Set := nil41 : list41 | cons41 : Set -> list41 -> list41.
-Inductive list42 : Set := nil42 : list42 | cons42 : Set -> list42 -> list42.
-Inductive list43 : Set := nil43 : list43 | cons43 : Set -> list43 -> list43.
-Inductive list44 : Set := nil44 : list44 | cons44 : Set -> list44 -> list44.
-Inductive list45 : Set := nil45 : list45 | cons45 : Set -> list45 -> list45.
-Inductive list46 : Set := nil46 : list46 | cons46 : Set -> list46 -> list46.
-Inductive list47 : Set := nil47 : list47 | cons47 : Set -> list47 -> list47.
-Inductive list48 : Set := nil48 : list48 | cons48 : Set -> list48 -> list48.
-Inductive list49 : Set := nil49 : list49 | cons49 : Set -> list49 -> list49.
-Inductive list50 : Set := nil50 : list50 | cons50 : Set -> list50 -> list50.
-Inductive list51 : Set := nil51 : list51 | cons51 : Set -> list51 -> list51.
-Inductive list52 : Set := nil52 : list52 | cons52 : Set -> list52 -> list52.
-Inductive list53 : Set := nil53 : list53 | cons53 : Set -> list53 -> list53.
-Inductive list54 : Set := nil54 : list54 | cons54 : Set -> list54 -> list54.
-Inductive list55 : Set := nil55 : list55 | cons55 : Set -> list55 -> list55.
-Inductive list56 : Set := nil56 : list56 | cons56 : Set -> list56 -> list56.
-Inductive list57 : Set := nil57 : list57 | cons57 : Set -> list57 -> list57.
-Inductive list58 : Set := nil58 : list58 | cons58 : Set -> list58 -> list58.
-Inductive list59 : Set := nil59 : list59 | cons59 : Set -> list59 -> list59.
-Inductive list60 : Set := nil60 : list60 | cons60 : Set -> list60 -> list60.
-Inductive list61 : Set := nil61 : list61 | cons61 : Set -> list61 -> list61.
-Inductive list62 : Set := nil62 : list62 | cons62 : Set -> list62 -> list62.
-Inductive list63 : Set := nil63 : list63 | cons63 : Set -> list63 -> list63.
-Inductive list64 : Set := nil64 : list64 | cons64 : Set -> list64 -> list64.
-Inductive list65 : Set := nil65 : list65 | cons65 : Set -> list65 -> list65.
-Inductive list66 : Set := nil66 : list66 | cons66 : Set -> list66 -> list66.
-Inductive list67 : Set := nil67 : list67 | cons67 : Set -> list67 -> list67.
-Inductive list68 : Set := nil68 : list68 | cons68 : Set -> list68 -> list68.
-Inductive list69 : Set := nil69 : list69 | cons69 : Set -> list69 -> list69.
-Inductive list70 : Set := nil70 : list70 | cons70 : Set -> list70 -> list70.
-Inductive list71 : Set := nil71 : list71 | cons71 : Set -> list71 -> list71.
-Inductive list72 : Set := nil72 : list72 | cons72 : Set -> list72 -> list72.
-Inductive list73 : Set := nil73 : list73 | cons73 : Set -> list73 -> list73.
-Inductive list74 : Set := nil74 : list74 | cons74 : Set -> list74 -> list74.
-Inductive list75 : Set := nil75 : list75 | cons75 : Set -> list75 -> list75.
-Inductive list76 : Set := nil76 : list76 | cons76 : Set -> list76 -> list76.
-Inductive list77 : Set := nil77 : list77 | cons77 : Set -> list77 -> list77.
-Inductive list78 : Set := nil78 : list78 | cons78 : Set -> list78 -> list78.
-Inductive list79 : Set := nil79 : list79 | cons79 : Set -> list79 -> list79.
-Inductive list80 : Set := nil80 : list80 | cons80 : Set -> list80 -> list80.
-Inductive list81 : Set := nil81 : list81 | cons81 : Set -> list81 -> list81.
-Inductive list82 : Set := nil82 : list82 | cons82 : Set -> list82 -> list82.
-Inductive list83 : Set := nil83 : list83 | cons83 : Set -> list83 -> list83.
-Inductive list84 : Set := nil84 : list84 | cons84 : Set -> list84 -> list84.
-Inductive list85 : Set := nil85 : list85 | cons85 : Set -> list85 -> list85.
-Inductive list86 : Set := nil86 : list86 | cons86 : Set -> list86 -> list86.
-Inductive list87 : Set := nil87 : list87 | cons87 : Set -> list87 -> list87.
-Inductive list88 : Set := nil88 : list88 | cons88 : Set -> list88 -> list88.
-Inductive list89 : Set := nil89 : list89 | cons89 : Set -> list89 -> list89.
-Inductive list90 : Set := nil90 : list90 | cons90 : Set -> list90 -> list90.
-Inductive list91 : Set := nil91 : list91 | cons91 : Set -> list91 -> list91.
-Inductive list92 : Set := nil92 : list92 | cons92 : Set -> list92 -> list92.
-Inductive list93 : Set := nil93 : list93 | cons93 : Set -> list93 -> list93.
-Inductive list94 : Set := nil94 : list94 | cons94 : Set -> list94 -> list94.
-Inductive list95 : Set := nil95 : list95 | cons95 : Set -> list95 -> list95.
-Inductive list96 : Set := nil96 : list96 | cons96 : Set -> list96 -> list96.
-Inductive list97 : Set := nil97 : list97 | cons97 : Set -> list97 -> list97.
-Inductive list98 : Set := nil98 : list98 | cons98 : Set -> list98 -> list98.
-Inductive list99 : Set := nil99 : list99 | cons99 : Set -> list99 -> list99.
diff --git a/test-suite/bugs/4623.v b/test-suite/bugs/4623.v
index 405d0980..7ecfd98b 100644
--- a/test-suite/bugs/4623.v
+++ b/test-suite/bugs/4623.v
@@ -2,4 +2,4 @@ Goal Type -> Type.
set (T := Type).
clearbody T.
refine (@id _).
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/4624.v b/test-suite/bugs/4624.v
index a737afcd..f5ce981c 100644
--- a/test-suite/bugs/4624.v
+++ b/test-suite/bugs/4624.v
@@ -4,4 +4,4 @@ Canonical Structure fooA (T : Type) := mkfoo (T -> T).
Definition id (t : foo) (x : type t) := x.
-Definition bar := id _ ((fun x : nat => x) : _). \ No newline at end of file
+Definition bar := id _ ((fun x : nat => x) : _).
diff --git a/test-suite/bugs/5996.v b/test-suite/bugs/5996.v
new file mode 100644
index 00000000..c9e3292b
--- /dev/null
+++ b/test-suite/bugs/5996.v
@@ -0,0 +1,8 @@
+Goal Type.
+ let c := constr:(prod nat nat) in
+ let c' := (eval pattern nat in c) in
+ let c' := lazymatch c' with ?f _ => f end in
+ let c'' := lazymatch c' with fun x : Set => ?f => constr:(forall x : Type, f) end in
+ let _ := type of c'' in
+ exact c''.
+Defined.
diff --git a/test-suite/bugs/7333.v b/test-suite/bugs/7333.v
new file mode 100644
index 00000000..fba5b902
--- /dev/null
+++ b/test-suite/bugs/7333.v
@@ -0,0 +1,39 @@
+Module Example1.
+
+CoInductive wrap : Type :=
+ | item : unit -> wrap.
+
+Definition extract (t : wrap) : unit :=
+match t with
+| item x => x
+end.
+
+CoFixpoint close u : unit -> wrap :=
+match u with
+| tt => item
+end.
+
+Definition table : wrap := close tt tt.
+
+Eval vm_compute in (extract table).
+Eval vm_compute in (extract table).
+
+End Example1.
+
+Module Example2.
+
+Set Primitive Projections.
+CoInductive wrap : Type :=
+ item { extract : unit }.
+
+CoFixpoint close u : unit -> wrap :=
+match u with
+| tt => item
+end.
+
+Definition table : wrap := close tt tt.
+
+Eval vm_compute in (extract table).
+Eval vm_compute in (extract table).
+
+End Example2.
diff --git a/test-suite/bugs/closed/38.v b/test-suite/bugs/closed/1238.v
index 4fc8d7c9..6b6e8377 100644
--- a/test-suite/bugs/closed/38.v
+++ b/test-suite/bugs/closed/1238.v
@@ -14,7 +14,7 @@ Definition same := fun (l m : liste) => forall (x : A), e x l <-> e x m.
Definition same_refl (x:liste) : (same x x).
unfold same; split; intros; trivial.
-Save.
+Qed.
Goal forall (x:liste), (same x x).
intro.
diff --git a/test-suite/bugs/closed/1322.v b/test-suite/bugs/closed/1322.v
index 1ec7d452..6941ade4 100644
--- a/test-suite/bugs/closed/1322.v
+++ b/test-suite/bugs/closed/1322.v
@@ -12,7 +12,11 @@ Variable I_eq_equiv : Setoid_Theory I I_eq.
transitivity proved by I_eq_equiv.(Seq_trans I I_eq)
as I_eq_relation. *)
-Add Setoid I I_eq I_eq_equiv as I_with_eq.
+Add Parametric Relation : I I_eq
+ reflexivity proved by I_eq_equiv.(@Equivalence_Reflexive _ _)
+ symmetry proved by I_eq_equiv.(@Equivalence_Symmetric _ _)
+ transitivity proved by I_eq_equiv.(@Equivalence_Transitive _ _)
+ as I_with_eq.
Variable F : I -> Type.
Variable F_morphism : forall i j, I_eq i j -> F i = F j.
diff --git a/test-suite/bugs/closed/121.v b/test-suite/bugs/closed/1341.v
index 8c5a3885..8c5a3885 100644
--- a/test-suite/bugs/closed/121.v
+++ b/test-suite/bugs/closed/1341.v
diff --git a/test-suite/bugs/closed/1362.v b/test-suite/bugs/closed/1362.v
new file mode 100644
index 00000000..6cafb9f0
--- /dev/null
+++ b/test-suite/bugs/closed/1362.v
@@ -0,0 +1,26 @@
+(** Omega is now aware of the bodies of context variables
+ (of type Z or nat). *)
+
+Require Import ZArith Omega.
+Open Scope Z.
+
+Goal let x := 3 in x = 3.
+intros.
+omega.
+Qed.
+
+Open Scope nat.
+
+Goal let x := 2 in x = 2.
+intros.
+omega.
+Qed.
+
+(** NB: this could be disabled for compatibility reasons *)
+
+Unset Omega UseLocalDefs.
+
+Goal let x := 4 in x = 4.
+intros.
+Fail omega.
+Abort.
diff --git a/test-suite/bugs/closed/1425.v b/test-suite/bugs/closed/1425.v
index 6be30174..775d278e 100644
--- a/test-suite/bugs/closed/1425.v
+++ b/test-suite/bugs/closed/1425.v
@@ -16,4 +16,4 @@ Goal forall n : nat, recursion nat 0 (fun _ _ => 1) (S n) = 1.
intro n.
setoid_rewrite recursion_S.
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/opened/1501.v b/test-suite/bugs/closed/1501.v
index b36f21da..e771e192 100644
--- a/test-suite/bugs/opened/1501.v
+++ b/test-suite/bugs/closed/1501.v
@@ -3,6 +3,7 @@ Set Implicit Arguments.
Require Export Relation_Definitions.
Require Export Setoid.
+Require Import Morphisms.
Section Essais.
@@ -40,57 +41,27 @@ Parameter
Hint Resolve equiv_refl equiv_sym equiv_trans: monad.
-Instance equiv_rel A: Equivalence (@equiv A).
-Proof.
- constructor.
- intros xa; apply equiv_refl.
- intros xa xb; apply equiv_sym.
- intros xa xb xc; apply equiv_trans.
-Defined.
-
-Definition fequiv (A B: Type) (f g: A -> K B) := forall (x:A), (equiv (f x) (g
-x)).
-
-Lemma fequiv_refl : forall (A B: Type) (f : A -> K B), fequiv f f.
-Proof.
- unfold fequiv; auto with monad.
-Qed.
-
-Lemma fequiv_sym : forall (A B: Type) (x y : A -> K B), fequiv x y -> fequiv y
-x.
-Proof.
- unfold fequiv; auto with monad.
-Qed.
+Add Parametric Relation A : (K A) (@equiv A)
+ reflexivity proved by (@equiv_refl A)
+ symmetry proved by (@equiv_sym A)
+ transitivity proved by (@equiv_trans A)
+ as equiv_rel.
-Lemma fequiv_trans : forall (A B: Type) (x y z : A -> K B), fequiv x y ->
-fequiv
-y z -> fequiv x z.
+Add Parametric Morphism A B : (@bind A B)
+ with signature (@equiv A) ==> (pointwise_relation A (@equiv B)) ==> (@equiv B)
+ as bind_mor.
Proof.
- unfold fequiv; intros; eapply equiv_trans; auto with monad.
-Qed.
-
-Instance fequiv_re A B: Equivalence (@fequiv A B).
-Proof.
- constructor.
- intros f; apply fequiv_refl.
- intros f g; apply fequiv_sym.
- intros f g h; apply fequiv_trans.
-Defined.
-
-Instance bind_mor A B: Morphisms.Proper (@equiv _ ==> @fequiv _ _ ==> @equiv _) (@bind A B).
-Proof.
- unfold fequiv; intros x y xy_equiv f g fg_equiv; apply bind_compat; auto.
+ unfold pointwise_relation; intros; apply bind_compat; auto.
Qed.
Lemma test:
forall (A B: Type) (m1 m2 m3: K A) (f: A -> A -> K B),
- (equiv m1 m2) -> (equiv m2 m3) ->
- equiv (bind m1 (fun a => bind m2 (fun a' => f a a')))
- (bind m2 (fun a => bind m3 (fun a' => f a a'))).
+ (equiv m1 m2) -> (equiv m2 m3) ->
+ equiv (bind m1 (fun a => bind m2 (fun a' => f a a')))
+ (bind m2 (fun a => bind m3 (fun a' => f a a'))).
Proof.
intros A B m1 m2 m3 f H1 H2.
setoid_rewrite H1. (* this works *)
- Fail setoid_rewrite H2.
-Abort.
-(* trivial by equiv_refl.
-Qed.*)
+ setoid_rewrite H2.
+ reflexivity.
+Qed.
diff --git a/test-suite/bugs/closed/328.v b/test-suite/bugs/closed/1542.v
index 52cfbbc4..52cfbbc4 100644
--- a/test-suite/bugs/closed/328.v
+++ b/test-suite/bugs/closed/1542.v
diff --git a/test-suite/bugs/closed/329.v b/test-suite/bugs/closed/1543.v
index def6ed98..def6ed98 100644
--- a/test-suite/bugs/closed/329.v
+++ b/test-suite/bugs/closed/1543.v
diff --git a/test-suite/bugs/closed/331.v b/test-suite/bugs/closed/1545.v
index 9ef796fa..9ef796fa 100644
--- a/test-suite/bugs/closed/331.v
+++ b/test-suite/bugs/closed/1545.v
diff --git a/test-suite/bugs/closed/335.v b/test-suite/bugs/closed/1547.v
index 166fa7a9..166fa7a9 100644
--- a/test-suite/bugs/closed/335.v
+++ b/test-suite/bugs/closed/1547.v
diff --git a/test-suite/bugs/closed/348.v b/test-suite/bugs/closed/1551.v
index 28cc5cb1..48f0b551 100644
--- a/test-suite/bugs/closed/348.v
+++ b/test-suite/bugs/closed/1551.v
@@ -9,5 +9,5 @@ End D.
Module D' (M:S).
Import M.
- Definition empty:Set. exact nat. Save.
+ Definition empty:Set. exact nat. Qed.
End D'.
diff --git a/test-suite/bugs/closed/545.v b/test-suite/bugs/closed/1584.v
index 926af7dd..926af7dd 100644
--- a/test-suite/bugs/closed/545.v
+++ b/test-suite/bugs/closed/1584.v
diff --git a/test-suite/bugs/closed/1738.v b/test-suite/bugs/closed/1738.v
index c2926a2b..ef52c876 100644
--- a/test-suite/bugs/closed/1738.v
+++ b/test-suite/bugs/closed/1738.v
@@ -27,4 +27,4 @@ Module Test (Import M:FSetInterface.S).
rewrite H in H0.
assumption.
Qed.
-End Test. \ No newline at end of file
+End Test.
diff --git a/test-suite/bugs/closed/1859.v b/test-suite/bugs/closed/1859.v
new file mode 100644
index 00000000..43acfe4b
--- /dev/null
+++ b/test-suite/bugs/closed/1859.v
@@ -0,0 +1,20 @@
+Require Import Ring.
+Require Import ArithRing.
+
+Ltac ring_simplify_neq :=
+ match goal with
+ | [ H: ?X <> ?Y |- _ ] => progress ring_simplify X Y in H
+ end.
+
+Lemma toto : forall x y, x*1 <> y*1 -> y*1 <> x*1 -> x<>y.
+Proof.
+ intros.
+ ring_simplify_neq.
+ ring_simplify_neq.
+ (* make sure ring_simplify has simplified both hypotheses *)
+ match goal with
+ | [ H: context[_*1] |- _ ] => fail 1
+ | _ => idtac
+ end.
+ auto.
+Qed.
diff --git a/test-suite/bugs/closed/1900.v b/test-suite/bugs/closed/1900.v
index cf03efda..6eea5db0 100644
--- a/test-suite/bugs/closed/1900.v
+++ b/test-suite/bugs/closed/1900.v
@@ -5,4 +5,4 @@ Definition eq_A := @eq A.
Goal forall x, eq_A x x.
intros.
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/1901.v b/test-suite/bugs/closed/1901.v
index 7d86adbf..98e017f9 100644
--- a/test-suite/bugs/closed/1901.v
+++ b/test-suite/bugs/closed/1901.v
@@ -8,4 +8,4 @@ Record Poset{A:Type}(Le : relation A) : Type :=
Le_antisym : forall x y : A, Le x y -> Le y x -> x = y }.
Definition nat_Poset : Poset Peano.le.
-Admitted. \ No newline at end of file
+Admitted.
diff --git a/test-suite/bugs/closed/1905.v b/test-suite/bugs/closed/1905.v
index 8c81d751..3b8a3d2f 100644
--- a/test-suite/bugs/closed/1905.v
+++ b/test-suite/bugs/closed/1905.v
@@ -10,4 +10,4 @@ Goal forall a s,
Proof.
intros a s Ia.
rewrite InE in Ia.
-Admitted. \ No newline at end of file
+Admitted.
diff --git a/test-suite/bugs/closed/1915.v b/test-suite/bugs/closed/1915.v
index 7e62437d..2b0aed8c 100644
--- a/test-suite/bugs/closed/1915.v
+++ b/test-suite/bugs/closed/1915.v
@@ -3,4 +3,4 @@ Require Import Setoid.
Fail Goal forall x, impl True (x = 0) -> x = 0 -> False.
(*intros x H E.
-rewrite H in E.*) \ No newline at end of file
+rewrite H in E.*)
diff --git a/test-suite/bugs/closed/1939.v b/test-suite/bugs/closed/1939.v
index 5e61529b..7b430ace 100644
--- a/test-suite/bugs/closed/1939.v
+++ b/test-suite/bugs/closed/1939.v
@@ -16,4 +16,4 @@ Require Import Setoid Program.Basics.
intros x y H1 H2.
rewrite H1.
auto.
- Qed. \ No newline at end of file
+ Qed.
diff --git a/test-suite/bugs/closed/1962.v b/test-suite/bugs/closed/1962.v
index a6b0fee5..37b0dde0 100644
--- a/test-suite/bugs/closed/1962.v
+++ b/test-suite/bugs/closed/1962.v
@@ -52,4 +52,4 @@ unfold triple, couple.
Time fsetdec.
Qed.
-End BuildFSets. \ No newline at end of file
+End BuildFSets.
diff --git a/test-suite/bugs/closed/2001.v b/test-suite/bugs/closed/2001.v
index d0b3bf17..652c6570 100644
--- a/test-suite/bugs/closed/2001.v
+++ b/test-suite/bugs/closed/2001.v
@@ -7,7 +7,7 @@ Inductive T : Set :=
| v : T.
Definition f (s:nat) (t:T) : nat.
-fix 2.
+fix f 2.
intros s t.
refine
match t with
diff --git a/test-suite/bugs/closed/2027.v b/test-suite/bugs/closed/2027.v
index fb53c6ef..ebc2bc07 100644
--- a/test-suite/bugs/closed/2027.v
+++ b/test-suite/bugs/closed/2027.v
@@ -8,4 +8,4 @@ Goal forall A (p : T A), P p.
Proof.
intros.
rewrite <- f_id.
-Admitted. \ No newline at end of file
+Admitted.
diff --git a/test-suite/bugs/closed/2136.v b/test-suite/bugs/closed/2136.v
index d2b926f3..2fcfbe40 100644
--- a/test-suite/bugs/closed/2136.v
+++ b/test-suite/bugs/closed/2136.v
@@ -58,4 +58,4 @@ fsetdec.
(*
Error: Tactic failure: because the goal is beyond the scope of this tactic.
*)
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/2137.v b/test-suite/bugs/closed/2137.v
index 6c2023ab..b1f54b17 100644
--- a/test-suite/bugs/closed/2137.v
+++ b/test-suite/bugs/closed/2137.v
@@ -49,4 +49,4 @@ fsetdec.
(*
Error: Tactic failure: because the goal is beyond the scope of this tactic.
*)
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/2141.v b/test-suite/bugs/closed/2141.v
index 941ae530..22e33c8e 100644
--- a/test-suite/bugs/closed/2141.v
+++ b/test-suite/bugs/closed/2141.v
@@ -1,3 +1,4 @@
+Require Coq.extraction.Extraction.
Require Import FSetList.
Require Import OrderedTypeEx.
@@ -10,5 +11,6 @@ End FSetHide.
Module NatSet' := FSetHide NatSet.
Recursive Extraction NatSet'.fold.
+Extraction TestCompile NatSet'.fold.
-(* Extraction "test2141.ml" NatSet'.fold. *) \ No newline at end of file
+(* Extraction "test2141.ml" NatSet'.fold. *)
diff --git a/test-suite/bugs/closed/2245.v b/test-suite/bugs/closed/2245.v
new file mode 100644
index 00000000..f0162f3b
--- /dev/null
+++ b/test-suite/bugs/closed/2245.v
@@ -0,0 +1,11 @@
+Module Type Test.
+
+Section Sec.
+Variables (A:Type).
+Context (B:Type).
+End Sec.
+
+Fail Check B. (* used to be found !!! *)
+Fail Check A.
+
+End Test.
diff --git a/test-suite/bugs/closed/2281.v b/test-suite/bugs/closed/2281.v
index 40948d90..8f549b92 100644
--- a/test-suite/bugs/closed/2281.v
+++ b/test-suite/bugs/closed/2281.v
@@ -47,4 +47,4 @@ intros.
fsetdec.
(* Error: Tactic failure: because the goal is beyond the scope of this tactic.
*)
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/2310.v b/test-suite/bugs/closed/2310.v
index 7fae3287..14a3e5a7 100644
--- a/test-suite/bugs/closed/2310.v
+++ b/test-suite/bugs/closed/2310.v
@@ -18,4 +18,4 @@ Definition replace a (y:Nest (prod a a)) : a = a -> Nest a.
Unset Solve Unification Constraints. (* Keep the unification constraint around *)
refine (Cons (cast H _ y)).
intros.
- refine (Nest (prod X X)). Qed. \ No newline at end of file
+ refine (Nest (prod X X)). Qed.
diff --git a/test-suite/bugs/closed/2319.v b/test-suite/bugs/closed/2319.v
index e06fb975..73d95e91 100644
--- a/test-suite/bugs/closed/2319.v
+++ b/test-suite/bugs/closed/2319.v
@@ -10,4 +10,4 @@ Section S.
with t : A unit := mkA unit (mkA unit t).
Timeout 5 Eval vm_compute in s.
-End S. \ No newline at end of file
+End S.
diff --git a/test-suite/bugs/closed/2378.v b/test-suite/bugs/closed/2378.v
index 85ad41d1..23a58501 100644
--- a/test-suite/bugs/closed/2378.v
+++ b/test-suite/bugs/closed/2378.v
@@ -505,8 +505,6 @@ Qed.
Require Export Coq.Logic.FunctionalExtensionality.
Print PLanguage.
-Unset Standard Proposition Elimination Names.
-
Program Definition PTransfo l1 l2 (tr: Transformation l1 l2) (h: isSharedTransfo l1 l2 tr):
Transformation (PLanguage l1) (PLanguage l2) :=
mkTransformation (PLanguage l1) (PLanguage l2)
diff --git a/test-suite/bugs/closed/2417.v b/test-suite/bugs/closed/2417.v
new file mode 100644
index 00000000..b2f00ffc
--- /dev/null
+++ b/test-suite/bugs/closed/2417.v
@@ -0,0 +1,15 @@
+Parameter x y : nat.
+Axiom H : x = y.
+Hint Rewrite H : mybase.
+
+Ltac bar base := autorewrite with base.
+
+Tactic Notation "foo" ident(base) := autorewrite with base.
+
+Goal x = 0.
+ bar mybase.
+ now_show (y = 0).
+ Undo 2.
+ foo mybase.
+ now_show (y = 0).
+Abort.
diff --git a/test-suite/bugs/opened/2456.v b/test-suite/bugs/closed/2456.v
index 6cca5c9f..de28c7f4 100644
--- a/test-suite/bugs/opened/2456.v
+++ b/test-suite/bugs/closed/2456.v
@@ -50,4 +50,9 @@ Fail dependent destruction commute1;
dependent destruction catchCommuteDetails;
dependent destruction commute2;
dependent destruction catchCommuteDetails generalizing X.
-Admitted.
+revert X.
+dependent destruction commute1;
+dependent destruction catchCommuteDetails;
+dependent destruction commute2;
+dependent destruction catchCommuteDetails.
+Abort.
diff --git a/test-suite/bugs/closed/2464.v b/test-suite/bugs/closed/2464.v
index af708587..b9db3035 100644
--- a/test-suite/bugs/closed/2464.v
+++ b/test-suite/bugs/closed/2464.v
@@ -36,4 +36,4 @@ Lemma foo : forall (pu_type : Type)
NameSetMod.Equal ns2 (NameSetMod.add (pu_nameOf p) ns).
Proof.
NameSetDec.fsetdec.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/2473.v b/test-suite/bugs/closed/2473.v
index fb676c7e..0e7c0c25 100644
--- a/test-suite/bugs/closed/2473.v
+++ b/test-suite/bugs/closed/2473.v
@@ -37,4 +37,4 @@ Section S3.
rewrite <- H. (* ok *)
admit.
Qed.
-End S3. \ No newline at end of file
+End S3.
diff --git a/test-suite/bugs/closed/2584.v b/test-suite/bugs/closed/2584.v
index a5f4ae64..ef2e4e35 100644
--- a/test-suite/bugs/closed/2584.v
+++ b/test-suite/bugs/closed/2584.v
@@ -86,4 +86,4 @@ should be "Prop" or "Set".
Elimination of an inductive object of sort Set
is not allowed on a predicate in sort Type
because strong elimination on non-small inductive types leads to paradoxes.
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/2586.v b/test-suite/bugs/closed/2586.v
index 7e02e7f1..e57bcc25 100644
--- a/test-suite/bugs/closed/2586.v
+++ b/test-suite/bugs/closed/2586.v
@@ -3,4 +3,4 @@ Require Import Setoid SetoidClass Program.
Goal forall `(Setoid nat) x y, x == y -> S x == S y.
intros.
Fail clsubst H0.
- Abort. \ No newline at end of file
+ Abort.
diff --git a/test-suite/bugs/closed/2602.v b/test-suite/bugs/closed/2602.v
index f0744788..29c8ac16 100644
--- a/test-suite/bugs/closed/2602.v
+++ b/test-suite/bugs/closed/2602.v
@@ -5,4 +5,4 @@ match goal with
match goal with
| |- S a > 0 => idtac
end
-end. \ No newline at end of file
+end.
diff --git a/test-suite/bugs/closed/2615.v b/test-suite/bugs/closed/2615.v
index 38c1cfc8..26c0f334 100644
--- a/test-suite/bugs/closed/2615.v
+++ b/test-suite/bugs/closed/2615.v
@@ -14,4 +14,4 @@ refine (fun p => match p with _ => _ end).
Undo.
refine (fun p => match p with foo_intro _ _ => _ end).
admit.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/2640.v b/test-suite/bugs/closed/2640.v
deleted file mode 100644
index da0cc68a..00000000
--- a/test-suite/bugs/closed/2640.v
+++ /dev/null
@@ -1,17 +0,0 @@
-(* Testing consistency of globalization and interpretation in some
- extreme cases *)
-
-Section sect.
-
- (* Simplification of the initial example *)
- Hypothesis Other: True.
-
- Lemma C2 : True.
- proof.
- Fail have True using Other.
- Abort.
-
- (* Variant of the same problem *)
- Lemma C2 : True.
- Fail clear; Other.
- Abort.
diff --git a/test-suite/bugs/closed/2668.v b/test-suite/bugs/closed/2668.v
index 74c8fa34..d5bbfd3f 100644
--- a/test-suite/bugs/closed/2668.v
+++ b/test-suite/bugs/closed/2668.v
@@ -3,4 +3,4 @@ Require Import MSetProperties.
Module Pos := MSetPositive.PositiveSet.
Module PPPP := MSetProperties.WPropertiesOn(Pos).
-Print Module PPPP. \ No newline at end of file
+Print Module PPPP.
diff --git a/test-suite/bugs/closed/2734.v b/test-suite/bugs/closed/2734.v
index 826361be..3210214e 100644
--- a/test-suite/bugs/closed/2734.v
+++ b/test-suite/bugs/closed/2734.v
@@ -12,4 +12,4 @@ Inductive control := Go: expr -> control.
Definition program := (Adr.t * (control))%type.
-Fail Definition myprog : program := (Adr.nat2t 0, Go (Adr.nat2t 0) ). \ No newline at end of file
+Fail Definition myprog : program := (Adr.nat2t 0, Go (Adr.nat2t 0) ).
diff --git a/test-suite/bugs/closed/2750.v b/test-suite/bugs/closed/2750.v
index fc580f10..9d65e51f 100644
--- a/test-suite/bugs/closed/2750.v
+++ b/test-suite/bugs/closed/2750.v
@@ -20,4 +20,4 @@ Module Test_ModWithRecord (M : ModWithRecord).
{| M.A := 0
; M.B := 2
|}.
-End Test_ModWithRecord. \ No newline at end of file
+End Test_ModWithRecord.
diff --git a/test-suite/bugs/closed/2800.v b/test-suite/bugs/closed/2800.v
index 2ee43893..54c75e34 100644
--- a/test-suite/bugs/closed/2800.v
+++ b/test-suite/bugs/closed/2800.v
@@ -4,3 +4,16 @@ intuition
match goal with
| |- _ => idtac " foo"
end.
+
+ lazymatch goal with _ => idtac end.
+ match goal with _ => idtac end.
+ unshelve lazymatch goal with _ => idtac end.
+ unshelve match goal with _ => idtac end.
+ unshelve (let x := I in idtac).
+Abort.
+
+Require Import ssreflect.
+
+Goal True.
+match goal with _ => idtac end => //.
+Qed.
diff --git a/test-suite/bugs/opened/2814.v b/test-suite/bugs/closed/2814.v
index a740b438..99da1e3e 100644
--- a/test-suite/bugs/opened/2814.v
+++ b/test-suite/bugs/closed/2814.v
@@ -3,3 +3,4 @@ Require Import Program.
Goal forall (x : Type) (f g : Type -> Type) (H : f x ~= g x), False.
intros.
Fail induction H.
+Abort.
diff --git a/test-suite/bugs/closed/2837.v b/test-suite/bugs/closed/2837.v
index 5d984463..52a56c2c 100644
--- a/test-suite/bugs/closed/2837.v
+++ b/test-suite/bugs/closed/2837.v
@@ -12,4 +12,4 @@ Fail rewrite test.
Fail (intros; rewrite test).
(* III) a working variant: *)
-intros; rewrite (test n m). \ No newline at end of file
+intros; rewrite (test n m).
diff --git a/test-suite/bugs/closed/2848.v b/test-suite/bugs/closed/2848.v
index 828e3b8c..e2346303 100644
--- a/test-suite/bugs/closed/2848.v
+++ b/test-suite/bugs/closed/2848.v
@@ -7,4 +7,4 @@ Add Parametric Relation : _ equiv'
reflexivity proved by (Equivalence.equiv_reflexive cheat)
transitivity proved by (Equivalence.equiv_transitive cheat)
as apply_equiv'_rel.
-Check apply_equiv'_rel : PreOrder equiv'. \ No newline at end of file
+Check apply_equiv'_rel : PreOrder equiv'.
diff --git a/test-suite/bugs/closed/2850.v b/test-suite/bugs/closed/2850.v
deleted file mode 100644
index 64a93aeb..00000000
--- a/test-suite/bugs/closed/2850.v
+++ /dev/null
@@ -1,2 +0,0 @@
-Definition id {A} (x : A) := x.
-Fail Compute id.
diff --git a/test-suite/bugs/closed/2881.v b/test-suite/bugs/closed/2881.v
new file mode 100644
index 00000000..b4f09305
--- /dev/null
+++ b/test-suite/bugs/closed/2881.v
@@ -0,0 +1,7 @@
+(* About scoping of pattern variables in strict/non-strict mode *)
+
+Ltac eta_red := change (fun a => ?f0 a) with f0.
+Goal forall T1 T2 (f : T1 -> T2), (fun x => f x) = f.
+intros.
+eta_red.
+Abort.
diff --git a/test-suite/bugs/closed/2955.v b/test-suite/bugs/closed/2955.v
index 45e24b5f..11fd7bad 100644
--- a/test-suite/bugs/closed/2955.v
+++ b/test-suite/bugs/closed/2955.v
@@ -49,4 +49,4 @@ Module E.
assumption.
Qed.
-End E. \ No newline at end of file
+End E.
diff --git a/test-suite/bugs/closed/2983.v b/test-suite/bugs/closed/2983.v
index 15598352..ad763509 100644
--- a/test-suite/bugs/closed/2983.v
+++ b/test-suite/bugs/closed/2983.v
@@ -5,4 +5,4 @@ End ModB.
Module Foo(A : ModA)(B : ModB A).
End Foo.
-Print Module Foo. \ No newline at end of file
+Print Module Foo.
diff --git a/test-suite/bugs/closed/2995.v b/test-suite/bugs/closed/2995.v
index ba3acd08..b6c5b6df 100644
--- a/test-suite/bugs/closed/2995.v
+++ b/test-suite/bugs/closed/2995.v
@@ -6,4 +6,4 @@ Module Implementation <: Interface.
Definition t := bool.
Definition error: t := false.
Fail End Implementation.
-(* A UserError here is expected, not an uncaught Not_found *) \ No newline at end of file
+(* A UserError here is expected, not an uncaught Not_found *)
diff --git a/test-suite/bugs/closed/3008.v b/test-suite/bugs/closed/3008.v
index 3f3a979a..1979eda8 100644
--- a/test-suite/bugs/closed/3008.v
+++ b/test-suite/bugs/closed/3008.v
@@ -26,4 +26,4 @@ Fail Module Toto
(* NB : the Inductive above and the A=A weren't in the initial test,
they are here only to force an access to the environment
- (cf [Printer.qualid_of_global]) and check that this env is ok. *) \ No newline at end of file
+ (cf [Printer.qualid_of_global]) and check that this env is ok. *)
diff --git a/test-suite/bugs/closed/3036.v b/test-suite/bugs/closed/3036.v
index 451bec9b..3b57310d 100644
--- a/test-suite/bugs/closed/3036.v
+++ b/test-suite/bugs/closed/3036.v
@@ -15,11 +15,11 @@ Definition perm := Qc.
Locate Qle_bool.
Definition compatibleb (p1 p2 : perm) : bool :=
-let p1pos := Qle_bool 00 p1 in
- let p2pos := Qle_bool 00 p2 in
+let p1pos := Qle_bool 0 p1 in
+ let p2pos := Qle_bool 0 p2 in
negb (
(p1pos && p2pos)
- || ((p1pos || p2pos) && (negb (Qle_bool 00 ((p1 + p2)%Qc)))))%Qc.
+ || ((p1pos || p2pos) && (negb (Qle_bool 0 ((p1 + p2)%Qc)))))%Qc.
Definition compatible (p1 p2 : perm) := compatibleb p1 p2 = true.
diff --git a/test-suite/bugs/closed/3080.v b/test-suite/bugs/closed/3080.v
index 7d0dc090..36ab7ff5 100644
--- a/test-suite/bugs/closed/3080.v
+++ b/test-suite/bugs/closed/3080.v
@@ -1,4 +1,4 @@
-(* -*- coq-prog-args: ("-emacs" "-nois") -*- *)
+(* -*- coq-prog-args: ("-nois") -*- *)
Delimit Scope type_scope with type.
Delimit Scope function_scope with function.
diff --git a/test-suite/bugs/opened/3100.v b/test-suite/bugs/closed/3100.v
index 6f35a74d..6f35a74d 100644
--- a/test-suite/bugs/opened/3100.v
+++ b/test-suite/bugs/closed/3100.v
diff --git a/test-suite/bugs/closed/3125.v b/test-suite/bugs/closed/3125.v
new file mode 100644
index 00000000..79714617
--- /dev/null
+++ b/test-suite/bugs/closed/3125.v
@@ -0,0 +1,27 @@
+(* Not considering singleton template-polymorphic inductive types as
+ propositions for injection/inversion *)
+
+(* This is also #4560 and #6273 *)
+
+Inductive foo := foo_1.
+
+Goal forall (a b : foo), Some a = Some b -> a = b.
+Proof.
+ intros a b H.
+ inversion H.
+ reflexivity.
+Qed.
+
+(* Check that Prop is not concerned *)
+
+Inductive bar : Prop := bar_1.
+
+Goal
+ forall (a b : bar),
+ Some a = Some b ->
+ a = b.
+Proof.
+ intros a b H.
+ inversion H.
+ Fail reflexivity.
+Abort.
diff --git a/test-suite/bugs/opened/3230.v b/test-suite/bugs/closed/3230.v
index 265310b1..265310b1 100644
--- a/test-suite/bugs/opened/3230.v
+++ b/test-suite/bugs/closed/3230.v
diff --git a/test-suite/bugs/closed/3287.v b/test-suite/bugs/closed/3287.v
index 7c781312..4b3e7ff0 100644
--- a/test-suite/bugs/closed/3287.v
+++ b/test-suite/bugs/closed/3287.v
@@ -1,9 +1,12 @@
+Require Coq.extraction.Extraction.
+
Module Foo.
(* Definition foo := (I,I). *)
Definition bar := true.
End Foo.
Recursive Extraction Foo.bar.
+Extraction TestCompile Foo.bar.
Module Foo'.
Definition foo := (I,I).
@@ -11,10 +14,6 @@ Definition bar := true.
End Foo'.
Recursive Extraction Foo'.bar.
+Extraction TestCompile Foo'.bar.
-Module Foo''.
-Definition foo := (I,I).
-Definition bar := true.
-End Foo''.
-
-Extraction Foo.bar.
+Extraction Foo'.bar.
diff --git a/test-suite/bugs/closed/3319.v b/test-suite/bugs/closed/3319.v
index 3b37e39e..fbf5d86d 100644
--- a/test-suite/bugs/closed/3319.v
+++ b/test-suite/bugs/closed/3319.v
@@ -23,4 +23,4 @@ Section precategory.
= morphism' xa yb.
Proof.
admit.
- Defined. \ No newline at end of file
+ Defined.
diff --git a/test-suite/bugs/opened/3320.v b/test-suite/bugs/closed/3320.v
index 05cf7328..a5c243d8 100644
--- a/test-suite/bugs/opened/3320.v
+++ b/test-suite/bugs/closed/3320.v
@@ -1,4 +1,5 @@
Goal forall x : nat, True.
- fix 1.
+ fix goal 1.
assumption.
Fail Qed.
+Undo.
diff --git a/test-suite/bugs/closed/3323.v b/test-suite/bugs/closed/3323.v
index 22b1603b..4622634e 100644
--- a/test-suite/bugs/closed/3323.v
+++ b/test-suite/bugs/closed/3323.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 5302 lines to 4649 lines, then from 4660 lines to 355 lines, then from 360 lines to 269 lines, then from 269 lines to 175 lines, then from 144 lines to 119 lines, then from 297 lines to 117 lines, then from 95 lines to 79 lines, then from 82 lines to 68 lines *)
Set Universe Polymorphism.
diff --git a/test-suite/bugs/closed/3330.v b/test-suite/bugs/closed/3330.v
index e3b5e943..672fb3f1 100644
--- a/test-suite/bugs/closed/3330.v
+++ b/test-suite/bugs/closed/3330.v
@@ -41,6 +41,8 @@ Notation "g 'o' f" := (compose g f) (at level 40, left associativity) : function
Open Scope function_scope.
+Set Printing Universes. Set Printing All.
+
Inductive paths {A : Type} (a : A) : A -> Type :=
idpath : paths a a.
@@ -156,7 +158,8 @@ Delimit Scope morphism_scope with morphism.
Delimit Scope category_scope with category.
Delimit Scope object_scope with object.
-
+Set Printing Universes.
+Set Printing All.
Record PreCategory :=
Build_PreCategory' {
object :> Type;
@@ -1069,7 +1072,7 @@ Section Adjunction.
Variable F : Functor C D.
Variable G : Functor D C.
- Let Adjunction_Type :=
+ Let Adjunction_Type :=
Eval simpl in (hom_functor D) o (F^op, 1) <~=~> (hom_functor C) o (1, G).
Record AdjunctionHom :=
diff --git a/test-suite/bugs/closed/3331.v b/test-suite/bugs/closed/3331.v
index 9cd44bd0..b7dbb290 100644
--- a/test-suite/bugs/closed/3331.v
+++ b/test-suite/bugs/closed/3331.v
@@ -28,4 +28,4 @@ Section groupoid_category.
clear H' foo.
Set Typeclasses Debug.
pose (_ : Contr (idpath = idpath :> (@paths (@paths X d d) idpath idpath))).
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/closed/3332.v b/test-suite/bugs/closed/3332.v
index d86470cd..a3564bfc 100644
--- a/test-suite/bugs/closed/3332.v
+++ b/test-suite/bugs/closed/3332.v
@@ -1,4 +1,4 @@
-(* -*- coq-prog-args: ("-emacs" "-time") -*- *)
+(* -*- coq-prog-args: ("-time") -*- *)
Definition foo : True.
Proof.
Abort. (* Toplevel input, characters 15-21:
diff --git a/test-suite/bugs/closed/3346.v b/test-suite/bugs/closed/3346.v
index 638404f2..09bd7893 100644
--- a/test-suite/bugs/closed/3346.v
+++ b/test-suite/bugs/closed/3346.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Monomorphic Inductive paths (A : Type) (a : A) : A -> Type := idpath : paths A a a.
(* This should fail with -indices-matter *)
Fail Check paths nat O O : Prop.
diff --git a/test-suite/bugs/closed/3348.v b/test-suite/bugs/closed/3348.v
index d9ac09d8..904de689 100644
--- a/test-suite/bugs/closed/3348.v
+++ b/test-suite/bugs/closed/3348.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Set Universe Polymorphism.
Set Printing Universes.
Inductive Empty : Set := .
diff --git a/test-suite/bugs/closed/3350.v b/test-suite/bugs/closed/3350.v
index c041c401..c1ff292b 100644
--- a/test-suite/bugs/closed/3350.v
+++ b/test-suite/bugs/closed/3350.v
@@ -55,7 +55,7 @@ Lemma lower_ind (P: forall n (p i:Fin.t (S n)), option (Fin.t n) -> Prop)
P (S n) (Fin.FS p) (Fin.FS i) None) :
forall n (p i:Fin.t (S n)), P n p i (lower p i).
Proof.
- fix 2. intros n p.
+ fix lower_ind 2. intros n p.
refine (match p as p1 in Fin.t (S n1)
return forall (i1:Fin.t (S n1)), P n1 p1 i1 (lower p1 i1)
with
diff --git a/test-suite/bugs/closed/3352.v b/test-suite/bugs/closed/3352.v
index f8113e4c..bf2f7a9d 100644
--- a/test-suite/bugs/closed/3352.v
+++ b/test-suite/bugs/closed/3352.v
@@ -20,7 +20,7 @@ while it is expected to have type "IsHProp (* Top.17 *) Empty"
Defined.
Module B.
-(* -*- coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 7725 lines to 78 lines, then from 51 lines to 13 lines *)
Set Universe Polymorphism.
Inductive paths {A} (a : A) : A -> Type := idpath : paths a a where "x = y" := (@paths _ x y) : type_scope.
@@ -32,4 +32,4 @@ simpl.
Set Printing Universes.
exact hprop_Empty.
Defined.
-End B. \ No newline at end of file
+End B.
diff --git a/test-suite/bugs/closed/3375.v b/test-suite/bugs/closed/3375.v
index d7ce02ea..1e0c8e61 100644
--- a/test-suite/bugs/closed/3375.v
+++ b/test-suite/bugs/closed/3375.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-impredicative-set") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-impredicative-set") -*- *)
(* File reduced by coq-bug-finder from original input, then from 5968 lines to 11933 lines, then from 11239 lines to 11231 lines, then from 10365 lines to 446 lines, then from 456 lines to 379 lines, then from 391 lines to 373 lines, then from 369 lines to 351 lines, then from 350 lines to 340 lines, then from 348 lines to 320 lines, then from 328 lines to 302 lines, then from 330 lines to 45 lines *)
Set Universe Polymorphism.
diff --git a/test-suite/bugs/closed/3387.v b/test-suite/bugs/closed/3387.v
index cb435e78..1d9e7833 100644
--- a/test-suite/bugs/closed/3387.v
+++ b/test-suite/bugs/closed/3387.v
@@ -19,4 +19,4 @@ Proof.
first [ unify x y | fail 2 "no unify" ];
change x with y at -1. (* Error: Not convertible. *)
reflexivity.
-Defined. \ No newline at end of file
+Defined.
diff --git a/test-suite/bugs/closed/3392.v b/test-suite/bugs/closed/3392.v
index 3a598695..a03db775 100644
--- a/test-suite/bugs/closed/3392.v
+++ b/test-suite/bugs/closed/3392.v
@@ -37,4 +37,4 @@ Proof.
rewrite eissect;
apply apD
).
-Defined. \ No newline at end of file
+Defined.
diff --git a/test-suite/bugs/closed/3393.v b/test-suite/bugs/closed/3393.v
index f7ab5f76..ae8e41e2 100644
--- a/test-suite/bugs/closed/3393.v
+++ b/test-suite/bugs/closed/3393.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 8760 lines to 7519 lines, then from 7050 lines to 909 lines, then from 846 lines to 578 lines, then from 497 lines to 392 lines, then from 365 lines to 322 lines, then from 252 lines to 205 lines, then from 215 lines to 204 lines, then from 210 lines to 182 lines, then from 175 lines to 157 lines *)
Set Universe Polymorphism.
Axiom admit : forall {T}, T.
diff --git a/test-suite/bugs/closed/3402.v b/test-suite/bugs/closed/3402.v
index ed47ec82..b4705780 100644
--- a/test-suite/bugs/closed/3402.v
+++ b/test-suite/bugs/closed/3402.v
@@ -4,4 +4,4 @@ Goal forall A B (p : prod A B), p = let (x, y) := p in pair A B x y.
Proof.
intros A B p.
exact eq_refl.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/3427.v b/test-suite/bugs/closed/3427.v
index 374a5392..9a57ca77 100644
--- a/test-suite/bugs/closed/3427.v
+++ b/test-suite/bugs/closed/3427.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 0 lines to 7171 lines, then from 7184 lines to 558 lines, then from 556 lines to 209 lines *)
Generalizable All Variables.
Set Universe Polymorphism.
diff --git a/test-suite/bugs/closed/3428.v b/test-suite/bugs/closed/3428.v
index 3eb75e43..16ace90a 100644
--- a/test-suite/bugs/closed/3428.v
+++ b/test-suite/bugs/closed/3428.v
@@ -32,4 +32,4 @@ z' : prod A B
p : @paths A (foo.fst ?11 ?14 z) (foo.fst ?26 ?29 z')
q : @paths ?54 (foo.snd ?42 ?45 z) (foo.snd ?57 ?60 z')
The term "p" has type "@paths A (foo.fst ?11 ?14 z) (foo.fst ?26 ?29 z')"
-while it is expected to have type "@paths A (foo.fst z) (foo.fst z')". *) \ No newline at end of file
+while it is expected to have type "@paths A (foo.fst z) (foo.fst z')". *)
diff --git a/test-suite/bugs/closed/3439.v b/test-suite/bugs/closed/3439.v
index 1ea24bf1..e8c2d8b8 100644
--- a/test-suite/bugs/closed/3439.v
+++ b/test-suite/bugs/closed/3439.v
@@ -41,4 +41,4 @@ Module prim.
Undo.
solve [ typeclasses eauto ]. (* Error: No applicable tactic. *)
Defined.
-End prim. \ No newline at end of file
+End prim.
diff --git a/test-suite/bugs/closed/3441.v b/test-suite/bugs/closed/3441.v
index 50d29780..ddfb3394 100644
--- a/test-suite/bugs/closed/3441.v
+++ b/test-suite/bugs/closed/3441.v
@@ -20,4 +20,4 @@ Timeout 1 let H := fresh "H" in
Timeout 1 Time let H := fresh "H" in
let x := constr:(let n := 17 in do_n n = do_n n) in
let y := (eval lazy in x) in
- assert (H := y). (* Finished transaction in 1.19 secs (1.164u,0.024s) (successful) *) \ No newline at end of file
+ assert (H := y). (* Finished transaction in 1.19 secs (1.164u,0.024s) (successful) *)
diff --git a/test-suite/bugs/closed/3446.v b/test-suite/bugs/closed/3446.v
index dce73e1a..8a0c98c3 100644
--- a/test-suite/bugs/closed/3446.v
+++ b/test-suite/bugs/closed/3446.v
@@ -48,4 +48,4 @@ Instance isequiv_pr1_contr {A} {P : A -> Type} : IsEquiv (@pr1 A P) | 100.
Admitted.
Definition path_sigma_hprop {A : Type} {P : A -> Type} (u v : sigT P) : u.1 = v.1 -> u = v :=
- path_sigma_uncurried P u v o pr1^-1. \ No newline at end of file
+ path_sigma_uncurried P u v o pr1^-1.
diff --git a/test-suite/bugs/closed/3477.v b/test-suite/bugs/closed/3477.v
index e9414864..3ed63604 100644
--- a/test-suite/bugs/closed/3477.v
+++ b/test-suite/bugs/closed/3477.v
@@ -6,4 +6,4 @@ Proof.
intros A B.
evar (a : prod A B); evar (f : (prod A B -> Set)).
let a' := (eval unfold a in a) in
- set(foo:=eq_refl : a' = (@pair _ _ (fst a') (snd a'))). \ No newline at end of file
+ set(foo:=eq_refl : a' = (@pair _ _ (fst a') (snd a'))).
diff --git a/test-suite/bugs/closed/3480.v b/test-suite/bugs/closed/3480.v
index a81837e7..35e0c51a 100644
--- a/test-suite/bugs/closed/3480.v
+++ b/test-suite/bugs/closed/3480.v
@@ -45,4 +45,4 @@ yb : object StrX
x : xa <~=~> yb
The term "morphism_isomorphic:@morphism (precategory_of_structures P) xa yb"
has type "@morphism (precategory_of_structures P) xa yb"
-while it is expected to have type "morphism ?40 ?41 ?42". *) \ No newline at end of file
+while it is expected to have type "morphism ?40 ?41 ?42". *)
diff --git a/test-suite/bugs/closed/3481.v b/test-suite/bugs/closed/3481.v
index 89d476dc..38f03b16 100644
--- a/test-suite/bugs/closed/3481.v
+++ b/test-suite/bugs/closed/3481.v
@@ -3,7 +3,7 @@ Set Implicit Arguments.
Require Import Logic.
Module NonPrim.
-Local Set Record Elimination Schemes.
+Local Set Nonrecursive Elimination Schemes.
Record prodwithlet (A B : Type) : Type :=
pair' { fst : A; fst' := fst; snd : B }.
@@ -21,7 +21,7 @@ End NonPrim.
Global Set Universe Polymorphism.
Global Set Asymmetric Patterns.
-Local Set Record Elimination Schemes.
+Local Set Nonrecursive Elimination Schemes.
Local Set Primitive Projections.
Record prod (A B : Type) : Type :=
diff --git a/test-suite/bugs/closed/3482.v b/test-suite/bugs/closed/3482.v
index 34a5e73d..87fd2723 100644
--- a/test-suite/bugs/closed/3482.v
+++ b/test-suite/bugs/closed/3482.v
@@ -8,4 +8,4 @@ Check foo _. (* Toplevel input, characters 6-11:
Error: Illegal application (Non-functional construction):
The expression "foo" of type "True"
cannot be applied to the term
- "?36" : "?35" *) \ No newline at end of file
+ "?36" : "?35" *)
diff --git a/test-suite/bugs/closed/3484.v b/test-suite/bugs/closed/3484.v
index dc88a332..a0e15730 100644
--- a/test-suite/bugs/closed/3484.v
+++ b/test-suite/bugs/closed/3484.v
@@ -28,4 +28,4 @@ T : Type
H : sigT T (fun g : T => paths g g)
x : T
Unable to unify "paths (@projT1 ?24 ?23 ?25) (@projT1 ?24 ?23 ?26)" with
- "paths (projT1 H) (projT1 {| projT1 := x; projT2 := idpath |})". *) \ No newline at end of file
+ "paths (projT1 H) (projT1 {| projT1 := x; projT2 := idpath |})". *)
diff --git a/test-suite/bugs/closed/3513.v b/test-suite/bugs/closed/3513.v
index 9ed0926a..1f0f3b0d 100644
--- a/test-suite/bugs/closed/3513.v
+++ b/test-suite/bugs/closed/3513.v
@@ -69,26 +69,6 @@ Goal forall (T : Type) (O0 : T -> OPred) (O1 : T -> PointedOPred)
refine (P _ _)
end; unfold Basics.flip.
Focus 2.
- Set Typeclasses Debug.
- Set Typeclasses Legacy Resolution.
- apply reflexivity.
- (* Debug: 1.1: apply @IsPointed_catOP on
-(IsPointed (exists x0 : Actions, (catOP ?Goal O2 : OPred) x0))
-Debug: 1.1.1.1: apply OPred_inhabited on (IsPointed (exists x0 : Actions, ?Goal x0))
-Debug: 1.1.2.1: apply OPred_inhabited on (IsPointed (exists x : Actions, O2 x))
-Debug: 2.1: apply @Equivalence_Reflexive on (Reflexive lentails)
-Debug: 2.1.1: no match for (Equivalence lentails) , 5 possibilities
-Debug: Backtracking after apply @Equivalence_Reflexive
-Debug: 2.2: apply @PreOrder_Reflexive on (Reflexive lentails)
-Debug: 2.2.1.1: apply @lentailsPre on (PreOrder lentails)
-Debug: 2.2.1.1.1.1: apply ILFun_ILogic on (ILogic OPred)
-*)
- Undo. Unset Typeclasses Legacy Resolution.
- Test Typeclasses Unique Solutions.
- Test Typeclasses Unique Instances.
- Show Existentials.
- Set Typeclasses Debug Verbosity 2.
- Set Printing All.
(* As in 8.5, allow a shelved subgoal to remain *)
apply reflexivity.
- \ No newline at end of file
+
diff --git a/test-suite/bugs/closed/3520.v b/test-suite/bugs/closed/3520.v
index c981207e..ea122e52 100644
--- a/test-suite/bugs/closed/3520.v
+++ b/test-suite/bugs/closed/3520.v
@@ -3,7 +3,7 @@ Set Primitive Projections.
Record foo (A : Type) :=
{ bar : Type ; baz := Set; bad : baz = bar }.
-Set Record Elimination Schemes.
+Set Nonrecursive Elimination Schemes.
Record notprim : Prop :=
{ irrel : True; relevant : nat }.
diff --git a/test-suite/bugs/closed/3531.v b/test-suite/bugs/closed/3531.v
index 764a7334..3502b4f5 100644
--- a/test-suite/bugs/closed/3531.v
+++ b/test-suite/bugs/closed/3531.v
@@ -51,4 +51,4 @@ Goal forall b, (exists e1 e2 e3,
admit.
admit.
Show Universes.
-Time Qed. \ No newline at end of file
+Time Qed.
diff --git a/test-suite/bugs/closed/3539.v b/test-suite/bugs/closed/3539.v
index d258bb31..b0c4b237 100644
--- a/test-suite/bugs/closed/3539.v
+++ b/test-suite/bugs/closed/3539.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 11678 lines to 11330 lines, then from 10721 lines to 9544 lines, then from 9549 lines to 794 lines, then from 810 lines to 785 lines, then from 628 lines to 246 lines, then from 220 lines to 89 lines, then from 80 lines to 47 lines *)
(* coqc version trunk (August 2014) compiled on Aug 22 2014 4:17:28 with OCaml 4.01.0
coqtop version cagnode17:/afs/csail.mit.edu/u/j/jgross/coq-trunk,trunk (a67cc6941434124465f20b14a1256f2ede31a60e) *)
diff --git a/test-suite/bugs/closed/3559.v b/test-suite/bugs/closed/3559.v
index da12b686..5210b270 100644
--- a/test-suite/bugs/closed/3559.v
+++ b/test-suite/bugs/closed/3559.v
@@ -65,6 +65,7 @@ Axiom path_iff_hprop_uncurried : forall `{IsHProp A, IsHProp B}, (A <-> B) -> A
= B.
Inductive V : Type@{U'} := | set {A : Type@{U}} (f : A -> V) : V.
Axiom is0trunc_V : IsTrunc (trunc_S (trunc_S minus_two)) V.
+Existing Instance is0trunc_V.
Axiom bisimulation : V@{U' U} -> V@{U' U} -> hProp@{U'}.
Axiom bisimulation_refl : forall (v : V), bisimulation v v.
Axiom bisimulation_eq : forall (u v : V), bisimulation u v -> u = v.
diff --git a/test-suite/bugs/closed/3560.v b/test-suite/bugs/closed/3560.v
index 65ce4fb6..a740675f 100644
--- a/test-suite/bugs/closed/3560.v
+++ b/test-suite/bugs/closed/3560.v
@@ -12,4 +12,4 @@ Goal forall (A B : Type) (C : Type), Equiv (A -> B -> C) (A * B -> C).
Proof.
intros.
exists (fun u => fun x => u (fst x) (snd x)).
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/closed/3561.v b/test-suite/bugs/closed/3561.v
index f6cbc929..ef4422ee 100644
--- a/test-suite/bugs/closed/3561.v
+++ b/test-suite/bugs/closed/3561.v
@@ -21,4 +21,4 @@ Goal forall (H0 H2 : Type) x p,
intros.
match goal with
| [ |- context[x (?f _)] ] => set(foo':=f)
- end. \ No newline at end of file
+ end.
diff --git a/test-suite/bugs/closed/3567.v b/test-suite/bugs/closed/3567.v
index cb16b3ae..00c9c054 100644
--- a/test-suite/bugs/closed/3567.v
+++ b/test-suite/bugs/closed/3567.v
@@ -65,4 +65,4 @@ ap (path_prod_uncurried z0 z')
which is ill-typed.
Reason is: Pattern-matching expression on an object of inductive type prod
has invalid information.
- *) \ No newline at end of file
+ *)
diff --git a/test-suite/bugs/closed/3584.v b/test-suite/bugs/closed/3584.v
index 3d4660b4..37fe4637 100644
--- a/test-suite/bugs/closed/3584.v
+++ b/test-suite/bugs/closed/3584.v
@@ -13,4 +13,4 @@ Definition sum_of_sigT A B (x : sigT (fun b : bool => if b then A else B))
| existT _ false b => inr b
end. (* Toplevel input, characters 0-182:
Error: Pattern-matching expression on an object of inductive type sigT
-has invalid information. *) \ No newline at end of file
+has invalid information. *)
diff --git a/test-suite/bugs/closed/3590.v b/test-suite/bugs/closed/3590.v
index 3ef9270d..9fded85a 100644
--- a/test-suite/bugs/closed/3590.v
+++ b/test-suite/bugs/closed/3590.v
@@ -9,4 +9,4 @@ Qed.
(* Toplevel input, characters 20-58:
Error: Failed to get enough information from the left-hand side to type the
-right-hand side. *) \ No newline at end of file
+right-hand side. *)
diff --git a/test-suite/bugs/closed/3594.v b/test-suite/bugs/closed/3594.v
index d1aae7b4..1f86f4bd 100644
--- a/test-suite/bugs/closed/3594.v
+++ b/test-suite/bugs/closed/3594.v
@@ -48,4 +48,4 @@ while it is expected to have type
object := opposite D;
morphism := fun s d : opposite D => morphism (opposite D) d s |}"
and "opposite D").
- *) \ No newline at end of file
+ *)
diff --git a/test-suite/bugs/closed/3596.v b/test-suite/bugs/closed/3596.v
index 49dd7be5..1ee9a5d8 100644
--- a/test-suite/bugs/closed/3596.v
+++ b/test-suite/bugs/closed/3596.v
@@ -16,4 +16,4 @@ Goal forall f b, Bar b = Bar b -> Foo f = Foo f.
Fail progress unfold Bar. (* success *)
Fail progress unfold Foo. (* failed to progress *)
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/3612.v b/test-suite/bugs/closed/3612.v
index a5476850..33e5d532 100644
--- a/test-suite/bugs/closed/3612.v
+++ b/test-suite/bugs/closed/3612.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter" "-nois") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter" "-nois") -*- *)
(* File reduced by coq-bug-finder from original input, then from 3595 lines to 3518 lines, then from 3133 lines to 2950 lines, then from 2911 lines to 415 lines, then from 431 lines to 407 \
lines, then from 421 lines to 428 lines, then from 444 lines to 429 lines, then from 434 lines to 66 lines, then from 163 lines to 48 lines *)
(* coqc version trunk (September 2014) compiled on Sep 11 2014 14:48:8 with OCaml 4.01.0
@@ -38,7 +38,9 @@ Axiom path_path_sigma : forall {A : Type} (P : A -> Type) (u v : sigT P)
(s : transport (fun x => transport P x u.2 = v.2) r p..2 = q..2),
p = q.
-Declare ML Module "coretactics".
+Declare ML Module "ltac_plugin".
+
+Set Default Proof Mode "Classic".
Goal forall (A : Type) (B : forall _ : A, Type) (x : @sigT A (fun x : A => B x))
(xx : @paths (@sigT A (fun x0 : A => B x0)) x x),
diff --git a/test-suite/bugs/closed/3618.v b/test-suite/bugs/closed/3618.v
index dc560ad5..674b4cc2 100644
--- a/test-suite/bugs/closed/3618.v
+++ b/test-suite/bugs/closed/3618.v
@@ -100,4 +100,4 @@ Hint Mode IsEquiv - - + : typeclass_instances.
Fail Definition equiv_O_rectnd {fs : Funext} {subU : ReflectiveSubuniverse}
(P Q : Type) {Q_inO : inO_internal Q}
-: IsEquiv (fun f : O P -> P => compose f (O_unit P)) := _. \ No newline at end of file
+: IsEquiv (fun f : O P -> P => compose f (O_unit P)) := _.
diff --git a/test-suite/bugs/closed/3624.v b/test-suite/bugs/closed/3624.v
index a05d5eb2..024243cf 100644
--- a/test-suite/bugs/closed/3624.v
+++ b/test-suite/bugs/closed/3624.v
@@ -8,4 +8,4 @@ Module Prim.
Set Primitive Projections.
Class foo (m : Set) := { pf : m = m }.
Notation pf' m := (pf (m:=m)). (* Wrong argument name: m. *)
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3633.v b/test-suite/bugs/closed/3633.v
index 6a952377..52bb3072 100644
--- a/test-suite/bugs/closed/3633.v
+++ b/test-suite/bugs/closed/3633.v
@@ -7,4 +7,4 @@ Proof.
(* Ensure the constraints are solved independently, otherwise a frozen ?A
makes a search for Contr ?A fail when finishing to apply (fun x => x) *)
apply (fun x => x), center.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/3638.v b/test-suite/bugs/closed/3638.v
index 70144174..5441fbed 100644
--- a/test-suite/bugs/closed/3638.v
+++ b/test-suite/bugs/closed/3638.v
@@ -22,4 +22,4 @@ Goal forall (A B : Type) (x : O A * O B) (x0 : B),
(* Toplevel input, characters 15-114:
-Anomaly: Bad recursive type. Please report. *) \ No newline at end of file
+Anomaly: Bad recursive type. Please report. *)
diff --git a/test-suite/bugs/closed/3640.v b/test-suite/bugs/closed/3640.v
index bdbfbb15..5dff98ba 100644
--- a/test-suite/bugs/closed/3640.v
+++ b/test-suite/bugs/closed/3640.v
@@ -28,4 +28,4 @@ Proof.
simpl in *.
Fail match type of H with
| _ = negb ?T => unify T (f.1 true); fail 1 "still has f.1 true"
- end. (* Error: Tactic failure: still has f.1 true. *) \ No newline at end of file
+ end. (* Error: Tactic failure: still has f.1 true. *)
diff --git a/test-suite/bugs/closed/3641.v b/test-suite/bugs/closed/3641.v
index f47f64ea..730ab3f4 100644
--- a/test-suite/bugs/closed/3641.v
+++ b/test-suite/bugs/closed/3641.v
@@ -18,4 +18,4 @@ Goal forall (A B : Type) (x : O A * O B) (x0 : B),
match goal with
| [ |- context[?e] ] => is_evar e; let e' := fresh "e'" in pose (e' := e)
end.
- Fail change ?g with e'. (* Stack overflow *) \ No newline at end of file
+ Fail change ?g with e'. (* Stack overflow *)
diff --git a/test-suite/bugs/closed/3648.v b/test-suite/bugs/closed/3648.v
index ba6006ed..58aa1614 100644
--- a/test-suite/bugs/closed/3648.v
+++ b/test-suite/bugs/closed/3648.v
@@ -80,4 +80,4 @@ Error:
Found no subterm matching "F _1 (identity (fst x))" in the current goal. *)
rewrite identity_of. (* Toplevel input, characters 15-34:
Error:
-Found no subterm matching "morphism_of ?202 (identity ?203)" in the current goal. *) \ No newline at end of file
+Found no subterm matching "morphism_of ?202 (identity ?203)" in the current goal. *)
diff --git a/test-suite/bugs/closed/3649.v b/test-suite/bugs/closed/3649.v
index fc4c171e..a664a1ef 100644
--- a/test-suite/bugs/closed/3649.v
+++ b/test-suite/bugs/closed/3649.v
@@ -1,8 +1,9 @@
-(* -*- coq-prog-args: ("-emacs" "-nois") -*- *)
+(* -*- coq-prog-args: ("-nois") -*- *)
(* File reduced by coq-bug-finder from original input, then from 9518 lines to 404 lines, then from 410 lines to 208 lines, then from 162 lines to 77 lines *)
(* coqc version trunk (September 2014) compiled on Sep 18 2014 21:0:5 with OCaml 4.01.0
coqtop version cagnode16:/afs/csail.mit.edu/u/j/jgross/coq-trunk,trunk (07e4438bd758c2ced8caf09a6961ccd77d84e42b) *)
-Declare ML Module "coretactics".
+Declare ML Module "ltac_plugin".
+Set Default Proof Mode "Classic".
Reserved Notation "x -> y" (at level 99, right associativity, y at level 200).
Reserved Notation "x = y" (at level 70, no associativity).
Delimit Scope type_scope with type.
@@ -12,7 +13,6 @@ Axiom admit : forall {T}, T.
Notation "A -> B" := (forall (_ : A), B) : type_scope.
Reserved Infix "o" (at level 40, left associativity).
Inductive paths {A : Type} (a : A) : A -> Type := idpath : paths a a where "x = y" := (@paths _ x y) : type_scope.
-Ltac constr_eq a b := let test := constr:(@idpath _ _ : a = b) in idtac.
Global Set Primitive Projections.
Delimit Scope morphism_scope with morphism.
Record PreCategory :=
diff --git a/test-suite/bugs/closed/3658.v b/test-suite/bugs/closed/3658.v
index 622c3c94..74f4e82d 100644
--- a/test-suite/bugs/closed/3658.v
+++ b/test-suite/bugs/closed/3658.v
@@ -72,4 +72,4 @@ Module Prim.
end. (* Error: Tactic failure: bad H1. *)
admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3661.v b/test-suite/bugs/closed/3661.v
index fdca49bc..1f13ffcf 100644
--- a/test-suite/bugs/closed/3661.v
+++ b/test-suite/bugs/closed/3661.v
@@ -85,4 +85,4 @@ Goal forall (x3 x9 : PreCategory) (x12 f0 : Functor x9 x3)
(@morphism_inverse _ _ _
(@morphism_isomorphic (functor_category x9 x3) f0 x12 x35) _) x37)
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/3662.v b/test-suite/bugs/closed/3662.v
index bd53389b..b8754bce 100644
--- a/test-suite/bugs/closed/3662.v
+++ b/test-suite/bugs/closed/3662.v
@@ -1,6 +1,6 @@
Set Primitive Projections.
Set Implicit Arguments.
-Set Record Elimination Schemes.
+Set Nonrecursive Elimination Schemes.
Record prod A B := pair { fst : A ; snd : B }.
Definition f : Set -> Type := fun x => x.
diff --git a/test-suite/bugs/closed/3664.v b/test-suite/bugs/closed/3664.v
index 63a81b6d..cd1427a1 100644
--- a/test-suite/bugs/closed/3664.v
+++ b/test-suite/bugs/closed/3664.v
@@ -21,4 +21,4 @@ Module Prim.
Fail progress cbn. (* [cbn] succeeds incorrectly, giving [d x] *)
admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3666.v b/test-suite/bugs/closed/3666.v
index e69ec109..c7bc2f22 100644
--- a/test-suite/bugs/closed/3666.v
+++ b/test-suite/bugs/closed/3666.v
@@ -48,4 +48,4 @@ H' : H_f a (h c) = H_g b (h c)
Unable to unify "hproptype (H_f a (h c))" with "?T (H_f a (h c))".
*)
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3668.v b/test-suite/bugs/closed/3668.v
index da01ed00..1add3dba 100644
--- a/test-suite/bugs/closed/3668.v
+++ b/test-suite/bugs/closed/3668.v
@@ -51,4 +51,4 @@ Module Prim.
end. (* Tactic failure: bad *)
all:admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3672.v b/test-suite/bugs/closed/3672.v
index 283be495..b355e7e9 100644
--- a/test-suite/bugs/closed/3672.v
+++ b/test-suite/bugs/closed/3672.v
@@ -24,4 +24,4 @@ Record Ar3 C (A:AT) :=
; id3 : forall X, ar3 X X }.
(* The command has indeed failed with message:
=> Anomaly: Bad recursive type. Please report.
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/3690.v b/test-suite/bugs/closed/3690.v
index fd9640b8..fa30132a 100644
--- a/test-suite/bugs/closed/3690.v
+++ b/test-suite/bugs/closed/3690.v
@@ -3,49 +3,44 @@ Set Printing Universes.
Set Universe Polymorphism.
Definition foo (a := Type) (b := Type) (c := Type) := Type.
Print foo.
-(* foo =
-let a := Type@{Top.1} in
-let b := Type@{Top.2} in let c := Type@{Top.3} in Type@{Top.4}
- : Type@{Top.4+1}
-(* Top.1
- Top.2
- Top.3
- Top.4 |= *) *)
-Check @foo. (* foo@{Top.5 Top.6 Top.7
-Top.8}
- : Type@{Top.8+1}
-(* Top.5
- Top.6
- Top.7
- Top.8 |= *) *)
+(* foo@{Top.2 Top.3 Top.5 Top.6 Top.8 Top.9 Top.10} =
+let a := Type@{Top.2} in let b := Type@{Top.5} in let c := Type@{Top.8} in Type@{Top.10}
+ : Type@{Top.10+1}
+(* Top.2 Top.3 Top.5 Top.6 Top.8 Top.9 Top.10 |= Top.2 < Top.3
+ Top.5 < Top.6
+ Top.8 < Top.9
+ *)
+ *)
+Check @foo. (* foo@{Top.11 Top.12 Top.13 Top.14 Top.15 Top.16
+Top.17}
+ : Type@{Top.17+1}
+(* Top.11 Top.12 Top.13 Top.14 Top.15 Top.16 Top.17 |= Top.11 < Top.12
+ Top.13 < Top.14
+ Top.15 < Top.16
+ *)
+ *)
Definition bar := ltac:(let t := eval compute in foo in exact t).
-Check @bar. (* bar@{Top.13 Top.14 Top.15
-Top.16}
- : Type@{Top.16+1}
-(* Top.13
- Top.14
- Top.15
- Top.16 |= *) *)
-(* The following should fail, since [bar] should only need one universe. *)
-Check @bar@{i j}.
+Check @bar. (* bar@{Top.27}
+ : Type@{Top.27+1}
+(* Top.27 |= *) *)
+
+Check @bar@{i}.
Definition baz (a := Type) (b := Type : a) (c := Type : b) := a -> c.
Definition qux := Eval compute in baz.
-Check @qux. (* qux@{Top.24 Top.25
-Top.26}
- : Type@{max(Top.24+1, Top.26+1)}
-(* Top.24
- Top.25
- Top.26 |= Top.25 < Top.24
- Top.26 < Top.25
- *) *)
-Print qux. (* qux =
-Type@{Top.21} -> Type@{Top.23}
- : Type@{max(Top.21+1, Top.23+1)}
-(* Top.21
- Top.22
- Top.23 |= Top.22 < Top.21
- Top.23 < Top.22
- *) *)
+Check @qux. (* qux@{Top.38 Top.39 Top.40
+Top.41}
+ : Type@{max(Top.38+1, Top.41+1)}
+(* Top.38 Top.39 Top.40 Top.41 |= Top.38 < Top.39
+ Top.40 < Top.38
+ Top.41 < Top.40
+ *) *)
+Print qux. (* qux@{Top.34 Top.35 Top.36 Top.37} =
+Type@{Top.34} -> Type@{Top.37}
+ : Type@{max(Top.34+1, Top.37+1)}
+(* Top.34 Top.35 Top.36 Top.37 |= Top.34 < Top.35
+ Top.36 < Top.34
+ Top.37 < Top.36
+ *) *)
Fail Check @qux@{Set Set}.
Check @qux@{Type Type Type Type}.
(* [qux] should only need two universes *)
diff --git a/test-suite/bugs/closed/3698.v b/test-suite/bugs/closed/3698.v
index 31de8ec4..3882eee9 100644
--- a/test-suite/bugs/closed/3698.v
+++ b/test-suite/bugs/closed/3698.v
@@ -23,4 +23,4 @@ Proof.
assert (H'' : forall g : X = Y -> (issig_hSet^-1 X).1 = (issig_hSet^-1 Y).1,
g = g -> IsEquiv g) by admit.
Eval compute in (@projT1 Type IsHSet (@equiv_inv _ _ _ (equiv_isequiv _ _ issig_hSet) X)).
- Fail apply H''. (* stack overflow *) \ No newline at end of file
+ Fail apply H''. (* stack overflow *)
diff --git a/test-suite/bugs/closed/3699.v b/test-suite/bugs/closed/3699.v
index efa43252..dbb10f94 100644
--- a/test-suite/bugs/closed/3699.v
+++ b/test-suite/bugs/closed/3699.v
@@ -156,4 +156,4 @@ Module Prim.
| fail 1 "destruct should generate unfolded projections, as should [let], goal:" G ].
admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3700.v b/test-suite/bugs/closed/3700.v
index 4e226524..bac443e3 100644
--- a/test-suite/bugs/closed/3700.v
+++ b/test-suite/bugs/closed/3700.v
@@ -81,4 +81,4 @@ Goal (forall x : NonPrim.prod Set Set, match x with NonPrim.pair a b => a = a /\
and (@eq Set (@Prim.fst Set Set x) (@Prim.fst Set Set x))
(@eq Set (@Prim.snd Set Set x) (@Prim.snd Set Set x))) *)
Unset Printing All.
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/closed/3703.v b/test-suite/bugs/closed/3703.v
index 72825007..feeb04d6 100644
--- a/test-suite/bugs/closed/3703.v
+++ b/test-suite/bugs/closed/3703.v
@@ -29,4 +29,4 @@ Module Keyed.
rewrite <- H'.
admit.
Defined.
-End Keyed. \ No newline at end of file
+End Keyed.
diff --git a/test-suite/bugs/closed/3732.v b/test-suite/bugs/closed/3732.v
index 76beedf6..09f1149c 100644
--- a/test-suite/bugs/closed/3732.v
+++ b/test-suite/bugs/closed/3732.v
@@ -102,4 +102,4 @@ cannot be applied to the terms
"G0" : "list Type"
The 2nd term has type "Type@{Top.53}" which should be coercible to
"Type@{Top.12}".
- *) \ No newline at end of file
+ *)
diff --git a/test-suite/bugs/closed/3735.v b/test-suite/bugs/closed/3735.v
index a50572ac..aced9615 100644
--- a/test-suite/bugs/closed/3735.v
+++ b/test-suite/bugs/closed/3735.v
@@ -1,4 +1,4 @@
Require Import Coq.Program.Tactics.
Class Foo := { bar : Type }.
Fail Lemma foo : Foo -> bar. (* 'Command has indeed failed.' in both 8.4 and trunk *)
-Fail Program Lemma foo : Foo -> bar. \ No newline at end of file
+Fail Program Lemma foo : Foo -> bar.
diff --git a/test-suite/bugs/closed/3743.v b/test-suite/bugs/closed/3743.v
index c799d439..ca78987b 100644
--- a/test-suite/bugs/closed/3743.v
+++ b/test-suite/bugs/closed/3743.v
@@ -8,4 +8,4 @@ Add Parametric Relation A
transitivity proved by transitivity
as refine_rel.
(* Toplevel input, characters 20-118:
-Anomaly: index to an anonymous variable. Please report. *) \ No newline at end of file
+Anomaly: index to an anonymous variable. Please report. *)
diff --git a/test-suite/bugs/closed/3753.v b/test-suite/bugs/closed/3753.v
index 5bfbee94..f586438c 100644
--- a/test-suite/bugs/closed/3753.v
+++ b/test-suite/bugs/closed/3753.v
@@ -1,4 +1,4 @@
Axiom foo : Type -> Type.
Axiom bar : forall (T : Type), T -> foo T.
Arguments bar A x : rename.
-About bar. \ No newline at end of file
+About bar.
diff --git a/test-suite/bugs/closed/3782.v b/test-suite/bugs/closed/3782.v
index 2dc50c17..16b0b8b6 100644
--- a/test-suite/bugs/closed/3782.v
+++ b/test-suite/bugs/closed/3782.v
@@ -61,4 +61,4 @@ The term "e'" has type "@IsEquiv md mc e" while it is expected to have type
*)
admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3783.v b/test-suite/bugs/closed/3783.v
index e2171296..f7e2b543 100644
--- a/test-suite/bugs/closed/3783.v
+++ b/test-suite/bugs/closed/3783.v
@@ -30,4 +30,4 @@ Module Prim.
Timeout 1 cbv beta in y. (* takes around 2s. Grows with the value passed to [exp] above *)
admit.
Defined.
-End Prim. \ No newline at end of file
+End Prim.
diff --git a/test-suite/bugs/closed/3807.v b/test-suite/bugs/closed/3807.v
index 108ebf59..a6286f03 100644
--- a/test-suite/bugs/closed/3807.v
+++ b/test-suite/bugs/closed/3807.v
@@ -30,4 +30,4 @@ Axiom f@{i} : Type@{i}.
(*
*** [ f@{i} : Type@{i} ]
(* i |= *)
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/3808.v b/test-suite/bugs/closed/3808.v
index a5c84e68..ac6a8501 100644
--- a/test-suite/bugs/closed/3808.v
+++ b/test-suite/bugs/closed/3808.v
@@ -1,3 +1,3 @@
Unset Strict Universe Declaration.
Inductive Foo : (let enforce := (fun x => x) : Type@{j} -> Type@{i} in Type@{i})
- := foo : Foo. \ No newline at end of file
+ := foo : Foo.
diff --git a/test-suite/bugs/closed/3819.v b/test-suite/bugs/closed/3819.v
index 355d23a5..0b9c3183 100644
--- a/test-suite/bugs/closed/3819.v
+++ b/test-suite/bugs/closed/3819.v
@@ -6,4 +6,4 @@ Lemma test1 (X:Type) : eq (op OpType X) X.
Proof eq_refl.
Definition test2 (A:Type) : eq (op _ A) A.
-Proof eq_refl. \ No newline at end of file
+Proof eq_refl.
diff --git a/test-suite/bugs/closed/3881.v b/test-suite/bugs/closed/3881.v
index a327bbf2..7c60ddf3 100644
--- a/test-suite/bugs/closed/3881.v
+++ b/test-suite/bugs/closed/3881.v
@@ -1,4 +1,4 @@
-(* -*- coq-prog-args: ("-emacs" "-nois" "-R" "../theories" "Coq") -*- *)
+(* -*- coq-prog-args: ("-nois" "-R" "../theories" "Coq") -*- *)
(* File reduced by coq-bug-finder from original input, then from 2236 lines to 1877 lines, then from 1652 lines to 160 lines, then from 102 lines to 34 lines *)
(* coqc version trunk (December 2014) compiled on Dec 23 2014 22:6:43 with OCaml 4.01.0
coqtop version cagnode15:/afs/csail.mit.edu/u/j/jgross/coq-trunk,trunk (90ed6636dea41486ddf2cc0daead83f9f0788163) *)
@@ -32,4 +32,4 @@ Proof.
apply (@isequiv_homotopic _ _ ((g o f) o f^-1) g _
(fun b => ap g (eisretr f b))).
Qed.
- \ No newline at end of file
+
diff --git a/test-suite/bugs/closed/3886.v b/test-suite/bugs/closed/3886.v
index 2ac4abe5..b523b117 100644
--- a/test-suite/bugs/closed/3886.v
+++ b/test-suite/bugs/closed/3886.v
@@ -20,4 +20,4 @@ Obligation 1 of doubleO.
apply cheat.
Qed.
-Check doubleE. \ No newline at end of file
+Check doubleE.
diff --git a/test-suite/bugs/closed/3899.v b/test-suite/bugs/closed/3899.v
index e83166aa..7754934c 100644
--- a/test-suite/bugs/closed/3899.v
+++ b/test-suite/bugs/closed/3899.v
@@ -8,4 +8,4 @@ Fail Check fun x y : unit => eq_refl : x = y.
Record ok : Set := tt' { a : unit }.
Record nonprim : Prop := { undef : unit }.
-Record prim : Prop := { def : True }. \ No newline at end of file
+Record prim : Prop := { def : True }.
diff --git a/test-suite/bugs/closed/3923.v b/test-suite/bugs/closed/3923.v
index 0aa029e7..1d9488c6 100644
--- a/test-suite/bugs/closed/3923.v
+++ b/test-suite/bugs/closed/3923.v
@@ -1,3 +1,5 @@
+Require Coq.extraction.Extraction.
+
Module Type TRIVIAL.
Parameter t:Type.
End TRIVIAL.
@@ -31,3 +33,4 @@ Axiom empty_fieldstore : cert_fieldstore.
End MkCertRuntimeTypes.
Extraction MkCertRuntimeTypes. (* Was leading to an uncaught Not_found *)
+Extraction TestCompile MkCertRuntimeTypes.
diff --git a/test-suite/bugs/closed/3943.v b/test-suite/bugs/closed/3943.v
new file mode 100644
index 00000000..ac9c5036
--- /dev/null
+++ b/test-suite/bugs/closed/3943.v
@@ -0,0 +1,50 @@
+(* File reduced by coq-bug-finder from original input, then from 9492 lines to 119 lines *)
+(* coqc version 8.5beta1 (January 2015) compiled on Jan 18 2015 7:27:36 with OCaml 3.12.1
+ coqtop version 8.5beta1 (January 2015) *)
+
+Set Typeclasses Dependency Order.
+
+Inductive paths {A : Type} (a : A) : A -> Type :=
+ idpath : paths a a.
+Arguments idpath {A a} , [A] a.
+Notation "x = y" := (@paths _ x y) : type_scope.
+Definition ap {A B:Type} (f:A -> B) {x y:A} (p:x = y) : f x = f y
+ := match p with idpath => idpath end.
+
+Set Implicit Arguments.
+Delimit Scope morphism_scope with morphism.
+Delimit Scope category_scope with category.
+Delimit Scope object_scope with object.
+
+Record PreCategory := Build_PreCategory' {
+ object :> Type;
+ morphism : object -> object -> Type;
+ identity : forall x, morphism x x;
+ compose : forall s d d',
+ morphism d d'
+ -> morphism s d
+ -> morphism s d' }.
+Arguments identity {!C%category} / x%object : rename.
+Arguments compose {!C%category} / {s d d'}%object (m1 m2)%morphism : rename.
+
+Class IsIsomorphism {C : PreCategory} {s d} (m : morphism C s d) := {
+ morphism_inverse : morphism C d s;
+ left_inverse : compose morphism_inverse m = identity _;
+ right_inverse : compose m morphism_inverse = identity _ }.
+Arguments morphism_inverse {C s d} m {_}.
+Local Notation "m ^-1" := (morphism_inverse m) (at level 3, format "m '^-1'") : morphism_scope.
+
+Class Isomorphic {C : PreCategory} s d := {
+ morphism_isomorphic :> morphism C s d;
+ isisomorphism_isomorphic :> IsIsomorphism morphism_isomorphic }.
+Coercion morphism_isomorphic : Isomorphic >-> morphism.
+
+Variable C : PreCategory.
+Variables s d : C.
+
+Definition path_isomorphic (i j : Isomorphic s d)
+: @morphism_isomorphic _ _ _ i = @morphism_isomorphic _ _ _ j -> i = j.
+Admitted.
+
+Definition ap_morphism_inverse_path_isomorphic (i j : Isomorphic s d) p q
+: ap (fun e : Isomorphic s d => e^-1)%morphism (path_isomorphic i j p) = q.
diff --git a/test-suite/bugs/closed/3956.v b/test-suite/bugs/closed/3956.v
index c19a2d4a..4957cc74 100644
--- a/test-suite/bugs/closed/3956.v
+++ b/test-suite/bugs/closed/3956.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter"); mode: visual-line -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter"); mode: visual-line -*- *)
Set Universe Polymorphism.
Set Primitive Projections.
Close Scope nat_scope.
@@ -140,4 +140,4 @@ Module Comodality_Theory (F : Comodality).
End cip_FPHM.
End isequiv_F_prod_cmp_M.
-End Comodality_Theory. \ No newline at end of file
+End Comodality_Theory.
diff --git a/test-suite/bugs/closed/3960.v b/test-suite/bugs/closed/3960.v
index e56dcef7..35273124 100644
--- a/test-suite/bugs/closed/3960.v
+++ b/test-suite/bugs/closed/3960.v
@@ -23,4 +23,4 @@ Class myClassP (A : Type) :=
Instance myInstanceP : myClassP nat :=
{
barP := fooP
- }. \ No newline at end of file
+ }.
diff --git a/test-suite/bugs/closed/3974.v b/test-suite/bugs/closed/3974.v
index b6be1595..3d9e06b6 100644
--- a/test-suite/bugs/closed/3974.v
+++ b/test-suite/bugs/closed/3974.v
@@ -4,4 +4,4 @@ End S.
Module Type M (X : S).
Fail Module P (X : S).
(* Used to say: Anomaly: X already exists. Please report. *)
- (* Should rather say now: Error: X already exists. *) \ No newline at end of file
+ (* Should rather say now: Error: X already exists. *)
diff --git a/test-suite/bugs/closed/3975.v b/test-suite/bugs/closed/3975.v
index 95851c81..c7616b3a 100644
--- a/test-suite/bugs/closed/3975.v
+++ b/test-suite/bugs/closed/3975.v
@@ -5,4 +5,4 @@ Module M (X:S). End M.
Module Type P (X : S).
Print M.
(* Used to say: Anomaly: X already exists. Please report. *)
- (* Should rather : print something :-) *) \ No newline at end of file
+ (* Should rather : print something :-) *)
diff --git a/test-suite/bugs/closed/3998.v b/test-suite/bugs/closed/3998.v
index ced13839..e17550e9 100644
--- a/test-suite/bugs/closed/3998.v
+++ b/test-suite/bugs/closed/3998.v
@@ -21,4 +21,4 @@ Axiom ex : RecordOf _ I1FieldType.
Definition works := (fun ex' => update ex' C true) (update ex C false).
Set Typeclasses Debug.
-Definition doesnt := update (update ex C false) C true. \ No newline at end of file
+Definition doesnt := update (update ex C false) C true.
diff --git a/test-suite/bugs/closed/4031.v b/test-suite/bugs/closed/4031.v
index 2b8641eb..6c23baff 100644
--- a/test-suite/bugs/closed/4031.v
+++ b/test-suite/bugs/closed/4031.v
@@ -11,4 +11,4 @@ Proof.
change mytt with (@something _ mytt) in x.
subst x. (* Proof works if this line is removed *)
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4069.v b/test-suite/bugs/closed/4069.v
index 61527764..606c6e08 100644
--- a/test-suite/bugs/closed/4069.v
+++ b/test-suite/bugs/closed/4069.v
@@ -101,4 +101,4 @@ Variable T : Type.
Goal @eq Type T T.
congruence.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4089.v b/test-suite/bugs/closed/4089.v
index e4d76732..fc1c504f 100644
--- a/test-suite/bugs/closed/4089.v
+++ b/test-suite/bugs/closed/4089.v
@@ -1,6 +1,6 @@
Unset Strict Universe Declaration.
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from original input, then from 6522 lines to 318 lines, then from 1139 lines to 361 lines *)
(* coqc version 8.5beta1 (February 2015) compiled on Feb 23 2015 18:32:3 with OCaml 4.01.0
coqtop version cagnode15:/afs/csail.mit.edu/u/j/jgross/coq-8.5,v8.5 (ebfc19d792492417b129063fb511aa423e9d9e08) *)
diff --git a/test-suite/bugs/closed/4095.v b/test-suite/bugs/closed/4095.v
index ffd33d38..8d7dfbd4 100644
--- a/test-suite/bugs/closed/4095.v
+++ b/test-suite/bugs/closed/4095.v
@@ -84,4 +84,4 @@ O1 : T -> PointedOPred
tr : T -> T
O2 : PointedOPred
x0 : T
-H : forall x0 : T, catOP (O0 x0) (O1 (tr x0)) |-- O1 x0 *) \ No newline at end of file
+H : forall x0 : T, catOP (O0 x0) (O1 (tr x0)) |-- O1 x0 *)
diff --git a/test-suite/bugs/closed/4097.v b/test-suite/bugs/closed/4097.v
index 02aa25e0..183b860d 100644
--- a/test-suite/bugs/closed/4097.v
+++ b/test-suite/bugs/closed/4097.v
@@ -62,4 +62,4 @@ Definition path_path_sigma {A : Type} (P : A -> Type) (u v : sigT P)
(r : p..1 = q..1)
(s : transport (fun x => transport P x u.2 = v.2) r p..2 = q..2)
: p = q
- := path_path_sigma_uncurried P u v p q (r; s). \ No newline at end of file
+ := path_path_sigma_uncurried P u v p q (r; s).
diff --git a/test-suite/bugs/closed/4101.v b/test-suite/bugs/closed/4101.v
index a38b0509..75a26a06 100644
--- a/test-suite/bugs/closed/4101.v
+++ b/test-suite/bugs/closed/4101.v
@@ -16,4 +16,4 @@ Lemma sigT_obj_eq
Proof.
intros.
Set Debug Tactic Unification.
- apply path_forall. \ No newline at end of file
+ apply path_forall.
diff --git a/test-suite/bugs/closed/4120.v b/test-suite/bugs/closed/4120.v
index 00db8f7f..315dc0d2 100644
--- a/test-suite/bugs/closed/4120.v
+++ b/test-suite/bugs/closed/4120.v
@@ -2,4 +2,4 @@ Definition id {T} (x : T) := x.
Goal sigT (fun x => id x)%type.
change (fun x => ?f x) with f.
exists Type. exact Set.
-Defined. (* Error: Attempt to save a proof with shelved goals (in proof Unnamed_thm) *) \ No newline at end of file
+Defined. (* Error: Attempt to save a proof with shelved goals (in proof Unnamed_thm) *)
diff --git a/test-suite/bugs/closed/4121.v b/test-suite/bugs/closed/4121.v
index d34a2b8b..b2368467 100644
--- a/test-suite/bugs/closed/4121.v
+++ b/test-suite/bugs/closed/4121.v
@@ -1,9 +1,11 @@
Unset Strict Universe Declaration.
-(* -*- coq-prog-args: ("-emacs" "-nois") -*- *)
+(* -*- coq-prog-args: ("-nois") -*- *)
(* File reduced by coq-bug-finder from original input, then from 830 lines to 47 lines, then from 25 lines to 11 lines *)
(* coqc version 8.5beta1 (March 2015) compiled on Mar 11 2015 18:51:36 with OCaml 4.01.0
coqtop version cagnode15:/afs/csail.mit.edu/u/j/jgross/coq-8.5,v8.5 (8dbfee5c5f897af8186cb1bdfb04fd4f88eca677) *)
+Declare ML Module "ltac_plugin".
+
Set Universe Polymorphism.
Class Contr_internal (A : Type) := BuildContr { center : A }.
Arguments center A {_}.
@@ -13,4 +15,4 @@ Definition contr_paths_contr0 {A} `{Contr A} : Contr A := {| center := center A
Instance contr_paths_contr1 {A} `{Contr A} : Contr A := {| center := center A |}.
Check @contr_paths_contr0@{i}.
Check @contr_paths_contr1@{i}. (* Error: Universe instance should have length 2 *)
-(** It should have length 1, just like contr_paths_contr0 *) \ No newline at end of file
+(** It should have length 1, just like contr_paths_contr0 *)
diff --git a/test-suite/bugs/closed/4132.v b/test-suite/bugs/closed/4132.v
new file mode 100644
index 00000000..806ffb77
--- /dev/null
+++ b/test-suite/bugs/closed/4132.v
@@ -0,0 +1,31 @@
+
+Require Import ZArith Omega.
+Open Scope Z_scope.
+
+(** bug 4132: omega was using "simpl" either on whole equations, or on
+ delimited but wrong spots. This was leading to unexpected reductions
+ when one atom (here [b]) is an evaluable reference instead of a variable. *)
+
+Lemma foo
+ (x y x' zxy zxy' z : Z)
+ (b := 5)
+ (Ry : - b <= y < b)
+ (Bx : x' <= b)
+ (H : - zxy' <= zxy)
+ (H' : zxy' <= x') : - b <= zxy.
+Proof.
+omega. (* was: Uncaught exception Invalid_argument("index out of bounds"). *)
+Qed.
+
+Lemma foo2 x y (b := 5) (H1 : x <= y) (H2 : y <= b) : x <= b.
+omega. (* Pierre L: according to a comment of bug report #4132,
+ this might have triggered "index out of bounds" in the past,
+ but I never managed to reproduce that in any version,
+ even before my fix. *)
+Qed.
+
+Lemma foo3 x y (b := 0) (H1 : x <= y) (H2 : y <= b) : x <= b.
+omega. (* Pierre L: according to a comment of bug report #4132,
+ this might have triggered "Failure(occurence 2)" in the past,
+ but I never managed to reproduce that. *)
+Qed.
diff --git a/test-suite/bugs/closed/4151.v b/test-suite/bugs/closed/4151.v
index fec64555..fc0b58cf 100644
--- a/test-suite/bugs/closed/4151.v
+++ b/test-suite/bugs/closed/4151.v
@@ -400,4 +400,4 @@ Section sound.
Undo.
assumption.
Undo.
- eassumption. (* no applicable tactic *) \ No newline at end of file
+ eassumption. (* no applicable tactic *)
diff --git a/test-suite/bugs/closed/4161.v b/test-suite/bugs/closed/4161.v
index aa2b189b..d2003ab1 100644
--- a/test-suite/bugs/closed/4161.v
+++ b/test-suite/bugs/closed/4161.v
@@ -24,4 +24,4 @@ Inductive t : Type -> Type :=
Fixpoint test {A : Type} (x : t A) : t (A + unit) :=
match x in t A with
| Just B x => @test B x
- end. \ No newline at end of file
+ end.
diff --git a/test-suite/bugs/closed/4202.v b/test-suite/bugs/closed/4202.v
new file mode 100644
index 00000000..522a3604
--- /dev/null
+++ b/test-suite/bugs/closed/4202.v
@@ -0,0 +1,10 @@
+Parameter g : nat -> Prop.
+Axiom a : forall n, g (S n).
+Lemma foo (H : True) : exists n, g n /\ g n.
+eexists.
+clear H.
+split.
+simple apply a.
+(* goal is "g (S ?Goal0@ {H:=H})" while H has long ceased to exist *)
+simpl.
+Abort.
diff --git a/test-suite/bugs/closed/4203.v b/test-suite/bugs/closed/4203.v
index 076a3c3d..eb6867a0 100644
--- a/test-suite/bugs/closed/4203.v
+++ b/test-suite/bugs/closed/4203.v
@@ -16,4 +16,4 @@ Definition t' := Eval vm_compute in constant_ok nat_ops nat_ops_ok.
Definition t'' := Eval native_compute in constant_ok nat_ops nat_ops_ok.
Check (eq_refl t : t = t').
-Check (eq_refl t : t = t''). \ No newline at end of file
+Check (eq_refl t : t = t'').
diff --git a/test-suite/bugs/closed/4214.v b/test-suite/bugs/closed/4214.v
index d684e8cf..2e620fce 100644
--- a/test-suite/bugs/closed/4214.v
+++ b/test-suite/bugs/closed/4214.v
@@ -3,4 +3,4 @@ Goal forall A (a b c : A), b = a -> b = c -> a = c.
intros.
subst.
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4250.v b/test-suite/bugs/closed/4250.v
new file mode 100644
index 00000000..f5d0d1a5
--- /dev/null
+++ b/test-suite/bugs/closed/4250.v
@@ -0,0 +1,11 @@
+Require Import FunInd.
+Require Vector.
+Generalizable All Variables.
+
+Definition f `{n:nat , u:Vector.t A n} := n.
+
+Function f2 {A:Type} {n:nat} {v:Vector.t A n} : nat := n.
+
+(* fails with "The reference A was not found in the current environment." *)
+Function f3 `{n:nat , u:Vector.t A n} := u.
+Check R_f3_complete.
diff --git a/test-suite/bugs/closed/4251.v b/test-suite/bugs/closed/4251.v
index 66343d66..f112e7b4 100644
--- a/test-suite/bugs/closed/4251.v
+++ b/test-suite/bugs/closed/4251.v
@@ -14,4 +14,4 @@ Check array Type.
Check fun A : Type => Ref A.
Definition abs_val (a : Type) :=
- bind (ref a) (fun r : array Type => array_make tt). \ No newline at end of file
+ bind (ref a) (fun r : array Type => array_make tt).
diff --git a/test-suite/bugs/closed/4273.v b/test-suite/bugs/closed/4273.v
index 591ea4b5..401e8664 100644
--- a/test-suite/bugs/closed/4273.v
+++ b/test-suite/bugs/closed/4273.v
@@ -6,4 +6,4 @@ Theorem onefiber' (q : total2 (fun y => y = 0)) : True.
Proof. assert (foo:=pr2 _ q). simpl in foo.
destruct foo. (* Error: q is used in conclusion. *) exact I. Qed.
-Print onefiber'. \ No newline at end of file
+Print onefiber'.
diff --git a/test-suite/bugs/closed/4276.v b/test-suite/bugs/closed/4276.v
index ba82e6c3..ea9cbb21 100644
--- a/test-suite/bugs/closed/4276.v
+++ b/test-suite/bugs/closed/4276.v
@@ -8,4 +8,4 @@ Definition bad' : True := mybox.(unwrap _ _).
Fail Definition bad : False := unwrap _ _ mybox.
-(* Closed under the global context *) \ No newline at end of file
+(* Closed under the global context *)
diff --git a/test-suite/bugs/closed/4287.v b/test-suite/bugs/closed/4287.v
index 43c9b512..757b71b2 100644
--- a/test-suite/bugs/closed/4287.v
+++ b/test-suite/bugs/closed/4287.v
@@ -120,4 +120,4 @@ Definition setle (B : Type@{i}) :=
Fail Check @setlt@{j Prop}.
Fail Definition foo := @setle@{j Prop}.
Check setlt@{Set i}.
-Check setlt@{Set j}. \ No newline at end of file
+Check setlt@{Set j}.
diff --git a/test-suite/bugs/closed/4293.v b/test-suite/bugs/closed/4293.v
index 3671c931..21d333fa 100644
--- a/test-suite/bugs/closed/4293.v
+++ b/test-suite/bugs/closed/4293.v
@@ -4,4 +4,4 @@ End Foo.
Module M : Foo.
Definition T := let X := Type in Type.
-End M. \ No newline at end of file
+End M.
diff --git a/test-suite/bugs/closed/4299.v b/test-suite/bugs/closed/4299.v
index 955c3017..a1daa193 100644
--- a/test-suite/bugs/closed/4299.v
+++ b/test-suite/bugs/closed/4299.v
@@ -9,4 +9,4 @@ End Foo.
Module M : Foo with Definition U := Type : Type.
Definition U := let X := Type in Type.
Definition eq : Type = U := eq_refl.
-Fail End M. \ No newline at end of file
+Fail End M.
diff --git a/test-suite/bugs/closed/4306.v b/test-suite/bugs/closed/4306.v
new file mode 100644
index 00000000..28f028ad
--- /dev/null
+++ b/test-suite/bugs/closed/4306.v
@@ -0,0 +1,32 @@
+Require Import List.
+Require Import Arith.
+Require Import Recdef.
+Require Import Omega.
+
+Function foo (xys : (list nat * list nat)) {measure (fun xys => length (fst xys) + length (snd xys))} : list nat :=
+ match xys with
+ | (nil, _) => snd xys
+ | (_, nil) => fst xys
+ | (x :: xs', y :: ys') => match Compare_dec.nat_compare x y with
+ | Lt => x :: foo (xs', y :: ys')
+ | Eq => x :: foo (xs', ys')
+ | Gt => y :: foo (x :: xs', ys')
+ end
+ end.
+Proof.
+ intros; simpl; omega.
+ intros; simpl; omega.
+ intros; simpl; omega.
+Qed.
+
+Function bar (xys : (list nat * list nat)) {measure (fun xys => length (fst xys) + length (snd xys))} : list nat :=
+ let (xs, ys) := xys in
+ match (xs, ys) with
+ | (nil, _) => ys
+ | (_, nil) => xs
+ | (x :: xs', y :: ys') => match Compare_dec.nat_compare x y with
+ | Lt => x :: foo (xs', ys)
+ | Eq => x :: foo (xs', ys')
+ | Gt => y :: foo (xs, ys')
+ end
+ end.
diff --git a/test-suite/bugs/closed/4328.v b/test-suite/bugs/closed/4328.v
index 8e1bb310..b40b3a48 100644
--- a/test-suite/bugs/closed/4328.v
+++ b/test-suite/bugs/closed/4328.v
@@ -3,4 +3,4 @@ Axiom pi : forall (P : Prop) (p : P), Prop.
Definition test1 A (x : _) := pi A x. (* success *)
Fail Definition test2 A (x : A) := pi A x. (* failure ??? *)
Fail Definition test3 A (x : A) (_ : M A) := pi A x. (* failure *)
-Fail Definition test4 A (_ : M A) (x : A) := pi A x. (* success ??? *) \ No newline at end of file
+Fail Definition test4 A (_ : M A) (x : A) := pi A x. (* success ??? *)
diff --git a/test-suite/bugs/closed/4354.v b/test-suite/bugs/closed/4354.v
index e71ddaf7..c55b4cf0 100644
--- a/test-suite/bugs/closed/4354.v
+++ b/test-suite/bugs/closed/4354.v
@@ -8,4 +8,4 @@ Proof.
auto using closed_increment. Show Universes.
Qed.
(* also fails with -nois, so the content of the hint database does not matter
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/4366.v b/test-suite/bugs/closed/4366.v
index 6a5e9a40..403c2d20 100644
--- a/test-suite/bugs/closed/4366.v
+++ b/test-suite/bugs/closed/4366.v
@@ -10,6 +10,6 @@ end.
Goal True.
Proof.
pose (v := stupid 24).
-Timeout 2 vm_compute in v.
+Timeout 4 vm_compute in v.
exact I.
Qed.
diff --git a/test-suite/bugs/closed/4375.v b/test-suite/bugs/closed/4375.v
index 71e3a751..468bade1 100644
--- a/test-suite/bugs/closed/4375.v
+++ b/test-suite/bugs/closed/4375.v
@@ -104,4 +104,4 @@ with cb@{i} (t : Type@{i}) : foo@{i} t :=
Print ca.
Print cb.
- \ No newline at end of file
+
diff --git a/test-suite/bugs/closed/4390.v b/test-suite/bugs/closed/4390.v
index a96a1370..c069b2d9 100644
--- a/test-suite/bugs/closed/4390.v
+++ b/test-suite/bugs/closed/4390.v
@@ -8,16 +8,16 @@ Universe i.
End foo.
End M.
-Check Type@{i}.
+Check Type@{M.i}.
(* Succeeds *)
Fail Check Type@{j}.
(* Error: Undeclared universe: j *)
-Definition foo@{j} : Type@{i} := Type@{j}.
+Definition foo@{j} : Type@{M.i} := Type@{j}.
(* ok *)
End A.
-
+Import A. Import M.
Set Universe Polymorphism.
Fail Universes j.
Monomorphic Universe j.
diff --git a/test-suite/bugs/closed/4394.v b/test-suite/bugs/closed/4394.v
deleted file mode 100644
index 60c93545..00000000
--- a/test-suite/bugs/closed/4394.v
+++ /dev/null
@@ -1,19 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-
-Require Import Equality List.
-Inductive Foo (I : Type -> Type) (A : Type) : Type :=
-| foo (B : Type) : A -> I B -> Foo I A.
-Definition Family := Type -> Type.
-Definition FooToo : Family -> Family := Foo.
-Definition optionize (I : Type -> Type) (A : Type) := option (I A).
-Definition bar (I : Type -> Type) (A : Type) : A -> option (I A) -> Foo (optionize I) A := foo (optionize I) A A.
-Record Rec (I : Type -> Type) := { rec : forall A : Type, A -> I A -> Foo I A }.
-Definition barRec : Rec (optionize id) := {| rec := bar id |}.
-Inductive Empty {T} : T -> Prop := .
-Theorem empty (family : Family) (a : fold_right prod unit (map (Foo family) nil)) (b : unit) :
- Empty (a, b) -> False.
-Proof.
- intro e.
- dependent induction e.
-Qed.
-
diff --git a/test-suite/bugs/closed/4400.v b/test-suite/bugs/closed/4400.v
deleted file mode 100644
index 5c23f840..00000000
--- a/test-suite/bugs/closed/4400.v
+++ /dev/null
@@ -1,19 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-require" "Coq.Compat.Coq84" "-compat" "8.4") -*- *)
-Require Import Coq.Lists.List Coq.Logic.JMeq Program.Equality.
-Set Printing Universes.
-Inductive Foo (I : Type -> Type) (A : Type) : Type :=
-| foo (B : Type) : A -> I B -> Foo I A.
-Definition Family := Type -> Type.
-Definition FooToo : Family -> Family := Foo.
-Definition optionize (I : Type -> Type) (A : Type) := option (I A).
-Definition bar (I : Type -> Type) (A : Type) : A -> option (I A) -> Foo(optionize I) A := foo (optionize I) A A.
-Record Rec (I : Type -> Type) := { rec : forall A : Type, A -> I A -> Foo I A }.
-Definition barRec : Rec (optionize id) := {| rec := bar id |}.
-Inductive Empty {T} : T -> Prop := .
-Theorem empty (family : Family) (a : fold_right prod unit (map (Foo family)
-nil)) (b : unit) :
- Empty (a, b) -> False.
-Proof.
- intro e.
- dependent induction e.
-Qed.
diff --git a/test-suite/bugs/closed/4403.v b/test-suite/bugs/closed/4403.v
new file mode 100644
index 00000000..a80f38fe
--- /dev/null
+++ b/test-suite/bugs/closed/4403.v
@@ -0,0 +1,3 @@
+(* -*- coq-prog-args: ("-type-in-type"); -*- *)
+
+Definition some_prop : Prop := Type.
diff --git a/test-suite/bugs/closed/4416.v b/test-suite/bugs/closed/4416.v
index 3189685e..62b90b42 100644
--- a/test-suite/bugs/closed/4416.v
+++ b/test-suite/bugs/closed/4416.v
@@ -1,4 +1,4 @@
Goal exists x, x.
Unset Solve Unification Constraints.
unshelve refine (ex_intro _ _ _); match goal with _ => refine (_ _) end.
-(* Error: Incorrect number of goals (expected 2 tactics). *) \ No newline at end of file
+(* Error: Incorrect number of goals (expected 2 tactics). *)
diff --git a/test-suite/bugs/closed/4433.v b/test-suite/bugs/closed/4433.v
index 9eeb8646..83c0e3f8 100644
--- a/test-suite/bugs/closed/4433.v
+++ b/test-suite/bugs/closed/4433.v
@@ -26,4 +26,4 @@ Proof.
case proof_admitted.
Unshelve.
all:constructor.
-Defined. \ No newline at end of file
+Defined.
diff --git a/test-suite/bugs/closed/4443.v b/test-suite/bugs/closed/4443.v
index 66dfa0e6..a3a8717d 100644
--- a/test-suite/bugs/closed/4443.v
+++ b/test-suite/bugs/closed/4443.v
@@ -28,4 +28,4 @@ Defined.
Set Printing Universes.
Check PROD@{i i i}.
Check PRODinj@{i j}.
-Fail Check PRODinj@{j i}. \ No newline at end of file
+Fail Check PRODinj@{j i}.
diff --git a/test-suite/bugs/closed/4450.v b/test-suite/bugs/closed/4450.v
index ecebaba8..c1fe4431 100644
--- a/test-suite/bugs/closed/4450.v
+++ b/test-suite/bugs/closed/4450.v
@@ -55,4 +55,4 @@ Proof.
eauto using foo. Show Universes.
Undo.
eauto using foop. Show Proof. Show Universes.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4456.v b/test-suite/bugs/closed/4456.v
index a32acf78..56a7b4f6 100644
--- a/test-suite/bugs/closed/4456.v
+++ b/test-suite/bugs/closed/4456.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-R" "." "Fiat" "-top" "BooleanRecognizerMin" "-R" "." "Top") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-R" "." "Fiat" "-top" "BooleanRecognizerMin" "-R" "." "Top") -*- *)
(* File reduced by coq-bug-finder from original input, then from 2475 lines to 729 lines, then from 746 lines to 658 lines, then from 675 lines to 658 lines *)
(* coqc version 8.5beta3 (November 2015) compiled on Nov 11 2015 18:23:0 with OCaml 4.01.0
coqtop version 8.5beta3 (November 2015) *)
diff --git a/test-suite/bugs/closed/4480.v b/test-suite/bugs/closed/4480.v
index 08a86330..98c05ee1 100644
--- a/test-suite/bugs/closed/4480.v
+++ b/test-suite/bugs/closed/4480.v
@@ -9,4 +9,4 @@ Admitted.
Goal True.
Fail setoid_rewrite foo.
Fail setoid_rewrite trueI.
- \ No newline at end of file
+
diff --git a/test-suite/bugs/closed/4498.v b/test-suite/bugs/closed/4498.v
index ccdb2ddd..379e46b3 100644
--- a/test-suite/bugs/closed/4498.v
+++ b/test-suite/bugs/closed/4498.v
@@ -21,4 +21,4 @@ Require Export Coq.Setoids.Setoid.
Add Parametric Morphism `{C : Category} {A B C} : (@compose _ A B C) with
signature equiv ==> equiv ==> equiv as compose_mor.
-Proof. apply comp_respects. Qed. \ No newline at end of file
+Proof. apply comp_respects. Qed.
diff --git a/test-suite/bugs/closed/4503.v b/test-suite/bugs/closed/4503.v
index f54d6433..5162f352 100644
--- a/test-suite/bugs/closed/4503.v
+++ b/test-suite/bugs/closed/4503.v
@@ -34,4 +34,4 @@ Section Embed_ILogic_Pre.
Polymorphic Universes A T.
Fail Context {A : Type@{A}} {ILA: ILogic.ILogic@{A} A}.
-End Embed_ILogic_Pre. \ No newline at end of file
+End Embed_ILogic_Pre.
diff --git a/test-suite/bugs/closed/4519.v b/test-suite/bugs/closed/4519.v
index ccbc47d2..945183fa 100644
--- a/test-suite/bugs/closed/4519.v
+++ b/test-suite/bugs/closed/4519.v
@@ -18,4 +18,4 @@ Check qux nat nat nat : Set.
Check qux nat nat Set : Set. (* Error:
The term "qux@{Top.50 Top.51} ?T ?T0 Set" has type "Type@{Top.50}" while it is
expected to have type "Set"
-(universe inconsistency: Cannot enforce Top.50 = Set because Set < Top.50). *) \ No newline at end of file
+(universe inconsistency: Cannot enforce Top.50 = Set because Set < Top.50). *)
diff --git a/test-suite/bugs/closed/4527.v b/test-suite/bugs/closed/4527.v
index 08628377..117d6523 100644
--- a/test-suite/bugs/closed/4527.v
+++ b/test-suite/bugs/closed/4527.v
@@ -1,10 +1,11 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_bad_univ_length_01") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_bad_univ_length_01") -*- *)
(* File reduced by coq-bug-finder from original input, then from 1199 lines to
430 lines, then from 444 lines to 430 lines, then from 964 lines to 255 lines,
then from 269 lines to 255 lines *)
(* coqc version 8.5 (January 2016) compiled on Jan 23 2016 16:15:22 with OCaml
4.01.0
coqtop version 8.5 (January 2016) *)
+Declare ML Module "ltac_plugin".
Inductive False := .
Axiom proof_admitted : False.
Tactic Notation "admit" := case proof_admitted.
diff --git a/test-suite/bugs/closed/4533.v b/test-suite/bugs/closed/4533.v
index ae17fb14..c3e0da11 100644
--- a/test-suite/bugs/closed/4533.v
+++ b/test-suite/bugs/closed/4533.v
@@ -1,10 +1,11 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_lex_wrong_rewrite_02") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_lex_wrong_rewrite_02") -*- *)
(* File reduced by coq-bug-finder from original input, then from 1125 lines to
346 lines, then from 360 lines to 346 lines, then from 822 lines to 271 lines,
then from 285 lines to 271 lines *)
(* coqc version 8.5 (January 2016) compiled on Jan 23 2016 16:15:22 with OCaml
4.01.0
coqtop version 8.5 (January 2016) *)
+Declare ML Module "ltac_plugin".
Inductive False := .
Axiom proof_admitted : False.
Tactic Notation "admit" := case proof_admitted.
@@ -223,4 +224,4 @@ v = _) r,
| [ |- p2 @ p0 @ p1 @ eissect (to O A) (g x) = r ] => idtac "good"
| [ |- ?G ] => fail 1 "bad" G
end.
- Fail rewrite concat_p_pp. \ No newline at end of file
+ Fail rewrite concat_p_pp.
diff --git a/test-suite/bugs/closed/4544.v b/test-suite/bugs/closed/4544.v
index da140c93..4ad53bc6 100644
--- a/test-suite/bugs/closed/4544.v
+++ b/test-suite/bugs/closed/4544.v
@@ -1,7 +1,8 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_oog_looping_rewrite_01") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-nois" "-indices-matter" "-R" "." "Top" "-top" "bug_oog_looping_rewrite_01") -*- *)
(* File reduced by coq-bug-finder from original input, then from 2553 lines to 1932 lines, then from 1946 lines to 1932 lines, then from 2467 lines to 1002 lines, then from 1016 lines to 1002 lines *)
(* coqc version 8.5 (January 2016) compiled on Jan 23 2016 16:15:22 with OCaml 4.01.0
coqtop version 8.5 (January 2016) *)
+Declare ML Module "ltac_plugin".
Inductive False := .
Axiom proof_admitted : False.
Tactic Notation "admit" := case proof_admitted.
@@ -1004,4 +1005,4 @@ Proof.
Fail Timeout 1 Time rewrite !loops_functor_group.
(* 0.004 s in 8.5rc1, 8.677 s in 8.5 *)
Timeout 1 do 3 rewrite loops_functor_group.
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/closed/4603.v b/test-suite/bugs/closed/4603.v
index e7567623..2c90044d 100644
--- a/test-suite/bugs/closed/4603.v
+++ b/test-suite/bugs/closed/4603.v
@@ -7,4 +7,4 @@ Abort.
Goal True.
Definition foo (A : Type) : Prop:= True.
set (x:=foo). split.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4616.v b/test-suite/bugs/closed/4616.v
index c862f820..d6660e35 100644
--- a/test-suite/bugs/closed/4616.v
+++ b/test-suite/bugs/closed/4616.v
@@ -1,4 +1,7 @@
+Require Coq.extraction.Extraction.
+
Set Primitive Projections.
Record Foo' := Foo { foo : Type }.
-Axiom f : forall t : Foo', foo t.
+Definition f := forall t : Foo', foo t.
Extraction f.
+Extraction TestCompile f.
diff --git a/test-suite/bugs/closed/4627.v b/test-suite/bugs/closed/4627.v
index e1206bb3..4f56e195 100644
--- a/test-suite/bugs/closed/4627.v
+++ b/test-suite/bugs/closed/4627.v
@@ -46,4 +46,4 @@ The term "predicate nat (Build_sa nat)" has type
while it is expected to have type "Type@{Top.208}"
(universe inconsistency: Cannot enforce Top.205 <=
Top.208 because Top.208 < Top.205).
-*) \ No newline at end of file
+*)
diff --git a/test-suite/bugs/closed/4656.v b/test-suite/bugs/closed/4656.v
deleted file mode 100644
index c89a86d6..00000000
--- a/test-suite/bugs/closed/4656.v
+++ /dev/null
@@ -1,4 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-Goal True.
- constructor 1.
-Qed.
diff --git a/test-suite/bugs/closed/4673.v b/test-suite/bugs/closed/4673.v
index 1ae50818..10e48db6 100644
--- a/test-suite/bugs/closed/4673.v
+++ b/test-suite/bugs/closed/4673.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-R" "." "Fiat" "-top" "BooleanRecognizerOptimized" "-R" "." "Top") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-R" "." "Fiat" "-top" "BooleanRecognizerOptimized" "-R" "." "Top") -*- *)
(* File reduced by coq-bug-finder from original input, then from 2407 lines to 22 lines, then from 528 lines to 35 lines, then from 331 lines to 42 lines, then from 56 lines to 42 lines, then from 63 lines to 46 lines, then from 60 lines to 46 lines *) (* coqc version 8.5 (February 2016) compiled on Feb 21 2016 15:26:16 with OCaml 4.02.3
coqtop version 8.5 (February 2016) *)
Axiom proof_admitted : False.
diff --git a/test-suite/bugs/closed/4679.v b/test-suite/bugs/closed/4679.v
index c94fa31a..3f41c5d6 100644
--- a/test-suite/bugs/closed/4679.v
+++ b/test-suite/bugs/closed/4679.v
@@ -15,4 +15,4 @@ Proof.
Undo.
setoid_rewrite H. (* Error: Tactic failure: setoid rewrite failed: Nothing to rewrite. *)
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4709.v b/test-suite/bugs/closed/4709.v
new file mode 100644
index 00000000..a9edcc80
--- /dev/null
+++ b/test-suite/bugs/closed/4709.v
@@ -0,0 +1,18 @@
+
+(** Bug 4709 https://coq.inria.fr/bug/4709
+ Extraction wasn't reducing primitive projections in types. *)
+
+Require Extraction.
+
+Set Primitive Projections.
+
+Record t := Foo { foo : Type }.
+Definition ty := foo (Foo nat).
+
+(* Without proper reduction of primitive projections in
+ [extract_type], the type [ty] was extracted as [Tunknown].
+ Let's check it isn't the case anymore. *)
+
+Parameter check : nat.
+Extract Constant check => "(O:ty)".
+Extraction TestCompile ty check.
diff --git a/test-suite/bugs/closed/4710.v b/test-suite/bugs/closed/4710.v
index fdc85010..e792a362 100644
--- a/test-suite/bugs/closed/4710.v
+++ b/test-suite/bugs/closed/4710.v
@@ -1,8 +1,9 @@
+Require Coq.extraction.Extraction.
+
Set Primitive Projections.
Record Foo' := Foo { foo : nat }.
Extraction foo.
Record Foo2 (a : nat) := Foo2c { foo2p : nat; foo2b : bool }.
-Extraction Language Ocaml.
Extraction foo2p.
Definition bla (x : Foo2 0) := foo2p _ x.
@@ -10,3 +11,5 @@ Extraction bla.
Definition bla' (a : nat) (x : Foo2 a) := foo2b _ x.
Extraction bla'.
+
+Extraction TestCompile foo foo2p bla bla'.
diff --git a/test-suite/bugs/closed/4717.v b/test-suite/bugs/closed/4717.v
new file mode 100644
index 00000000..1507fa4b
--- /dev/null
+++ b/test-suite/bugs/closed/4717.v
@@ -0,0 +1,37 @@
+(* Omega being smarter on recognizing nat and Z *)
+
+Require Import Omega.
+
+Definition nat' := nat.
+
+Theorem le_not_eq_lt : forall (n m:nat),
+ n <= m ->
+ n <> m :> nat' ->
+ n < m.
+Proof.
+ intros.
+ omega.
+Qed.
+
+Goal forall (x n : nat'), x = x + n - n.
+Proof.
+ intros.
+ omega.
+Qed.
+
+Require Import ZArith ROmega.
+
+Open Scope Z_scope.
+
+Definition Z' := Z.
+
+Theorem Zle_not_eq_lt : forall n m,
+ n <= m ->
+ n <> m :> Z' ->
+ n < m.
+Proof.
+ intros.
+ omega.
+ Undo.
+ romega.
+Qed.
diff --git a/test-suite/bugs/closed/4720.v b/test-suite/bugs/closed/4720.v
new file mode 100644
index 00000000..704331e7
--- /dev/null
+++ b/test-suite/bugs/closed/4720.v
@@ -0,0 +1,50 @@
+(** Bug 4720 : extraction and "with" in module type *)
+
+Module Type A.
+ Parameter t : Set.
+End A.
+
+Module A_instance <: A.
+ Definition t := nat.
+End A_instance.
+
+Module A_private : A.
+ Definition t := nat.
+End A_private.
+
+Module Type B.
+End B.
+
+Module Type C (b : B).
+ Declare Module a : A.
+End C.
+
+Module WithMod (a' : A) (b' : B) (c' : C b' with Module a := A_instance).
+End WithMod.
+
+Module WithDef (a' : A) (b' : B) (c' : C b' with Definition a.t := nat).
+End WithDef.
+
+Module WithModPriv (a' : A) (b' : B) (c' : C b' with Module a := A_private).
+End WithModPriv.
+
+(* The initial bug report was concerning the extraction of WithModPriv
+ in Coq 8.4, which was suboptimal: it was compiling, but could have been
+ turned into some faulty code since A_private and c'.a were not seen as
+ identical by the extraction.
+
+ In Coq 8.5 and 8.6, the extractions of WithMod, WithDef, WithModPriv
+ were all causing Anomaly or Assert Failure. This shoud be fixed now.
+*)
+
+Require Extraction.
+
+Recursive Extraction WithMod.
+
+Recursive Extraction WithDef.
+
+Recursive Extraction WithModPriv.
+
+(* Let's even check that all this extracted code is actually compilable: *)
+
+Extraction TestCompile WithMod WithDef WithModPriv.
diff --git a/test-suite/bugs/closed/4722.v b/test-suite/bugs/closed/4722.v
deleted file mode 100644
index f047624c..00000000
--- a/test-suite/bugs/closed/4722.v
+++ /dev/null
@@ -1 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-R" "4722" "Foo") -*- *)
diff --git a/test-suite/bugs/closed/4722/tata b/test-suite/bugs/closed/4722/tata
deleted file mode 120000
index b38e66e7..00000000
--- a/test-suite/bugs/closed/4722/tata
+++ /dev/null
@@ -1 +0,0 @@
-toto \ No newline at end of file
diff --git a/test-suite/bugs/closed/4723.v b/test-suite/bugs/closed/4723.v
index 88848121..5fb9696f 100644
--- a/test-suite/bugs/closed/4723.v
+++ b/test-suite/bugs/closed/4723.v
@@ -25,4 +25,4 @@ Program Fact kp_assoc
(x: Matrix xr xc) (y: Matrix yr yc) (z: Matrix zr zc):
kp x (kp y z) = kp (kp x y) z.
admit.
-Admitted. \ No newline at end of file
+Admitted.
diff --git a/test-suite/bugs/closed/4727.v b/test-suite/bugs/closed/4727.v
deleted file mode 100644
index 3854bbff..00000000
--- a/test-suite/bugs/closed/4727.v
+++ /dev/null
@@ -1,10 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-Goal forall (P : Set) (l : P) (P0 : Set) (w w0 : P0) (T : Type) (a : P * T) (o : P -> option P0),
- (forall (l1 l2 : P) (w1 : P0), o l1 = Some w1 -> o l2 = Some w1 -> l1 = l2) ->
- o l = Some w -> o (fst a) = Some w0 -> {w = w0} + {w <> w0} -> False.
-Proof.
- clear; intros ???????? inj H0 H1 H2.
- destruct H2; intuition subst.
- eapply inj in H1; [ | eauto ].
- progress subst. (* should succeed, used to not succeed *)
-Abort.
diff --git a/test-suite/bugs/closed/4733.v b/test-suite/bugs/closed/4733.v
deleted file mode 100644
index a6ebda61..00000000
--- a/test-suite/bugs/closed/4733.v
+++ /dev/null
@@ -1,52 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-(*Suppose a user wants to declare a new list-like notation with support for singletons in both 8.4 and 8.5. If they use*)
-Require Import Coq.Lists.List.
-Require Import Coq.Vectors.Vector.
-Import ListNotations.
-Import VectorNotations.
-Set Implicit Arguments.
-Inductive mylist T := mynil | mycons (_ : T) (_ : mylist T).
-Arguments mynil {_}, _.
-
-Delimit Scope mylist_scope with mylist.
-Bind Scope mylist_scope with mylist.
-Delimit Scope vector_scope with vector.
-
-Notation " [ ] " := mynil (format "[ ]") : mylist_scope.
-Notation " [ x ] " := (mycons x mynil) : mylist_scope.
-Notation " [ x ; .. ; y ] " := (mycons x .. (mycons y mynil) ..) : mylist_scope.
-
-(** All of these should work fine in -compat 8.4 mode, just as they do in Coq 8.4. There needs to be a way to specify notations above so that all of these [Check]s go through in both 8.4 and 8.5 *)
-Check [ ]%mylist : mylist _.
-Check [ ]%list : list _.
-Check []%vector : Vector.t _ _.
-Check [ _ ]%mylist : mylist _.
-Check [ _ ]%list : list _.
-Check [ _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%list : list _.
-Check [ _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ; _ ]%mylist : mylist _.
-
-Notation " [ x ; y ; .. ; z ] " := (mycons x (mycons y .. (mycons z mynil) ..)) : mylist_scope.
-(* Now these all work, but not so in 8.4. If we get the ability to remove notations, this section can also just be removed. *)
-Check [ ]%mylist : mylist _.
-Check [ ]%list : list _.
-Check []%vector : Vector.t _ _.
-Check [ _ ]%mylist : mylist _.
-Check [ _ ]%list : list _.
-Check [ _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%list : list _.
-Check [ _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ; _ ]%mylist : mylist _.
diff --git a/test-suite/bugs/closed/4754.v b/test-suite/bugs/closed/4754.v
index 5bb3cd1b..67d645a6 100644
--- a/test-suite/bugs/closed/4754.v
+++ b/test-suite/bugs/closed/4754.v
@@ -32,4 +32,4 @@ Proof.
pose proof (_ : (Proper (_ ==> eq ==> _) and)).
setoid_rewrite (FG _ _); [ | reflexivity.. ].
Undo.
- setoid_rewrite (FG _ eq_refl). (* Error: Tactic failure: setoid rewrite failed: Nothing to rewrite. in 8.5 *) Admitted. \ No newline at end of file
+ setoid_rewrite (FG _ eq_refl). (* Error: Tactic failure: setoid rewrite failed: Nothing to rewrite. in 8.5 *) Admitted.
diff --git a/test-suite/bugs/closed/4763.v b/test-suite/bugs/closed/4763.v
index ae8ed0e6..9613b5c2 100644
--- a/test-suite/bugs/closed/4763.v
+++ b/test-suite/bugs/closed/4763.v
@@ -10,4 +10,4 @@ Goal forall x y z, leb x y -> leb y z -> True.
=> pose proof (transitivity H H' : is_true (R x z))
end.
exact I.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4769.v b/test-suite/bugs/closed/4769.v
index d87906f3..f0c91f7b 100644
--- a/test-suite/bugs/closed/4769.v
+++ b/test-suite/bugs/closed/4769.v
@@ -1,5 +1,5 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-nois" "-R" "." "Top" "-top" "bug_hom_anom_10") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-nois" "-R" "." "Top" "-top" "bug_hom_anom_10") -*- *)
(* File reduced by coq-bug-finder from original input, then from 156 lines to 41 lines, then from 237 lines to 45 lines, then from 163 lines to 66 lines, then from 342 lines to 121 lines, then from 353 lines to 184 lines, then from 343 lines to 255 lines, then from 435 lines to 322 lines, then from 475 lines to 351 lines, then from 442 lines to 377 lines, then from 505 lines to 410 lines, then from 591 lines to 481 lines, then from 596 lines to 535 lines, then from 647 lines to 570 lines, then from 669 lines to 596 lines, then from 687 lines to 620 lines, then from 728 lines to 652 lines, then from 1384 lines to 683 lines, then from 984 lines to 707 lines, then from 1124 lines to 734 lines, then from 775 lines to 738 lines, then from 950 lines to 763 lines, then from 857 lines to 798 lines, then from 983 lines to 752 lines, then from 1598 lines to 859 lines, then from 873 lines to 859 lines, then from 875 lines to 862 lines, then from 901 lines to 863 lines, then from 1047 lines to 865 lines, then from 929 lines to 871 lines, then from 989 lines to 884 lines, then from 900 lines to 884 lines, then from 884 lines to 751 lines, then from 763 lines to 593 lines, then from 482 lines to 232 lines, then from 416 lines to 227 lines, then from 290 lines to 231 lines, then from 348 lines to 235 lines, then from 249 lines to 235 lines, then from 249 lines to 172 lines, then from 186 lines to 172 lines, then from 140 lines to 113 lines, then from 127 lines to 113 lines *) (* coqc version trunk (June 2016) compiled on Jun 2 2016 10:16:20 with OCaml 4.02.3
coqtop version trunk (June 2016) *)
@@ -91,4 +91,4 @@ Section Adjunction.
(oppositeC C) D C
(identityF (oppositeC C)) G))
}.
-End Adjunction. \ No newline at end of file
+End Adjunction.
diff --git a/test-suite/bugs/closed/4780.v b/test-suite/bugs/closed/4780.v
index 4cec4318..71a51c63 100644
--- a/test-suite/bugs/closed/4780.v
+++ b/test-suite/bugs/closed/4780.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-R" "." "Top" "-top" "bug_bad_induction_01") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-R" "." "Top" "-top" "bug_bad_induction_01") -*- *)
(* File reduced by coq-bug-finder from original input, then from 1889 lines to 144 lines, then from 158 lines to 144 lines *)
(* coqc version 8.5pl1 (April 2016) compiled on Apr 18 2016 14:48:5 with OCaml 4.02.3
coqtop version 8.5pl1 (April 2016) *)
diff --git a/test-suite/bugs/closed/4785.v b/test-suite/bugs/closed/4785.v
index c3c97d3f..0d347b26 100644
--- a/test-suite/bugs/closed/4785.v
+++ b/test-suite/bugs/closed/4785.v
@@ -1,5 +1,4 @@
Require Coq.Lists.List Coq.Vectors.Vector.
-Require Coq.Compat.Coq85.
Module A.
Import Coq.Lists.List Coq.Vectors.Vector.
@@ -21,12 +20,10 @@ Delimit Scope mylist_scope with mylist.
Bind Scope mylist_scope with mylist.
Arguments mynil {_}, _.
Arguments mycons {_} _ _.
-Notation " [] " := mynil (compat "8.5") : mylist_scope.
Notation " [ ] " := mynil (format "[ ]") : mylist_scope.
Notation " [ x ] " := (mycons x nil) : mylist_scope.
Notation " [ x ; y ; .. ; z ] " := (mycons x (mycons y .. (mycons z nil) ..)) : mylist_scope.
-Import Coq.Compat.Coq85.
Locate Module VectorNotations.
Import VectorDef.VectorNotations.
@@ -35,11 +32,3 @@ Check []%mylist : mylist _.
Check [ ]%mylist : mylist _.
Check [ ]%list : list _.
End A.
-
-Module B.
-Import Coq.Compat.Coq85.
-
-Goal True.
- idtac; []. (* Check that importing the compat file doesn't break the [ | .. | ] syntax of Ltac *)
-Abort.
-End B.
diff --git a/test-suite/bugs/closed/4785_compat_85.v b/test-suite/bugs/closed/4785_compat_85.v
deleted file mode 100644
index 9d65840a..00000000
--- a/test-suite/bugs/closed/4785_compat_85.v
+++ /dev/null
@@ -1,46 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.5") -*- *)
-Require Coq.Lists.List Coq.Vectors.Vector.
-Require Coq.Compat.Coq85.
-
-Module A.
-Import Coq.Lists.List Coq.Vectors.Vector.
-Import ListNotations.
-Check [ ]%list : list _.
-Import VectorNotations ListNotations.
-Delimit Scope vector_scope with vector.
-Check [ ]%vector : Vector.t _ _.
-Check []%vector : Vector.t _ _.
-Check [ ]%list : list _.
-Fail Check []%list : list _.
-
-Goal True.
- idtac; [ ]. (* Note that vector notations break the [ | .. | ] syntax of Ltac *)
-Abort.
-
-Inductive mylist A := mynil | mycons (x : A) (xs : mylist A).
-Delimit Scope mylist_scope with mylist.
-Bind Scope mylist_scope with mylist.
-Arguments mynil {_}, _.
-Arguments mycons {_} _ _.
-Notation " [] " := mynil (compat "8.5") : mylist_scope.
-Notation " [ ] " := mynil (format "[ ]") : mylist_scope.
-Notation " [ x ] " := (mycons x nil) : mylist_scope.
-Notation " [ x ; y ; .. ; z ] " := (mycons x (mycons y .. (mycons z nil) ..)) : mylist_scope.
-
-Import Coq.Compat.Coq85.
-Locate Module VectorNotations.
-Import VectorDef.VectorNotations.
-
-Check []%vector : Vector.t _ _.
-Check []%mylist : mylist _.
-Check [ ]%mylist : mylist _.
-Check [ ]%list : list _.
-End A.
-
-Module B.
-Import Coq.Compat.Coq85.
-
-Goal True.
- idtac; []. (* Check that importing the compat file doesn't break the [ | .. | ] syntax of Ltac *)
-Abort.
-End B.
diff --git a/test-suite/bugs/closed/4798.v b/test-suite/bugs/closed/4798.v
index dbc3d46f..6f2bcb96 100644
--- a/test-suite/bugs/closed/4798.v
+++ b/test-suite/bugs/closed/4798.v
@@ -1,3 +1,3 @@
Check match 2 with 0 => 0 | S n => n end.
-Notation "|" := 1 (compat "8.4").
+Notation "|" := 1 (compat "8.6").
Check match 2 with 0 => 0 | S n => n end. (* fails *)
diff --git a/test-suite/bugs/closed/4811.v b/test-suite/bugs/closed/4811.v
index a9149626..fe6e65a0 100644
--- a/test-suite/bugs/closed/4811.v
+++ b/test-suite/bugs/closed/4811.v
@@ -2,7 +2,7 @@
(* Submitted by Jason Gross *)
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-R" "src" "Crypto" "-R" "Bedrock" "Bedrock" "-R" "coqprime-8.5/Coqprime" "Coqprime" "-top" "GF255192") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-R" "src" "Crypto" "-R" "Bedrock" "Bedrock" "-R" "coqprime-8.5/Coqprime" "Coqprime" "-top" "GF255192") -*- *)
(* File reduced by coq-bug-finder from original input, then from 162 lines to 23 lines, then from 245 lines to 95 lines, then from 198 lines to 101 lines, then from 654 lines to 452 lines, then from 591 lines to 505 lines, then from 1770 lines to 580 lines, then from 2238 lines to 1715 lines, then from 1776 lines to 1738 lines, then from 1750 lines to 1679 lines, then from 1693 lines to 1679 lines *)
(* coqc version 8.5pl1 (April 2016) compiled on Apr 18 2016 14:48:5 with OCaml 4.02.3
coqtop version 8.5pl1 (April 2016) *)
diff --git a/test-suite/bugs/closed/4818.v b/test-suite/bugs/closed/4818.v
index 904abb22..e411ce62 100644
--- a/test-suite/bugs/closed/4818.v
+++ b/test-suite/bugs/closed/4818.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-R" "." "Prob" "-top" "Product") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-R" "." "Prob" "-top" "Product") -*- *)
(* File reduced by coq-bug-finder from original input, then from 391 lines to 77 lines, then from 857 lines to 119 lines, then from 1584 lines to 126 lines, then from 362 lines to 135 lines, then from 149 lines to 135 lines *)
(* coqc version 8.5pl1 (June 2016) compiled on Jun 9 2016 17:27:17 with OCaml 4.02.3
coqtop version 8.5pl1 (June 2016) *)
diff --git a/test-suite/bugs/closed/4844.v b/test-suite/bugs/closed/4844.v
new file mode 100644
index 00000000..f140939c
--- /dev/null
+++ b/test-suite/bugs/closed/4844.v
@@ -0,0 +1,47 @@
+
+(* Bug report 4844 (and 4824):
+ The Haskell extraction was erroneously considering [Any] and
+ [()] as convertible ([Tunknown] an [Tdummy] internally). *)
+
+(* A value with inner logical parts.
+ Its extracted type will be [Sum () ()]. *)
+
+Definition semilogic : True + True := inl I.
+
+(* Higher-order record, whose projection [ST] isn't expressible
+ as an Haskell (or OCaml) type. Hence [ST] is extracted as the
+ unknown type [Any] in Haskell. *)
+
+Record SomeType := { ST : Type }.
+
+Definition SomeTrue := {| ST := True |}.
+
+(* A first version of the issue:
+ [abstrSum] is extracted as [Sum Any Any], so an unsafeCoerce
+ is required to cast [semilogic] into [abstrSum SomeTrue]. *)
+
+Definition abstrSum (t : SomeType) := ((ST t) + (ST t))%type.
+
+Definition semilogic' : abstrSum SomeTrue := semilogic.
+
+(* A deeper version of the issue.
+ In the previous example, the extraction could have reduced
+ [abstrSum SomeTrue] into [True+True], solving the issue.
+ It might do so in future versions. But if we put an inductive
+ in the way, a reduction isn't helpful. *)
+
+Inductive box (t : SomeType) := Box : ST t + ST t -> box t.
+
+Definition boxed_semilogic : box SomeTrue :=
+ Box SomeTrue semilogic.
+
+Require Extraction.
+Extraction Language Haskell.
+Recursive Extraction semilogic' boxed_semilogic.
+(* Warning! To fully check that this bug is still closed,
+ you should run ghc on the extracted code:
+
+Extraction "bug4844.hs" semilogic' boxed_semilogic.
+ghc bug4844.hs
+
+*)
diff --git a/test-suite/bugs/closed/4852.v b/test-suite/bugs/closed/4852.v
new file mode 100644
index 00000000..5068ed9b
--- /dev/null
+++ b/test-suite/bugs/closed/4852.v
@@ -0,0 +1,54 @@
+(** BZ 4852 : unsatisfactory Extraction Implicit for a fixpoint defined via wf *)
+
+Require Import Coq.Lists.List.
+Import ListNotations.
+Require Import Omega.
+
+Definition wfi_lt := well_founded_induction_type Wf_nat.lt_wf.
+
+Tactic Notation "wfinduction" constr(term) "on" ne_hyp_list(Hs) "as" ident(H) :=
+ let R := fresh in
+ let E := fresh in
+ remember term as R eqn:E;
+ revert E; revert Hs;
+ induction R as [R H] using wfi_lt;
+ intros; subst R.
+
+Hint Rewrite @app_comm_cons @app_assoc @app_length : app_rws.
+
+Ltac solve_nat := autorewrite with app_rws in *; cbn in *; omega.
+
+Notation "| x |" := (length x) (at level 11, no associativity, format "'|' x '|'").
+
+Definition split_acc (ls : list nat) : forall acc1 acc2,
+ (|acc1| = |acc2| \/ |acc1| = S (|acc2|)) ->
+ { lss : list nat * list nat |
+ let '(ls1, ls2) := lss in |ls1++ls2| = |ls++acc1++acc2| /\ (|ls1| = |ls2| \/ |ls1| = S (|ls2|))}.
+Proof.
+ induction ls as [|a ls IHls]. all:intros acc1 acc2 H.
+ { exists (acc1, acc2). cbn. intuition reflexivity. }
+ destruct (IHls (a::acc2) acc1) as [[ls1 ls2] (H1 & H2)]. 1:solve_nat.
+ exists (ls1, ls2). cbn. intuition solve_nat.
+Defined.
+
+Definition join(ls : list nat) : { rls : list nat | |rls| = |ls| }.
+Proof.
+ wfinduction (|ls|) on ls as IH.
+ case (split_acc ls [] []). 1:solve_nat.
+ intros (ls1 & ls2) (H1 & H2).
+ destruct ls2 as [|a ls2].
+ - exists ls1. solve_nat.
+ - unshelve eelim (IH _ _ ls1 eq_refl). 1:solve_nat. intros rls1 H3.
+ unshelve eelim (IH _ _ ls2 eq_refl). 1:solve_nat. intros rls2 H4.
+ exists (a :: rls1 ++ rls2). solve_nat.
+Defined.
+
+Require Import ExtrOcamlNatInt.
+Extract Inlined Constant length => "List.length".
+Extract Inlined Constant app => "List.append".
+
+Extraction Inline wfi_lt.
+Extraction Implicit wfi_lt [1 3].
+Recursive Extraction join. (* was: Error: An implicit occurs after extraction *)
+Extraction TestCompile join.
+
diff --git a/test-suite/bugs/closed/4869.v b/test-suite/bugs/closed/4869.v
index 6d21b66f..ac5d7ea2 100644
--- a/test-suite/bugs/closed/4869.v
+++ b/test-suite/bugs/closed/4869.v
@@ -15,4 +15,4 @@ Section Foo.
Constraint Set < j.
Definition foo := Type@{j}.
-End Foo. \ No newline at end of file
+End Foo.
diff --git a/test-suite/bugs/closed/4873.v b/test-suite/bugs/closed/4873.v
index f2f917b4..39299883 100644
--- a/test-suite/bugs/closed/4873.v
+++ b/test-suite/bugs/closed/4873.v
@@ -1,6 +1,5 @@
Require Import Coq.Classes.Morphisms.
Require Import Relation_Definitions.
-Require Import Coq.Compat.Coq85.
Fixpoint tuple' T n : Type :=
match n with
@@ -69,4 +68,4 @@ Proof.
destruct xs; simpl; intros; subst; auto.
generalize dependent t. simpl in *.
induction xs; simpl in *; intros; congruence.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4877.v b/test-suite/bugs/closed/4877.v
index 7e3c78dc..7d153d98 100644
--- a/test-suite/bugs/closed/4877.v
+++ b/test-suite/bugs/closed/4877.v
@@ -9,4 +9,4 @@ Ltac induction_last :=
Goal forall n m : nat, True -> n = m -> m = n.
induction_last.
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/4957.v b/test-suite/bugs/closed/4957.v
new file mode 100644
index 00000000..0efd87ac
--- /dev/null
+++ b/test-suite/bugs/closed/4957.v
@@ -0,0 +1,6 @@
+Ltac get_value H := eval cbv delta [H] in H.
+
+Goal True.
+refine (let X := _ in _).
+let e := get_value X in unify e Prop.
+Abort.
diff --git a/test-suite/bugs/closed/4969.v b/test-suite/bugs/closed/4969.v
new file mode 100644
index 00000000..4dee41e2
--- /dev/null
+++ b/test-suite/bugs/closed/4969.v
@@ -0,0 +1,11 @@
+Require Import Classes.Init.
+
+Class C A := c : A.
+Instance nat_C : C nat := 0.
+Instance bool_C : C bool := true.
+Lemma silly {A} `{C A} : 0 = 0 -> c = c -> True.
+Proof. auto. Qed.
+
+Goal True.
+ class_apply @silly; [reflexivity|].
+ reflexivity. Fail Qed.
diff --git a/test-suite/bugs/closed/5019.v b/test-suite/bugs/closed/5019.v
new file mode 100644
index 00000000..7c973f88
--- /dev/null
+++ b/test-suite/bugs/closed/5019.v
@@ -0,0 +1,5 @@
+Require Import Coq.ZArith.ZArith.
+Goal forall (T0 : Z -> Type) (k : nat) d (P : T0 (Z.of_nat (S k)) -> Prop), P d.
+ clear; intros.
+ Timeout 1 zify. (* used to loop forever; should take < 0.01 s *)
+Admitted.
diff --git a/test-suite/bugs/closed/5036.v b/test-suite/bugs/closed/5036.v
index 12c958be..83f16774 100644
--- a/test-suite/bugs/closed/5036.v
+++ b/test-suite/bugs/closed/5036.v
@@ -7,4 +7,4 @@ Section foo.
autorewrite with core.
constructor.
Qed.
-End foo. (* Anomaly: Universe Top.16 undefined. Please report. *) \ No newline at end of file
+End foo. (* Anomaly: Universe Top.16 undefined. Please report. *)
diff --git a/test-suite/bugs/closed/5065.v b/test-suite/bugs/closed/5065.v
index 6bd677ba..932fee8b 100644
--- a/test-suite/bugs/closed/5065.v
+++ b/test-suite/bugs/closed/5065.v
@@ -3,4 +3,4 @@ Inductive foo := C1 : bar -> foo with bar := C2 : foo -> bar.
Lemma L1 : foo -> True with L2 : bar -> True.
intros; clear L1 L2; abstract (exact I).
intros; exact I.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/bugs/closed/5123.v b/test-suite/bugs/closed/5123.v
index bcde510e..17231bff 100644
--- a/test-suite/bugs/closed/5123.v
+++ b/test-suite/bugs/closed/5123.v
@@ -30,4 +30,4 @@ Goal True.
all:cycle 3.
eapply existT. (*This does no typeclass resultion, which is correct.*)
Focus 5.
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/closed/5153.v b/test-suite/bugs/closed/5153.v
new file mode 100644
index 00000000..be6407b5
--- /dev/null
+++ b/test-suite/bugs/closed/5153.v
@@ -0,0 +1,8 @@
+(* An example where it does not hurt having more type-classes resolution *)
+Class some_type := { Ty : Type }.
+Instance: some_type := { Ty := nat }.
+Arguments Ty : clear implicits.
+Goal forall (H : forall t : some_type, @Ty t -> False) (H' : False -> 1 = 2), 1 = 2.
+Proof.
+intros H H'.
+specialize (H' (@H _ O)). (* was failing *)
diff --git a/test-suite/bugs/closed/5177.v b/test-suite/bugs/closed/5177.v
new file mode 100644
index 00000000..7c8af1e4
--- /dev/null
+++ b/test-suite/bugs/closed/5177.v
@@ -0,0 +1,22 @@
+(* Bug 5177 https://coq.inria.fr/bug/5177 :
+ Extraction and module type containing application and "with" *)
+
+Module Type T.
+ Parameter t: Type.
+End T.
+
+Module Type A (MT: T).
+ Parameter t1: Type.
+ Parameter t2: Type.
+ Parameter bar: MT.t -> t1 -> t2.
+End A.
+
+Module MakeA(MT: T): A MT with Definition t1 := nat.
+ Definition t1 := nat.
+ Definition t2 := nat.
+ Definition bar (m: MT.t) (x:t1) := x.
+End MakeA.
+
+Require Extraction.
+Recursive Extraction MakeA.
+Extraction TestCompile MakeA.
diff --git a/test-suite/bugs/closed/5180.v b/test-suite/bugs/closed/5180.v
index 261092ee..05603a04 100644
--- a/test-suite/bugs/closed/5180.v
+++ b/test-suite/bugs/closed/5180.v
@@ -61,4 +61,4 @@ The term "x" has type "TypeOfTypei' (Typei 0)" while it is expected to have type
"TypeOfTypei' (Typei 1)" (universe inconsistency: Cannot enforce b = a because a < b).
*)
all:compute in *.
- all:exact x. \ No newline at end of file
+ all:exact x.
diff --git a/test-suite/bugs/closed/5193.v b/test-suite/bugs/closed/5193.v
new file mode 100644
index 00000000..cc8739af
--- /dev/null
+++ b/test-suite/bugs/closed/5193.v
@@ -0,0 +1,14 @@
+Class Eqdec A := eqdec : forall a b : A, {a=b}+{a<>b}.
+
+Typeclasses eauto := debug.
+Set Typeclasses Debug Verbosity 2.
+
+Inductive Finx(n : nat) : Set :=
+| Fx1(i : nat)(e : n = S i)
+| FxS(i : nat)(f : Finx i)(e : n = S i).
+
+Context `{Finx_eqdec : forall n, Eqdec (Finx n)}.
+
+Goal {x : Type & Eqdec x}.
+ eexists.
+ try typeclasses eauto 1 with typeclass_instances.
diff --git a/test-suite/bugs/closed/5198.v b/test-suite/bugs/closed/5198.v
index 7254afb4..72722f5f 100644
--- a/test-suite/bugs/closed/5198.v
+++ b/test-suite/bugs/closed/5198.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-boot" "-nois") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-boot" "-nois") -*- *)
(* File reduced by coq-bug-finder from original input, then from 286 lines to
27 lines, then from 224 lines to 53 lines, then from 218 lines to 56 lines,
then from 269 lines to 180 lines, then from 132 lines to 48 lines, then from
diff --git a/test-suite/bugs/closed/5203.v b/test-suite/bugs/closed/5203.v
index ed137395..3428e1a4 100644
--- a/test-suite/bugs/closed/5203.v
+++ b/test-suite/bugs/closed/5203.v
@@ -2,4 +2,4 @@ Goal True.
Typeclasses eauto := debug.
Fail solve [ typeclasses eauto ].
Fail typeclasses eauto.
- \ No newline at end of file
+
diff --git a/test-suite/bugs/closed/5205.v b/test-suite/bugs/closed/5205.v
new file mode 100644
index 00000000..406f37a4
--- /dev/null
+++ b/test-suite/bugs/closed/5205.v
@@ -0,0 +1,6 @@
+Definition foo (n : nat) (m : nat) : nat := m.
+
+Arguments foo {_} _, _ _.
+
+Check foo 1 1.
+Check foo (n:=1) 1.
diff --git a/test-suite/bugs/closed/5215.v b/test-suite/bugs/closed/5215.v
new file mode 100644
index 00000000..ecf52915
--- /dev/null
+++ b/test-suite/bugs/closed/5215.v
@@ -0,0 +1,286 @@
+Require Import Coq.Logic.FunctionalExtensionality.
+Require Import Coq.Program.Tactics.
+
+Global Set Primitive Projections.
+
+Global Set Universe Polymorphism.
+
+Global Unset Universe Minimization ToSet.
+
+Class Category : Type :=
+{
+ Obj : Type;
+ Hom : Obj -> Obj -> Type;
+ compose : forall {a b c : Obj}, (Hom a b) -> (Hom b c) -> (Hom a c);
+ id : forall {a : Obj}, Hom a a;
+}.
+
+Arguments Obj {_}, _.
+Arguments id {_ _}, {_} _, _ _.
+Arguments Hom {_} _ _, _ _ _.
+Arguments compose {_} {_ _ _} _ _, _ {_ _ _} _ _, _ _ _ _ _ _.
+
+Coercion Obj : Category >-> Sortclass.
+
+Definition Opposite (C : Category) : Category :=
+{|
+
+ Obj := Obj C;
+ Hom := fun a b => Hom b a;
+ compose :=
+ fun a b c (f : Hom b a) (g : Hom c b) => compose C c b a g f;
+ id := fun c => id C c;
+|}.
+
+Record Functor (C C' : Category) : Type :=
+{
+ FO : C -> C';
+ FA : forall {a b}, Hom a b -> Hom (FO a) (FO b);
+}.
+
+Arguments FO {_ _} _ _.
+Arguments FA {_ _} _ {_ _} _, {_ _} _ _ _ _.
+
+Section Opposite_Functor.
+ Context {C D : Category} (F : Functor C D).
+
+ Program Definition Opposite_Functor : (Functor (Opposite C) (Opposite D)) :=
+ {|
+ FO := FO F;
+ FA := fun _ _ h => FA F h;
+ |}.
+
+End Opposite_Functor.
+
+Section Functor_Compose.
+ Context {C C' C'' : Category} (F : Functor C C') (F' : Functor C' C'').
+
+ Program Definition Functor_compose : Functor C C'' :=
+ {|
+ FO := fun c => FO F' (FO F c);
+ FA := fun c d f => FA F' (FA F f)
+ |}.
+
+End Functor_Compose.
+
+Section Algebras.
+ Context {C : Category} (T : Functor C C).
+ Record Algebra : Type :=
+ {
+ Alg_Carrier : C;
+ Constructors : Hom (FO T Alg_Carrier) Alg_Carrier
+ }.
+
+ Record Algebra_Hom (alg alg' : Algebra) : Type :=
+ {
+ Alg_map : Hom (Alg_Carrier alg) (Alg_Carrier alg');
+
+ Alg_map_com : compose (FA T Alg_map) (Constructors alg')
+ = compose (Constructors alg) Alg_map
+ }.
+
+ Arguments Alg_map {_ _} _.
+ Arguments Alg_map_com {_ _} _.
+ Program Definition Algebra_Hom_compose
+ {alg alg' alg'' : Algebra}
+ (h : Algebra_Hom alg alg')
+ (h' : Algebra_Hom alg' alg'')
+ : Algebra_Hom alg alg''
+ :=
+ {|
+ Alg_map := compose (Alg_map h) (Alg_map h')
+ |}.
+
+ Next Obligation. Proof. Admitted.
+
+ Lemma Algebra_Hom_eq_simplify (alg alg' : Algebra)
+ (ah ah' : Algebra_Hom alg alg')
+ : (Alg_map ah) = (Alg_map ah') -> ah = ah'.
+ Proof. Admitted.
+
+ Program Definition Algebra_Hom_id (alg : Algebra) : Algebra_Hom alg alg :=
+ {|
+ Alg_map := id
+ |}.
+
+ Next Obligation. Admitted.
+
+ Definition Algebra_Cat : Category :=
+ {|
+ Obj := Algebra;
+ Hom := Algebra_Hom;
+ compose := @Algebra_Hom_compose;
+ id := Algebra_Hom_id;
+ |}.
+
+End Algebras.
+
+Arguments Alg_Carrier {_ _} _.
+Arguments Constructors {_ _} _.
+Arguments Algebra_Hom {_ _} _ _.
+Arguments Alg_map {_ _ _ _} _.
+Arguments Alg_map_com {_ _ _ _} _.
+Arguments Algebra_Hom_id {_ _} _.
+
+Section CoAlgebras.
+ Context {C : Category}.
+
+ Definition CoAlgebra (T : Functor C C) :=
+ @Algebra (Opposite C) (Opposite_Functor T).
+
+ Definition CoAlgebra_Hom {T : Functor C C} :=
+ @Algebra_Hom (Opposite C) (Opposite_Functor T).
+
+ Definition CoAlgebra_Hom_id {T : Functor C C} :=
+ @Algebra_Hom_id (Opposite C) (Opposite_Functor T).
+
+ Definition CoAlgebra_Cat (T : Functor C C) :=
+ @Algebra_Cat (Opposite C) (Opposite_Functor T).
+
+End CoAlgebras.
+
+Program Definition Type_Cat : Category :=
+{|
+ Obj := Type;
+ Hom := (fun A B => A -> B);
+ compose := fun A B C (g : A -> B) (h : B -> C) => fun (x : A) => h (g x);
+ id := fun A => fun x => x
+|}.
+
+Local Obligation Tactic := idtac.
+
+Program Definition Prod_Cat (C C' : Category) : Category :=
+{|
+ Obj := C * C';
+ Hom :=
+ fun a b =>
+ ((Hom (fst a) (fst b)) * (Hom (snd a) (snd b)))%type;
+ compose :=
+ fun a b c f g =>
+ ((compose (fst f) (fst g)), (compose (snd f)(snd g)));
+ id := fun c => (id, id)
+|}.
+
+Class Terminal (C : Category) : Type :=
+{
+ terminal : C;
+ t_morph : forall (d : Obj), Hom d terminal;
+ t_morph_unique : forall (d : Obj) (f g : (Hom d terminal)), f = g
+}.
+
+Arguments terminal {_} _.
+Arguments t_morph {_} _ _.
+Arguments t_morph_unique {_} _ _ _ _.
+
+Coercion terminal : Terminal >-> Obj.
+
+Definition Initial (C : Category) := Terminal (Opposite C).
+Existing Class Initial.
+
+Record Product {C : Category} (c d : C) : Type :=
+{
+ product : C;
+ Pi_1 : Hom product c;
+ Pi_2 : Hom product d;
+ Prod_morph_ex : forall (p' : Obj) (r1 : Hom p' c) (r2 : Hom p' d), (Hom p' product);
+}.
+
+Arguments Product _ _ _, {_} _ _.
+
+Arguments Pi_1 {_ _ _ _}, {_ _ _} _.
+Arguments Pi_2 {_ _ _ _}, {_ _ _} _.
+Arguments Prod_morph_ex {_ _ _} _ _ _ _.
+
+Coercion product : Product >-> Obj.
+
+Definition Has_Products (C : Category) : Type := forall a b, Product a b.
+
+Existing Class Has_Products.
+
+Program Definition Prod_Func (C : Category) {HP : Has_Products C}
+ : Functor (Prod_Cat C C) C :=
+{|
+ FO := fun x => HP (fst x) (snd x);
+ FA := fun a b f => Prod_morph_ex _ _ (compose Pi_1 (fst f)) (compose Pi_2 (snd f))
+|}.
+
+Arguments Prod_Func _ _, _ {_}.
+
+Definition Sum (C : Category) := @Product (Opposite C).
+
+Arguments Sum _ _ _, {_} _ _.
+
+Definition Has_Sums (C : Category) : Type := forall (a b : C), (Sum a b).
+
+Existing Class Has_Sums.
+
+Program Definition sum_Sum (A B : Type) : (@Sum Type_Cat A B) :=
+{|
+ product := (A + B)%type;
+ Prod_morph_ex :=
+ fun (p' : Type)
+ (r1 : A -> p')
+ (r2 : B -> p')
+ (X : A + B) =>
+ match X return p' with
+ | inl a => r1 a
+ | inr b => r2 b
+ end
+|}.
+Next Obligation. simpl; auto. Defined.
+Next Obligation. simpl; auto. Defined.
+
+Program Instance Type_Cat_Has_Sums : Has_Sums Type_Cat := sum_Sum.
+
+Definition Sum_Func {C : Category} {HS : Has_Sums C} :
+ Functor (Prod_Cat C C) C := Opposite_Functor (Prod_Func (Opposite C) HS).
+
+Arguments Sum_Func _ _, _ {_}.
+
+Program Instance unit_Type_term : Terminal Type_Cat :=
+{
+ terminal := unit;
+ t_morph := fun _ _=> tt
+}.
+
+Next Obligation. Proof. Admitted.
+
+Program Definition term_id : Functor Type_Cat (Prod_Cat Type_Cat Type_Cat) :=
+{|
+ FO := fun a => (@terminal Type_Cat _, a);
+ FA := fun a b f => (@id _ (@terminal Type_Cat _), f)
+|}.
+
+Definition S_nat_func : Functor Type_Cat Type_Cat :=
+ Functor_compose term_id (Sum_Func Type_Cat _).
+
+Definition S_nat_alg_cat := Algebra_Cat S_nat_func.
+
+CoInductive CoNat : Set :=
+ | CoO : CoNat
+ | CoS : CoNat -> CoNat
+.
+
+Definition S_nat_coalg_cat := @CoAlgebra_Cat Type_Cat S_nat_func.
+
+Set Printing Universes.
+Program Definition CoNat_alg_term : Initial S_nat_coalg_cat :=
+{|
+ terminal := _;
+ t_morph := _
+|}.
+
+Next Obligation. Admitted.
+Next Obligation. Admitted.
+
+Axiom Admit : False.
+
+Next Obligation.
+Proof.
+ intros d f g.
+ assert(H1 := (@Alg_map_com _ _ _ _ f)). clear.
+ assert (inl tt = inr tt) by (exfalso; apply Admit).
+ discriminate.
+ all: exfalso; apply Admit.
+ Show Universes.
+Qed.
diff --git a/test-suite/bugs/closed/5215_2.v b/test-suite/bugs/closed/5215_2.v
new file mode 100644
index 00000000..399947f0
--- /dev/null
+++ b/test-suite/bugs/closed/5215_2.v
@@ -0,0 +1,8 @@
+Require Import Coq.Program.Tactics.
+Set Universe Polymorphism.
+Set Printing Universes.
+Definition typ := Type.
+
+Program Definition foo : typ := _ -> _.
+Next Obligation. Admitted.
+Next Obligation. exact typ. Show Proof. Show Universes. Defined.
diff --git a/test-suite/bugs/closed/5219.v b/test-suite/bugs/closed/5219.v
new file mode 100644
index 00000000..f7cec1a0
--- /dev/null
+++ b/test-suite/bugs/closed/5219.v
@@ -0,0 +1,10 @@
+(* Test surgical use of beta-iota in the type of variables coming from
+ pattern-matching for refine *)
+
+Goal forall x : sigT (fun x => x = 1), True.
+ intro x; refine match x with
+ | existT _ x' e' => _
+ end.
+ lazymatch goal with
+ | [ H : _ = _ |- _ ] => idtac
+ end.
diff --git a/test-suite/bugs/closed/5233.v b/test-suite/bugs/closed/5233.v
new file mode 100644
index 00000000..06286c74
--- /dev/null
+++ b/test-suite/bugs/closed/5233.v
@@ -0,0 +1,2 @@
+(* Implicit arguments on type were missing for recursive records *)
+Inductive foo {A : Type} : Type := { Foo : foo }.
diff --git a/test-suite/bugs/closed/5245.v b/test-suite/bugs/closed/5245.v
new file mode 100644
index 00000000..e5bca5b5
--- /dev/null
+++ b/test-suite/bugs/closed/5245.v
@@ -0,0 +1,18 @@
+Set Primitive Projections.
+
+Record foo := Foo {
+ foo_car : Type;
+ foo_rel : foo_car -> foo_car -> Prop
+}.
+Arguments foo_rel : simpl never.
+
+Definition foo_fun {A B} := Foo (A -> B) (fun f g => forall x, f x = g x).
+
+Goal @foo_rel foo_fun (fun x : nat => x) (fun x => x).
+Proof.
+intros x; exact eq_refl.
+Undo.
+progress hnf; intros; exact eq_refl.
+Undo.
+unfold foo_rel. intros x. exact eq_refl.
+Qed.
diff --git a/test-suite/bugs/closed/5255.v b/test-suite/bugs/closed/5255.v
new file mode 100644
index 00000000..5daaf9ed
--- /dev/null
+++ b/test-suite/bugs/closed/5255.v
@@ -0,0 +1,24 @@
+Section foo.
+ Context (x := 1).
+ Definition foo : x = 1 := eq_refl.
+End foo.
+
+Module Type Foo.
+ Context (x := 1).
+ Definition foo : x = 1 := eq_refl.
+End Foo.
+
+Set Universe Polymorphism.
+
+Inductive unit := tt.
+Inductive eq {A} (x y : A) : Type := eq_refl : eq x y.
+
+Section bar.
+ Context (x := tt).
+ Definition bar : eq x tt := eq_refl _ _.
+End bar.
+
+Module Type Bar.
+ Context (x := tt).
+ Definition bar : eq x tt := eq_refl _ _.
+End Bar.
diff --git a/test-suite/bugs/closed/5277.v b/test-suite/bugs/closed/5277.v
new file mode 100644
index 00000000..7abc38bf
--- /dev/null
+++ b/test-suite/bugs/closed/5277.v
@@ -0,0 +1,11 @@
+(* Scheme Equality not robust wrt names *)
+
+Module A1.
+ Inductive A (T : Type) := C (a : T).
+ Scheme Equality for A. (* success *)
+End A1.
+
+Module A2.
+ Inductive A (x : Type) := C (a : x).
+ Scheme Equality for A.
+End A2.
diff --git a/test-suite/bugs/closed/5281.v b/test-suite/bugs/closed/5281.v
new file mode 100644
index 00000000..03bafdc9
--- /dev/null
+++ b/test-suite/bugs/closed/5281.v
@@ -0,0 +1,6 @@
+Inductive A (T : Prop) := B (_ : T).
+Scheme Equality for A.
+
+Goal forall (T:Prop), (forall x y : T, {x=y}+{x<>y}) -> forall x y : A T, {x=y}+{x<>y}.
+decide equality.
+Qed.
diff --git a/test-suite/bugs/closed/5286.v b/test-suite/bugs/closed/5286.v
new file mode 100644
index 00000000..98d4e5c9
--- /dev/null
+++ b/test-suite/bugs/closed/5286.v
@@ -0,0 +1,9 @@
+Set Primitive Projections.
+
+CoInductive R := mkR { p : unit }.
+
+CoFixpoint foo := mkR tt.
+
+Check (eq_refl tt : p foo = tt).
+Check (eq_refl tt <: p foo = tt).
+Check (eq_refl tt <<: p foo = tt).
diff --git a/test-suite/bugs/closed/5300.v b/test-suite/bugs/closed/5300.v
new file mode 100644
index 00000000..18202df5
--- /dev/null
+++ b/test-suite/bugs/closed/5300.v
@@ -0,0 +1,39 @@
+Module Test1.
+
+ Module Type Foo.
+ Parameter t : unit.
+ End Foo.
+
+ Module Bar : Foo.
+ Module Type Rnd. Definition t' : unit := tt. End Rnd.
+ Module Rnd_inst : Rnd. Definition t' : unit := tt. End Rnd_inst.
+ Definition t : unit.
+ exact Rnd_inst.t'.
+ Qed.
+ End Bar.
+
+ Print Assumptions Bar.t.
+End Test1.
+
+Module Test2.
+ Module Type Foo.
+ Parameter t1 : unit.
+ Parameter t2 : unit.
+ End Foo.
+
+ Module Bar : Foo.
+ Inductive ind := .
+ Definition t' : unit := tt.
+ Definition t1 : unit.
+ Proof.
+ exact ((fun (_ : ind -> False) => tt) (fun H => match H with end)).
+ Qed.
+ Definition t2 : unit.
+ Proof.
+ exact t'.
+ Qed.
+ End Bar.
+
+ Print Assumptions Bar.t1.
+ Print Assumptions Bar.t1.
+End Test2.
diff --git a/test-suite/bugs/closed/5315.v b/test-suite/bugs/closed/5315.v
new file mode 100644
index 00000000..d8824bff
--- /dev/null
+++ b/test-suite/bugs/closed/5315.v
@@ -0,0 +1,10 @@
+Require Import Recdef.
+
+Function dumb_works (a:nat) {struct a} :=
+ match (fun x => x) a with O => O | S n' => dumb_works n' end.
+
+Function dumb_nope (a:nat) {struct a} :=
+ match (id (fun x => x)) a with O => O | S n' => dumb_nope n' end.
+
+(* This check is just present to ensure Function worked well *)
+Check R_dumb_nope_complete.
diff --git a/test-suite/bugs/closed/5321.v b/test-suite/bugs/closed/5321.v
new file mode 100644
index 00000000..03514e23
--- /dev/null
+++ b/test-suite/bugs/closed/5321.v
@@ -0,0 +1,18 @@
+Definition proj1_sig_path {A} {P : A -> Prop} {u v : sig P} (p : u = v)
+ : proj1_sig u = proj1_sig v
+ := f_equal (@proj1_sig _ _) p.
+
+Definition proj2_sig_path {A} {P : A -> Prop} {u v : sig P} (p : u = v)
+ : eq_rect _ _ (proj2_sig u) _ (proj1_sig_path p) = proj2_sig v
+ := match p with eq_refl => eq_refl end.
+
+Goal forall sz : nat,
+ let sz' := sz in
+ forall pf : sz = sz',
+ let feq_refl := exist (fun x : nat => sz = x) sz' eq_refl in
+ let fpf := exist (fun x : nat => sz = x) sz' pf in feq_refl = fpf ->
+proj2_sig feq_refl = proj2_sig fpf.
+Proof.
+ intros.
+ etransitivity; [ | exact (proj2_sig_path H) ].
+ Fail clearbody fpf.
diff --git a/test-suite/bugs/closed/5322.v b/test-suite/bugs/closed/5322.v
new file mode 100644
index 00000000..01aec8f2
--- /dev/null
+++ b/test-suite/bugs/closed/5322.v
@@ -0,0 +1,14 @@
+(* Regression in computing types of branches in "match" *)
+Inductive flat_type := Unit | Prod (A B : flat_type).
+Inductive exprf (op : flat_type -> flat_type -> Type) {var : Type} : flat_type
+-> Type :=
+| Op {t1 tR} (opc : op t1 tR) (args : exprf op t1) : exprf op tR.
+Inductive op : flat_type -> flat_type -> Type := a : op Unit Unit.
+Arguments Op {_ _ _ _} _ _.
+Definition bound_op {var}
+ {src2 dst2}
+ (opc2 : op src2 dst2)
+ : forall (args2 : exprf op (var:=var) src2), Op opc2 args2 = Op opc2 args2.
+ refine match opc2 return (forall args2, Op opc2 args2 = Op opc2 args2) with
+ | _ => _
+ end.
diff --git a/test-suite/bugs/closed/5323.v b/test-suite/bugs/closed/5323.v
new file mode 100644
index 00000000..295b7cd9
--- /dev/null
+++ b/test-suite/bugs/closed/5323.v
@@ -0,0 +1,26 @@
+(* Revealed a missing re-consideration of postponed problems *)
+
+Module A.
+Inductive flat_type := Unit | Prod (A B : flat_type).
+Inductive exprf (op : flat_type -> flat_type -> Type) {var : Type} : flat_type
+-> Type :=
+| Op {t1 tR} (opc : op t1 tR) (args : exprf op t1) : exprf op tR.
+Inductive op : flat_type -> flat_type -> Type := .
+Arguments Op {_ _ _ _} _ _.
+Definition bound_op {var}
+ {src2 dst2}
+ (opc2 : op src2 dst2)
+ : forall (args2 : exprf op (var:=var) src2), Op opc2 args2 = Op opc2 args2
+ := match opc2 return (forall args2, Op opc2 args2 = Op opc2 args2) with end.
+End A.
+
+(* A shorter variant *)
+Module B.
+Inductive exprf (op : unit -> Type) : Type :=
+| A : exprf op
+| Op tR (opc : op tR) (args : exprf op) : exprf op.
+Inductive op : unit -> Type := .
+Definition bound_op (dst2 : unit) (opc2 : op dst2)
+ : forall (args2 : exprf op), Op op dst2 opc2 args2 = A op
+ := match opc2 in op h return (forall args2 : exprf ?[U], Op ?[V] ?[I] opc2 args2 = A op) with end.
+End B.
diff --git a/test-suite/bugs/closed/5331.v b/test-suite/bugs/closed/5331.v
new file mode 100644
index 00000000..28743736
--- /dev/null
+++ b/test-suite/bugs/closed/5331.v
@@ -0,0 +1,11 @@
+(* Checking no anomaly on some unexpected intropattern *)
+
+Ltac ih H := induction H as H.
+Ltac ih' H H' := induction H as H'.
+
+Goal True -> True.
+Fail intro H; ih H.
+intro H; ih' H ipattern:([]).
+exact I.
+Qed.
+
diff --git a/test-suite/bugs/closed/5345.v b/test-suite/bugs/closed/5345.v
new file mode 100644
index 00000000..d8448f35
--- /dev/null
+++ b/test-suite/bugs/closed/5345.v
@@ -0,0 +1,7 @@
+Ltac break_tuple :=
+ match goal with
+ | [ H: context[match ?a with | pair n m => _ end] |- _ ] =>
+ let n := fresh n in
+ let m := fresh m in
+ destruct a as [n m]
+ end.
diff --git a/test-suite/bugs/closed/5346.v b/test-suite/bugs/closed/5346.v
new file mode 100644
index 00000000..0118c187
--- /dev/null
+++ b/test-suite/bugs/closed/5346.v
@@ -0,0 +1,29 @@
+Inductive comp : Type -> Type :=
+| Ret {T} : forall (v:T), comp T
+| Bind {T T'} : forall (p: comp T') (p': T' -> comp T), comp T.
+
+Notation "'do' x .. y <- p1 ; p2" :=
+ (Bind p1 (fun x => .. (fun y => p2) ..))
+ (at level 60, right associativity,
+ x binder, y binder).
+
+Definition Fst1 A B (p: comp (A*B)) : comp A :=
+ do '(a, b) <- p;
+ Ret a.
+
+Definition Fst2 A B (p: comp (A*B)) : comp A :=
+ match tt with
+ | _ => Bind p (fun '(a, b) => Ret a)
+ end.
+
+Definition Fst3 A B (p: comp (A*B)) : comp A :=
+ match tt with
+ | _ => do a <- p;
+ Ret (fst a)
+ end.
+
+Definition Fst A B (p: comp (A * B)) : comp A :=
+ match tt with
+ | _ => do '(a, b) <- p;
+ Ret a
+ end.
diff --git a/test-suite/bugs/closed/5347.v b/test-suite/bugs/closed/5347.v
new file mode 100644
index 00000000..9267b3eb
--- /dev/null
+++ b/test-suite/bugs/closed/5347.v
@@ -0,0 +1,10 @@
+Set Universe Polymorphism.
+
+Axiom X : Type.
+(* Used to declare [x0@{u1 u2} : X@{u1}] and [x1@{} : X@{u2}] leaving
+ the type of x1 with undeclared universes. After PR #891 this should
+ error at declaration time. *)
+Axiom x₀ x₁ : X.
+Axiom Xᵢ : X -> Type.
+
+Check Xᵢ x₁. (* conversion test raised anomaly universe undefined *)
diff --git a/test-suite/bugs/closed/5359.v b/test-suite/bugs/closed/5359.v
new file mode 100644
index 00000000..87e69565
--- /dev/null
+++ b/test-suite/bugs/closed/5359.v
@@ -0,0 +1,218 @@
+Require Import Coq.nsatz.Nsatz.
+Goal False.
+
+ (* the first (succeeding) goal was reached by clearing one hypothesis in the second goal which overflows 6GB of stack space *)
+ let sugar := constr:( 0%Z ) in
+ let nparams := constr:( (-1)%Z ) in
+ let reified_goal := constr:(
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6))) ) in
+ let power := constr:( N.one ) in
+ let reified_givens := constr:(
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6)))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))
+ (Ring_polynom.PEX Z 3)) (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEX Z 10)) (Ring_polynom.PEc 1%Z)
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))
+ (Ring_polynom.PEX Z 3)) (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEX Z 9)) (Ring_polynom.PEc 1%Z)
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 7)
+ (Ring_polynom.PEX Z 7)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 8) (Ring_polynom.PEX Z 8)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 7)
+ (Ring_polynom.PEX Z 7)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 8)
+ (Ring_polynom.PEX Z 8))))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 5)
+ (Ring_polynom.PEX Z 5)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 6)
+ (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 5)
+ (Ring_polynom.PEX Z 5)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 6)
+ (Ring_polynom.PEX Z 6))))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 2)
+ (Ring_polynom.PEX Z 2)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3)
+ (Ring_polynom.PEX Z 3)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 2)
+ (Ring_polynom.PEX Z 2)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3)
+ (Ring_polynom.PEX Z 3)))) :: nil)%list ) in
+ Nsatz.nsatz_compute
+ (@cons _ (@Ring_polynom.PEc _ sugar) (@cons _ (@Ring_polynom.PEc _ nparams) (@cons _ (@Ring_polynom.PEpow _ reified_goal power) reified_givens))).
+
+ let sugar := constr:( 0%Z ) in
+ let nparams := constr:( (-1)%Z ) in
+ let reified_goal := constr:(
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6))) ) in
+ let power := constr:( N.one ) in
+ let reified_givens := constr:(
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4) (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6)))
+ :: Ring_polynom.PEadd
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))
+ (Ring_polynom.PEX Z 3)) (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))
+ (Ring_polynom.PEX Z 3)) (Ring_polynom.PEX Z 6))))
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 2)
+ (Ring_polynom.PEX Z 6))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3)
+ (Ring_polynom.PEX Z 5)))) (Ring_polynom.PEX Z 7))
+ (Ring_polynom.PEsub
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3) (Ring_polynom.PEX Z 6))
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))))
+ (Ring_polynom.PEX Z 8))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2)) (Ring_polynom.PEX Z 5))
+ (Ring_polynom.PEX Z 3)) (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEX Z 10)) (Ring_polynom.PEc 1%Z)
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEsub (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEX Z 2))
+ (Ring_polynom.PEX Z 5)) (Ring_polynom.PEX Z 3))
+ (Ring_polynom.PEX Z 6))) (Ring_polynom.PEX Z 9))
+ (Ring_polynom.PEc 1%Z)
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 7)
+ (Ring_polynom.PEX Z 7)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 8)
+ (Ring_polynom.PEX Z 8)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 7)
+ (Ring_polynom.PEX Z 7)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 8)
+ (Ring_polynom.PEX Z 8))))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 5)
+ (Ring_polynom.PEX Z 5)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 6)
+ (Ring_polynom.PEX Z 6)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 5)
+ (Ring_polynom.PEX Z 5)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 6)
+ (Ring_polynom.PEX Z 6))))
+ :: Ring_polynom.PEsub
+ (Ring_polynom.PEadd
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 1)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 2)
+ (Ring_polynom.PEX Z 2)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3)
+ (Ring_polynom.PEX Z 3)))
+ (Ring_polynom.PEadd (Ring_polynom.PEc 1%Z)
+ (Ring_polynom.PEmul
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 4)
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 2)
+ (Ring_polynom.PEX Z 2)))
+ (Ring_polynom.PEmul (Ring_polynom.PEX Z 3)
+ (Ring_polynom.PEX Z 3)))) :: nil)%list ) in
+ Nsatz.nsatz_compute
+ (@cons _ (@Ring_polynom.PEc _ sugar) (@cons _ (@Ring_polynom.PEc _ nparams) (@cons _ (@Ring_polynom.PEpow _ reified_goal power) reified_givens))).
diff --git a/test-suite/bugs/closed/5365.v b/test-suite/bugs/closed/5365.v
new file mode 100644
index 00000000..be360d24
--- /dev/null
+++ b/test-suite/bugs/closed/5365.v
@@ -0,0 +1,13 @@
+
+Inductive TupleT : nat -> Type :=
+| nilT : TupleT 0
+| consT {n} A : (A -> TupleT n) -> TupleT (S n).
+
+Inductive Tuple : forall n, TupleT n -> Type :=
+ nil : Tuple _ nilT
+| cons {n A} (x : A) (F : A -> TupleT n) : Tuple _ (F x) -> Tuple _ (consT A F).
+
+Inductive TupleMap : forall n, TupleT n -> TupleT n -> Type :=
+ tmNil : TupleMap _ nilT nilT
+| tmCons {n} {A B : Type} (F : A -> TupleT n) (G : B -> TupleT n)
+ : (forall x, sigT (fun y => TupleMap _ (F x) (G y))) -> TupleMap _ (consT A F) (consT B G).
diff --git a/test-suite/bugs/closed/5368.v b/test-suite/bugs/closed/5368.v
new file mode 100644
index 00000000..410fe170
--- /dev/null
+++ b/test-suite/bugs/closed/5368.v
@@ -0,0 +1,6 @@
+Set Universe Polymorphism.
+
+Record cantype := {T:Type; op:T -> unit}.
+Canonical Structure test (P:Type) := {| T := P -> Type; op := fun _ => tt|}.
+
+Check (op _ ((fun (_:unit) => Set):_)).
diff --git a/test-suite/bugs/closed/5372.v b/test-suite/bugs/closed/5372.v
new file mode 100644
index 00000000..e60244cd
--- /dev/null
+++ b/test-suite/bugs/closed/5372.v
@@ -0,0 +1,8 @@
+(* coq bug 5372: https://coq.inria.fr/bugs/show_bug.cgi?id=5372 *)
+Require Import FunInd.
+Function odd (n:nat) :=
+ match n with
+ | 0 => false
+ | S n => true
+ end
+with even (n:nat) := false.
diff --git a/test-suite/bugs/closed/5377.v b/test-suite/bugs/closed/5377.v
new file mode 100644
index 00000000..130d9f9a
--- /dev/null
+++ b/test-suite/bugs/closed/5377.v
@@ -0,0 +1,54 @@
+Goal ((forall (t : Type) (x y : t),
+ True ->
+ x = y)) -> False.
+Proof.
+ intro HG.
+ let P := lazymatch goal with
+ | [ H : forall t x y, True -> @?P t x y
+ |- _ ]
+ => P
+ end in
+ pose (f := P).
+ unify f (fun (t : Type) (x y : t) => x = y).
+Abort.
+
+Goal True.
+Proof.
+let c := lazymatch constr:(fun (T : nat -> Type) (y : nat) (_ : T y) => y) with
+ | fun _ y _ => @?C y => C
+ end in
+pose (f := c).
+unify f (fun n : nat => n).
+Abort.
+
+Goal (forall x : nat, x = x -> x = x \/ x = x) -> True.
+Proof.
+intro.
+let P := lazymatch goal with
+| [ H : forall y, @?P y -> @?P y \/ _ |- _ ]
+ => P
+end in
+pose (f := P).
+unify f (fun x : nat => x = x).
+Abort.
+
+Goal (forall x : nat, x = x -> x = x \/ x = x) -> True.
+Proof.
+intro.
+lazymatch goal with
+| [ H : forall y, @?P y -> @?Q y \/ _ |- _ ]
+ => idtac
+end.
+Abort.
+
+Axiom eq : forall {T} (_ : T), Prop.
+
+Goal forall _ : (forall t (_ : eq t) (x : t), eq x), Prop.
+Proof.
+intro.
+let P := lazymatch goal with
+| [ H : forall t _ x, @?P t x |- _ ]
+ => P
+end in
+pose (f := P).
+Abort.
diff --git a/test-suite/bugs/closed/5401.v b/test-suite/bugs/closed/5401.v
new file mode 100644
index 00000000..95193b99
--- /dev/null
+++ b/test-suite/bugs/closed/5401.v
@@ -0,0 +1,21 @@
+(* Testing printing of bound unnamed variables in pattern printer *)
+
+Module A.
+Parameter P : nat -> Type.
+Parameter v : forall m, P m.
+Parameter f : forall (P : nat -> Type), (forall a, P a) -> P 0.
+Class U (R : P 0) (m : forall x, P x) : Prop.
+Instance w : U (f _ (fun _ => v _)) v.
+Print HintDb typeclass_instances.
+End A.
+
+(* #5731 *)
+
+Module B.
+Axiom rel : Type -> Prop.
+Axiom arrow_rel : forall {A1}, A1 -> rel A1.
+Axiom forall_rel : forall E, (forall v1 : Type, E v1 -> rel v1) -> Prop.
+Axiom inl_rel: forall_rel _ (fun _ => arrow_rel).
+Hint Resolve inl_rel : foo.
+Print HintDb foo.
+End B.
diff --git a/test-suite/bugs/closed/5414.v b/test-suite/bugs/closed/5414.v
new file mode 100644
index 00000000..2522a274
--- /dev/null
+++ b/test-suite/bugs/closed/5414.v
@@ -0,0 +1,12 @@
+(* Use of idents bound to ltac names in a "match" *)
+
+Definition foo : Type.
+Proof.
+ let x := fresh "a" in
+ refine (forall k : nat * nat, let '(x, _) := k in (_ : Type)).
+ exact (a = a).
+Defined.
+Goal foo.
+intros k. elim k. (* elim because elim keeps names *)
+intros.
+Check a. (* We check that the name is "a" *)
diff --git a/test-suite/bugs/closed/5434.v b/test-suite/bugs/closed/5434.v
new file mode 100644
index 00000000..5d2460fa
--- /dev/null
+++ b/test-suite/bugs/closed/5434.v
@@ -0,0 +1,18 @@
+(* About binders which remain unnamed after typing *)
+
+Global Set Asymmetric Patterns.
+
+Definition proj2_sig_map {A} {P Q : A -> Prop} (f : forall a, P a -> Q a) (x :
+@sig A P) : @sig A Q
+ := let 'exist a p := x in exist Q a (f a p).
+Axioms (feBW' : Type) (g : Prop -> Prop) (f' : feBW' -> Prop).
+Definition foo := @proj2_sig_map feBW' (fun H => True = f' _) (fun H =>
+ g True = g (f' H))
+ (fun (a : feBW') (p : (fun H : feBW' => True =
+ f' H) a) => @f_equal Prop Prop g True (f' a) p).
+Print foo.
+Goal True.
+ lazymatch type of foo with
+ | sig (fun a : ?A => ?P) -> _
+ => pose (fun a : A => a = a /\ P = P)
+ end.
diff --git a/test-suite/bugs/closed/5435.v b/test-suite/bugs/closed/5435.v
new file mode 100644
index 00000000..60ace5ce
--- /dev/null
+++ b/test-suite/bugs/closed/5435.v
@@ -0,0 +1,2 @@
+Definition foo (x : nat) := Eval native_compute in x.
+
diff --git a/test-suite/bugs/closed/5449.v b/test-suite/bugs/closed/5449.v
new file mode 100644
index 00000000..d7fc2aaa
--- /dev/null
+++ b/test-suite/bugs/closed/5449.v
@@ -0,0 +1,6 @@
+(* An example of decide equality which was failing due to a lhs dep into the rhs *)
+
+Require Import Coq.PArith.BinPos.
+Goal forall x y, {Pos.compare_cont Gt x y = Gt} + {Pos.compare_cont Gt x y <> Gt}.
+intros.
+decide equality.
diff --git a/test-suite/bugs/closed/5460.v b/test-suite/bugs/closed/5460.v
new file mode 100644
index 00000000..50221cdd
--- /dev/null
+++ b/test-suite/bugs/closed/5460.v
@@ -0,0 +1,11 @@
+(* Bugs in computing dependencies in pattern-matching compilation *)
+
+Inductive A := a1 | a2.
+Inductive B := b.
+Inductive C : A -> Type := c : C a1 | d : C a2.
+Definition P (x : A) (y : C x) (z : B) : nat :=
+ match z, x, y with
+ | b, a1, c => 0
+ | b, a2, d => 0
+ | _, _, _ => 1
+ end.
diff --git a/test-suite/bugs/closed/5470.v b/test-suite/bugs/closed/5470.v
new file mode 100644
index 00000000..5b3984b6
--- /dev/null
+++ b/test-suite/bugs/closed/5470.v
@@ -0,0 +1,3 @@
+(* This used to raise an anomaly *)
+
+Fail Reserved Notation "x +++ y" (at level 70, x binder).
diff --git a/test-suite/bugs/closed/5476.v b/test-suite/bugs/closed/5476.v
new file mode 100644
index 00000000..b2d9d943
--- /dev/null
+++ b/test-suite/bugs/closed/5476.v
@@ -0,0 +1,28 @@
+Require Setoid.
+
+Goal forall (P : Prop) (T : Type) (m m' : T) (T0 T1 : Type) (P2 : forall _ :
+Prop, Prop)
+ (P0 : Set) (x0 : P0) (P1 : forall (_ : P0) (_ : T), Prop)
+ (P3 : forall (_ : forall (_ : P0) (_ : T0) (_ : Prop), Prop) (_ :
+T) (_ : Prop), Prop)
+ (o : forall _ : P0, option T1)
+ (_ : P3
+ (fun (k : P0) (_ : T0) (_ : Prop) =>
+ match o k return Prop with
+ | Some _ => True
+ | None => False
+ end) m' P) (_ : P2 (P1 x0 m))
+ (_ : forall (f : forall (_ : P0) (_ : T0) (_ : Prop), Prop) (m1 m2
+: T)
+ (k : P0) (e : T0) (_ : P2 (P1 k m1)), iff (P3 f m2 P)
+(f k e (P3 f m1 P))), False.
+Proof.
+ intros ???????????? H0 H H1.
+ rewrite H1 in H0; eauto with nocore.
+ { lazymatch goal with
+ | H : match ?X with _ => _ end |- _
+ => first [ lazymatch goal with
+ | [ H' : context[X] |- _ ] => idtac H
+ end
+ | fail 1 "could not find" X ]
+ end.
diff --git a/test-suite/bugs/closed/5486.v b/test-suite/bugs/closed/5486.v
new file mode 100644
index 00000000..39013316
--- /dev/null
+++ b/test-suite/bugs/closed/5486.v
@@ -0,0 +1,15 @@
+Axiom proof_admitted : False.
+Tactic Notation "admit" := abstract case proof_admitted.
+Goal forall (T : Type) (p : prod (prod T T) bool) (Fm : Set) (f : Fm) (k :
+ forall _ : T, Fm),
+ @eq Fm
+ (k
+ match p return T with
+ | pair p0 swap => fst p0
+ end) f.
+ intros.
+ (* next statement failed in Bug 5486 *)
+ match goal with
+ | [ |- ?f (let (a, b) := ?d in @?e a b) = ?rhs ]
+ => pose (let (a, b) := d in e a b) as t0
+ end.
diff --git a/test-suite/bugs/closed/5487.v b/test-suite/bugs/closed/5487.v
new file mode 100644
index 00000000..9b995f45
--- /dev/null
+++ b/test-suite/bugs/closed/5487.v
@@ -0,0 +1,9 @@
+(* Was a collision between an ltac pattern variable and an evar *)
+
+Goal forall n, exists m, n = m :> nat.
+Proof.
+ eexists.
+ Fail match goal with
+ | [ |- ?x = ?y ]
+ => match x with y => idtac end
+ end.
diff --git a/test-suite/bugs/closed/5501.v b/test-suite/bugs/closed/5501.v
new file mode 100644
index 00000000..24739a36
--- /dev/null
+++ b/test-suite/bugs/closed/5501.v
@@ -0,0 +1,21 @@
+Set Universe Polymorphism.
+
+Record Pred@{A} :=
+ { car :> Type@{A}
+ ; P : car -> Prop
+ }.
+
+Class All@{A} (A : Pred@{A}) : Type :=
+ { proof : forall (a : A), P A a
+ }.
+
+Record Pred_All@{A} : Type :=
+ { P' :> Pred@{A}
+ ; P'_All : All P'
+ }.
+
+Global Instance Pred_All_instance (A : Pred_All) : All A := P'_All A.
+
+Definition Pred_All_proof {A : Pred_All} (a : A) : P A a.
+Proof.
+solve[auto using proof].
diff --git a/test-suite/bugs/closed/5522.v b/test-suite/bugs/closed/5522.v
new file mode 100644
index 00000000..0fae9ede
--- /dev/null
+++ b/test-suite/bugs/closed/5522.v
@@ -0,0 +1,7 @@
+(* Checking support for scope delimiters and as clauses in 'pat
+ applied to notations with binders *)
+
+Notation "'multifun' x .. y 'in' f" := (fun x => .. (fun y => f) .. )
+ (at level 200, x binder, y binder, f at level 200).
+
+Check multifun '((x, y)%core as z) in (x+y,0)=z.
diff --git a/test-suite/bugs/closed/5523.v b/test-suite/bugs/closed/5523.v
new file mode 100644
index 00000000..d7582a37
--- /dev/null
+++ b/test-suite/bugs/closed/5523.v
@@ -0,0 +1,6 @@
+(* Support for complex constructions in recursive notations, especially "match". *)
+
+Definition Let_In {A P} (x : A) (f : forall a : A, P a) : P x := let y := x in f y.
+Notation "'dlet' x , y := v 'in' ( a , b , .. , c )"
+ := (Let_In v (fun '(x, y) => pair .. (pair a b) .. c))
+ (at level 0).
diff --git a/test-suite/bugs/closed/5526.v b/test-suite/bugs/closed/5526.v
new file mode 100644
index 00000000..88f219be
--- /dev/null
+++ b/test-suite/bugs/closed/5526.v
@@ -0,0 +1,3 @@
+Fail Notation "x === x" := (eq_refl x) (at level 10).
+Reserved Notation "x === x" (only printing, at level 10).
+Notation "x === x" := (eq_refl x) (only printing).
diff --git a/test-suite/bugs/closed/5532.v b/test-suite/bugs/closed/5532.v
new file mode 100644
index 00000000..ee5446e5
--- /dev/null
+++ b/test-suite/bugs/closed/5532.v
@@ -0,0 +1,15 @@
+(* A wish granted by the new support for patterns in notations *)
+
+Local Notation mkmatch0 e p
+ := match e with
+ | p => true
+ | _ => false
+ end.
+Local Notation "'mkmatch' [[ e ]] [[ p ]]"
+ := match e with
+ | p => true
+ | _ => false
+ end
+ (at level 0, p pattern).
+Check mkmatch0 _ ((0, 0)%core).
+Check mkmatch [[ _ ]] [[ ((0, 0)%core) ]].
diff --git a/test-suite/bugs/closed/5539.v b/test-suite/bugs/closed/5539.v
new file mode 100644
index 00000000..48e5568e
--- /dev/null
+++ b/test-suite/bugs/closed/5539.v
@@ -0,0 +1,15 @@
+Set Universe Polymorphism.
+
+Inductive D : nat -> Type :=
+| DO : D O
+| DS n : D n -> D (S n).
+
+Fixpoint follow (n : nat) : D n -> Prop :=
+ match n with
+ | O => fun d => let 'DO := d in True
+ | S n' => fun d => (let 'DS _ d' := d in fun f => f d') (follow n')
+ end.
+
+Definition step (n : nat) (d : D n) (H : follow n d) :
+ follow (S n) (DS n d)
+ := H.
diff --git a/test-suite/bugs/closed/5550.v b/test-suite/bugs/closed/5550.v
new file mode 100644
index 00000000..bb122248
--- /dev/null
+++ b/test-suite/bugs/closed/5550.v
@@ -0,0 +1,10 @@
+Section foo.
+
+ Variable bar : Prop.
+ Variable H : bar.
+
+ Goal bar.
+ typeclasses eauto with foobar.
+ Qed.
+
+End foo.
diff --git a/test-suite/bugs/closed/5578.v b/test-suite/bugs/closed/5578.v
new file mode 100644
index 00000000..b9f0bc45
--- /dev/null
+++ b/test-suite/bugs/closed/5578.v
@@ -0,0 +1,57 @@
+(* File reduced by coq-bug-finder from original input, then from 1549 lines to 298 lines, then from 277 lines to 133 lines, then from 985 lines to 138 lines, then from 206 lines to 139 lines, then from 203 lines to 142 lines, then from 262 lines to 152 lines, then from 567 lines to 151 lines, then from 3746 lines to 151 lines, then from 577 lines to 151 lines, then from 187 lines to 151 lines, thenfrom 981 lines to 940 lines, then from 938 lines to 175 lines, then from 589 lines to 205 lines, then from 3797 lines to 205 lines, then from 628 lines to 206 lines, then from 238 lines to 205 lines, then from 1346 lines to 213 lines, then from 633 lines to 214 lines, then from 243 lines to 213 lines, then from 5656 lines to 245 lines, then from 661 lines to 272 lines, then from 3856 lines to 352 lines, then from 1266 lines to 407 lines, then from 421 lines to 406 lines, then from 424 lines to 91 lines, then from 105 lines to 91 lines, then from 85 lines to 55 lines, then from 69 lines to 55 lines *)
+(* coqc version trunk (May 2017) compiled on May 30 2017 13:28:59 with OCaml
+4.02.3
+ coqtop version jgross-Leopard-WS:/home/jgross/Downloads/coq/coq-trunk,trunk (fd36c0451c26e44b1b7e93299d3367ad2d35fee3) *)
+
+Class Proper {A} (R : A -> A -> Prop) (m : A) := mkp : R m m.
+Definition respectful {A B} (R : A -> A -> Prop) (R' : B -> B -> Prop) (f g : A -> B) := forall x y, R x y -> R' (f x) (g y).
+Set Implicit Arguments.
+
+Class EqDec (A : Set) := {
+ eqb : A -> A -> bool ;
+ eqb_leibniz : forall x y, eqb x y = true <-> x = y
+}.
+
+Infix "?=" := eqb (at level 70) : eq_scope.
+
+Inductive Comp : Set -> Type :=
+| Bind : forall (A B : Set), Comp B -> (B -> Comp A) -> Comp A.
+
+Open Scope eq_scope.
+
+Goal forall (Rat : Set) (PositiveMap_t : Set -> Set)
+ type (t : type) (interp_type_list_message interp_type_rand interp_type_message : nat -> Set),
+ (forall eta : nat, PositiveMap_t (interp_type_rand eta) -> interp_type_list_message eta -> interp_type_message eta) ->
+ ((nat -> Rat) -> Prop) ->
+ forall (interp_type_sbool : nat -> Set) (interp_type0 : type -> nat -> Set),
+ (forall eta : nat,
+ (interp_type_list_message eta -> interp_type_message eta) -> PositiveMap_t (interp_type_rand eta) -> interp_type0 t eta)
+ -> (forall (t0 : type) (eta : nat), EqDec (interp_type0 t0 eta))
+ -> (bool -> Comp bool) -> False.
+ clear.
+ intros Rat PositiveMap_t type t interp_type_list_message interp_type_rand interp_type_message adv negligible interp_type_sbool
+ interp_type interp_term_fixed_t_x
+ EqDec_interp_type ret_bool.
+ assert (forall f adv' k
+ (lem : forall (eta : nat) (evil_rands rands : PositiveMap_t
+(interp_type_rand eta)),
+ (interp_term_fixed_t_x eta (adv eta evil_rands) rands
+ ?= interp_term_fixed_t_x eta (adv eta evil_rands) rands) = true),
+ (forall (eta : nat), Proper (respectful eq eq) (f eta))
+ -> negligible
+ (fun eta : nat =>
+ f eta (
+ (Bind (k eta) (fun rands =>
+ ret_bool (interp_term_fixed_t_x eta (adv' eta) rands ?= interp_term_fixed_t_x eta (adv' eta) rands)))))).
+ Undo.
+ assert (forall f adv' k
+ (lem : forall (eta : nat) (rands : PositiveMap_t
+(interp_type_rand eta)),
+ (interp_term_fixed_t_x eta (adv' eta) rands ?= interp_term_fixed_t_x eta (adv' eta) rands) = true),
+ (forall (eta : nat), Proper (respectful eq eq) (f eta))
+ -> negligible
+ (fun eta : nat =>
+ f eta (
+ (Bind (k eta) (fun rands =>
+ ret_bool (interp_term_fixed_t_x eta (adv' eta) rands ?= interp_term_fixed_t_x eta (adv' eta) rands)))))).
+ (* Error: Anomaly "Signature and its instance do not match." Please report at http://coq.inria.fr/bugs/. *)
diff --git a/test-suite/bugs/closed/5598.v b/test-suite/bugs/closed/5598.v
new file mode 100644
index 00000000..55fef1a5
--- /dev/null
+++ b/test-suite/bugs/closed/5598.v
@@ -0,0 +1,8 @@
+(* Checking when discharge of an existing class is possible *)
+Section foo.
+ Context {T} (a : T) (b : T).
+ Let k := eq_refl a.
+ Existing Class eq.
+ Fail Global Existing Instance k.
+ Existing Instance k.
+End foo.
diff --git a/test-suite/bugs/closed/5608.v b/test-suite/bugs/closed/5608.v
new file mode 100644
index 00000000..f02eae69
--- /dev/null
+++ b/test-suite/bugs/closed/5608.v
@@ -0,0 +1,33 @@
+Reserved Notation "'slet' x .. y := A 'in' b"
+ (at level 200, x binder, y binder, b at level 200, format "'slet' x .. y := A 'in' '//' b").
+Reserved Notation "T x [1] = { A } ; 'return' ( b0 , b1 , .. , b2 )"
+ (at level 200, format "T x [1] = { A } ; '//' 'return' ( b0 , b1 , .. , b2 )").
+
+Delimit Scope ctype_scope with ctype.
+Local Open Scope ctype_scope.
+Delimit Scope expr_scope with expr.
+Inductive base_type := TZ | TWord (logsz : nat).
+Inductive flat_type := Tbase (T : base_type) | Prod (A B : flat_type).
+Context {var : base_type -> Type}.
+Fixpoint interp_flat_type (interp_base_type : base_type -> Type) (t :
+flat_type) :=
+ match t with
+ | Tbase t => interp_base_type t
+ | Prod x y => prod (interp_flat_type interp_base_type x) (interp_flat_type
+interp_base_type y)
+ end.
+Inductive exprf : flat_type -> Type :=
+| Var {t} (v : var t) : exprf (Tbase t)
+| LetIn {tx} (ex : exprf tx) {tC} (eC : interp_flat_type var tx -> exprf tC) :
+exprf tC
+| Pair {tx} (ex : exprf tx) {ty} (ey : exprf ty) : exprf (Prod tx ty).
+Global Arguments Var {_} _.
+Global Arguments LetIn {_} _ {_} _.
+Global Arguments Pair {_} _ {_} _.
+Notation "T x [1] = { A } ; 'return' ( b0 , b1 , .. , b2 )" := (LetIn (tx:=T) A
+(fun x => Pair .. (Pair b0%expr b1%expr) .. b2%expr)) : expr_scope.
+Definition foo :=
+ (fun x3 =>
+ (LetIn (Var x3) (fun x18 : var TZ
+ => (Pair (Var x18) (Var x18))))).
+Print foo.
diff --git a/test-suite/bugs/closed/5618.v b/test-suite/bugs/closed/5618.v
new file mode 100644
index 00000000..47e0e92d
--- /dev/null
+++ b/test-suite/bugs/closed/5618.v
@@ -0,0 +1,9 @@
+Require Import FunInd.
+
+Function test {T} (v : T) (x : nat) : nat :=
+ match x with
+ | 0 => 0
+ | S x' => test v x'
+ end.
+
+Check R_test_complete.
diff --git a/test-suite/bugs/closed/5641.v b/test-suite/bugs/closed/5641.v
new file mode 100644
index 00000000..9f3246f3
--- /dev/null
+++ b/test-suite/bugs/closed/5641.v
@@ -0,0 +1,6 @@
+Set Universe Polymorphism.
+
+Definition foo@{i j} (A : Type@{i}) : Type@{j}.
+Proof.
+abstract (exact ltac:(abstract (exact A))).
+Defined.
diff --git a/test-suite/bugs/closed/5666.v b/test-suite/bugs/closed/5666.v
new file mode 100644
index 00000000..d55a6e57
--- /dev/null
+++ b/test-suite/bugs/closed/5666.v
@@ -0,0 +1,4 @@
+Inductive foo := Foo : False -> foo.
+Goal foo.
+try (constructor ; fail 0).
+Fail try (constructor ; fail 1).
diff --git a/test-suite/bugs/closed/5671.v b/test-suite/bugs/closed/5671.v
new file mode 100644
index 00000000..c9a08504
--- /dev/null
+++ b/test-suite/bugs/closed/5671.v
@@ -0,0 +1,7 @@
+(* Fixing Meta-unclean specialize *)
+
+Require Import Setoid.
+Axiom a : forall x, x=0 -> True.
+Lemma lem (x y1 y2:nat) (H:x=0) (H0:eq y1 y2) : y1 = y2.
+specialize a with (1:=H). clear H x. intros _.
+setoid_rewrite H0.
diff --git a/test-suite/bugs/closed/5683.v b/test-suite/bugs/closed/5683.v
new file mode 100644
index 00000000..b5c6a48e
--- /dev/null
+++ b/test-suite/bugs/closed/5683.v
@@ -0,0 +1,71 @@
+Require Import Program.Tactics.
+Require Import FunctionalExtensionality.
+
+Inductive Succ A :=
+| Succ_O : Succ A
+| Succ_S : A -> Succ A.
+Arguments Succ_O {A}.
+Arguments Succ_S {A} _.
+
+Inductive Zero : Type :=.
+
+Inductive ty :=
+| ty_nat : ty
+| ty_arr : ty -> ty -> ty.
+
+Inductive term A :=
+| term_abs : ty -> term (Succ A) -> term A
+| term_app : term A -> term A -> term A
+| term_var : A -> term A
+| term_nat : nat -> term A.
+Arguments term_abs {A} _ _.
+Arguments term_app {A} _ _.
+Arguments term_var {A} _.
+Arguments term_nat {A} _.
+
+Class Functor F :=
+{
+ ret : forall {A}, A -> F A;
+ fmap : forall {A B}, (A -> B) -> F A -> F B;
+ fmap_id : forall {A} (fa : F A), fmap (@id A) fa = fa;
+ fmap_compose : forall {A B C} (fa : F A) (g : B -> C) (h : A -> B), fmap (fun
+a => g (h a)) fa = fmap g (fmap h fa)
+}.
+
+Class Monad M `{Functor M} :=
+{
+ bind : forall {A B}, M A -> (A -> M B) -> M B;
+ ret_left_id : forall {A B} (a : A) (f : A -> M B), bind (ret a) f = f a;
+ ret_right_id : forall {A} (m : M A), bind m ret = m;
+ bind_assoc : forall {A B C} (m : M A) (f : A -> M B) (g : B -> M C), bind
+(bind m f) g = bind m (fun x => bind (f x) g)
+}.
+
+Instance Succ_Functor : Functor Succ.
+Proof.
+ unshelve econstructor.
+ - intros A B f fa.
+ destruct fa.
+ + apply Succ_O.
+ + apply Succ_S. tauto.
+ - intros. apply Succ_S. assumption.
+ - intros A [|a]; reflexivity.
+ - intros A B C [|a] g h; reflexivity.
+Defined.
+
+(* Anomaly: Not an arity *)
+Program Fixpoint term_bind {A B} (tm : term A) (f : A -> term B) : term B :=
+ let Succ_f (var : Succ A) :=
+ match var with
+ | Succ_O => term_var Succ_O
+ | Succ_S var' => _
+ end in
+ match tm with
+ | term_app tm1 tm2 => term_app (term_bind tm1 f) (term_bind tm2 f)
+ | term_abs ty body => term_abs ty (term_bind body Succ_f)
+ | term_var a => f a
+ | term_nat n => term_nat n
+ end.
+Next Obligation.
+ intros.
+Admitted.
diff --git a/test-suite/bugs/closed/5692.v b/test-suite/bugs/closed/5692.v
new file mode 100644
index 00000000..4c8d464f
--- /dev/null
+++ b/test-suite/bugs/closed/5692.v
@@ -0,0 +1,88 @@
+Set Primitive Projections.
+Require Import ZArith ssreflect.
+
+Module Test1.
+
+Structure semigroup := SemiGroup {
+ sg_car :> Type;
+ sg_op : sg_car -> sg_car -> sg_car;
+}.
+
+Structure monoid := Monoid {
+ monoid_car :> Type;
+ monoid_op : monoid_car -> monoid_car -> monoid_car;
+ monoid_unit : monoid_car;
+}.
+
+Coercion monoid_sg (X : monoid) : semigroup :=
+ SemiGroup (monoid_car X) (monoid_op X).
+Canonical Structure monoid_sg.
+
+Parameter X : monoid.
+Parameter x y : X.
+
+Check (sg_op _ x y).
+
+End Test1.
+
+Module Test2.
+
+Structure semigroup := SemiGroup {
+ sg_car :> Type;
+ sg_op : sg_car -> sg_car -> sg_car;
+}.
+
+Structure monoid := Monoid {
+ monoid_car :> Type;
+ monoid_op : monoid_car -> monoid_car -> monoid_car;
+ monoid_unit : monoid_car;
+ monoid_left_id x : monoid_op monoid_unit x = x;
+}.
+
+Coercion monoid_sg (X : monoid) : semigroup :=
+ SemiGroup (monoid_car X) (monoid_op X).
+Canonical Structure monoid_sg.
+
+Canonical Structure nat_sg := SemiGroup nat plus.
+Canonical Structure nat_monoid := Monoid nat plus 0 plus_O_n.
+
+Lemma foo (x : nat) : 0 + x = x.
+Proof.
+apply monoid_left_id.
+Qed.
+
+End Test2.
+
+Module Test3.
+
+Structure semigroup := SemiGroup {
+ sg_car :> Type;
+ sg_op : sg_car -> sg_car -> sg_car;
+}.
+
+Structure group := Something {
+ group_car :> Type;
+ group_op : group_car -> group_car -> group_car;
+ group_neg : group_car -> group_car;
+ group_neg_op' x y : group_neg (group_op x y) = group_op (group_neg x) (group_neg y)
+}.
+
+Coercion group_sg (X : group) : semigroup :=
+ SemiGroup (group_car X) (group_op X).
+Canonical Structure group_sg.
+
+Axiom group_neg_op : forall (X : group) (x y : X),
+ group_neg X (sg_op (group_sg X) x y) = sg_op (group_sg X) (group_neg X x) (group_neg X y).
+
+Canonical Structure Z_sg := SemiGroup Z Z.add .
+Canonical Structure Z_group := Something Z Z.add Z.opp Z.opp_add_distr.
+
+Lemma foo (x y : Z) :
+ sg_op Z_sg (group_neg Z_group x) (group_neg Z_group y) =
+ group_neg Z_group (sg_op Z_sg x y).
+Proof.
+ rewrite -group_neg_op.
+ reflexivity.
+Qed.
+
+End Test3.
diff --git a/test-suite/bugs/closed/5697.v b/test-suite/bugs/closed/5697.v
new file mode 100644
index 00000000..c653f992
--- /dev/null
+++ b/test-suite/bugs/closed/5697.v
@@ -0,0 +1,19 @@
+Set Primitive Projections.
+
+Record foo : Type := Foo { foo_car: nat }.
+
+Goal forall x y : nat, x <> y -> Foo x <> Foo y.
+Proof.
+intros.
+intros H'.
+congruence.
+Qed.
+
+Record bar (A : Type) : Type := Bar { bar_car: A }.
+
+Goal forall x y : nat, x <> y -> Bar nat x <> Bar nat y.
+Proof.
+intros.
+intros H'.
+congruence.
+Qed.
diff --git a/test-suite/bugs/closed/5707.v b/test-suite/bugs/closed/5707.v
new file mode 100644
index 00000000..785844c6
--- /dev/null
+++ b/test-suite/bugs/closed/5707.v
@@ -0,0 +1,12 @@
+(* Destruct and primitive projections *)
+
+(* Checking the (superficial) part of #5707:
+ "destruct" should be able to use non-dependent case analysis when
+ dependent case analysis is not available and unneeded *)
+
+Set Primitive Projections.
+
+Inductive foo := Foo { proj1 : nat; proj2 : nat }.
+
+Goal forall x : foo, True.
+Proof. intros x. destruct x.
diff --git a/test-suite/bugs/closed/5713.v b/test-suite/bugs/closed/5713.v
new file mode 100644
index 00000000..9daf9647
--- /dev/null
+++ b/test-suite/bugs/closed/5713.v
@@ -0,0 +1,15 @@
+(* Checking that classical_right/classical_left work in an empty context *)
+
+Require Import Classical.
+
+Parameter A:Prop.
+
+Goal A \/ ~A.
+classical_right.
+assumption.
+Qed.
+
+Goal ~A \/ A.
+classical_left.
+assumption.
+Qed.
diff --git a/test-suite/bugs/closed/5717.v b/test-suite/bugs/closed/5717.v
new file mode 100644
index 00000000..1bfd917d
--- /dev/null
+++ b/test-suite/bugs/closed/5717.v
@@ -0,0 +1,5 @@
+Definition foo@{i} (A : Type@{i}) (l : list A) :=
+ match l with
+ | nil => nil
+ | cons _ t => t
+ end.
diff --git a/test-suite/bugs/closed/5726.v b/test-suite/bugs/closed/5726.v
new file mode 100644
index 00000000..53ef4735
--- /dev/null
+++ b/test-suite/bugs/closed/5726.v
@@ -0,0 +1,34 @@
+Set Universe Polymorphism.
+Set Printing Universes.
+
+Module GlobalReference.
+
+ Definition type' := Type.
+ Notation type := type'.
+ Check type@{Set}.
+
+End GlobalReference.
+
+Module TypeLiteral.
+
+ Notation type := Type.
+ Check type@{Set}.
+ Check type@{Prop}.
+
+End TypeLiteral.
+
+Module ExplicitSort.
+ Monomorphic Universe u.
+ Notation foo := Type@{u}.
+ Fail Check foo@{Set}.
+ Fail Check foo@{u}.
+
+ Notation bar := Type.
+ Check bar@{u}.
+End ExplicitSort.
+
+Module PropNotationUnsupported.
+ Notation foo := Prop.
+ Fail Check foo@{Set}.
+ Fail Check foo@{Type}.
+End PropNotationUnsupported.
diff --git a/test-suite/bugs/closed/5741.v b/test-suite/bugs/closed/5741.v
new file mode 100644
index 00000000..f6598f19
--- /dev/null
+++ b/test-suite/bugs/closed/5741.v
@@ -0,0 +1,4 @@
+(* Check no anomaly in info_trivial *)
+
+Goal True.
+info_trivial.
diff --git a/test-suite/bugs/closed/5749.v b/test-suite/bugs/closed/5749.v
new file mode 100644
index 00000000..81bfe351
--- /dev/null
+++ b/test-suite/bugs/closed/5749.v
@@ -0,0 +1,18 @@
+(* Checking computation of free vars of a term for generalization *)
+
+Definition Decision := fun P : Prop => {P} + {~ P}.
+Class SetUnfold (P Q : Prop) : Prop := Build_SetUnfold { set_unfold : P <-> Q
+}.
+
+Section Filter_Help.
+
+ Context {A: Type}.
+ Context (fold_right : forall A B : Type, (B -> A -> A) -> A -> list B -> A).
+ Definition lType2 := (sigT (fun (P : A -> Prop) => forall a, Decision (P
+a))).
+ Definition test (X: lType2) := let (x, _) := X in x.
+
+ Global Instance foo `{fhl1 : list lType2} m Q:
+ SetUnfold (Q)
+ (fold_right _ _ (fun (s : lType2) => let (P, _) := s in and (P
+m)) (Q) (fhl1)).
diff --git a/test-suite/bugs/closed/5750.v b/test-suite/bugs/closed/5750.v
new file mode 100644
index 00000000..6d0e21f5
--- /dev/null
+++ b/test-suite/bugs/closed/5750.v
@@ -0,0 +1,3 @@
+(* Check printability of the hole of the context *)
+Goal 0 = 0.
+match goal with |- context c [0] => idtac c end.
diff --git a/test-suite/bugs/closed/5755.v b/test-suite/bugs/closed/5755.v
new file mode 100644
index 00000000..e07fdcf8
--- /dev/null
+++ b/test-suite/bugs/closed/5755.v
@@ -0,0 +1,16 @@
+(* Sections taking care of let-ins for inductive types *)
+
+Section Foo.
+
+Inductive foo (A : Type) (x : A) (y := x) (y : A) := Foo.
+
+End Foo.
+
+Section Foo2.
+
+Variable B : Type.
+Variable b : B.
+Let c := b.
+Inductive foo2 (A : Type) (x : A) (y := x) (y : A) := Foo2 : c=c -> foo2 A x y.
+
+End Foo2.
diff --git a/test-suite/bugs/closed/5757.v b/test-suite/bugs/closed/5757.v
new file mode 100644
index 00000000..0d0f2eed
--- /dev/null
+++ b/test-suite/bugs/closed/5757.v
@@ -0,0 +1,76 @@
+(* Check that resolved status of evars follows "restrict" *)
+
+Axiom H : forall (v : nat), Some 0 = Some v -> True.
+Lemma L : True.
+eapply H with _;
+match goal with
+ | |- Some 0 = Some ?v => change (Some (0+0) = Some v)
+end.
+Abort.
+
+(* The original example *)
+
+Set Default Proof Using "Type".
+
+Module heap_lang.
+
+Inductive expr :=
+ | InjR (e : expr).
+
+Inductive val :=
+ | InjRV (v : val).
+
+Bind Scope val_scope with val.
+
+Fixpoint of_val (v : val) : expr :=
+ match v with
+ | InjRV v => InjR (of_val v)
+ end.
+
+Fixpoint to_val (e : expr) : option val := None.
+
+End heap_lang.
+Export heap_lang.
+
+Module W.
+Inductive expr :=
+ | Val (v : val)
+ (* Sums *)
+ | InjR (e : expr).
+
+Fixpoint to_expr (e : expr) : heap_lang.expr :=
+ match e with
+ | Val v => of_val v
+ | InjR e => heap_lang.InjR (to_expr e)
+ end.
+
+End W.
+
+
+
+Section Tests.
+
+ Context (iProp: Type).
+ Context (WPre: expr -> Prop).
+
+ Context (tac_wp_alloc :
+ forall (e : expr) (v : val),
+ to_val e = Some v -> WPre e).
+
+ Lemma push_atomic_spec (x: val) :
+ WPre (InjR (of_val x)).
+ Proof.
+(* This works. *)
+eapply tac_wp_alloc with _.
+match goal with
+ | |- to_val ?e = Some ?v =>
+ change (to_val (W.to_expr (W.InjR (W.Val x))) = Some v)
+end.
+Undo. Undo.
+(* This is fixed *)
+eapply tac_wp_alloc with _;
+match goal with
+ | |- to_val ?e = Some ?v =>
+ change (to_val (W.to_expr (W.InjR (W.Val x))) = Some v)
+end.
+Abort.
diff --git a/test-suite/bugs/closed/5761.v b/test-suite/bugs/closed/5761.v
new file mode 100644
index 00000000..6f28d198
--- /dev/null
+++ b/test-suite/bugs/closed/5761.v
@@ -0,0 +1,126 @@
+Set Primitive Projections.
+Record mix := { a : nat ; b : a = a ; c : nat ; d : a = c ; e : nat ; f : nat }.
+Ltac strip_args T ctor :=
+ lazymatch type of ctor with
+ | context[T]
+ => match eval cbv beta in ctor with
+ | ?ctor _ => strip_args T ctor
+ | _ => ctor
+ end
+ end.
+Ltac get_ctor T :=
+ let full_ctor := constr:(ltac:(let x := fresh in intro x; econstructor; apply
+x) : T -> T) in
+ let ctor := constr:(fun x : T => ltac:(let v := strip_args T (full_ctor x) in
+exact v)) in
+ lazymatch ctor with
+ | fun _ => ?ctor => ctor
+ end.
+Ltac uncurry_domain f :=
+ lazymatch type of f with
+ | forall (a : ?A) (b : @ ?B a), _
+ => uncurry_domain (fun ab : { a : A & B a } => f (projT1 ab) (projT2 ab))
+ | _ => eval cbv beta in f
+ end.
+Ltac get_of_sigma T :=
+ let ctor := get_ctor T in
+ uncurry_domain ctor.
+Ltac repeat_existT :=
+ lazymatch goal with
+ | [ |- sigT _ ] => simple refine (existT _ _ _); [ repeat_existT | shelve ]
+ | _ => shelve
+ end.
+ Ltac prove_to_of_sigma_goal of_sigma :=
+ let v := fresh "v" in
+ simple refine (exist _ _ (fun v => _ : id _ (of_sigma v) = v));
+ try unfold of_sigma;
+ [ intro v; destruct v; repeat_existT
+ | cbv beta;
+ repeat match goal with
+ | [ |- context[projT2 ?k] ]
+ => let x := fresh "x" in
+ is_var k;
+ destruct k as [k x]; cbn [projT1 projT2]
+ end;
+ unfold id; reflexivity ].
+Ltac prove_to_of_sigma of_sigma :=
+ constr:(
+ ltac:(prove_to_of_sigma_goal of_sigma)
+ : { to_sigma : _ | forall v, id to_sigma (of_sigma v) = v }).
+Ltac get_to_sigma_gen of_sigma :=
+ let v := prove_to_of_sigma of_sigma in
+ eval hnf in (proj1_sig v).
+Ltac get_to_sigma T :=
+ let of_sigma := get_of_sigma T in
+ get_to_sigma_gen of_sigma.
+Definition to_sigma := ltac:(let v := get_to_sigma mix in exact v).
+(* Error:
+In nested Ltac calls to "get_to_sigma", "get_to_sigma_gen",
+"prove_to_of_sigma",
+"(_ : {to_sigma : _ | forall v, id to_sigma (of_sigma v) = v})" (with
+of_sigma:=fun
+ ab : {_
+ : {_
+ : {ab : {_ : {a : nat & a = a} & nat} &
+ projT1 (projT1 ab) = projT2 ab} & nat} & nat} =>
+ {|
+ a := projT1 (projT1 (projT1 (projT1 (projT1 ab))));
+ b := projT2 (projT1 (projT1 (projT1 (projT1 ab))));
+ c := projT2 (projT1 (projT1 (projT1 ab)));
+ d := projT2 (projT1 (projT1 ab));
+ e := projT2 (projT1 ab);
+ f := projT2 ab |}) and "prove_to_of_sigma_goal", last call failed.
+Anomaly "Uncaught exception Not_found." Please report at
+http://coq.inria.fr/bugs/.
+frame @ file "toplevel/coqtop.ml", line 640, characters 6-22
+frame @ file "list.ml", line 73, characters 12-15
+frame @ file "toplevel/vernac.ml", line 344, characters 2-13
+frame @ file "toplevel/vernac.ml", line 308, characters 14-75
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "lib/flags.ml", line 141, characters 19-40
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "lib/flags.ml", line 11, characters 15-18
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "toplevel/vernac.ml", line 167, characters 6-16
+frame @ file "toplevel/vernac.ml", line 151, characters 26-39
+frame @ file "stm/stm.ml", line 2365, characters 2-35
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "stm/stm.ml", line 2355, characters 4-48
+frame @ file "stm/stm.ml", line 2321, characters 4-100
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "stm/stm.ml", line 832, characters 6-10
+frame @ file "stm/stm.ml", line 2206, characters 10-32
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "stm/stm.ml", line 975, characters 8-81
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "vernac/vernacentries.ml", line 2216, characters 10-389
+frame @ file "lib/flags.ml", line 141, characters 19-40
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "lib/flags.ml", line 11, characters 15-18
+frame @ file "vernac/command.ml", line 150, characters 4-56
+frame @ file "interp/constrintern.ml", line 2046, characters 2-73
+frame @ file "pretyping/pretyping.ml", line 1194, characters 19-77
+frame @ file "pretyping/pretyping.ml", line 1155, characters 8-72
+frame @ file "pretyping/pretyping.ml", line 628, characters 23-65
+frame @ file "plugins/ltac/tacinterp.ml", line 2095, characters 21-61
+frame @ file "proofs/pfedit.ml", line 178, characters 6-22
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "proofs/pfedit.ml", line 174, characters 8-36
+frame @ file "proofs/proof.ml", line 351, characters 4-30
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "engine/proofview.ml", line 1222, characters 8-12
+frame @ file "plugins/ltac/tacinterp.ml", line 2020, characters 19-36
+frame @ file "plugins/ltac/tacinterp.ml", line 618, characters 4-70
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "plugins/ltac/tacinterp.ml", line 214, characters 6-9
+frame @ file "pretyping/pretyping.ml", line 1198, characters 19-62
+frame @ file "pretyping/pretyping.ml", line 1155, characters 8-72
+raise @ unknown
+frame @ file "pretyping/pretyping.ml", line 628, characters 23-65
+frame @ file "plugins/ltac/tacinterp.ml", line 2095, characters 21-61
+frame @ file "proofs/pfedit.ml", line 178, characters 6-22
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+frame @ file "proofs/pfedit.ml", line 174, characters 8-36
+frame @ file "proofs/proof.ml", line 351, characters 4-30
+raise @ file "lib/exninfo.ml", line 63, characters 8-15
+ *)
diff --git a/test-suite/bugs/closed/5762.v b/test-suite/bugs/closed/5762.v
new file mode 100644
index 00000000..55d36bd7
--- /dev/null
+++ b/test-suite/bugs/closed/5762.v
@@ -0,0 +1,34 @@
+(* Supporting imp. params. in inductive or fixpoints mutually defined with a notation *)
+
+Reserved Notation "* a" (at level 70).
+Inductive P {n : nat} : nat -> Prop :=
+| c m : *m
+where "* m" := (P m).
+
+Reserved Notation "##".
+Inductive I {A:Type} := C : ## where "##" := I.
+
+(* The following was working in 8.6 *)
+
+Require Import Vector.
+
+Reserved Notation "# a" (at level 70).
+Fixpoint f {n : nat} (v:Vector.t nat n) : nat :=
+ match v with
+ | nil _ => 0
+ | cons _ _ _ v => S (#v)
+ end
+where "# v" := (f v).
+
+(* The following was working in 8.6 *)
+
+Reserved Notation "%% a" (at level 70).
+Record R :=
+ {g : forall {A} (a:A), a=a where "%% x" := (g x);
+ k : %% 0 = eq_refl}.
+
+(* An extra example *)
+
+Module A.
+Inductive I {A:Type} := C : # 0 -> I where "# I" := (I = I) : I_scope.
+End A.
diff --git a/test-suite/bugs/closed/5765.v b/test-suite/bugs/closed/5765.v
new file mode 100644
index 00000000..343ab493
--- /dev/null
+++ b/test-suite/bugs/closed/5765.v
@@ -0,0 +1,3 @@
+(* 'pat binder not (yet?) allowed in parameters of inductive types *)
+
+Fail Inductive X '(a,b) := x.
diff --git a/test-suite/bugs/closed/5769.v b/test-suite/bugs/closed/5769.v
new file mode 100644
index 00000000..42573aad
--- /dev/null
+++ b/test-suite/bugs/closed/5769.v
@@ -0,0 +1,20 @@
+(* Check a few naming heuristics based on types *)
+(* was buggy for types names _something *)
+
+Inductive _foo :=.
+Lemma bob : (sigT (fun x : nat => _foo)) -> _foo.
+destruct 1.
+exact _f.
+Abort.
+
+Inductive _'Foo :=.
+Lemma bob : (sigT (fun x : nat => _'Foo)) -> _'Foo.
+destruct 1.
+exact _'f.
+Abort.
+
+Inductive ____ :=.
+Lemma bob : (sigT (fun x : nat => ____)) -> ____.
+destruct 1.
+exact x0.
+Abort.
diff --git a/test-suite/bugs/closed/5786.v b/test-suite/bugs/closed/5786.v
new file mode 100644
index 00000000..20301ec4
--- /dev/null
+++ b/test-suite/bugs/closed/5786.v
@@ -0,0 +1,29 @@
+(* Printing all kinds of Ltac generic arguments *)
+
+Tactic Notation "myidtac" string(v) := idtac v.
+Goal True.
+myidtac "foo".
+Abort.
+
+Tactic Notation "myidtac2" ref(c) := idtac c.
+Goal True.
+myidtac2 True.
+Abort.
+
+Tactic Notation "myidtac3" preident(s) := idtac s.
+Goal True.
+myidtac3 foo.
+Abort.
+
+Tactic Notation "myidtac4" int_or_var(n) := idtac n.
+Goal True.
+myidtac4 3.
+Abort.
+
+Tactic Notation "myidtac5" ident(id) := idtac id.
+Goal True.
+myidtac5 foo.
+Abort.
+
+
+
diff --git a/test-suite/bugs/closed/5790.v b/test-suite/bugs/closed/5790.v
new file mode 100644
index 00000000..6c93a390
--- /dev/null
+++ b/test-suite/bugs/closed/5790.v
@@ -0,0 +1,7 @@
+Set Universe Polymorphism.
+Section foo.
+Context (v : Type).
+Axiom a : True <-> False.
+
+Hint Resolve -> a.
+End foo.
diff --git a/test-suite/bugs/closed/846.v b/test-suite/bugs/closed/5797.v
index ee5ec1fa..ee5ec1fa 100644
--- a/test-suite/bugs/closed/846.v
+++ b/test-suite/bugs/closed/5797.v
diff --git a/test-suite/bugs/closed/931.v b/test-suite/bugs/closed/5845.v
index ea3347a8..ea3347a8 100644
--- a/test-suite/bugs/closed/931.v
+++ b/test-suite/bugs/closed/5845.v
diff --git a/test-suite/bugs/closed/1100.v b/test-suite/bugs/closed/5940.v
index 32c78b4b..32c78b4b 100644
--- a/test-suite/bugs/closed/1100.v
+++ b/test-suite/bugs/closed/5940.v
diff --git a/test-suite/bugs/closed/6070.v b/test-suite/bugs/closed/6070.v
new file mode 100644
index 00000000..49b16f62
--- /dev/null
+++ b/test-suite/bugs/closed/6070.v
@@ -0,0 +1,32 @@
+(* A slight shortening of bug 6078 *)
+
+(* This bug exposed a different behavior of unshelve_unifiable
+ depending on which projection is found in the unification
+ heuristics *)
+
+Axiom flat_type : Type.
+Axiom interp_flat_type : flat_type -> Type.
+Inductive type := Arrow (_ _ : flat_type).
+Definition interp_type (t : type)
+ := interp_flat_type (match t with Arrow s d => s end)
+ -> interp_flat_type (match t with Arrow s d => d end).
+Axiom Expr : type -> Type.
+Axiom Interp : forall {t : type}, Expr t -> interp_type t.
+Axiom Wf : forall {t}, Expr t -> Prop.
+Axiom a : forall f, interp_flat_type f.
+
+Definition packaged_expr_functionP A :=
+ (fun F : Expr A -> Expr A
+ => forall e' v, Interp (F e') v = a (let (_,f) := A in f)).
+Goal forall (f f0 : flat_type)
+ (e : forall _ : Expr (@Arrow f f0),
+ Expr (@Arrow f f0)),
+ @packaged_expr_functionP (@Arrow f f0) e.
+ intros.
+ refine (fun (e0 : Expr (Arrow f f0))
+ => (fun zHwf':True =>
+ (fun v : interp_flat_type f =>
+ ?[G] : ?[U] = ?[V] :> interp_flat_type ?[v])) ?[H]);
+ [ | ].
+ (* Was: Error: Tactic failure: Incorrect number of goals (expected 3 tactics). *)
+Abort.
diff --git a/test-suite/bugs/closed/6129.v b/test-suite/bugs/closed/6129.v
new file mode 100644
index 00000000..e4a2a2ba
--- /dev/null
+++ b/test-suite/bugs/closed/6129.v
@@ -0,0 +1,9 @@
+(* Make definition of coercions compatible with local definitions. *)
+
+Record foo (x : Type) (y:=1) := { foo_nat :> nat }.
+Record foo2 (x : Type) (y:=1) (z t: Type) := { foo_nat2 :> nat }.
+Record foo3 (y:=1) (z t: Type) := { foo_nat3 :> nat }.
+
+Check fun x : foo nat => x + 1.
+Check fun x : foo2 nat nat nat => x + 1.
+Check fun x : foo3 nat nat => x + 1.
diff --git a/test-suite/bugs/closed/6191.v b/test-suite/bugs/closed/6191.v
new file mode 100644
index 00000000..e0d91250
--- /dev/null
+++ b/test-suite/bugs/closed/6191.v
@@ -0,0 +1,16 @@
+(* Check a 8.7.1 regression in ring_simplify *)
+
+Require Import ArithRing BinNat.
+Goal forall f x, (2+x+f (N.to_nat 2)+3=4).
+intros.
+ring_simplify (2+x+f (N.to_nat 2)+3).
+match goal with |- x + f (N.to_nat 2) + 5 = 4 => idtac end.
+Abort.
+
+Require Import ZArithRing BinInt.
+Open Scope Z_scope.
+Goal forall x, (2+x+3=4).
+intros.
+ring_simplify (2+x+3).
+match goal with |- x+5 = 4 => idtac end.
+Abort.
diff --git a/test-suite/bugs/closed/6297.v b/test-suite/bugs/closed/6297.v
new file mode 100644
index 00000000..a2860705
--- /dev/null
+++ b/test-suite/bugs/closed/6297.v
@@ -0,0 +1,8 @@
+Set Printing Universes.
+
+(* Error: Anomaly "Uncaught exception "Anomaly: Incorrect universe Set
+ declared for inductive type, inferred level is max(Prop, Set+1)."."
+ Please report at http://coq.inria.fr/bugs/. *)
+Fail Record LTS: Set :=
+ lts { St: Set;
+ init: St }.
diff --git a/test-suite/bugs/closed/6313.v b/test-suite/bugs/closed/6313.v
new file mode 100644
index 00000000..4d263c5a
--- /dev/null
+++ b/test-suite/bugs/closed/6313.v
@@ -0,0 +1,64 @@
+(* Former open goals in nested proofs were lost *)
+
+(* This used to fail with "Incorrect number of goals (expected 1 tactic)." *)
+
+Inductive foo := a | b | c.
+Goal foo -> foo.
+ intro x.
+ simple refine (match x with
+ | a => _
+ | b => ltac:(exact b)
+ | c => _
+ end); [exact a|exact c].
+Abort.
+
+(* This used to leave the goal on the shelf and fails at reflexivity *)
+
+Goal (True/\0=0 -> True) -> True.
+ intro f.
+ refine
+ (f ltac:(split; only 1:exact I)).
+ reflexivity.
+Qed.
+
+(* The "Unshelve" used to not see the explicitly "shelved" goal *)
+
+Lemma f (b:comparison) : b=b.
+refine (match b with
+ Eq => ltac:(shelve)
+ | Lt => ltac:(give_up)
+ | Gt => _
+ end).
+exact (eq_refl Gt).
+Unshelve.
+exact (eq_refl Eq).
+Fail auto. (* Check that there are no more regular subgoals *)
+Admitted.
+
+(* The "Unshelve" used to not see the explicitly "shelved" goal *)
+
+Lemma f2 (b:comparison) : b=b.
+refine (match b with
+ Eq => ltac:(shelve)
+ | Lt => ltac:(give_up)
+ | Gt => _
+ end).
+Unshelve. (* Note: Unshelve puts goals at the end *)
+exact (eq_refl Gt).
+exact (eq_refl Eq).
+Fail auto. (* Check that there are no more regular subgoals *)
+Admitted.
+
+(* The "unshelve" used to not see the explicitly "shelved" goal *)
+
+Lemma f3 (b:comparison) : b=b.
+unshelve refine (match b with
+ Eq => ltac:(shelve)
+ | Lt => ltac:(give_up)
+ | Gt => _
+ end).
+(* Note: unshelve puts goals at the beginning *)
+exact (eq_refl Eq).
+exact (eq_refl Gt).
+Fail auto. (* Check that there are no more regular subgoals *)
+Admitted.
diff --git a/test-suite/bugs/closed/6323.v b/test-suite/bugs/closed/6323.v
new file mode 100644
index 00000000..fdc33bef
--- /dev/null
+++ b/test-suite/bugs/closed/6323.v
@@ -0,0 +1,9 @@
+Goal True.
+ simple refine (let X : Type := _ in _);
+ [ abstract exact Set using Set'
+ | let X' := (eval cbv delta [X] in X) in
+ clear X;
+ simple refine (let id' : { x : X' | True } -> X' := _ in _);
+ [ abstract refine (@proj1_sig _ _) | ]
+ ].
+Abort.
diff --git a/test-suite/bugs/closed/6378.v b/test-suite/bugs/closed/6378.v
new file mode 100644
index 00000000..68ae7961
--- /dev/null
+++ b/test-suite/bugs/closed/6378.v
@@ -0,0 +1,18 @@
+Require Import Coq.ZArith.ZArith.
+Ltac profile_constr tac :=
+ let dummy := match goal with _ => reset ltac profile; start ltac profiling end in
+ let ret := match goal with _ => tac () end in
+ let dummy := match goal with _ => stop ltac profiling; show ltac profile end in
+ pose 1.
+
+Ltac slow _ := eval vm_compute in (Z.div_eucl, Z.div_eucl, Z.div_eucl, Z.div_eucl, Z.div_eucl).
+
+Goal True.
+ start ltac profiling.
+ reset ltac profile.
+ reset ltac profile.
+ stop ltac profiling.
+ time profile_constr slow.
+ show ltac profile cutoff 0.
+ show ltac profile "slow".
+Abort.
diff --git a/test-suite/bugs/closed/6490.v b/test-suite/bugs/closed/6490.v
new file mode 100644
index 00000000..dcf9ff29
--- /dev/null
+++ b/test-suite/bugs/closed/6490.v
@@ -0,0 +1,4 @@
+Inductive Foo (A' := I) (B : Type) := foo : Foo B.
+
+Goal Foo True. dtauto. Qed.
+Goal Foo True. firstorder. Qed.
diff --git a/test-suite/bugs/closed/6529.v b/test-suite/bugs/closed/6529.v
new file mode 100644
index 00000000..8d908199
--- /dev/null
+++ b/test-suite/bugs/closed/6529.v
@@ -0,0 +1,16 @@
+Require Import Vector Program.
+
+Program Definition append_nil_def :=
+ forall A n (ls: t A n), append ls (nil A) = ls. (* Works *)
+
+Lemma append_nil : append_nil_def. (* Works *)
+Proof.
+Admitted.
+
+Program Lemma append_nil' :
+ forall A n (ls: t A n), append ls (nil A) = ls.
+Abort.
+
+Fail Program Lemma append_nil'' :
+ forall A B n (ls: t A n), append ls (nil A) = ls.
+(* Error: Anomaly "Evar ?X25 was not declared." Please report at http://coq.inria.fr/bugs/. *)
diff --git a/test-suite/bugs/closed/6534.v b/test-suite/bugs/closed/6534.v
new file mode 100644
index 00000000..f5013994
--- /dev/null
+++ b/test-suite/bugs/closed/6534.v
@@ -0,0 +1,7 @@
+Goal forall x : nat, x = x.
+Proof.
+intros x.
+refine ((fun x x => _ tt) tt tt).
+let t := match goal with [ |- ?P ] => P end in
+let _ := type of t in
+idtac.
diff --git a/test-suite/bugs/closed/6617.v b/test-suite/bugs/closed/6617.v
new file mode 100644
index 00000000..9cabd62d
--- /dev/null
+++ b/test-suite/bugs/closed/6617.v
@@ -0,0 +1,34 @@
+Definition MR {T M : Type} :=
+fun (R : M -> M -> Prop) (m : T -> M) (x y : T) => R (m x) (m y).
+
+Set Primitive Projections.
+
+Record sigma {A : Type} {B : A -> Type} : Type := sigmaI
+ { pr1 : A; pr2 : B pr1 }.
+
+Axiom F : forall {A : Type} {R : A -> A -> Prop},
+ (forall x, (forall y, R y x -> unit) -> unit) -> forall (x : A), unit.
+
+Definition foo (A : Type) (l : list A) :=
+ let y := {| pr1 := A; pr2 := l |} in
+ let bar := MR lt (fun p : sigma =>
+ (fix Ffix (x : list (pr1 p)) : nat :=
+ match x with
+ | nil => 0
+ | cons _ x1 => S (Ffix x1)
+ end) (pr2 p)) in
+fun (_ : bar y y) =>
+F (fun (r : sigma)
+ (X : forall q : sigma, bar q r -> unit) => tt).
+
+Definition fooT (A : Type) (l : list A) : Type :=
+ ltac:(let ty := type of (foo A l) in exact ty).
+Parameter P : forall A l, fooT A l -> Prop.
+
+Goal forall A l, P A l (foo A l).
+Proof.
+ intros; unfold foo.
+ Fail match goal with
+ | [ |- context [False]] => idtac
+ end.
+Admitted.
diff --git a/test-suite/bugs/closed/6631.v b/test-suite/bugs/closed/6631.v
new file mode 100644
index 00000000..100dc13f
--- /dev/null
+++ b/test-suite/bugs/closed/6631.v
@@ -0,0 +1,7 @@
+Require Import Coq.derive.Derive.
+
+Derive f SuchThat (f = 1 + 1) As feq.
+Proof.
+ transitivity 2; [refine (eq_refl 2)|].
+ transitivity 2.
+ 2:abstract exact (eq_refl 2).
diff --git a/test-suite/bugs/closed/6634.v b/test-suite/bugs/closed/6634.v
new file mode 100644
index 00000000..7f33afcc
--- /dev/null
+++ b/test-suite/bugs/closed/6634.v
@@ -0,0 +1,6 @@
+From Coq Require Import ssreflect.
+
+Lemma normalizeP (p : tt = tt) : p = p.
+Proof.
+Fail move: {2} tt p.
+Abort.
diff --git a/test-suite/bugs/closed/6661.v b/test-suite/bugs/closed/6661.v
new file mode 100644
index 00000000..e88a3704
--- /dev/null
+++ b/test-suite/bugs/closed/6661.v
@@ -0,0 +1,259 @@
+(* -*- mode: coq; coq-prog-args: ("-noinit" "-indices-matter" "-w" "-notation-overridden,-deprecated-option") -*- *)
+(*
+ The Coq Proof Assistant, version 8.7.1 (January 2018)
+ compiled on Jan 21 2018 15:02:24 with OCaml 4.06.0
+ from commit 391bb5e196901a3a9426295125b8d1c700ab6992
+ *)
+
+
+Require Export Coq.Init.Notations.
+Notation "'∏' x .. y , P" := (forall x, .. (forall y, P) ..)
+ (at level 200, x binder, y binder, right associativity) : type_scope.
+Notation "'λ' x .. y , t" := (fun x => .. (fun y => t) ..)
+ (at level 200, x binder, y binder, right associativity).
+Notation "A -> B" := (forall (_ : A), B) : type_scope.
+Reserved Notation "p @ q" (at level 60, right associativity).
+Reserved Notation "! p " (at level 50).
+
+Monomorphic Universe uu.
+Monomorphic Universe uu0.
+Monomorphic Universe uu1.
+Constraint uu0 < uu1.
+
+Global Set Universe Polymorphism.
+Global Set Polymorphic Inductive Cumulativity.
+Global Unset Universe Minimization ToSet.
+
+Notation UU := Type (only parsing).
+Notation UU0 := Type@{uu0} (only parsing).
+
+Global Set Printing Universes.
+
+ Inductive unit : UU0 := tt : unit.
+
+Inductive paths@{i} {A:Type@{i}} (a:A) : A -> Type@{i} := idpath : paths a a.
+Hint Resolve idpath : core .
+Notation "a = b" := (paths a b) (at level 70, no associativity) : type_scope.
+
+Set Primitive Projections.
+Set Nonrecursive Elimination Schemes.
+
+Record total2@{i} { T: Type@{i} } ( P: T -> Type@{i} ) : Type@{i}
+ := tpair { pr1 : T; pr2 : P pr1 }.
+
+Arguments tpair {_} _ _ _.
+Arguments pr1 {_ _} _.
+Arguments pr2 {_ _} _.
+
+Notation "'∑' x .. y , P" := (total2 (λ x, .. (total2 (λ y, P)) ..))
+ (at level 200, x binder, y binder, right associativity) : type_scope.
+
+Definition foo (X:Type) (xy : @total2 X (λ _, X)) : X.
+ induction xy as [x y].
+ exact x.
+Defined.
+
+Unset Automatic Introduction.
+
+Definition idfun (T : UU) := λ t:T, t.
+
+Definition pathscomp0 {X : UU} {a b c : X} (e1 : a = b) (e2 : b = c) : a = c.
+Proof.
+ intros. induction e1. exact e2.
+Defined.
+
+Hint Resolve @pathscomp0 : pathshints.
+
+Notation "p @ q" := (pathscomp0 p q).
+
+Definition pathsinv0 {X : UU} {a b : X} (e : a = b) : b = a.
+Proof.
+ intros. induction e. exact (idpath _).
+Defined.
+
+Notation "! p " := (pathsinv0 p).
+
+Definition maponpaths {T1 T2 : UU} (f : T1 -> T2) {t1 t2 : T1}
+ (e: t1 = t2) : f t1 = f t2.
+Proof.
+ intros. induction e. exact (idpath _).
+Defined.
+
+Definition map_on_two_paths {X Y Z : UU} (f : X -> Y -> Z) {x x' y y'} (ex : x = x') (ey: y = y') :
+ f x y = f x' y'.
+Proof.
+ intros. induction ex. induction ey. exact (idpath _).
+Defined.
+
+
+Definition maponpathscomp0 {X Y : UU} {x1 x2 x3 : X}
+ (f : X -> Y) (e1 : x1 = x2) (e2 : x2 = x3) :
+ maponpaths f (e1 @ e2) = maponpaths f e1 @ maponpaths f e2.
+Proof.
+ intros. induction e1. induction e2. exact (idpath _).
+Defined.
+
+Definition maponpathsinv0 {X Y : UU} (f : X -> Y)
+ {x1 x2 : X} (e : x1 = x2) : maponpaths f (! e) = ! (maponpaths f e).
+Proof.
+ intros. induction e. exact (idpath _).
+Defined.
+
+
+
+Definition constr1 {X : UU} (P : X -> UU) {x x' : X} (e : x = x') :
+ ∑ (f : P x -> P x'),
+ ∑ (ee : ∏ p : P x, tpair _ x p = tpair _ x' (f p)),
+ ∏ (pp : P x), maponpaths pr1 (ee pp) = e.
+Proof.
+ intros. induction e.
+ split with (idfun (P x)).
+ split with (λ p, idpath _).
+ unfold maponpaths. simpl.
+ intro. exact (idpath _).
+Defined.
+
+Definition transportf@{i} {X : Type@{i}} (P : X -> Type@{i}) {x x' : X}
+ (e : x = x') : P x -> P x' := pr1 (constr1 P e).
+
+Lemma two_arg_paths_f@{i} {A : Type@{i}} {B : A -> Type@{i}} {C:Type@{i}} {f : ∏ a, B a -> C} {a1 b1 a2 b2}
+ (p : a1 = a2) (q : transportf B p b1 = b2) : f a1 b1 = f a2 b2.
+Proof.
+ intros. induction p. induction q. exact (idpath _).
+Defined.
+
+Definition iscontr@{i} (T:Type@{i}) : Type@{i} := ∑ cntr:T, ∏ t:T, t=cntr.
+
+Lemma proofirrelevancecontr {X : UU} (is : iscontr X) (x x' : X) : x = x'.
+Proof.
+ intros.
+ induction is as [y fe].
+ exact (fe x @ !(fe x')).
+Defined.
+
+
+Definition hfiber@{i} {X Y : Type@{i}} (f : X -> Y) (y : Y) : Type@{i} := total2 (λ x, f x = y).
+
+Definition hfiberpair {X Y : UU} (f : X -> Y) {y : Y}
+ (x : X) (e : f x = y) : hfiber f y :=
+ tpair _ x e.
+
+Definition coconustot (T : UU) (t : T) := ∑ t' : T, t' = t.
+
+Definition coconustotpair (T : UU) {t t' : T} (e: t' = t) : coconustot T t
+ := tpair _ t' e.
+
+Lemma connectedcoconustot {T : UU} {t : T} (c1 c2 : coconustot T t) : c1 = c2.
+Proof.
+ intros.
+ induction c1 as [x0 x].
+ induction x.
+ induction c2 as [x1 y].
+ induction y.
+ exact (idpath _).
+Defined.
+
+Definition isweq@{i} {X Y : Type@{i}} (f : X -> Y) : Type@{i} :=
+ ∏ y : Y, iscontr (hfiber f y).
+
+Lemma isProofIrrelevantUnit : ∏ x x' : unit, x = x'.
+Proof.
+ intros. induction x. induction x'. exact (idpath _).
+Defined.
+
+Lemma unitl0 : tt = tt -> coconustot _ tt.
+Proof.
+ intros e. exact (coconustotpair unit e).
+Defined.
+
+Lemma unitl1: coconustot _ tt -> tt = tt.
+Proof.
+ intro cp. induction cp as [x t]. induction x. exact t.
+Defined.
+
+Lemma unitl2: ∏ e : tt = tt, unitl1 (unitl0 e) = e.
+Proof.
+ intros. unfold unitl0. simpl. exact (idpath _).
+Defined.
+
+Lemma unitl3: ∏ e : tt = tt, e = idpath tt.
+Proof.
+ intros.
+
+ assert (e0 : unitl0 (idpath tt) = unitl0 e).
+ { simple refine (connectedcoconustot _ _). }
+
+ set (e1 := maponpaths unitl1 e0).
+
+ exact (! (unitl2 e) @ (! e1) @ (unitl2 (idpath _))).
+Defined.
+
+Theorem iscontrpathsinunit (x x' : unit) : iscontr (x = x').
+Proof.
+ intros.
+ split with (isProofIrrelevantUnit x x').
+ intros e'.
+ induction x.
+ induction x'.
+ simpl.
+ apply unitl3.
+Qed.
+
+Lemma ifcontrthenunitl0 (e1 e2 : tt = tt) : e1 = e2.
+Proof.
+ intros.
+ simple refine (proofirrelevancecontr _ _ _).
+ exact (iscontrpathsinunit tt tt).
+Qed.
+
+Section isweqcontrtounit.
+
+ Universe i.
+
+ (* To see the bug, run it both with and without this constraint: *)
+
+ (* Constraint uu0 < i. *)
+
+ (* Without this constraint, we get i = uu0 in the next definition *)
+ Lemma isweqcontrtounit@{} {T : Type@{i}} (is : iscontr@{i} T) : isweq@{i} (λ _:T, tt).
+ Proof.
+ intros. intro y. induction y.
+ induction is as [c h].
+ split with (hfiberpair@{i i i} _ c (idpath tt)).
+ intros ha.
+ induction ha as [x e].
+ simple refine (two_arg_paths_f (h x) _).
+ simple refine (ifcontrthenunitl0 _ _).
+ Defined.
+
+ (*
+ Explanation of the bug:
+
+ With the constraint uu0 < i above we get:
+
+ |= uu0 <= bug.3
+ uu0 <= i
+ uu1 <= i
+ i <= bug.3
+
+ from this print statement: *)
+
+ Print isweqcontrtounit.
+
+ (*
+
+ Without the constraint uu0 < i above we get:
+
+ |= i <= bug.3
+ uu0 = i
+
+ Since uu0 = i is not inferred when we impose the constraint uu0 < i,
+ it is invalid to infer it when we don't.
+
+ *)
+
+ Context (X : Type@{uu1}).
+
+ Check (@isweqcontrtounit X). (* detect a universe inconsistency *)
+
+End isweqcontrtounit.
diff --git a/test-suite/bugs/closed/6677.v b/test-suite/bugs/closed/6677.v
new file mode 100644
index 00000000..99e47bb8
--- /dev/null
+++ b/test-suite/bugs/closed/6677.v
@@ -0,0 +1,5 @@
+Set Universe Polymorphism.
+
+Definition T@{i} := Type@{i}.
+Fail Definition U@{i} := (T@{i} <: Type@{i}).
+Fail Definition eqU@{i j} : @eq T@{j} U@{i} T@{i} := eq_refl.
diff --git a/test-suite/bugs/closed/6770.v b/test-suite/bugs/closed/6770.v
new file mode 100644
index 00000000..9bcc7408
--- /dev/null
+++ b/test-suite/bugs/closed/6770.v
@@ -0,0 +1,7 @@
+Section visibility.
+
+ Let Fixpoint by_proof (n:nat) : True.
+ Proof. exact I. Defined.
+End visibility.
+
+Fail Check by_proof.
diff --git a/test-suite/bugs/closed/6774.v b/test-suite/bugs/closed/6774.v
new file mode 100644
index 00000000..9625af91
--- /dev/null
+++ b/test-suite/bugs/closed/6774.v
@@ -0,0 +1,7 @@
+(* Was an anomaly with ill-typed template polymorphism *)
+Definition huh (b:bool) := if b then Set else Prop.
+Definition lol b: huh b :=
+ if b return huh b then nat else True.
+Goal (lol true) * unit.
+Fail generalize true. (* should fail with error, not anomaly *)
+Abort.
diff --git a/test-suite/bugs/closed/6775.v b/test-suite/bugs/closed/6775.v
new file mode 100644
index 00000000..206df23b
--- /dev/null
+++ b/test-suite/bugs/closed/6775.v
@@ -0,0 +1,43 @@
+(* Issue caused and fixed during the lifetime of #6775: unification
+ failing on partially applied cumulative inductives. *)
+
+Set Universe Polymorphism.
+
+Set Polymorphic Inductive Cumulativity.
+
+Unset Elimination Schemes.
+
+Inductive paths@{i} {A : Type@{i}} (a : A) : A -> Type@{i} :=
+ idpath : paths a a.
+
+Arguments idpath {A a} , [A] a.
+
+Notation "x = y :> A" := (@paths A x y) : type_scope.
+Notation "x = y" := (x = y :>_) : type_scope.
+
+Definition inverse {A : Type} {x y : A} (p : x = y) : y = x
+ := match p with idpath => idpath end.
+
+Arguments inverse {A x y} p : simpl nomatch.
+
+Definition concat {A : Type} {x y z : A} (p : x = y) (q : y = z) : x = z :=
+ match p, q with idpath, idpath => idpath end.
+
+Arguments concat {A x y z} p q : simpl nomatch.
+
+Notation "1" := idpath.
+
+Reserved Notation "p @ q" (at level 20).
+Notation "p @ q" := (concat p q).
+
+Reserved Notation "p ^" (at level 3, format "p '^'").
+Notation "p ^" := (inverse p).
+
+Definition concat_pV_p {A} {x y z : A} (p : x = z) (q : y = z) :
+ (p @ q^) @ q = p
+ :=
+ (match q as i return forall p, (p @ i^) @ i = p with
+ idpath =>
+ fun p =>
+ match p with idpath => 1 end
+ end) p.
diff --git a/test-suite/bugs/closed/6878.v b/test-suite/bugs/closed/6878.v
new file mode 100644
index 00000000..70f1b312
--- /dev/null
+++ b/test-suite/bugs/closed/6878.v
@@ -0,0 +1,8 @@
+
+Set Universe Polymorphism.
+Module Type T.
+ Axiom foo : Prop.
+End T.
+
+(** Used to anomaly *)
+Fail Module M : T with Definition foo := Type.
diff --git a/test-suite/bugs/closed/6910.v b/test-suite/bugs/closed/6910.v
new file mode 100644
index 00000000..5167a536
--- /dev/null
+++ b/test-suite/bugs/closed/6910.v
@@ -0,0 +1,5 @@
+From Coq Require Import ssreflect ssrfun.
+
+(* We should be able to use Some_inj as a view: *)
+Lemma foo (x y : nat) : Some x = Some y -> x = y.
+Proof. by move/Some_inj. Qed.
diff --git a/test-suite/bugs/closed/6951.v b/test-suite/bugs/closed/6951.v
new file mode 100644
index 00000000..419f8d7c
--- /dev/null
+++ b/test-suite/bugs/closed/6951.v
@@ -0,0 +1,2 @@
+Record float2 : Set := Float2 { Fnum : unit }.
+Scheme Equality for float2.
diff --git a/test-suite/bugs/closed/6956.v b/test-suite/bugs/closed/6956.v
new file mode 100644
index 00000000..ee21adbb
--- /dev/null
+++ b/test-suite/bugs/closed/6956.v
@@ -0,0 +1,13 @@
+(** Used to trigger an anomaly with VM compilation *)
+
+Set Universe Polymorphism.
+
+Inductive t A : nat -> Type :=
+| nil : t A 0
+| cons : forall (h : A) (n : nat), t A n -> t A (S n).
+
+Definition case0 {A} (P : t A 0 -> Type) (H : P (nil A)) v : P v :=
+match v with
+| nil _ => H
+| _ => fun devil => False_ind (@IDProp) devil
+end.
diff --git a/test-suite/bugs/closed/7113.v b/test-suite/bugs/closed/7113.v
new file mode 100644
index 00000000..976e60f2
--- /dev/null
+++ b/test-suite/bugs/closed/7113.v
@@ -0,0 +1,10 @@
+Require Import Program.Tactics.
+Section visibility.
+
+ (* used to anomaly *)
+ Program Let Fixpoint ev' (n : nat) : bool := _.
+ Next Obligation. exact true. Qed.
+
+ Check ev'.
+End visibility.
+Fail Check ev'.
diff --git a/test-suite/bugs/closed/7195.v b/test-suite/bugs/closed/7195.v
new file mode 100644
index 00000000..ea97747a
--- /dev/null
+++ b/test-suite/bugs/closed/7195.v
@@ -0,0 +1,12 @@
+(* A disjoint-names condition was missing when matching names in Ltac
+ pattern-matching *)
+
+Goal True.
+ let x := (eval cbv beta zeta in (fun P => let Q := P in fun P => P + Q)) in
+ unify x (fun a b => b + a); (* success *)
+ let x' := lazymatch x with
+ | (fun (a : ?A) (b : ?B) => ?k)
+ => constr:(fun (a : A) (b : B) => k)
+ end in
+ unify x x'.
+Abort.
diff --git a/test-suite/bugs/closed/7392.v b/test-suite/bugs/closed/7392.v
new file mode 100644
index 00000000..cf465c65
--- /dev/null
+++ b/test-suite/bugs/closed/7392.v
@@ -0,0 +1,9 @@
+Inductive R : nat -> Prop := ER : forall n, R n -> R (S n).
+
+Goal (forall (n : nat), R n -> False) -> True -> False.
+Proof.
+intros H0 H1.
+eapply H0.
+clear H1.
+apply ER.
+simpl.
diff --git a/test-suite/bugs/closed/7462.v b/test-suite/bugs/closed/7462.v
new file mode 100644
index 00000000..40ca39e3
--- /dev/null
+++ b/test-suite/bugs/closed/7462.v
@@ -0,0 +1,13 @@
+(* Adding an only-printing notation should not override existing
+ interpretations for the same notation. *)
+
+Notation "$ x" := (@id nat x) (only parsing, at level 0).
+Notation "$ x" := (@id bool x) (only printing, at level 0).
+Check $1. (* Was: Error: Unknown interpretation for notation "$ _". *)
+
+(* Adding an only-printing notation should not let believe
+ that a parsing rule has been given *)
+
+Notation "$ x" := (@id bool x) (only printing, at level 0).
+Notation "$ x" := (@id nat x) (only parsing, at level 0).
+Check $1. (* Was: Error: Syntax Error: Lexer: Undefined token *)
diff --git a/test-suite/bugs/closed/7554.v b/test-suite/bugs/closed/7554.v
new file mode 100644
index 00000000..12b0aa2c
--- /dev/null
+++ b/test-suite/bugs/closed/7554.v
@@ -0,0 +1,12 @@
+Require Import Coq.Program.Tactics.
+
+(* these should not result in anomalies *)
+
+Fail Program Lemma foo:
+ forall P, forall H, forall (n:nat), P n.
+
+Fail Program Lemma foo:
+ forall a (P : list a -> Prop), forall H, forall (n:list a), P n.
+
+Fail Program Lemma foo:
+ forall (a : Type) (P : list a -> Prop), forall H, forall (n:list a), P n.
diff --git a/test-suite/bugs/closed/7615.v b/test-suite/bugs/closed/7615.v
new file mode 100644
index 00000000..cd8c4ad7
--- /dev/null
+++ b/test-suite/bugs/closed/7615.v
@@ -0,0 +1,19 @@
+Set Universe Polymorphism.
+
+Module Type S.
+Parameter Inline T@{i} : Type@{i+1}.
+End S.
+
+Module F (X : S).
+Definition X@{j i} : Type@{j} := X.T@{i}.
+End F.
+
+Module M.
+Definition T@{i} := Type@{i}.
+End M.
+
+Module N := F(M).
+
+Require Import Hurkens.
+
+Fail Definition eqU@{i j} : @eq Type@{j} N.X@{i Set} Type@{i} := eq_refl.
diff --git a/test-suite/bugs/closed/7631.v b/test-suite/bugs/closed/7631.v
new file mode 100644
index 00000000..34eb8b86
--- /dev/null
+++ b/test-suite/bugs/closed/7631.v
@@ -0,0 +1,21 @@
+Module NamedContext.
+
+Definition foo := true.
+
+Section Foo.
+
+Let bar := foo.
+
+Eval native_compute in bar.
+
+End Foo.
+
+End NamedContext.
+
+Module RelContext.
+
+Definition foo := true.
+
+Definition bar (x := foo) := Eval native_compute in x.
+
+End RelContext.
diff --git a/test-suite/bugs/closed/7695.v b/test-suite/bugs/closed/7695.v
new file mode 100644
index 00000000..42bdb076
--- /dev/null
+++ b/test-suite/bugs/closed/7695.v
@@ -0,0 +1,20 @@
+Require Import Hurkens.
+
+Universes i j k.
+Module Type T.
+ Parameter T1 : Type@{i+1}.
+ Parameter e : Type@{j} = T1 : Type@{k}.
+End T.
+
+Module M.
+ Definition T1 := Type@{j}.
+ Definition e : Type@{j} = T1 : Type@{k} := eq_refl.
+End M.
+
+Module F (A:T).
+ Definition bad := TypeNeqSmallType.paradox _ A.e.
+End F.
+
+Set Printing Universes.
+Fail Module X := F M.
+(* Universe inconsistency. Cannot enforce j <= i because i < Coq.Logic.Hurkens.105 = j. *)
diff --git a/test-suite/bugs/closed/7700.v b/test-suite/bugs/closed/7700.v
new file mode 100644
index 00000000..56f5481b
--- /dev/null
+++ b/test-suite/bugs/closed/7700.v
@@ -0,0 +1,9 @@
+(* Abbreviations to section variables were not located *)
+Section foo.
+ Let x := Set.
+ Notation y := x.
+ Check y.
+ Variable x' : Set.
+ Notation y' := x'.
+ Check y'.
+End foo.
diff --git a/test-suite/bugs/closed/7712.v b/test-suite/bugs/closed/7712.v
new file mode 100644
index 00000000..a4e9697f
--- /dev/null
+++ b/test-suite/bugs/closed/7712.v
@@ -0,0 +1,4 @@
+(* This used to raise an anomaly *)
+
+Fail Reserved Notation "'[tele_arg' x ';' .. ';' z ]"
+ (format "[tele_arg '[hv' x .. z ']' ]").
diff --git a/test-suite/bugs/closed/7723.v b/test-suite/bugs/closed/7723.v
new file mode 100644
index 00000000..21629012
--- /dev/null
+++ b/test-suite/bugs/closed/7723.v
@@ -0,0 +1,58 @@
+Set Universe Polymorphism.
+
+Module Segfault.
+
+Inductive decision_tree : Type := .
+
+Fixpoint first_satisfying_helper {A B} (f : A -> option B) (ls : list A) : option B
+ := match ls with
+ | nil => None
+ | cons x xs
+ => match f x with
+ | Some v => Some v
+ | None => first_satisfying_helper f xs
+ end
+ end.
+
+Axiom admit : forall {T}, T.
+Definition dtree4 : option decision_tree :=
+ match first_satisfying_helper (fun pat : nat => Some pat) (cons 0 nil)
+ with
+ | Some _ => admit
+ | None => admit
+ end
+.
+Definition dtree'' := Eval vm_compute in dtree4. (* segfault *)
+
+End Segfault.
+
+Module OtherExample.
+
+Definition bar@{i} := Type@{i}.
+Definition foo@{i j} (x y z : nat) :=
+ @id Type@{j} bar@{i}.
+Eval vm_compute in foo.
+
+End OtherExample.
+
+Module LocalClosure.
+
+Definition bar@{i} := Type@{i}.
+
+Definition foo@{i j} (x y z : nat) :=
+ @id (nat -> Type@{j}) (fun _ => Type@{i}).
+Eval vm_compute in foo.
+
+End LocalClosure.
+
+Require Import Hurkens.
+Polymorphic Inductive unit := tt.
+
+Polymorphic Definition foo :=
+ let x := id tt in (x, x, Type).
+
+Lemma bad : False.
+ refine (TypeNeqSmallType.paradox (snd foo) _).
+ vm_compute.
+ Fail reflexivity.
+Abort.
diff --git a/test-suite/bugs/closed/7779.v b/test-suite/bugs/closed/7779.v
new file mode 100644
index 00000000..78936b59
--- /dev/null
+++ b/test-suite/bugs/closed/7779.v
@@ -0,0 +1,15 @@
+(* Checking that the "in" clause takes the "eqn" clause into account *)
+
+Definition test (x: nat): {y: nat | False }. Admitted.
+
+Parameter x: nat.
+Parameter z: nat.
+
+Goal
+ proj1_sig (test x) = z ->
+ False.
+Proof.
+ intro H.
+ destruct (test x) eqn:Heqs in H.
+ change (test x = exist (fun _ : nat => False) x0 f) in Heqs. (* Check it has the expected statement *)
+Abort.
diff --git a/test-suite/bugs/closed/7780.v b/test-suite/bugs/closed/7780.v
new file mode 100644
index 00000000..2318f4d6
--- /dev/null
+++ b/test-suite/bugs/closed/7780.v
@@ -0,0 +1,16 @@
+(* A lift was missing in expanding aliases under binders for unification *)
+
+(* Below, the lift was missing while expanding the reference to
+ [mkcons] in [?N] which was under binder [arg] *)
+
+Goal forall T (t : T) (P P0 : T -> Set), option (option (list (P0 t)) -> option (list (P t))).
+ intros ????.
+ refine (Some
+ (fun rls
+ => let mkcons := ?[M] in
+ let default arg := ?[N] in
+ match rls as rls (* 2 *) return option (list (P ?[O])) with
+ | Some _ => None
+ | None => None
+ end)).
+Abort.
diff --git a/test-suite/bugs/closed/7795.v b/test-suite/bugs/closed/7795.v
new file mode 100644
index 00000000..5db0f81c
--- /dev/null
+++ b/test-suite/bugs/closed/7795.v
@@ -0,0 +1,65 @@
+
+
+Definition fwd (b: bool) A (e2: A): A. Admitted.
+
+Ltac destruct_refinement_aux T :=
+ let m := fresh "mres" in
+ let r := fresh "r" in
+ let P := fresh "P" in
+ pose T as m;
+ destruct m as [ r P ].
+
+Ltac destruct_refinement :=
+ match goal with
+ | |- context[proj1_sig ?T] => destruct_refinement_aux T
+ end.
+
+Ltac t_base := discriminate || destruct_refinement.
+
+
+Inductive List (T: Type) :=
+| Cons_construct: T -> List T -> List T
+| Nil_construct: List T.
+
+Definition t (T: Type): List T. Admitted.
+Definition size (T: Type) (src: List T): nat. Admitted.
+Definition filter1_rt1_type (T: Type): Type := { res: List T | false = true }.
+Definition filter1 (T: Type): filter1_rt1_type T. Admitted.
+
+Definition hh_1:
+ forall T : Type,
+ (forall (T0 : Type),
+ False -> filter1_rt1_type T0) ->
+ False.
+Admitted.
+
+Definition hh_2:
+ forall (T : Type),
+ filter1_rt1_type T ->
+ filter1_rt1_type T.
+Admitted.
+
+Definition hh:
+ forall (T : Type) (f1 : forall (T0 : Type), False -> filter1_rt1_type T0),
+ fwd
+ (Nat.leb
+ (size T
+ (fwd false (List T)
+ (fwd false (List T)
+ (proj1_sig
+ (hh_2 T
+ (f1 T (hh_1 T f1))))))) 0) bool
+ false = true.
+Admitted.
+
+Set Program Mode. (* removing this line prevents the bug *)
+Obligation Tactic := repeat t_base.
+
+Goal
+ forall T (h17: T),
+ filter1 T =
+ exist
+ _
+ (Nil_construct T)
+ (hh T (fun (T : Type) (_ : False) => filter1 T)).
+Abort.
diff --git a/test-suite/bugs/closed/7811.v b/test-suite/bugs/closed/7811.v
new file mode 100644
index 00000000..fee330f2
--- /dev/null
+++ b/test-suite/bugs/closed/7811.v
@@ -0,0 +1,114 @@
+(* -*- mode: coq; coq-prog-args: ("-emacs" "-top" "atomic" "-Q" "." "iris" "-R" "." "stdpp") -*- *)
+(* File reduced by coq-bug-finder from original input, then from 140 lines to 26 lines, then from 141 lines to 27 lines, then from 142 lines to 27 lines, then from 272 lines to 61 lines, then from 291 lines to 94 lines, then from 678 lines to 142 lines, then from 418 lines to 161 lines, then from 538 lines to 189 lines, then from 840 lines to 493 lines, then from 751 lines to 567 lines, then from 913 lines to 649 lines, then from 875 lines to 666 lines, then from 784 lines to 568 lines, then from 655 lines to 173 lines, then from 317 lines to 94 lines, then from 172 lines to 86 lines, then from 102 lines to 86 lines, then from 130 lines to 86 lines, then from 332 lines to 112 lines, then from 279 lines to 111 lines, then from 3996 lines to 5697 lines, then from 153 lines to 117 lines, then from 146 lines to 108 lines, then from 124 lines to 108 lines *)
+(* coqc version 8.8.0 (May 2018) compiled on May 2 2018 16:49:46 with OCaml 4.02.3
+ coqtop version 8.8.0 (May 2018) *)
+
+(* This was triggering a "Not_found" at the time of printing/showing the goal *)
+
+Require Coq.Unicode.Utf8.
+
+Notation "t $ r" := (t r)
+ (at level 65, right associativity, only parsing).
+
+Inductive tele : Type :=
+ | TeleO : tele
+ | TeleS {X} (binder : X -> tele) : tele.
+
+Fixpoint tele_fun (TT : tele) (T : Type) : Type :=
+ match TT with
+ | TeleO => T
+ | TeleS b => forall x, tele_fun (b x) T
+ end.
+
+Inductive tele_arg : tele -> Type :=
+| TargO : tele_arg TeleO
+| TargS {X} {binder} (x : X) : tele_arg (binder x) -> tele_arg (TeleS binder).
+
+Axiom tele_app : forall {TT : tele} {T} (f : tele_fun TT T), tele_arg TT -> T.
+
+Coercion tele_arg : tele >-> Sortclass.
+
+Inductive val :=
+ | LitV
+ | PairV (v1 v2 : val)
+ | InjLV (v : val)
+ | InjRV (v : val).
+Axiom coPset : Set.
+Axiom atomic_update : forall {PROP : Type} {TA TB : tele}, coPset -> coPset -> (TA -> PROP) -> (TA -> TB -> PROP) -> (TA -> TB -> PROP) -> PROP.
+Import Coq.Unicode.Utf8.
+Notation "'AU' '<<' ∀ x1 .. xn , α '>>' @ Eo , Ei '<<' β , 'COMM' Φ '>>'" :=
+ (atomic_update (TA:=TeleS (λ x1, .. (TeleS (λ xn, TeleO)) .. ))
+ (TB:=TeleO)
+ Eo Ei
+ (tele_app (TT:=TeleS (λ x1, .. (TeleS (λ xn, TeleO)) .. )) $
+ λ x1, .. (λ xn, α) ..)
+ (tele_app (TT:=TeleS (λ x1, .. (TeleS (λ xn, TeleO)) .. )) $
+ λ x1, .. (λ xn, tele_app (TT:=TeleO) β) .. )
+ (tele_app (TT:=TeleS (λ x1, .. (TeleS (λ xn, TeleO)) .. )) $
+ λ x1, .. (λ xn, tele_app (TT:=TeleO) Φ) .. )
+ )
+ (at level 20, Eo, Ei, α, β, Φ at level 200, x1 binder, xn binder,
+ format "'[ ' 'AU' '<<' ∀ x1 .. xn , α '>>' '/' @ Eo , Ei '/' '[ ' '<<' β , '/' COMM Φ '>>' ']' ']'") : bi_scope.
+
+Axiom ident : Set.
+Inductive env (A : Type) : Type := Enil : env A | Esnoc : env A → ident → A → env A.
+Record envs (PROP : Type) : Type
+ := Envs { env_spatial : env PROP }.
+Axiom positive : Set.
+Axiom Qp : Set.
+Axiom one : positive.
+Goal forall (T : Type) (T0 : forall _ : T, Type) (P : Set)
+ (u : T) (γs : P) (Q : T0 u) (Φ o : forall _ : val, T0 u)
+ (stack_content0 : forall (_ : P) (_ : list val), T0 u)
+ (c c0 : coPset) (l : forall (A : Type) (_ : list A), list A)
+ (e0 : forall (_ : env (T0 u)) (_ : positive), envs (T0 u))
+ (i0 : ident) (o1 : forall (_ : Qp) (_ : val), T0 u)
+ (b0 : forall _ : env (T0 u), T0 u) (P0 : forall _ : T0 u, Type)
+ (u0 : forall (_ : T0 u) (_ : T0 u), T0 u),
+ P0
+ (@atomic_update (T0 u)
+ (@TeleS val (fun _ : val => @TeleS Qp (fun _ : Qp => TeleO))) TeleO c c0
+ (@tele_app (@TeleS val (fun _ : val => @TeleS Qp (fun _ : Qp => TeleO)))
+ (T0 u) (fun (v : val) (q : Qp) => o1 q v))
+ (@tele_app (@TeleS val (fun _ : val => @TeleS Qp (fun _ : Qp => TeleO)))
+ (forall _ : tele_arg TeleO, T0 u)
+ (fun (v : val) (q : Qp) => @tele_app TeleO (T0 u) (o1 q v)))
+ (@tele_app (@TeleS val (fun _ : val => @TeleS Qp (fun _ : Qp => TeleO)))
+ (forall _ : tele_arg TeleO, T0 u)
+ (fun (x : val) (_ : Qp) =>
+ @tele_app TeleO (T0 u)
+ (u0
+ (b0
+ match
+ e0
+ (@Esnoc (T0 u) (@Enil (T0 u)) i0
+ (@atomic_update (T0 u)
+ (@TeleS (list val) (fun _ : list val => TeleO)) TeleO
+ c c0
+ (@tele_app
+ (@TeleS (list val) (fun _ : list val => TeleO))
+ (T0 u) (fun l0 : list val => stack_content0 γs l0))
+ (@tele_app
+ (@TeleS (list val) (fun _ : list val => TeleO))
+ (forall _ : tele_arg TeleO, T0 u)
+ (fun l0 : list val =>
+ @tele_app TeleO (T0 u)
+ (stack_content0 γs (l val l0))))
+ (@tele_app
+ (@TeleS (list val) (fun _ : list val => TeleO))
+ (forall _ : tele_arg TeleO, T0 u)
+ (fun x1 : list val =>
+ @tele_app TeleO (T0 u)
+ (u0 Q
+ (Φ
+ match x1 return val with
+ | nil => InjLV LitV
+ | cons v _ => InjRV v
+ end)))))) one
+ return (env (T0 u))
+ with
+ | Envs _ env_spatial0 => env_spatial0
+ end) (o x)))))
+.
+ Show.
+Abort.
diff --git a/test-suite/bugs/closed/7854.v b/test-suite/bugs/closed/7854.v
new file mode 100644
index 00000000..ab1a29b6
--- /dev/null
+++ b/test-suite/bugs/closed/7854.v
@@ -0,0 +1,10 @@
+Set Primitive Projections.
+
+CoInductive stream (A : Type) := cons {
+ hd : A;
+ tl : stream A;
+}.
+
+CoFixpoint const {A} (x : A) := cons A x (const x).
+
+Check (@eq_refl _ (const tt) <<: tl unit (const tt) = const tt).
diff --git a/test-suite/bugs/closed/7867.v b/test-suite/bugs/closed/7867.v
new file mode 100644
index 00000000..d0c79027
--- /dev/null
+++ b/test-suite/bugs/closed/7867.v
@@ -0,0 +1,4 @@
+(* Was a printer anomaly due to an internal lambda with no binders *)
+
+Class class := { foo : nat }.
+Fail Instance : class := { foo := 0 ; bar := 0 }.
diff --git a/test-suite/bugs/closed/8004.v b/test-suite/bugs/closed/8004.v
new file mode 100644
index 00000000..81863999
--- /dev/null
+++ b/test-suite/bugs/closed/8004.v
@@ -0,0 +1,47 @@
+Require Export Coq.Program.Tactics Coq.Classes.SetoidTactics Coq.Classes.CMorphisms .
+
+Set Universe Polymorphism.
+
+Delimit Scope category_theory_scope with category_theory.
+Open Scope category_theory_scope.
+
+Infix "∧" := prod (at level 80, right associativity) : category_theory_scope.
+
+Class Setoid A := {
+ equiv : crelation A;
+ setoid_equiv :> Equivalence equiv
+}.
+
+Notation "f ≈ g" := (equiv f g) (at level 79) : category_theory_scope.
+
+Open Scope list_scope.
+
+Generalizable All Variables.
+
+Fixpoint list_equiv `{Setoid A} (xs ys : list A) : Type :=
+ match xs, ys with
+ | nil, nil => True
+ | x :: xs, y :: ys => x ≈ y ∧ list_equiv xs ys
+ | _, _ => False
+ end.
+
+Axiom proof_admitted : False.
+Tactic Notation "admit" := abstract case proof_admitted.
+
+Program Instance list_equivalence `{Setoid A} : Equivalence list_equiv.
+Next Obligation.
+ repeat intro.
+ induction x; simpl; split; auto.
+ reflexivity.
+Qed.
+Next Obligation.
+ repeat intro.
+ generalize dependent y.
+ induction x, y; simpl; intros; auto.
+ destruct X; split.
+ now symmetry.
+ intuition.
+Qed.
+Next Obligation.
+admit.
+Defined.
diff --git a/test-suite/bugs/closed/808_2411.v b/test-suite/bugs/closed/808_2411.v
index 1c13e745..1169b203 100644
--- a/test-suite/bugs/closed/808_2411.v
+++ b/test-suite/bugs/closed/808_2411.v
@@ -24,4 +24,4 @@ rewrite bar'.
now apply le_S.
Qed.
-End test. \ No newline at end of file
+End test.
diff --git a/test-suite/bugs/closed/8119.v b/test-suite/bugs/closed/8119.v
new file mode 100644
index 00000000..c6329a73
--- /dev/null
+++ b/test-suite/bugs/closed/8119.v
@@ -0,0 +1,46 @@
+Require Import Coq.Strings.String.
+
+Section T.
+ Eval vm_compute in let x := tt in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Eval vm_compute in let _ := Set in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Eval vm_compute in let _ := Prop in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End T.
+
+Section U0.
+ Let n : unit := tt.
+ Eval vm_compute in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. vm_compute. Abort.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End U0.
+
+Section S0.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval vm_compute in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. vm_compute. Abort.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End S0.
+
+Class T := { }.
+Section S1.
+ Context {p : T}.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval vm_compute in _.
+(* Error: Anomaly "Uncaught exception Not_found." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. vm_compute. Abort.
+(* Error: Anomaly "Uncaught exception Not_found." Please report at http://coq.inria.fr/bugs/. *)
+End S1.
+
+Class M := { m : Type }.
+Section S2.
+ Context {p : M}.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval vm_compute in _.
+(* Error: Anomaly "File "pretyping/vnorm.ml", line 60, characters 9-15: Assertion failed." *)
+ Goal exists tt : unit, tt = tt. eexists. vm_compute. Abort.
+(* Error: Anomaly "File "pretyping/vnorm.ml", line 60, characters 9-15: Assertion failed." *)
+End S2.
diff --git a/test-suite/bugs/closed/8121.v b/test-suite/bugs/closed/8121.v
new file mode 100644
index 00000000..99267612
--- /dev/null
+++ b/test-suite/bugs/closed/8121.v
@@ -0,0 +1,46 @@
+Require Import Coq.Strings.String.
+
+Section T.
+ Eval native_compute in let x := tt in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Eval native_compute in let _ := Set in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Eval native_compute in let _ := Prop in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End T.
+
+Section U0.
+ Let n : unit := tt.
+ Eval native_compute in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. native_compute. Abort.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End U0.
+
+Section S0.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval native_compute in _.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. native_compute. Abort.
+(* Error: Anomaly "Uncaught exception Constr.DestKO." Please report at http://coq.inria.fr/bugs/. *)
+End S0.
+
+Class T := { }.
+Section S1.
+ Context {p : T}.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval native_compute in _.
+(* Error: Anomaly "Uncaught exception Not_found." Please report at http://coq.inria.fr/bugs/. *)
+ Goal exists tt : unit, tt = tt. eexists. native_compute. Abort.
+(* Error: Anomaly "Uncaught exception Not_found." Please report at http://coq.inria.fr/bugs/. *)
+End S1.
+
+Class M := { m : Type }.
+Section S2.
+ Context {p : M}.
+ Let LF : string := String (Coq.Strings.Ascii.Ascii false true false true false false false false) "".
+ Eval native_compute in _.
+(* Error: Anomaly "File "pretyping/vnorm.ml", line 60, characters 9-15: Assertion failed." *)
+ Goal exists tt : unit, tt = tt. eexists. native_compute. Abort.
+(* Error: Anomaly "File "pretyping/vnorm.ml", line 60, characters 9-15: Assertion failed." *)
+End S2.
diff --git a/test-suite/bugs/closed/8288.v b/test-suite/bugs/closed/8288.v
new file mode 100644
index 00000000..0350be9c
--- /dev/null
+++ b/test-suite/bugs/closed/8288.v
@@ -0,0 +1,7 @@
+Set Universe Polymorphism.
+Set Printing Universes.
+
+Set Polymorphic Inductive Cumulativity.
+
+Inductive foo := C : (forall A : Type -> Type, A Type) -> foo.
+(* anomaly invalid subtyping relation *)
diff --git a/test-suite/bugs/closed/8432.v b/test-suite/bugs/closed/8432.v
new file mode 100644
index 00000000..844ee126
--- /dev/null
+++ b/test-suite/bugs/closed/8432.v
@@ -0,0 +1,39 @@
+Require Import Program.Tactics.
+
+Obligation Tactic := idtac.
+Set Universe Polymorphism.
+
+Inductive paths {A : Type} (a : A) : A -> Type :=
+ idpath : paths a a.
+
+Inductive Empty : Type :=.
+Inductive Unit : Type := tt.
+Definition not (A : Type) := A -> Empty.
+
+ Lemma nat_path_O_S (n : nat) (H : paths O (S n)) : Empty.
+ Proof. refine (
+ match H in paths _ i return
+ match i with
+ | O => Unit
+ | S _ => Empty
+ end
+ with
+ | idpath _ => tt
+ end
+ ). Defined.
+ Lemma symmetry {A} (x y : A) (p : paths x y) : paths y x.
+ Proof.
+ destruct p. apply idpath.
+ Defined.
+ Lemma nat_path_S_O (n : nat) (H : paths (S n) O) : Empty.
+ Proof. eapply nat_path_O_S. exact (symmetry _ _ H). Defined.
+Set Printing Universes.
+Program Fixpoint succ_not_zero (n:nat) : not (paths (S n) 0) :=
+match n as n return not (paths (S n) 0) with
+| 0 => nat_path_S_O _
+| S n' => let dummy := succ_not_zero n' in _
+end.
+Next Obligation.
+ intros f _ n dummy H. exact (nat_path_S_O _ H).
+ Show Universes.
+Defined.
diff --git a/test-suite/bugs/closed/8532.v b/test-suite/bugs/closed/8532.v
new file mode 100644
index 00000000..00aa66e7
--- /dev/null
+++ b/test-suite/bugs/closed/8532.v
@@ -0,0 +1,8 @@
+(* Checking Print Assumptions relatively to a bound module *)
+
+Module Type Typ.
+ Parameter Inline(10) t : Type.
+End Typ.
+Module Terms_mod (SetVars : Typ).
+Print Assumptions SetVars.t.
+End Terms_mod.
diff --git a/test-suite/bugs/closed/HoTT_coq_012.v b/test-suite/bugs/closed/HoTT_coq_012.v
index a3c697f8..420aaf97 100644
--- a/test-suite/bugs/closed/HoTT_coq_012.v
+++ b/test-suite/bugs/closed/HoTT_coq_012.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Definition UU := Type.
Inductive toto (B : UU) : UU := c (x : B).
diff --git a/test-suite/bugs/closed/HoTT_coq_014.v b/test-suite/bugs/closed/HoTT_coq_014.v
index 223a98de..5c450366 100644
--- a/test-suite/bugs/closed/HoTT_coq_014.v
+++ b/test-suite/bugs/closed/HoTT_coq_014.v
@@ -199,4 +199,4 @@ Fail Admitted.
Polymorphic Definition UnderlyingGraphFunctor_MorphismOf (C D : SmallCategory) (F : SpecializedFunctor C D) :
Morphism (FunctorCategory GraphIndexingCategory TypeCat) (UnderlyingGraph C) (UnderlyingGraph D). (* Anomaly: apply_coercion. Please report.*)
Proof.
-Admitted. \ No newline at end of file
+Admitted.
diff --git a/test-suite/bugs/closed/HoTT_coq_032.v b/test-suite/bugs/closed/HoTT_coq_032.v
index 3f5d7b02..40abb215 100644
--- a/test-suite/bugs/closed/HoTT_coq_032.v
+++ b/test-suite/bugs/closed/HoTT_coq_032.v
@@ -1,4 +1,3 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-xml") -*- *)
Set Implicit Arguments.
Generalizable All Variables.
Set Asymmetric Patterns.
diff --git a/test-suite/bugs/closed/HoTT_coq_053.v b/test-suite/bugs/closed/HoTT_coq_053.v
index e2bf1dbe..263dec48 100644
--- a/test-suite/bugs/closed/HoTT_coq_053.v
+++ b/test-suite/bugs/closed/HoTT_coq_053.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Set Printing Universes.
Set Implicit Arguments.
Generalizable All Variables.
diff --git a/test-suite/bugs/closed/HoTT_coq_054.v b/test-suite/bugs/closed/HoTT_coq_054.v
index c6879659..635024e9 100644
--- a/test-suite/bugs/closed/HoTT_coq_054.v
+++ b/test-suite/bugs/closed/HoTT_coq_054.v
@@ -1,4 +1,3 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs") -*- *)
Inductive Empty : Prop := .
Inductive paths {A : Type} (a : A) : A -> Type :=
diff --git a/test-suite/bugs/closed/HoTT_coq_055.v b/test-suite/bugs/closed/HoTT_coq_055.v
index a2509877..561b7e55 100644
--- a/test-suite/bugs/closed/HoTT_coq_055.v
+++ b/test-suite/bugs/closed/HoTT_coq_055.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Set Universe Polymorphism.
Inductive Empty : Prop := .
diff --git a/test-suite/bugs/closed/HoTT_coq_059.v b/test-suite/bugs/closed/HoTT_coq_059.v
index 9c7e394d..2e6c735c 100644
--- a/test-suite/bugs/closed/HoTT_coq_059.v
+++ b/test-suite/bugs/closed/HoTT_coq_059.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Set Universe Polymorphism.
Inductive eq {A} (x : A) : A -> Type := eq_refl : eq x x.
diff --git a/test-suite/bugs/closed/HoTT_coq_062.v b/test-suite/bugs/closed/HoTT_coq_062.v
index 90d1d183..e01f73f1 100644
--- a/test-suite/bugs/closed/HoTT_coq_062.v
+++ b/test-suite/bugs/closed/HoTT_coq_062.v
@@ -1,6 +1,6 @@
Unset Strict Universe Declaration.
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
(* File reduced by coq-bug-finder from 5012 lines to 4659 lines, then from 4220 lines to 501 lines, then from 513 lines to 495 lines, then from 513 lines to 495 lines, then from 412 lines to 79 lines, then from 412 lines to 79 lines. *)
Set Universe Polymorphism.
Definition admit {T} : T.
diff --git a/test-suite/bugs/closed/HoTT_coq_064.v b/test-suite/bugs/closed/HoTT_coq_064.v
index b4c74537..d02a5f12 100644
--- a/test-suite/bugs/closed/HoTT_coq_064.v
+++ b/test-suite/bugs/closed/HoTT_coq_064.v
@@ -178,6 +178,7 @@ Definition IsColimit `{Funext} C D (F : Functor D C)
Generalizable All Variables.
Axiom fs : Funext.
+Existing Instance fs.
Section bar.
diff --git a/test-suite/bugs/closed/HoTT_coq_077.v b/test-suite/bugs/closed/HoTT_coq_077.v
index 017780c1..f69c71a0 100644
--- a/test-suite/bugs/closed/HoTT_coq_077.v
+++ b/test-suite/bugs/closed/HoTT_coq_077.v
@@ -3,7 +3,7 @@ Set Implicit Arguments.
Require Import Logic.
Set Asymmetric Patterns.
-Set Record Elimination Schemes.
+Set Nonrecursive Elimination Schemes.
Set Primitive Projections.
Record prod (A B : Type) : Type :=
diff --git a/test-suite/bugs/closed/HoTT_coq_080.v b/test-suite/bugs/closed/HoTT_coq_080.v
index 6b07c304..a9e0bd26 100644
--- a/test-suite/bugs/closed/HoTT_coq_080.v
+++ b/test-suite/bugs/closed/HoTT_coq_080.v
@@ -24,4 +24,4 @@ Goal forall C D (x y : ob (sum_category C D)), Type.
intros C D x y.
hnf in x, y.
exact (hom (sum_category _ _) x y).
-Defined. \ No newline at end of file
+Defined.
diff --git a/test-suite/bugs/closed/HoTT_coq_097.v b/test-suite/bugs/closed/HoTT_coq_097.v
index 38e8007b..f2b2e57b 100644
--- a/test-suite/bugs/closed/HoTT_coq_097.v
+++ b/test-suite/bugs/closed/HoTT_coq_097.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
Set Universe Polymorphism.
Set Printing Universes.
Inductive Empty : Set := .
diff --git a/test-suite/bugs/closed/HoTT_coq_104.v b/test-suite/bugs/closed/HoTT_coq_104.v
index 5bb7fa8c..a6ff78d1 100644
--- a/test-suite/bugs/closed/HoTT_coq_104.v
+++ b/test-suite/bugs/closed/HoTT_coq_104.v
@@ -4,7 +4,7 @@ Require Import Logic.
Global Set Universe Polymorphism.
Global Set Asymmetric Patterns.
-Local Set Record Elimination Schemes.
+Local Set Nonrecursive Elimination Schemes.
Local Set Primitive Projections.
Record prod (A B : Type) : Type :=
diff --git a/test-suite/bugs/closed/HoTT_coq_107.v b/test-suite/bugs/closed/HoTT_coq_107.v
index 7c1ab8dc..fa4072a8 100644
--- a/test-suite/bugs/closed/HoTT_coq_107.v
+++ b/test-suite/bugs/closed/HoTT_coq_107.v
@@ -1,4 +1,4 @@
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-nois" "-R" "../theories" "Coq") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-nois" "-R" "../theories" "Coq") -*- *)
(* File reduced by coq-bug-finder from 4897 lines to 2605 lines, then from 2297 lines to 236 lines, then from 239 lines to 137 lines, then from 118 lines to 67 lines, then from 520 lines to 76 lines. *)
(** Note: The bug here is the same as the #113, that is, HoTT_coq_113.v *)
Require Import Coq.Init.Logic.
diff --git a/test-suite/bugs/closed/HoTT_coq_108.v b/test-suite/bugs/closed/HoTT_coq_108.v
index b6c0da76..ea4bcd8b 100644
--- a/test-suite/bugs/closed/HoTT_coq_108.v
+++ b/test-suite/bugs/closed/HoTT_coq_108.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") -*- *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") -*- *)
(* NOTE: This bug is only triggered with -load-vernac-source / in interactive mode. *)
(* File reduced by coq-bug-finder from 139 lines to 124 lines. *)
Set Universe Polymorphism.
diff --git a/test-suite/bugs/closed/HoTT_coq_123.v b/test-suite/bugs/closed/HoTT_coq_123.v
index 6ee6e653..7bed956f 100644
--- a/test-suite/bugs/closed/HoTT_coq_123.v
+++ b/test-suite/bugs/closed/HoTT_coq_123.v
@@ -1,5 +1,5 @@
Require Import TestSuite.admit.
-(* -*- mode: coq; coq-prog-args: ("-emacs" "-indices-matter") *)
+(* -*- mode: coq; coq-prog-args: ("-indices-matter") *)
(* File reduced by coq-bug-finder from original input, then from 4988 lines to 856 lines, then from 648 lines to 398 lines, then from 401 lines to 332 lines, then from 287 lines to 250 lines, then from 257 lines to 241 lines, then from 223 lines to 175 lines *)
Set Universe Polymorphism.
Set Asymmetric Patterns.
@@ -104,11 +104,15 @@ Record Functor (C D : PreCategory) :=
morphism_of : forall s d, morphism C s d -> morphism D (object_of s) (object_of d)
}.
+(** Workaround to simpl losing universe constraints, see bug #5645. *)
+Ltac simpl' :=
+ simpl; match goal with [ |- ?P ] => let T := type of P in idtac end.
+
Global Instance trunc_forall `{Funext} `{P : A -> Type} `{forall a, IsTrunc n (P a)}
: IsTrunc n (forall a, P a) | 100.
Proof.
generalize dependent P.
- induction n as [ | n' IH]; (simpl; intros P ?).
+ induction n as [ | n' IH]; (simpl'; intros P ?).
- admit.
- pose (fun f g => trunc_equiv (@apD10 A P f g) ^-1); admit.
Defined.
diff --git a/test-suite/bugs/closed/gh6165.v b/test-suite/bugs/closed/gh6165.v
new file mode 100644
index 00000000..b87a7caa
--- /dev/null
+++ b/test-suite/bugs/closed/gh6165.v
@@ -0,0 +1,5 @@
+(* -*- mode: coq; coq-prog-args: ("-quick") -*- *)
+
+Goal True.
+ abstract exact I.
+Timeout 1 Defined.
diff --git a/test-suite/bugs/closed/gh6384.v b/test-suite/bugs/closed/gh6384.v
new file mode 100644
index 00000000..cec84642
--- /dev/null
+++ b/test-suite/bugs/closed/gh6384.v
@@ -0,0 +1,5 @@
+Theorem test (A:Prop) : A \/ A -> A.
+ Fail intro H; destruct H as H.
+ (* Error: Disjunctive/conjunctive introduction pattern expected. *)
+ Fail intros H; destruct H as H.
+Abort.
diff --git a/test-suite/bugs/closed/gh6385.v b/test-suite/bugs/closed/gh6385.v
new file mode 100644
index 00000000..3bbb664f
--- /dev/null
+++ b/test-suite/bugs/closed/gh6385.v
@@ -0,0 +1,5 @@
+Theorem test (A:Prop) : A \/ A -> A.
+ Fail let H := idtac in intros H; destruct H as H'.
+ (* Disjunctive/conjunctive introduction pattern expected. *)
+ Fail let H' := idtac in intros H; destruct H as H'.
+Abort.
diff --git a/test-suite/bugs/opened/1596.v b/test-suite/bugs/opened/1596.v
index 7c5dc416..820022d9 100644
--- a/test-suite/bugs/opened/1596.v
+++ b/test-suite/bugs/opened/1596.v
@@ -2,7 +2,6 @@ Require Import Relations.
Require Import FSets.
Require Import Arith.
Require Import Omega.
-Unset Standard Proposition Elimination Names.
Set Keyed Unification.
@@ -258,4 +257,4 @@ n).
apply SynInc;apply H.mem_2;trivial.
rewrite H in H0. discriminate. (* !! impossible here !! *)
Qed.
-End B. \ No newline at end of file
+End B.
diff --git a/test-suite/bugs/opened/743.v b/test-suite/bugs/opened/1615.v
index 28257014..28257014 100644
--- a/test-suite/bugs/opened/743.v
+++ b/test-suite/bugs/opened/1615.v
diff --git a/test-suite/bugs/opened/1811.v b/test-suite/bugs/opened/1811.v
index 10c988fc..57c17443 100644
--- a/test-suite/bugs/opened/1811.v
+++ b/test-suite/bugs/opened/1811.v
@@ -7,4 +7,4 @@ Goal forall b1 b2, (negb b1 = b2) -> xorb true b1 = b2.
Proof.
intros b1 b2.
Fail rewrite neg2xor.
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/opened/3209.v b/test-suite/bugs/opened/3209.v
deleted file mode 100644
index 3203afa1..00000000
--- a/test-suite/bugs/opened/3209.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Inductive eqT {A} (x : A) : A -> Type :=
- reflT : eqT x x.
-Definition Bi_inv (A B : Type) (f : (A -> B)) :=
- sigT (fun (g : B -> A) =>
- sigT (fun (h : B -> A) =>
- sigT (fun (α : forall b : B, eqT (f (g b)) b) =>
- forall a : A, eqT (h (f a)) a))).
-Definition TEquiv (A B : Type) := sigT (fun (f : A -> B) => Bi_inv _ _ f).
-
-Axiom UA : forall (A B : Type), TEquiv (TEquiv A B) (eqT A B).
-Definition idtoeqv {A B} (e : eqT A B) : TEquiv A B :=
- sigT_rect (fun _ => TEquiv A B)
- (fun (f : TEquiv A B -> eqT A B) H =>
- sigT_rect (fun _ => TEquiv A B)
- (fun g _ => g e)
- H)
- (UA A B).
diff --git a/test-suite/bugs/opened/3263.v b/test-suite/bugs/opened/3263.v
deleted file mode 100644
index f0c707bd..00000000
--- a/test-suite/bugs/opened/3263.v
+++ /dev/null
@@ -1,232 +0,0 @@
-Require Import TestSuite.admit.
-(* File reduced by coq-bug-finder from originally 10918 lines, then 3649 lines to 3177 lines, then from 3189 lines to 3164 lines, then from 2653 lines to 2496 lines, 2653 lines, then from 1642 lines to 651 lines, then from 736 lines to 473 lines, then from 433 lines to 275 lines, then from 258 lines to 235 lines. *)
-Generalizable All Variables.
-Set Implicit Arguments.
-
-Arguments fst {_ _} _.
-Arguments snd {_ _} _.
-
-Axiom cheat : forall {T}, T.
-
-Reserved Notation "g 'o' f" (at level 40, left associativity).
-
-Inductive paths {A : Type} (a : A) : A -> Type := idpath : paths a a.
-Arguments idpath {A a} , [A] a.
-Notation "x = y" := (paths x y) : type_scope.
-
-Definition symmetry {A : Type} {x y : A} (p : x = y) : y = x
- := match p with idpath => idpath end.
-
-Delimit Scope morphism_scope with morphism.
-Delimit Scope category_scope with category.
-Delimit Scope object_scope with object.
-Record PreCategory (object : Type) :=
- Build_PreCategory' {
- object :> Type := object;
- morphism : object -> object -> Type;
- identity : forall x, morphism x x;
- compose : forall s d d',
- morphism d d'
- -> morphism s d
- -> morphism s d'
- where "f 'o' g" := (compose f g);
- associativity : forall x1 x2 x3 x4
- (m1 : morphism x1 x2)
- (m2 : morphism x2 x3)
- (m3 : morphism x3 x4),
- (m3 o m2) o m1 = m3 o (m2 o m1);
- associativity_sym : forall x1 x2 x3 x4
- (m1 : morphism x1 x2)
- (m2 : morphism x2 x3)
- (m3 : morphism x3 x4),
- m3 o (m2 o m1) = (m3 o m2) o m1;
- left_identity : forall a b (f : morphism a b), identity b o f = f;
- right_identity : forall a b (f : morphism a b), f o identity a = f;
- identity_identity : forall x, identity x o identity x = identity x
- }.
-Bind Scope category_scope with PreCategory.
-Arguments PreCategory {_}.
-Arguments identity {_} [!C%category] x%object : rename.
-
-Arguments compose {_} [!C%category s%object d%object d'%object] m1%morphism m2%morphism : rename.
-
-Infix "o" := compose : morphism_scope.
-
-Delimit Scope functor_scope with functor.
-Local Open Scope morphism_scope.
-Record Functor `(C : @PreCategory objC, D : @PreCategory objD) :=
- {
- object_of :> C -> D;
- morphism_of : forall s d, morphism C s d
- -> morphism D (object_of s) (object_of d);
- composition_of : forall s d d'
- (m1 : morphism C s d) (m2: morphism C d d'),
- morphism_of _ _ (m2 o m1)
- = (morphism_of _ _ m2) o (morphism_of _ _ m1);
- identity_of : forall x, morphism_of _ _ (identity x)
- = identity (object_of x)
- }.
-Bind Scope functor_scope with Functor.
-
-Arguments morphism_of {_} [C%category] {_} [D%category] F%functor [s%object d%object] m%morphism : rename, simpl nomatch.
-
-Notation "F '_1' m" := (morphism_of F m) (at level 10, no associativity) : morphism_scope.
-
-Class IsIsomorphism `{C : @PreCategory objC} {s d} (m : morphism C s d) :=
- {
- morphism_inverse : morphism C d s;
- left_inverse : morphism_inverse o m = identity _;
- right_inverse : m o morphism_inverse = identity _
- }.
-
-Definition opposite `(C : @PreCategory objC) : PreCategory
- := @Build_PreCategory'
- C
- (fun s d => morphism C d s)
- (identity (C := C))
- (fun _ _ _ m1 m2 => m2 o m1)
- (fun _ _ _ _ _ _ _ => @associativity_sym _ _ _ _ _ _ _ _ _)
- (fun _ _ _ _ _ _ _ => @associativity _ _ _ _ _ _ _ _ _)
- (fun _ _ => @right_identity _ _ _ _)
- (fun _ _ => @left_identity _ _ _ _)
- (@identity_identity _ C).
-
-Notation "C ^op" := (opposite C) (at level 3) : category_scope.
-
-Definition prod `(C : @PreCategory objC, D : @PreCategory objD) : @PreCategory (objC * objD).
- refine (@Build_PreCategory'
- (C * D)%type
- (fun s d => (morphism C (fst s) (fst d)
- * morphism D (snd s) (snd d))%type)
- (fun x => (identity (fst x), identity (snd x)))
- (fun s d d' m2 m1 => (fst m2 o fst m1, snd m2 o snd m1))
- _
- _
- _
- _
- _); admit.
-Defined.
-Infix "*" := prod : category_scope.
-
-Definition compose_functor `(C : @PreCategory objC, D : @PreCategory objD, E : @PreCategory objE) (G : Functor D E) (F : Functor C D) : Functor C E
- := Build_Functor
- C E
- (fun c => G (F c))
- (fun _ _ m => morphism_of G (morphism_of F m))
- cheat
- cheat.
-
-Infix "o" := compose_functor : functor_scope.
-
-Record NaturalTransformation `(C : @PreCategory objC, D : @PreCategory objD) (F G : Functor C D) :=
- Build_NaturalTransformation' {
- components_of :> forall c, morphism D (F c) (G c);
- commutes : forall s d (m : morphism C s d),
- components_of d o F _1 m = G _1 m o components_of s;
-
- commutes_sym : forall s d (m : C.(morphism) s d),
- G _1 m o components_of s = components_of d o F _1 m
- }.
-Definition functor_category `(C : @PreCategory objC, D : @PreCategory objD) : PreCategory
- := @Build_PreCategory' (Functor C D)
- (@NaturalTransformation _ C _ D)
- cheat
- cheat
- cheat
- cheat
- cheat
- cheat
- cheat.
-
-Definition opposite_functor `(F : @Functor objC C objD D) : Functor C^op D^op
- := Build_Functor (C^op) (D^op)
- (object_of F)
- (fun s d => morphism_of F (s := d) (d := s))
- (fun d' d s m1 m2 => composition_of F s d d' m2 m1)
- (identity_of F).
-
-Definition opposite_invL `(F : @Functor objC C^op objD D) : Functor C D^op
- := Build_Functor C (D^op)
- (object_of F)
- (fun s d => morphism_of F (s := d) (d := s))
- (fun d' d s m1 m2 => composition_of F s d d' m2 m1)
- (identity_of F).
-Notation "F ^op" := (opposite_functor F) : functor_scope.
-
-Notation "F ^op'L" := (opposite_invL F) (at level 3) : functor_scope.
-Definition fst `{C : @PreCategory objC, D : @PreCategory objD} : Functor (C * D) C
- := Build_Functor (C * D) C
- (@fst _ _)
- (fun _ _ => @fst _ _)
- (fun _ _ _ _ _ => idpath)
- (fun _ => idpath).
-
-Definition snd `{C : @PreCategory objC, D : @PreCategory objD} : Functor (C * D) D
- := Build_Functor (C * D) D
- (@snd _ _)
- (fun _ _ => @snd _ _)
- (fun _ _ _ _ _ => idpath)
- (fun _ => idpath).
-Definition prod_functor `(F : @Functor objC C objD D, F' : @Functor objC C objD' D')
-: Functor C (D * D')
- := Build_Functor
- C (D * D')
- (fun c => (F c, F' c))
- (fun s d m => (F _1 m, F' _1 m))%morphism
- cheat
- cheat.
-Definition pair `(F : @Functor objC C objD D, F' : @Functor objC' C' objD' D') : Functor (C * C') (D * D')
- := (prod_functor (F o fst) (F' o snd))%functor.
-Notation cat_of obj :=
- (@Build_PreCategory' obj
- (fun x y => forall _ : x, y)
- (fun _ x => x)
- (fun _ _ _ f g x => f (g x))%core
- (fun _ _ _ _ _ _ _ => idpath)
- (fun _ _ _ _ _ _ _ => idpath)
- (fun _ _ _ => idpath)
- (fun _ _ _ => idpath)
- (fun _ => idpath)).
-
-Definition hom_functor `(C : @PreCategory objC) : Functor (C^op * C) (cat_of Type)
- := Build_Functor _ _ cheat cheat cheat cheat.
-
-Definition induced_hom_natural_transformation `(F : @Functor objC C objD D)
-: NaturalTransformation (hom_functor C) (hom_functor D o pair F^op F)
- := Build_NaturalTransformation' _ _ cheat cheat cheat.
-
-Class IsFullyFaithful `(F : @Functor objC C objD D)
- := is_fully_faithful
- : forall x y : C,
- IsIsomorphism (induced_hom_natural_transformation F (x, y)).
-
-Definition coyoneda `(A : @PreCategory objA) : Functor A^op (@functor_category _ A _ (cat_of Type))
- := cheat.
-
-Definition yoneda `(A : @PreCategory objA) : Functor A (@functor_category _ A^op _ (cat_of Type))
- := (((coyoneda A^op)^op'L)^op'L)%functor.
-Definition coyoneda_embedding `(A : @PreCategory objA) : @IsFullyFaithful _ _ _ _ (@coyoneda _ A).
-Admitted.
-
-Definition yoneda_embedding_fast `(A : @PreCategory objA) : @IsFullyFaithful _ _ _ _ (@yoneda _ A).
-Proof.
- intros a b.
- pose proof (coyoneda_embedding A^op a b) as CYE.
- unfold yoneda.
- Time let t := (type of CYE) in
- let t' := (eval simpl in t) in pose proof ((fun (x : t) => (x : t')) CYE) as CYE'. (* Finished transaction in 0. secs (0.216013u,0.004s) *)
- Fail Timeout 1 let t := match goal with |- ?G => constr:(G) end in
- let t' := (eval simpl in t) in exact ((fun (x : t') => (x : t)) CYE').
- Time let t := match goal with |- ?G => constr:(G) end in
- let t' := (eval simpl in t) in exact ((fun (x : t') => (x : t)) CYE'). (* Finished transaction in 0. secs (0.248016u,0.s) *)
-Fail Timeout 2 Defined.
-Time Defined. (* Finished transaction in 1. secs (0.432027u,0.s) *)
-
-Definition yoneda_embedding `(A : @PreCategory objA) : @IsFullyFaithful _ _ _ _ (@yoneda _ A).
-Proof.
- intros a b.
- pose proof (coyoneda_embedding A^op a b) as CYE.
- unfold yoneda; simpl in *.
- Fail Timeout 1 exact CYE.
- Time exact CYE. (* Finished transaction in 0. secs (0.012001u,0.s) *)
-Fail Timeout 60 Defined. (* Timeout! *)
diff --git a/test-suite/bugs/closed/3424.v b/test-suite/bugs/opened/3424.v
index ee8cabf1..d1c5bb68 100644
--- a/test-suite/bugs/closed/3424.v
+++ b/test-suite/bugs/opened/3424.v
@@ -13,12 +13,12 @@ Notation "0" := (trunc_S minus_one) : trunc_scope.
Class IsTrunc (n : trunc_index) (A : Type) : Type := Trunc_is_trunc : IsTrunc_internal n A.
Notation IsHProp := (IsTrunc minus_one).
Notation IsHSet := (IsTrunc 0).
-Set Refolding Reduction.
Goal forall (A : Type) (a b : A) (H' : IsHSet A), { x : Type & IsHProp x }.
Proof.
intros.
eexists.
(* exact (H' a b). *)
(* Undo. *)
-apply (H' a b).
+Fail apply (H' a b).
+exact (H' a b).
Qed.
diff --git a/test-suite/bugs/opened/3794.v b/test-suite/bugs/opened/3794.v
index 99ca6cb3..e4711a38 100644
--- a/test-suite/bugs/opened/3794.v
+++ b/test-suite/bugs/opened/3794.v
@@ -4,4 +4,4 @@ Hint Unfold not : core.
Goal true<>false.
Set Typeclasses Debug.
Fail typeclasses eauto with core.
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/bugs/opened/3916.v b/test-suite/bugs/opened/3916.v
deleted file mode 100644
index fd95503e..00000000
--- a/test-suite/bugs/opened/3916.v
+++ /dev/null
@@ -1,3 +0,0 @@
-Require Import List.
-
-Fail Hint Resolve -> in_map. (* Also happens when using <- instead of -> *)
diff --git a/test-suite/bugs/opened/3926.v b/test-suite/bugs/opened/3926.v
deleted file mode 100644
index cfad7635..00000000
--- a/test-suite/bugs/opened/3926.v
+++ /dev/null
@@ -1,30 +0,0 @@
-Notation compose := (fun g f x => g (f x)).
-Notation "g 'o' f" := (compose g f) (at level 40, left associativity) : function_scope.
-Open Scope function_scope.
-Inductive paths {A : Type} (a : A) : A -> Type := idpath : paths a a where "x = y" := (@paths _ x y) : type_scope.
-Arguments idpath {A a} , [A] a.
-Definition ap {A B:Type} (f:A -> B) {x y:A} (p:x = y) : f x = f y := match p with idpath => idpath end.
-Class IsEquiv {A B : Type} (f : A -> B) := { equiv_inv : B -> A }.
-Notation "f ^-1" := (@equiv_inv _ _ f _) (at level 3, format "f '^-1'") : equiv_scope.
-Local Open Scope equiv_scope.
-Axiom eisretr : forall {A B} (f : A -> B) `{IsEquiv A B f} x, f (f^-1 x) = x.
-Generalizable Variables A B C f g.
-Global Instance isequiv_compose `{IsEquiv A B f} `{IsEquiv B C g} : IsEquiv (compose g f) | 1000
- := Build_IsEquiv A C (compose g f) (compose f^-1 g^-1).
-Definition isequiv_homotopic {A B} (f : A -> B) {g : A -> B} `{IsEquiv A B f} (h : forall x, f x = g x) : IsEquiv g
- := Build_IsEquiv _ _ g (f ^-1).
-Global Instance isequiv_inverse {A B} (f : A -> B) `{IsEquiv A B f} : IsEquiv f^-1 | 10000
- := Build_IsEquiv B A f^-1 f.
-Definition cancelR_isequiv {A B C} (f : A -> B) {g : B -> C}
- `{IsEquiv A B f} `{IsEquiv A C (g o f)}
- : IsEquiv g.
-Proof.
- Unset Typeclasses Modulo Eta.
- exact (isequiv_homotopic (compose (compose g f) f^-1)
- (fun b => ap g (eisretr f b))) || fail "too early".
- Undo.
- Set Typeclasses Modulo Eta.
- Set Typeclasses Dependency Order.
- Set Typeclasses Debug.
- Fail exact (isequiv_homotopic (compose (compose g f) f^-1)
- (fun b => ap g (eisretr f b))).
diff --git a/test-suite/bugs/opened/3948.v b/test-suite/bugs/opened/3948.v
deleted file mode 100644
index 16581308..00000000
--- a/test-suite/bugs/opened/3948.v
+++ /dev/null
@@ -1,25 +0,0 @@
-Module Type S.
-Parameter t : Type.
-End S.
-
-Module Bar(X : S).
-Proof.
- Definition elt := X.t.
- Axiom fold : elt.
-End Bar.
-
-Module Make (X: S) := Bar(X).
-
-Declare Module X : S.
-
-Module Type Interface.
- Parameter constant : unit.
-End Interface.
-
-Module DepMap : Interface.
- Module Dom := Make(X).
- Definition constant : unit :=
- let _ := @Dom.fold in tt.
-End DepMap.
-
-Print Assumptions DepMap.constant. \ No newline at end of file
diff --git a/test-suite/bugs/opened/4717.v b/test-suite/bugs/opened/4717.v
deleted file mode 100644
index 9ad47467..00000000
--- a/test-suite/bugs/opened/4717.v
+++ /dev/null
@@ -1,19 +0,0 @@
-(*See below. They sometimes work, and sometimes do not. Is this a bug?*)
-
-Require Import Omega Psatz.
-
-Definition foo := nat.
-
-Goal forall (n : foo), 0 = n - n.
-Proof. intros. omega. (* works *) Qed.
-
-Goal forall (x n : foo), x = x + n - n.
-Proof.
- intros.
- Fail omega. (* Omega can't solve this system *)
- Fail lia. (* Cannot find witness. *)
- unfold foo in *.
- omega. (* works *)
-Qed.
-
-(* Guillaume Melquiond: What matters is the equality. In the first case, it is @eq nat. In the second case, it is @eq foo. The same issue exists for ring and field. So it is not a bug, but it is worth fixing.*)
diff --git a/test-suite/bugs/opened/4803.v b/test-suite/bugs/opened/4803.v
deleted file mode 100644
index 4530548b..00000000
--- a/test-suite/bugs/opened/4803.v
+++ /dev/null
@@ -1,48 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-(*Suppose a user wants to declare a new list-like notation with support for singletons in both 8.4 and 8.5. If they use*)
-Require Import Coq.Lists.List.
-Require Import Coq.Vectors.Vector.
-Import ListNotations.
-Import VectorNotations.
-Set Implicit Arguments.
-Inductive mylist T := mynil | mycons (_ : T) (_ : mylist T).
-Arguments mynil {_}, _.
-
-Delimit Scope mylist_scope with mylist.
-Bind Scope mylist_scope with mylist.
-Delimit Scope vector_scope with vector.
-
-Notation " [ ] " := mynil (format "[ ]") : mylist_scope.
-Notation " [ x ] " := (mycons x mynil) : mylist_scope.
-Notation " [ x ; .. ; y ] " := (mycons x .. (mycons y mynil) ..) : mylist_scope.
-
-(** All of these should work fine in -compat 8.4 mode, just as they do in Coq 8.4. There needs to be a way to specify notations above so that all of these [Check]s go through in both 8.4 and 8.5 *)
-Check [ ]%mylist : mylist _.
-Check [ ]%list : list _.
-Check []%vector : Vector.t _ _.
-Check [ _ ]%mylist : mylist _.
-Check [ _ ]%list : list _.
-Check [ _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%list : list _.
-Check [ _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ]%mylist : mylist _.
-Check [ _ ; _ ; _ ; _ ]%list : list _.
-Check [ _ ; _ ; _ ; _ ]%vector : Vector.t _ _.
-Check [ _ ; _ ; _ ; _ ]%mylist : mylist _.
-
-(** Now check that we can add and then remove notations from the parser *)
-(* We should be able to stick some vernacular here to remove [] from the parser *)
-Fail Remove Notation "[]".
-Goal True.
- (* This should not be a syntax error; before moving this file to closed, uncomment this line. *)
- (* idtac; []. *)
- constructor.
-Qed.
-
-Check { _ : _ & _ }.
-Reserved Infix "&" (at level 0).
-Fail Remove Infix "&".
-(* Check { _ : _ & _ }. *)
diff --git a/test-suite/bugs/opened/4813.v b/test-suite/bugs/opened/4813.v
index b7517017..2ac55359 100644
--- a/test-suite/bugs/opened/4813.v
+++ b/test-suite/bugs/opened/4813.v
@@ -1,5 +1,5 @@
-(* An example one would like to see succeeding *)
+Require Import Program.Tactics.
Record T := BT { t : Set }.
Record U (x : T) := BU { u : t x -> Prop }.
-Fail Definition A (H : unit -> Prop) : U (BT unit) := BU _ H.
+Program Definition A (H : unit -> Prop) : U (BT unit) := BU _ H.
diff --git a/test-suite/bugs/opened/6393.v b/test-suite/bugs/opened/6393.v
new file mode 100644
index 00000000..8d5d0923
--- /dev/null
+++ b/test-suite/bugs/opened/6393.v
@@ -0,0 +1,11 @@
+(* These always worked. *)
+Goal prod True True. firstorder. Qed.
+Goal True -> @sigT True (fun _ => True). firstorder. Qed.
+Goal prod True True. dtauto. Qed.
+Goal prod True True. tauto. Qed.
+
+(* These should work. *)
+Goal @sigT True (fun _ => True). dtauto. Qed.
+(* These should work, but don't *)
+(* Goal @sigT True (fun _ => True). firstorder. Qed. *)
+(* Goal @sigT True (fun _ => True). tauto. Qed. *)
diff --git a/test-suite/bugs/opened/6602.v b/test-suite/bugs/opened/6602.v
new file mode 100644
index 00000000..3690adf9
--- /dev/null
+++ b/test-suite/bugs/opened/6602.v
@@ -0,0 +1,17 @@
+Require Import Omega.
+
+Lemma test_nat:
+ forall n, (5 + pred n <= 5 + n).
+Proof.
+ intros.
+ zify.
+ omega.
+Qed.
+
+Lemma test_N:
+ forall n, (5 + N.pred n <= 5 + n)%N.
+Proof.
+ intros.
+ zify.
+ omega.
+Qed.
diff --git a/test-suite/complexity/constructor.v b/test-suite/complexity/constructor.v
new file mode 100644
index 00000000..c5e19538
--- /dev/null
+++ b/test-suite/complexity/constructor.v
@@ -0,0 +1,216 @@
+(* Checks that constructor does not repeat the reduction of the conclusion *)
+(* Expected time < 3.00s *)
+
+(* Note: on i7 2.2GZ, time decreases from 85s to 0.1s *)
+
+Inductive T : bool -> Prop :=
+| C000 : T true | C001 : T true | C002 : T true | C003 : T true | C004 : T true
+| C005 : T true | C006 : T true | C007 : T true | C008 : T true | C009 : T true
+| C010 : T true | C011 : T true | C012 : T true | C013 : T true | C014 : T true
+| C015 : T true | C016 : T true | C017 : T true | C018 : T true | C019 : T true
+| C020 : T true | C021 : T true | C022 : T true | C023 : T true | C024 : T true
+| C025 : T true | C026 : T true | C027 : T true | C028 : T true | C029 : T true
+| C030 : T true | C031 : T true | C032 : T true | C033 : T true | C034 : T true
+| C035 : T true | C036 : T true | C037 : T true | C038 : T true | C039 : T true
+| C040 : T true | C041 : T true | C042 : T true | C043 : T true | C044 : T true
+| C045 : T true | C046 : T true | C047 : T true | C048 : T true | C049 : T true
+| C050 : T true | C051 : T true | C052 : T true | C053 : T true | C054 : T true
+| C055 : T true | C056 : T true | C057 : T true | C058 : T true | C059 : T true
+| C060 : T true | C061 : T true | C062 : T true | C063 : T true | C064 : T true
+| C065 : T true | C066 : T true | C067 : T true | C068 : T true | C069 : T true
+| C070 : T true | C071 : T true | C072 : T true | C073 : T true | C074 : T true
+| C075 : T true | C076 : T true | C077 : T true | C078 : T true | C079 : T true
+| C080 : T true | C081 : T true | C082 : T true | C083 : T true | C084 : T true
+| C085 : T true | C086 : T true | C087 : T true | C088 : T true | C089 : T true
+| C090 : T true | C091 : T true | C092 : T true | C093 : T true | C094 : T true
+| C095 : T true | C096 : T true | C097 : T true | C098 : T true | C099 : T true
+| C100 : T true | C101 : T true | C102 : T true | C103 : T true | C104 : T true
+| C105 : T true | C106 : T true | C107 : T true | C108 : T true | C109 : T true
+| C110 : T true | C111 : T true | C112 : T true | C113 : T true | C114 : T true
+| C115 : T true | C116 : T true | C117 : T true | C118 : T true | C119 : T true
+| C120 : T true | C121 : T true | C122 : T true | C123 : T true | C124 : T true
+| C125 : T true | C126 : T true | C127 : T true | C128 : T true | C129 : T true
+| C130 : T true | C131 : T true | C132 : T true | C133 : T true | C134 : T true
+| C135 : T true | C136 : T true | C137 : T true | C138 : T true | C139 : T true
+| C140 : T true | C141 : T true | C142 : T true | C143 : T true | C144 : T true
+| C145 : T true | C146 : T true | C147 : T true | C148 : T true | C149 : T true
+| C150 : T true | C151 : T true | C152 : T true | C153 : T true | C154 : T true
+| C155 : T true | C156 : T true | C157 : T true | C158 : T true | C159 : T true
+| C160 : T true | C161 : T true | C162 : T true | C163 : T true | C164 : T true
+| C165 : T true | C166 : T true | C167 : T true | C168 : T true | C169 : T true
+| C170 : T true | C171 : T true | C172 : T true | C173 : T true | C174 : T true
+| C175 : T true | C176 : T true | C177 : T true | C178 : T true | C179 : T true
+| C180 : T true | C181 : T true | C182 : T true | C183 : T true | C184 : T true
+| C185 : T true | C186 : T true | C187 : T true | C188 : T true | C189 : T true
+| C190 : T true | C191 : T true | C192 : T true | C193 : T true | C194 : T true
+| C195 : T true | C196 : T true | C197 : T true | C198 : T true | C199 : T true
+| C200 : T true | C201 : T true | C202 : T true | C203 : T true | C204 : T true
+| C205 : T true | C206 : T true | C207 : T true | C208 : T true | C209 : T true
+| C210 : T true | C211 : T true | C212 : T true | C213 : T true | C214 : T true
+| C215 : T true | C216 : T true | C217 : T true | C218 : T true | C219 : T true
+| C220 : T true | C221 : T true | C222 : T true | C223 : T true | C224 : T true
+| C225 : T true | C226 : T true | C227 : T true | C228 : T true | C229 : T true
+| C230 : T true | C231 : T true | C232 : T true | C233 : T true | C234 : T true
+| C235 : T true | C236 : T true | C237 : T true | C238 : T true | C239 : T true
+| C240 : T true | C241 : T true | C242 : T true | C243 : T true | C244 : T true
+| C245 : T true | C246 : T true | C247 : T true | C248 : T true | C249 : T true
+| C250 : T true | C251 : T true | C252 : T true | C253 : T true | C254 : T true
+| C255 : T true | C256 : T true | C257 : T true | C258 : T true | C259 : T true
+| C260 : T true | C261 : T true | C262 : T true | C263 : T true | C264 : T true
+| C265 : T true | C266 : T true | C267 : T true | C268 : T true | C269 : T true
+| C270 : T true | C271 : T true | C272 : T true | C273 : T true | C274 : T true
+| C275 : T true | C276 : T true | C277 : T true | C278 : T true | C279 : T true
+| C280 : T true | C281 : T true | C282 : T true | C283 : T true | C284 : T true
+| C285 : T true | C286 : T true | C287 : T true | C288 : T true | C289 : T true
+| C290 : T true | C291 : T true | C292 : T true | C293 : T true | C294 : T true
+| C295 : T true | C296 : T true | C297 : T true | C298 : T true | C299 : T true
+| C300 : T true | C301 : T true | C302 : T true | C303 : T true | C304 : T true
+| C305 : T true | C306 : T true | C307 : T true | C308 : T true | C309 : T true
+| C310 : T true | C311 : T true | C312 : T true | C313 : T true | C314 : T true
+| C315 : T true | C316 : T true | C317 : T true | C318 : T true | C319 : T true
+| C320 : T true | C321 : T true | C322 : T true | C323 : T true | C324 : T true
+| C325 : T true | C326 : T true | C327 : T true | C328 : T true | C329 : T true
+| C330 : T true | C331 : T true | C332 : T true | C333 : T true | C334 : T true
+| C335 : T true | C336 : T true | C337 : T true | C338 : T true | C339 : T true
+| C340 : T true | C341 : T true | C342 : T true | C343 : T true | C344 : T true
+| C345 : T true | C346 : T true | C347 : T true | C348 : T true | C349 : T true
+| C350 : T true | C351 : T true | C352 : T true | C353 : T true | C354 : T true
+| C355 : T true | C356 : T true | C357 : T true | C358 : T true | C359 : T true
+| C360 : T true | C361 : T true | C362 : T true | C363 : T true | C364 : T true
+| C365 : T true | C366 : T true | C367 : T true | C368 : T true | C369 : T true
+| C370 : T true | C371 : T true | C372 : T true | C373 : T true | C374 : T true
+| C375 : T true | C376 : T true | C377 : T true | C378 : T true | C379 : T true
+| C380 : T true | C381 : T true | C382 : T true | C383 : T true | C384 : T true
+| C385 : T true | C386 : T true | C387 : T true | C388 : T true | C389 : T true
+| C390 : T true | C391 : T true | C392 : T true | C393 : T true | C394 : T true
+| C395 : T true | C396 : T true | C397 : T true | C398 : T true | C399 : T true
+| C400 : T true | C401 : T true | C402 : T true | C403 : T true | C404 : T true
+| C405 : T true | C406 : T true | C407 : T true | C408 : T true | C409 : T true
+| C410 : T true | C411 : T true | C412 : T true | C413 : T true | C414 : T true
+| C415 : T true | C416 : T true | C417 : T true | C418 : T true | C419 : T true
+| C420 : T true | C421 : T true | C422 : T true | C423 : T true | C424 : T true
+| C425 : T true | C426 : T true | C427 : T true | C428 : T true | C429 : T true
+| C430 : T true | C431 : T true | C432 : T true | C433 : T true | C434 : T true
+| C435 : T true | C436 : T true | C437 : T true | C438 : T true | C439 : T true
+| C440 : T true | C441 : T true | C442 : T true | C443 : T true | C444 : T true
+| C445 : T true | C446 : T true | C447 : T true | C448 : T true | C449 : T true
+| C450 : T true | C451 : T true | C452 : T true | C453 : T true | C454 : T true
+| C455 : T true | C456 : T true | C457 : T true | C458 : T true | C459 : T true
+| C460 : T true | C461 : T true | C462 : T true | C463 : T true | C464 : T true
+| C465 : T true | C466 : T true | C467 : T true | C468 : T true | C469 : T true
+| C470 : T true | C471 : T true | C472 : T true | C473 : T true | C474 : T true
+| C475 : T true | C476 : T true | C477 : T true | C478 : T true | C479 : T true
+| C480 : T true | C481 : T true | C482 : T true | C483 : T true | C484 : T true
+| C485 : T true | C486 : T true | C487 : T true | C488 : T true | C489 : T true
+| C490 : T true | C491 : T true | C492 : T true | C493 : T true | C494 : T true
+| C495 : T true | C496 : T true | C497 : T true | C498 : T true | C499 : T true
+| C500 : T true | C501 : T true | C502 : T true | C503 : T true | C504 : T true
+| C505 : T true | C506 : T true | C507 : T true | C508 : T true | C509 : T true
+| C510 : T true | C511 : T true | C512 : T true | C513 : T true | C514 : T true
+| C515 : T true | C516 : T true | C517 : T true | C518 : T true | C519 : T true
+| C520 : T true | C521 : T true | C522 : T true | C523 : T true | C524 : T true
+| C525 : T true | C526 : T true | C527 : T true | C528 : T true | C529 : T true
+| C530 : T true | C531 : T true | C532 : T true | C533 : T true | C534 : T true
+| C535 : T true | C536 : T true | C537 : T true | C538 : T true | C539 : T true
+| C540 : T true | C541 : T true | C542 : T true | C543 : T true | C544 : T true
+| C545 : T true | C546 : T true | C547 : T true | C548 : T true | C549 : T true
+| C550 : T true | C551 : T true | C552 : T true | C553 : T true | C554 : T true
+| C555 : T true | C556 : T true | C557 : T true | C558 : T true | C559 : T true
+| C560 : T true | C561 : T true | C562 : T true | C563 : T true | C564 : T true
+| C565 : T true | C566 : T true | C567 : T true | C568 : T true | C569 : T true
+| C570 : T true | C571 : T true | C572 : T true | C573 : T true | C574 : T true
+| C575 : T true | C576 : T true | C577 : T true | C578 : T true | C579 : T true
+| C580 : T true | C581 : T true | C582 : T true | C583 : T true | C584 : T true
+| C585 : T true | C586 : T true | C587 : T true | C588 : T true | C589 : T true
+| C590 : T true | C591 : T true | C592 : T true | C593 : T true | C594 : T true
+| C595 : T true | C596 : T true | C597 : T true | C598 : T true | C599 : T true
+| C600 : T true | C601 : T true | C602 : T true | C603 : T true | C604 : T true
+| C605 : T true | C606 : T true | C607 : T true | C608 : T true | C609 : T true
+| C610 : T true | C611 : T true | C612 : T true | C613 : T true | C614 : T true
+| C615 : T true | C616 : T true | C617 : T true | C618 : T true | C619 : T true
+| C620 : T true | C621 : T true | C622 : T true | C623 : T true | C624 : T true
+| C625 : T true | C626 : T true | C627 : T true | C628 : T true | C629 : T true
+| C630 : T true | C631 : T true | C632 : T true | C633 : T true | C634 : T true
+| C635 : T true | C636 : T true | C637 : T true | C638 : T true | C639 : T true
+| C640 : T true | C641 : T true | C642 : T true | C643 : T true | C644 : T true
+| C645 : T true | C646 : T true | C647 : T true | C648 : T true | C649 : T true
+| C650 : T true | C651 : T true | C652 : T true | C653 : T true | C654 : T true
+| C655 : T true | C656 : T true | C657 : T true | C658 : T true | C659 : T true
+| C660 : T true | C661 : T true | C662 : T true | C663 : T true | C664 : T true
+| C665 : T true | C666 : T true | C667 : T true | C668 : T true | C669 : T true
+| C670 : T true | C671 : T true | C672 : T true | C673 : T true | C674 : T true
+| C675 : T true | C676 : T true | C677 : T true | C678 : T true | C679 : T true
+| C680 : T true | C681 : T true | C682 : T true | C683 : T true | C684 : T true
+| C685 : T true | C686 : T true | C687 : T true | C688 : T true | C689 : T true
+| C690 : T true | C691 : T true | C692 : T true | C693 : T true | C694 : T true
+| C695 : T true | C696 : T true | C697 : T true | C698 : T true | C699 : T true
+| C700 : T true | C701 : T true | C702 : T true | C703 : T true | C704 : T true
+| C705 : T true | C706 : T true | C707 : T true | C708 : T true | C709 : T true
+| C710 : T true | C711 : T true | C712 : T true | C713 : T true | C714 : T true
+| C715 : T true | C716 : T true | C717 : T true | C718 : T true | C719 : T true
+| C720 : T true | C721 : T true | C722 : T true | C723 : T true | C724 : T true
+| C725 : T true | C726 : T true | C727 : T true | C728 : T true | C729 : T true
+| C730 : T true | C731 : T true | C732 : T true | C733 : T true | C734 : T true
+| C735 : T true | C736 : T true | C737 : T true | C738 : T true | C739 : T true
+| C740 : T true | C741 : T true | C742 : T true | C743 : T true | C744 : T true
+| C745 : T true | C746 : T true | C747 : T true | C748 : T true | C749 : T true
+| C750 : T true | C751 : T true | C752 : T true | C753 : T true | C754 : T true
+| C755 : T true | C756 : T true | C757 : T true | C758 : T true | C759 : T true
+| C760 : T true | C761 : T true | C762 : T true | C763 : T true | C764 : T true
+| C765 : T true | C766 : T true | C767 : T true | C768 : T true | C769 : T true
+| C770 : T true | C771 : T true | C772 : T true | C773 : T true | C774 : T true
+| C775 : T true | C776 : T true | C777 : T true | C778 : T true | C779 : T true
+| C780 : T true | C781 : T true | C782 : T true | C783 : T true | C784 : T true
+| C785 : T true | C786 : T true | C787 : T true | C788 : T true | C789 : T true
+| C790 : T true | C791 : T true | C792 : T true | C793 : T true | C794 : T true
+| C795 : T true | C796 : T true | C797 : T true | C798 : T true | C799 : T true
+| C800 : T true | C801 : T true | C802 : T true | C803 : T true | C804 : T true
+| C805 : T true | C806 : T true | C807 : T true | C808 : T true | C809 : T true
+| C810 : T true | C811 : T true | C812 : T true | C813 : T true | C814 : T true
+| C815 : T true | C816 : T true | C817 : T true | C818 : T true | C819 : T true
+| C820 : T true | C821 : T true | C822 : T true | C823 : T true | C824 : T true
+| C825 : T true | C826 : T true | C827 : T true | C828 : T true | C829 : T true
+| C830 : T true | C831 : T true | C832 : T true | C833 : T true | C834 : T true
+| C835 : T true | C836 : T true | C837 : T true | C838 : T true | C839 : T true
+| C840 : T true | C841 : T true | C842 : T true | C843 : T true | C844 : T true
+| C845 : T true | C846 : T true | C847 : T true | C848 : T true | C849 : T true
+| C850 : T true | C851 : T true | C852 : T true | C853 : T true | C854 : T true
+| C855 : T true | C856 : T true | C857 : T true | C858 : T true | C859 : T true
+| C860 : T true | C861 : T true | C862 : T true | C863 : T true | C864 : T true
+| C865 : T true | C866 : T true | C867 : T true | C868 : T true | C869 : T true
+| C870 : T true | C871 : T true | C872 : T true | C873 : T true | C874 : T true
+| C875 : T true | C876 : T true | C877 : T true | C878 : T true | C879 : T true
+| C880 : T true | C881 : T true | C882 : T true | C883 : T true | C884 : T true
+| C885 : T true | C886 : T true | C887 : T true | C888 : T true | C889 : T true
+| C890 : T true | C891 : T true | C892 : T true | C893 : T true | C894 : T true
+| C895 : T true | C896 : T true | C897 : T true | C898 : T true | C899 : T true
+| C900 : T true | C901 : T true | C902 : T true | C903 : T true | C904 : T true
+| C905 : T true | C906 : T true | C907 : T true | C908 : T true | C909 : T true
+| C910 : T true | C911 : T true | C912 : T true | C913 : T true | C914 : T true
+| C915 : T true | C916 : T true | C917 : T true | C918 : T true | C919 : T true
+| C920 : T true | C921 : T true | C922 : T true | C923 : T true | C924 : T true
+| C925 : T true | C926 : T true | C927 : T true | C928 : T true | C929 : T true
+| C930 : T true | C931 : T true | C932 : T true | C933 : T true | C934 : T true
+| C935 : T true | C936 : T true | C937 : T true | C938 : T true | C939 : T true
+| C940 : T true | C941 : T true | C942 : T true | C943 : T true | C944 : T true
+| C945 : T true | C946 : T true | C947 : T true | C948 : T true | C949 : T true
+| C950 : T true | C951 : T true | C952 : T true | C953 : T true | C954 : T true
+| C955 : T true | C956 : T true | C957 : T true | C958 : T true | C959 : T true
+| C960 : T true | C961 : T true | C962 : T true | C963 : T true | C964 : T true
+| C965 : T true | C966 : T true | C967 : T true | C968 : T true | C969 : T true
+| C970 : T true | C971 : T true | C972 : T true | C973 : T true | C974 : T true
+| C975 : T true | C976 : T true | C977 : T true | C978 : T true | C979 : T true
+| C980 : T true | C981 : T true | C982 : T true | C983 : T true | C984 : T true
+| C985 : T true | C986 : T true | C987 : T true | C988 : T true | C989 : T true
+| C990 : T true | C991 : T true | C992 : T true | C993 : T true | C994 : T true
+| C995 : T true | C996 : T true | C997 : T true | C998 : T true | C999 : T true
+| C1000 : T false.
+
+Fixpoint expand (n : nat) : Prop :=
+ match n with
+ | O => T false
+ | S n => expand n
+ end.
+
+Example Expand : expand 2500.
+Time constructor. (* ~0.45 secs *)
diff --git a/test-suite/coq-makefile/arg/_CoqProject b/test-suite/coq-makefile/arg/_CoqProject
new file mode 100644
index 00000000..53dc9639
--- /dev/null
+++ b/test-suite/coq-makefile/arg/_CoqProject
@@ -0,0 +1,11 @@
+-R theories test
+-R src test
+-I src
+-arg "-w default"
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/arg/run.sh b/test-suite/coq-makefile/arg/run.sh
new file mode 100755
index 00000000..e7de90ff
--- /dev/null
+++ b/test-suite/coq-makefile/arg/run.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
diff --git a/test-suite/coq-makefile/compat-subdirs/_CoqProject b/test-suite/coq-makefile/compat-subdirs/_CoqProject
new file mode 100644
index 00000000..4f44bde2
--- /dev/null
+++ b/test-suite/coq-makefile/compat-subdirs/_CoqProject
@@ -0,0 +1,11 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+subdir/
diff --git a/test-suite/coq-makefile/compat-subdirs/run.sh b/test-suite/coq-makefile/compat-subdirs/run.sh
new file mode 100755
index 00000000..221dcd7b
--- /dev/null
+++ b/test-suite/coq-makefile/compat-subdirs/run.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+exec test -f "subdir/done"
diff --git a/test-suite/coq-makefile/compat-subdirs/subdir/Makefile b/test-suite/coq-makefile/compat-subdirs/subdir/Makefile
new file mode 100644
index 00000000..846c9b79
--- /dev/null
+++ b/test-suite/coq-makefile/compat-subdirs/subdir/Makefile
@@ -0,0 +1,3 @@
+all:
+ test -f ../theories/test.vo
+ touch done
diff --git a/test-suite/coq-makefile/coqdoc1/_CoqProject b/test-suite/coq-makefile/coqdoc1/_CoqProject
new file mode 100644
index 00000000..35792066
--- /dev/null
+++ b/test-suite/coq-makefile/coqdoc1/_CoqProject
@@ -0,0 +1,11 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/coqdoc1/run.sh b/test-suite/coq-makefile/coqdoc1/run.sh
new file mode 100755
index 00000000..dc5a500d
--- /dev/null
+++ b/test-suite/coq-makefile/coqdoc1/run.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+make install-doc DSTROOT="$PWD/tmp"
+#make debug
+(for d in `find tmp -name user-contrib` ; do pushd $d >/dev/null && find . && popd >/dev/null; done) | sort -u > actual
+sort -u > desired <<EOT
+.
+./test
+./test/test_plugin.cmi
+./test/test_plugin.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.glob
+./test/test.v
+./test/test.vo
+./test/sub
+./test/sub/testsub.glob
+./test/sub/testsub.v
+./test/sub/testsub.vo
+./test/mlihtml
+./test/mlihtml/index_exceptions.html
+./test/mlihtml/index.html
+./test/mlihtml/index_class_types.html
+./test/mlihtml/type_Test_aux.html
+./test/mlihtml/index_module_types.html
+./test/mlihtml/index_classes.html
+./test/mlihtml/type_Test.html
+./test/mlihtml/style.css
+./test/mlihtml/index_attributes.html
+./test/mlihtml/index_types.html
+./test/mlihtml/Test_aux.html
+./test/mlihtml/index_values.html
+./test/mlihtml/Test.html
+./test/mlihtml/index_extensions.html
+./test/mlihtml/index_methods.html
+./test/mlihtml/index_modules.html
+./test/html
+./test/html/index.html
+./test/html/test.sub.testsub.html
+./test/html/toc.html
+./test/html/coqdoc.css
+./test/html/test.test.html
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/coqdoc2/_CoqProject b/test-suite/coq-makefile/coqdoc2/_CoqProject
new file mode 100644
index 00000000..d2a547d4
--- /dev/null
+++ b/test-suite/coq-makefile/coqdoc2/_CoqProject
@@ -0,0 +1,11 @@
+-R src/ test
+-R theories/ test
+-I src/
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/coqdoc2/run.sh b/test-suite/coq-makefile/coqdoc2/run.sh
new file mode 100755
index 00000000..dc5a500d
--- /dev/null
+++ b/test-suite/coq-makefile/coqdoc2/run.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+make install-doc DSTROOT="$PWD/tmp"
+#make debug
+(for d in `find tmp -name user-contrib` ; do pushd $d >/dev/null && find . && popd >/dev/null; done) | sort -u > actual
+sort -u > desired <<EOT
+.
+./test
+./test/test_plugin.cmi
+./test/test_plugin.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.glob
+./test/test.v
+./test/test.vo
+./test/sub
+./test/sub/testsub.glob
+./test/sub/testsub.v
+./test/sub/testsub.vo
+./test/mlihtml
+./test/mlihtml/index_exceptions.html
+./test/mlihtml/index.html
+./test/mlihtml/index_class_types.html
+./test/mlihtml/type_Test_aux.html
+./test/mlihtml/index_module_types.html
+./test/mlihtml/index_classes.html
+./test/mlihtml/type_Test.html
+./test/mlihtml/style.css
+./test/mlihtml/index_attributes.html
+./test/mlihtml/index_types.html
+./test/mlihtml/Test_aux.html
+./test/mlihtml/index_values.html
+./test/mlihtml/Test.html
+./test/mlihtml/index_extensions.html
+./test/mlihtml/index_methods.html
+./test/mlihtml/index_modules.html
+./test/html
+./test/html/index.html
+./test/html/test.sub.testsub.html
+./test/html/toc.html
+./test/html/coqdoc.css
+./test/html/test.test.html
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/emptyprefix/_CoqProject b/test-suite/coq-makefile/emptyprefix/_CoqProject
new file mode 100644
index 00000000..5678a8ed
--- /dev/null
+++ b/test-suite/coq-makefile/emptyprefix/_CoqProject
@@ -0,0 +1,11 @@
+-R theories ""
+-R src ""
+-I src
+-arg "-w default"
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/emptyprefix/_CoqProject.sub b/test-suite/coq-makefile/emptyprefix/_CoqProject.sub
new file mode 100644
index 00000000..90ac541e
--- /dev/null
+++ b/test-suite/coq-makefile/emptyprefix/_CoqProject.sub
@@ -0,0 +1,3 @@
+-R ../theories ""
+-I ../src
+testsub.v
diff --git a/test-suite/coq-makefile/emptyprefix/run.sh b/test-suite/coq-makefile/emptyprefix/run.sh
new file mode 100755
index 00000000..a10e63b4
--- /dev/null
+++ b/test-suite/coq-makefile/emptyprefix/run.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+set -e
+
+. ../template/init.sh
+
+mv theories/sub theories2
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+
+cp ../_CoqProject.sub theories2/_CoqProject
+cd theories2
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
diff --git a/test-suite/coq-makefile/extend-subdirs/Makefile.local b/test-suite/coq-makefile/extend-subdirs/Makefile.local
new file mode 100644
index 00000000..b031d30d
--- /dev/null
+++ b/test-suite/coq-makefile/extend-subdirs/Makefile.local
@@ -0,0 +1,4 @@
+pre-all::
+ $(MAKE) -C subdir pre
+post-all::
+ $(MAKE) -C subdir post
diff --git a/test-suite/coq-makefile/extend-subdirs/_CoqProject b/test-suite/coq-makefile/extend-subdirs/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/extend-subdirs/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/extend-subdirs/run.sh b/test-suite/coq-makefile/extend-subdirs/run.sh
new file mode 100755
index 00000000..221dcd7b
--- /dev/null
+++ b/test-suite/coq-makefile/extend-subdirs/run.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+exec test -f "subdir/done"
diff --git a/test-suite/coq-makefile/extend-subdirs/subdir/Makefile b/test-suite/coq-makefile/extend-subdirs/subdir/Makefile
new file mode 100644
index 00000000..23f52b15
--- /dev/null
+++ b/test-suite/coq-makefile/extend-subdirs/subdir/Makefile
@@ -0,0 +1,5 @@
+pre:
+ test ! -f ../theories/test.vo
+post:
+ test -f ../theories/test.vo
+ touch done
diff --git a/test-suite/coq-makefile/findlib-package/Makefile.local b/test-suite/coq-makefile/findlib-package/Makefile.local
new file mode 100644
index 00000000..0f4a7d99
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/Makefile.local
@@ -0,0 +1 @@
+CAMLPKGS += -package foo
diff --git a/test-suite/coq-makefile/findlib-package/_CoqProject b/test-suite/coq-makefile/findlib-package/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/findlib-package/findlib/foo/META b/test-suite/coq-makefile/findlib-package/findlib/foo/META
new file mode 100644
index 00000000..ff5f1c7c
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/findlib/foo/META
@@ -0,0 +1,4 @@
+archive(byte)="foo.cma"
+archive(native)="foo.cmxa"
+linkopts="-linkall"
+requires="str"
diff --git a/test-suite/coq-makefile/findlib-package/findlib/foo/Makefile b/test-suite/coq-makefile/findlib-package/findlib/foo/Makefile
new file mode 100644
index 00000000..1615bfd0
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/findlib/foo/Makefile
@@ -0,0 +1,14 @@
+-include ../../Makefile.conf
+
+CO="$(COQMF_OCAMLFIND)" opt
+CB="$(COQMF_OCAMLFIND)" ocamlc
+
+all:
+ $(CO) -c foolib.ml
+ $(CO) -a foolib.cmx -o foo.cmxa
+ $(CB) -c foolib.ml
+ $(CB) -a foolib.cmo -o foo.cma
+ $(CB) -c foo.mli # empty .mli file, to be understood
+
+clean:
+ rm -f *.cmo *.cma *.cmx *.cmxa *.cmi *.o *.a
diff --git a/test-suite/coq-makefile/findlib-package/findlib/foo/foo.mli b/test-suite/coq-makefile/findlib-package/findlib/foo/foo.mli
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/findlib/foo/foo.mli
diff --git a/test-suite/coq-makefile/findlib-package/findlib/foo/foolib.ml b/test-suite/coq-makefile/findlib-package/findlib/foo/foolib.ml
new file mode 100644
index 00000000..81306fb8
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/findlib/foo/foolib.ml
@@ -0,0 +1,2 @@
+let foo () =
+ assert(Str.search_forward (Str.regexp "foo") "barfoobar" 0 = 3)
diff --git a/test-suite/coq-makefile/findlib-package/run.sh b/test-suite/coq-makefile/findlib-package/run.sh
new file mode 100755
index 00000000..5b24df63
--- /dev/null
+++ b/test-suite/coq-makefile/findlib-package/run.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+echo "let () = Foolib.foo ();;" >> src/test_aux.ml
+export OCAMLPATH=$OCAMLPATH:$PWD/findlib
+if which cygpath 2>/dev/null; then
+ # the only way I found to pass OCAMLPATH on win is to have it contain
+ # only one entry
+ export OCAMLPATH=`cygpath -w $PWD/findlib`
+fi
+make -C findlib/foo clean
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+cat Makefile.local
+make -C findlib/foo
+make
+make byte
diff --git a/test-suite/coq-makefile/latex1/_CoqProject b/test-suite/coq-makefile/latex1/_CoqProject
new file mode 100644
index 00000000..35792066
--- /dev/null
+++ b/test-suite/coq-makefile/latex1/_CoqProject
@@ -0,0 +1,11 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/latex1/run.sh b/test-suite/coq-makefile/latex1/run.sh
new file mode 100755
index 00000000..b2c5d566
--- /dev/null
+++ b/test-suite/coq-makefile/latex1/run.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+
+if which pdflatex; then
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+exec make all.pdf
+
+fi
+exit 0 # test skipped
diff --git a/test-suite/coq-makefile/merlin1/_CoqProject b/test-suite/coq-makefile/merlin1/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/merlin1/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/merlin1/run.sh b/test-suite/coq-makefile/merlin1/run.sh
new file mode 100755
index 00000000..1f262a93
--- /dev/null
+++ b/test-suite/coq-makefile/merlin1/run.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make .merlin
+cat > desired <<EOT
+B src
+S src
+EOT
+tail -2 .merlin > actual
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/mlpack1/_CoqProject b/test-suite/coq-makefile/mlpack1/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/mlpack1/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/mlpack1/run.sh b/test-suite/coq-makefile/mlpack1/run.sh
new file mode 100755
index 00000000..03df9cf0
--- /dev/null
+++ b/test-suite/coq-makefile/mlpack1/run.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test_plugin.cmi
+./test/test_plugin.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/mlpack2/_CoqProject b/test-suite/coq-makefile/mlpack2/_CoqProject
new file mode 100644
index 00000000..51864a87
--- /dev/null
+++ b/test-suite/coq-makefile/mlpack2/_CoqProject
@@ -0,0 +1,10 @@
+-R src/ test
+-R theories/ test
+-I src/
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/mlpack2/run.sh b/test-suite/coq-makefile/mlpack2/run.sh
new file mode 100755
index 00000000..03df9cf0
--- /dev/null
+++ b/test-suite/coq-makefile/mlpack2/run.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test_plugin.cmi
+./test/test_plugin.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/multiroot/_CoqProject b/test-suite/coq-makefile/multiroot/_CoqProject
new file mode 100644
index 00000000..b384bb6d
--- /dev/null
+++ b/test-suite/coq-makefile/multiroot/_CoqProject
@@ -0,0 +1,12 @@
+-R theories/ test
+-R theories2 test2
+-R src/ test
+-I src/
+
+./src/test_plugin.mllib
+./src/test.ml4
+./src/test.mli
+./src/test_aux.ml
+./src/test_aux.mli
+./theories/test.v
+./theories2/test.v
diff --git a/test-suite/coq-makefile/multiroot/run.sh b/test-suite/coq-makefile/multiroot/run.sh
new file mode 100755
index 00000000..d3bb5310
--- /dev/null
+++ b/test-suite/coq-makefile/multiroot/run.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+cp -r theories theories2
+mv src/test_plugin.mlpack src/test_plugin.mllib
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+make install-doc DSTROOT="$PWD/tmp"
+#make debug
+(for d in `find tmp -name user-contrib` ; do pushd $d >/dev/null && find . && popd >/dev/null; done) | sort -u > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test.cmi
+./test/test.cmx
+./test/test_aux.cmi
+./test/test_aux.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+./test2
+./test2/test.glob
+./test2/test.v
+./test2/test.vo
+./orphan_test_test2_test
+./orphan_test_test2_test/html
+./orphan_test_test2_test/html/coqdoc.css
+./orphan_test_test2_test/html/index.html
+./orphan_test_test2_test/html/test2.test.html
+./orphan_test_test2_test/html/test.test.html
+./orphan_test_test2_test/html/toc.html
+./orphan_test_test2_test/mlihtml
+./orphan_test_test2_test/mlihtml/index_attributes.html
+./orphan_test_test2_test/mlihtml/index_classes.html
+./orphan_test_test2_test/mlihtml/index_class_types.html
+./orphan_test_test2_test/mlihtml/index_exceptions.html
+./orphan_test_test2_test/mlihtml/index_extensions.html
+./orphan_test_test2_test/mlihtml/index.html
+./orphan_test_test2_test/mlihtml/index_methods.html
+./orphan_test_test2_test/mlihtml/index_modules.html
+./orphan_test_test2_test/mlihtml/index_module_types.html
+./orphan_test_test2_test/mlihtml/index_types.html
+./orphan_test_test2_test/mlihtml/index_values.html
+./orphan_test_test2_test/mlihtml/style.css
+./orphan_test_test2_test/mlihtml/Test_aux.html
+./orphan_test_test2_test/mlihtml/Test.html
+./orphan_test_test2_test/mlihtml/type_Test_aux.html
+./orphan_test_test2_test/mlihtml/type_Test.html
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/native1/_CoqProject b/test-suite/coq-makefile/native1/_CoqProject
new file mode 100644
index 00000000..a6fa1734
--- /dev/null
+++ b/test-suite/coq-makefile/native1/_CoqProject
@@ -0,0 +1,11 @@
+-R src test
+-R theories test
+-I src
+-arg -native-compiler
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/native1/run.sh b/test-suite/coq-makefile/native1/run.sh
new file mode 100755
index 00000000..89bafe9a
--- /dev/null
+++ b/test-suite/coq-makefile/native1/run.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+NATIVECOMP=`grep "let no_native_compiler = false" ../../../config/coq_config.ml`||true
+if [[ `which ocamlopt` && $NATIVECOMP ]]; then
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test_plugin.cmi
+./test/test_plugin.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+./test/.coq-native
+./test/.coq-native/Ntest_test.cmi
+./test/.coq-native/Ntest_test.cmx
+./test/.coq-native/Ntest_test.cmxs
+EOT
+exec diff -u desired actual
+
+fi
+exit 0 # test skipped
diff --git a/test-suite/coq-makefile/only/_CoqProject b/test-suite/coq-makefile/only/_CoqProject
new file mode 100644
index 00000000..357384fd
--- /dev/null
+++ b/test-suite/coq-makefile/only/_CoqProject
@@ -0,0 +1,11 @@
+-R theories/ test
+-R src/ test
+-I src/
+
+./src/test_plugin.mlpack
+./src/test.ml4
+./src/test.mli
+./src/test_aux.ml
+./src/test_aux.mli
+./theories/test.v
+./theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/only/run.sh b/test-suite/coq-makefile/only/run.sh
new file mode 100755
index 00000000..8cf04bf2
--- /dev/null
+++ b/test-suite/coq-makefile/only/run.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make only TGTS="src/test.cmi src/test_aux.cmi" -j2
+test -f src/test.cmi
+test -f src/test_aux.cmi
+! test -f src/test.cmo
diff --git a/test-suite/coq-makefile/plugin1/_CoqProject b/test-suite/coq-makefile/plugin1/_CoqProject
new file mode 100644
index 00000000..4eddc9d7
--- /dev/null
+++ b/test-suite/coq-makefile/plugin1/_CoqProject
@@ -0,0 +1,10 @@
+-R theories test
+-R src test
+-I src
+
+src/test_plugin.mllib
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/plugin1/run.sh b/test-suite/coq-makefile/plugin1/run.sh
new file mode 100755
index 00000000..5433d9e9
--- /dev/null
+++ b/test-suite/coq-makefile/plugin1/run.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+mv src/test_plugin.mlpack src/test_plugin.mllib
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test.cmi
+./test/test.cmx
+./test/test_aux.cmi
+./test/test_aux.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/plugin2/_CoqProject b/test-suite/coq-makefile/plugin2/_CoqProject
new file mode 100644
index 00000000..0bf1e07f
--- /dev/null
+++ b/test-suite/coq-makefile/plugin2/_CoqProject
@@ -0,0 +1,10 @@
+-R theories/ test
+-R src/ test
+-I src/
+
+src/test_plugin.mllib
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/plugin2/run.sh b/test-suite/coq-makefile/plugin2/run.sh
new file mode 100755
index 00000000..5433d9e9
--- /dev/null
+++ b/test-suite/coq-makefile/plugin2/run.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+mv src/test_plugin.mlpack src/test_plugin.mllib
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test.cmi
+./test/test.cmx
+./test/test_aux.cmi
+./test/test_aux.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/plugin3/_CoqProject b/test-suite/coq-makefile/plugin3/_CoqProject
new file mode 100644
index 00000000..2028d49a
--- /dev/null
+++ b/test-suite/coq-makefile/plugin3/_CoqProject
@@ -0,0 +1,10 @@
+-R theories/ test
+-R src/ test
+-I src/
+
+./src/test_plugin.mllib
+./src/test.ml4
+./src/test.mli
+./src/test_aux.ml
+./src/test_aux.mli
+./theories/test.v
diff --git a/test-suite/coq-makefile/plugin3/run.sh b/test-suite/coq-makefile/plugin3/run.sh
new file mode 100755
index 00000000..5433d9e9
--- /dev/null
+++ b/test-suite/coq-makefile/plugin3/run.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+mv src/test_plugin.mlpack src/test_plugin.mllib
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+#make debug
+(cd `find tmp -name user-contrib` && find .) | sort > actual
+sort > desired <<EOT
+.
+./test
+./test/test.glob
+./test/test.cmi
+./test/test.cmx
+./test/test_aux.cmi
+./test/test_aux.cmx
+./test/test_plugin.cmxa
+./test/test_plugin.cmxs
+./test/test.v
+./test/test.vo
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/quick2vo/_CoqProject b/test-suite/coq-makefile/quick2vo/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/quick2vo/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/quick2vo/run.sh b/test-suite/coq-makefile/quick2vo/run.sh
new file mode 100755
index 00000000..9e681223
--- /dev/null
+++ b/test-suite/coq-makefile/quick2vo/run.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+a=`uname`
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+# vio2vo is broken on Windows (#6720)
+if [ "$a" = "Darwin" -o "$a" = "Linux" ]; then
+ make quick2vo J=2
+ test -f theories/test.vo
+ make validate
+fi
diff --git a/test-suite/coq-makefile/template/init.sh b/test-suite/coq-makefile/template/init.sh
new file mode 100755
index 00000000..e19d168c
--- /dev/null
+++ b/test-suite/coq-makefile/template/init.sh
@@ -0,0 +1,17 @@
+. ../template/path-init.sh
+
+rm -rf _test
+mkdir _test
+find . -maxdepth 1 -not -name . -not -name _test -exec cp -r '{}' -t _test ';'
+
+cd _test
+mkdir -p src
+mkdir -p theories/sub
+
+cp ../../template/theories/sub/testsub.v theories/sub
+cp ../../template/theories/test.v theories
+cp ../../template/src/test.ml4 src
+cp ../../template/src/test_aux.mli src
+cp ../../template/src/test.mli src
+cp ../../template/src/test_plugin.mlpack src
+cp ../../template/src/test_aux.ml src
diff --git a/test-suite/coq-makefile/template/path-init.sh b/test-suite/coq-makefile/template/path-init.sh
new file mode 100755
index 00000000..dd19ab2b
--- /dev/null
+++ b/test-suite/coq-makefile/template/path-init.sh
@@ -0,0 +1,5 @@
+set -e
+set -o pipefail
+
+export PATH="$COQBIN:$PATH"
+export LC_ALL=C
diff --git a/test-suite/coq-makefile/template/src/test.ml4 b/test-suite/coq-makefile/template/src/test.ml4
new file mode 100644
index 00000000..72765abe
--- /dev/null
+++ b/test-suite/coq-makefile/template/src/test.ml4
@@ -0,0 +1,14 @@
+open Ltac_plugin
+DECLARE PLUGIN "test_plugin"
+let () = Mltop.add_known_plugin (fun () -> ()) "test_plugin";;
+
+VERNAC COMMAND EXTEND Test CLASSIFIED AS SIDEFF
+ | [ "TestCommand" ] -> [ () ]
+END
+
+TACTIC EXTEND test
+| [ "test_tactic" ] -> [ Test_aux.tac ]
+END
+
+
+
diff --git a/test-suite/coq-makefile/template/src/test.mli b/test-suite/coq-makefile/template/src/test.mli
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test-suite/coq-makefile/template/src/test.mli
diff --git a/test-suite/coq-makefile/template/src/test_aux.ml b/test-suite/coq-makefile/template/src/test_aux.ml
new file mode 100644
index 00000000..a01d0865
--- /dev/null
+++ b/test-suite/coq-makefile/template/src/test_aux.ml
@@ -0,0 +1 @@
+let tac = Proofview.tclUNIT ()
diff --git a/test-suite/coq-makefile/template/src/test_aux.mli b/test-suite/coq-makefile/template/src/test_aux.mli
new file mode 100644
index 00000000..10020f27
--- /dev/null
+++ b/test-suite/coq-makefile/template/src/test_aux.mli
@@ -0,0 +1 @@
+val tac : unit Proofview.tactic
diff --git a/test-suite/coq-makefile/template/src/test_plugin.mlpack b/test-suite/coq-makefile/template/src/test_plugin.mlpack
new file mode 100644
index 00000000..cf94d851
--- /dev/null
+++ b/test-suite/coq-makefile/template/src/test_plugin.mlpack
@@ -0,0 +1,2 @@
+Test_aux
+Test
diff --git a/test-suite/coq-makefile/template/theories/sub/testsub.v b/test-suite/coq-makefile/template/theories/sub/testsub.v
new file mode 100644
index 00000000..755fc343
--- /dev/null
+++ b/test-suite/coq-makefile/template/theories/sub/testsub.v
@@ -0,0 +1 @@
+Require Import test.
diff --git a/test-suite/coq-makefile/template/theories/test.v b/test-suite/coq-makefile/template/theories/test.v
new file mode 100644
index 00000000..744b5aad
--- /dev/null
+++ b/test-suite/coq-makefile/template/theories/test.v
@@ -0,0 +1,7 @@
+Declare ML Module "test_plugin".
+TestCommand.
+Goal True.
+Proof.
+test_tactic.
+exact I.
+Qed.
diff --git a/test-suite/coq-makefile/timing/after/Fast.v b/test-suite/coq-makefile/timing/after/Fast.v
new file mode 100644
index 00000000..54d3cfc3
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/Fast.v
@@ -0,0 +1,4 @@
+Require Coq.ZArith.BinInt.
+Definition foo0 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo1 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo2 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
diff --git a/test-suite/coq-makefile/timing/after/Slow.v b/test-suite/coq-makefile/timing/after/Slow.v
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/Slow.v
@@ -0,0 +1 @@
+
diff --git a/test-suite/coq-makefile/timing/after/_CoqProject b/test-suite/coq-makefile/timing/after/_CoqProject
new file mode 100644
index 00000000..36c3a18c
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/_CoqProject
@@ -0,0 +1,2 @@
+Slow.v
+Fast.v
diff --git a/test-suite/coq-makefile/timing/after/time-of-build-after.log.desired b/test-suite/coq-makefile/timing/after/time-of-build-after.log.desired
new file mode 100644
index 00000000..7900c034
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/time-of-build-after.log.desired
@@ -0,0 +1,15 @@
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+COQDEP VFILES
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+COQC Slow.v
+Slow (real: 0.04, user: 0.02, sys: 0.01, mem: 45512 ko)
+COQC Fast.v
+Fast (real: 0.41, user: 0.37, sys: 0.04, mem: 395200 ko)
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
diff --git a/test-suite/coq-makefile/timing/after/time-of-build-before.log.desired b/test-suite/coq-makefile/timing/after/time-of-build-before.log.desired
new file mode 100644
index 00000000..7ab0bc75
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/time-of-build-before.log.desired
@@ -0,0 +1,15 @@
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+COQDEP VFILES
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
+COQC Slow.v
+Slow (real: 0.40, user: 0.35, sys: 0.04, mem: 394968 ko)
+COQC Fast.v
+Fast (real: 0.04, user: 0.03, sys: 0.00, mem: 46564 ko)
+Makefile:69: warning: undefined variable '*'
+Makefile:204: warning: undefined variable 'DSTROOT'
diff --git a/test-suite/coq-makefile/timing/after/time-of-build-both.log.desired b/test-suite/coq-makefile/timing/after/time-of-build-both.log.desired
new file mode 100644
index 00000000..72c52021
--- /dev/null
+++ b/test-suite/coq-makefile/timing/after/time-of-build-both.log.desired
@@ -0,0 +1,6 @@
+After | File Name | Before || Change | % Change
+--------------------------------------------------------
+0m00.34s | Total | 0m00.49s || -0m00.14s | -30.61%
+--------------------------------------------------------
+0m00.32s | Fast | 0m00.02s || +0m00.30s | +1500.00%
+0m00.02s | Slow | 0m00.47s || -0m00.44s | -95.74% \ No newline at end of file
diff --git a/test-suite/coq-makefile/timing/aggregate/Fast.v b/test-suite/coq-makefile/timing/aggregate/Fast.v
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/test-suite/coq-makefile/timing/aggregate/Fast.v
@@ -0,0 +1 @@
+
diff --git a/test-suite/coq-makefile/timing/aggregate/Slow.v b/test-suite/coq-makefile/timing/aggregate/Slow.v
new file mode 100644
index 00000000..54d3cfc3
--- /dev/null
+++ b/test-suite/coq-makefile/timing/aggregate/Slow.v
@@ -0,0 +1,4 @@
+Require Coq.ZArith.BinInt.
+Definition foo0 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo1 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo2 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
diff --git a/test-suite/coq-makefile/timing/aggregate/_CoqProject b/test-suite/coq-makefile/timing/aggregate/_CoqProject
new file mode 100644
index 00000000..36c3a18c
--- /dev/null
+++ b/test-suite/coq-makefile/timing/aggregate/_CoqProject
@@ -0,0 +1,2 @@
+Slow.v
+Fast.v
diff --git a/test-suite/coq-makefile/timing/before/Fast.v b/test-suite/coq-makefile/timing/before/Fast.v
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/test-suite/coq-makefile/timing/before/Fast.v
@@ -0,0 +1 @@
+
diff --git a/test-suite/coq-makefile/timing/before/Slow.v b/test-suite/coq-makefile/timing/before/Slow.v
new file mode 100644
index 00000000..54d3cfc3
--- /dev/null
+++ b/test-suite/coq-makefile/timing/before/Slow.v
@@ -0,0 +1,4 @@
+Require Coq.ZArith.BinInt.
+Definition foo0 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo1 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
+Definition foo2 := Eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl.
diff --git a/test-suite/coq-makefile/timing/before/_CoqProject b/test-suite/coq-makefile/timing/before/_CoqProject
new file mode 100644
index 00000000..36c3a18c
--- /dev/null
+++ b/test-suite/coq-makefile/timing/before/_CoqProject
@@ -0,0 +1,2 @@
+Slow.v
+Fast.v
diff --git a/test-suite/coq-makefile/timing/error/A.v b/test-suite/coq-makefile/timing/error/A.v
new file mode 100644
index 00000000..932363a1
--- /dev/null
+++ b/test-suite/coq-makefile/timing/error/A.v
@@ -0,0 +1 @@
+Check I : I.
diff --git a/test-suite/coq-makefile/timing/error/_CoqProject b/test-suite/coq-makefile/timing/error/_CoqProject
new file mode 100644
index 00000000..790e0571
--- /dev/null
+++ b/test-suite/coq-makefile/timing/error/_CoqProject
@@ -0,0 +1 @@
+A.v
diff --git a/test-suite/coq-makefile/timing/per-file-after/A.v b/test-suite/coq-makefile/timing/per-file-after/A.v
new file mode 100644
index 00000000..851e2b97
--- /dev/null
+++ b/test-suite/coq-makefile/timing/per-file-after/A.v
@@ -0,0 +1,4 @@
+Require Coq.ZArith.BinInt.
+Declare Reduction comp := native_compute.
+Definition foo0 := Eval comp in (Coq.ZArith.BinInt.Z.div_eucl, Coq.ZArith.BinInt.Z.div_eucl).
+Definition foo1 := Eval comp in (foo0, foo0).
diff --git a/test-suite/coq-makefile/timing/per-file-after/A.v.timing.diff.desired b/test-suite/coq-makefile/timing/per-file-after/A.v.timing.diff.desired
new file mode 100644
index 00000000..74dad733
--- /dev/null
+++ b/test-suite/coq-makefile/timing/per-file-after/A.v.timing.diff.desired
@@ -0,0 +1,9 @@
+After | Code | Before || Change | % Change
+----------------------------------------------------------------------------------------------------
+0m04.35s | Total | 0m00.58s || +0m03.77s | +649.05%
+----------------------------------------------------------------------------------------------------
+0m03.87s | Chars 163 - 208 [Definition~foo1~:=~Eval~comp~i...] | 0m00.246s || +0m03.62s | +1473.17%
+0m00.322s | Chars 069 - 162 [Definition~foo0~:=~Eval~comp~i...] | 0m00.189s || +0m00.13s | +70.37%
+0m00.16s | Chars 000 - 026 [Require~Coq.ZArith.BinInt.] | 0m00.146s || +0m00.01s | +9.58%
+0m00.s | Chars 027 - 068 [Declare~Reduction~comp~:=~nati...] | N/A || +0m00.00s | N/A
+ N/A | Chars 027 - 068 [Declare~Reduction~comp~:=~vm_c...] | 0m00.s || +0m00.00s | N/A \ No newline at end of file
diff --git a/test-suite/coq-makefile/timing/per-file-after/_CoqProject b/test-suite/coq-makefile/timing/per-file-after/_CoqProject
new file mode 100644
index 00000000..790e0571
--- /dev/null
+++ b/test-suite/coq-makefile/timing/per-file-after/_CoqProject
@@ -0,0 +1 @@
+A.v
diff --git a/test-suite/coq-makefile/timing/per-file-before/A.v b/test-suite/coq-makefile/timing/per-file-before/A.v
new file mode 100644
index 00000000..115c1f95
--- /dev/null
+++ b/test-suite/coq-makefile/timing/per-file-before/A.v
@@ -0,0 +1,4 @@
+Require Coq.ZArith.BinInt.
+Declare Reduction comp := vm_compute.
+Definition foo0 := Eval comp in (Coq.ZArith.BinInt.Z.div_eucl, Coq.ZArith.BinInt.Z.div_eucl).
+Definition foo1 := Eval comp in (foo0, foo0).
diff --git a/test-suite/coq-makefile/timing/per-file-before/_CoqProject b/test-suite/coq-makefile/timing/per-file-before/_CoqProject
new file mode 100644
index 00000000..790e0571
--- /dev/null
+++ b/test-suite/coq-makefile/timing/per-file-before/_CoqProject
@@ -0,0 +1 @@
+A.v
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/run.sh b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/run.sh
new file mode 100755
index 00000000..4a50759b
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/run.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -x
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+"$COQLIB"/tools/make-both-time-files.py time-of-build-after.log.in time-of-build-before.log.in time-of-build-both.log
+
+diff -u time-of-build-both.log.expected time-of-build-both.log || exit $?
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-after.log.in b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-after.log.in
new file mode 100644
index 00000000..5757018e
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-after.log.in
@@ -0,0 +1,1760 @@
+COQDEP src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+COQDEP src/Compilers/Z/Bounds/Pipeline/Definition.v
+/home/jgross/.local64/coq/coq-master/bin/coq_makefile -f _CoqProject INSTALLDEFAULTROOT = Crypto -o Makefile-old
+COQ_MAKEFILE -f _CoqProject > Makefile.coq
+make --no-print-directory -C coqprime
+make[1]: Nothing to be done for 'all'.
+ECHO > _CoqProject
+COQC src/Compilers/Z/Bounds/Pipeline/Definition.v
+src/Compilers/Z/Bounds/Pipeline/Definition (real: 7.33, user: 7.18, sys: 0.14, mem: 574388 ko)
+COQC src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics (real: 1.93, user: 1.72, sys: 0.20, mem: 544172 ko)
+COQC src/Compilers/Z/Bounds/Pipeline.v
+src/Compilers/Z/Bounds/Pipeline (real: 1.38, user: 1.19, sys: 0.16, mem: 539808 ko)
+COQC src/Specific/Framework/SynthesisFramework.v
+src/Specific/Framework/SynthesisFramework (real: 1.85, user: 1.67, sys: 0.17, mem: 646300 ko)
+COQC src/Specific/X25519/C64/Synthesis.v
+src/Specific/X25519/C64/Synthesis (real: 11.15, user: 10.37, sys: 0.18, mem: 687760 ko)
+COQC src/Specific/NISTP256/AMD64/Synthesis.v
+src/Specific/NISTP256/AMD64/Synthesis (real: 13.45, user: 12.55, sys: 0.19, mem: 668216 ko)
+COQC src/Specific/X25519/C64/feadd.v
+Finished transaction in 2.814 secs (2.624u,0.s) (successful)
+total time: 2.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 66.9% 1 1.724s
+─ReflectiveTactics.solve_side_conditions 0.0% 65.5% 1 1.688s
+─ReflectiveTactics.solve_post_reified_si 1.2% 37.0% 1 0.952s
+─Glue.refine_to_reflective_glue' ------- 0.0% 30.3% 1 0.780s
+─ReflectiveTactics.do_reify ------------ 0.0% 28.6% 1 0.736s
+─Reify.Reify_rhs_gen ------------------- 2.2% 26.6% 1 0.684s
+─UnifyAbstractReflexivity.unify_transfor 20.3% 24.1% 7 0.164s
+─Glue.zrange_to_reflective ------------- 0.0% 20.3% 1 0.524s
+─Glue.zrange_to_reflective_goal -------- 9.5% 15.2% 1 0.392s
+─Reify.do_reify_abs_goal --------------- 13.7% 13.8% 2 0.356s
+─Reify.do_reifyf_goal ------------------ 12.4% 12.6% 16 0.324s
+─ReflectiveTactics.unify_abstract_cbv_in 8.4% 11.2% 1 0.288s
+─unify (constr) (constr) --------------- 5.7% 5.7% 6 0.072s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.4% 1 0.140s
+─assert (H : is_bounded_by' bounds (map' 4.8% 5.1% 2 0.072s
+─Glue.pattern_proj1_sig_in_sig --------- 1.7% 5.1% 1 0.132s
+─pose proof (pf : Interpretation.Bo 3.7% 3.7% 1 0.096s
+─Glue.split_BoundedWordToZ ------------- 0.3% 3.7% 1 0.096s
+─destruct_sig -------------------------- 0.2% 3.3% 4 0.044s
+─destruct x ---------------------------- 3.1% 3.1% 4 0.036s
+─eexact -------------------------------- 3.0% 3.0% 18 0.008s
+─clearbody (ne_var_list) --------------- 3.0% 3.0% 4 0.060s
+─prove_interp_compile_correct ---------- 0.0% 2.8% 1 0.072s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 0.064s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.3% 2 0.060s
+─rewrite H ----------------------------- 2.2% 2.2% 1 0.056s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.032s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.032s
+─transitivity -------------------------- 2.0% 2.0% 5 0.024s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 66.9% 1 1.724s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 65.5% 1 1.688s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 37.0% 1 0.952s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 20.3% 24.1% 7 0.164s
+ │ │ │└unify (constr) (constr) --------- 3.0% 3.0% 5 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 8.4% 11.2% 1 0.288s
+ │ │ └unify (constr) (constr) --------- 2.8% 2.8% 1 0.072s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 28.6% 1 0.736s
+ │ └Reify.Reify_rhs_gen --------------- 2.2% 26.6% 1 0.684s
+ │ ├─Reify.do_reify_abs_goal --------- 13.7% 13.8% 2 0.356s
+ │ │└Reify.do_reifyf_goal ------------ 12.4% 12.6% 16 0.324s
+ │ │└eexact -------------------------- 2.6% 2.6% 16 0.008s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.8% 1 0.072s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 0.064s
+ │ ├─rewrite H ----------------------- 2.2% 2.2% 1 0.056s
+ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.032s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 30.3% 1 0.780s
+ ├─Glue.zrange_to_reflective --------- 0.0% 20.3% 1 0.524s
+ │ ├─Glue.zrange_to_reflective_goal -- 9.5% 15.2% 1 0.392s
+ │ │└pose proof (pf : Interpretat 3.7% 3.7% 1 0.096s
+ │ └─assert (H : is_bounded_by' bounds 4.8% 5.1% 2 0.072s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.4% 1 0.140s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.7% 5.1% 1 0.132s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.3% 2 0.060s
+ │└clearbody (ne_var_list) ----------- 2.3% 2.3% 1 0.060s
+ └─Glue.split_BoundedWordToZ --------- 0.3% 3.7% 1 0.096s
+ └destruct_sig ---------------------- 0.2% 3.3% 4 0.044s
+ └destruct x ------------------------ 2.5% 2.5% 2 0.036s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+Finished transaction in 5.021 secs (4.636u,0.s) (successful)
+Closed under the global context
+total time: 2.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 66.9% 1 1.724s
+─ReflectiveTactics.solve_side_conditions 0.0% 65.5% 1 1.688s
+─ReflectiveTactics.solve_post_reified_si 1.2% 37.0% 1 0.952s
+─Glue.refine_to_reflective_glue' ------- 0.0% 30.3% 1 0.780s
+─ReflectiveTactics.do_reify ------------ 0.0% 28.6% 1 0.736s
+─Reify.Reify_rhs_gen ------------------- 2.2% 26.6% 1 0.684s
+─UnifyAbstractReflexivity.unify_transfor 20.3% 24.1% 7 0.164s
+─Glue.zrange_to_reflective ------------- 0.0% 20.3% 1 0.524s
+─Glue.zrange_to_reflective_goal -------- 9.5% 15.2% 1 0.392s
+─Reify.do_reify_abs_goal --------------- 13.7% 13.8% 2 0.356s
+─Reify.do_reifyf_goal ------------------ 12.4% 12.6% 16 0.324s
+─ReflectiveTactics.unify_abstract_cbv_in 8.4% 11.2% 1 0.288s
+─unify (constr) (constr) --------------- 5.7% 5.7% 6 0.072s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.4% 1 0.140s
+─assert (H : is_bounded_by' bounds (map' 4.8% 5.1% 2 0.072s
+─Glue.pattern_proj1_sig_in_sig --------- 1.7% 5.1% 1 0.132s
+─pose proof (pf : Interpretation.Bo 3.7% 3.7% 1 0.096s
+─Glue.split_BoundedWordToZ ------------- 0.3% 3.7% 1 0.096s
+─destruct_sig -------------------------- 0.2% 3.3% 4 0.044s
+─destruct x ---------------------------- 3.1% 3.1% 4 0.036s
+─eexact -------------------------------- 3.0% 3.0% 18 0.008s
+─clearbody (ne_var_list) --------------- 3.0% 3.0% 4 0.060s
+─prove_interp_compile_correct ---------- 0.0% 2.8% 1 0.072s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 0.064s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.3% 2 0.060s
+─rewrite H ----------------------------- 2.2% 2.2% 1 0.056s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.032s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.032s
+─transitivity -------------------------- 2.0% 2.0% 5 0.024s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 66.9% 1 1.724s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 65.5% 1 1.688s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 37.0% 1 0.952s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 20.3% 24.1% 7 0.164s
+ │ │ │└unify (constr) (constr) --------- 3.0% 3.0% 5 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 8.4% 11.2% 1 0.288s
+ │ │ └unify (constr) (constr) --------- 2.8% 2.8% 1 0.072s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 28.6% 1 0.736s
+ │ └Reify.Reify_rhs_gen --------------- 2.2% 26.6% 1 0.684s
+ │ ├─Reify.do_reify_abs_goal --------- 13.7% 13.8% 2 0.356s
+ │ │└Reify.do_reifyf_goal ------------ 12.4% 12.6% 16 0.324s
+ │ │└eexact -------------------------- 2.6% 2.6% 16 0.008s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.8% 1 0.072s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 0.064s
+ │ ├─rewrite H ----------------------- 2.2% 2.2% 1 0.056s
+ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.032s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 30.3% 1 0.780s
+ ├─Glue.zrange_to_reflective --------- 0.0% 20.3% 1 0.524s
+ │ ├─Glue.zrange_to_reflective_goal -- 9.5% 15.2% 1 0.392s
+ │ │└pose proof (pf : Interpretat 3.7% 3.7% 1 0.096s
+ │ └─assert (H : is_bounded_by' bounds 4.8% 5.1% 2 0.072s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.4% 1 0.140s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.7% 5.1% 1 0.132s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.3% 2 0.060s
+ │└clearbody (ne_var_list) ----------- 2.3% 2.3% 1 0.060s
+ └─Glue.split_BoundedWordToZ --------- 0.3% 3.7% 1 0.096s
+ └destruct_sig ---------------------- 0.2% 3.3% 4 0.044s
+ └destruct x ------------------------ 2.5% 2.5% 2 0.036s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+src/Specific/X25519/C64/feadd (real: 22.81, user: 20.93, sys: 0.25, mem: 766300 ko)
+COQC src/Specific/X25519/C64/fecarry.v
+Finished transaction in 4.343 secs (4.016u,0.004s) (successful)
+total time: 3.976s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.9% 1 3.496s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.9% 1 3.456s
+─ReflectiveTactics.do_reify ------------ 0.0% 56.9% 1 2.264s
+─Reify.Reify_rhs_gen ------------------- 1.8% 56.2% 1 2.236s
+─Reify.do_reify_abs_goal --------------- 36.1% 36.5% 2 1.452s
+─Reify.do_reifyf_goal ------------------ 34.8% 35.1% 29 1.396s
+─ReflectiveTactics.solve_post_reified_si 0.6% 30.0% 1 1.192s
+─UnifyAbstractReflexivity.unify_transfor 17.7% 21.7% 7 0.240s
+─Glue.refine_to_reflective_glue' ------- 0.0% 11.1% 1 0.440s
+─eexact -------------------------------- 10.9% 10.9% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.3% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 7.1% 1 0.284s
+─prove_interp_compile_correct ---------- 0.0% 5.7% 1 0.228s
+─Glue.zrange_to_reflective_goal -------- 4.3% 5.5% 1 0.220s
+─unify (constr) (constr) --------------- 5.3% 5.3% 6 0.084s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.2% 5.2% 1 0.208s
+─rewrite H ----------------------------- 3.5% 3.5% 1 0.140s
+─tac ----------------------------------- 1.9% 2.6% 2 0.104s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.028s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.056s
+─transitivity -------------------------- 2.0% 2.0% 5 0.048s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.0% 1 0.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.9% 1 3.496s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.9% 1 3.456s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 56.9% 1 2.264s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 56.2% 1 2.236s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.1% 36.5% 2 1.452s
+ │ │ │└Reify.do_reifyf_goal ------------ 34.8% 35.1% 29 1.396s
+ │ │ │└eexact -------------------------- 10.1% 10.1% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.7% 1 0.228s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.2% 5.2% 1 0.208s
+ │ │ ├─rewrite H ----------------------- 3.5% 3.5% 1 0.140s
+ │ │ ├─tac ----------------------------- 1.9% 2.6% 1 0.104s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.056s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.048s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 30.0% 1 1.192s
+ │ ├─UnifyAbstractReflexivity.unify_tr 17.7% 21.7% 7 0.240s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 5 0.048s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.3% 1 0.292s
+ │ └unify (constr) (constr) --------- 2.1% 2.1% 1 0.084s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 11.1% 1 0.440s
+ ├─Glue.zrange_to_reflective --------- 0.0% 7.1% 1 0.284s
+ │└Glue.zrange_to_reflective_goal ---- 4.3% 5.5% 1 0.220s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.0% 1 0.080s
+
+Finished transaction in 7.078 secs (6.728u,0.s) (successful)
+Closed under the global context
+total time: 3.976s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.9% 1 3.496s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.9% 1 3.456s
+─ReflectiveTactics.do_reify ------------ 0.0% 56.9% 1 2.264s
+─Reify.Reify_rhs_gen ------------------- 1.8% 56.2% 1 2.236s
+─Reify.do_reify_abs_goal --------------- 36.1% 36.5% 2 1.452s
+─Reify.do_reifyf_goal ------------------ 34.8% 35.1% 29 1.396s
+─ReflectiveTactics.solve_post_reified_si 0.6% 30.0% 1 1.192s
+─UnifyAbstractReflexivity.unify_transfor 17.7% 21.7% 7 0.240s
+─Glue.refine_to_reflective_glue' ------- 0.0% 11.1% 1 0.440s
+─eexact -------------------------------- 10.9% 10.9% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.3% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 7.1% 1 0.284s
+─prove_interp_compile_correct ---------- 0.0% 5.7% 1 0.228s
+─Glue.zrange_to_reflective_goal -------- 4.3% 5.5% 1 0.220s
+─unify (constr) (constr) --------------- 5.3% 5.3% 6 0.084s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.2% 5.2% 1 0.208s
+─rewrite H ----------------------------- 3.5% 3.5% 1 0.140s
+─tac ----------------------------------- 1.9% 2.6% 2 0.104s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.028s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.056s
+─transitivity -------------------------- 2.0% 2.0% 5 0.048s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.0% 1 0.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.9% 1 3.496s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.9% 1 3.456s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 56.9% 1 2.264s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 56.2% 1 2.236s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.1% 36.5% 2 1.452s
+ │ │ │└Reify.do_reifyf_goal ------------ 34.8% 35.1% 29 1.396s
+ │ │ │└eexact -------------------------- 10.1% 10.1% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.7% 1 0.228s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.2% 5.2% 1 0.208s
+ │ │ ├─rewrite H ----------------------- 3.5% 3.5% 1 0.140s
+ │ │ ├─tac ----------------------------- 1.9% 2.6% 1 0.104s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.056s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.048s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 30.0% 1 1.192s
+ │ ├─UnifyAbstractReflexivity.unify_tr 17.7% 21.7% 7 0.240s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 5 0.048s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.3% 1 0.292s
+ │ └unify (constr) (constr) --------- 2.1% 2.1% 1 0.084s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 11.1% 1 0.440s
+ ├─Glue.zrange_to_reflective --------- 0.0% 7.1% 1 0.284s
+ │└Glue.zrange_to_reflective_goal ---- 4.3% 5.5% 1 0.220s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.0% 1 0.080s
+
+src/Specific/X25519/C64/fecarry (real: 27.11, user: 24.99, sys: 0.21, mem: 786052 ko)
+COQC src/Specific/solinas32_2e255m765_12limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_12limbs/Synthesis (real: 40.13, user: 36.92, sys: 0.26, mem: 728464 ko)
+COQC src/Specific/solinas32_2e255m765_13limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_13limbs/Synthesis (real: 49.44, user: 45.75, sys: 0.18, mem: 744240 ko)
+COQC src/Specific/X25519/C64/femul.v
+Finished transaction in 8.415 secs (7.664u,0.015s) (successful)
+total time: 7.616s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 85.0% 1 6.476s
+─ReflectiveTactics.solve_side_conditions 0.0% 84.2% 1 6.416s
+─ReflectiveTactics.do_reify ------------ 0.0% 50.3% 1 3.832s
+─Reify.Reify_rhs_gen ------------------- 1.8% 49.4% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.5% 33.9% 1 2.584s
+─Reify.do_reify_abs_goal --------------- 31.1% 31.4% 2 2.392s
+─Reify.do_reifyf_goal ------------------ 30.0% 30.3% 58 1.528s
+─UnifyAbstractReflexivity.unify_transfor 22.1% 27.3% 7 0.600s
+─Glue.refine_to_reflective_glue' ------- 0.0% 9.8% 1 0.744s
+─eexact -------------------------------- 8.2% 8.2% 60 0.024s
+─Glue.zrange_to_reflective ------------- 0.1% 6.8% 1 0.516s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.124s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 3.9% 5.7% 1 0.432s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.4% 5.4% 1 0.408s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+─Glue.zrange_to_reflective_goal -------- 3.0% 5.0% 1 0.384s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+─change G' ----------------------------- 3.9% 3.9% 1 0.300s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.232s
+─tac ----------------------------------- 1.5% 2.3% 2 0.176s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.092s
+─reflexivity --------------------------- 2.0% 2.0% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 85.0% 1 6.476s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 84.2% 1 6.416s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 50.3% 1 3.832s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 49.4% 1 3.760s
+ │ │ ├─Reify.do_reify_abs_goal --------- 31.1% 31.4% 2 2.392s
+ │ │ │└Reify.do_reifyf_goal ------------ 30.0% 30.3% 58 1.528s
+ │ │ │└eexact -------------------------- 7.6% 7.6% 58 0.020s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.8% 1 0.444s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.4% 5.4% 1 0.408s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.232s
+ │ │ ├─tac ----------------------------- 1.5% 2.3% 1 0.176s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.092s
+ │ └─ReflectiveTactics.solve_post_reifie 0.5% 33.9% 1 2.584s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.1% 27.3% 7 0.600s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 0.096s
+ │ └─ReflectiveTactics.unify_abstract_ 3.9% 5.7% 1 0.432s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 9.8% 1 0.744s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.8% 1 0.516s
+ └Glue.zrange_to_reflective_goal ------ 3.0% 5.0% 1 0.384s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+└IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+└change G' ----------------------------- 3.9% 3.9% 1 0.300s
+
+Finished transaction in 14.616 secs (13.528u,0.008s) (successful)
+Closed under the global context
+total time: 7.616s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 85.0% 1 6.476s
+─ReflectiveTactics.solve_side_conditions 0.0% 84.2% 1 6.416s
+─ReflectiveTactics.do_reify ------------ 0.0% 50.3% 1 3.832s
+─Reify.Reify_rhs_gen ------------------- 1.8% 49.4% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.5% 33.9% 1 2.584s
+─Reify.do_reify_abs_goal --------------- 31.1% 31.4% 2 2.392s
+─Reify.do_reifyf_goal ------------------ 30.0% 30.3% 58 1.528s
+─UnifyAbstractReflexivity.unify_transfor 22.1% 27.3% 7 0.600s
+─Glue.refine_to_reflective_glue' ------- 0.0% 9.8% 1 0.744s
+─eexact -------------------------------- 8.2% 8.2% 60 0.024s
+─Glue.zrange_to_reflective ------------- 0.1% 6.8% 1 0.516s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.124s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 3.9% 5.7% 1 0.432s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.4% 5.4% 1 0.408s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+─Glue.zrange_to_reflective_goal -------- 3.0% 5.0% 1 0.384s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+─change G' ----------------------------- 3.9% 3.9% 1 0.300s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.232s
+─tac ----------------------------------- 1.5% 2.3% 2 0.176s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.092s
+─reflexivity --------------------------- 2.0% 2.0% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 85.0% 1 6.476s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 84.2% 1 6.416s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 50.3% 1 3.832s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 49.4% 1 3.760s
+ │ │ ├─Reify.do_reify_abs_goal --------- 31.1% 31.4% 2 2.392s
+ │ │ │└Reify.do_reifyf_goal ------------ 30.0% 30.3% 58 1.528s
+ │ │ │└eexact -------------------------- 7.6% 7.6% 58 0.020s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.8% 1 0.444s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.4% 5.4% 1 0.408s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.232s
+ │ │ ├─tac ----------------------------- 1.5% 2.3% 1 0.176s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.092s
+ │ └─ReflectiveTactics.solve_post_reifie 0.5% 33.9% 1 2.584s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.1% 27.3% 7 0.600s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 0.096s
+ │ └─ReflectiveTactics.unify_abstract_ 3.9% 5.7% 1 0.432s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 9.8% 1 0.744s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.8% 1 0.516s
+ └Glue.zrange_to_reflective_goal ------ 3.0% 5.0% 1 0.384s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+└IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+└change G' ----------------------------- 3.9% 3.9% 1 0.300s
+
+src/Specific/X25519/C64/femul (real: 39.72, user: 36.32, sys: 0.26, mem: 825448 ko)
+COQC src/Specific/X25519/C64/feaddDisplay > src/Specific/X25519/C64/feaddDisplay.log
+COQC src/Specific/X25519/C64/fecarryDisplay > src/Specific/X25519/C64/fecarryDisplay.log
+COQC src/Specific/X25519/C64/fesub.v
+Finished transaction in 3.513 secs (3.211u,0.s) (successful)
+total time: 3.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 74.1% 1 2.344s
+─ReflectiveTactics.solve_side_conditions 0.0% 72.9% 1 2.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 38.6% 1 1.220s
+─Reify.Reify_rhs_gen ------------------- 1.5% 37.2% 1 1.176s
+─ReflectiveTactics.solve_post_reified_si 0.9% 34.4% 1 1.088s
+─UnifyAbstractReflexivity.unify_transfor 19.2% 23.9% 7 0.204s
+─Glue.refine_to_reflective_glue' ------- 0.0% 23.5% 1 0.744s
+─Reify.do_reify_abs_goal --------------- 19.2% 19.5% 2 0.616s
+─Reify.do_reifyf_goal ------------------ 18.0% 18.3% 16 0.580s
+─Glue.zrange_to_reflective ------------- 0.1% 15.4% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.8% 11.5% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 6.2% 9.0% 1 0.284s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.080s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 4.6% 1 0.144s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_proj1_sig_in_sig --------- 1.4% 4.3% 1 0.136s
+─prove_interp_compile_correct ---------- 0.0% 3.9% 1 0.124s
+─rewrite H ----------------------------- 3.8% 3.8% 1 0.120s
+─assert (H : is_bounded_by' bounds (map' 3.8% 3.8% 2 0.064s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.5% 3.5% 1 0.112s
+─pose proof (pf : Interpretation.Bo 2.9% 2.9% 1 0.092s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.8% 1 0.088s
+─tac ----------------------------------- 1.9% 2.5% 2 0.080s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.028s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+─destruct_sig -------------------------- 0.0% 2.4% 4 0.040s
+─destruct x ---------------------------- 2.4% 2.4% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.3% 2.3% 4 0.060s
+─Reify.transitivity_tt ----------------- 0.1% 2.3% 2 0.036s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 74.1% 1 2.344s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 72.9% 1 2.308s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 38.6% 1 1.220s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 37.2% 1 1.176s
+ │ │ ├─Reify.do_reify_abs_goal --------- 19.2% 19.5% 2 0.616s
+ │ │ │└Reify.do_reifyf_goal ------------ 18.0% 18.3% 16 0.580s
+ │ │ │└eexact -------------------------- 3.9% 3.9% 16 0.012s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.9% 1 0.124s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.5% 3.5% 1 0.112s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 0.120s
+ │ │ ├─tac ----------------------------- 1.9% 2.5% 1 0.080s
+ │ │ └─Reify.transitivity_tt ----------- 0.1% 2.3% 2 0.036s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.032s
+ │ └─ReflectiveTactics.solve_post_reifie 0.9% 34.4% 1 1.088s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.2% 23.9% 7 0.204s
+ │ │└unify (constr) (constr) --------- 3.4% 3.4% 5 0.036s
+ │ └─ReflectiveTactics.unify_abstract_ 6.2% 9.0% 1 0.284s
+ │ └unify (constr) (constr) --------- 2.5% 2.5% 1 0.080s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 23.5% 1 0.744s
+ ├─Glue.zrange_to_reflective --------- 0.1% 15.4% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.8% 11.5% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.9% 2.9% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.8% 3.8% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 4.6% 1 0.144s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.4% 4.3% 1 0.136s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.8% 1 0.088s
+ └destruct_sig ---------------------- 0.0% 2.4% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+
+Finished transaction in 6.12 secs (5.64u,0.008s) (successful)
+Closed under the global context
+total time: 3.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 74.1% 1 2.344s
+─ReflectiveTactics.solve_side_conditions 0.0% 72.9% 1 2.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 38.6% 1 1.220s
+─Reify.Reify_rhs_gen ------------------- 1.5% 37.2% 1 1.176s
+─ReflectiveTactics.solve_post_reified_si 0.9% 34.4% 1 1.088s
+─UnifyAbstractReflexivity.unify_transfor 19.2% 23.9% 7 0.204s
+─Glue.refine_to_reflective_glue' ------- 0.0% 23.5% 1 0.744s
+─Reify.do_reify_abs_goal --------------- 19.2% 19.5% 2 0.616s
+─Reify.do_reifyf_goal ------------------ 18.0% 18.3% 16 0.580s
+─Glue.zrange_to_reflective ------------- 0.1% 15.4% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.8% 11.5% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 6.2% 9.0% 1 0.284s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.080s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 4.6% 1 0.144s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_proj1_sig_in_sig --------- 1.4% 4.3% 1 0.136s
+─prove_interp_compile_correct ---------- 0.0% 3.9% 1 0.124s
+─rewrite H ----------------------------- 3.8% 3.8% 1 0.120s
+─assert (H : is_bounded_by' bounds (map' 3.8% 3.8% 2 0.064s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.5% 3.5% 1 0.112s
+─pose proof (pf : Interpretation.Bo 2.9% 2.9% 1 0.092s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.8% 1 0.088s
+─tac ----------------------------------- 1.9% 2.5% 2 0.080s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.028s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+─destruct_sig -------------------------- 0.0% 2.4% 4 0.040s
+─destruct x ---------------------------- 2.4% 2.4% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.3% 2.3% 4 0.060s
+─Reify.transitivity_tt ----------------- 0.1% 2.3% 2 0.036s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 74.1% 1 2.344s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 72.9% 1 2.308s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 38.6% 1 1.220s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 37.2% 1 1.176s
+ │ │ ├─Reify.do_reify_abs_goal --------- 19.2% 19.5% 2 0.616s
+ │ │ │└Reify.do_reifyf_goal ------------ 18.0% 18.3% 16 0.580s
+ │ │ │└eexact -------------------------- 3.9% 3.9% 16 0.012s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.9% 1 0.124s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.5% 3.5% 1 0.112s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 0.120s
+ │ │ ├─tac ----------------------------- 1.9% 2.5% 1 0.080s
+ │ │ └─Reify.transitivity_tt ----------- 0.1% 2.3% 2 0.036s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.032s
+ │ └─ReflectiveTactics.solve_post_reifie 0.9% 34.4% 1 1.088s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.2% 23.9% 7 0.204s
+ │ │└unify (constr) (constr) --------- 3.4% 3.4% 5 0.036s
+ │ └─ReflectiveTactics.unify_abstract_ 6.2% 9.0% 1 0.284s
+ │ └unify (constr) (constr) --------- 2.5% 2.5% 1 0.080s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 23.5% 1 0.744s
+ ├─Glue.zrange_to_reflective --------- 0.1% 15.4% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.8% 11.5% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.9% 2.9% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.8% 3.8% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 4.6% 1 0.144s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.4% 4.3% 1 0.136s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.8% 1 0.088s
+ └destruct_sig ---------------------- 0.0% 2.4% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+
+src/Specific/X25519/C64/fesub (real: 24.71, user: 22.65, sys: 0.24, mem: 778792 ko)
+COQC src/Specific/X25519/C64/fesquare.v
+Finished transaction in 6.132 secs (5.516u,0.012s) (successful)
+total time: 5.480s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 5.244s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.6% 1 4.856s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.7% 1 4.804s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.3% 1 2.920s
+─Reify.Reify_rhs_gen ------------------- 2.0% 52.5% 1 2.876s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.4% 1 1.884s
+─Reify.do_reify_abs_goal --------------- 33.2% 33.6% 2 1.844s
+─Reify.do_reifyf_goal ------------------ 31.5% 32.0% 47 1.392s
+─UnifyAbstractReflexivity.unify_transfor 21.9% 26.6% 7 0.400s
+─eexact -------------------------------- 10.0% 10.0% 49 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.1% 1 0.388s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.380s
+─unify (constr) (constr) --------------- 5.8% 5.8% 6 0.104s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.1% 5.1% 1 0.280s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.0% 1 0.220s
+─Glue.zrange_to_reflective_goal -------- 3.1% 3.9% 1 0.212s
+─change G' ----------------------------- 3.4% 3.4% 1 0.184s
+─tac ----------------------------------- 2.0% 2.8% 2 0.156s
+─rewrite H ----------------------------- 2.8% 2.8% 1 0.156s
+─reflexivity --------------------------- 2.8% 2.8% 7 0.064s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.7% 1 5.244s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 88.6% 1 4.856s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 87.7% 1 4.804s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 53.3% 1 2.920s
+ │ │ │└Reify.Reify_rhs_gen ------------- 2.0% 52.5% 1 2.876s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 33.2% 33.6% 2 1.844s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 31.5% 32.0% 47 1.392s
+ │ │ │ │└eexact ------------------------ 9.1% 9.1% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.8% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 5.3% 5.3% 1 0.288s
+ │ │ │ ├─tac --------------------------- 2.0% 2.8% 1 0.156s
+ │ │ │ └─rewrite H --------------------- 2.8% 2.8% 1 0.156s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.6% 34.4% 1 1.884s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 21.9% 26.6% 7 0.400s
+ │ │ │└unify (constr) (constr) ------- 3.9% 3.9% 5 0.072s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.380s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 7.1% 1 0.388s
+ │ └Glue.zrange_to_reflective --------- 0.1% 5.1% 1 0.280s
+ │ └Glue.zrange_to_reflective_goal ---- 3.1% 3.9% 1 0.212s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 4.0% 1 0.220s
+ └change G' --------------------------- 3.4% 3.4% 1 0.184s
+
+Finished transaction in 10.475 secs (9.728u,0.007s) (successful)
+Closed under the global context
+total time: 5.480s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 5.244s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.6% 1 4.856s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.7% 1 4.804s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.3% 1 2.920s
+─Reify.Reify_rhs_gen ------------------- 2.0% 52.5% 1 2.876s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.4% 1 1.884s
+─Reify.do_reify_abs_goal --------------- 33.2% 33.6% 2 1.844s
+─Reify.do_reifyf_goal ------------------ 31.5% 32.0% 47 1.392s
+─UnifyAbstractReflexivity.unify_transfor 21.9% 26.6% 7 0.400s
+─eexact -------------------------------- 10.0% 10.0% 49 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.1% 1 0.388s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.380s
+─unify (constr) (constr) --------------- 5.8% 5.8% 6 0.104s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.1% 5.1% 1 0.280s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.0% 1 0.220s
+─Glue.zrange_to_reflective_goal -------- 3.1% 3.9% 1 0.212s
+─change G' ----------------------------- 3.4% 3.4% 1 0.184s
+─tac ----------------------------------- 2.0% 2.8% 2 0.156s
+─rewrite H ----------------------------- 2.8% 2.8% 1 0.156s
+─reflexivity --------------------------- 2.8% 2.8% 7 0.064s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.7% 1 5.244s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 88.6% 1 4.856s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 87.7% 1 4.804s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 53.3% 1 2.920s
+ │ │ │└Reify.Reify_rhs_gen ------------- 2.0% 52.5% 1 2.876s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 33.2% 33.6% 2 1.844s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 31.5% 32.0% 47 1.392s
+ │ │ │ │└eexact ------------------------ 9.1% 9.1% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.8% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 5.3% 5.3% 1 0.288s
+ │ │ │ ├─tac --------------------------- 2.0% 2.8% 1 0.156s
+ │ │ │ └─rewrite H --------------------- 2.8% 2.8% 1 0.156s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.6% 34.4% 1 1.884s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 21.9% 26.6% 7 0.400s
+ │ │ │└unify (constr) (constr) ------- 3.9% 3.9% 5 0.072s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.380s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 7.1% 1 0.388s
+ │ └Glue.zrange_to_reflective --------- 0.1% 5.1% 1 0.280s
+ │ └Glue.zrange_to_reflective_goal ---- 3.1% 3.9% 1 0.212s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 4.0% 1 0.220s
+ └change G' --------------------------- 3.4% 3.4% 1 0.184s
+
+src/Specific/X25519/C64/fesquare (real: 33.08, user: 30.13, sys: 0.24, mem: 799620 ko)
+COQC src/Specific/X25519/C64/femulDisplay > src/Specific/X25519/C64/femulDisplay.log
+COQC src/Specific/X25519/C64/freeze.v
+Finished transaction in 7.307 secs (6.763u,0.011s) (successful)
+total time: 6.732s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.248s
+─ReflectiveTactics.solve_side_conditions 0.0% 92.0% 1 6.192s
+─ReflectiveTactics.do_reify ------------ -0.0% 60.3% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 59.6% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 42.4% 42.7% 2 2.876s
+─Reify.do_reifyf_goal ------------------ 41.3% 41.7% 129 2.804s
+─ReflectiveTactics.solve_post_reified_si 0.6% 31.7% 1 2.132s
+─UnifyAbstractReflexivity.unify_transfor 21.7% 25.8% 7 0.424s
+─eexact -------------------------------- 13.7% 13.7% 131 0.036s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.5% 1 0.436s
+─prove_interp_compile_correct ---------- 0.0% 5.1% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 3.4% 5.0% 1 0.336s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.7% 4.7% 1 0.316s
+─unify (constr) (constr) --------------- 4.6% 4.6% 6 0.100s
+─Glue.zrange_to_reflective ------------- 0.0% 4.2% 1 0.280s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 0.220s
+─Reify.transitivity_tt ----------------- 0.1% 2.6% 2 0.116s
+─rewrite H ----------------------------- 2.6% 2.6% 1 0.172s
+─tac ----------------------------------- 1.5% 2.3% 2 0.156s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.248s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 92.0% 1 6.192s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 60.3% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 59.6% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 42.4% 42.7% 2 2.876s
+ │ │ │└Reify.do_reifyf_goal ------------ 41.3% 41.7% 129 2.804s
+ │ │ │└eexact -------------------------- 13.0% 13.0% 129 0.036s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.1% 1 0.344s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.7% 4.7% 1 0.316s
+ │ │ ├─Reify.transitivity_tt ----------- 0.1% 2.6% 2 0.116s
+ │ │ ├─rewrite H ----------------------- 2.6% 2.6% 1 0.172s
+ │ │ └─tac ----------------------------- 1.5% 2.3% 1 0.156s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 31.7% 1 2.132s
+ │ ├─UnifyAbstractReflexivity.unify_tr 21.7% 25.8% 7 0.424s
+ │ │└unify (constr) (constr) --------- 3.1% 3.1% 5 0.084s
+ │ └─ReflectiveTactics.unify_abstract_ 3.4% 5.0% 1 0.336s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.5% 1 0.436s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.2% 1 0.280s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 0.220s
+
+Finished transaction in 10.495 secs (9.756u,0.s) (successful)
+Closed under the global context
+total time: 6.732s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.248s
+─ReflectiveTactics.solve_side_conditions 0.0% 92.0% 1 6.192s
+─ReflectiveTactics.do_reify ------------ -0.0% 60.3% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 59.6% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 42.4% 42.7% 2 2.876s
+─Reify.do_reifyf_goal ------------------ 41.3% 41.7% 129 2.804s
+─ReflectiveTactics.solve_post_reified_si 0.6% 31.7% 1 2.132s
+─UnifyAbstractReflexivity.unify_transfor 21.7% 25.8% 7 0.424s
+─eexact -------------------------------- 13.7% 13.7% 131 0.036s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.5% 1 0.436s
+─prove_interp_compile_correct ---------- 0.0% 5.1% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 3.4% 5.0% 1 0.336s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.7% 4.7% 1 0.316s
+─unify (constr) (constr) --------------- 4.6% 4.6% 6 0.100s
+─Glue.zrange_to_reflective ------------- 0.0% 4.2% 1 0.280s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 0.220s
+─Reify.transitivity_tt ----------------- 0.1% 2.6% 2 0.116s
+─rewrite H ----------------------------- 2.6% 2.6% 1 0.172s
+─tac ----------------------------------- 1.5% 2.3% 2 0.156s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.248s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 92.0% 1 6.192s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 60.3% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 59.6% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 42.4% 42.7% 2 2.876s
+ │ │ │└Reify.do_reifyf_goal ------------ 41.3% 41.7% 129 2.804s
+ │ │ │└eexact -------------------------- 13.0% 13.0% 129 0.036s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.1% 1 0.344s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.7% 4.7% 1 0.316s
+ │ │ ├─Reify.transitivity_tt ----------- 0.1% 2.6% 2 0.116s
+ │ │ ├─rewrite H ----------------------- 2.6% 2.6% 1 0.172s
+ │ │ └─tac ----------------------------- 1.5% 2.3% 1 0.156s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 31.7% 1 2.132s
+ │ ├─UnifyAbstractReflexivity.unify_tr 21.7% 25.8% 7 0.424s
+ │ │└unify (constr) (constr) --------- 3.1% 3.1% 5 0.084s
+ │ └─ReflectiveTactics.unify_abstract_ 3.4% 5.0% 1 0.336s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.5% 1 0.436s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.2% 1 0.280s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 0.220s
+
+src/Specific/X25519/C64/freeze (real: 34.35, user: 31.50, sys: 0.24, mem: 828104 ko)
+COQC src/Specific/NISTP256/AMD64/feadd.v
+Finished transaction in 8.784 secs (8.176u,0.011s) (successful)
+total time: 8.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 43.8% 1 3.568s
+─ReflectiveTactics.solve_side_conditions 0.0% 43.2% 1 3.520s
+─IntegrationTestTemporaryMiscCommon.fact 1.4% 23.6% 1 1.924s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 22.1% 1 1.796s
+─ReflectiveTactics.do_reify ------------ 0.1% 21.7% 1 1.768s
+─ReflectiveTactics.solve_post_reified_si 0.6% 21.5% 1 1.752s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.9% 1 1.704s
+─op_sig_side_conditions_t -------------- 0.0% 20.0% 1 1.624s
+─DestructHyps.do_all_matches_then ------ 0.0% 20.0% 8 0.244s
+─DestructHyps.do_one_match_then -------- 0.7% 19.9% 44 0.052s
+─do_tac -------------------------------- 0.0% 19.2% 36 0.052s
+─destruct H ---------------------------- 19.2% 19.2% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 17.3% 1 1.408s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.408s
+─by_tac -------------------------------- 0.0% 17.1% 4 0.504s
+─rewrite <- (ZRange.is_bounded_by_None_r 16.7% 16.7% 8 0.344s
+─UnifyAbstractReflexivity.unify_transfor 13.3% 16.1% 7 0.360s
+─Reify.do_reify_abs_goal --------------- 9.9% 10.1% 2 0.820s
+─Reify.do_reifyf_goal ------------------ 9.1% 9.3% 93 0.748s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.6% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.432s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 4.8% 1 0.388s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.9% 4.6% 3 0.368s
+─ReflectiveTactics.unify_abstract_cbv_in 3.3% 4.5% 1 0.368s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.0% 1 0.324s
+─k ------------------------------------- 3.5% 3.6% 1 0.296s
+─unify (constr) (constr) --------------- 3.3% 3.3% 8 0.092s
+─rewrite H ----------------------------- 2.6% 2.6% 2 0.196s
+─eexact -------------------------------- 2.6% 2.6% 95 0.024s
+─prove_interp_compile_correct ---------- 0.0% 2.5% 1 0.204s
+─apply (fun f => MapProjections.proj2 2.4% 2.4% 2 0.120s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 43.8% 1 3.568s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 43.2% 1 3.520s
+ │ ├─ReflectiveTactics.do_reify -------- 0.1% 21.7% 1 1.768s
+ │ │└Reify.Reify_rhs_gen --------------- 1.0% 20.9% 1 1.704s
+ │ │ ├─Reify.do_reify_abs_goal --------- 9.9% 10.1% 2 0.820s
+ │ │ │└Reify.do_reifyf_goal ------------ 9.1% 9.3% 93 0.748s
+ │ │ │└eexact -------------------------- 2.3% 2.3% 93 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 2.5% 1 0.204s
+ │ │ └─rewrite H ----------------------- 2.4% 2.4% 1 0.196s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 21.5% 1 1.752s
+ │ ├─UnifyAbstractReflexivity.unify_tr 13.3% 16.1% 7 0.360s
+ │ │└unify (constr) (constr) --------- 2.2% 2.2% 5 0.064s
+ │ └─ReflectiveTactics.unify_abstract_ 3.3% 4.5% 1 0.368s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.6% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.0% 1 0.324s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.4% 23.6% 1 1.924s
+ │└op_sig_side_conditions_t ------------ 0.0% 20.0% 1 1.624s
+ │ ├─DestructHyps.do_all_matches_then -- 0.0% 11.4% 4 0.244s
+ │ │└DestructHyps.do_one_match_then ---- 0.3% 11.4% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 11.1% 20 0.052s
+ │ │└destruct H ------------------------ 11.1% 11.1% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 8.4% 8.4% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 22.1% 1 1.796s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.408s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 17.3% 1 1.408s
+ │└by_tac ---------------------------- 0.0% 17.1% 4 0.504s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.6% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.3% 8.3% 4 0.344s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 4.8% 1 0.388s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.9% 4.6% 3 0.368s
+ └k --------------------------------- 3.5% 3.6% 1 0.296s
+
+Finished transaction in 13.363 secs (12.516u,0.008s) (successful)
+Closed under the global context
+total time: 8.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 43.8% 1 3.568s
+─ReflectiveTactics.solve_side_conditions 0.0% 43.2% 1 3.520s
+─IntegrationTestTemporaryMiscCommon.fact 1.4% 23.6% 1 1.924s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 22.1% 1 1.796s
+─ReflectiveTactics.do_reify ------------ 0.1% 21.7% 1 1.768s
+─ReflectiveTactics.solve_post_reified_si 0.6% 21.5% 1 1.752s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.9% 1 1.704s
+─op_sig_side_conditions_t -------------- 0.0% 20.0% 1 1.624s
+─DestructHyps.do_all_matches_then ------ 0.0% 20.0% 8 0.244s
+─DestructHyps.do_one_match_then -------- 0.7% 19.9% 44 0.052s
+─do_tac -------------------------------- 0.0% 19.2% 36 0.052s
+─destruct H ---------------------------- 19.2% 19.2% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 17.3% 1 1.408s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.408s
+─by_tac -------------------------------- 0.0% 17.1% 4 0.504s
+─rewrite <- (ZRange.is_bounded_by_None_r 16.7% 16.7% 8 0.344s
+─UnifyAbstractReflexivity.unify_transfor 13.3% 16.1% 7 0.360s
+─Reify.do_reify_abs_goal --------------- 9.9% 10.1% 2 0.820s
+─Reify.do_reifyf_goal ------------------ 9.1% 9.3% 93 0.748s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.6% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.432s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 4.8% 1 0.388s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.9% 4.6% 3 0.368s
+─ReflectiveTactics.unify_abstract_cbv_in 3.3% 4.5% 1 0.368s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.0% 1 0.324s
+─k ------------------------------------- 3.5% 3.6% 1 0.296s
+─unify (constr) (constr) --------------- 3.3% 3.3% 8 0.092s
+─rewrite H ----------------------------- 2.6% 2.6% 2 0.196s
+─eexact -------------------------------- 2.6% 2.6% 95 0.024s
+─prove_interp_compile_correct ---------- 0.0% 2.5% 1 0.204s
+─apply (fun f => MapProjections.proj2 2.4% 2.4% 2 0.120s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 43.8% 1 3.568s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 43.2% 1 3.520s
+ │ ├─ReflectiveTactics.do_reify -------- 0.1% 21.7% 1 1.768s
+ │ │└Reify.Reify_rhs_gen --------------- 1.0% 20.9% 1 1.704s
+ │ │ ├─Reify.do_reify_abs_goal --------- 9.9% 10.1% 2 0.820s
+ │ │ │└Reify.do_reifyf_goal ------------ 9.1% 9.3% 93 0.748s
+ │ │ │└eexact -------------------------- 2.3% 2.3% 93 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 2.5% 1 0.204s
+ │ │ └─rewrite H ----------------------- 2.4% 2.4% 1 0.196s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 21.5% 1 1.752s
+ │ ├─UnifyAbstractReflexivity.unify_tr 13.3% 16.1% 7 0.360s
+ │ │└unify (constr) (constr) --------- 2.2% 2.2% 5 0.064s
+ │ └─ReflectiveTactics.unify_abstract_ 3.3% 4.5% 1 0.368s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.6% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.0% 1 0.324s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.4% 23.6% 1 1.924s
+ │└op_sig_side_conditions_t ------------ 0.0% 20.0% 1 1.624s
+ │ ├─DestructHyps.do_all_matches_then -- 0.0% 11.4% 4 0.244s
+ │ │└DestructHyps.do_one_match_then ---- 0.3% 11.4% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 11.1% 20 0.052s
+ │ │└destruct H ------------------------ 11.1% 11.1% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 8.4% 8.4% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 22.1% 1 1.796s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.408s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 17.3% 1 1.408s
+ │└by_tac ---------------------------- 0.0% 17.1% 4 0.504s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.6% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.3% 8.3% 4 0.344s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 4.8% 1 0.388s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.9% 4.6% 3 0.368s
+ └k --------------------------------- 3.5% 3.6% 1 0.296s
+
+src/Specific/NISTP256/AMD64/feadd (real: 38.19, user: 35.40, sys: 0.30, mem: 799216 ko)
+COQC src/Specific/NISTP256/AMD64/fenz.v
+Finished transaction in 6.356 secs (5.82u,0.004s) (successful)
+total time: 5.800s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+─IntegrationTestTemporaryMiscCommon.nonz 0.2% 85.5% 1 4.960s
+─destruct (Decidable.dec x), (Decidable. 37.4% 37.4% 1 2.168s
+─destruct (Decidable.dec x) as [H| H] -- 22.0% 22.0% 1 1.276s
+─Pipeline.refine_reflectively_gen ------ 0.0% 14.5% 1 0.840s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 10.9% 1 0.632s
+─ReflectiveTactics.solve_side_conditions 0.0% 10.6% 1 0.612s
+─ReflectiveTactics.solve_post_reified_si 0.3% 8.5% 1 0.492s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 8.1% 2 0.368s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.288s
+─UnifyAbstractReflexivity.unify_transfor 3.4% 4.3% 7 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 2.8% 3.8% 1 0.220s
+─Glue.refine_to_reflective_glue' ------- 0.1% 3.6% 1 0.208s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.200s
+─generalize dependent (constr) --------- 3.0% 3.0% 4 0.060s
+─congruence ---------------------------- 2.8% 2.8% 1 0.160s
+─do_tac -------------------------------- 0.0% 2.6% 4 0.044s
+─destruct H ---------------------------- 2.6% 2.6% 4 0.044s
+─IntegrationTestTemporaryMiscCommon.do_s 0.1% 2.6% 1 0.152s
+─DestructHyps.do_one_match_then -------- 0.0% 2.6% 6 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.6% 2 0.076s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.5% 3 0.140s
+─Glue.zrange_to_reflective ------------- 0.0% 2.2% 1 0.128s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.112s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.1% 1 0.120s
+─k ------------------------------------- 1.9% 2.0% 1 0.116s
+─Reify.Reify_rhs_gen ------------------- 0.1% 2.0% 1 0.116s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.2% 85.5% 1 4.960s
+ │ ├─destruct (Decidable.dec x), (Decida 37.4% 37.4% 1 2.168s
+ │ ├─destruct (Decidable.dec x) as [H| H 22.0% 22.0% 1 1.276s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 8.1% 2 0.368s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.288s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.6% 2 0.076s
+ │ │ └DestructHyps.do_one_match_then -- 0.0% 2.6% 6 0.044s
+ │ │ └do_tac -------------------------- 0.0% 2.6% 4 0.044s
+ │ │ └destruct H ---------------------- 2.6% 2.6% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.200s
+ │ ├─generalize dependent (constr) ----- 3.0% 3.0% 4 0.060s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.160s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 2.6% 1 0.152s
+ │ │└<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.5% 3 0.140s
+ │ │└k --------------------------------- 1.9% 2.0% 1 0.116s
+ │ └─rewrite H ------------------------- 1.7% 2.0% 2 0.112s
+ └─Pipeline.refine_reflectively_gen ---- 0.0% 14.5% 1 0.840s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 10.9% 1 0.632s
+ │└ReflectiveTactics.solve_side_condit 0.0% 10.6% 1 0.612s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 8.5% 1 0.492s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 3.4% 4.3% 7 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 2.8% 3.8% 1 0.220s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.1% 1 0.120s
+ │ └Reify.Reify_rhs_gen ------------- 0.1% 2.0% 1 0.116s
+ └─Glue.refine_to_reflective_glue' --- 0.1% 3.6% 1 0.208s
+ └Glue.zrange_to_reflective --------- 0.0% 2.2% 1 0.128s
+
+Finished transaction in 6.657 secs (6.299u,0.s) (successful)
+Closed under the global context
+total time: 5.800s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+─IntegrationTestTemporaryMiscCommon.nonz 0.2% 85.5% 1 4.960s
+─destruct (Decidable.dec x), (Decidable. 37.4% 37.4% 1 2.168s
+─destruct (Decidable.dec x) as [H| H] -- 22.0% 22.0% 1 1.276s
+─Pipeline.refine_reflectively_gen ------ 0.0% 14.5% 1 0.840s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 10.9% 1 0.632s
+─ReflectiveTactics.solve_side_conditions 0.0% 10.6% 1 0.612s
+─ReflectiveTactics.solve_post_reified_si 0.3% 8.5% 1 0.492s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 8.1% 2 0.368s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.288s
+─UnifyAbstractReflexivity.unify_transfor 3.4% 4.3% 7 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 2.8% 3.8% 1 0.220s
+─Glue.refine_to_reflective_glue' ------- 0.1% 3.6% 1 0.208s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.200s
+─generalize dependent (constr) --------- 3.0% 3.0% 4 0.060s
+─congruence ---------------------------- 2.8% 2.8% 1 0.160s
+─do_tac -------------------------------- 0.0% 2.6% 4 0.044s
+─destruct H ---------------------------- 2.6% 2.6% 4 0.044s
+─IntegrationTestTemporaryMiscCommon.do_s 0.1% 2.6% 1 0.152s
+─DestructHyps.do_one_match_then -------- 0.0% 2.6% 6 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.6% 2 0.076s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.5% 3 0.140s
+─Glue.zrange_to_reflective ------------- 0.0% 2.2% 1 0.128s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.112s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.1% 1 0.120s
+─k ------------------------------------- 1.9% 2.0% 1 0.116s
+─Reify.Reify_rhs_gen ------------------- 0.1% 2.0% 1 0.116s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.2% 85.5% 1 4.960s
+ │ ├─destruct (Decidable.dec x), (Decida 37.4% 37.4% 1 2.168s
+ │ ├─destruct (Decidable.dec x) as [H| H 22.0% 22.0% 1 1.276s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 8.1% 2 0.368s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.288s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.6% 2 0.076s
+ │ │ └DestructHyps.do_one_match_then -- 0.0% 2.6% 6 0.044s
+ │ │ └do_tac -------------------------- 0.0% 2.6% 4 0.044s
+ │ │ └destruct H ---------------------- 2.6% 2.6% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.200s
+ │ ├─generalize dependent (constr) ----- 3.0% 3.0% 4 0.060s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.160s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 2.6% 1 0.152s
+ │ │└<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.5% 3 0.140s
+ │ │└k --------------------------------- 1.9% 2.0% 1 0.116s
+ │ └─rewrite H ------------------------- 1.7% 2.0% 2 0.112s
+ └─Pipeline.refine_reflectively_gen ---- 0.0% 14.5% 1 0.840s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 10.9% 1 0.632s
+ │└ReflectiveTactics.solve_side_condit 0.0% 10.6% 1 0.612s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 8.5% 1 0.492s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 3.4% 4.3% 7 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 2.8% 3.8% 1 0.220s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.1% 1 0.120s
+ │ └Reify.Reify_rhs_gen ------------- 0.1% 2.0% 1 0.116s
+ └─Glue.refine_to_reflective_glue' --- 0.1% 3.6% 1 0.208s
+ └Glue.zrange_to_reflective --------- 0.0% 2.2% 1 0.128s
+
+src/Specific/NISTP256/AMD64/fenz (real: 27.81, user: 25.50, sys: 0.22, mem: 756080 ko)
+COQC src/Specific/NISTP256/AMD64/feopp.v
+Finished transaction in 7.73 secs (7.112u,0.008s) (successful)
+total time: 7.072s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+─IntegrationTestTemporaryMiscCommon.fact 18.7% 51.6% 1 3.648s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 32.6% 1 2.308s
+─ReflectiveTactics.solve_side_conditions 0.0% 32.2% 1 2.276s
+─reflexivity --------------------------- 24.8% 24.8% 8 1.700s
+─ReflectiveTactics.solve_post_reified_si 0.5% 18.5% 1 1.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 0.968s
+─UnifyAbstractReflexivity.unify_transfor 11.2% 13.6% 7 0.284s
+─Reify.Reify_rhs_gen ------------------- 0.6% 13.4% 1 0.948s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.7% 1 0.684s
+─rewrite <- (ZRange.is_bounded_by_None_r 9.0% 9.0% 4 0.328s
+─op_sig_side_conditions_t -------------- 0.0% 7.8% 1 0.552s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.4% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.4% 1 0.520s
+─by_tac -------------------------------- 0.0% 7.2% 2 0.404s
+─Reify.do_reify_abs_goal --------------- 7.1% 7.2% 2 0.512s
+─Reify.do_reifyf_goal ------------------ 6.6% 6.7% 62 0.472s
+─DestructHyps.do_one_match_then -------- 0.2% 5.8% 14 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.8% 4 0.124s
+─do_tac -------------------------------- 0.0% 5.6% 10 0.048s
+─destruct H ---------------------------- 5.6% 5.6% 10 0.048s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.9% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.2% 1 0.300s
+─Glue.zrange_to_reflective ------------- 0.0% 3.3% 1 0.232s
+─unify (constr) (constr) --------------- 3.2% 3.2% 7 0.088s
+─Glue.zrange_to_reflective_goal -------- 1.9% 2.6% 1 0.184s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.3% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+ ├─IntegrationTestTemporaryMiscCommon.fa 18.7% 51.6% 1 3.648s
+ │ ├─reflexivity ----------------------- 24.0% 24.0% 1 1.700s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.8% 1 0.552s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.2% 4.2% 2 0.284s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.5% 2 0.124s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.5% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.3% 6 0.040s
+ │ └destruct H ---------------------- 3.3% 3.3% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.7% 1 0.684s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.4% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.4% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.2% 2 0.404s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.328s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.3% 2 0.088s
+ │ └DestructHyps.do_one_match_then -- 0.0% 2.3% 6 0.048s
+ │ └do_tac -------------------------- 0.0% 2.3% 4 0.048s
+ │ └destruct H ---------------------- 2.3% 2.3% 4 0.048s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.3% 1 0.164s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 32.6% 1 2.308s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 32.2% 1 2.276s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 18.5% 1 1.308s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.2% 13.6% 7 0.284s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.2% 1 0.300s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 0.968s
+ │ └Reify.Reify_rhs_gen --------------- 0.6% 13.4% 1 0.948s
+ │ └Reify.do_reify_abs_goal ----------- 7.1% 7.2% 2 0.512s
+ │ └Reify.do_reifyf_goal -------------- 6.6% 6.7% 62 0.472s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.9% 1 0.344s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.3% 1 0.232s
+ └Glue.zrange_to_reflective_goal ------ 1.9% 2.6% 1 0.184s
+
+Finished transaction in 7.732 secs (7.1u,0.003s) (successful)
+Closed under the global context
+total time: 7.072s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+─IntegrationTestTemporaryMiscCommon.fact 18.7% 51.6% 1 3.648s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 32.6% 1 2.308s
+─ReflectiveTactics.solve_side_conditions 0.0% 32.2% 1 2.276s
+─reflexivity --------------------------- 24.8% 24.8% 8 1.700s
+─ReflectiveTactics.solve_post_reified_si 0.5% 18.5% 1 1.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 0.968s
+─UnifyAbstractReflexivity.unify_transfor 11.2% 13.6% 7 0.284s
+─Reify.Reify_rhs_gen ------------------- 0.6% 13.4% 1 0.948s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.7% 1 0.684s
+─rewrite <- (ZRange.is_bounded_by_None_r 9.0% 9.0% 4 0.328s
+─op_sig_side_conditions_t -------------- 0.0% 7.8% 1 0.552s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.4% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.4% 1 0.520s
+─by_tac -------------------------------- 0.0% 7.2% 2 0.404s
+─Reify.do_reify_abs_goal --------------- 7.1% 7.2% 2 0.512s
+─Reify.do_reifyf_goal ------------------ 6.6% 6.7% 62 0.472s
+─DestructHyps.do_one_match_then -------- 0.2% 5.8% 14 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.8% 4 0.124s
+─do_tac -------------------------------- 0.0% 5.6% 10 0.048s
+─destruct H ---------------------------- 5.6% 5.6% 10 0.048s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.9% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.2% 1 0.300s
+─Glue.zrange_to_reflective ------------- 0.0% 3.3% 1 0.232s
+─unify (constr) (constr) --------------- 3.2% 3.2% 7 0.088s
+─Glue.zrange_to_reflective_goal -------- 1.9% 2.6% 1 0.184s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.3% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+ ├─IntegrationTestTemporaryMiscCommon.fa 18.7% 51.6% 1 3.648s
+ │ ├─reflexivity ----------------------- 24.0% 24.0% 1 1.700s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.8% 1 0.552s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.2% 4.2% 2 0.284s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.5% 2 0.124s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.5% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.3% 6 0.040s
+ │ └destruct H ---------------------- 3.3% 3.3% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.7% 1 0.684s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.4% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.4% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.2% 2 0.404s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.328s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.3% 2 0.088s
+ │ └DestructHyps.do_one_match_then -- 0.0% 2.3% 6 0.048s
+ │ └do_tac -------------------------- 0.0% 2.3% 4 0.048s
+ │ └destruct H ---------------------- 2.3% 2.3% 4 0.048s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.3% 1 0.164s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 32.6% 1 2.308s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 32.2% 1 2.276s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 18.5% 1 1.308s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.2% 13.6% 7 0.284s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.2% 1 0.300s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 0.968s
+ │ └Reify.Reify_rhs_gen --------------- 0.6% 13.4% 1 0.948s
+ │ └Reify.do_reify_abs_goal ----------- 7.1% 7.2% 2 0.512s
+ │ └Reify.do_reifyf_goal -------------- 6.6% 6.7% 62 0.472s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.9% 1 0.344s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.3% 1 0.232s
+ └Glue.zrange_to_reflective_goal ------ 1.9% 2.6% 1 0.184s
+
+src/Specific/NISTP256/AMD64/feopp (real: 31.00, user: 28.51, sys: 0.20, mem: 765208 ko)
+COQC src/Specific/NISTP256/AMD64/fesub.v
+Finished transaction in 12.996 secs (12.091u,0.004s) (successful)
+total time: 12.048s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+─IntegrationTestTemporaryMiscCommon.fact 16.2% 50.9% 1 6.128s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 28.3% 1 3.404s
+─ReflectiveTactics.solve_side_conditions 0.0% 27.8% 1 3.352s
+─reflexivity --------------------------- 21.7% 21.7% 8 2.480s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 14.1% 1 1.704s
+─ReflectiveTactics.solve_post_reified_si 0.4% 14.1% 1 1.696s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 1.656s
+─Reify.Reify_rhs_gen ------------------- 0.9% 13.2% 1 1.592s
+─DestructHyps.do_all_matches_then ------ 0.0% 12.9% 8 0.232s
+─DestructHyps.do_one_match_then -------- 0.6% 12.9% 44 0.052s
+─op_sig_side_conditions_t -------------- 0.0% 12.7% 1 1.528s
+─do_tac -------------------------------- 0.0% 12.3% 36 0.048s
+─destruct H ---------------------------- 12.3% 12.3% 36 0.048s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 11.2% 1 1.352s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.2% 1 1.352s
+─by_tac -------------------------------- 0.0% 11.1% 4 0.476s
+─UnifyAbstractReflexivity.unify_transfor 8.8% 10.6% 7 0.344s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.5% 10.5% 8 0.316s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.732s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.6% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.4% 5.5% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.428s
+─ReflectiveTactics.unify_abstract_cbv_in 2.2% 3.0% 1 0.360s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.9% 1 0.348s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.8% 3 0.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.6% 1 0.316s
+─k ------------------------------------- 2.1% 2.2% 1 0.268s
+─unify (constr) (constr) --------------- 2.1% 2.1% 8 0.092s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+ ├─IntegrationTestTemporaryMiscCommon.fa 16.2% 50.9% 1 6.128s
+ │ ├─reflexivity ----------------------- 20.6% 20.6% 1 2.480s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.7% 1 1.528s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 7.3% 4 0.232s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.3% 24 0.052s
+ │ │└do_tac -------------------------- 0.0% 7.0% 20 0.048s
+ │ │└destruct H ---------------------- 6.9% 6.9% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 4 0.300s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 14.1% 1 1.704s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.2% 1 1.352s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 11.2% 1 1.352s
+ │└by_tac ---------------------------- 0.0% 11.1% 4 0.476s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.6% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.6% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.3% 5.3% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.316s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.9% 1 0.348s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.8% 3 0.332s
+ └k --------------------------------- 2.1% 2.2% 1 0.268s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 28.3% 1 3.404s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 27.8% 1 3.352s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 14.1% 1 1.696s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 8.8% 10.6% 7 0.344s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.2% 3.0% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 1.656s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 13.2% 1 1.592s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.732s
+ │ └Reify.do_reifyf_goal -------------- 5.4% 5.5% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.6% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.428s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.6% 1 0.316s
+
+Finished transaction in 13.895 secs (12.78u,0.02s) (successful)
+Closed under the global context
+total time: 12.048s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+─IntegrationTestTemporaryMiscCommon.fact 16.2% 50.9% 1 6.128s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 28.3% 1 3.404s
+─ReflectiveTactics.solve_side_conditions 0.0% 27.8% 1 3.352s
+─reflexivity --------------------------- 21.7% 21.7% 8 2.480s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 14.1% 1 1.704s
+─ReflectiveTactics.solve_post_reified_si 0.4% 14.1% 1 1.696s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 1.656s
+─Reify.Reify_rhs_gen ------------------- 0.9% 13.2% 1 1.592s
+─DestructHyps.do_all_matches_then ------ 0.0% 12.9% 8 0.232s
+─DestructHyps.do_one_match_then -------- 0.6% 12.9% 44 0.052s
+─op_sig_side_conditions_t -------------- 0.0% 12.7% 1 1.528s
+─do_tac -------------------------------- 0.0% 12.3% 36 0.048s
+─destruct H ---------------------------- 12.3% 12.3% 36 0.048s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 11.2% 1 1.352s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.2% 1 1.352s
+─by_tac -------------------------------- 0.0% 11.1% 4 0.476s
+─UnifyAbstractReflexivity.unify_transfor 8.8% 10.6% 7 0.344s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.5% 10.5% 8 0.316s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.732s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.6% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.4% 5.5% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.428s
+─ReflectiveTactics.unify_abstract_cbv_in 2.2% 3.0% 1 0.360s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.9% 1 0.348s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.8% 3 0.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.6% 1 0.316s
+─k ------------------------------------- 2.1% 2.2% 1 0.268s
+─unify (constr) (constr) --------------- 2.1% 2.1% 8 0.092s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+ ├─IntegrationTestTemporaryMiscCommon.fa 16.2% 50.9% 1 6.128s
+ │ ├─reflexivity ----------------------- 20.6% 20.6% 1 2.480s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.7% 1 1.528s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 7.3% 4 0.232s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.3% 24 0.052s
+ │ │└do_tac -------------------------- 0.0% 7.0% 20 0.048s
+ │ │└destruct H ---------------------- 6.9% 6.9% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 4 0.300s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 14.1% 1 1.704s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.2% 1 1.352s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 11.2% 1 1.352s
+ │└by_tac ---------------------------- 0.0% 11.1% 4 0.476s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.6% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.6% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.3% 5.3% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.316s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.9% 1 0.348s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.8% 3 0.332s
+ └k --------------------------------- 2.1% 2.2% 1 0.268s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 28.3% 1 3.404s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 27.8% 1 3.352s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 14.1% 1 1.696s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 8.8% 10.6% 7 0.344s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.2% 3.0% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 1.656s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 13.2% 1 1.592s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.732s
+ │ └Reify.do_reifyf_goal -------------- 5.4% 5.5% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.6% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.428s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.6% 1 0.316s
+
+src/Specific/NISTP256/AMD64/fesub (real: 43.34, user: 39.59, sys: 0.26, mem: 793376 ko)
+COQC src/Specific/NISTP256/AMD64/feaddDisplay > src/Specific/NISTP256/AMD64/feaddDisplay.log
+COQC src/Specific/NISTP256/AMD64/fenzDisplay > src/Specific/NISTP256/AMD64/fenzDisplay.log
+COQC src/Specific/solinas32_2e255m765_12limbs/femul.v
+Finished transaction in 50.426 secs (46.528u,0.072s) (successful)
+total time: 46.544s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.1% 1 40.552s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.7% 1 40.372s
+─ReflectiveTactics.do_reify ------------ 0.0% 59.6% 1 27.740s
+─Reify.Reify_rhs_gen ------------------- 1.6% 58.9% 1 27.432s
+─Reify.do_reify_abs_goal --------------- 43.3% 43.6% 2 20.312s
+─Reify.do_reifyf_goal ------------------ 42.5% 42.8% 108 10.328s
+─ReflectiveTactics.solve_post_reified_si 0.1% 27.1% 1 12.632s
+─UnifyAbstractReflexivity.unify_transfor 18.6% 23.5% 7 3.552s
+─eexact -------------------------------- 13.7% 13.7% 110 0.136s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.8% 1 3.612s
+─Glue.zrange_to_reflective ------------- 0.0% 7.2% 1 3.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 5.5% 1 2.544s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+─unify (constr) (constr) --------------- 5.1% 5.1% 6 1.068s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+─change G' ----------------------------- 4.8% 4.8% 1 2.252s
+─rewrite H ----------------------------- 3.8% 3.8% 1 1.748s
+─pose proof (pf : Interpretation.Bo 3.6% 3.6% 1 1.664s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 1.616s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.2% 3.2% 1 1.468s
+─ReflectiveTactics.unify_abstract_cbv_in 1.6% 2.4% 1 1.124s
+─reflexivity --------------------------- 2.1% 2.1% 7 0.396s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.1% 1 40.552s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.7% 1 40.372s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 59.6% 1 27.740s
+ │ │└Reify.Reify_rhs_gen --------------- 1.6% 58.9% 1 27.432s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.3% 43.6% 2 20.312s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.5% 42.8% 108 10.328s
+ │ │ │└eexact -------------------------- 13.2% 13.2% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 1.748s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.5% 1 1.616s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 3.2% 3.2% 1 1.468s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 27.1% 1 12.632s
+ │ ├─UnifyAbstractReflexivity.unify_tr 18.6% 23.5% 7 3.552s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 1.068s
+ │ └─ReflectiveTactics.unify_abstract_ 1.6% 2.4% 1 1.124s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 7.8% 1 3.612s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.2% 1 3.332s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 5.5% 1 2.544s
+ └pose proof (pf : Interpretation. 3.6% 3.6% 1 1.664s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+└change G' ----------------------------- 4.8% 4.8% 1 2.252s
+
+Finished transaction in 80.129 secs (74.068u,0.024s) (successful)
+Closed under the global context
+total time: 46.544s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.1% 1 40.552s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.7% 1 40.372s
+─ReflectiveTactics.do_reify ------------ 0.0% 59.6% 1 27.740s
+─Reify.Reify_rhs_gen ------------------- 1.6% 58.9% 1 27.432s
+─Reify.do_reify_abs_goal --------------- 43.3% 43.6% 2 20.312s
+─Reify.do_reifyf_goal ------------------ 42.5% 42.8% 108 10.328s
+─ReflectiveTactics.solve_post_reified_si 0.1% 27.1% 1 12.632s
+─UnifyAbstractReflexivity.unify_transfor 18.6% 23.5% 7 3.552s
+─eexact -------------------------------- 13.7% 13.7% 110 0.136s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.8% 1 3.612s
+─Glue.zrange_to_reflective ------------- 0.0% 7.2% 1 3.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 5.5% 1 2.544s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+─unify (constr) (constr) --------------- 5.1% 5.1% 6 1.068s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+─change G' ----------------------------- 4.8% 4.8% 1 2.252s
+─rewrite H ----------------------------- 3.8% 3.8% 1 1.748s
+─pose proof (pf : Interpretation.Bo 3.6% 3.6% 1 1.664s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 1.616s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.2% 3.2% 1 1.468s
+─ReflectiveTactics.unify_abstract_cbv_in 1.6% 2.4% 1 1.124s
+─reflexivity --------------------------- 2.1% 2.1% 7 0.396s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.1% 1 40.552s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.7% 1 40.372s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 59.6% 1 27.740s
+ │ │└Reify.Reify_rhs_gen --------------- 1.6% 58.9% 1 27.432s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.3% 43.6% 2 20.312s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.5% 42.8% 108 10.328s
+ │ │ │└eexact -------------------------- 13.2% 13.2% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 1.748s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.5% 1 1.616s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 3.2% 3.2% 1 1.468s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 27.1% 1 12.632s
+ │ ├─UnifyAbstractReflexivity.unify_tr 18.6% 23.5% 7 3.552s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 1.068s
+ │ └─ReflectiveTactics.unify_abstract_ 1.6% 2.4% 1 1.124s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 7.8% 1 3.612s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.2% 1 3.332s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 5.5% 1 2.544s
+ └pose proof (pf : Interpretation. 3.6% 3.6% 1 1.664s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+└change G' ----------------------------- 4.8% 4.8% 1 2.252s
+
+src/Specific/solinas32_2e255m765_12limbs/femul (real: 155.79, user: 143.70, sys: 0.32, mem: 1454696 ko)
+COQC src/Specific/NISTP256/AMD64/feoppDisplay > src/Specific/NISTP256/AMD64/feoppDisplay.log
+COQC src/Specific/NISTP256/AMD64/fesubDisplay > src/Specific/NISTP256/AMD64/fesubDisplay.log
+COQC src/Specific/X25519/C64/fesquareDisplay > src/Specific/X25519/C64/fesquareDisplay.log
+COQC src/Specific/X25519/C64/fesubDisplay > src/Specific/X25519/C64/fesubDisplay.log
+COQC src/Specific/X25519/C64/freezeDisplay > src/Specific/X25519/C64/freezeDisplay.log
+COQC src/Specific/solinas32_2e255m765_13limbs/femul.v
+Finished transaction in 61.854 secs (57.328u,0.079s) (successful)
+total time: 57.348s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 86.2% 1 49.452s
+─ReflectiveTactics.solve_side_conditions 0.0% 85.9% 1 49.264s
+─ReflectiveTactics.do_reify ------------ -0.0% 57.6% 1 33.004s
+─Reify.Reify_rhs_gen ------------------- 1.3% 56.9% 1 32.608s
+─Reify.do_reify_abs_goal --------------- 43.1% 43.3% 2 24.840s
+─Reify.do_reifyf_goal ------------------ 42.3% 42.6% 117 12.704s
+─ReflectiveTactics.solve_post_reified_si 0.1% 28.4% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 19.6% 25.0% 7 4.824s
+─eexact -------------------------------- 13.9% 13.9% 119 0.144s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 4.772s
+─Glue.zrange_to_reflective ------------- 0.0% 7.8% 1 4.484s
+─Glue.zrange_to_reflective_goal -------- 1.7% 6.0% 1 3.464s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+─unify (constr) (constr) --------------- 5.4% 5.4% 6 1.540s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+─change G' ----------------------------- 5.2% 5.2% 1 2.964s
+─pose proof (pf : Interpretation.Bo 4.2% 4.2% 1 2.416s
+─prove_interp_compile_correct ---------- 0.0% 3.3% 1 1.904s
+─rewrite H ----------------------------- 3.3% 3.3% 1 1.896s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.0% 3.0% 1 1.732s
+─ReflectiveTactics.unify_abstract_cbv_in 1.4% 2.1% 1 1.212s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 86.2% 1 49.452s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 85.9% 1 49.264s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 57.6% 1 33.004s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 56.9% 1 32.608s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.1% 43.3% 2 24.840s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.3% 42.6% 117 12.704s
+ │ │ │└eexact -------------------------- 13.4% 13.4% 117 0.084s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.3% 1 1.904s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.0% 3.0% 1 1.732s
+ │ │ └─rewrite H ----------------------- 3.3% 3.3% 1 1.896s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 28.4% 1 16.260s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.6% 25.0% 7 4.824s
+ │ │└unify (constr) (constr) --------- 4.8% 4.8% 5 1.540s
+ │ └─ReflectiveTactics.unify_abstract_ 1.4% 2.1% 1 1.212s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 4.772s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.8% 1 4.484s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 6.0% 1 3.464s
+ └pose proof (pf : Interpretation. 4.2% 4.2% 1 2.416s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+└change G' ----------------------------- 5.2% 5.2% 1 2.964s
+
+Finished transaction in 94.432 secs (86.96u,0.02s) (successful)
+Closed under the global context
+total time: 57.348s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 86.2% 1 49.452s
+─ReflectiveTactics.solve_side_conditions 0.0% 85.9% 1 49.264s
+─ReflectiveTactics.do_reify ------------ -0.0% 57.6% 1 33.004s
+─Reify.Reify_rhs_gen ------------------- 1.3% 56.9% 1 32.608s
+─Reify.do_reify_abs_goal --------------- 43.1% 43.3% 2 24.840s
+─Reify.do_reifyf_goal ------------------ 42.3% 42.6% 117 12.704s
+─ReflectiveTactics.solve_post_reified_si 0.1% 28.4% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 19.6% 25.0% 7 4.824s
+─eexact -------------------------------- 13.9% 13.9% 119 0.144s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 4.772s
+─Glue.zrange_to_reflective ------------- 0.0% 7.8% 1 4.484s
+─Glue.zrange_to_reflective_goal -------- 1.7% 6.0% 1 3.464s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+─unify (constr) (constr) --------------- 5.4% 5.4% 6 1.540s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+─change G' ----------------------------- 5.2% 5.2% 1 2.964s
+─pose proof (pf : Interpretation.Bo 4.2% 4.2% 1 2.416s
+─prove_interp_compile_correct ---------- 0.0% 3.3% 1 1.904s
+─rewrite H ----------------------------- 3.3% 3.3% 1 1.896s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.0% 3.0% 1 1.732s
+─ReflectiveTactics.unify_abstract_cbv_in 1.4% 2.1% 1 1.212s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 86.2% 1 49.452s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 85.9% 1 49.264s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 57.6% 1 33.004s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 56.9% 1 32.608s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.1% 43.3% 2 24.840s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.3% 42.6% 117 12.704s
+ │ │ │└eexact -------------------------- 13.4% 13.4% 117 0.084s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.3% 1 1.904s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.0% 3.0% 1 1.732s
+ │ │ └─rewrite H ----------------------- 3.3% 3.3% 1 1.896s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 28.4% 1 16.260s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.6% 25.0% 7 4.824s
+ │ │└unify (constr) (constr) --------- 4.8% 4.8% 5 1.540s
+ │ └─ReflectiveTactics.unify_abstract_ 1.4% 2.1% 1 1.212s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 4.772s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.8% 1 4.484s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 6.0% 1 3.464s
+ └pose proof (pf : Interpretation. 4.2% 4.2% 1 2.416s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+└change G' ----------------------------- 5.2% 5.2% 1 2.964s
+
+src/Specific/solinas32_2e255m765_13limbs/femul (real: 181.77, user: 168.52, sys: 0.40, mem: 1589516 ko)
+COQC src/Specific/NISTP256/AMD64/femul.v
+Finished transaction in 119.257 secs (109.936u,0.256s) (successful)
+total time: 110.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+─ReflectiveTactics.do_reify ------------ -0.0% 83.7% 1 92.208s
+─Reify.Reify_rhs_gen ------------------- 0.7% 83.5% 1 91.960s
+─Reify.do_reify_abs_goal --------------- 77.7% 77.8% 2 85.708s
+─Reify.do_reifyf_goal ------------------ 77.4% 77.5% 901 85.364s
+─eexact -------------------------------- 17.9% 17.9% 903 0.136s
+─ReflectiveTactics.solve_post_reified_si 0.3% 12.5% 1 13.784s
+─UnifyAbstractReflexivity.unify_transfor 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+ ├─ReflectiveTactics.do_reify ---------- -0.0% 83.7% 1 92.208s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 83.5% 1 91.960s
+ │└Reify.do_reify_abs_goal ------------- 77.7% 77.8% 2 85.708s
+ │└Reify.do_reifyf_goal ---------------- 77.4% 77.5% 901 85.364s
+ │└eexact ------------------------------ 17.7% 17.7% 901 0.136s
+ └─ReflectiveTactics.solve_post_reified_ 0.3% 12.5% 1 13.784s
+ └UnifyAbstractReflexivity.unify_transf 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+Finished transaction in 61.452 secs (58.503u,0.055s) (successful)
+Closed under the global context
+total time: 110.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+─ReflectiveTactics.do_reify ------------ -0.0% 83.7% 1 92.208s
+─Reify.Reify_rhs_gen ------------------- 0.7% 83.5% 1 91.960s
+─Reify.do_reify_abs_goal --------------- 77.7% 77.8% 2 85.708s
+─Reify.do_reifyf_goal ------------------ 77.4% 77.5% 901 85.364s
+─eexact -------------------------------- 17.9% 17.9% 903 0.136s
+─ReflectiveTactics.solve_post_reified_si 0.3% 12.5% 1 13.784s
+─UnifyAbstractReflexivity.unify_transfor 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+ ├─ReflectiveTactics.do_reify ---------- -0.0% 83.7% 1 92.208s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 83.5% 1 91.960s
+ │└Reify.do_reify_abs_goal ------------- 77.7% 77.8% 2 85.708s
+ │└Reify.do_reifyf_goal ---------------- 77.4% 77.5% 901 85.364s
+ │└eexact ------------------------------ 17.7% 17.7% 901 0.136s
+ └─ReflectiveTactics.solve_post_reified_ 0.3% 12.5% 1 13.784s
+ └UnifyAbstractReflexivity.unify_transf 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+src/Specific/NISTP256/AMD64/femul (real: 202.96, user: 189.62, sys: 0.64, mem: 3302508 ko)
+COQC src/Specific/NISTP256/AMD64/femulDisplay > src/Specific/NISTP256/AMD64/femulDisplay.log
+COQC src/Specific/X25519/C64/ladderstep.v
+total time: 52.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 93.8% 1 48.872s
+─ReflectiveTactics.solve_side_conditions 0.0% 93.7% 1 48.776s
+─ReflectiveTactics.solve_post_reified_si 0.2% 56.5% 1 29.412s
+─UnifyAbstractReflexivity.unify_transfor 44.7% 49.1% 7 6.968s
+─ReflectiveTactics.do_reify ------------ 0.0% 37.2% 1 19.364s
+─Reify.Reify_rhs_gen ------------------- 2.1% 23.4% 1 12.200s
+─Reify.do_reifyf_goal ------------------ 11.2% 11.3% 138 1.884s
+─Compilers.Reify.reify_context_variables 0.1% 9.2% 1 4.808s
+─rewrite H ----------------------------- 7.3% 7.3% 1 3.816s
+─ReflectiveTactics.unify_abstract_cbv_in 4.7% 6.4% 1 3.336s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.7% 1 2.448s
+─Glue.zrange_to_reflective ------------- 0.0% 4.0% 1 2.068s
+─Reify.transitivity_tt ----------------- 0.1% 3.7% 2 0.984s
+─transitivity -------------------------- 3.5% 3.5% 10 0.880s
+─reflexivity --------------------------- 3.4% 3.4% 11 0.772s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 1.728s
+─eexact -------------------------------- 3.2% 3.2% 140 0.032s
+─unify (constr) (constr) --------------- 3.1% 3.1% 6 0.852s
+─clear (var_list) ---------------------- 3.1% 3.1% 98 0.584s
+─UnfoldArg.unfold_second_arg ----------- 0.4% 3.0% 2 1.576s
+─tac ----------------------------------- 2.1% 3.0% 2 1.564s
+─ClearAll.clear_all -------------------- 0.2% 2.8% 7 0.584s
+─ChangeInAll.change_with_compute_in_all 0.0% 2.6% 221 0.012s
+─change c with c' in * ----------------- 2.5% 2.5% 221 0.012s
+─Reify.do_reify_abs_goal --------------- 2.4% 2.5% 2 1.276s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+└Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 93.8% 1 48.872s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 93.7% 1 48.776s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.2% 56.5% 1 29.412s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 44.7% 49.1% 7 6.968s
+ │ │ │└ClearAll.clear_all -------------- 0.2% 2.8% 7 0.584s
+ │ │ │└clear (var_list) ---------------- 2.7% 2.7% 65 0.584s
+ │ │ └─ReflectiveTactics.unify_abstract_ 4.7% 6.4% 1 3.336s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 37.2% 1 19.364s
+ │ ├─Reify.Reify_rhs_gen ------------- 2.1% 23.4% 1 12.200s
+ │ │ ├─rewrite H --------------------- 7.3% 7.3% 1 3.816s
+ │ │ ├─Reify.transitivity_tt --------- 0.1% 3.7% 2 0.984s
+ │ │ │└transitivity ------------------ 3.4% 3.4% 4 0.880s
+ │ │ ├─tac --------------------------- 2.1% 3.0% 1 1.564s
+ │ │ └─Reify.do_reify_abs_goal ------- 2.4% 2.5% 2 1.276s
+ │ │ └Reify.do_reifyf_goal ---------- 2.2% 2.2% 25 1.148s
+ │ ├─Compilers.Reify.reify_context_var 0.1% 9.2% 1 4.808s
+ │ │└Reify.do_reifyf_goal ------------ 9.0% 9.1% 113 1.884s
+ │ │└eexact -------------------------- 2.4% 2.4% 113 0.032s
+ │ └─UnfoldArg.unfold_second_arg ----- 0.4% 3.0% 2 1.576s
+ │ └ChangeInAll.change_with_compute_i 0.0% 2.6% 221 0.012s
+ │ └change c with c' in * ----------- 2.5% 2.5% 221 0.012s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.7% 1 2.448s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.0% 1 2.068s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 1.728s
+
+Finished transaction in 171.122 secs (161.392u,0.039s) (successful)
+Closed under the global context
+total time: 52.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 93.8% 1 48.872s
+─ReflectiveTactics.solve_side_conditions 0.0% 93.7% 1 48.776s
+─ReflectiveTactics.solve_post_reified_si 0.2% 56.5% 1 29.412s
+─UnifyAbstractReflexivity.unify_transfor 44.7% 49.1% 7 6.968s
+─ReflectiveTactics.do_reify ------------ 0.0% 37.2% 1 19.364s
+─Reify.Reify_rhs_gen ------------------- 2.1% 23.4% 1 12.200s
+─Reify.do_reifyf_goal ------------------ 11.2% 11.3% 138 1.884s
+─Compilers.Reify.reify_context_variables 0.1% 9.2% 1 4.808s
+─rewrite H ----------------------------- 7.3% 7.3% 1 3.816s
+─ReflectiveTactics.unify_abstract_cbv_in 4.7% 6.4% 1 3.336s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.7% 1 2.448s
+─Glue.zrange_to_reflective ------------- 0.0% 4.0% 1 2.068s
+─Reify.transitivity_tt ----------------- 0.1% 3.7% 2 0.984s
+─transitivity -------------------------- 3.5% 3.5% 10 0.880s
+─reflexivity --------------------------- 3.4% 3.4% 11 0.772s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 1.728s
+─eexact -------------------------------- 3.2% 3.2% 140 0.032s
+─unify (constr) (constr) --------------- 3.1% 3.1% 6 0.852s
+─clear (var_list) ---------------------- 3.1% 3.1% 98 0.584s
+─UnfoldArg.unfold_second_arg ----------- 0.4% 3.0% 2 1.576s
+─tac ----------------------------------- 2.1% 3.0% 2 1.564s
+─ClearAll.clear_all -------------------- 0.2% 2.8% 7 0.584s
+─ChangeInAll.change_with_compute_in_all 0.0% 2.6% 221 0.012s
+─change c with c' in * ----------------- 2.5% 2.5% 221 0.012s
+─Reify.do_reify_abs_goal --------------- 2.4% 2.5% 2 1.276s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+└Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 93.8% 1 48.872s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 93.7% 1 48.776s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.2% 56.5% 1 29.412s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 44.7% 49.1% 7 6.968s
+ │ │ │└ClearAll.clear_all -------------- 0.2% 2.8% 7 0.584s
+ │ │ │└clear (var_list) ---------------- 2.7% 2.7% 65 0.584s
+ │ │ └─ReflectiveTactics.unify_abstract_ 4.7% 6.4% 1 3.336s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 37.2% 1 19.364s
+ │ ├─Reify.Reify_rhs_gen ------------- 2.1% 23.4% 1 12.200s
+ │ │ ├─rewrite H --------------------- 7.3% 7.3% 1 3.816s
+ │ │ ├─Reify.transitivity_tt --------- 0.1% 3.7% 2 0.984s
+ │ │ │└transitivity ------------------ 3.4% 3.4% 4 0.880s
+ │ │ ├─tac --------------------------- 2.1% 3.0% 1 1.564s
+ │ │ └─Reify.do_reify_abs_goal ------- 2.4% 2.5% 2 1.276s
+ │ │ └Reify.do_reifyf_goal ---------- 2.2% 2.2% 25 1.148s
+ │ ├─Compilers.Reify.reify_context_var 0.1% 9.2% 1 4.808s
+ │ │└Reify.do_reifyf_goal ------------ 9.0% 9.1% 113 1.884s
+ │ │└eexact -------------------------- 2.4% 2.4% 113 0.032s
+ │ └─UnfoldArg.unfold_second_arg ----- 0.4% 3.0% 2 1.576s
+ │ └ChangeInAll.change_with_compute_i 0.0% 2.6% 221 0.012s
+ │ └change c with c' in * ----------- 2.5% 2.5% 221 0.012s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.7% 1 2.448s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.0% 1 2.068s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 1.728s
+
+src/Specific/X25519/C64/ladderstep (real: 256.77, user: 241.34, sys: 0.45, mem: 1617000 ko)
+COQC src/Specific/X25519/C64/ladderstepDisplay > src/Specific/X25519/C64/ladderstepDisplay.log
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-before.log.in b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-before.log.in
new file mode 100644
index 00000000..14102902
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-before.log.in
@@ -0,0 +1,1662 @@
+COQDEP src/Compilers/Z/Bounds/Pipeline/Definition.v
+COQDEP src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+/home/jgross/.local64/coq/coq-master/bin/coq_makefile -f _CoqProject INSTALLDEFAULTROOT = Crypto -o Makefile-old
+COQ_MAKEFILE -f _CoqProject > Makefile.coq
+make --no-print-directory -C coqprime
+make[1]: Nothing to be done for 'all'.
+ECHO > _CoqProject
+COQC src/Compilers/Z/Bounds/Pipeline/Definition.v
+src/Compilers/Z/Bounds/Pipeline/Definition (real: 7.40, user: 7.22, sys: 0.15, mem: 578344 ko)
+COQC src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics (real: 1.73, user: 1.58, sys: 0.14, mem: 546112 ko)
+COQC src/Compilers/Z/Bounds/Pipeline.v
+src/Compilers/Z/Bounds/Pipeline (real: 1.18, user: 1.04, sys: 0.14, mem: 539160 ko)
+COQC src/Specific/Framework/SynthesisFramework.v
+src/Specific/Framework/SynthesisFramework (real: 1.95, user: 1.72, sys: 0.22, mem: 648632 ko)
+COQC src/Specific/X25519/C64/Synthesis.v
+src/Specific/X25519/C64/Synthesis (real: 11.23, user: 10.30, sys: 0.19, mem: 687812 ko)
+COQC src/Specific/NISTP256/AMD64/Synthesis.v
+src/Specific/NISTP256/AMD64/Synthesis (real: 13.74, user: 12.54, sys: 0.23, mem: 667664 ko)
+COQC src/Specific/X25519/C64/feadd.v
+Finished transaction in 2.852 secs (2.699u,0.012s) (successful)
+total time: 2.664s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.4% 1 2.596s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 70.9% 1 1.888s
+─ReflectiveTactics.solve_side_conditions 0.0% 69.5% 1 1.852s
+─ReflectiveTactics.solve_post_reified_si 1.4% 43.7% 1 1.164s
+─UnifyAbstractReflexivity.unify_transfor 27.0% 31.7% 8 0.256s
+─Glue.refine_to_reflective_glue' ------- 0.0% 26.6% 1 0.708s
+─ReflectiveTactics.do_reify ------------ 0.0% 25.8% 1 0.688s
+─Reify.Reify_rhs_gen ------------------- 2.0% 24.0% 1 0.640s
+─Glue.zrange_to_reflective ------------- 0.0% 17.9% 1 0.476s
+─Glue.zrange_to_reflective_goal -------- 8.1% 13.1% 1 0.348s
+─Reify.do_reify_abs_goal --------------- 12.8% 12.9% 2 0.344s
+─Reify.do_reifyf_goal ------------------ 11.7% 11.9% 16 0.316s
+─ReflectiveTactics.unify_abstract_cbv_in 7.7% 10.2% 1 0.272s
+─unify (constr) (constr) --------------- 6.0% 6.0% 7 0.064s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.0% 1 0.132s
+─assert (H : is_bounded_by' bounds (map' 4.5% 4.7% 2 0.068s
+─Glue.pattern_proj1_sig_in_sig --------- 1.5% 4.7% 1 0.124s
+─pose proof (pf : Interpretation.Bo 3.3% 3.3% 1 0.088s
+─Glue.split_BoundedWordToZ ------------- 0.2% 3.0% 1 0.080s
+─destruct x ---------------------------- 2.7% 2.7% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.7% 2.7% 4 0.056s
+─destruct_sig -------------------------- 0.0% 2.7% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─prove_interp_compile_correct ---------- 0.0% 2.4% 1 0.064s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.028s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.3% 2.3% 1 0.060s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.1% 2 0.056s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.4% 1 2.596s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 70.9% 1 1.888s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 69.5% 1 1.852s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.4% 43.7% 1 1.164s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 27.0% 31.7% 8 0.256s
+ │ │ │└unify (constr) (constr) --------- 3.6% 3.6% 6 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 7.7% 10.2% 1 0.272s
+ │ │ └unify (constr) (constr) --------- 2.4% 2.4% 1 0.064s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 25.8% 1 0.688s
+ │ └Reify.Reify_rhs_gen --------------- 2.0% 24.0% 1 0.640s
+ │ ├─Reify.do_reify_abs_goal --------- 12.8% 12.9% 2 0.344s
+ │ │└Reify.do_reifyf_goal ------------ 11.7% 11.9% 16 0.316s
+ │ └─prove_interp_compile_correct ---- 0.0% 2.4% 1 0.064s
+ │ └rewrite ?EtaInterp.InterpExprEta 2.3% 2.3% 1 0.060s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 26.6% 1 0.708s
+ ├─Glue.zrange_to_reflective --------- 0.0% 17.9% 1 0.476s
+ │ ├─Glue.zrange_to_reflective_goal -- 8.1% 13.1% 1 0.348s
+ │ │└pose proof (pf : Interpretat 3.3% 3.3% 1 0.088s
+ │ └─assert (H : is_bounded_by' bounds 4.5% 4.7% 2 0.068s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.0% 1 0.132s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.5% 4.7% 1 0.124s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.1% 2 0.056s
+ │└clearbody (ne_var_list) ----------- 2.1% 2.1% 1 0.056s
+ └─Glue.split_BoundedWordToZ --------- 0.2% 3.0% 1 0.080s
+ └destruct_sig ---------------------- 0.0% 2.7% 4 0.040s
+ └destruct x ------------------------ 2.1% 2.1% 2 0.032s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+Finished transaction in 5.46 secs (5.068u,0.003s) (successful)
+Closed under the global context
+total time: 2.664s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.4% 1 2.596s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 70.9% 1 1.888s
+─ReflectiveTactics.solve_side_conditions 0.0% 69.5% 1 1.852s
+─ReflectiveTactics.solve_post_reified_si 1.4% 43.7% 1 1.164s
+─UnifyAbstractReflexivity.unify_transfor 27.0% 31.7% 8 0.256s
+─Glue.refine_to_reflective_glue' ------- 0.0% 26.6% 1 0.708s
+─ReflectiveTactics.do_reify ------------ 0.0% 25.8% 1 0.688s
+─Reify.Reify_rhs_gen ------------------- 2.0% 24.0% 1 0.640s
+─Glue.zrange_to_reflective ------------- 0.0% 17.9% 1 0.476s
+─Glue.zrange_to_reflective_goal -------- 8.1% 13.1% 1 0.348s
+─Reify.do_reify_abs_goal --------------- 12.8% 12.9% 2 0.344s
+─Reify.do_reifyf_goal ------------------ 11.7% 11.9% 16 0.316s
+─ReflectiveTactics.unify_abstract_cbv_in 7.7% 10.2% 1 0.272s
+─unify (constr) (constr) --------------- 6.0% 6.0% 7 0.064s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.0% 1 0.132s
+─assert (H : is_bounded_by' bounds (map' 4.5% 4.7% 2 0.068s
+─Glue.pattern_proj1_sig_in_sig --------- 1.5% 4.7% 1 0.124s
+─pose proof (pf : Interpretation.Bo 3.3% 3.3% 1 0.088s
+─Glue.split_BoundedWordToZ ------------- 0.2% 3.0% 1 0.080s
+─destruct x ---------------------------- 2.7% 2.7% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.7% 2.7% 4 0.056s
+─destruct_sig -------------------------- 0.0% 2.7% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─prove_interp_compile_correct ---------- 0.0% 2.4% 1 0.064s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.028s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.3% 2.3% 1 0.060s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.1% 2 0.056s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.4% 1 2.596s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 70.9% 1 1.888s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 69.5% 1 1.852s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.4% 43.7% 1 1.164s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 27.0% 31.7% 8 0.256s
+ │ │ │└unify (constr) (constr) --------- 3.6% 3.6% 6 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 7.7% 10.2% 1 0.272s
+ │ │ └unify (constr) (constr) --------- 2.4% 2.4% 1 0.064s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 25.8% 1 0.688s
+ │ └Reify.Reify_rhs_gen --------------- 2.0% 24.0% 1 0.640s
+ │ ├─Reify.do_reify_abs_goal --------- 12.8% 12.9% 2 0.344s
+ │ │└Reify.do_reifyf_goal ------------ 11.7% 11.9% 16 0.316s
+ │ └─prove_interp_compile_correct ---- 0.0% 2.4% 1 0.064s
+ │ └rewrite ?EtaInterp.InterpExprEta 2.3% 2.3% 1 0.060s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 26.6% 1 0.708s
+ ├─Glue.zrange_to_reflective --------- 0.0% 17.9% 1 0.476s
+ │ ├─Glue.zrange_to_reflective_goal -- 8.1% 13.1% 1 0.348s
+ │ │└pose proof (pf : Interpretat 3.3% 3.3% 1 0.088s
+ │ └─assert (H : is_bounded_by' bounds 4.5% 4.7% 2 0.068s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.0% 1 0.132s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.5% 4.7% 1 0.124s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.1% 2 0.056s
+ │└clearbody (ne_var_list) ----------- 2.1% 2.1% 1 0.056s
+ └─Glue.split_BoundedWordToZ --------- 0.2% 3.0% 1 0.080s
+ └destruct_sig ---------------------- 0.0% 2.7% 4 0.040s
+ └destruct x ------------------------ 2.1% 2.1% 2 0.032s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+src/Specific/X25519/C64/feadd (real: 23.43, user: 21.41, sys: 0.26, mem: 766168 ko)
+COQC src/Specific/solinas32_2e255m765_12limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_12limbs/Synthesis (real: 39.53, user: 36.64, sys: 0.21, mem: 729464 ko)
+COQC src/Specific/X25519/C64/fecarry.v
+Finished transaction in 4.798 secs (4.375u,0.003s) (successful)
+total time: 4.332s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.1% 99.0% 1 4.288s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.2% 1 3.864s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.1% 1 3.816s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.2% 1 2.304s
+─Reify.Reify_rhs_gen ------------------- 1.8% 52.6% 1 2.280s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.9% 1 1.512s
+─Reify.do_reify_abs_goal --------------- 33.5% 33.9% 2 1.468s
+─Reify.do_reifyf_goal ------------------ 32.1% 32.5% 29 1.408s
+─UnifyAbstractReflexivity.unify_transfor 22.5% 27.1% 8 0.316s
+─Glue.refine_to_reflective_glue' ------- 0.1% 9.7% 1 0.420s
+─eexact -------------------------------- 9.3% 9.3% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.0% 1 0.304s
+─Glue.zrange_to_reflective ------------- 0.1% 6.2% 1 0.268s
+─prove_interp_compile_correct ---------- 0.0% 5.6% 1 0.244s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.228s
+─unify (constr) (constr) --------------- 5.3% 5.3% 7 0.076s
+─Glue.zrange_to_reflective_goal -------- 4.0% 4.9% 1 0.212s
+─rewrite H ----------------------------- 3.4% 3.4% 1 0.148s
+─tac ----------------------------------- 1.8% 2.6% 2 0.112s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.1% 99.0% 1 4.288s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 89.2% 1 3.864s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.1% 1 3.816s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 53.2% 1 2.304s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 52.6% 1 2.280s
+ │ │ ├─Reify.do_reify_abs_goal --------- 33.5% 33.9% 2 1.468s
+ │ │ │└Reify.do_reifyf_goal ------------ 32.1% 32.5% 29 1.408s
+ │ │ │└eexact -------------------------- 8.6% 8.6% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.6% 1 0.244s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.3% 5.3% 1 0.228s
+ │ │ ├─rewrite H ----------------------- 3.4% 3.4% 1 0.148s
+ │ │ └─tac ----------------------------- 1.8% 2.6% 1 0.112s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 34.9% 1 1.512s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.5% 27.1% 8 0.316s
+ │ │└unify (constr) (constr) --------- 3.5% 3.5% 6 0.044s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.0% 1 0.304s
+ └─Glue.refine_to_reflective_glue' ----- 0.1% 9.7% 1 0.420s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.2% 1 0.268s
+ └Glue.zrange_to_reflective_goal ------ 4.0% 4.9% 1 0.212s
+
+Finished transaction in 8.342 secs (7.604u,0.008s) (successful)
+Closed under the global context
+total time: 4.332s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.1% 99.0% 1 4.288s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.2% 1 3.864s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.1% 1 3.816s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.2% 1 2.304s
+─Reify.Reify_rhs_gen ------------------- 1.8% 52.6% 1 2.280s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.9% 1 1.512s
+─Reify.do_reify_abs_goal --------------- 33.5% 33.9% 2 1.468s
+─Reify.do_reifyf_goal ------------------ 32.1% 32.5% 29 1.408s
+─UnifyAbstractReflexivity.unify_transfor 22.5% 27.1% 8 0.316s
+─Glue.refine_to_reflective_glue' ------- 0.1% 9.7% 1 0.420s
+─eexact -------------------------------- 9.3% 9.3% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.0% 1 0.304s
+─Glue.zrange_to_reflective ------------- 0.1% 6.2% 1 0.268s
+─prove_interp_compile_correct ---------- 0.0% 5.6% 1 0.244s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.228s
+─unify (constr) (constr) --------------- 5.3% 5.3% 7 0.076s
+─Glue.zrange_to_reflective_goal -------- 4.0% 4.9% 1 0.212s
+─rewrite H ----------------------------- 3.4% 3.4% 1 0.148s
+─tac ----------------------------------- 1.8% 2.6% 2 0.112s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.1% 99.0% 1 4.288s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 89.2% 1 3.864s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.1% 1 3.816s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 53.2% 1 2.304s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 52.6% 1 2.280s
+ │ │ ├─Reify.do_reify_abs_goal --------- 33.5% 33.9% 2 1.468s
+ │ │ │└Reify.do_reifyf_goal ------------ 32.1% 32.5% 29 1.408s
+ │ │ │└eexact -------------------------- 8.6% 8.6% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.6% 1 0.244s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.3% 5.3% 1 0.228s
+ │ │ ├─rewrite H ----------------------- 3.4% 3.4% 1 0.148s
+ │ │ └─tac ----------------------------- 1.8% 2.6% 1 0.112s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 34.9% 1 1.512s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.5% 27.1% 8 0.316s
+ │ │└unify (constr) (constr) --------- 3.5% 3.5% 6 0.044s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.0% 1 0.304s
+ └─Glue.refine_to_reflective_glue' ----- 0.1% 9.7% 1 0.420s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.2% 1 0.268s
+ └Glue.zrange_to_reflective_goal ------ 4.0% 4.9% 1 0.212s
+
+src/Specific/X25519/C64/fecarry (real: 28.85, user: 26.31, sys: 0.25, mem: 787148 ko)
+COQC src/Specific/solinas32_2e255m765_13limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_13limbs/Synthesis (real: 49.50, user: 45.58, sys: 0.18, mem: 744472 ko)
+COQC src/Specific/X25519/C64/femul.v
+Finished transaction in 9.325 secs (8.62u,0.016s) (successful)
+total time: 8.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.8% 1 8.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.7% 1 7.524s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.0% 1 7.460s
+─ReflectiveTactics.do_reify ------------ 0.0% 43.8% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.6% 43.1% 1 3.700s
+─Reify.Reify_rhs_gen ------------------- 1.4% 43.0% 1 3.688s
+─UnifyAbstractReflexivity.unify_transfor 31.1% 36.7% 8 1.096s
+─Reify.do_reify_abs_goal --------------- 26.3% 26.6% 2 2.284s
+─Reify.do_reifyf_goal ------------------ 25.3% 25.6% 58 1.440s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.1% 1 0.696s
+─eexact -------------------------------- 7.6% 7.6% 60 0.032s
+─unify (constr) (constr) --------------- 5.8% 5.8% 7 0.128s
+─Glue.zrange_to_reflective ------------- 0.0% 5.7% 1 0.488s
+─ReflectiveTactics.unify_abstract_cbv_in 3.8% 5.5% 1 0.468s
+─prove_interp_compile_correct ---------- 0.0% 5.2% 1 0.448s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.9% 4.9% 1 0.416s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.2% 1 0.364s
+─synthesize ---------------------------- 0.0% 4.2% 1 0.356s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 3.8% 1 0.328s
+─rewrite H ----------------------------- 3.2% 3.2% 1 0.276s
+─change G' ----------------------------- 3.2% 3.2% 1 0.272s
+─tac ----------------------------------- 1.4% 2.1% 2 0.180s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.8% 1 8.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.7% 1 7.524s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 87.0% 1 7.460s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 43.8% 1 3.760s
+ │ │└Reify.Reify_rhs_gen --------------- 1.4% 43.0% 1 3.688s
+ │ │ ├─Reify.do_reify_abs_goal --------- 26.3% 26.6% 2 2.284s
+ │ │ │└Reify.do_reifyf_goal ------------ 25.3% 25.6% 58 1.440s
+ │ │ │└eexact -------------------------- 6.9% 6.9% 58 0.032s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.2% 1 0.448s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.9% 4.9% 1 0.416s
+ │ │ ├─rewrite H ----------------------- 3.2% 3.2% 1 0.276s
+ │ │ └─tac ----------------------------- 1.4% 2.1% 1 0.180s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 43.1% 1 3.700s
+ │ ├─UnifyAbstractReflexivity.unify_tr 31.1% 36.7% 8 1.096s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 6 0.092s
+ │ └─ReflectiveTactics.unify_abstract_ 3.8% 5.5% 1 0.468s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.1% 1 0.696s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.7% 1 0.488s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.2% 1 0.364s
+─synthesize ---------------------------- 0.0% 4.2% 1 0.356s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 3.8% 1 0.328s
+└change G' ----------------------------- 3.2% 3.2% 1 0.272s
+
+Finished transaction in 16.611 secs (15.352u,0.s) (successful)
+Closed under the global context
+total time: 8.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.8% 1 8.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.7% 1 7.524s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.0% 1 7.460s
+─ReflectiveTactics.do_reify ------------ 0.0% 43.8% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.6% 43.1% 1 3.700s
+─Reify.Reify_rhs_gen ------------------- 1.4% 43.0% 1 3.688s
+─UnifyAbstractReflexivity.unify_transfor 31.1% 36.7% 8 1.096s
+─Reify.do_reify_abs_goal --------------- 26.3% 26.6% 2 2.284s
+─Reify.do_reifyf_goal ------------------ 25.3% 25.6% 58 1.440s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.1% 1 0.696s
+─eexact -------------------------------- 7.6% 7.6% 60 0.032s
+─unify (constr) (constr) --------------- 5.8% 5.8% 7 0.128s
+─Glue.zrange_to_reflective ------------- 0.0% 5.7% 1 0.488s
+─ReflectiveTactics.unify_abstract_cbv_in 3.8% 5.5% 1 0.468s
+─prove_interp_compile_correct ---------- 0.0% 5.2% 1 0.448s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.9% 4.9% 1 0.416s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.2% 1 0.364s
+─synthesize ---------------------------- 0.0% 4.2% 1 0.356s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 3.8% 1 0.328s
+─rewrite H ----------------------------- 3.2% 3.2% 1 0.276s
+─change G' ----------------------------- 3.2% 3.2% 1 0.272s
+─tac ----------------------------------- 1.4% 2.1% 2 0.180s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.8% 1 8.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.7% 1 7.524s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 87.0% 1 7.460s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 43.8% 1 3.760s
+ │ │└Reify.Reify_rhs_gen --------------- 1.4% 43.0% 1 3.688s
+ │ │ ├─Reify.do_reify_abs_goal --------- 26.3% 26.6% 2 2.284s
+ │ │ │└Reify.do_reifyf_goal ------------ 25.3% 25.6% 58 1.440s
+ │ │ │└eexact -------------------------- 6.9% 6.9% 58 0.032s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.2% 1 0.448s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.9% 4.9% 1 0.416s
+ │ │ ├─rewrite H ----------------------- 3.2% 3.2% 1 0.276s
+ │ │ └─tac ----------------------------- 1.4% 2.1% 1 0.180s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 43.1% 1 3.700s
+ │ ├─UnifyAbstractReflexivity.unify_tr 31.1% 36.7% 8 1.096s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 6 0.092s
+ │ └─ReflectiveTactics.unify_abstract_ 3.8% 5.5% 1 0.468s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.1% 1 0.696s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.7% 1 0.488s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.2% 1 0.364s
+─synthesize ---------------------------- 0.0% 4.2% 1 0.356s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 3.8% 1 0.328s
+└change G' ----------------------------- 3.2% 3.2% 1 0.272s
+
+src/Specific/X25519/C64/femul (real: 42.98, user: 39.50, sys: 0.29, mem: 839624 ko)
+COQC src/Specific/X25519/C64/feaddDisplay > src/Specific/X25519/C64/feaddDisplay.log
+COQC src/Specific/X25519/C64/fecarryDisplay > src/Specific/X25519/C64/fecarryDisplay.log
+COQC src/Specific/X25519/C64/fesub.v
+Finished transaction in 3.729 secs (3.48u,0.012s) (successful)
+total time: 3.444s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.0% 1 3.376s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 77.1% 1 2.656s
+─ReflectiveTactics.solve_side_conditions 0.0% 75.8% 1 2.612s
+─ReflectiveTactics.solve_post_reified_si 1.2% 40.1% 1 1.380s
+─ReflectiveTactics.do_reify ------------ 0.0% 35.8% 1 1.232s
+─Reify.Reify_rhs_gen ------------------- 1.4% 34.4% 1 1.184s
+─UnifyAbstractReflexivity.unify_transfor 25.7% 30.5% 8 0.324s
+─Glue.refine_to_reflective_glue' ------- 0.0% 20.9% 1 0.720s
+─Reify.do_reify_abs_goal --------------- 18.5% 18.8% 2 0.648s
+─Reify.do_reifyf_goal ------------------ 17.3% 17.5% 16 0.604s
+─Glue.zrange_to_reflective ------------- 0.0% 14.2% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.5% 10.6% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 5.8% 8.0% 1 0.276s
+─unify (constr) (constr) --------------- 5.8% 5.8% 7 0.076s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 3.8% 1 0.132s
+─assert (H : is_bounded_by' bounds (map' 3.6% 3.6% 2 0.064s
+─Glue.pattern_proj1_sig_in_sig --------- 1.2% 3.6% 1 0.124s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 0.120s
+─rewrite H ----------------------------- 3.4% 3.4% 1 0.116s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.1% 3.1% 1 0.108s
+─pose proof (pf : Interpretation.Bo 2.7% 2.7% 1 0.092s
+─reflexivity --------------------------- 2.6% 2.6% 7 0.032s
+─Glue.split_BoundedWordToZ ------------- 0.2% 2.4% 1 0.084s
+─tac ----------------------------------- 1.7% 2.2% 2 0.076s
+─Reify.transitivity_tt ----------------- 0.1% 2.2% 2 0.040s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+─clearbody (ne_var_list) --------------- 2.1% 2.1% 4 0.056s
+─destruct_sig -------------------------- 0.0% 2.1% 4 0.040s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.0% 1 3.376s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 77.1% 1 2.656s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 75.8% 1 2.612s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 40.1% 1 1.380s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 25.7% 30.5% 8 0.324s
+ │ │ │└unify (constr) (constr) --------- 3.6% 3.6% 6 0.040s
+ │ │ └─ReflectiveTactics.unify_abstract_ 5.8% 8.0% 1 0.276s
+ │ │ └unify (constr) (constr) --------- 2.2% 2.2% 1 0.076s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 35.8% 1 1.232s
+ │ └Reify.Reify_rhs_gen --------------- 1.4% 34.4% 1 1.184s
+ │ ├─Reify.do_reify_abs_goal --------- 18.5% 18.8% 2 0.648s
+ │ │└Reify.do_reifyf_goal ------------ 17.3% 17.5% 16 0.604s
+ │ │└eexact -------------------------- 3.8% 3.8% 16 0.012s
+ │ ├─prove_interp_compile_correct ---- 0.0% 3.5% 1 0.120s
+ │ │└rewrite ?EtaInterp.InterpExprEta 3.1% 3.1% 1 0.108s
+ │ ├─rewrite H ----------------------- 3.4% 3.4% 1 0.116s
+ │ ├─tac ----------------------------- 1.7% 2.2% 1 0.076s
+ │ └─Reify.transitivity_tt ----------- 0.1% 2.2% 2 0.040s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 20.9% 1 0.720s
+ ├─Glue.zrange_to_reflective --------- 0.0% 14.2% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.5% 10.6% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.7% 2.7% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.6% 3.6% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 3.8% 1 0.132s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.2% 3.6% 1 0.124s
+ └─Glue.split_BoundedWordToZ --------- 0.2% 2.4% 1 0.084s
+ └destruct_sig ---------------------- 0.0% 2.1% 4 0.040s
+
+Finished transaction in 6.763 secs (6.183u,0.s) (successful)
+Closed under the global context
+total time: 3.444s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.0% 1 3.376s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 77.1% 1 2.656s
+─ReflectiveTactics.solve_side_conditions 0.0% 75.8% 1 2.612s
+─ReflectiveTactics.solve_post_reified_si 1.2% 40.1% 1 1.380s
+─ReflectiveTactics.do_reify ------------ 0.0% 35.8% 1 1.232s
+─Reify.Reify_rhs_gen ------------------- 1.4% 34.4% 1 1.184s
+─UnifyAbstractReflexivity.unify_transfor 25.7% 30.5% 8 0.324s
+─Glue.refine_to_reflective_glue' ------- 0.0% 20.9% 1 0.720s
+─Reify.do_reify_abs_goal --------------- 18.5% 18.8% 2 0.648s
+─Reify.do_reifyf_goal ------------------ 17.3% 17.5% 16 0.604s
+─Glue.zrange_to_reflective ------------- 0.0% 14.2% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.5% 10.6% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 5.8% 8.0% 1 0.276s
+─unify (constr) (constr) --------------- 5.8% 5.8% 7 0.076s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 3.8% 1 0.132s
+─assert (H : is_bounded_by' bounds (map' 3.6% 3.6% 2 0.064s
+─Glue.pattern_proj1_sig_in_sig --------- 1.2% 3.6% 1 0.124s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 0.120s
+─rewrite H ----------------------------- 3.4% 3.4% 1 0.116s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.1% 3.1% 1 0.108s
+─pose proof (pf : Interpretation.Bo 2.7% 2.7% 1 0.092s
+─reflexivity --------------------------- 2.6% 2.6% 7 0.032s
+─Glue.split_BoundedWordToZ ------------- 0.2% 2.4% 1 0.084s
+─tac ----------------------------------- 1.7% 2.2% 2 0.076s
+─Reify.transitivity_tt ----------------- 0.1% 2.2% 2 0.040s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+─clearbody (ne_var_list) --------------- 2.1% 2.1% 4 0.056s
+─destruct_sig -------------------------- 0.0% 2.1% 4 0.040s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.0% 1 3.376s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 77.1% 1 2.656s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 75.8% 1 2.612s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 40.1% 1 1.380s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 25.7% 30.5% 8 0.324s
+ │ │ │└unify (constr) (constr) --------- 3.6% 3.6% 6 0.040s
+ │ │ └─ReflectiveTactics.unify_abstract_ 5.8% 8.0% 1 0.276s
+ │ │ └unify (constr) (constr) --------- 2.2% 2.2% 1 0.076s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 35.8% 1 1.232s
+ │ └Reify.Reify_rhs_gen --------------- 1.4% 34.4% 1 1.184s
+ │ ├─Reify.do_reify_abs_goal --------- 18.5% 18.8% 2 0.648s
+ │ │└Reify.do_reifyf_goal ------------ 17.3% 17.5% 16 0.604s
+ │ │└eexact -------------------------- 3.8% 3.8% 16 0.012s
+ │ ├─prove_interp_compile_correct ---- 0.0% 3.5% 1 0.120s
+ │ │└rewrite ?EtaInterp.InterpExprEta 3.1% 3.1% 1 0.108s
+ │ ├─rewrite H ----------------------- 3.4% 3.4% 1 0.116s
+ │ ├─tac ----------------------------- 1.7% 2.2% 1 0.076s
+ │ └─Reify.transitivity_tt ----------- 0.1% 2.2% 2 0.040s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 20.9% 1 0.720s
+ ├─Glue.zrange_to_reflective --------- 0.0% 14.2% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.5% 10.6% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.7% 2.7% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.6% 3.6% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 3.8% 1 0.132s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.2% 3.6% 1 0.124s
+ └─Glue.split_BoundedWordToZ --------- 0.2% 2.4% 1 0.084s
+ └destruct_sig ---------------------- 0.0% 2.1% 4 0.040s
+
+src/Specific/X25519/C64/fesub (real: 26.11, user: 23.72, sys: 0.24, mem: 781808 ko)
+COQC src/Specific/X25519/C64/fesquare.v
+Finished transaction in 6.477 secs (6.044u,0.008s) (successful)
+total time: 6.012s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- 0.0% 100.0% 1 6.012s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 5.764s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.6% 1 5.388s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.8% 1 5.340s
+─ReflectiveTactics.do_reify ------------ 0.0% 47.0% 1 2.828s
+─Reify.Reify_rhs_gen ------------------- 1.5% 46.3% 1 2.784s
+─ReflectiveTactics.solve_post_reified_si 0.5% 41.8% 1 2.512s
+─UnifyAbstractReflexivity.unify_transfor 28.5% 34.1% 8 0.552s
+─Reify.do_reify_abs_goal --------------- 28.7% 29.1% 2 1.752s
+─Reify.do_reifyf_goal ------------------ 27.6% 27.9% 47 1.320s
+─eexact -------------------------------- 8.4% 8.4% 49 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.412s
+─unify (constr) (constr) --------------- 6.3% 6.3% 7 0.104s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.3% 1 0.376s
+─prove_interp_compile_correct ---------- 0.0% 5.3% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.8% 4.8% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.0% 4.4% 1 0.264s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 3.7% 1 0.224s
+─Glue.zrange_to_reflective_goal -------- 2.6% 3.3% 1 0.196s
+─change G' ----------------------------- 3.1% 3.1% 1 0.188s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.180s
+─tac ----------------------------------- 1.9% 2.7% 2 0.160s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.060s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- 0.0% 100.0% 1 6.012s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.9% 1 5.764s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 89.6% 1 5.388s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 88.8% 1 5.340s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 47.0% 1 2.828s
+ │ │ │└Reify.Reify_rhs_gen ------------- 1.5% 46.3% 1 2.784s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 28.7% 29.1% 2 1.752s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 27.6% 27.9% 47 1.320s
+ │ │ │ │└eexact ------------------------ 7.7% 7.7% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.3% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 4.8% 4.8% 1 0.288s
+ │ │ │ ├─rewrite H --------------------- 3.0% 3.0% 1 0.180s
+ │ │ │ └─tac --------------------------- 1.9% 2.7% 1 0.160s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.5% 41.8% 1 2.512s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 28.5% 34.1% 8 0.552s
+ │ │ │└unify (constr) (constr) ------- 4.6% 4.6% 6 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.412s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 6.3% 1 0.376s
+ │ └Glue.zrange_to_reflective --------- 0.0% 4.4% 1 0.264s
+ │ └Glue.zrange_to_reflective_goal ---- 2.6% 3.3% 1 0.196s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 3.7% 1 0.224s
+ └change G' --------------------------- 3.1% 3.1% 1 0.188s
+
+Finished transaction in 12.356 secs (11.331u,0.004s) (successful)
+Closed under the global context
+total time: 6.012s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- 0.0% 100.0% 1 6.012s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 5.764s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.6% 1 5.388s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.8% 1 5.340s
+─ReflectiveTactics.do_reify ------------ 0.0% 47.0% 1 2.828s
+─Reify.Reify_rhs_gen ------------------- 1.5% 46.3% 1 2.784s
+─ReflectiveTactics.solve_post_reified_si 0.5% 41.8% 1 2.512s
+─UnifyAbstractReflexivity.unify_transfor 28.5% 34.1% 8 0.552s
+─Reify.do_reify_abs_goal --------------- 28.7% 29.1% 2 1.752s
+─Reify.do_reifyf_goal ------------------ 27.6% 27.9% 47 1.320s
+─eexact -------------------------------- 8.4% 8.4% 49 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.412s
+─unify (constr) (constr) --------------- 6.3% 6.3% 7 0.104s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.3% 1 0.376s
+─prove_interp_compile_correct ---------- 0.0% 5.3% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.8% 4.8% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.0% 4.4% 1 0.264s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 3.7% 1 0.224s
+─Glue.zrange_to_reflective_goal -------- 2.6% 3.3% 1 0.196s
+─change G' ----------------------------- 3.1% 3.1% 1 0.188s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.180s
+─tac ----------------------------------- 1.9% 2.7% 2 0.160s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.060s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- 0.0% 100.0% 1 6.012s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.9% 1 5.764s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 89.6% 1 5.388s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 88.8% 1 5.340s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 47.0% 1 2.828s
+ │ │ │└Reify.Reify_rhs_gen ------------- 1.5% 46.3% 1 2.784s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 28.7% 29.1% 2 1.752s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 27.6% 27.9% 47 1.320s
+ │ │ │ │└eexact ------------------------ 7.7% 7.7% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.3% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 4.8% 4.8% 1 0.288s
+ │ │ │ ├─rewrite H --------------------- 3.0% 3.0% 1 0.180s
+ │ │ │ └─tac --------------------------- 1.9% 2.7% 1 0.160s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.5% 41.8% 1 2.512s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 28.5% 34.1% 8 0.552s
+ │ │ │└unify (constr) (constr) ------- 4.6% 4.6% 6 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.412s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 6.3% 1 0.376s
+ │ └Glue.zrange_to_reflective --------- 0.0% 4.4% 1 0.264s
+ │ └Glue.zrange_to_reflective_goal ---- 2.6% 3.3% 1 0.196s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 3.7% 1 0.224s
+ └change G' --------------------------- 3.1% 3.1% 1 0.188s
+
+src/Specific/X25519/C64/fesquare (real: 35.23, user: 32.24, sys: 0.26, mem: 802776 ko)
+COQC src/Specific/X25519/C64/femulDisplay > src/Specific/X25519/C64/femulDisplay.log
+COQC src/Specific/X25519/C64/freeze.v
+Finished transaction in 7.785 secs (7.139u,0.019s) (successful)
+total time: 7.112s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- -0.0% 100.0% 1 7.112s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.2% 1 7.056s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.600s
+─ReflectiveTactics.solve_side_conditions -0.0% 91.8% 1 6.532s
+─ReflectiveTactics.do_reify ------------ 0.0% 57.1% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 56.4% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 40.1% 40.3% 2 2.868s
+─Reify.do_reifyf_goal ------------------ 39.1% 39.4% 129 2.800s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.8% 1 2.472s
+─UnifyAbstractReflexivity.unify_transfor 25.2% 29.4% 8 0.428s
+─eexact -------------------------------- 12.9% 12.9% 131 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.1% 6.4% 1 0.456s
+─prove_interp_compile_correct ---------- 0.0% 4.7% 1 0.332s
+─unify (constr) (constr) --------------- 4.6% 4.6% 7 0.096s
+─ReflectiveTactics.unify_abstract_cbv_in 3.1% 4.6% 1 0.324s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.3% 4.3% 1 0.308s
+─Glue.zrange_to_reflective ------------- 0.0% 4.1% 1 0.292s
+─Glue.zrange_to_reflective_goal -------- 2.6% 3.2% 1 0.228s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.212s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.064s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.096s
+─transitivity -------------------------- 2.1% 2.1% 5 0.084s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- -0.0% 100.0% 1 7.112s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.2% 1 7.056s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.600s
+ │└ReflectiveTactics.solve_side_conditio -0.0% 91.8% 1 6.532s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 57.1% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 56.4% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 40.1% 40.3% 2 2.868s
+ │ │ │└Reify.do_reifyf_goal ------------ 39.1% 39.4% 129 2.800s
+ │ │ │└eexact -------------------------- 12.4% 12.4% 129 0.028s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 4.7% 1 0.332s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.3% 4.3% 1 0.308s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.212s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.096s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.084s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 34.8% 1 2.472s
+ │ ├─UnifyAbstractReflexivity.unify_tr 25.2% 29.4% 8 0.428s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 6 0.068s
+ │ └─ReflectiveTactics.unify_abstract_ 3.1% 4.6% 1 0.324s
+ └─Glue.refine_to_reflective_glue' ----- 0.1% 6.4% 1 0.456s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.1% 1 0.292s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 3.2% 1 0.228s
+
+Finished transaction in 12.063 secs (11.036u,0.012s) (successful)
+Closed under the global context
+total time: 7.112s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- -0.0% 100.0% 1 7.112s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.2% 1 7.056s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.600s
+─ReflectiveTactics.solve_side_conditions -0.0% 91.8% 1 6.532s
+─ReflectiveTactics.do_reify ------------ 0.0% 57.1% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 56.4% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 40.1% 40.3% 2 2.868s
+─Reify.do_reifyf_goal ------------------ 39.1% 39.4% 129 2.800s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.8% 1 2.472s
+─UnifyAbstractReflexivity.unify_transfor 25.2% 29.4% 8 0.428s
+─eexact -------------------------------- 12.9% 12.9% 131 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.1% 6.4% 1 0.456s
+─prove_interp_compile_correct ---------- 0.0% 4.7% 1 0.332s
+─unify (constr) (constr) --------------- 4.6% 4.6% 7 0.096s
+─ReflectiveTactics.unify_abstract_cbv_in 3.1% 4.6% 1 0.324s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.3% 4.3% 1 0.308s
+─Glue.zrange_to_reflective ------------- 0.0% 4.1% 1 0.292s
+─Glue.zrange_to_reflective_goal -------- 2.6% 3.2% 1 0.228s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.212s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.064s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.096s
+─transitivity -------------------------- 2.1% 2.1% 5 0.084s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- -0.0% 100.0% 1 7.112s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.2% 1 7.056s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.600s
+ │└ReflectiveTactics.solve_side_conditio -0.0% 91.8% 1 6.532s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 57.1% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 56.4% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 40.1% 40.3% 2 2.868s
+ │ │ │└Reify.do_reifyf_goal ------------ 39.1% 39.4% 129 2.800s
+ │ │ │└eexact -------------------------- 12.4% 12.4% 129 0.028s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 4.7% 1 0.332s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.3% 4.3% 1 0.308s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.212s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.096s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.084s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 34.8% 1 2.472s
+ │ ├─UnifyAbstractReflexivity.unify_tr 25.2% 29.4% 8 0.428s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 6 0.068s
+ │ └─ReflectiveTactics.unify_abstract_ 3.1% 4.6% 1 0.324s
+ └─Glue.refine_to_reflective_glue' ----- 0.1% 6.4% 1 0.456s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.1% 1 0.292s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 3.2% 1 0.228s
+
+src/Specific/X25519/C64/freeze (real: 36.42, user: 33.24, sys: 0.26, mem: 826476 ko)
+COQC src/Specific/NISTP256/AMD64/feadd.v
+Finished transaction in 9.065 secs (8.452u,0.004s) (successful)
+total time: 8.408s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 56.0% 1 4.712s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 47.7% 1 4.012s
+─ReflectiveTactics.solve_side_conditions 0.0% 47.1% 1 3.960s
+─synthesize_montgomery ----------------- 0.0% 44.0% 1 3.696s
+─ReflectiveTactics.solve_post_reified_si 0.6% 26.4% 1 2.220s
+─UnifyAbstractReflexivity.unify_transfor 18.0% 21.3% 8 0.508s
+─IntegrationTestTemporaryMiscCommon.fact 1.3% 21.3% 1 1.788s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 21.0% 1 1.768s
+─ReflectiveTactics.do_reify ------------ 0.0% 20.7% 1 1.740s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.0% 1 1.684s
+─DestructHyps.do_all_matches_then ------ 0.1% 18.6% 8 0.220s
+─DestructHyps.do_one_match_then -------- 0.8% 18.5% 44 0.056s
+─op_sig_side_conditions_t -------------- 0.0% 17.9% 1 1.504s
+─do_tac -------------------------------- 0.0% 17.7% 43 0.052s
+─destruct H ---------------------------- 17.7% 17.7% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.3% 17.3% 1 1.452s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.452s
+─by_tac -------------------------------- 0.0% 17.0% 4 0.532s
+─rewrite <- (ZRange.is_bounded_by_None_r 15.7% 15.8% 8 0.360s
+─Reify.do_reify_abs_goal --------------- 9.1% 9.3% 2 0.780s
+─Reify.do_reifyf_goal ------------------ 8.5% 8.6% 93 0.716s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.3% 1 0.360s
+─Glue.zrange_to_reflective_goal -------- 2.5% 4.0% 1 0.336s
+─unify (constr) (constr) --------------- 3.9% 3.9% 9 0.108s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 3.8% 1 0.316s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.8% 3.6% 3 0.300s
+─k ------------------------------------- 2.6% 2.8% 1 0.232s
+─rewrite H ----------------------------- 2.4% 2.4% 2 0.192s
+─prove_interp_compile_correct ---------- 0.0% 2.4% 1 0.200s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.2% 2.2% 1 0.188s
+─apply (fun f => MapProjections.proj2 2.1% 2.1% 2 0.108s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 56.0% 1 4.712s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 47.7% 1 4.012s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 47.1% 1 3.960s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.6% 26.4% 1 2.220s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 18.0% 21.3% 8 0.508s
+ │ │ │└unify (constr) (constr) --------- 2.6% 2.6% 6 0.064s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.3% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 20.7% 1 1.740s
+ │ └Reify.Reify_rhs_gen --------------- 1.0% 20.0% 1 1.684s
+ │ ├─Reify.do_reify_abs_goal --------- 9.1% 9.3% 2 0.780s
+ │ │└Reify.do_reifyf_goal ------------ 8.5% 8.6% 93 0.716s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.4% 1 0.200s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.2% 2.2% 1 0.188s
+ │ └─rewrite H ----------------------- 2.3% 2.3% 1 0.192s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.444s
+ └Glue.zrange_to_reflective_goal ------ 2.5% 4.0% 1 0.336s
+─synthesize_montgomery ----------------- 0.0% 44.0% 1 3.696s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.3% 21.3% 1 1.788s
+ │└op_sig_side_conditions_t ------------ 0.0% 17.9% 1 1.504s
+ │ ├─DestructHyps.do_all_matches_then -- 0.1% 10.1% 4 0.220s
+ │ │└DestructHyps.do_one_match_then ---- 0.4% 10.0% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 9.6% 20 0.048s
+ │ │└destruct H ------------------------ 9.6% 9.6% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 7.5% 7.6% 4 0.308s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 21.0% 1 1.768s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.452s
+ │└rewrite <- (lem : lemT) by by_tac l 0.3% 17.3% 1 1.452s
+ │└by_tac ---------------------------- 0.0% 17.0% 4 0.532s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.5% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.056s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.2% 8.3% 4 0.360s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 3.8% 1 0.316s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.8% 3.6% 3 0.300s
+ └k --------------------------------- 2.6% 2.8% 1 0.232s
+
+Finished transaction in 15.052 secs (13.947u,0.003s) (successful)
+Closed under the global context
+total time: 8.408s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 56.0% 1 4.712s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 47.7% 1 4.012s
+─ReflectiveTactics.solve_side_conditions 0.0% 47.1% 1 3.960s
+─synthesize_montgomery ----------------- 0.0% 44.0% 1 3.696s
+─ReflectiveTactics.solve_post_reified_si 0.6% 26.4% 1 2.220s
+─UnifyAbstractReflexivity.unify_transfor 18.0% 21.3% 8 0.508s
+─IntegrationTestTemporaryMiscCommon.fact 1.3% 21.3% 1 1.788s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 21.0% 1 1.768s
+─ReflectiveTactics.do_reify ------------ 0.0% 20.7% 1 1.740s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.0% 1 1.684s
+─DestructHyps.do_all_matches_then ------ 0.1% 18.6% 8 0.220s
+─DestructHyps.do_one_match_then -------- 0.8% 18.5% 44 0.056s
+─op_sig_side_conditions_t -------------- 0.0% 17.9% 1 1.504s
+─do_tac -------------------------------- 0.0% 17.7% 43 0.052s
+─destruct H ---------------------------- 17.7% 17.7% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.3% 17.3% 1 1.452s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.452s
+─by_tac -------------------------------- 0.0% 17.0% 4 0.532s
+─rewrite <- (ZRange.is_bounded_by_None_r 15.7% 15.8% 8 0.360s
+─Reify.do_reify_abs_goal --------------- 9.1% 9.3% 2 0.780s
+─Reify.do_reifyf_goal ------------------ 8.5% 8.6% 93 0.716s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.3% 1 0.360s
+─Glue.zrange_to_reflective_goal -------- 2.5% 4.0% 1 0.336s
+─unify (constr) (constr) --------------- 3.9% 3.9% 9 0.108s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 3.8% 1 0.316s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.8% 3.6% 3 0.300s
+─k ------------------------------------- 2.6% 2.8% 1 0.232s
+─rewrite H ----------------------------- 2.4% 2.4% 2 0.192s
+─prove_interp_compile_correct ---------- 0.0% 2.4% 1 0.200s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.2% 2.2% 1 0.188s
+─apply (fun f => MapProjections.proj2 2.1% 2.1% 2 0.108s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 56.0% 1 4.712s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 47.7% 1 4.012s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 47.1% 1 3.960s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.6% 26.4% 1 2.220s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 18.0% 21.3% 8 0.508s
+ │ │ │└unify (constr) (constr) --------- 2.6% 2.6% 6 0.064s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.3% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 20.7% 1 1.740s
+ │ └Reify.Reify_rhs_gen --------------- 1.0% 20.0% 1 1.684s
+ │ ├─Reify.do_reify_abs_goal --------- 9.1% 9.3% 2 0.780s
+ │ │└Reify.do_reifyf_goal ------------ 8.5% 8.6% 93 0.716s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.4% 1 0.200s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.2% 2.2% 1 0.188s
+ │ └─rewrite H ----------------------- 2.3% 2.3% 1 0.192s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.444s
+ └Glue.zrange_to_reflective_goal ------ 2.5% 4.0% 1 0.336s
+─synthesize_montgomery ----------------- 0.0% 44.0% 1 3.696s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.3% 21.3% 1 1.788s
+ │└op_sig_side_conditions_t ------------ 0.0% 17.9% 1 1.504s
+ │ ├─DestructHyps.do_all_matches_then -- 0.1% 10.1% 4 0.220s
+ │ │└DestructHyps.do_one_match_then ---- 0.4% 10.0% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 9.6% 20 0.048s
+ │ │└destruct H ------------------------ 9.6% 9.6% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 7.5% 7.6% 4 0.308s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 21.0% 1 1.768s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.452s
+ │└rewrite <- (lem : lemT) by by_tac l 0.3% 17.3% 1 1.452s
+ │└by_tac ---------------------------- 0.0% 17.0% 4 0.532s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.5% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.056s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.2% 8.3% 4 0.360s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 3.8% 1 0.316s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.8% 3.6% 3 0.300s
+ └k --------------------------------- 2.6% 2.8% 1 0.232s
+
+src/Specific/NISTP256/AMD64/feadd (real: 40.48, user: 37.21, sys: 0.27, mem: 797944 ko)
+COQC src/Specific/NISTP256/AMD64/fenz.v
+Finished transaction in 6.724 secs (6.196u,0.007s) (successful)
+total time: 6.180s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 6.180s
+─IntegrationTestTemporaryMiscCommon.nonz 0.1% 84.5% 1 5.224s
+─destruct (Decidable.dec x), (Decidable. 36.7% 36.7% 1 2.268s
+─destruct (Decidable.dec x) as [H| H] -- 21.6% 21.6% 1 1.336s
+─Pipeline.refine_reflectively_gen ------ 0.1% 15.5% 1 0.956s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 11.9% 1 0.736s
+─ReflectiveTactics.solve_side_conditions 0.0% 11.6% 1 0.716s
+─ReflectiveTactics.solve_post_reified_si 0.3% 9.6% 1 0.592s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 7.9% 2 0.392s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.308s
+─UnifyAbstractReflexivity.unify_transfor 4.2% 5.2% 8 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 3.0% 4.0% 1 0.248s
+─Glue.refine_to_reflective_glue' ------- 0.0% 3.5% 1 0.216s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.208s
+─generalize dependent (constr) --------- 3.1% 3.1% 4 0.068s
+─congruence ---------------------------- 2.8% 2.8% 1 0.176s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.7% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.6% 3 0.156s
+─DestructHyps.do_one_match_then -------- 0.1% 2.5% 6 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.5% 2 0.084s
+─do_tac -------------------------------- 0.0% 2.5% 7 0.044s
+─destruct H ---------------------------- 2.5% 2.5% 4 0.044s
+─Glue.zrange_to_reflective ------------- 0.1% 2.1% 1 0.132s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.116s
+─k ------------------------------------- 1.9% 2.0% 1 0.124s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.0% 1 0.124s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 6.180s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.1% 84.5% 1 5.224s
+ │ ├─destruct (Decidable.dec x), (Decida 36.7% 36.7% 1 2.268s
+ │ ├─destruct (Decidable.dec x) as [H| H 21.6% 21.6% 1 1.336s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 7.9% 2 0.392s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.308s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.5% 2 0.084s
+ │ │ └DestructHyps.do_one_match_then -- 0.1% 2.5% 6 0.048s
+ │ │ └do_tac -------------------------- 0.0% 2.5% 4 0.044s
+ │ │ └destruct H ---------------------- 2.5% 2.5% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.208s
+ │ ├─generalize dependent (constr) ----- 3.1% 3.1% 4 0.068s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.176s
+ │ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.7% 1 0.164s
+ │ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.6% 3 0.156s
+ │ └k --------------------------------- 1.9% 2.0% 1 0.124s
+ └─Pipeline.refine_reflectively_gen ---- 0.1% 15.5% 1 0.956s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 11.9% 1 0.736s
+ │└ReflectiveTactics.solve_side_condit 0.0% 11.6% 1 0.716s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 9.6% 1 0.592s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 4.2% 5.2% 8 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 3.0% 4.0% 1 0.248s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.0% 1 0.124s
+ └─Glue.refine_to_reflective_glue' --- 0.0% 3.5% 1 0.216s
+ └Glue.zrange_to_reflective --------- 0.1% 2.1% 1 0.132s
+
+Finished transaction in 7.301 secs (6.731u,0.s) (successful)
+Closed under the global context
+total time: 6.180s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 6.180s
+─IntegrationTestTemporaryMiscCommon.nonz 0.1% 84.5% 1 5.224s
+─destruct (Decidable.dec x), (Decidable. 36.7% 36.7% 1 2.268s
+─destruct (Decidable.dec x) as [H| H] -- 21.6% 21.6% 1 1.336s
+─Pipeline.refine_reflectively_gen ------ 0.1% 15.5% 1 0.956s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 11.9% 1 0.736s
+─ReflectiveTactics.solve_side_conditions 0.0% 11.6% 1 0.716s
+─ReflectiveTactics.solve_post_reified_si 0.3% 9.6% 1 0.592s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 7.9% 2 0.392s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.308s
+─UnifyAbstractReflexivity.unify_transfor 4.2% 5.2% 8 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 3.0% 4.0% 1 0.248s
+─Glue.refine_to_reflective_glue' ------- 0.0% 3.5% 1 0.216s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.208s
+─generalize dependent (constr) --------- 3.1% 3.1% 4 0.068s
+─congruence ---------------------------- 2.8% 2.8% 1 0.176s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.7% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.6% 3 0.156s
+─DestructHyps.do_one_match_then -------- 0.1% 2.5% 6 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.5% 2 0.084s
+─do_tac -------------------------------- 0.0% 2.5% 7 0.044s
+─destruct H ---------------------------- 2.5% 2.5% 4 0.044s
+─Glue.zrange_to_reflective ------------- 0.1% 2.1% 1 0.132s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.116s
+─k ------------------------------------- 1.9% 2.0% 1 0.124s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.0% 1 0.124s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 6.180s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.1% 84.5% 1 5.224s
+ │ ├─destruct (Decidable.dec x), (Decida 36.7% 36.7% 1 2.268s
+ │ ├─destruct (Decidable.dec x) as [H| H 21.6% 21.6% 1 1.336s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 7.9% 2 0.392s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.308s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.5% 2 0.084s
+ │ │ └DestructHyps.do_one_match_then -- 0.1% 2.5% 6 0.048s
+ │ │ └do_tac -------------------------- 0.0% 2.5% 4 0.044s
+ │ │ └destruct H ---------------------- 2.5% 2.5% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.208s
+ │ ├─generalize dependent (constr) ----- 3.1% 3.1% 4 0.068s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.176s
+ │ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.7% 1 0.164s
+ │ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.6% 3 0.156s
+ │ └k --------------------------------- 1.9% 2.0% 1 0.124s
+ └─Pipeline.refine_reflectively_gen ---- 0.1% 15.5% 1 0.956s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 11.9% 1 0.736s
+ │└ReflectiveTactics.solve_side_condit 0.0% 11.6% 1 0.716s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 9.6% 1 0.592s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 4.2% 5.2% 8 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 3.0% 4.0% 1 0.248s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.0% 1 0.124s
+ └─Glue.refine_to_reflective_glue' --- 0.0% 3.5% 1 0.216s
+ └Glue.zrange_to_reflective --------- 0.1% 2.1% 1 0.132s
+
+src/Specific/NISTP256/AMD64/fenz (real: 28.91, user: 26.41, sys: 0.19, mem: 756216 ko)
+COQC src/Specific/NISTP256/AMD64/feopp.v
+Finished transaction in 7.716 secs (7.216u,0.s) (successful)
+total time: 7.168s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 59.8% 1 4.284s
+─IntegrationTestTemporaryMiscCommon.fact 17.6% 49.1% 1 3.516s
+─Pipeline.refine_reflectively_gen ------ 0.0% 40.2% 1 2.884s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 35.3% 1 2.528s
+─ReflectiveTactics.solve_side_conditions 0.0% 34.8% 1 2.492s
+─reflexivity --------------------------- 23.8% 23.8% 8 1.660s
+─ReflectiveTactics.solve_post_reified_si 0.4% 21.0% 1 1.504s
+─UnifyAbstractReflexivity.unify_transfor 13.8% 16.4% 8 0.268s
+─ReflectiveTactics.do_reify ------------ 0.1% 13.8% 1 0.988s
+─Reify.Reify_rhs_gen ------------------- 0.8% 13.6% 1 0.972s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.5% 1 0.680s
+─rewrite <- (ZRange.is_bounded_by_None_r 8.7% 8.7% 4 0.332s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.3% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.3% 1 0.520s
+─op_sig_side_conditions_t -------------- 0.0% 7.2% 1 0.516s
+─by_tac -------------------------------- 0.0% 7.1% 2 0.412s
+─Reify.do_reify_abs_goal --------------- 6.9% 7.0% 2 0.500s
+─Reify.do_reifyf_goal ------------------ 6.3% 6.5% 62 0.460s
+─DestructHyps.do_one_match_then -------- 0.3% 5.4% 14 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.4% 4 0.116s
+─do_tac -------------------------------- 0.0% 5.1% 13 0.044s
+─destruct H ---------------------------- 5.1% 5.1% 10 0.044s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.0% 1 0.356s
+─ReflectiveTactics.unify_abstract_cbv_in 3.1% 4.1% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 3.4% 1 0.244s
+─unify (constr) (constr) --------------- 3.1% 3.1% 8 0.072s
+─Glue.zrange_to_reflective_goal -------- 2.1% 2.7% 1 0.196s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.2% 1 0.160s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.3% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 59.8% 1 4.284s
+ ├─IntegrationTestTemporaryMiscCommon.fa 17.6% 49.1% 1 3.516s
+ │ ├─reflexivity ----------------------- 23.2% 23.2% 1 1.660s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.2% 1 0.516s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 3.9% 3.9% 2 0.272s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.2% 2 0.116s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.2% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.0% 6 0.040s
+ │ └destruct H ---------------------- 3.0% 3.0% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.5% 1 0.680s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.3% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.3% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.1% 2 0.412s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.332s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.2% 2 0.080s
+ │ └DestructHyps.do_one_match_then -- 0.1% 2.2% 6 0.044s
+ │ └do_tac -------------------------- 0.0% 2.2% 4 0.044s
+ │ └destruct H ---------------------- 2.2% 2.2% 4 0.044s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.2% 1 0.160s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.3% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 40.2% 1 2.884s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 35.3% 1 2.528s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 34.8% 1 2.492s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 21.0% 1 1.504s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 13.8% 16.4% 8 0.268s
+ │ │ │└unify (constr) (constr) --------- 2.1% 2.1% 6 0.048s
+ │ │ └─ReflectiveTactics.unify_abstract_ 3.1% 4.1% 1 0.292s
+ │ └─ReflectiveTactics.do_reify -------- 0.1% 13.8% 1 0.988s
+ │ └Reify.Reify_rhs_gen --------------- 0.8% 13.6% 1 0.972s
+ │ └Reify.do_reify_abs_goal ----------- 6.9% 7.0% 2 0.500s
+ │ └Reify.do_reifyf_goal -------------- 6.3% 6.5% 62 0.460s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.0% 1 0.356s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.4% 1 0.244s
+ └Glue.zrange_to_reflective_goal ------ 2.1% 2.7% 1 0.196s
+
+Finished transaction in 8.918 secs (8.116u,0.004s) (successful)
+Closed under the global context
+total time: 7.168s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 59.8% 1 4.284s
+─IntegrationTestTemporaryMiscCommon.fact 17.6% 49.1% 1 3.516s
+─Pipeline.refine_reflectively_gen ------ 0.0% 40.2% 1 2.884s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 35.3% 1 2.528s
+─ReflectiveTactics.solve_side_conditions 0.0% 34.8% 1 2.492s
+─reflexivity --------------------------- 23.8% 23.8% 8 1.660s
+─ReflectiveTactics.solve_post_reified_si 0.4% 21.0% 1 1.504s
+─UnifyAbstractReflexivity.unify_transfor 13.8% 16.4% 8 0.268s
+─ReflectiveTactics.do_reify ------------ 0.1% 13.8% 1 0.988s
+─Reify.Reify_rhs_gen ------------------- 0.8% 13.6% 1 0.972s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.5% 1 0.680s
+─rewrite <- (ZRange.is_bounded_by_None_r 8.7% 8.7% 4 0.332s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.3% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.3% 1 0.520s
+─op_sig_side_conditions_t -------------- 0.0% 7.2% 1 0.516s
+─by_tac -------------------------------- 0.0% 7.1% 2 0.412s
+─Reify.do_reify_abs_goal --------------- 6.9% 7.0% 2 0.500s
+─Reify.do_reifyf_goal ------------------ 6.3% 6.5% 62 0.460s
+─DestructHyps.do_one_match_then -------- 0.3% 5.4% 14 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.4% 4 0.116s
+─do_tac -------------------------------- 0.0% 5.1% 13 0.044s
+─destruct H ---------------------------- 5.1% 5.1% 10 0.044s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.0% 1 0.356s
+─ReflectiveTactics.unify_abstract_cbv_in 3.1% 4.1% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 3.4% 1 0.244s
+─unify (constr) (constr) --------------- 3.1% 3.1% 8 0.072s
+─Glue.zrange_to_reflective_goal -------- 2.1% 2.7% 1 0.196s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.2% 1 0.160s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.3% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 59.8% 1 4.284s
+ ├─IntegrationTestTemporaryMiscCommon.fa 17.6% 49.1% 1 3.516s
+ │ ├─reflexivity ----------------------- 23.2% 23.2% 1 1.660s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.2% 1 0.516s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 3.9% 3.9% 2 0.272s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.2% 2 0.116s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.2% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.0% 6 0.040s
+ │ └destruct H ---------------------- 3.0% 3.0% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.5% 1 0.680s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.3% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.3% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.1% 2 0.412s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.332s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.2% 2 0.080s
+ │ └DestructHyps.do_one_match_then -- 0.1% 2.2% 6 0.044s
+ │ └do_tac -------------------------- 0.0% 2.2% 4 0.044s
+ │ └destruct H ---------------------- 2.2% 2.2% 4 0.044s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.2% 1 0.160s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.3% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 40.2% 1 2.884s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 35.3% 1 2.528s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 34.8% 1 2.492s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 21.0% 1 1.504s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 13.8% 16.4% 8 0.268s
+ │ │ │└unify (constr) (constr) --------- 2.1% 2.1% 6 0.048s
+ │ │ └─ReflectiveTactics.unify_abstract_ 3.1% 4.1% 1 0.292s
+ │ └─ReflectiveTactics.do_reify -------- 0.1% 13.8% 1 0.988s
+ │ └Reify.Reify_rhs_gen --------------- 0.8% 13.6% 1 0.972s
+ │ └Reify.do_reify_abs_goal ----------- 6.9% 7.0% 2 0.500s
+ │ └Reify.do_reifyf_goal -------------- 6.3% 6.5% 62 0.460s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.0% 1 0.356s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.4% 1 0.244s
+ └Glue.zrange_to_reflective_goal ------ 2.1% 2.7% 1 0.196s
+
+src/Specific/NISTP256/AMD64/feopp (real: 32.08, user: 29.46, sys: 0.25, mem: 765212 ko)
+COQC src/Specific/NISTP256/AMD64/fesub.v
+Finished transaction in 12.83 secs (11.988u,0.019s) (successful)
+total time: 11.956s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 63.2% 1 7.560s
+─IntegrationTestTemporaryMiscCommon.fact 15.6% 48.5% 1 5.796s
+─Pipeline.refine_reflectively_gen ------ 0.0% 36.8% 1 4.396s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 31.0% 1 3.712s
+─ReflectiveTactics.solve_side_conditions 0.0% 30.6% 1 3.656s
+─reflexivity --------------------------- 20.3% 20.3% 8 2.312s
+─ReflectiveTactics.solve_post_reified_si 0.5% 17.3% 1 2.064s
+─UnifyAbstractReflexivity.unify_transfor 11.8% 13.9% 8 0.452s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 13.7% 1 1.636s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.3% 1 1.592s
+─Reify.Reify_rhs_gen ------------------- 0.9% 12.8% 1 1.536s
+─DestructHyps.do_all_matches_then ------ 0.1% 12.6% 8 0.224s
+─DestructHyps.do_one_match_then -------- 0.5% 12.5% 44 0.056s
+─op_sig_side_conditions_t -------------- 0.0% 12.2% 1 1.456s
+─do_tac -------------------------------- 0.0% 12.0% 43 0.052s
+─destruct H ---------------------------- 11.9% 11.9% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 11.1% 1 1.324s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.1% 1 1.324s
+─by_tac -------------------------------- 0.0% 10.9% 4 0.488s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.1% 10.2% 8 0.328s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.724s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.7% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.5% 5.6% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.432s
+─ReflectiveTactics.unify_abstract_cbv_in 2.0% 2.8% 1 0.340s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.7% 1 0.324s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.6% 1 0.312s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.5% 3 0.300s
+─unify (constr) (constr) --------------- 2.4% 2.4% 9 0.100s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 63.2% 1 7.560s
+ ├─IntegrationTestTemporaryMiscCommon.fa 15.6% 48.5% 1 5.796s
+ │ ├─reflexivity ----------------------- 19.3% 19.3% 1 2.312s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.2% 1 1.456s
+ │ ├─DestructHyps.do_all_matches_then 0.1% 7.1% 4 0.224s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.1% 24 0.056s
+ │ │└do_tac -------------------------- 0.0% 6.7% 20 0.052s
+ │ │└destruct H ---------------------- 6.7% 6.7% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 4.9% 4.9% 4 0.292s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 13.7% 1 1.636s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.1% 1 1.324s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 11.1% 1 1.324s
+ │└by_tac ---------------------------- 0.0% 10.9% 4 0.488s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.5% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.5% 20 0.048s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.2% 5.2% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.6% 1 0.312s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.5% 3 0.300s
+─Pipeline.refine_reflectively_gen ------ 0.0% 36.8% 1 4.396s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 31.0% 1 3.712s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 30.6% 1 3.656s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 17.3% 1 2.064s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.8% 13.9% 8 0.452s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.0% 2.8% 1 0.340s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.3% 1 1.592s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 12.8% 1 1.536s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.724s
+ │ └Reify.do_reifyf_goal -------------- 5.5% 5.6% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.7% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.7% 1 0.324s
+
+Finished transaction in 14.576 secs (13.372u,0.004s) (successful)
+Closed under the global context
+total time: 11.956s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 63.2% 1 7.560s
+─IntegrationTestTemporaryMiscCommon.fact 15.6% 48.5% 1 5.796s
+─Pipeline.refine_reflectively_gen ------ 0.0% 36.8% 1 4.396s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 31.0% 1 3.712s
+─ReflectiveTactics.solve_side_conditions 0.0% 30.6% 1 3.656s
+─reflexivity --------------------------- 20.3% 20.3% 8 2.312s
+─ReflectiveTactics.solve_post_reified_si 0.5% 17.3% 1 2.064s
+─UnifyAbstractReflexivity.unify_transfor 11.8% 13.9% 8 0.452s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 13.7% 1 1.636s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.3% 1 1.592s
+─Reify.Reify_rhs_gen ------------------- 0.9% 12.8% 1 1.536s
+─DestructHyps.do_all_matches_then ------ 0.1% 12.6% 8 0.224s
+─DestructHyps.do_one_match_then -------- 0.5% 12.5% 44 0.056s
+─op_sig_side_conditions_t -------------- 0.0% 12.2% 1 1.456s
+─do_tac -------------------------------- 0.0% 12.0% 43 0.052s
+─destruct H ---------------------------- 11.9% 11.9% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 11.1% 1 1.324s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.1% 1 1.324s
+─by_tac -------------------------------- 0.0% 10.9% 4 0.488s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.1% 10.2% 8 0.328s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.724s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.7% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.5% 5.6% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.432s
+─ReflectiveTactics.unify_abstract_cbv_in 2.0% 2.8% 1 0.340s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.7% 1 0.324s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.6% 1 0.312s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.5% 3 0.300s
+─unify (constr) (constr) --------------- 2.4% 2.4% 9 0.100s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 63.2% 1 7.560s
+ ├─IntegrationTestTemporaryMiscCommon.fa 15.6% 48.5% 1 5.796s
+ │ ├─reflexivity ----------------------- 19.3% 19.3% 1 2.312s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.2% 1 1.456s
+ │ ├─DestructHyps.do_all_matches_then 0.1% 7.1% 4 0.224s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.1% 24 0.056s
+ │ │└do_tac -------------------------- 0.0% 6.7% 20 0.052s
+ │ │└destruct H ---------------------- 6.7% 6.7% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 4.9% 4.9% 4 0.292s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 13.7% 1 1.636s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.1% 1 1.324s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 11.1% 1 1.324s
+ │└by_tac ---------------------------- 0.0% 10.9% 4 0.488s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.5% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.5% 20 0.048s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.2% 5.2% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.6% 1 0.312s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.5% 3 0.300s
+─Pipeline.refine_reflectively_gen ------ 0.0% 36.8% 1 4.396s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 31.0% 1 3.712s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 30.6% 1 3.656s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 17.3% 1 2.064s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.8% 13.9% 8 0.452s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.0% 2.8% 1 0.340s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.3% 1 1.592s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 12.8% 1 1.536s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.724s
+ │ └Reify.do_reifyf_goal -------------- 5.5% 5.6% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.7% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.7% 1 0.324s
+
+src/Specific/NISTP256/AMD64/fesub (real: 43.78, user: 40.09, sys: 0.30, mem: 799668 ko)
+COQC src/Specific/NISTP256/AMD64/feaddDisplay > src/Specific/NISTP256/AMD64/feaddDisplay.log
+COQC src/Specific/NISTP256/AMD64/fenzDisplay > src/Specific/NISTP256/AMD64/fenzDisplay.log
+COQC src/Specific/NISTP256/AMD64/feoppDisplay > src/Specific/NISTP256/AMD64/feoppDisplay.log
+COQC src/Specific/NISTP256/AMD64/fesubDisplay > src/Specific/NISTP256/AMD64/fesubDisplay.log
+COQC src/Specific/X25519/C64/fesquareDisplay > src/Specific/X25519/C64/fesquareDisplay.log
+COQC src/Specific/solinas32_2e255m765_12limbs/femul.v
+Finished transaction in 60.265 secs (55.388u,0.103s) (successful)
+total time: 55.440s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 53.156s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.2% 1 49.464s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.9% 1 49.288s
+─ReflectiveTactics.do_reify ------------ -0.0% 49.9% 1 27.684s
+─Reify.Reify_rhs_gen ------------------- 1.3% 49.3% 1 27.348s
+─ReflectiveTactics.solve_post_reified_si 0.1% 39.0% 1 21.604s
+─Reify.do_reify_abs_goal --------------- 36.3% 36.6% 2 20.272s
+─UnifyAbstractReflexivity.unify_transfor 30.8% 36.1% 8 8.636s
+─Reify.do_reifyf_goal ------------------ 35.7% 35.9% 108 10.356s
+─eexact -------------------------------- 11.5% 11.5% 110 0.128s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.7% 1 3.692s
+─Glue.zrange_to_reflective ------------- 0.0% 6.2% 1 3.424s
+─unify (constr) (constr) --------------- 4.9% 4.9% 7 1.140s
+─Glue.zrange_to_reflective_goal -------- 1.4% 4.7% 1 2.592s
+─synthesize ---------------------------- 0.0% 4.1% 1 2.284s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.0% 1 2.220s
+─change G' ----------------------------- 3.9% 3.9% 1 2.148s
+─pose proof (pf : Interpretation.Bo 3.1% 3.1% 1 1.736s
+─rewrite H ----------------------------- 3.1% 3.1% 1 1.692s
+─prove_interp_compile_correct ---------- 0.0% 3.0% 1 1.636s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.7% 2.7% 1 1.484s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 53.156s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 89.2% 1 49.464s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.9% 1 49.288s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 49.9% 1 27.684s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 49.3% 1 27.348s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.3% 36.6% 2 20.272s
+ │ │ │└Reify.do_reifyf_goal ------------ 35.7% 35.9% 108 10.356s
+ │ │ │└eexact -------------------------- 11.1% 11.1% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.1% 3.1% 1 1.692s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.0% 1 1.636s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 2.7% 2.7% 1 1.484s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 39.0% 1 21.604s
+ │ └UnifyAbstractReflexivity.unify_tran 30.8% 36.1% 8 8.636s
+ │ └unify (constr) (constr) ----------- 4.4% 4.4% 6 1.140s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.7% 1 3.692s
+ └Glue.zrange_to_reflective ----------- 0.0% 6.2% 1 3.424s
+ └Glue.zrange_to_reflective_goal ------ 1.4% 4.7% 1 2.592s
+ └pose proof (pf : Interpretation. 3.1% 3.1% 1 1.736s
+─synthesize ---------------------------- 0.0% 4.1% 1 2.284s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.0% 1 2.220s
+└change G' ----------------------------- 3.9% 3.9% 1 2.148s
+
+Finished transaction in 92.046 secs (84.315u,0.032s) (successful)
+Closed under the global context
+total time: 55.440s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 53.156s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 89.2% 1 49.464s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.9% 1 49.288s
+─ReflectiveTactics.do_reify ------------ -0.0% 49.9% 1 27.684s
+─Reify.Reify_rhs_gen ------------------- 1.3% 49.3% 1 27.348s
+─ReflectiveTactics.solve_post_reified_si 0.1% 39.0% 1 21.604s
+─Reify.do_reify_abs_goal --------------- 36.3% 36.6% 2 20.272s
+─UnifyAbstractReflexivity.unify_transfor 30.8% 36.1% 8 8.636s
+─Reify.do_reifyf_goal ------------------ 35.7% 35.9% 108 10.356s
+─eexact -------------------------------- 11.5% 11.5% 110 0.128s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.7% 1 3.692s
+─Glue.zrange_to_reflective ------------- 0.0% 6.2% 1 3.424s
+─unify (constr) (constr) --------------- 4.9% 4.9% 7 1.140s
+─Glue.zrange_to_reflective_goal -------- 1.4% 4.7% 1 2.592s
+─synthesize ---------------------------- 0.0% 4.1% 1 2.284s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.0% 1 2.220s
+─change G' ----------------------------- 3.9% 3.9% 1 2.148s
+─pose proof (pf : Interpretation.Bo 3.1% 3.1% 1 1.736s
+─rewrite H ----------------------------- 3.1% 3.1% 1 1.692s
+─prove_interp_compile_correct ---------- 0.0% 3.0% 1 1.636s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.7% 2.7% 1 1.484s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.9% 1 53.156s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 89.2% 1 49.464s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.9% 1 49.288s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 49.9% 1 27.684s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 49.3% 1 27.348s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.3% 36.6% 2 20.272s
+ │ │ │└Reify.do_reifyf_goal ------------ 35.7% 35.9% 108 10.356s
+ │ │ │└eexact -------------------------- 11.1% 11.1% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.1% 3.1% 1 1.692s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.0% 1 1.636s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 2.7% 2.7% 1 1.484s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 39.0% 1 21.604s
+ │ └UnifyAbstractReflexivity.unify_tran 30.8% 36.1% 8 8.636s
+ │ └unify (constr) (constr) ----------- 4.4% 4.4% 6 1.140s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.7% 1 3.692s
+ └Glue.zrange_to_reflective ----------- 0.0% 6.2% 1 3.424s
+ └Glue.zrange_to_reflective_goal ------ 1.4% 4.7% 1 2.592s
+ └pose proof (pf : Interpretation. 3.1% 3.1% 1 1.736s
+─synthesize ---------------------------- 0.0% 4.1% 1 2.284s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.0% 1 2.220s
+└change G' ----------------------------- 3.9% 3.9% 1 2.148s
+
+src/Specific/solinas32_2e255m765_12limbs/femul (real: 179.21, user: 164.11, sys: 0.42, mem: 1549104 ko)
+COQC src/Specific/X25519/C64/fesubDisplay > src/Specific/X25519/C64/fesubDisplay.log
+COQC src/Specific/X25519/C64/freezeDisplay > src/Specific/X25519/C64/freezeDisplay.log
+COQC src/Specific/solinas32_2e255m765_13limbs/femul.v
+Finished transaction in 74.548 secs (68.928u,0.079s) (successful)
+total time: 68.948s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 65.956s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.7% 1 61.172s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.4% 1 60.944s
+─ReflectiveTactics.do_reify ------------ 0.0% 48.5% 1 33.408s
+─Reify.Reify_rhs_gen ------------------- 1.3% 47.9% 1 33.020s
+─ReflectiveTactics.solve_post_reified_si 0.1% 39.9% 1 27.536s
+─UnifyAbstractReflexivity.unify_transfor 32.0% 37.2% 8 11.528s
+─Reify.do_reify_abs_goal --------------- 36.0% 36.2% 2 24.960s
+─Reify.do_reifyf_goal ------------------ 35.3% 35.5% 117 12.840s
+─eexact -------------------------------- 11.4% 11.4% 119 0.160s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.9% 1 4.784s
+─Glue.zrange_to_reflective ------------- 0.0% 6.5% 1 4.512s
+─Glue.zrange_to_reflective_goal -------- 1.3% 4.9% 1 3.396s
+─unify (constr) (constr) --------------- 4.9% 4.9% 7 1.524s
+─synthesize ---------------------------- 0.0% 4.3% 1 2.992s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.2% 1 2.912s
+─change G' ----------------------------- 4.1% 4.1% 1 2.840s
+─pose proof (pf : Interpretation.Bo 3.5% 3.5% 1 2.420s
+─rewrite H ----------------------------- 3.0% 3.0% 1 2.084s
+─prove_interp_compile_correct ---------- 0.0% 2.7% 1 1.856s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 1.692s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 65.956s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 88.7% 1 61.172s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.4% 1 60.944s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 48.5% 1 33.408s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 47.9% 1 33.020s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.0% 36.2% 2 24.960s
+ │ │ │└Reify.do_reifyf_goal ------------ 35.3% 35.5% 117 12.840s
+ │ │ │└eexact -------------------------- 10.9% 10.9% 117 0.088s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 2.084s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 2.7% 1 1.856s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 1.692s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 39.9% 1 27.536s
+ │ └UnifyAbstractReflexivity.unify_tran 32.0% 37.2% 8 11.528s
+ │ └unify (constr) (constr) ----------- 4.3% 4.3% 6 1.524s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.9% 1 4.784s
+ └Glue.zrange_to_reflective ----------- 0.0% 6.5% 1 4.512s
+ └Glue.zrange_to_reflective_goal ------ 1.3% 4.9% 1 3.396s
+ └pose proof (pf : Interpretation. 3.5% 3.5% 1 2.420s
+─synthesize ---------------------------- 0.0% 4.3% 1 2.992s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.2% 1 2.912s
+└change G' ----------------------------- 4.1% 4.1% 1 2.840s
+
+Finished transaction in 105.62 secs (97.6u,0.02s) (successful)
+Closed under the global context
+total time: 68.948s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 65.956s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.7% 1 61.172s
+─ReflectiveTactics.solve_side_conditions 0.0% 88.4% 1 60.944s
+─ReflectiveTactics.do_reify ------------ 0.0% 48.5% 1 33.408s
+─Reify.Reify_rhs_gen ------------------- 1.3% 47.9% 1 33.020s
+─ReflectiveTactics.solve_post_reified_si 0.1% 39.9% 1 27.536s
+─UnifyAbstractReflexivity.unify_transfor 32.0% 37.2% 8 11.528s
+─Reify.do_reify_abs_goal --------------- 36.0% 36.2% 2 24.960s
+─Reify.do_reifyf_goal ------------------ 35.3% 35.5% 117 12.840s
+─eexact -------------------------------- 11.4% 11.4% 119 0.160s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.9% 1 4.784s
+─Glue.zrange_to_reflective ------------- 0.0% 6.5% 1 4.512s
+─Glue.zrange_to_reflective_goal -------- 1.3% 4.9% 1 3.396s
+─unify (constr) (constr) --------------- 4.9% 4.9% 7 1.524s
+─synthesize ---------------------------- 0.0% 4.3% 1 2.992s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.2% 1 2.912s
+─change G' ----------------------------- 4.1% 4.1% 1 2.840s
+─pose proof (pf : Interpretation.Bo 3.5% 3.5% 1 2.420s
+─rewrite H ----------------------------- 3.0% 3.0% 1 2.084s
+─prove_interp_compile_correct ---------- 0.0% 2.7% 1 1.856s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 1.692s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 65.956s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 88.7% 1 61.172s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 88.4% 1 60.944s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 48.5% 1 33.408s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 47.9% 1 33.020s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.0% 36.2% 2 24.960s
+ │ │ │└Reify.do_reifyf_goal ------------ 35.3% 35.5% 117 12.840s
+ │ │ │└eexact -------------------------- 10.9% 10.9% 117 0.088s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 2.084s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 2.7% 1 1.856s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 1.692s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 39.9% 1 27.536s
+ │ └UnifyAbstractReflexivity.unify_tran 32.0% 37.2% 8 11.528s
+ │ └unify (constr) (constr) ----------- 4.3% 4.3% 6 1.524s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.9% 1 4.784s
+ └Glue.zrange_to_reflective ----------- 0.0% 6.5% 1 4.512s
+ └Glue.zrange_to_reflective_goal ------ 1.3% 4.9% 1 3.396s
+ └pose proof (pf : Interpretation. 3.5% 3.5% 1 2.420s
+─synthesize ---------------------------- 0.0% 4.3% 1 2.992s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 4.2% 1 2.912s
+└change G' ----------------------------- 4.1% 4.1% 1 2.840s
+
+src/Specific/solinas32_2e255m765_13limbs/femul (real: 207.94, user: 192.95, sys: 0.48, mem: 1656912 ko)
+COQC src/Specific/NISTP256/AMD64/femul.v
+Finished transaction in 122.29 secs (111.972u,0.239s) (successful)
+total time: 112.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 108.944s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.5% 1 108.236s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.3% 1 108.000s
+─ReflectiveTactics.do_reify ------------ 0.0% 81.8% 1 91.740s
+─Reify.Reify_rhs_gen ------------------- 0.7% 81.6% 1 91.504s
+─Reify.do_reify_abs_goal --------------- 75.6% 75.7% 2 84.892s
+─Reify.do_reifyf_goal ------------------ 75.2% 75.4% 901 84.532s
+─eexact -------------------------------- 17.1% 17.1% 903 0.140s
+─ReflectiveTactics.solve_post_reified_si 0.2% 14.5% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 11.7% 13.3% 8 3.152s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.220s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 108.944s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.5% 1 108.236s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.3% 1 108.000s
+ ├─ReflectiveTactics.do_reify ---------- 0.0% 81.8% 1 91.740s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 81.6% 1 91.504s
+ │└Reify.do_reify_abs_goal ------------- 75.6% 75.7% 2 84.892s
+ │└Reify.do_reifyf_goal ---------------- 75.2% 75.4% 901 84.532s
+ │└eexact ------------------------------ 16.9% 16.9% 901 0.140s
+ └─ReflectiveTactics.solve_post_reified_ 0.2% 14.5% 1 16.260s
+ └UnifyAbstractReflexivity.unify_transf 11.7% 13.3% 8 3.152s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.220s
+
+Finished transaction in 72.408 secs (68.432u,0.064s) (successful)
+Closed under the global context
+total time: 112.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 108.944s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.5% 1 108.236s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.3% 1 108.000s
+─ReflectiveTactics.do_reify ------------ 0.0% 81.8% 1 91.740s
+─Reify.Reify_rhs_gen ------------------- 0.7% 81.6% 1 91.504s
+─Reify.do_reify_abs_goal --------------- 75.6% 75.7% 2 84.892s
+─Reify.do_reifyf_goal ------------------ 75.2% 75.4% 901 84.532s
+─eexact -------------------------------- 17.1% 17.1% 903 0.140s
+─ReflectiveTactics.solve_post_reified_si 0.2% 14.5% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 11.7% 13.3% 8 3.152s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.220s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 108.944s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.5% 1 108.236s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.3% 1 108.000s
+ ├─ReflectiveTactics.do_reify ---------- 0.0% 81.8% 1 91.740s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 81.6% 1 91.504s
+ │└Reify.do_reify_abs_goal ------------- 75.6% 75.7% 2 84.892s
+ │└Reify.do_reifyf_goal ---------------- 75.2% 75.4% 901 84.532s
+ │└eexact ------------------------------ 16.9% 16.9% 901 0.140s
+ └─ReflectiveTactics.solve_post_reified_ 0.2% 14.5% 1 16.260s
+ └UnifyAbstractReflexivity.unify_transf 11.7% 13.3% 8 3.152s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.220s
+
+src/Specific/NISTP256/AMD64/femul (real: 217.80, user: 202.52, sys: 0.53, mem: 3307052 ko)
+COQC src/Specific/NISTP256/AMD64/femulDisplay > src/Specific/NISTP256/AMD64/femulDisplay.log
+COQC src/Specific/X25519/C64/ladderstep.v
+total time: 82.012s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 82.012s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 81.228s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 96.1% 1 78.784s
+─ReflectiveTactics.solve_side_conditions 0.0% 95.9% 1 78.684s
+─ReflectiveTactics.solve_post_reified_si 0.1% 72.6% 1 59.540s
+─UnifyAbstractReflexivity.unify_transfor 64.6% 68.0% 8 30.740s
+─ReflectiveTactics.do_reify ------------ 0.0% 23.3% 1 19.144s
+─Reify.Reify_rhs_gen ------------------- 1.2% 14.5% 1 11.860s
+─Reify.do_reifyf_goal ------------------ 7.1% 7.2% 138 1.908s
+─Compilers.Reify.reify_context_variables 0.0% 5.9% 1 4.828s
+─rewrite H ----------------------------- 4.4% 4.4% 1 3.600s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.0% 1 3.288s
+─Glue.refine_to_reflective_glue' ------- 0.0% 3.0% 1 2.444s
+─Glue.zrange_to_reflective ------------- 0.0% 2.5% 1 2.060s
+─reflexivity --------------------------- 2.3% 2.3% 11 0.816s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.968s
+─Glue.zrange_to_reflective_goal -------- 1.4% 2.1% 1 1.720s
+─clear (var_list) ---------------------- 2.0% 2.0% 159 0.584s
+─eexact -------------------------------- 2.0% 2.0% 140 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 82.012s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 81.228s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 96.1% 1 78.784s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 95.9% 1 78.684s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.1% 72.6% 1 59.540s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 64.6% 68.0% 8 30.740s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.0% 1 3.288s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 23.3% 1 19.144s
+ │ ├─Reify.Reify_rhs_gen ------------- 1.2% 14.5% 1 11.860s
+ │ │ ├─rewrite H --------------------- 4.4% 4.4% 1 3.600s
+ │ │ └─Reify.transitivity_tt --------- 0.0% 2.1% 2 0.968s
+ │ └─Compilers.Reify.reify_context_var 0.0% 5.9% 1 4.828s
+ │ └Reify.do_reifyf_goal ------------ 5.7% 5.8% 113 1.908s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 3.0% 1 2.444s
+ └Glue.zrange_to_reflective ----------- 0.0% 2.5% 1 2.060s
+ └Glue.zrange_to_reflective_goal ------ 1.4% 2.1% 1 1.720s
+
+Finished transaction in 194.903 secs (185.732u,0.043s) (successful)
+Closed under the global context
+total time: 82.012s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 82.012s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 81.228s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 96.1% 1 78.784s
+─ReflectiveTactics.solve_side_conditions 0.0% 95.9% 1 78.684s
+─ReflectiveTactics.solve_post_reified_si 0.1% 72.6% 1 59.540s
+─UnifyAbstractReflexivity.unify_transfor 64.6% 68.0% 8 30.740s
+─ReflectiveTactics.do_reify ------------ 0.0% 23.3% 1 19.144s
+─Reify.Reify_rhs_gen ------------------- 1.2% 14.5% 1 11.860s
+─Reify.do_reifyf_goal ------------------ 7.1% 7.2% 138 1.908s
+─Compilers.Reify.reify_context_variables 0.0% 5.9% 1 4.828s
+─rewrite H ----------------------------- 4.4% 4.4% 1 3.600s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.0% 1 3.288s
+─Glue.refine_to_reflective_glue' ------- 0.0% 3.0% 1 2.444s
+─Glue.zrange_to_reflective ------------- 0.0% 2.5% 1 2.060s
+─reflexivity --------------------------- 2.3% 2.3% 11 0.816s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.968s
+─Glue.zrange_to_reflective_goal -------- 1.4% 2.1% 1 1.720s
+─clear (var_list) ---------------------- 2.0% 2.0% 159 0.584s
+─eexact -------------------------------- 2.0% 2.0% 140 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 82.012s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 81.228s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 96.1% 1 78.784s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 95.9% 1 78.684s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.1% 72.6% 1 59.540s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 64.6% 68.0% 8 30.740s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.0% 1 3.288s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 23.3% 1 19.144s
+ │ ├─Reify.Reify_rhs_gen ------------- 1.2% 14.5% 1 11.860s
+ │ │ ├─rewrite H --------------------- 4.4% 4.4% 1 3.600s
+ │ │ └─Reify.transitivity_tt --------- 0.0% 2.1% 2 0.968s
+ │ └─Compilers.Reify.reify_context_var 0.0% 5.9% 1 4.828s
+ │ └Reify.do_reifyf_goal ------------ 5.7% 5.8% 113 1.908s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 3.0% 1 2.444s
+ └Glue.zrange_to_reflective ----------- 0.0% 2.5% 1 2.060s
+ └Glue.zrange_to_reflective_goal ------ 1.4% 2.1% 1 1.720s
+
+src/Specific/X25519/C64/ladderstep (real: 316.83, user: 299.49, sys: 0.52, mem: 1621500 ko)
+COQC src/Specific/X25519/C64/ladderstepDisplay > src/Specific/X25519/C64/ladderstepDisplay.log
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-both.log.expected b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-both.log.expected
new file mode 100644
index 00000000..159e6455
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/001-correct-diff-sorting-order/time-of-build-both.log.expected
@@ -0,0 +1,26 @@
+After | File Name | Before || Change | % Change
+----------------------------------------------------------------------------------------------
+19m16.04s | Total | 21m25.27s || -2m09.23s | -10.05%
+----------------------------------------------------------------------------------------------
+4m01.34s | Specific/X25519/C64/ladderstep | 4m59.49s || -0m58.15s | -19.41%
+2m48.52s | Specific/solinas32_2e255m765_13limbs/femul | 3m12.95s || -0m24.42s | -12.66%
+2m23.70s | Specific/solinas32_2e255m765_12limbs/femul | 2m44.11s || -0m20.41s | -12.43%
+3m09.62s | Specific/NISTP256/AMD64/femul | 3m22.52s || -0m12.90s | -6.36%
+0m36.32s | Specific/X25519/C64/femul | 0m39.50s || -0m03.17s | -8.05%
+0m30.13s | Specific/X25519/C64/fesquare | 0m32.24s || -0m02.11s | -6.54%
+0m35.40s | Specific/NISTP256/AMD64/feadd | 0m37.21s || -0m01.81s | -4.86%
+0m31.50s | Specific/X25519/C64/freeze | 0m33.24s || -0m01.74s | -5.23%
+0m24.99s | Specific/X25519/C64/fecarry | 0m26.31s || -0m01.32s | -5.01%
+0m22.65s | Specific/X25519/C64/fesub | 0m23.72s || -0m01.07s | -4.51%
+0m45.75s | Specific/solinas32_2e255m765_13limbs/Synthesis | 0m45.58s || +0m00.17s | +0.37%
+0m39.59s | Specific/NISTP256/AMD64/fesub | 0m40.09s || -0m00.50s | -1.24%
+0m36.92s | Specific/solinas32_2e255m765_12limbs/Synthesis | 0m36.64s || +0m00.28s | +0.76%
+0m28.51s | Specific/NISTP256/AMD64/feopp | 0m29.46s || -0m00.94s | -3.22%
+0m25.50s | Specific/NISTP256/AMD64/fenz | 0m26.41s || -0m00.91s | -3.44%
+0m20.93s | Specific/X25519/C64/feadd | 0m21.41s || -0m00.48s | -2.24%
+0m12.55s | Specific/NISTP256/AMD64/Synthesis | 0m12.54s || +0m00.01s | +0.07%
+0m10.37s | Specific/X25519/C64/Synthesis | 0m10.30s || +0m00.06s | +0.67%
+0m07.18s | Compilers/Z/Bounds/Pipeline/Definition | 0m07.22s || -0m00.04s | -0.55%
+0m01.72s | Compilers/Z/Bounds/Pipeline/ReflectiveTactics | 0m01.58s || +0m00.13s | +8.86%
+0m01.67s | Specific/Framework/SynthesisFramework | 0m01.72s || -0m00.05s | -2.90%
+0m01.19s | Compilers/Z/Bounds/Pipeline | 0m01.04s || +0m00.14s | +14.42% \ No newline at end of file
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/run.sh b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/run.sh
new file mode 100755
index 00000000..4f39b3ce
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/run.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -x
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+"$COQLIB"/tools/make-one-time-file.py time-of-build.log.in time-of-build-pretty.log
+
+diff -u time-of-build-pretty.log.expected time-of-build-pretty.log || exit $?
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build-pretty.log.expected b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build-pretty.log.expected
new file mode 100644
index 00000000..b9739ddb
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build-pretty.log.expected
@@ -0,0 +1,26 @@
+Time | File Name
+----------------------------------------------------------
+19m16.04s | Total
+----------------------------------------------------------
+4m01.34s | Specific/X25519/C64/ladderstep
+3m09.62s | Specific/NISTP256/AMD64/femul
+2m48.52s | Specific/solinas32_2e255m765_13limbs/femul
+2m23.70s | Specific/solinas32_2e255m765_12limbs/femul
+0m45.75s | Specific/solinas32_2e255m765_13limbs/Synthesis
+0m39.59s | Specific/NISTP256/AMD64/fesub
+0m36.92s | Specific/solinas32_2e255m765_12limbs/Synthesis
+0m36.32s | Specific/X25519/C64/femul
+0m35.40s | Specific/NISTP256/AMD64/feadd
+0m31.50s | Specific/X25519/C64/freeze
+0m30.13s | Specific/X25519/C64/fesquare
+0m28.51s | Specific/NISTP256/AMD64/feopp
+0m25.50s | Specific/NISTP256/AMD64/fenz
+0m24.99s | Specific/X25519/C64/fecarry
+0m22.65s | Specific/X25519/C64/fesub
+0m20.93s | Specific/X25519/C64/feadd
+0m12.55s | Specific/NISTP256/AMD64/Synthesis
+0m10.37s | Specific/X25519/C64/Synthesis
+0m07.18s | Compilers/Z/Bounds/Pipeline/Definition
+0m01.72s | Compilers/Z/Bounds/Pipeline/ReflectiveTactics
+0m01.67s | Specific/Framework/SynthesisFramework
+0m01.19s | Compilers/Z/Bounds/Pipeline \ No newline at end of file
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build.log.in b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build.log.in
new file mode 100644
index 00000000..5757018e
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/002-single-file-sorting/time-of-build.log.in
@@ -0,0 +1,1760 @@
+COQDEP src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+COQDEP src/Compilers/Z/Bounds/Pipeline/Definition.v
+/home/jgross/.local64/coq/coq-master/bin/coq_makefile -f _CoqProject INSTALLDEFAULTROOT = Crypto -o Makefile-old
+COQ_MAKEFILE -f _CoqProject > Makefile.coq
+make --no-print-directory -C coqprime
+make[1]: Nothing to be done for 'all'.
+ECHO > _CoqProject
+COQC src/Compilers/Z/Bounds/Pipeline/Definition.v
+src/Compilers/Z/Bounds/Pipeline/Definition (real: 7.33, user: 7.18, sys: 0.14, mem: 574388 ko)
+COQC src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics.v
+src/Compilers/Z/Bounds/Pipeline/ReflectiveTactics (real: 1.93, user: 1.72, sys: 0.20, mem: 544172 ko)
+COQC src/Compilers/Z/Bounds/Pipeline.v
+src/Compilers/Z/Bounds/Pipeline (real: 1.38, user: 1.19, sys: 0.16, mem: 539808 ko)
+COQC src/Specific/Framework/SynthesisFramework.v
+src/Specific/Framework/SynthesisFramework (real: 1.85, user: 1.67, sys: 0.17, mem: 646300 ko)
+COQC src/Specific/X25519/C64/Synthesis.v
+src/Specific/X25519/C64/Synthesis (real: 11.15, user: 10.37, sys: 0.18, mem: 687760 ko)
+COQC src/Specific/NISTP256/AMD64/Synthesis.v
+src/Specific/NISTP256/AMD64/Synthesis (real: 13.45, user: 12.55, sys: 0.19, mem: 668216 ko)
+COQC src/Specific/X25519/C64/feadd.v
+Finished transaction in 2.814 secs (2.624u,0.s) (successful)
+total time: 2.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 66.9% 1 1.724s
+─ReflectiveTactics.solve_side_conditions 0.0% 65.5% 1 1.688s
+─ReflectiveTactics.solve_post_reified_si 1.2% 37.0% 1 0.952s
+─Glue.refine_to_reflective_glue' ------- 0.0% 30.3% 1 0.780s
+─ReflectiveTactics.do_reify ------------ 0.0% 28.6% 1 0.736s
+─Reify.Reify_rhs_gen ------------------- 2.2% 26.6% 1 0.684s
+─UnifyAbstractReflexivity.unify_transfor 20.3% 24.1% 7 0.164s
+─Glue.zrange_to_reflective ------------- 0.0% 20.3% 1 0.524s
+─Glue.zrange_to_reflective_goal -------- 9.5% 15.2% 1 0.392s
+─Reify.do_reify_abs_goal --------------- 13.7% 13.8% 2 0.356s
+─Reify.do_reifyf_goal ------------------ 12.4% 12.6% 16 0.324s
+─ReflectiveTactics.unify_abstract_cbv_in 8.4% 11.2% 1 0.288s
+─unify (constr) (constr) --------------- 5.7% 5.7% 6 0.072s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.4% 1 0.140s
+─assert (H : is_bounded_by' bounds (map' 4.8% 5.1% 2 0.072s
+─Glue.pattern_proj1_sig_in_sig --------- 1.7% 5.1% 1 0.132s
+─pose proof (pf : Interpretation.Bo 3.7% 3.7% 1 0.096s
+─Glue.split_BoundedWordToZ ------------- 0.3% 3.7% 1 0.096s
+─destruct_sig -------------------------- 0.2% 3.3% 4 0.044s
+─destruct x ---------------------------- 3.1% 3.1% 4 0.036s
+─eexact -------------------------------- 3.0% 3.0% 18 0.008s
+─clearbody (ne_var_list) --------------- 3.0% 3.0% 4 0.060s
+─prove_interp_compile_correct ---------- 0.0% 2.8% 1 0.072s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 0.064s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.3% 2 0.060s
+─rewrite H ----------------------------- 2.2% 2.2% 1 0.056s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.032s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.032s
+─transitivity -------------------------- 2.0% 2.0% 5 0.024s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 66.9% 1 1.724s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 65.5% 1 1.688s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 37.0% 1 0.952s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 20.3% 24.1% 7 0.164s
+ │ │ │└unify (constr) (constr) --------- 3.0% 3.0% 5 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 8.4% 11.2% 1 0.288s
+ │ │ └unify (constr) (constr) --------- 2.8% 2.8% 1 0.072s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 28.6% 1 0.736s
+ │ └Reify.Reify_rhs_gen --------------- 2.2% 26.6% 1 0.684s
+ │ ├─Reify.do_reify_abs_goal --------- 13.7% 13.8% 2 0.356s
+ │ │└Reify.do_reifyf_goal ------------ 12.4% 12.6% 16 0.324s
+ │ │└eexact -------------------------- 2.6% 2.6% 16 0.008s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.8% 1 0.072s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 0.064s
+ │ ├─rewrite H ----------------------- 2.2% 2.2% 1 0.056s
+ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.032s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 30.3% 1 0.780s
+ ├─Glue.zrange_to_reflective --------- 0.0% 20.3% 1 0.524s
+ │ ├─Glue.zrange_to_reflective_goal -- 9.5% 15.2% 1 0.392s
+ │ │└pose proof (pf : Interpretat 3.7% 3.7% 1 0.096s
+ │ └─assert (H : is_bounded_by' bounds 4.8% 5.1% 2 0.072s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.4% 1 0.140s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.7% 5.1% 1 0.132s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.3% 2 0.060s
+ │└clearbody (ne_var_list) ----------- 2.3% 2.3% 1 0.060s
+ └─Glue.split_BoundedWordToZ --------- 0.3% 3.7% 1 0.096s
+ └destruct_sig ---------------------- 0.2% 3.3% 4 0.044s
+ └destruct x ------------------------ 2.5% 2.5% 2 0.036s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+Finished transaction in 5.021 secs (4.636u,0.s) (successful)
+Closed under the global context
+total time: 2.576s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 66.9% 1 1.724s
+─ReflectiveTactics.solve_side_conditions 0.0% 65.5% 1 1.688s
+─ReflectiveTactics.solve_post_reified_si 1.2% 37.0% 1 0.952s
+─Glue.refine_to_reflective_glue' ------- 0.0% 30.3% 1 0.780s
+─ReflectiveTactics.do_reify ------------ 0.0% 28.6% 1 0.736s
+─Reify.Reify_rhs_gen ------------------- 2.2% 26.6% 1 0.684s
+─UnifyAbstractReflexivity.unify_transfor 20.3% 24.1% 7 0.164s
+─Glue.zrange_to_reflective ------------- 0.0% 20.3% 1 0.524s
+─Glue.zrange_to_reflective_goal -------- 9.5% 15.2% 1 0.392s
+─Reify.do_reify_abs_goal --------------- 13.7% 13.8% 2 0.356s
+─Reify.do_reifyf_goal ------------------ 12.4% 12.6% 16 0.324s
+─ReflectiveTactics.unify_abstract_cbv_in 8.4% 11.2% 1 0.288s
+─unify (constr) (constr) --------------- 5.7% 5.7% 6 0.072s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 5.4% 1 0.140s
+─assert (H : is_bounded_by' bounds (map' 4.8% 5.1% 2 0.072s
+─Glue.pattern_proj1_sig_in_sig --------- 1.7% 5.1% 1 0.132s
+─pose proof (pf : Interpretation.Bo 3.7% 3.7% 1 0.096s
+─Glue.split_BoundedWordToZ ------------- 0.3% 3.7% 1 0.096s
+─destruct_sig -------------------------- 0.2% 3.3% 4 0.044s
+─destruct x ---------------------------- 3.1% 3.1% 4 0.036s
+─eexact -------------------------------- 3.0% 3.0% 18 0.008s
+─clearbody (ne_var_list) --------------- 3.0% 3.0% 4 0.060s
+─prove_interp_compile_correct ---------- 0.0% 2.8% 1 0.072s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+─rewrite ?EtaInterp.InterpExprEta ------ 2.5% 2.5% 1 0.064s
+─ClearbodyAll.clearbody_all ------------ 0.0% 2.3% 2 0.060s
+─rewrite H ----------------------------- 2.2% 2.2% 1 0.056s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.032s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.032s
+─transitivity -------------------------- 2.0% 2.0% 5 0.024s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.2% 97.4% 1 2.508s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 66.9% 1 1.724s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 65.5% 1 1.688s
+ │ ├─ReflectiveTactics.solve_post_reifie 1.2% 37.0% 1 0.952s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 20.3% 24.1% 7 0.164s
+ │ │ │└unify (constr) (constr) --------- 3.0% 3.0% 5 0.028s
+ │ │ └─ReflectiveTactics.unify_abstract_ 8.4% 11.2% 1 0.288s
+ │ │ └unify (constr) (constr) --------- 2.8% 2.8% 1 0.072s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 28.6% 1 0.736s
+ │ └Reify.Reify_rhs_gen --------------- 2.2% 26.6% 1 0.684s
+ │ ├─Reify.do_reify_abs_goal --------- 13.7% 13.8% 2 0.356s
+ │ │└Reify.do_reifyf_goal ------------ 12.4% 12.6% 16 0.324s
+ │ │└eexact -------------------------- 2.6% 2.6% 16 0.008s
+ │ ├─prove_interp_compile_correct ---- 0.0% 2.8% 1 0.072s
+ │ │└rewrite ?EtaInterp.InterpExprEta 2.5% 2.5% 1 0.064s
+ │ ├─rewrite H ----------------------- 2.2% 2.2% 1 0.056s
+ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.032s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 30.3% 1 0.780s
+ ├─Glue.zrange_to_reflective --------- 0.0% 20.3% 1 0.524s
+ │ ├─Glue.zrange_to_reflective_goal -- 9.5% 15.2% 1 0.392s
+ │ │└pose proof (pf : Interpretat 3.7% 3.7% 1 0.096s
+ │ └─assert (H : is_bounded_by' bounds 4.8% 5.1% 2 0.072s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 5.4% 1 0.140s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.7% 5.1% 1 0.132s
+ │└ClearbodyAll.clearbody_all -------- 0.0% 2.3% 2 0.060s
+ │└clearbody (ne_var_list) ----------- 2.3% 2.3% 1 0.060s
+ └─Glue.split_BoundedWordToZ --------- 0.3% 3.7% 1 0.096s
+ └destruct_sig ---------------------- 0.2% 3.3% 4 0.044s
+ └destruct x ------------------------ 2.5% 2.5% 2 0.036s
+─synthesize ---------------------------- 0.0% 2.6% 1 0.068s
+
+src/Specific/X25519/C64/feadd (real: 22.81, user: 20.93, sys: 0.25, mem: 766300 ko)
+COQC src/Specific/X25519/C64/fecarry.v
+Finished transaction in 4.343 secs (4.016u,0.004s) (successful)
+total time: 3.976s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.9% 1 3.496s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.9% 1 3.456s
+─ReflectiveTactics.do_reify ------------ 0.0% 56.9% 1 2.264s
+─Reify.Reify_rhs_gen ------------------- 1.8% 56.2% 1 2.236s
+─Reify.do_reify_abs_goal --------------- 36.1% 36.5% 2 1.452s
+─Reify.do_reifyf_goal ------------------ 34.8% 35.1% 29 1.396s
+─ReflectiveTactics.solve_post_reified_si 0.6% 30.0% 1 1.192s
+─UnifyAbstractReflexivity.unify_transfor 17.7% 21.7% 7 0.240s
+─Glue.refine_to_reflective_glue' ------- 0.0% 11.1% 1 0.440s
+─eexact -------------------------------- 10.9% 10.9% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.3% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 7.1% 1 0.284s
+─prove_interp_compile_correct ---------- 0.0% 5.7% 1 0.228s
+─Glue.zrange_to_reflective_goal -------- 4.3% 5.5% 1 0.220s
+─unify (constr) (constr) --------------- 5.3% 5.3% 6 0.084s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.2% 5.2% 1 0.208s
+─rewrite H ----------------------------- 3.5% 3.5% 1 0.140s
+─tac ----------------------------------- 1.9% 2.6% 2 0.104s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.028s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.056s
+─transitivity -------------------------- 2.0% 2.0% 5 0.048s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.0% 1 0.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.9% 1 3.496s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.9% 1 3.456s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 56.9% 1 2.264s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 56.2% 1 2.236s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.1% 36.5% 2 1.452s
+ │ │ │└Reify.do_reifyf_goal ------------ 34.8% 35.1% 29 1.396s
+ │ │ │└eexact -------------------------- 10.1% 10.1% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.7% 1 0.228s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.2% 5.2% 1 0.208s
+ │ │ ├─rewrite H ----------------------- 3.5% 3.5% 1 0.140s
+ │ │ ├─tac ----------------------------- 1.9% 2.6% 1 0.104s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.056s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.048s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 30.0% 1 1.192s
+ │ ├─UnifyAbstractReflexivity.unify_tr 17.7% 21.7% 7 0.240s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 5 0.048s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.3% 1 0.292s
+ │ └unify (constr) (constr) --------- 2.1% 2.1% 1 0.084s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 11.1% 1 0.440s
+ ├─Glue.zrange_to_reflective --------- 0.0% 7.1% 1 0.284s
+ │└Glue.zrange_to_reflective_goal ---- 4.3% 5.5% 1 0.220s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.0% 1 0.080s
+
+Finished transaction in 7.078 secs (6.728u,0.s) (successful)
+Closed under the global context
+total time: 3.976s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.9% 1 3.496s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.9% 1 3.456s
+─ReflectiveTactics.do_reify ------------ 0.0% 56.9% 1 2.264s
+─Reify.Reify_rhs_gen ------------------- 1.8% 56.2% 1 2.236s
+─Reify.do_reify_abs_goal --------------- 36.1% 36.5% 2 1.452s
+─Reify.do_reifyf_goal ------------------ 34.8% 35.1% 29 1.396s
+─ReflectiveTactics.solve_post_reified_si 0.6% 30.0% 1 1.192s
+─UnifyAbstractReflexivity.unify_transfor 17.7% 21.7% 7 0.240s
+─Glue.refine_to_reflective_glue' ------- 0.0% 11.1% 1 0.440s
+─eexact -------------------------------- 10.9% 10.9% 31 0.024s
+─ReflectiveTactics.unify_abstract_cbv_in 5.2% 7.3% 1 0.292s
+─Glue.zrange_to_reflective ------------- 0.0% 7.1% 1 0.284s
+─prove_interp_compile_correct ---------- 0.0% 5.7% 1 0.228s
+─Glue.zrange_to_reflective_goal -------- 4.3% 5.5% 1 0.220s
+─unify (constr) (constr) --------------- 5.3% 5.3% 6 0.084s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.2% 5.2% 1 0.208s
+─rewrite H ----------------------------- 3.5% 3.5% 1 0.140s
+─tac ----------------------------------- 1.9% 2.6% 2 0.104s
+─reflexivity --------------------------- 2.2% 2.2% 7 0.028s
+─Reify.transitivity_tt ----------------- 0.0% 2.2% 2 0.056s
+─transitivity -------------------------- 2.0% 2.0% 5 0.048s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.0% 1 0.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.0% 1 3.936s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.9% 1 3.496s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.9% 1 3.456s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 56.9% 1 2.264s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 56.2% 1 2.236s
+ │ │ ├─Reify.do_reify_abs_goal --------- 36.1% 36.5% 2 1.452s
+ │ │ │└Reify.do_reifyf_goal ------------ 34.8% 35.1% 29 1.396s
+ │ │ │└eexact -------------------------- 10.1% 10.1% 29 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.7% 1 0.228s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.2% 5.2% 1 0.208s
+ │ │ ├─rewrite H ----------------------- 3.5% 3.5% 1 0.140s
+ │ │ ├─tac ----------------------------- 1.9% 2.6% 1 0.104s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.2% 2 0.056s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.048s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 30.0% 1 1.192s
+ │ ├─UnifyAbstractReflexivity.unify_tr 17.7% 21.7% 7 0.240s
+ │ │└unify (constr) (constr) --------- 3.2% 3.2% 5 0.048s
+ │ └─ReflectiveTactics.unify_abstract_ 5.2% 7.3% 1 0.292s
+ │ └unify (constr) (constr) --------- 2.1% 2.1% 1 0.084s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 11.1% 1 0.440s
+ ├─Glue.zrange_to_reflective --------- 0.0% 7.1% 1 0.284s
+ │└Glue.zrange_to_reflective_goal ---- 4.3% 5.5% 1 0.220s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.0% 1 0.080s
+
+src/Specific/X25519/C64/fecarry (real: 27.11, user: 24.99, sys: 0.21, mem: 786052 ko)
+COQC src/Specific/solinas32_2e255m765_12limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_12limbs/Synthesis (real: 40.13, user: 36.92, sys: 0.26, mem: 728464 ko)
+COQC src/Specific/solinas32_2e255m765_13limbs/Synthesis.v
+src/Specific/solinas32_2e255m765_13limbs/Synthesis (real: 49.44, user: 45.75, sys: 0.18, mem: 744240 ko)
+COQC src/Specific/X25519/C64/femul.v
+Finished transaction in 8.415 secs (7.664u,0.015s) (successful)
+total time: 7.616s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 85.0% 1 6.476s
+─ReflectiveTactics.solve_side_conditions 0.0% 84.2% 1 6.416s
+─ReflectiveTactics.do_reify ------------ 0.0% 50.3% 1 3.832s
+─Reify.Reify_rhs_gen ------------------- 1.8% 49.4% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.5% 33.9% 1 2.584s
+─Reify.do_reify_abs_goal --------------- 31.1% 31.4% 2 2.392s
+─Reify.do_reifyf_goal ------------------ 30.0% 30.3% 58 1.528s
+─UnifyAbstractReflexivity.unify_transfor 22.1% 27.3% 7 0.600s
+─Glue.refine_to_reflective_glue' ------- 0.0% 9.8% 1 0.744s
+─eexact -------------------------------- 8.2% 8.2% 60 0.024s
+─Glue.zrange_to_reflective ------------- 0.1% 6.8% 1 0.516s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.124s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 3.9% 5.7% 1 0.432s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.4% 5.4% 1 0.408s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+─Glue.zrange_to_reflective_goal -------- 3.0% 5.0% 1 0.384s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+─change G' ----------------------------- 3.9% 3.9% 1 0.300s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.232s
+─tac ----------------------------------- 1.5% 2.3% 2 0.176s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.092s
+─reflexivity --------------------------- 2.0% 2.0% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 85.0% 1 6.476s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 84.2% 1 6.416s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 50.3% 1 3.832s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 49.4% 1 3.760s
+ │ │ ├─Reify.do_reify_abs_goal --------- 31.1% 31.4% 2 2.392s
+ │ │ │└Reify.do_reifyf_goal ------------ 30.0% 30.3% 58 1.528s
+ │ │ │└eexact -------------------------- 7.6% 7.6% 58 0.020s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.8% 1 0.444s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.4% 5.4% 1 0.408s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.232s
+ │ │ ├─tac ----------------------------- 1.5% 2.3% 1 0.176s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.092s
+ │ └─ReflectiveTactics.solve_post_reifie 0.5% 33.9% 1 2.584s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.1% 27.3% 7 0.600s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 0.096s
+ │ └─ReflectiveTactics.unify_abstract_ 3.9% 5.7% 1 0.432s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 9.8% 1 0.744s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.8% 1 0.516s
+ └Glue.zrange_to_reflective_goal ------ 3.0% 5.0% 1 0.384s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+└IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+└change G' ----------------------------- 3.9% 3.9% 1 0.300s
+
+Finished transaction in 14.616 secs (13.528u,0.008s) (successful)
+Closed under the global context
+total time: 7.616s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 85.0% 1 6.476s
+─ReflectiveTactics.solve_side_conditions 0.0% 84.2% 1 6.416s
+─ReflectiveTactics.do_reify ------------ 0.0% 50.3% 1 3.832s
+─Reify.Reify_rhs_gen ------------------- 1.8% 49.4% 1 3.760s
+─ReflectiveTactics.solve_post_reified_si 0.5% 33.9% 1 2.584s
+─Reify.do_reify_abs_goal --------------- 31.1% 31.4% 2 2.392s
+─Reify.do_reifyf_goal ------------------ 30.0% 30.3% 58 1.528s
+─UnifyAbstractReflexivity.unify_transfor 22.1% 27.3% 7 0.600s
+─Glue.refine_to_reflective_glue' ------- 0.0% 9.8% 1 0.744s
+─eexact -------------------------------- 8.2% 8.2% 60 0.024s
+─Glue.zrange_to_reflective ------------- 0.1% 6.8% 1 0.516s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.124s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.444s
+─ReflectiveTactics.unify_abstract_cbv_in 3.9% 5.7% 1 0.432s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.4% 5.4% 1 0.408s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+─Glue.zrange_to_reflective_goal -------- 3.0% 5.0% 1 0.384s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+─change G' ----------------------------- 3.9% 3.9% 1 0.300s
+─rewrite H ----------------------------- 3.0% 3.0% 1 0.232s
+─tac ----------------------------------- 1.5% 2.3% 2 0.176s
+─Reify.transitivity_tt ----------------- 0.0% 2.1% 2 0.092s
+─reflexivity --------------------------- 2.0% 2.0% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.8% 1 7.220s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 85.0% 1 6.476s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 84.2% 1 6.416s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 50.3% 1 3.832s
+ │ │└Reify.Reify_rhs_gen --------------- 1.8% 49.4% 1 3.760s
+ │ │ ├─Reify.do_reify_abs_goal --------- 31.1% 31.4% 2 2.392s
+ │ │ │└Reify.do_reifyf_goal ------------ 30.0% 30.3% 58 1.528s
+ │ │ │└eexact -------------------------- 7.6% 7.6% 58 0.020s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.8% 1 0.444s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 5.4% 5.4% 1 0.408s
+ │ │ ├─rewrite H ----------------------- 3.0% 3.0% 1 0.232s
+ │ │ ├─tac ----------------------------- 1.5% 2.3% 1 0.176s
+ │ │ └─Reify.transitivity_tt ----------- 0.0% 2.1% 2 0.092s
+ │ └─ReflectiveTactics.solve_post_reifie 0.5% 33.9% 1 2.584s
+ │ ├─UnifyAbstractReflexivity.unify_tr 22.1% 27.3% 7 0.600s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 0.096s
+ │ └─ReflectiveTactics.unify_abstract_ 3.9% 5.7% 1 0.432s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 9.8% 1 0.744s
+ └Glue.zrange_to_reflective ----------- 0.1% 6.8% 1 0.516s
+ └Glue.zrange_to_reflective_goal ------ 3.0% 5.0% 1 0.384s
+─synthesize ---------------------------- 0.0% 5.2% 1 0.396s
+└IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.8% 1 0.364s
+└change G' ----------------------------- 3.9% 3.9% 1 0.300s
+
+src/Specific/X25519/C64/femul (real: 39.72, user: 36.32, sys: 0.26, mem: 825448 ko)
+COQC src/Specific/X25519/C64/feaddDisplay > src/Specific/X25519/C64/feaddDisplay.log
+COQC src/Specific/X25519/C64/fecarryDisplay > src/Specific/X25519/C64/fecarryDisplay.log
+COQC src/Specific/X25519/C64/fesub.v
+Finished transaction in 3.513 secs (3.211u,0.s) (successful)
+total time: 3.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 74.1% 1 2.344s
+─ReflectiveTactics.solve_side_conditions 0.0% 72.9% 1 2.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 38.6% 1 1.220s
+─Reify.Reify_rhs_gen ------------------- 1.5% 37.2% 1 1.176s
+─ReflectiveTactics.solve_post_reified_si 0.9% 34.4% 1 1.088s
+─UnifyAbstractReflexivity.unify_transfor 19.2% 23.9% 7 0.204s
+─Glue.refine_to_reflective_glue' ------- 0.0% 23.5% 1 0.744s
+─Reify.do_reify_abs_goal --------------- 19.2% 19.5% 2 0.616s
+─Reify.do_reifyf_goal ------------------ 18.0% 18.3% 16 0.580s
+─Glue.zrange_to_reflective ------------- 0.1% 15.4% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.8% 11.5% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 6.2% 9.0% 1 0.284s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.080s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 4.6% 1 0.144s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_proj1_sig_in_sig --------- 1.4% 4.3% 1 0.136s
+─prove_interp_compile_correct ---------- 0.0% 3.9% 1 0.124s
+─rewrite H ----------------------------- 3.8% 3.8% 1 0.120s
+─assert (H : is_bounded_by' bounds (map' 3.8% 3.8% 2 0.064s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.5% 3.5% 1 0.112s
+─pose proof (pf : Interpretation.Bo 2.9% 2.9% 1 0.092s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.8% 1 0.088s
+─tac ----------------------------------- 1.9% 2.5% 2 0.080s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.028s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+─destruct_sig -------------------------- 0.0% 2.4% 4 0.040s
+─destruct x ---------------------------- 2.4% 2.4% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.3% 2.3% 4 0.060s
+─Reify.transitivity_tt ----------------- 0.1% 2.3% 2 0.036s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 74.1% 1 2.344s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 72.9% 1 2.308s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 38.6% 1 1.220s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 37.2% 1 1.176s
+ │ │ ├─Reify.do_reify_abs_goal --------- 19.2% 19.5% 2 0.616s
+ │ │ │└Reify.do_reifyf_goal ------------ 18.0% 18.3% 16 0.580s
+ │ │ │└eexact -------------------------- 3.9% 3.9% 16 0.012s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.9% 1 0.124s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.5% 3.5% 1 0.112s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 0.120s
+ │ │ ├─tac ----------------------------- 1.9% 2.5% 1 0.080s
+ │ │ └─Reify.transitivity_tt ----------- 0.1% 2.3% 2 0.036s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.032s
+ │ └─ReflectiveTactics.solve_post_reifie 0.9% 34.4% 1 1.088s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.2% 23.9% 7 0.204s
+ │ │└unify (constr) (constr) --------- 3.4% 3.4% 5 0.036s
+ │ └─ReflectiveTactics.unify_abstract_ 6.2% 9.0% 1 0.284s
+ │ └unify (constr) (constr) --------- 2.5% 2.5% 1 0.080s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 23.5% 1 0.744s
+ ├─Glue.zrange_to_reflective --------- 0.1% 15.4% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.8% 11.5% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.9% 2.9% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.8% 3.8% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 4.6% 1 0.144s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.4% 4.3% 1 0.136s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.8% 1 0.088s
+ └destruct_sig ---------------------- 0.0% 2.4% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+
+Finished transaction in 6.12 secs (5.64u,0.008s) (successful)
+Closed under the global context
+total time: 3.164s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 74.1% 1 2.344s
+─ReflectiveTactics.solve_side_conditions 0.0% 72.9% 1 2.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 38.6% 1 1.220s
+─Reify.Reify_rhs_gen ------------------- 1.5% 37.2% 1 1.176s
+─ReflectiveTactics.solve_post_reified_si 0.9% 34.4% 1 1.088s
+─UnifyAbstractReflexivity.unify_transfor 19.2% 23.9% 7 0.204s
+─Glue.refine_to_reflective_glue' ------- 0.0% 23.5% 1 0.744s
+─Reify.do_reify_abs_goal --------------- 19.2% 19.5% 2 0.616s
+─Reify.do_reifyf_goal ------------------ 18.0% 18.3% 16 0.580s
+─Glue.zrange_to_reflective ------------- 0.1% 15.4% 1 0.488s
+─Glue.zrange_to_reflective_goal -------- 6.8% 11.5% 1 0.364s
+─ReflectiveTactics.unify_abstract_cbv_in 6.2% 9.0% 1 0.284s
+─unify (constr) (constr) --------------- 5.9% 5.9% 6 0.080s
+─Glue.pattern_sig_sig_assoc ------------ 0.0% 4.6% 1 0.144s
+─eexact -------------------------------- 4.4% 4.4% 18 0.012s
+─Glue.pattern_proj1_sig_in_sig --------- 1.4% 4.3% 1 0.136s
+─prove_interp_compile_correct ---------- 0.0% 3.9% 1 0.124s
+─rewrite H ----------------------------- 3.8% 3.8% 1 0.120s
+─assert (H : is_bounded_by' bounds (map' 3.8% 3.8% 2 0.064s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.5% 3.5% 1 0.112s
+─pose proof (pf : Interpretation.Bo 2.9% 2.9% 1 0.092s
+─Glue.split_BoundedWordToZ ------------- 0.1% 2.8% 1 0.088s
+─tac ----------------------------------- 1.9% 2.5% 2 0.080s
+─reflexivity --------------------------- 2.4% 2.4% 7 0.028s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+─destruct_sig -------------------------- 0.0% 2.4% 4 0.040s
+─destruct x ---------------------------- 2.4% 2.4% 4 0.032s
+─clearbody (ne_var_list) --------------- 2.3% 2.3% 4 0.060s
+─Reify.transitivity_tt ----------------- 0.1% 2.3% 2 0.036s
+─transitivity -------------------------- 2.1% 2.1% 5 0.032s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.6% 1 3.088s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 74.1% 1 2.344s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 72.9% 1 2.308s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 38.6% 1 1.220s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 37.2% 1 1.176s
+ │ │ ├─Reify.do_reify_abs_goal --------- 19.2% 19.5% 2 0.616s
+ │ │ │└Reify.do_reifyf_goal ------------ 18.0% 18.3% 16 0.580s
+ │ │ │└eexact -------------------------- 3.9% 3.9% 16 0.012s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.9% 1 0.124s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.5% 3.5% 1 0.112s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 0.120s
+ │ │ ├─tac ----------------------------- 1.9% 2.5% 1 0.080s
+ │ │ └─Reify.transitivity_tt ----------- 0.1% 2.3% 2 0.036s
+ │ │ └transitivity -------------------- 2.0% 2.0% 4 0.032s
+ │ └─ReflectiveTactics.solve_post_reifie 0.9% 34.4% 1 1.088s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.2% 23.9% 7 0.204s
+ │ │└unify (constr) (constr) --------- 3.4% 3.4% 5 0.036s
+ │ └─ReflectiveTactics.unify_abstract_ 6.2% 9.0% 1 0.284s
+ │ └unify (constr) (constr) --------- 2.5% 2.5% 1 0.080s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 23.5% 1 0.744s
+ ├─Glue.zrange_to_reflective --------- 0.1% 15.4% 1 0.488s
+ │ ├─Glue.zrange_to_reflective_goal -- 6.8% 11.5% 1 0.364s
+ │ │└pose proof (pf : Interpretat 2.9% 2.9% 1 0.092s
+ │ └─assert (H : is_bounded_by' bounds 3.8% 3.8% 2 0.064s
+ ├─Glue.pattern_sig_sig_assoc -------- 0.0% 4.6% 1 0.144s
+ │└Glue.pattern_proj1_sig_in_sig ----- 1.4% 4.3% 1 0.136s
+ └─Glue.split_BoundedWordToZ --------- 0.1% 2.8% 1 0.088s
+ └destruct_sig ---------------------- 0.0% 2.4% 4 0.040s
+─synthesize ---------------------------- 0.0% 2.4% 1 0.076s
+
+src/Specific/X25519/C64/fesub (real: 24.71, user: 22.65, sys: 0.24, mem: 778792 ko)
+COQC src/Specific/X25519/C64/fesquare.v
+Finished transaction in 6.132 secs (5.516u,0.012s) (successful)
+total time: 5.480s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 5.244s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.6% 1 4.856s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.7% 1 4.804s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.3% 1 2.920s
+─Reify.Reify_rhs_gen ------------------- 2.0% 52.5% 1 2.876s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.4% 1 1.884s
+─Reify.do_reify_abs_goal --------------- 33.2% 33.6% 2 1.844s
+─Reify.do_reifyf_goal ------------------ 31.5% 32.0% 47 1.392s
+─UnifyAbstractReflexivity.unify_transfor 21.9% 26.6% 7 0.400s
+─eexact -------------------------------- 10.0% 10.0% 49 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.1% 1 0.388s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.380s
+─unify (constr) (constr) --------------- 5.8% 5.8% 6 0.104s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.1% 5.1% 1 0.280s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.0% 1 0.220s
+─Glue.zrange_to_reflective_goal -------- 3.1% 3.9% 1 0.212s
+─change G' ----------------------------- 3.4% 3.4% 1 0.184s
+─tac ----------------------------------- 2.0% 2.8% 2 0.156s
+─rewrite H ----------------------------- 2.8% 2.8% 1 0.156s
+─reflexivity --------------------------- 2.8% 2.8% 7 0.064s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.7% 1 5.244s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 88.6% 1 4.856s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 87.7% 1 4.804s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 53.3% 1 2.920s
+ │ │ │└Reify.Reify_rhs_gen ------------- 2.0% 52.5% 1 2.876s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 33.2% 33.6% 2 1.844s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 31.5% 32.0% 47 1.392s
+ │ │ │ │└eexact ------------------------ 9.1% 9.1% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.8% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 5.3% 5.3% 1 0.288s
+ │ │ │ ├─tac --------------------------- 2.0% 2.8% 1 0.156s
+ │ │ │ └─rewrite H --------------------- 2.8% 2.8% 1 0.156s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.6% 34.4% 1 1.884s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 21.9% 26.6% 7 0.400s
+ │ │ │└unify (constr) (constr) ------- 3.9% 3.9% 5 0.072s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.380s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 7.1% 1 0.388s
+ │ └Glue.zrange_to_reflective --------- 0.1% 5.1% 1 0.280s
+ │ └Glue.zrange_to_reflective_goal ---- 3.1% 3.9% 1 0.212s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 4.0% 1 0.220s
+ └change G' --------------------------- 3.4% 3.4% 1 0.184s
+
+Finished transaction in 10.475 secs (9.728u,0.007s) (successful)
+Closed under the global context
+total time: 5.480s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+─Pipeline.refine_reflectively_gen ------ 0.0% 95.7% 1 5.244s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 88.6% 1 4.856s
+─ReflectiveTactics.solve_side_conditions 0.0% 87.7% 1 4.804s
+─ReflectiveTactics.do_reify ------------ 0.0% 53.3% 1 2.920s
+─Reify.Reify_rhs_gen ------------------- 2.0% 52.5% 1 2.876s
+─ReflectiveTactics.solve_post_reified_si 0.6% 34.4% 1 1.884s
+─Reify.do_reify_abs_goal --------------- 33.2% 33.6% 2 1.844s
+─Reify.do_reifyf_goal ------------------ 31.5% 32.0% 47 1.392s
+─UnifyAbstractReflexivity.unify_transfor 21.9% 26.6% 7 0.400s
+─eexact -------------------------------- 10.0% 10.0% 49 0.028s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.1% 1 0.388s
+─ReflectiveTactics.unify_abstract_cbv_in 5.0% 6.9% 1 0.380s
+─unify (constr) (constr) --------------- 5.8% 5.8% 6 0.104s
+─prove_interp_compile_correct ---------- 0.0% 5.8% 1 0.316s
+─rewrite ?EtaInterp.InterpExprEta ------ 5.3% 5.3% 1 0.288s
+─Glue.zrange_to_reflective ------------- 0.1% 5.1% 1 0.280s
+─IntegrationTestTemporaryMiscCommon.do_r 0.1% 4.0% 1 0.220s
+─Glue.zrange_to_reflective_goal -------- 3.1% 3.9% 1 0.212s
+─change G' ----------------------------- 3.4% 3.4% 1 0.184s
+─tac ----------------------------------- 2.0% 2.8% 2 0.156s
+─rewrite H ----------------------------- 2.8% 2.8% 1 0.156s
+─reflexivity --------------------------- 2.8% 2.8% 7 0.064s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize ---------------------------- -0.0% 100.0% 1 5.480s
+ ├─Pipeline.refine_reflectively_gen ---- 0.0% 95.7% 1 5.244s
+ │ ├─ReflectiveTactics.do_reflective_pip 0.0% 88.6% 1 4.856s
+ │ │└ReflectiveTactics.solve_side_condit 0.0% 87.7% 1 4.804s
+ │ │ ├─ReflectiveTactics.do_reify ------ 0.0% 53.3% 1 2.920s
+ │ │ │└Reify.Reify_rhs_gen ------------- 2.0% 52.5% 1 2.876s
+ │ │ │ ├─Reify.do_reify_abs_goal ------- 33.2% 33.6% 2 1.844s
+ │ │ │ │└Reify.do_reifyf_goal ---------- 31.5% 32.0% 47 1.392s
+ │ │ │ │└eexact ------------------------ 9.1% 9.1% 47 0.024s
+ │ │ │ ├─prove_interp_compile_correct -- 0.0% 5.8% 1 0.316s
+ │ │ │ │└rewrite ?EtaInterp.InterpExprEt 5.3% 5.3% 1 0.288s
+ │ │ │ ├─tac --------------------------- 2.0% 2.8% 1 0.156s
+ │ │ │ └─rewrite H --------------------- 2.8% 2.8% 1 0.156s
+ │ │ └─ReflectiveTactics.solve_post_reif 0.6% 34.4% 1 1.884s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 21.9% 26.6% 7 0.400s
+ │ │ │└unify (constr) (constr) ------- 3.9% 3.9% 5 0.072s
+ │ │ └─ReflectiveTactics.unify_abstrac 5.0% 6.9% 1 0.380s
+ │ └─Glue.refine_to_reflective_glue' --- 0.0% 7.1% 1 0.388s
+ │ └Glue.zrange_to_reflective --------- 0.1% 5.1% 1 0.280s
+ │ └Glue.zrange_to_reflective_goal ---- 3.1% 3.9% 1 0.212s
+ └─IntegrationTestTemporaryMiscCommon.do 0.1% 4.0% 1 0.220s
+ └change G' --------------------------- 3.4% 3.4% 1 0.184s
+
+src/Specific/X25519/C64/fesquare (real: 33.08, user: 30.13, sys: 0.24, mem: 799620 ko)
+COQC src/Specific/X25519/C64/femulDisplay > src/Specific/X25519/C64/femulDisplay.log
+COQC src/Specific/X25519/C64/freeze.v
+Finished transaction in 7.307 secs (6.763u,0.011s) (successful)
+total time: 6.732s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.248s
+─ReflectiveTactics.solve_side_conditions 0.0% 92.0% 1 6.192s
+─ReflectiveTactics.do_reify ------------ -0.0% 60.3% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 59.6% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 42.4% 42.7% 2 2.876s
+─Reify.do_reifyf_goal ------------------ 41.3% 41.7% 129 2.804s
+─ReflectiveTactics.solve_post_reified_si 0.6% 31.7% 1 2.132s
+─UnifyAbstractReflexivity.unify_transfor 21.7% 25.8% 7 0.424s
+─eexact -------------------------------- 13.7% 13.7% 131 0.036s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.5% 1 0.436s
+─prove_interp_compile_correct ---------- 0.0% 5.1% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 3.4% 5.0% 1 0.336s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.7% 4.7% 1 0.316s
+─unify (constr) (constr) --------------- 4.6% 4.6% 6 0.100s
+─Glue.zrange_to_reflective ------------- 0.0% 4.2% 1 0.280s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 0.220s
+─Reify.transitivity_tt ----------------- 0.1% 2.6% 2 0.116s
+─rewrite H ----------------------------- 2.6% 2.6% 1 0.172s
+─tac ----------------------------------- 1.5% 2.3% 2 0.156s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.248s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 92.0% 1 6.192s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 60.3% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 59.6% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 42.4% 42.7% 2 2.876s
+ │ │ │└Reify.do_reifyf_goal ------------ 41.3% 41.7% 129 2.804s
+ │ │ │└eexact -------------------------- 13.0% 13.0% 129 0.036s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.1% 1 0.344s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.7% 4.7% 1 0.316s
+ │ │ ├─Reify.transitivity_tt ----------- 0.1% 2.6% 2 0.116s
+ │ │ ├─rewrite H ----------------------- 2.6% 2.6% 1 0.172s
+ │ │ └─tac ----------------------------- 1.5% 2.3% 1 0.156s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 31.7% 1 2.132s
+ │ ├─UnifyAbstractReflexivity.unify_tr 21.7% 25.8% 7 0.424s
+ │ │└unify (constr) (constr) --------- 3.1% 3.1% 5 0.084s
+ │ └─ReflectiveTactics.unify_abstract_ 3.4% 5.0% 1 0.336s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.5% 1 0.436s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.2% 1 0.280s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 0.220s
+
+Finished transaction in 10.495 secs (9.756u,0.s) (successful)
+Closed under the global context
+total time: 6.732s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+─Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 92.8% 1 6.248s
+─ReflectiveTactics.solve_side_conditions 0.0% 92.0% 1 6.192s
+─ReflectiveTactics.do_reify ------------ -0.0% 60.3% 1 4.060s
+─Reify.Reify_rhs_gen ------------------- 1.5% 59.6% 1 4.012s
+─Reify.do_reify_abs_goal --------------- 42.4% 42.7% 2 2.876s
+─Reify.do_reifyf_goal ------------------ 41.3% 41.7% 129 2.804s
+─ReflectiveTactics.solve_post_reified_si 0.6% 31.7% 1 2.132s
+─UnifyAbstractReflexivity.unify_transfor 21.7% 25.8% 7 0.424s
+─eexact -------------------------------- 13.7% 13.7% 131 0.036s
+─Glue.refine_to_reflective_glue' ------- 0.0% 6.5% 1 0.436s
+─prove_interp_compile_correct ---------- 0.0% 5.1% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 3.4% 5.0% 1 0.336s
+─rewrite ?EtaInterp.InterpExprEta ------ 4.7% 4.7% 1 0.316s
+─unify (constr) (constr) --------------- 4.6% 4.6% 6 0.100s
+─Glue.zrange_to_reflective ------------- 0.0% 4.2% 1 0.280s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 0.220s
+─Reify.transitivity_tt ----------------- 0.1% 2.6% 2 0.116s
+─rewrite H ----------------------------- 2.6% 2.6% 1 0.172s
+─tac ----------------------------------- 1.5% 2.3% 2 0.156s
+─reflexivity --------------------------- 2.3% 2.3% 7 0.052s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_freeze --------------------- 0.0% 100.0% 1 6.732s
+└Pipeline.refine_reflectively_gen ------ 0.0% 99.3% 1 6.684s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 92.8% 1 6.248s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 92.0% 1 6.192s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 60.3% 1 4.060s
+ │ │└Reify.Reify_rhs_gen --------------- 1.5% 59.6% 1 4.012s
+ │ │ ├─Reify.do_reify_abs_goal --------- 42.4% 42.7% 2 2.876s
+ │ │ │└Reify.do_reifyf_goal ------------ 41.3% 41.7% 129 2.804s
+ │ │ │└eexact -------------------------- 13.0% 13.0% 129 0.036s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 5.1% 1 0.344s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 4.7% 4.7% 1 0.316s
+ │ │ ├─Reify.transitivity_tt ----------- 0.1% 2.6% 2 0.116s
+ │ │ ├─rewrite H ----------------------- 2.6% 2.6% 1 0.172s
+ │ │ └─tac ----------------------------- 1.5% 2.3% 1 0.156s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 31.7% 1 2.132s
+ │ ├─UnifyAbstractReflexivity.unify_tr 21.7% 25.8% 7 0.424s
+ │ │└unify (constr) (constr) --------- 3.1% 3.1% 5 0.084s
+ │ └─ReflectiveTactics.unify_abstract_ 3.4% 5.0% 1 0.336s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 6.5% 1 0.436s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.2% 1 0.280s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 0.220s
+
+src/Specific/X25519/C64/freeze (real: 34.35, user: 31.50, sys: 0.24, mem: 828104 ko)
+COQC src/Specific/NISTP256/AMD64/feadd.v
+Finished transaction in 8.784 secs (8.176u,0.011s) (successful)
+total time: 8.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 43.8% 1 3.568s
+─ReflectiveTactics.solve_side_conditions 0.0% 43.2% 1 3.520s
+─IntegrationTestTemporaryMiscCommon.fact 1.4% 23.6% 1 1.924s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 22.1% 1 1.796s
+─ReflectiveTactics.do_reify ------------ 0.1% 21.7% 1 1.768s
+─ReflectiveTactics.solve_post_reified_si 0.6% 21.5% 1 1.752s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.9% 1 1.704s
+─op_sig_side_conditions_t -------------- 0.0% 20.0% 1 1.624s
+─DestructHyps.do_all_matches_then ------ 0.0% 20.0% 8 0.244s
+─DestructHyps.do_one_match_then -------- 0.7% 19.9% 44 0.052s
+─do_tac -------------------------------- 0.0% 19.2% 36 0.052s
+─destruct H ---------------------------- 19.2% 19.2% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 17.3% 1 1.408s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.408s
+─by_tac -------------------------------- 0.0% 17.1% 4 0.504s
+─rewrite <- (ZRange.is_bounded_by_None_r 16.7% 16.7% 8 0.344s
+─UnifyAbstractReflexivity.unify_transfor 13.3% 16.1% 7 0.360s
+─Reify.do_reify_abs_goal --------------- 9.9% 10.1% 2 0.820s
+─Reify.do_reifyf_goal ------------------ 9.1% 9.3% 93 0.748s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.6% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.432s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 4.8% 1 0.388s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.9% 4.6% 3 0.368s
+─ReflectiveTactics.unify_abstract_cbv_in 3.3% 4.5% 1 0.368s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.0% 1 0.324s
+─k ------------------------------------- 3.5% 3.6% 1 0.296s
+─unify (constr) (constr) --------------- 3.3% 3.3% 8 0.092s
+─rewrite H ----------------------------- 2.6% 2.6% 2 0.196s
+─eexact -------------------------------- 2.6% 2.6% 95 0.024s
+─prove_interp_compile_correct ---------- 0.0% 2.5% 1 0.204s
+─apply (fun f => MapProjections.proj2 2.4% 2.4% 2 0.120s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 43.8% 1 3.568s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 43.2% 1 3.520s
+ │ ├─ReflectiveTactics.do_reify -------- 0.1% 21.7% 1 1.768s
+ │ │└Reify.Reify_rhs_gen --------------- 1.0% 20.9% 1 1.704s
+ │ │ ├─Reify.do_reify_abs_goal --------- 9.9% 10.1% 2 0.820s
+ │ │ │└Reify.do_reifyf_goal ------------ 9.1% 9.3% 93 0.748s
+ │ │ │└eexact -------------------------- 2.3% 2.3% 93 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 2.5% 1 0.204s
+ │ │ └─rewrite H ----------------------- 2.4% 2.4% 1 0.196s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 21.5% 1 1.752s
+ │ ├─UnifyAbstractReflexivity.unify_tr 13.3% 16.1% 7 0.360s
+ │ │└unify (constr) (constr) --------- 2.2% 2.2% 5 0.064s
+ │ └─ReflectiveTactics.unify_abstract_ 3.3% 4.5% 1 0.368s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.6% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.0% 1 0.324s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.4% 23.6% 1 1.924s
+ │└op_sig_side_conditions_t ------------ 0.0% 20.0% 1 1.624s
+ │ ├─DestructHyps.do_all_matches_then -- 0.0% 11.4% 4 0.244s
+ │ │└DestructHyps.do_one_match_then ---- 0.3% 11.4% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 11.1% 20 0.052s
+ │ │└destruct H ------------------------ 11.1% 11.1% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 8.4% 8.4% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 22.1% 1 1.796s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.408s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 17.3% 1 1.408s
+ │└by_tac ---------------------------- 0.0% 17.1% 4 0.504s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.6% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.3% 8.3% 4 0.344s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 4.8% 1 0.388s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.9% 4.6% 3 0.368s
+ └k --------------------------------- 3.5% 3.6% 1 0.296s
+
+Finished transaction in 13.363 secs (12.516u,0.008s) (successful)
+Closed under the global context
+total time: 8.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 43.8% 1 3.568s
+─ReflectiveTactics.solve_side_conditions 0.0% 43.2% 1 3.520s
+─IntegrationTestTemporaryMiscCommon.fact 1.4% 23.6% 1 1.924s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 22.1% 1 1.796s
+─ReflectiveTactics.do_reify ------------ 0.1% 21.7% 1 1.768s
+─ReflectiveTactics.solve_post_reified_si 0.6% 21.5% 1 1.752s
+─Reify.Reify_rhs_gen ------------------- 1.0% 20.9% 1 1.704s
+─op_sig_side_conditions_t -------------- 0.0% 20.0% 1 1.624s
+─DestructHyps.do_all_matches_then ------ 0.0% 20.0% 8 0.244s
+─DestructHyps.do_one_match_then -------- 0.7% 19.9% 44 0.052s
+─do_tac -------------------------------- 0.0% 19.2% 36 0.052s
+─destruct H ---------------------------- 19.2% 19.2% 36 0.052s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.2% 17.3% 1 1.408s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 17.3% 1 1.408s
+─by_tac -------------------------------- 0.0% 17.1% 4 0.504s
+─rewrite <- (ZRange.is_bounded_by_None_r 16.7% 16.7% 8 0.344s
+─UnifyAbstractReflexivity.unify_transfor 13.3% 16.1% 7 0.360s
+─Reify.do_reify_abs_goal --------------- 9.9% 10.1% 2 0.820s
+─Reify.do_reifyf_goal ------------------ 9.1% 9.3% 93 0.748s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.6% 1 0.700s
+─Glue.zrange_to_reflective ------------- 0.0% 5.3% 1 0.432s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 4.8% 1 0.388s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.9% 4.6% 3 0.368s
+─ReflectiveTactics.unify_abstract_cbv_in 3.3% 4.5% 1 0.368s
+─Glue.zrange_to_reflective_goal -------- 2.6% 4.0% 1 0.324s
+─k ------------------------------------- 3.5% 3.6% 1 0.296s
+─unify (constr) (constr) --------------- 3.3% 3.3% 8 0.092s
+─rewrite H ----------------------------- 2.6% 2.6% 2 0.196s
+─eexact -------------------------------- 2.6% 2.6% 95 0.024s
+─prove_interp_compile_correct ---------- 0.0% 2.5% 1 0.204s
+─apply (fun f => MapProjections.proj2 2.4% 2.4% 2 0.120s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 52.4% 1 4.268s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 43.8% 1 3.568s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 43.2% 1 3.520s
+ │ ├─ReflectiveTactics.do_reify -------- 0.1% 21.7% 1 1.768s
+ │ │└Reify.Reify_rhs_gen --------------- 1.0% 20.9% 1 1.704s
+ │ │ ├─Reify.do_reify_abs_goal --------- 9.9% 10.1% 2 0.820s
+ │ │ │└Reify.do_reifyf_goal ------------ 9.1% 9.3% 93 0.748s
+ │ │ │└eexact -------------------------- 2.3% 2.3% 93 0.024s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 2.5% 1 0.204s
+ │ │ └─rewrite H ----------------------- 2.4% 2.4% 1 0.196s
+ │ └─ReflectiveTactics.solve_post_reifie 0.6% 21.5% 1 1.752s
+ │ ├─UnifyAbstractReflexivity.unify_tr 13.3% 16.1% 7 0.360s
+ │ │└unify (constr) (constr) --------- 2.2% 2.2% 5 0.064s
+ │ └─ReflectiveTactics.unify_abstract_ 3.3% 4.5% 1 0.368s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.6% 1 0.700s
+ └Glue.zrange_to_reflective ----------- 0.0% 5.3% 1 0.432s
+ └Glue.zrange_to_reflective_goal ------ 2.6% 4.0% 1 0.324s
+─synthesize_montgomery ----------------- 0.0% 47.6% 1 3.872s
+ ├─IntegrationTestTemporaryMiscCommon.fa 1.4% 23.6% 1 1.924s
+ │└op_sig_side_conditions_t ------------ 0.0% 20.0% 1 1.624s
+ │ ├─DestructHyps.do_all_matches_then -- 0.0% 11.4% 4 0.244s
+ │ │└DestructHyps.do_one_match_then ---- 0.3% 11.4% 24 0.052s
+ │ │└do_tac ---------------------------- 0.0% 11.1% 20 0.052s
+ │ │└destruct H ------------------------ 11.1% 11.1% 20 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_No 8.4% 8.4% 4 0.328s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 22.1% 1 1.796s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 17.3% 1 1.408s
+ │└rewrite <- (lem : lemT) by by_tac l 0.2% 17.3% 1 1.408s
+ │└by_tac ---------------------------- 0.0% 17.1% 4 0.504s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 8.6% 4 0.184s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 8.5% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 8.2% 16 0.052s
+ │ │└destruct H ---------------------- 8.2% 8.2% 16 0.052s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 8.3% 8.3% 4 0.344s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 4.8% 1 0.388s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.9% 4.6% 3 0.368s
+ └k --------------------------------- 3.5% 3.6% 1 0.296s
+
+src/Specific/NISTP256/AMD64/feadd (real: 38.19, user: 35.40, sys: 0.30, mem: 799216 ko)
+COQC src/Specific/NISTP256/AMD64/fenz.v
+Finished transaction in 6.356 secs (5.82u,0.004s) (successful)
+total time: 5.800s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+─IntegrationTestTemporaryMiscCommon.nonz 0.2% 85.5% 1 4.960s
+─destruct (Decidable.dec x), (Decidable. 37.4% 37.4% 1 2.168s
+─destruct (Decidable.dec x) as [H| H] -- 22.0% 22.0% 1 1.276s
+─Pipeline.refine_reflectively_gen ------ 0.0% 14.5% 1 0.840s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 10.9% 1 0.632s
+─ReflectiveTactics.solve_side_conditions 0.0% 10.6% 1 0.612s
+─ReflectiveTactics.solve_post_reified_si 0.3% 8.5% 1 0.492s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 8.1% 2 0.368s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.288s
+─UnifyAbstractReflexivity.unify_transfor 3.4% 4.3% 7 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 2.8% 3.8% 1 0.220s
+─Glue.refine_to_reflective_glue' ------- 0.1% 3.6% 1 0.208s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.200s
+─generalize dependent (constr) --------- 3.0% 3.0% 4 0.060s
+─congruence ---------------------------- 2.8% 2.8% 1 0.160s
+─do_tac -------------------------------- 0.0% 2.6% 4 0.044s
+─destruct H ---------------------------- 2.6% 2.6% 4 0.044s
+─IntegrationTestTemporaryMiscCommon.do_s 0.1% 2.6% 1 0.152s
+─DestructHyps.do_one_match_then -------- 0.0% 2.6% 6 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.6% 2 0.076s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.5% 3 0.140s
+─Glue.zrange_to_reflective ------------- 0.0% 2.2% 1 0.128s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.112s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.1% 1 0.120s
+─k ------------------------------------- 1.9% 2.0% 1 0.116s
+─Reify.Reify_rhs_gen ------------------- 0.1% 2.0% 1 0.116s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.2% 85.5% 1 4.960s
+ │ ├─destruct (Decidable.dec x), (Decida 37.4% 37.4% 1 2.168s
+ │ ├─destruct (Decidable.dec x) as [H| H 22.0% 22.0% 1 1.276s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 8.1% 2 0.368s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.288s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.6% 2 0.076s
+ │ │ └DestructHyps.do_one_match_then -- 0.0% 2.6% 6 0.044s
+ │ │ └do_tac -------------------------- 0.0% 2.6% 4 0.044s
+ │ │ └destruct H ---------------------- 2.6% 2.6% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.200s
+ │ ├─generalize dependent (constr) ----- 3.0% 3.0% 4 0.060s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.160s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 2.6% 1 0.152s
+ │ │└<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.5% 3 0.140s
+ │ │└k --------------------------------- 1.9% 2.0% 1 0.116s
+ │ └─rewrite H ------------------------- 1.7% 2.0% 2 0.112s
+ └─Pipeline.refine_reflectively_gen ---- 0.0% 14.5% 1 0.840s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 10.9% 1 0.632s
+ │└ReflectiveTactics.solve_side_condit 0.0% 10.6% 1 0.612s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 8.5% 1 0.492s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 3.4% 4.3% 7 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 2.8% 3.8% 1 0.220s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.1% 1 0.120s
+ │ └Reify.Reify_rhs_gen ------------- 0.1% 2.0% 1 0.116s
+ └─Glue.refine_to_reflective_glue' --- 0.1% 3.6% 1 0.208s
+ └Glue.zrange_to_reflective --------- 0.0% 2.2% 1 0.128s
+
+Finished transaction in 6.657 secs (6.299u,0.s) (successful)
+Closed under the global context
+total time: 5.800s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+─IntegrationTestTemporaryMiscCommon.nonz 0.2% 85.5% 1 4.960s
+─destruct (Decidable.dec x), (Decidable. 37.4% 37.4% 1 2.168s
+─destruct (Decidable.dec x) as [H| H] -- 22.0% 22.0% 1 1.276s
+─Pipeline.refine_reflectively_gen ------ 0.0% 14.5% 1 0.840s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 10.9% 1 0.632s
+─ReflectiveTactics.solve_side_conditions 0.0% 10.6% 1 0.612s
+─ReflectiveTactics.solve_post_reified_si 0.3% 8.5% 1 0.492s
+─IntegrationTestTemporaryMiscCommon.op_s 0.1% 8.1% 2 0.368s
+─rewrite <- (ZRange.is_bounded_by_None_r 5.2% 5.2% 2 0.288s
+─UnifyAbstractReflexivity.unify_transfor 3.4% 4.3% 7 0.076s
+─ReflectiveTactics.unify_abstract_cbv_in 2.8% 3.8% 1 0.220s
+─Glue.refine_to_reflective_glue' ------- 0.1% 3.6% 1 0.208s
+─rewrite H' ---------------------------- 3.4% 3.4% 1 0.200s
+─generalize dependent (constr) --------- 3.0% 3.0% 4 0.060s
+─congruence ---------------------------- 2.8% 2.8% 1 0.160s
+─do_tac -------------------------------- 0.0% 2.6% 4 0.044s
+─destruct H ---------------------------- 2.6% 2.6% 4 0.044s
+─IntegrationTestTemporaryMiscCommon.do_s 0.1% 2.6% 1 0.152s
+─DestructHyps.do_one_match_then -------- 0.0% 2.6% 6 0.044s
+─DestructHyps.do_all_matches_then ------ 0.0% 2.6% 2 0.076s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.5% 3 0.140s
+─Glue.zrange_to_reflective ------------- 0.0% 2.2% 1 0.128s
+─rewrite H ----------------------------- 1.9% 2.1% 3 0.112s
+─ReflectiveTactics.do_reify ------------ 0.0% 2.1% 1 0.120s
+─k ------------------------------------- 1.9% 2.0% 1 0.116s
+─Reify.Reify_rhs_gen ------------------- 0.1% 2.0% 1 0.116s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_nonzero -------------------- 0.0% 100.0% 1 5.800s
+ ├─IntegrationTestTemporaryMiscCommon.no 0.2% 85.5% 1 4.960s
+ │ ├─destruct (Decidable.dec x), (Decida 37.4% 37.4% 1 2.168s
+ │ ├─destruct (Decidable.dec x) as [H| H 22.0% 22.0% 1 1.276s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 8.1% 2 0.368s
+ │ │ ├─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 2 0.288s
+ │ │ └─DestructHyps.do_all_matches_then 0.0% 2.6% 2 0.076s
+ │ │ └DestructHyps.do_one_match_then -- 0.0% 2.6% 6 0.044s
+ │ │ └do_tac -------------------------- 0.0% 2.6% 4 0.044s
+ │ │ └destruct H ---------------------- 2.6% 2.6% 4 0.044s
+ │ ├─rewrite H' ------------------------ 3.4% 3.4% 1 0.200s
+ │ ├─generalize dependent (constr) ----- 3.0% 3.0% 4 0.060s
+ │ ├─congruence ------------------------ 2.8% 2.8% 1 0.160s
+ │ ├─IntegrationTestTemporaryMiscCommon. 0.1% 2.6% 1 0.152s
+ │ │└<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.5% 3 0.140s
+ │ │└k --------------------------------- 1.9% 2.0% 1 0.116s
+ │ └─rewrite H ------------------------- 1.7% 2.0% 2 0.112s
+ └─Pipeline.refine_reflectively_gen ---- 0.0% 14.5% 1 0.840s
+ ├─ReflectiveTactics.do_reflective_pip 0.0% 10.9% 1 0.632s
+ │└ReflectiveTactics.solve_side_condit 0.0% 10.6% 1 0.612s
+ │ ├─ReflectiveTactics.solve_post_reif 0.3% 8.5% 1 0.492s
+ │ │ ├─UnifyAbstractReflexivity.unify_ 3.4% 4.3% 7 0.076s
+ │ │ └─ReflectiveTactics.unify_abstrac 2.8% 3.8% 1 0.220s
+ │ └─ReflectiveTactics.do_reify ------ 0.0% 2.1% 1 0.120s
+ │ └Reify.Reify_rhs_gen ------------- 0.1% 2.0% 1 0.116s
+ └─Glue.refine_to_reflective_glue' --- 0.1% 3.6% 1 0.208s
+ └Glue.zrange_to_reflective --------- 0.0% 2.2% 1 0.128s
+
+src/Specific/NISTP256/AMD64/fenz (real: 27.81, user: 25.50, sys: 0.22, mem: 756080 ko)
+COQC src/Specific/NISTP256/AMD64/feopp.v
+Finished transaction in 7.73 secs (7.112u,0.008s) (successful)
+total time: 7.072s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+─IntegrationTestTemporaryMiscCommon.fact 18.7% 51.6% 1 3.648s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 32.6% 1 2.308s
+─ReflectiveTactics.solve_side_conditions 0.0% 32.2% 1 2.276s
+─reflexivity --------------------------- 24.8% 24.8% 8 1.700s
+─ReflectiveTactics.solve_post_reified_si 0.5% 18.5% 1 1.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 0.968s
+─UnifyAbstractReflexivity.unify_transfor 11.2% 13.6% 7 0.284s
+─Reify.Reify_rhs_gen ------------------- 0.6% 13.4% 1 0.948s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.7% 1 0.684s
+─rewrite <- (ZRange.is_bounded_by_None_r 9.0% 9.0% 4 0.328s
+─op_sig_side_conditions_t -------------- 0.0% 7.8% 1 0.552s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.4% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.4% 1 0.520s
+─by_tac -------------------------------- 0.0% 7.2% 2 0.404s
+─Reify.do_reify_abs_goal --------------- 7.1% 7.2% 2 0.512s
+─Reify.do_reifyf_goal ------------------ 6.6% 6.7% 62 0.472s
+─DestructHyps.do_one_match_then -------- 0.2% 5.8% 14 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.8% 4 0.124s
+─do_tac -------------------------------- 0.0% 5.6% 10 0.048s
+─destruct H ---------------------------- 5.6% 5.6% 10 0.048s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.9% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.2% 1 0.300s
+─Glue.zrange_to_reflective ------------- 0.0% 3.3% 1 0.232s
+─unify (constr) (constr) --------------- 3.2% 3.2% 7 0.088s
+─Glue.zrange_to_reflective_goal -------- 1.9% 2.6% 1 0.184s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.3% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+ ├─IntegrationTestTemporaryMiscCommon.fa 18.7% 51.6% 1 3.648s
+ │ ├─reflexivity ----------------------- 24.0% 24.0% 1 1.700s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.8% 1 0.552s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.2% 4.2% 2 0.284s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.5% 2 0.124s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.5% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.3% 6 0.040s
+ │ └destruct H ---------------------- 3.3% 3.3% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.7% 1 0.684s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.4% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.4% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.2% 2 0.404s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.328s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.3% 2 0.088s
+ │ └DestructHyps.do_one_match_then -- 0.0% 2.3% 6 0.048s
+ │ └do_tac -------------------------- 0.0% 2.3% 4 0.048s
+ │ └destruct H ---------------------- 2.3% 2.3% 4 0.048s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.3% 1 0.164s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 32.6% 1 2.308s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 32.2% 1 2.276s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 18.5% 1 1.308s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.2% 13.6% 7 0.284s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.2% 1 0.300s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 0.968s
+ │ └Reify.Reify_rhs_gen --------------- 0.6% 13.4% 1 0.948s
+ │ └Reify.do_reify_abs_goal ----------- 7.1% 7.2% 2 0.512s
+ │ └Reify.do_reifyf_goal -------------- 6.6% 6.7% 62 0.472s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.9% 1 0.344s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.3% 1 0.232s
+ └Glue.zrange_to_reflective_goal ------ 1.9% 2.6% 1 0.184s
+
+Finished transaction in 7.732 secs (7.1u,0.003s) (successful)
+Closed under the global context
+total time: 7.072s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+─IntegrationTestTemporaryMiscCommon.fact 18.7% 51.6% 1 3.648s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 32.6% 1 2.308s
+─ReflectiveTactics.solve_side_conditions 0.0% 32.2% 1 2.276s
+─reflexivity --------------------------- 24.8% 24.8% 8 1.700s
+─ReflectiveTactics.solve_post_reified_si 0.5% 18.5% 1 1.308s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 0.968s
+─UnifyAbstractReflexivity.unify_transfor 11.2% 13.6% 7 0.284s
+─Reify.Reify_rhs_gen ------------------- 0.6% 13.4% 1 0.948s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 9.7% 1 0.684s
+─rewrite <- (ZRange.is_bounded_by_None_r 9.0% 9.0% 4 0.328s
+─op_sig_side_conditions_t -------------- 0.0% 7.8% 1 0.552s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 7.4% 1 0.520s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 7.4% 1 0.520s
+─by_tac -------------------------------- 0.0% 7.2% 2 0.404s
+─Reify.do_reify_abs_goal --------------- 7.1% 7.2% 2 0.512s
+─Reify.do_reifyf_goal ------------------ 6.6% 6.7% 62 0.472s
+─DestructHyps.do_one_match_then -------- 0.2% 5.8% 14 0.048s
+─DestructHyps.do_all_matches_then ------ 0.0% 5.8% 4 0.124s
+─do_tac -------------------------------- 0.0% 5.6% 10 0.048s
+─destruct H ---------------------------- 5.6% 5.6% 10 0.048s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.9% 1 0.344s
+─ReflectiveTactics.unify_abstract_cbv_in 2.9% 4.2% 1 0.300s
+─Glue.zrange_to_reflective ------------- 0.0% 3.3% 1 0.232s
+─unify (constr) (constr) --------------- 3.2% 3.2% 7 0.088s
+─Glue.zrange_to_reflective_goal -------- 1.9% 2.6% 1 0.184s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.3% 1 0.164s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.4% 2.2% 3 0.152s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 62.5% 1 4.420s
+ ├─IntegrationTestTemporaryMiscCommon.fa 18.7% 51.6% 1 3.648s
+ │ ├─reflexivity ----------------------- 24.0% 24.0% 1 1.700s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 7.8% 1 0.552s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.2% 4.2% 2 0.284s
+ │ └─DestructHyps.do_all_matches_then 0.0% 3.5% 2 0.124s
+ │ └DestructHyps.do_one_match_then -- 0.2% 3.5% 8 0.044s
+ │ └do_tac -------------------------- 0.0% 3.3% 6 0.040s
+ │ └destruct H ---------------------- 3.3% 3.3% 6 0.040s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 9.7% 1 0.684s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 7.4% 1 0.520s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 7.4% 1 0.520s
+ │└by_tac ---------------------------- 0.0% 7.2% 2 0.404s
+ │ ├─rewrite <- (ZRange.is_bounded_by_ 4.8% 4.8% 2 0.328s
+ │ └─DestructHyps.do_all_matches_then 0.0% 2.3% 2 0.088s
+ │ └DestructHyps.do_one_match_then -- 0.0% 2.3% 6 0.048s
+ │ └do_tac -------------------------- 0.0% 2.3% 4 0.048s
+ │ └destruct H ---------------------- 2.3% 2.3% 4 0.048s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.3% 1 0.164s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.4% 2.2% 3 0.152s
+─Pipeline.refine_reflectively_gen ------ 0.0% 37.5% 1 2.652s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 32.6% 1 2.308s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 32.2% 1 2.276s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.5% 18.5% 1 1.308s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 11.2% 13.6% 7 0.284s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.9% 4.2% 1 0.300s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 0.968s
+ │ └Reify.Reify_rhs_gen --------------- 0.6% 13.4% 1 0.948s
+ │ └Reify.do_reify_abs_goal ----------- 7.1% 7.2% 2 0.512s
+ │ └Reify.do_reifyf_goal -------------- 6.6% 6.7% 62 0.472s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.9% 1 0.344s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.3% 1 0.232s
+ └Glue.zrange_to_reflective_goal ------ 1.9% 2.6% 1 0.184s
+
+src/Specific/NISTP256/AMD64/feopp (real: 31.00, user: 28.51, sys: 0.20, mem: 765208 ko)
+COQC src/Specific/NISTP256/AMD64/fesub.v
+Finished transaction in 12.996 secs (12.091u,0.004s) (successful)
+total time: 12.048s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+─IntegrationTestTemporaryMiscCommon.fact 16.2% 50.9% 1 6.128s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 28.3% 1 3.404s
+─ReflectiveTactics.solve_side_conditions 0.0% 27.8% 1 3.352s
+─reflexivity --------------------------- 21.7% 21.7% 8 2.480s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 14.1% 1 1.704s
+─ReflectiveTactics.solve_post_reified_si 0.4% 14.1% 1 1.696s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 1.656s
+─Reify.Reify_rhs_gen ------------------- 0.9% 13.2% 1 1.592s
+─DestructHyps.do_all_matches_then ------ 0.0% 12.9% 8 0.232s
+─DestructHyps.do_one_match_then -------- 0.6% 12.9% 44 0.052s
+─op_sig_side_conditions_t -------------- 0.0% 12.7% 1 1.528s
+─do_tac -------------------------------- 0.0% 12.3% 36 0.048s
+─destruct H ---------------------------- 12.3% 12.3% 36 0.048s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 11.2% 1 1.352s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.2% 1 1.352s
+─by_tac -------------------------------- 0.0% 11.1% 4 0.476s
+─UnifyAbstractReflexivity.unify_transfor 8.8% 10.6% 7 0.344s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.5% 10.5% 8 0.316s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.732s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.6% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.4% 5.5% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.428s
+─ReflectiveTactics.unify_abstract_cbv_in 2.2% 3.0% 1 0.360s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.9% 1 0.348s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.8% 3 0.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.6% 1 0.316s
+─k ------------------------------------- 2.1% 2.2% 1 0.268s
+─unify (constr) (constr) --------------- 2.1% 2.1% 8 0.092s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+ ├─IntegrationTestTemporaryMiscCommon.fa 16.2% 50.9% 1 6.128s
+ │ ├─reflexivity ----------------------- 20.6% 20.6% 1 2.480s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.7% 1 1.528s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 7.3% 4 0.232s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.3% 24 0.052s
+ │ │└do_tac -------------------------- 0.0% 7.0% 20 0.048s
+ │ │└destruct H ---------------------- 6.9% 6.9% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 4 0.300s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 14.1% 1 1.704s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.2% 1 1.352s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 11.2% 1 1.352s
+ │└by_tac ---------------------------- 0.0% 11.1% 4 0.476s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.6% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.6% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.3% 5.3% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.316s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.9% 1 0.348s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.8% 3 0.332s
+ └k --------------------------------- 2.1% 2.2% 1 0.268s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 28.3% 1 3.404s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 27.8% 1 3.352s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 14.1% 1 1.696s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 8.8% 10.6% 7 0.344s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.2% 3.0% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 1.656s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 13.2% 1 1.592s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.732s
+ │ └Reify.do_reifyf_goal -------------- 5.4% 5.5% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.6% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.428s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.6% 1 0.316s
+
+Finished transaction in 13.895 secs (12.78u,0.02s) (successful)
+Closed under the global context
+total time: 12.048s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+─IntegrationTestTemporaryMiscCommon.fact 16.2% 50.9% 1 6.128s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 28.3% 1 3.404s
+─ReflectiveTactics.solve_side_conditions 0.0% 27.8% 1 3.352s
+─reflexivity --------------------------- 21.7% 21.7% 8 2.480s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 14.1% 1 1.704s
+─ReflectiveTactics.solve_post_reified_si 0.4% 14.1% 1 1.696s
+─ReflectiveTactics.do_reify ------------ 0.0% 13.7% 1 1.656s
+─Reify.Reify_rhs_gen ------------------- 0.9% 13.2% 1 1.592s
+─DestructHyps.do_all_matches_then ------ 0.0% 12.9% 8 0.232s
+─DestructHyps.do_one_match_then -------- 0.6% 12.9% 44 0.052s
+─op_sig_side_conditions_t -------------- 0.0% 12.7% 1 1.528s
+─do_tac -------------------------------- 0.0% 12.3% 36 0.048s
+─destruct H ---------------------------- 12.3% 12.3% 36 0.048s
+─rewrite <- (lem : lemT) by by_tac ltac: 0.1% 11.2% 1 1.352s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 11.2% 1 1.352s
+─by_tac -------------------------------- 0.0% 11.1% 4 0.476s
+─UnifyAbstractReflexivity.unify_transfor 8.8% 10.6% 7 0.344s
+─rewrite <- (ZRange.is_bounded_by_None_r 10.5% 10.5% 8 0.316s
+─Reify.do_reify_abs_goal --------------- 6.0% 6.1% 2 0.732s
+─Glue.refine_to_reflective_glue' ------- 0.0% 5.6% 1 0.680s
+─Reify.do_reifyf_goal ------------------ 5.4% 5.5% 80 0.660s
+─Glue.zrange_to_reflective ------------- 0.0% 3.6% 1 0.428s
+─ReflectiveTactics.unify_abstract_cbv_in 2.2% 3.0% 1 0.360s
+─IntegrationTestTemporaryMiscCommon.do_s 0.0% 2.9% 1 0.348s
+─<Crypto.Util.Tactics.MoveLetIn.with_uco 0.5% 2.8% 3 0.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 2.6% 1 0.316s
+─k ------------------------------------- 2.1% 2.2% 1 0.268s
+─unify (constr) (constr) --------------- 2.1% 2.1% 8 0.092s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_montgomery ----------------- 0.0% 66.1% 1 7.964s
+ ├─IntegrationTestTemporaryMiscCommon.fa 16.2% 50.9% 1 6.128s
+ │ ├─reflexivity ----------------------- 20.6% 20.6% 1 2.480s
+ │ └─op_sig_side_conditions_t ---------- 0.0% 12.7% 1 1.528s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 7.3% 4 0.232s
+ │ │└DestructHyps.do_one_match_then -- 0.3% 7.3% 24 0.052s
+ │ │└do_tac -------------------------- 0.0% 7.0% 20 0.048s
+ │ │└destruct H ---------------------- 6.9% 6.9% 20 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.2% 5.2% 4 0.300s
+ └─IntegrationTestTemporaryMiscCommon.do 0.0% 14.1% 1 1.704s
+ ├─IntegrationTestTemporaryMiscCommon. 0.0% 11.2% 1 1.352s
+ │└rewrite <- (lem : lemT) by by_tac l 0.1% 11.2% 1 1.352s
+ │└by_tac ---------------------------- 0.0% 11.1% 4 0.476s
+ │ ├─DestructHyps.do_all_matches_then 0.0% 5.6% 4 0.176s
+ │ │└DestructHyps.do_one_match_then -- 0.2% 5.6% 20 0.052s
+ │ │└do_tac -------------------------- 0.0% 5.3% 16 0.048s
+ │ │└destruct H ---------------------- 5.3% 5.3% 16 0.048s
+ │ └─rewrite <- (ZRange.is_bounded_by_ 5.3% 5.3% 4 0.316s
+ └─IntegrationTestTemporaryMiscCommon. 0.0% 2.9% 1 0.348s
+ └<Crypto.Util.Tactics.MoveLetIn.with 0.5% 2.8% 3 0.332s
+ └k --------------------------------- 2.1% 2.2% 1 0.268s
+─Pipeline.refine_reflectively_gen ------ 0.0% 33.9% 1 4.084s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 28.3% 1 3.404s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 27.8% 1 3.352s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.4% 14.1% 1 1.696s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 8.8% 10.6% 7 0.344s
+ │ │ └─ReflectiveTactics.unify_abstract_ 2.2% 3.0% 1 0.360s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 13.7% 1 1.656s
+ │ └Reify.Reify_rhs_gen --------------- 0.9% 13.2% 1 1.592s
+ │ └Reify.do_reify_abs_goal ----------- 6.0% 6.1% 2 0.732s
+ │ └Reify.do_reifyf_goal -------------- 5.4% 5.5% 80 0.660s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 5.6% 1 0.680s
+ └Glue.zrange_to_reflective ----------- 0.0% 3.6% 1 0.428s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 2.6% 1 0.316s
+
+src/Specific/NISTP256/AMD64/fesub (real: 43.34, user: 39.59, sys: 0.26, mem: 793376 ko)
+COQC src/Specific/NISTP256/AMD64/feaddDisplay > src/Specific/NISTP256/AMD64/feaddDisplay.log
+COQC src/Specific/NISTP256/AMD64/fenzDisplay > src/Specific/NISTP256/AMD64/fenzDisplay.log
+COQC src/Specific/solinas32_2e255m765_12limbs/femul.v
+Finished transaction in 50.426 secs (46.528u,0.072s) (successful)
+total time: 46.544s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.1% 1 40.552s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.7% 1 40.372s
+─ReflectiveTactics.do_reify ------------ 0.0% 59.6% 1 27.740s
+─Reify.Reify_rhs_gen ------------------- 1.6% 58.9% 1 27.432s
+─Reify.do_reify_abs_goal --------------- 43.3% 43.6% 2 20.312s
+─Reify.do_reifyf_goal ------------------ 42.5% 42.8% 108 10.328s
+─ReflectiveTactics.solve_post_reified_si 0.1% 27.1% 1 12.632s
+─UnifyAbstractReflexivity.unify_transfor 18.6% 23.5% 7 3.552s
+─eexact -------------------------------- 13.7% 13.7% 110 0.136s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.8% 1 3.612s
+─Glue.zrange_to_reflective ------------- 0.0% 7.2% 1 3.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 5.5% 1 2.544s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+─unify (constr) (constr) --------------- 5.1% 5.1% 6 1.068s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+─change G' ----------------------------- 4.8% 4.8% 1 2.252s
+─rewrite H ----------------------------- 3.8% 3.8% 1 1.748s
+─pose proof (pf : Interpretation.Bo 3.6% 3.6% 1 1.664s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 1.616s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.2% 3.2% 1 1.468s
+─ReflectiveTactics.unify_abstract_cbv_in 1.6% 2.4% 1 1.124s
+─reflexivity --------------------------- 2.1% 2.1% 7 0.396s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.1% 1 40.552s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.7% 1 40.372s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 59.6% 1 27.740s
+ │ │└Reify.Reify_rhs_gen --------------- 1.6% 58.9% 1 27.432s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.3% 43.6% 2 20.312s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.5% 42.8% 108 10.328s
+ │ │ │└eexact -------------------------- 13.2% 13.2% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 1.748s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.5% 1 1.616s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 3.2% 3.2% 1 1.468s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 27.1% 1 12.632s
+ │ ├─UnifyAbstractReflexivity.unify_tr 18.6% 23.5% 7 3.552s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 1.068s
+ │ └─ReflectiveTactics.unify_abstract_ 1.6% 2.4% 1 1.124s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 7.8% 1 3.612s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.2% 1 3.332s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 5.5% 1 2.544s
+ └pose proof (pf : Interpretation. 3.6% 3.6% 1 1.664s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+└change G' ----------------------------- 4.8% 4.8% 1 2.252s
+
+Finished transaction in 80.129 secs (74.068u,0.024s) (successful)
+Closed under the global context
+total time: 46.544s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 87.1% 1 40.552s
+─ReflectiveTactics.solve_side_conditions 0.0% 86.7% 1 40.372s
+─ReflectiveTactics.do_reify ------------ 0.0% 59.6% 1 27.740s
+─Reify.Reify_rhs_gen ------------------- 1.6% 58.9% 1 27.432s
+─Reify.do_reify_abs_goal --------------- 43.3% 43.6% 2 20.312s
+─Reify.do_reifyf_goal ------------------ 42.5% 42.8% 108 10.328s
+─ReflectiveTactics.solve_post_reified_si 0.1% 27.1% 1 12.632s
+─UnifyAbstractReflexivity.unify_transfor 18.6% 23.5% 7 3.552s
+─eexact -------------------------------- 13.7% 13.7% 110 0.136s
+─Glue.refine_to_reflective_glue' ------- 0.0% 7.8% 1 3.612s
+─Glue.zrange_to_reflective ------------- 0.0% 7.2% 1 3.332s
+─Glue.zrange_to_reflective_goal -------- 1.7% 5.5% 1 2.544s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+─unify (constr) (constr) --------------- 5.1% 5.1% 6 1.068s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+─change G' ----------------------------- 4.8% 4.8% 1 2.252s
+─rewrite H ----------------------------- 3.8% 3.8% 1 1.748s
+─pose proof (pf : Interpretation.Bo 3.6% 3.6% 1 1.664s
+─prove_interp_compile_correct ---------- 0.0% 3.5% 1 1.616s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.2% 3.2% 1 1.468s
+─ReflectiveTactics.unify_abstract_cbv_in 1.6% 2.4% 1 1.124s
+─reflexivity --------------------------- 2.1% 2.1% 7 0.396s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ -0.0% 94.9% 1 44.164s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 87.1% 1 40.552s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 86.7% 1 40.372s
+ │ ├─ReflectiveTactics.do_reify -------- 0.0% 59.6% 1 27.740s
+ │ │└Reify.Reify_rhs_gen --------------- 1.6% 58.9% 1 27.432s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.3% 43.6% 2 20.312s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.5% 42.8% 108 10.328s
+ │ │ │└eexact -------------------------- 13.2% 13.2% 108 0.072s
+ │ │ ├─rewrite H ----------------------- 3.8% 3.8% 1 1.748s
+ │ │ └─prove_interp_compile_correct ---- 0.0% 3.5% 1 1.616s
+ │ │ └rewrite ?EtaInterp.InterpExprEta 3.2% 3.2% 1 1.468s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 27.1% 1 12.632s
+ │ ├─UnifyAbstractReflexivity.unify_tr 18.6% 23.5% 7 3.552s
+ │ │└unify (constr) (constr) --------- 4.3% 4.3% 5 1.068s
+ │ └─ReflectiveTactics.unify_abstract_ 1.6% 2.4% 1 1.124s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 7.8% 1 3.612s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.2% 1 3.332s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 5.5% 1 2.544s
+ └pose proof (pf : Interpretation. 3.6% 3.6% 1 1.664s
+─synthesize ---------------------------- 0.0% 5.1% 1 2.380s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.0% 1 2.320s
+└change G' ----------------------------- 4.8% 4.8% 1 2.252s
+
+src/Specific/solinas32_2e255m765_12limbs/femul (real: 155.79, user: 143.70, sys: 0.32, mem: 1454696 ko)
+COQC src/Specific/NISTP256/AMD64/feoppDisplay > src/Specific/NISTP256/AMD64/feoppDisplay.log
+COQC src/Specific/NISTP256/AMD64/fesubDisplay > src/Specific/NISTP256/AMD64/fesubDisplay.log
+COQC src/Specific/X25519/C64/fesquareDisplay > src/Specific/X25519/C64/fesquareDisplay.log
+COQC src/Specific/X25519/C64/fesubDisplay > src/Specific/X25519/C64/fesubDisplay.log
+COQC src/Specific/X25519/C64/freezeDisplay > src/Specific/X25519/C64/freezeDisplay.log
+COQC src/Specific/solinas32_2e255m765_13limbs/femul.v
+Finished transaction in 61.854 secs (57.328u,0.079s) (successful)
+total time: 57.348s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 86.2% 1 49.452s
+─ReflectiveTactics.solve_side_conditions 0.0% 85.9% 1 49.264s
+─ReflectiveTactics.do_reify ------------ -0.0% 57.6% 1 33.004s
+─Reify.Reify_rhs_gen ------------------- 1.3% 56.9% 1 32.608s
+─Reify.do_reify_abs_goal --------------- 43.1% 43.3% 2 24.840s
+─Reify.do_reifyf_goal ------------------ 42.3% 42.6% 117 12.704s
+─ReflectiveTactics.solve_post_reified_si 0.1% 28.4% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 19.6% 25.0% 7 4.824s
+─eexact -------------------------------- 13.9% 13.9% 119 0.144s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 4.772s
+─Glue.zrange_to_reflective ------------- 0.0% 7.8% 1 4.484s
+─Glue.zrange_to_reflective_goal -------- 1.7% 6.0% 1 3.464s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+─unify (constr) (constr) --------------- 5.4% 5.4% 6 1.540s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+─change G' ----------------------------- 5.2% 5.2% 1 2.964s
+─pose proof (pf : Interpretation.Bo 4.2% 4.2% 1 2.416s
+─prove_interp_compile_correct ---------- 0.0% 3.3% 1 1.904s
+─rewrite H ----------------------------- 3.3% 3.3% 1 1.896s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.0% 3.0% 1 1.732s
+─ReflectiveTactics.unify_abstract_cbv_in 1.4% 2.1% 1 1.212s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 86.2% 1 49.452s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 85.9% 1 49.264s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 57.6% 1 33.004s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 56.9% 1 32.608s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.1% 43.3% 2 24.840s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.3% 42.6% 117 12.704s
+ │ │ │└eexact -------------------------- 13.4% 13.4% 117 0.084s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.3% 1 1.904s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.0% 3.0% 1 1.732s
+ │ │ └─rewrite H ----------------------- 3.3% 3.3% 1 1.896s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 28.4% 1 16.260s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.6% 25.0% 7 4.824s
+ │ │└unify (constr) (constr) --------- 4.8% 4.8% 5 1.540s
+ │ └─ReflectiveTactics.unify_abstract_ 1.4% 2.1% 1 1.212s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 4.772s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.8% 1 4.484s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 6.0% 1 3.464s
+ └pose proof (pf : Interpretation. 4.2% 4.2% 1 2.416s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+└change G' ----------------------------- 5.2% 5.2% 1 2.964s
+
+Finished transaction in 94.432 secs (86.96u,0.02s) (successful)
+Closed under the global context
+total time: 57.348s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 86.2% 1 49.452s
+─ReflectiveTactics.solve_side_conditions 0.0% 85.9% 1 49.264s
+─ReflectiveTactics.do_reify ------------ -0.0% 57.6% 1 33.004s
+─Reify.Reify_rhs_gen ------------------- 1.3% 56.9% 1 32.608s
+─Reify.do_reify_abs_goal --------------- 43.1% 43.3% 2 24.840s
+─Reify.do_reifyf_goal ------------------ 42.3% 42.6% 117 12.704s
+─ReflectiveTactics.solve_post_reified_si 0.1% 28.4% 1 16.260s
+─UnifyAbstractReflexivity.unify_transfor 19.6% 25.0% 7 4.824s
+─eexact -------------------------------- 13.9% 13.9% 119 0.144s
+─Glue.refine_to_reflective_glue' ------- 0.0% 8.3% 1 4.772s
+─Glue.zrange_to_reflective ------------- 0.0% 7.8% 1 4.484s
+─Glue.zrange_to_reflective_goal -------- 1.7% 6.0% 1 3.464s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+─unify (constr) (constr) --------------- 5.4% 5.4% 6 1.540s
+─IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+─change G' ----------------------------- 5.2% 5.2% 1 2.964s
+─pose proof (pf : Interpretation.Bo 4.2% 4.2% 1 2.416s
+─prove_interp_compile_correct ---------- 0.0% 3.3% 1 1.904s
+─rewrite H ----------------------------- 3.3% 3.3% 1 1.896s
+─rewrite ?EtaInterp.InterpExprEta ------ 3.0% 3.0% 1 1.732s
+─ReflectiveTactics.unify_abstract_cbv_in 1.4% 2.1% 1 1.212s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 94.6% 1 54.224s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 86.2% 1 49.452s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 85.9% 1 49.264s
+ │ ├─ReflectiveTactics.do_reify -------- -0.0% 57.6% 1 33.004s
+ │ │└Reify.Reify_rhs_gen --------------- 1.3% 56.9% 1 32.608s
+ │ │ ├─Reify.do_reify_abs_goal --------- 43.1% 43.3% 2 24.840s
+ │ │ │└Reify.do_reifyf_goal ------------ 42.3% 42.6% 117 12.704s
+ │ │ │└eexact -------------------------- 13.4% 13.4% 117 0.084s
+ │ │ ├─prove_interp_compile_correct ---- 0.0% 3.3% 1 1.904s
+ │ │ │└rewrite ?EtaInterp.InterpExprEta 3.0% 3.0% 1 1.732s
+ │ │ └─rewrite H ----------------------- 3.3% 3.3% 1 1.896s
+ │ └─ReflectiveTactics.solve_post_reifie 0.1% 28.4% 1 16.260s
+ │ ├─UnifyAbstractReflexivity.unify_tr 19.6% 25.0% 7 4.824s
+ │ │└unify (constr) (constr) --------- 4.8% 4.8% 5 1.540s
+ │ └─ReflectiveTactics.unify_abstract_ 1.4% 2.1% 1 1.212s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 8.3% 1 4.772s
+ └Glue.zrange_to_reflective ----------- 0.0% 7.8% 1 4.484s
+ └Glue.zrange_to_reflective_goal ------ 1.7% 6.0% 1 3.464s
+ └pose proof (pf : Interpretation. 4.2% 4.2% 1 2.416s
+─synthesize ---------------------------- 0.0% 5.4% 1 3.124s
+└IntegrationTestTemporaryMiscCommon.do_r 0.0% 5.3% 1 3.040s
+└change G' ----------------------------- 5.2% 5.2% 1 2.964s
+
+src/Specific/solinas32_2e255m765_13limbs/femul (real: 181.77, user: 168.52, sys: 0.40, mem: 1589516 ko)
+COQC src/Specific/NISTP256/AMD64/femul.v
+Finished transaction in 119.257 secs (109.936u,0.256s) (successful)
+total time: 110.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+─ReflectiveTactics.do_reify ------------ -0.0% 83.7% 1 92.208s
+─Reify.Reify_rhs_gen ------------------- 0.7% 83.5% 1 91.960s
+─Reify.do_reify_abs_goal --------------- 77.7% 77.8% 2 85.708s
+─Reify.do_reifyf_goal ------------------ 77.4% 77.5% 901 85.364s
+─eexact -------------------------------- 17.9% 17.9% 903 0.136s
+─ReflectiveTactics.solve_post_reified_si 0.3% 12.5% 1 13.784s
+─UnifyAbstractReflexivity.unify_transfor 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+ ├─ReflectiveTactics.do_reify ---------- -0.0% 83.7% 1 92.208s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 83.5% 1 91.960s
+ │└Reify.do_reify_abs_goal ------------- 77.7% 77.8% 2 85.708s
+ │└Reify.do_reifyf_goal ---------------- 77.4% 77.5% 901 85.364s
+ │└eexact ------------------------------ 17.7% 17.7% 901 0.136s
+ └─ReflectiveTactics.solve_post_reified_ 0.3% 12.5% 1 13.784s
+ └UnifyAbstractReflexivity.unify_transf 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+Finished transaction in 61.452 secs (58.503u,0.055s) (successful)
+Closed under the global context
+total time: 110.140s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+─ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+─ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+─ReflectiveTactics.do_reify ------------ -0.0% 83.7% 1 92.208s
+─Reify.Reify_rhs_gen ------------------- 0.7% 83.5% 1 91.960s
+─Reify.do_reify_abs_goal --------------- 77.7% 77.8% 2 85.708s
+─Reify.do_reifyf_goal ------------------ 77.4% 77.5% 901 85.364s
+─eexact -------------------------------- 17.9% 17.9% 903 0.136s
+─ReflectiveTactics.solve_post_reified_si 0.3% 12.5% 1 13.784s
+─UnifyAbstractReflexivity.unify_transfor 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─Pipeline.refine_reflectively_gen ------ 0.0% 97.1% 1 106.964s
+└ReflectiveTactics.do_reflective_pipelin -0.0% 96.4% 1 106.196s
+└ReflectiveTactics.solve_side_conditions 0.0% 96.2% 1 105.992s
+ ├─ReflectiveTactics.do_reify ---------- -0.0% 83.7% 1 92.208s
+ │└Reify.Reify_rhs_gen ----------------- 0.7% 83.5% 1 91.960s
+ │└Reify.do_reify_abs_goal ------------- 77.7% 77.8% 2 85.708s
+ │└Reify.do_reifyf_goal ---------------- 77.4% 77.5% 901 85.364s
+ │└eexact ------------------------------ 17.7% 17.7% 901 0.136s
+ └─ReflectiveTactics.solve_post_reified_ 0.3% 12.5% 1 13.784s
+ └UnifyAbstractReflexivity.unify_transf 9.8% 11.2% 7 3.356s
+─synthesize_montgomery ----------------- 0.0% 2.9% 1 3.176s
+
+src/Specific/NISTP256/AMD64/femul (real: 202.96, user: 189.62, sys: 0.64, mem: 3302508 ko)
+COQC src/Specific/NISTP256/AMD64/femulDisplay > src/Specific/NISTP256/AMD64/femulDisplay.log
+COQC src/Specific/X25519/C64/ladderstep.v
+total time: 52.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 93.8% 1 48.872s
+─ReflectiveTactics.solve_side_conditions 0.0% 93.7% 1 48.776s
+─ReflectiveTactics.solve_post_reified_si 0.2% 56.5% 1 29.412s
+─UnifyAbstractReflexivity.unify_transfor 44.7% 49.1% 7 6.968s
+─ReflectiveTactics.do_reify ------------ 0.0% 37.2% 1 19.364s
+─Reify.Reify_rhs_gen ------------------- 2.1% 23.4% 1 12.200s
+─Reify.do_reifyf_goal ------------------ 11.2% 11.3% 138 1.884s
+─Compilers.Reify.reify_context_variables 0.1% 9.2% 1 4.808s
+─rewrite H ----------------------------- 7.3% 7.3% 1 3.816s
+─ReflectiveTactics.unify_abstract_cbv_in 4.7% 6.4% 1 3.336s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.7% 1 2.448s
+─Glue.zrange_to_reflective ------------- 0.0% 4.0% 1 2.068s
+─Reify.transitivity_tt ----------------- 0.1% 3.7% 2 0.984s
+─transitivity -------------------------- 3.5% 3.5% 10 0.880s
+─reflexivity --------------------------- 3.4% 3.4% 11 0.772s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 1.728s
+─eexact -------------------------------- 3.2% 3.2% 140 0.032s
+─unify (constr) (constr) --------------- 3.1% 3.1% 6 0.852s
+─clear (var_list) ---------------------- 3.1% 3.1% 98 0.584s
+─UnfoldArg.unfold_second_arg ----------- 0.4% 3.0% 2 1.576s
+─tac ----------------------------------- 2.1% 3.0% 2 1.564s
+─ClearAll.clear_all -------------------- 0.2% 2.8% 7 0.584s
+─ChangeInAll.change_with_compute_in_all 0.0% 2.6% 221 0.012s
+─change c with c' in * ----------------- 2.5% 2.5% 221 0.012s
+─Reify.do_reify_abs_goal --------------- 2.4% 2.5% 2 1.276s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+└Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 93.8% 1 48.872s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 93.7% 1 48.776s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.2% 56.5% 1 29.412s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 44.7% 49.1% 7 6.968s
+ │ │ │└ClearAll.clear_all -------------- 0.2% 2.8% 7 0.584s
+ │ │ │└clear (var_list) ---------------- 2.7% 2.7% 65 0.584s
+ │ │ └─ReflectiveTactics.unify_abstract_ 4.7% 6.4% 1 3.336s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 37.2% 1 19.364s
+ │ ├─Reify.Reify_rhs_gen ------------- 2.1% 23.4% 1 12.200s
+ │ │ ├─rewrite H --------------------- 7.3% 7.3% 1 3.816s
+ │ │ ├─Reify.transitivity_tt --------- 0.1% 3.7% 2 0.984s
+ │ │ │└transitivity ------------------ 3.4% 3.4% 4 0.880s
+ │ │ ├─tac --------------------------- 2.1% 3.0% 1 1.564s
+ │ │ └─Reify.do_reify_abs_goal ------- 2.4% 2.5% 2 1.276s
+ │ │ └Reify.do_reifyf_goal ---------- 2.2% 2.2% 25 1.148s
+ │ ├─Compilers.Reify.reify_context_var 0.1% 9.2% 1 4.808s
+ │ │└Reify.do_reifyf_goal ------------ 9.0% 9.1% 113 1.884s
+ │ │└eexact -------------------------- 2.4% 2.4% 113 0.032s
+ │ └─UnfoldArg.unfold_second_arg ----- 0.4% 3.0% 2 1.576s
+ │ └ChangeInAll.change_with_compute_i 0.0% 2.6% 221 0.012s
+ │ └change c with c' in * ----------- 2.5% 2.5% 221 0.012s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.7% 1 2.448s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.0% 1 2.068s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 1.728s
+
+Finished transaction in 171.122 secs (161.392u,0.039s) (successful)
+Closed under the global context
+total time: 52.080s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+─Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+─ReflectiveTactics.do_reflective_pipelin 0.0% 93.8% 1 48.872s
+─ReflectiveTactics.solve_side_conditions 0.0% 93.7% 1 48.776s
+─ReflectiveTactics.solve_post_reified_si 0.2% 56.5% 1 29.412s
+─UnifyAbstractReflexivity.unify_transfor 44.7% 49.1% 7 6.968s
+─ReflectiveTactics.do_reify ------------ 0.0% 37.2% 1 19.364s
+─Reify.Reify_rhs_gen ------------------- 2.1% 23.4% 1 12.200s
+─Reify.do_reifyf_goal ------------------ 11.2% 11.3% 138 1.884s
+─Compilers.Reify.reify_context_variables 0.1% 9.2% 1 4.808s
+─rewrite H ----------------------------- 7.3% 7.3% 1 3.816s
+─ReflectiveTactics.unify_abstract_cbv_in 4.7% 6.4% 1 3.336s
+─Glue.refine_to_reflective_glue' ------- 0.0% 4.7% 1 2.448s
+─Glue.zrange_to_reflective ------------- 0.0% 4.0% 1 2.068s
+─Reify.transitivity_tt ----------------- 0.1% 3.7% 2 0.984s
+─transitivity -------------------------- 3.5% 3.5% 10 0.880s
+─reflexivity --------------------------- 3.4% 3.4% 11 0.772s
+─Glue.zrange_to_reflective_goal -------- 2.4% 3.3% 1 1.728s
+─eexact -------------------------------- 3.2% 3.2% 140 0.032s
+─unify (constr) (constr) --------------- 3.1% 3.1% 6 0.852s
+─clear (var_list) ---------------------- 3.1% 3.1% 98 0.584s
+─UnfoldArg.unfold_second_arg ----------- 0.4% 3.0% 2 1.576s
+─tac ----------------------------------- 2.1% 3.0% 2 1.564s
+─ClearAll.clear_all -------------------- 0.2% 2.8% 7 0.584s
+─ChangeInAll.change_with_compute_in_all 0.0% 2.6% 221 0.012s
+─change c with c' in * ----------------- 2.5% 2.5% 221 0.012s
+─Reify.do_reify_abs_goal --------------- 2.4% 2.5% 2 1.276s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─synthesize_xzladderstep --------------- 0.0% 100.0% 1 52.080s
+└Pipeline.refine_reflectively_gen ------ 0.0% 98.5% 1 51.320s
+ ├─ReflectiveTactics.do_reflective_pipel 0.0% 93.8% 1 48.872s
+ │└ReflectiveTactics.solve_side_conditio 0.0% 93.7% 1 48.776s
+ │ ├─ReflectiveTactics.solve_post_reifie 0.2% 56.5% 1 29.412s
+ │ │ ├─UnifyAbstractReflexivity.unify_tr 44.7% 49.1% 7 6.968s
+ │ │ │└ClearAll.clear_all -------------- 0.2% 2.8% 7 0.584s
+ │ │ │└clear (var_list) ---------------- 2.7% 2.7% 65 0.584s
+ │ │ └─ReflectiveTactics.unify_abstract_ 4.7% 6.4% 1 3.336s
+ │ └─ReflectiveTactics.do_reify -------- 0.0% 37.2% 1 19.364s
+ │ ├─Reify.Reify_rhs_gen ------------- 2.1% 23.4% 1 12.200s
+ │ │ ├─rewrite H --------------------- 7.3% 7.3% 1 3.816s
+ │ │ ├─Reify.transitivity_tt --------- 0.1% 3.7% 2 0.984s
+ │ │ │└transitivity ------------------ 3.4% 3.4% 4 0.880s
+ │ │ ├─tac --------------------------- 2.1% 3.0% 1 1.564s
+ │ │ └─Reify.do_reify_abs_goal ------- 2.4% 2.5% 2 1.276s
+ │ │ └Reify.do_reifyf_goal ---------- 2.2% 2.2% 25 1.148s
+ │ ├─Compilers.Reify.reify_context_var 0.1% 9.2% 1 4.808s
+ │ │└Reify.do_reifyf_goal ------------ 9.0% 9.1% 113 1.884s
+ │ │└eexact -------------------------- 2.4% 2.4% 113 0.032s
+ │ └─UnfoldArg.unfold_second_arg ----- 0.4% 3.0% 2 1.576s
+ │ └ChangeInAll.change_with_compute_i 0.0% 2.6% 221 0.012s
+ │ └change c with c' in * ----------- 2.5% 2.5% 221 0.012s
+ └─Glue.refine_to_reflective_glue' ----- 0.0% 4.7% 1 2.448s
+ └Glue.zrange_to_reflective ----------- 0.0% 4.0% 1 2.068s
+ └Glue.zrange_to_reflective_goal ------ 2.4% 3.3% 1 1.728s
+
+src/Specific/X25519/C64/ladderstep (real: 256.77, user: 241.34, sys: 0.45, mem: 1617000 ko)
+COQC src/Specific/X25519/C64/ladderstepDisplay > src/Specific/X25519/C64/ladderstepDisplay.log
diff --git a/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh b/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh
new file mode 100755
index 00000000..a918cceb
--- /dev/null
+++ b/test-suite/coq-makefile/timing/precomputed-time-tests/run.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -x
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+export COQLIB="$(cd ../../../.. && pwd)"
+
+./001-correct-diff-sorting-order/run.sh || exit $?
+./002-single-file-sorting/run.sh || exit $?
diff --git a/test-suite/coq-makefile/timing/run.sh b/test-suite/coq-makefile/timing/run.sh
new file mode 100755
index 00000000..f0e036ee
--- /dev/null
+++ b/test-suite/coq-makefile/timing/run.sh
@@ -0,0 +1,108 @@
+#!/usr/bin/env bash
+
+#set -x
+set -e
+
+. ../template/path-init.sh
+
+# reset MAKEFLAGS so that, e.g., `make -C test-suite -B coq-makefile` doesn't give us issues
+
+MAKEFLAGS=
+
+cd precomputed-time-tests
+./run.sh || exit $?
+
+cd ../error
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+if make pretty-timed TGTS="all" -j1; then
+ echo "Error: make pretty-timed should have failed"
+ exit 1
+fi
+
+cd ../aggregate
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+make pretty-timed TGTS="all" -j1 || exit $?
+
+cd ../before
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+make make-pretty-timed-before TGTS="all" -j1 || exit $?
+
+cd ../after
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+make make-pretty-timed-after TGTS="all" -j1 || exit $?
+rm -f time-of-build-before.log
+make print-pretty-timed-diff TIMING_SORT_BY=diff TIME_OF_BUILD_BEFORE_FILE=../before/time-of-build-before.log
+cp ../before/time-of-build-before.log ./
+make print-pretty-timed-diff TIMING_SORT_BY=diff || exit $?
+
+INFINITY="∞"
+INFINITY_REPLACEMENT="+.%" # assume that if the before time is zero, we expected the time to increase
+
+TO_SED_IN_BOTH=(
+ -e s"/${INFINITY}/${INFINITY_REPLACEMENT}/g" # Whether or not something shows up as ∞ depends on whether a time registers as 0.s or as 0.001s, so we can't rely on this being consistent
+ -e s':|\s*N/A\s*$:| '"${INFINITY_REPLACEMENT}"':g' # Whether or not something shows up as N/A depends on whether a time registers as 0.s or as 0.001s, so we can't rely on this being consistent
+ -e s'/ *$//g' # the number of trailing spaces depends on how many digits percentages end up being; since this varies across runs, we remove trailing spaces
+ -e s'/[0-9]*\.[0-9]*//g' # the precise timing numbers vary, so we strip them out
+ -e s'/^-*$/------/g' # When none of the numbers get over 100 (or 1000, in per-file), the width of the table is different, so we normalize the number of dashes for table separators
+ -e s'/+/-/g' # some code lines don't really change, but this can show up as either -0m00.01s or +0m00.01s, so we need to normalize the signs; additionally, some N/A's show up where we expect to get -∞ on the per-line file, and so the ∞-replacement gets the sign wrong, so we must correct it
+)
+
+TO_SED_IN_PER_FILE=(
+ -e s'/[0-9]//g' # unclear whether this is actually needed above and beyond s'/[0-9]*\.[0-9]*//g'; it's been here from the start
+ -e s'/ */ /g' # unclear whether this is actually needed for per-file timing; it's been here from the start
+ -e s'/\(Total.*\)-\(.*\)-/\1+\2+/g' # Overall time in the per-file timing diff should be around 0; if it comes out negative, we remove the sign
+)
+
+TO_SED_IN_PER_LINE=(
+ -e s'/0//g' # unclear whether this is actually needed above and beyond s'/[0-9]*\.[0-9]*//g'; it's been here from the start
+ -e s'/ */ /g' # Sometimes 0 will show up as 0m00.s, sometimes it'll end up being more like 0m00.001s; we must strip out the spaces that result from left-aligning numbers of different widths based on how many digits Coq's [-time] gives
+ )
+
+for ext in "" .desired; do
+ for file in time-of-build-before.log time-of-build-after.log time-of-build-both.log; do
+ cat ${file}${ext} | grep -v 'warning: undefined variable' | sed "${TO_SED_IN_BOTH[@]}" "${TO_SED_IN_PER_FILE[@]}" > ${file}${ext}.processed
+ done
+done
+for file in time-of-build-before.log time-of-build-after.log time-of-build-both.log; do
+ echo "cat $file"
+ cat "$file"
+ echo
+ diff -u $file.desired.processed $file.processed || exit $?
+done
+
+cd ../per-file-before
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+make all TIMING=before -j2 || exit $?
+
+cd ../per-file-after
+coq_makefile -f _CoqProject -o Makefile
+make cleanall
+make all TIMING=after -j2 || exit $?
+
+find ../per-file-before/ -name "*.before-timing" -exec 'cp' '{}' './' ';'
+make all.timing.diff -j2 || exit $?
+echo "cat A.v.before-timing"
+cat A.v.before-timing
+echo
+echo "cat A.v.after-timing"
+cat A.v.after-timing
+echo
+echo "cat A.v.timing.diff"
+cat A.v.timing.diff
+echo
+
+for ext in "" .desired; do
+ for file in A.v.timing.diff; do
+ cat ${file}${ext} | sed "${TO_SED_IN_BOTH[@]}" "${TO_SED_IN_PER_LINE[@]}" | sort > ${file}${ext}.processed
+ done
+done
+for file in A.v.timing.diff; do
+ diff -u $file.desired.processed $file.processed || exit $?
+done
+
+exit 0
diff --git a/test-suite/coq-makefile/uninstall1/_CoqProject b/test-suite/coq-makefile/uninstall1/_CoqProject
new file mode 100644
index 00000000..35792066
--- /dev/null
+++ b/test-suite/coq-makefile/uninstall1/_CoqProject
@@ -0,0 +1,11 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/uninstall1/run.sh b/test-suite/coq-makefile/uninstall1/run.sh
new file mode 100755
index 00000000..5354f794
--- /dev/null
+++ b/test-suite/coq-makefile/uninstall1/run.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+make install-doc DSTROOT="$PWD/tmp"
+make uninstall DSTROOT="$PWD/tmp"
+make uninstall-doc DSTROOT="$PWD/tmp"
+#make debug
+(for d in `find tmp -name user-contrib` ; do pushd $d >/dev/null && find . && popd >/dev/null; done) | sort -u > actual
+sort -u > desired <<EOT
+.
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/uninstall2/_CoqProject b/test-suite/coq-makefile/uninstall2/_CoqProject
new file mode 100644
index 00000000..d2a547d4
--- /dev/null
+++ b/test-suite/coq-makefile/uninstall2/_CoqProject
@@ -0,0 +1,11 @@
+-R src/ test
+-R theories/ test
+-I src/
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
+theories/sub/testsub.v
diff --git a/test-suite/coq-makefile/uninstall2/run.sh b/test-suite/coq-makefile/uninstall2/run.sh
new file mode 100755
index 00000000..5354f794
--- /dev/null
+++ b/test-suite/coq-makefile/uninstall2/run.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+make html mlihtml
+make install DSTROOT="$PWD/tmp"
+make install-doc DSTROOT="$PWD/tmp"
+make uninstall DSTROOT="$PWD/tmp"
+make uninstall-doc DSTROOT="$PWD/tmp"
+#make debug
+(for d in `find tmp -name user-contrib` ; do pushd $d >/dev/null && find . && popd >/dev/null; done) | sort -u > actual
+sort -u > desired <<EOT
+.
+EOT
+exec diff -u desired actual
diff --git a/test-suite/coq-makefile/validate1/_CoqProject b/test-suite/coq-makefile/validate1/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/validate1/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/validate1/run.sh b/test-suite/coq-makefile/validate1/run.sh
new file mode 100755
index 00000000..43bf39de
--- /dev/null
+++ b/test-suite/coq-makefile/validate1/run.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+cat Makefile.conf
+make
+exec make validate
diff --git a/test-suite/coq-makefile/vio2vo/_CoqProject b/test-suite/coq-makefile/vio2vo/_CoqProject
new file mode 100644
index 00000000..69f47302
--- /dev/null
+++ b/test-suite/coq-makefile/vio2vo/_CoqProject
@@ -0,0 +1,10 @@
+-R src test
+-R theories test
+-I src
+
+src/test_plugin.mlpack
+src/test.ml4
+src/test.mli
+src/test_aux.ml
+src/test_aux.mli
+theories/test.v
diff --git a/test-suite/coq-makefile/vio2vo/run.sh b/test-suite/coq-makefile/vio2vo/run.sh
new file mode 100755
index 00000000..85656da4
--- /dev/null
+++ b/test-suite/coq-makefile/vio2vo/run.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+a=`uname`
+
+. ../template/init.sh
+
+coq_makefile -f _CoqProject -o Makefile
+make quick
+# vio2vo is broken on Windows (#6720)
+if [ "$a" = "Darwin" -o "$a" = "Linux" ]; then
+ make vio2vo J=2
+ test -f theories/test.vo
+ make validate
+fi
diff --git a/test-suite/coqchk/bug_7539.v b/test-suite/coqchk/bug_7539.v
new file mode 100644
index 00000000..74ebe929
--- /dev/null
+++ b/test-suite/coqchk/bug_7539.v
@@ -0,0 +1,26 @@
+Set Primitive Projections.
+
+CoInductive Stream : Type := Cons { tl : Stream }.
+
+Fixpoint Str_nth_tl (n:nat) (s:Stream) : Stream :=
+ match n with
+ | O => s
+ | S m => Str_nth_tl m (tl s)
+ end.
+
+CoInductive EqSt (s1 s2: Stream) : Prop := eqst {
+ eqst_tl : EqSt (tl s1) (tl s2);
+}.
+
+Axiom EqSt_reflex : forall (s : Stream), EqSt s s.
+
+CoFixpoint map (s:Stream) : Stream := Cons (map (tl s)).
+
+Lemma Str_nth_tl_map : forall n s, EqSt (Str_nth_tl n (map s)) (map (Str_nth_tl n s)).
+Proof.
+induction n.
++ intros; apply EqSt_reflex.
++ cbn; intros s; apply IHn.
+Qed.
+
+Definition boom : forall s, tl (map s) = map (tl s) := fun s => eq_refl.
diff --git a/test-suite/coqchk/cumulativity.v b/test-suite/coqchk/cumulativity.v
new file mode 100644
index 00000000..03468405
--- /dev/null
+++ b/test-suite/coqchk/cumulativity.v
@@ -0,0 +1,67 @@
+Set Universe Polymorphism.
+Set Polymorphic Inductive Cumulativity.
+Set Printing Universes.
+
+Inductive List (A: Type) := nil | cons : A -> List A -> List A.
+
+Section ListLift.
+ Universe i j.
+
+ Constraint i < j.
+
+ Definition LiftL {A} : List@{i} A -> List@{j} A := fun x => x.
+
+End ListLift.
+
+Lemma LiftL_Lem A (l : List A) : l = LiftL l.
+Proof. reflexivity. Qed.
+
+Section ListLower.
+ Universe i j.
+
+ Constraint i < j.
+
+ Definition LowerL {A : Type@{i}} : List@{j} A -> List@{i} A := fun x => x.
+
+End ListLower.
+
+Lemma LowerL_Lem@{i j|j<i+} (A : Type@{j}) (l : List@{i} A) : l = LowerL@{j i} l.
+Proof. reflexivity. Qed.
+(*
+I disable these tests because cqochk can't process them when compiled with
+ ocaml-4.02.3+32bit and camlp5-4.16 which is the case for Travis!
+
+ I have added this file (including the commented parts below) in
+ test-suite/success/cumulativity.v which doesn't run coqchk on them.
+*)
+(* Inductive Tp := tp : Type -> Tp. *)
+
+(* Section TpLift. *)
+(* Universe i j. *)
+
+(* Constraint i < j. *)
+
+(* Definition LiftTp : Tp@{i} -> Tp@{j} := fun x => x. *)
+
+(* End TpLift. *)
+
+(* Lemma LiftC_Lem (t : Tp) : LiftTp t = t. *)
+(* Proof. reflexivity. Qed. *)
+
+(* Section TpLower. *)
+(* Universe i j. *)
+
+(* Constraint i < j. *)
+
+(* Fail Definition LowerTp : Tp@{j} -> Tp@{i} := fun x => x. *)
+
+(* End TpLower. *)
+
+
+(* Section subtyping_test. *)
+(* Universe i j. *)
+(* Constraint i < j. *)
+
+(* Inductive TP2 := tp2 : Type@{i} -> Type@{j} -> TP2. *)
+
+(* End subtyping_test. *)
diff --git a/test-suite/coqchk/include.v b/test-suite/coqchk/include.v
new file mode 100644
index 00000000..6232c1b8
--- /dev/null
+++ b/test-suite/coqchk/include.v
@@ -0,0 +1,11 @@
+(* See https://github.com/coq/coq/issues/5747 *)
+Module Type S.
+End S.
+
+Module N.
+Inductive I := .
+End N.
+
+Module M : S.
+ Include N.
+End M.
diff --git a/test-suite/coqchk/primproj2.v b/test-suite/coqchk/primproj2.v
new file mode 100644
index 00000000..f73c627e
--- /dev/null
+++ b/test-suite/coqchk/primproj2.v
@@ -0,0 +1,10 @@
+Set Primitive Projections.
+
+Record Pack (A : Type) := pack { unpack : A }.
+
+Definition p : Pack bool.
+Proof.
+refine (pack _ true).
+Qed.
+
+Definition boom : unpack bool p = let u := unpack _ in u p := eq_refl.
diff --git a/test-suite/coqchk/univ.v b/test-suite/coqchk/univ.v
index 84a4009d..21633861 100644
--- a/test-suite/coqchk/univ.v
+++ b/test-suite/coqchk/univ.v
@@ -33,3 +33,57 @@ Inductive finite_of_order T (D : T -> Type) (n : natural) :=
(rank_injective : injective_in T natural D rank)
(rank_onto :
forall i, equivalent (less_than i n) (in_image T natural D rank i)).
+
+(* Constraints *)
+Universes i j.
+Inductive constraint1 : (Type -> Type) -> Type := mk_constraint1 : constraint1 (fun x : Type@{i} => (x : Type@{j})).
+Constraint i < j.
+Inductive constraint2 : Type@{j} := mkc2 (_ : Type@{i}).
+Universes i' j'.
+Constraint i' = j'.
+Inductive constraint3 : (Type -> Type) -> Type := mk_constraint3 : constraint3 (fun x : Type@{i'} => (x : Type@{j'})).
+Inductive constraint4 : (Type -> Type) -> Type
+ := mk_constraint4 : let U1 := Type in
+ let U2 := Type in
+ constraint4 (fun x : U1 => (x : U2)).
+
+Module CMP_CON.
+ (* Comparison of opaque constants MUST be up to the universe graph.
+ See #6798. *)
+ Universe big.
+
+ Polymorphic Lemma foo@{u} : Type@{big}.
+ Proof. exact Type@{u}. Qed.
+
+ Universes U V.
+
+ Definition yo : foo@{U} = foo@{V} := eq_refl.
+End CMP_CON.
+
+Set Universe Polymorphism.
+
+Module POLY_SUBTYP.
+
+ Module Type T.
+ Axiom foo : Type.
+ Parameter bar@{u v|u = v} : foo@{u}.
+ End T.
+
+ Module M.
+ Axiom foo : Type.
+ Axiom bar@{u v|u = v} : foo@{v}.
+ End M.
+
+ Module F (A:T). End F.
+
+ Module X := F M.
+
+End POLY_SUBTYP.
+
+Module POLY_IND.
+
+ Polymorphic Inductive ind@{u v | u < v} : Prop := .
+
+ Polymorphic Definition cst@{u v | v < u} := Prop.
+
+End POLY_IND.
diff --git a/test-suite/coqdoc/bug5648.html.out b/test-suite/coqdoc/bug5648.html.out
new file mode 100644
index 00000000..5c5a2dc2
--- /dev/null
+++ b/test-suite/coqdoc/bug5648.html.out
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link href="coqdoc.css" rel="stylesheet" type="text/css" />
+<title>Coqdoc.bug5648</title>
+</head>
+
+<body>
+
+<div id="page">
+
+<div id="header">
+</div>
+
+<div id="main">
+
+<h1 class="libtitle">Library Coqdoc.bug5648</h1>
+
+<div class="code">
+<span class="id" title="keyword">Lemma</span> <a name="a"><span class="id" title="lemma">a</span></a> : <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Logic.html#True"><span class="id" title="inductive">True</span></a>.<br/>
+<span class="id" title="keyword">Proof</span>.<br/>
+<span class="id" title="tactic">auto</span>.<br/>
+<span class="id" title="keyword">Qed</span>.<br/>
+
+<br/>
+<span class="id" title="keyword">Variant</span> <a name="t"><span class="id" title="inductive">t</span></a> :=<br/>
+| <a name="A"><span class="id" title="constructor">A</span></a> | <a name="Add"><span class="id" title="constructor">Add</span></a> | <a name="G"><span class="id" title="constructor">G</span></a> | <a name="Goal"><span class="id" title="constructor">Goal</span></a> | <a name="L"><span class="id" title="constructor">L</span></a> | <a name="Lemma"><span class="id" title="constructor">Lemma</span></a> | <a name="P"><span class="id" title="constructor">P</span></a> | <a name="Proof"><span class="id" title="constructor">Proof</span></a> .<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="d"><span class="id" title="definition">d</span></a> <span class="id" title="var">x</span> :=<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">match</span> <a class="idref" href="Coqdoc.bug5648.html#x"><span class="id" title="variable">x</span></a> <span class="id" title="keyword">with</span><br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#A"><span class="id" title="constructor">A</span></a> ⇒ 0<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#Add"><span class="id" title="constructor">Add</span></a> ⇒ 1<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#G"><span class="id" title="constructor">G</span></a> ⇒ 2<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#Goal"><span class="id" title="constructor">Goal</span></a> ⇒ 3<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#L"><span class="id" title="constructor">L</span></a> ⇒ 4<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#Lemma"><span class="id" title="constructor">Lemma</span></a> ⇒ 5<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#P"><span class="id" title="constructor">P</span></a> ⇒ 6<br/>
+&nbsp;&nbsp;| <a class="idref" href="Coqdoc.bug5648.html#Proof"><span class="id" title="constructor">Proof</span></a> ⇒ 7<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">end</span>.<br/>
+</div>
+</div>
+
+<div id="footer">
+<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a>
+</div>
+
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/test-suite/coqdoc/bug5648.tex.out b/test-suite/coqdoc/bug5648.tex.out
new file mode 100644
index 00000000..82f7da23
--- /dev/null
+++ b/test-suite/coqdoc/bug5648.tex.out
@@ -0,0 +1,59 @@
+\documentclass[12pt]{report}
+\usepackage[utf8x]{inputenc}
+
+%Warning: tipa declares many non-standard macros used by utf8x to
+%interpret utf8 characters but extra packages might have to be added
+%such as "textgreek" for Greek letters not already in tipa
+%or "stmaryrd" for mathematical symbols.
+%Utf8 codes missing a LaTeX interpretation can be defined by using
+%\DeclareUnicodeCharacter{code}{interpretation}.
+%Use coqdoc's option -p to add new packages or declarations.
+\usepackage{tipa}
+
+\usepackage[T1]{fontenc}
+\usepackage{fullpage}
+\usepackage{coqdoc}
+\usepackage{amsmath,amssymb}
+\usepackage{url}
+\begin{document}
+\coqlibrary{Coqdoc.bug5648}{Library }{Coqdoc.bug5648}
+
+\begin{coqdoccode}
+\coqdocnoindent
+\coqdockw{Lemma} \coqdef{Coqdoc.bug5648.a}{a}{\coqdoclemma{a}} : \coqexternalref{True}{http://coq.inria.fr/stdlib/Coq.Init.Logic}{\coqdocinductive{True}}.\coqdoceol
+\coqdocnoindent
+\coqdockw{Proof}.\coqdoceol
+\coqdocnoindent
+\coqdoctac{auto}.\coqdoceol
+\coqdocnoindent
+\coqdockw{Qed}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Variant} \coqdef{Coqdoc.bug5648.t}{t}{\coqdocinductive{t}} :=\coqdoceol
+\coqdocnoindent
+\ensuremath{|} \coqdef{Coqdoc.bug5648.A}{A}{\coqdocconstructor{A}} \ensuremath{|} \coqdef{Coqdoc.bug5648.Add}{Add}{\coqdocconstructor{Add}} \ensuremath{|} \coqdef{Coqdoc.bug5648.G}{G}{\coqdocconstructor{G}} \ensuremath{|} \coqdef{Coqdoc.bug5648.Goal}{Goal}{\coqdocconstructor{Goal}} \ensuremath{|} \coqdef{Coqdoc.bug5648.L}{L}{\coqdocconstructor{L}} \ensuremath{|} \coqdef{Coqdoc.bug5648.Lemma}{Lemma}{\coqdocconstructor{Lemma}} \ensuremath{|} \coqdef{Coqdoc.bug5648.P}{P}{\coqdocconstructor{P}} \ensuremath{|} \coqdef{Coqdoc.bug5648.Proof}{Proof}{\coqdocconstructor{Proof}} .\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.bug5648.d}{d}{\coqdocdefinition{d}} \coqdocvar{x} :=\coqdoceol
+\coqdocindent{1.00em}
+\coqdockw{match} \coqdocvariable{x} \coqdockw{with}\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.A}{\coqdocconstructor{A}} \ensuremath{\Rightarrow} 0\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.Add}{\coqdocconstructor{Add}} \ensuremath{\Rightarrow} 1\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.G}{\coqdocconstructor{G}} \ensuremath{\Rightarrow} 2\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.Goal}{\coqdocconstructor{Goal}} \ensuremath{\Rightarrow} 3\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.L}{\coqdocconstructor{L}} \ensuremath{\Rightarrow} 4\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.Lemma}{\coqdocconstructor{Lemma}} \ensuremath{\Rightarrow} 5\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.P}{\coqdocconstructor{P}} \ensuremath{\Rightarrow} 6\coqdoceol
+\coqdocindent{1.00em}
+\ensuremath{|} \coqref{Coqdoc.bug5648.Proof}{\coqdocconstructor{Proof}} \ensuremath{\Rightarrow} 7\coqdoceol
+\coqdocindent{1.00em}
+\coqdockw{end}.\coqdoceol
+\end{coqdoccode}
+\end{document}
diff --git a/test-suite/coqdoc/bug5648.v b/test-suite/coqdoc/bug5648.v
new file mode 100644
index 00000000..9b62dd1e
--- /dev/null
+++ b/test-suite/coqdoc/bug5648.v
@@ -0,0 +1,19 @@
+Lemma a : True.
+Proof.
+auto.
+Qed.
+
+Variant t :=
+| A | Add | G | Goal | L | Lemma | P | Proof .
+
+Definition d x :=
+ match x with
+ | A => 0
+ | Add => 1
+ | G => 2
+ | Goal => 3
+ | L => 4
+ | Lemma => 5
+ | P => 6
+ | Proof => 7
+ end.
diff --git a/test-suite/coqdoc/bug5700.html.out b/test-suite/coqdoc/bug5700.html.out
new file mode 100644
index 00000000..b96fc628
--- /dev/null
+++ b/test-suite/coqdoc/bug5700.html.out
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link href="coqdoc.css" rel="stylesheet" type="text/css" />
+<title>Coqdoc.bug5700</title>
+</head>
+
+<body>
+
+<div id="page">
+
+<div id="header">
+</div>
+
+<div id="main">
+
+<h1 class="libtitle">Library Coqdoc.bug5700</h1>
+
+<div class="code">
+</div>
+
+<div class="doc">
+<pre>foo (* bar *) </pre>
+
+</div>
+<div class="code">
+<span class="id" title="keyword">Definition</span> <a name="const1"><span class="id" title="definition">const1</span></a> := 1.<br/>
+
+<br/>
+</div>
+
+<div class="doc">
+<pre>more (* nested (* comments *) within verbatim *) </pre>
+
+</div>
+<div class="code">
+<span class="id" title="keyword">Definition</span> <a name="const2"><span class="id" title="definition">const2</span></a> := 2.<br/>
+</div>
+</div>
+
+<div id="footer">
+<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a>
+</div>
+
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/test-suite/coqdoc/bug5700.tex.out b/test-suite/coqdoc/bug5700.tex.out
new file mode 100644
index 00000000..1a1af5df
--- /dev/null
+++ b/test-suite/coqdoc/bug5700.tex.out
@@ -0,0 +1,34 @@
+\documentclass[12pt]{report}
+\usepackage[utf8x]{inputenc}
+
+%Warning: tipa declares many non-standard macros used by utf8x to
+%interpret utf8 characters but extra packages might have to be added
+%such as "textgreek" for Greek letters not already in tipa
+%or "stmaryrd" for mathematical symbols.
+%Utf8 codes missing a LaTeX interpretation can be defined by using
+%\DeclareUnicodeCharacter{code}{interpretation}.
+%Use coqdoc's option -p to add new packages or declarations.
+\usepackage{tipa}
+
+\usepackage[T1]{fontenc}
+\usepackage{fullpage}
+\usepackage{coqdoc}
+\usepackage{amsmath,amssymb}
+\usepackage{url}
+\begin{document}
+\coqlibrary{Coqdoc.bug5700}{Library }{Coqdoc.bug5700}
+
+\begin{coqdoccode}
+\end{coqdoccode}
+\begin{verbatim}foo (* bar *) \end{verbatim}
+ \begin{coqdoccode}
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.bug5700.const1}{const1}{\coqdocdefinition{const1}} := 1.\coqdoceol
+\coqdocemptyline
+\end{coqdoccode}
+\begin{verbatim}more (* nested (* comments *) within verbatim *) \end{verbatim}
+ \begin{coqdoccode}
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.bug5700.const2}{const2}{\coqdocdefinition{const2}} := 2.\coqdoceol
+\end{coqdoccode}
+\end{document}
diff --git a/test-suite/coqdoc/bug5700.v b/test-suite/coqdoc/bug5700.v
new file mode 100644
index 00000000..839034a4
--- /dev/null
+++ b/test-suite/coqdoc/bug5700.v
@@ -0,0 +1,5 @@
+(** << foo (* bar *) >> *)
+Definition const1 := 1.
+
+(** << more (* nested (* comments *) within verbatim *) >> *)
+Definition const2 := 2.
diff --git a/test-suite/coqdoc/links.html.out b/test-suite/coqdoc/links.html.out
new file mode 100644
index 00000000..5e4b676c
--- /dev/null
+++ b/test-suite/coqdoc/links.html.out
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link href="coqdoc.css" rel="stylesheet" type="text/css" />
+<title>Coqdoc.links</title>
+</head>
+
+<body>
+
+<div id="page">
+
+<div id="header">
+</div>
+
+<div id="main">
+
+<h1 class="libtitle">Library Coqdoc.links</h1>
+
+<div class="code">
+</div>
+
+<div class="doc">
+Various checks for coqdoc
+
+<div class="paragraph"> </div>
+
+<ul class="doclist">
+<li> symbols should not be inlined in string g
+
+</li>
+<li> links to both kinds of notations in a' should work to the right notation
+
+</li>
+<li> with utf8 option, forall must be unicode
+
+</li>
+<li> splitting between symbols and ident should be correct in a' and c
+
+</li>
+<li> ".." should be rendered correctly
+
+</li>
+</ul>
+
+</div>
+<div class="code">
+
+<br/>
+<span class="id" title="keyword">Require</span> <span class="id" title="keyword">Import</span> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Strings.String.html#"><span class="id" title="library">String</span></a>.<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="g"><span class="id" title="definition">g</span></a> := "dfjkh""sdfhj forall &lt;&gt; * ~"%<span class="id" title="var">string</span>.<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="a"><span class="id" title="definition">a</span></a> (<span class="id" title="var">b</span>: <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) := <a class="idref" href="Coqdoc.links.html#b"><span class="id" title="variable">b</span></a>.<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="f"><span class="id" title="definition">f</span></a> := <span class="id" title="keyword">∀</span> <span class="id" title="var">C</span>:<span class="id" title="keyword">Prop</span>, <a class="idref" href="Coqdoc.links.html#C"><span class="id" title="variable">C</span></a>.<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">&quot;</span></a>n ++ m" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#plus"><span class="id" title="abbreviation">plus</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span>).<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">&quot;</span></a>n ++ m" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#mult"><span class="id" title="abbreviation">mult</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span>).
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="6b97e27793a3d22f5c0d1dd63170fd68"><span class="id" title="notation">&quot;</span></a>n ** m" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#plus"><span class="id" title="abbreviation">plus</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span>) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 60).<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="3e01fbae4590c7b7699ff99ce61580e1"><span class="id" title="notation">&quot;</span></a>n ▵ m" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#plus"><span class="id" title="abbreviation">plus</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span>) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 60).<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">&quot;</span></a>n '_' ++ 'x' m" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#plus"><span class="id" title="abbreviation">plus</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span>) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 3).<br/>
+
+<br/>
+<span class="id" title="keyword">Inductive</span> <a name="eq"><span class="id" title="inductive">eq</span></a> (<span class="id" title="var">A</span>:<span class="id" title="keyword">Type</span>) (<span class="id" title="var">x</span>:<a class="idref" href="Coqdoc.links.html#A"><span class="id" title="variable">A</span></a>) : <span class="id" title="var">A</span> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Prop</span> := <a name="eq_refl"><span class="id" title="constructor">eq_refl</span></a> : <a class="idref" href="Coqdoc.links.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="Coqdoc.links.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="Coqdoc.links.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="Coqdoc.links.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:&gt;</span></a><a class="idref" href="Coqdoc.links.html#A"><span class="id" title="variable">A</span></a><br/>
+<br/>
+<span class="id" title="keyword">where</span> <a name="8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">&quot;</span></a>x = y :&gt; A" := (@<a class="idref" href="Coqdoc.links.html#eq"><span class="id" title="inductive">eq</span></a> <span class="id" title="var">A</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span>) : <span class="id" title="var">type_scope</span>.<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="eq0"><span class="id" title="definition">eq0</span></a> := 0 <a class="idref" href="Coqdoc.links.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> 0 <a class="idref" href="Coqdoc.links.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:&gt;</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="548d1059c499c9b2a9b95b07e68c2090"><span class="id" title="notation">&quot;</span></a>( x # y ; .. ; z )" := (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#pair"><span class="id" title="constructor">pair</span></a> .. (<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#pair"><span class="id" title="constructor">pair</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span>) .. <span class="id" title="var">z</span>).<br/>
+
+<br/>
+<span class="id" title="keyword">Definition</span> <a name="9f5a1d89cbd4d38f5e289576db7123d1"><span class="id" title="definition">b_α</span></a> := <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">(</span></a><a class="idref" href="Coqdoc.links.html#548d1059c499c9b2a9b95b07e68c2090"><span class="id" title="notation">(</span></a>0<a class="idref" href="Coqdoc.links.html#548d1059c499c9b2a9b95b07e68c2090"><span class="id" title="notation">#</span></a>0<a class="idref" href="Coqdoc.links.html#548d1059c499c9b2a9b95b07e68c2090"><span class="id" title="notation">;</span></a>0<a class="idref" href="Coqdoc.links.html#548d1059c499c9b2a9b95b07e68c2090"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">(</span></a>0 <a class="idref" href="Coqdoc.links.html#6b97e27793a3d22f5c0d1dd63170fd68"><span class="id" title="notation">**</span></a> 0<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">))</span></a>.<br/>
+
+<br/>
+<span class="id" title="keyword">Notation</span> <a name="h"><span class="id" title="abbreviation">h</span></a> := <a class="idref" href="Coqdoc.links.html#a"><span class="id" title="definition">a</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">Section</span> <a name="test"><span class="id" title="section">test</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Variables</span> <a name="test.b'"><span class="id" title="variable">b'</span></a> <a name="test.b2"><span class="id" title="variable">b2</span></a>: <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Notation</span> <a name="4ab0449b36c75cf94e08c5822ea83e3d"><span class="id" title="notation">&quot;</span></a>n + m" := (<span class="id" title="var">n</span> <a class="idref" href="Coqdoc.links.html#3e01fbae4590c7b7699ff99ce61580e1"><span class="id" title="notation">▵</span></a> <span class="id" title="var">m</span>) : <span class="id" title="var">my_scope</span>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Delimit</span> <span class="id" title="keyword">Scope</span> <span class="id" title="var">my_scope</span> <span class="id" title="keyword">with</span> <span class="id" title="var">my</span>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Notation</span> <a name="l"><span class="id" title="abbreviation">l</span></a> := 0.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Definition</span> <a name="ab410a966ac148e9b78c65c6cdf301fd"><span class="id" title="definition">α</span></a> := (0 <a class="idref" href="Coqdoc.links.html#4ab0449b36c75cf94e08c5822ea83e3d"><span class="id" title="notation">+</span></a> <a class="idref" href="Coqdoc.links.html#l"><span class="id" title="abbreviation">l</span></a>)%<span class="id" title="var">my</span>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Definition</span> <a name="a'"><span class="id" title="definition">a'</span></a> <span class="id" title="var">b</span> := <a class="idref" href="Coqdoc.links.html#test.b'"><span class="id" title="variable">b'</span></a><a class="idref" href="Coqdoc.links.html#1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">++</span></a>0<a class="idref" href="Coqdoc.links.html#1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">++</span></a><a class="idref" href="Coqdoc.links.html#test.b2"><span class="id" title="variable">b2</span></a> <a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">_</span></a> <a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">++</span></a><a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">x</span></a> <a class="idref" href="Coqdoc.links.html#b"><span class="id" title="variable">b</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Definition</span> <a name="c"><span class="id" title="definition">c</span></a> := <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Specif.html#5bf2050e90b21ebc82dc5463d1ba338e"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Logic.html#True"><span class="id" title="inductive">True</span></a><a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Specif.html#5bf2050e90b21ebc82dc5463d1ba338e"><span class="id" title="notation">}+{</span></a><a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Logic.html#True"><span class="id" title="inductive">True</span></a><a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Specif.html#5bf2050e90b21ebc82dc5463d1ba338e"><span class="id" title="notation">}</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Definition</span> <a name="d"><span class="id" title="definition">d</span></a> := (1<a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a>2)%<span class="id" title="var">nat</span>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Lemma</span> <a name="e"><span class="id" title="lemma">e</span></a> : <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="var">Admitted</span>.<br/>
+
+<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">End</span> <a class="idref" href="Coqdoc.links.html#test"><span class="id" title="section">test</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">Section</span> <a name="test2"><span class="id" title="section">test2</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Variables</span> <a name="test2.b'"><span class="id" title="variable">b'</span></a>: <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Section</span> <a name="test2.test"><span class="id" title="section">test</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Variables</span> <a name="test2.test.b2"><span class="id" title="variable">b2</span></a>: <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">Definition</span> <a name="a''"><span class="id" title="definition">a''</span></a> <span class="id" title="var">b</span> := <a class="idref" href="Coqdoc.links.html#test2.b'"><span class="id" title="variable">b'</span></a> <a class="idref" href="Coqdoc.links.html#1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">++</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Datatypes.html#O"><span class="id" title="constructor">O</span></a> <a class="idref" href="Coqdoc.links.html#1a1c7f13320341c3638e9edcc3e6389d"><span class="id" title="notation">++</span></a> <a class="idref" href="Coqdoc.links.html#test2.test.b2"><span class="id" title="variable">b2</span></a> <a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">_</span></a> <a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">++</span></a> <a class="idref" href="Coqdoc.links.html#347f39a83bf7d45676cff54fd7e8966f"><span class="id" title="notation">x</span></a> <a class="idref" href="Coqdoc.links.html#b"><span class="id" title="variable">b</span></a> <a class="idref" href="http://coq.inria.fr/stdlib/Coq.Init.Peano.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="Coqdoc.links.html#h"><span class="id" title="abbreviation">h</span></a> 0.<br/>
+
+<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="id" title="keyword">End</span> <a class="idref" href="Coqdoc.links.html#test2.test"><span class="id" title="section">test</span></a>.<br/>
+
+<br/>
+&nbsp;&nbsp;<span class="id" title="keyword">End</span> <a class="idref" href="Coqdoc.links.html#test2"><span class="id" title="section">test2</span></a>.<br/>
+
+<br/>
+</div>
+
+<div class="doc">
+skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+<div class="paragraph"> </div>
+
+ skip
+</div>
+<div class="code">
+
+<br/>
+</div>
+</div>
+
+<div id="footer">
+<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a>
+</div>
+
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/test-suite/coqdoc/links.tex.out b/test-suite/coqdoc/links.tex.out
new file mode 100644
index 00000000..f42db99d
--- /dev/null
+++ b/test-suite/coqdoc/links.tex.out
@@ -0,0 +1,172 @@
+\documentclass[12pt]{report}
+\usepackage[utf8x]{inputenc}
+
+%Warning: tipa declares many non-standard macros used by utf8x to
+%interpret utf8 characters but extra packages might have to be added
+%such as "textgreek" for Greek letters not already in tipa
+%or "stmaryrd" for mathematical symbols.
+%Utf8 codes missing a LaTeX interpretation can be defined by using
+%\DeclareUnicodeCharacter{code}{interpretation}.
+%Use coqdoc's option -p to add new packages or declarations.
+\usepackage{tipa}
+
+\usepackage[T1]{fontenc}
+\usepackage{fullpage}
+\usepackage{coqdoc}
+\usepackage{amsmath,amssymb}
+\usepackage{url}
+\begin{document}
+\coqlibrary{Coqdoc.links}{Library }{Coqdoc.links}
+
+\begin{coqdoccode}
+\end{coqdoccode}
+Various checks for coqdoc
+
+
+
+\begin{itemize}
+\item symbols should not be inlined in string g
+
+\item links to both kinds of notations in a' should work to the right notation
+
+\item with utf8 option, forall must be unicode
+
+\item splitting between symbols and ident should be correct in a' and c
+
+\item ``..'' should be rendered correctly
+
+\end{itemize}
+\begin{coqdoccode}
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Require} \coqdockw{Import} \coqexternalref{}{http://coq.inria.fr/stdlib/Coq.Strings.String}{\coqdoclibrary{String}}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.links.g}{g}{\coqdocdefinition{g}} := "dfjkh""sdfhj forall <> * \~{}"\%\coqdocvar{string}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.links.a}{a}{\coqdocdefinition{a}} (\coqdocvar{b}: \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}) := \coqdocvariable{b}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.links.f}{f}{\coqdocdefinition{f}} := \coqdockw{\ensuremath{\forall}} \coqdocvar{C}:\coqdockw{Prop}, \coqdocvariable{C}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::x '++' x}{"}{"}n ++ m" := (\coqexternalref{plus}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocabbreviation{plus}} \coqdocvar{n} \coqdocvar{m}).\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::x '++' x}{"}{"}n ++ m" := (\coqexternalref{mult}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocabbreviation{mult}} \coqdocvar{n} \coqdocvar{m}). \coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::x '**' x}{"}{"}n ** m" := (\coqexternalref{plus}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocabbreviation{plus}} \coqdocvar{n} \coqdocvar{m}) (\coqdoctac{at} \coqdockw{level} 60).\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::x 'xE2x96xB5' x}{"}{"}n ▵ m" := (\coqexternalref{plus}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocabbreviation{plus}} \coqdocvar{n} \coqdocvar{m}) (\coqdoctac{at} \coqdockw{level} 60).\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::x ''' ''' '++' 'x' x}{"}{"}n '\_' ++ 'x' m" := (\coqexternalref{plus}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocabbreviation{plus}} \coqdocvar{n} \coqdocvar{m}) (\coqdoctac{at} \coqdockw{level} 3).\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Inductive} \coqdef{Coqdoc.links.eq}{eq}{\coqdocinductive{eq}} (\coqdocvar{A}:\coqdockw{Type}) (\coqdocvar{x}:\coqdocvariable{A}) : \coqdocvar{A} \coqexternalref{:type scope:x '->' x}{http://coq.inria.fr/stdlib/Coq.Init.Logic}{\coqdocnotation{\ensuremath{\rightarrow}}} \coqdockw{Prop} := \coqdef{Coqdoc.links.eq refl}{eq\_refl}{\coqdocconstructor{eq\_refl}} : \coqdocvariable{x} \coqref{Coqdoc.links.:type scope:x '=' x ':>' x}{\coqdocnotation{=}} \coqdocvariable{x} \coqref{Coqdoc.links.:type scope:x '=' x ':>' x}{\coqdocnotation{:>}}\coqdocvariable{A}\coqdoceol
+\coqdocnoindent
+\coqdoceol
+\coqdocnoindent
+\coqdockw{where} \coqdef{Coqdoc.links.:type scope:x '=' x ':>' x}{"}{"}x = y :> A" := (@\coqref{Coqdoc.links.eq}{\coqdocinductive{eq}} \coqdocvar{A} \coqdocvar{x} \coqdocvar{y}) : \coqdocvar{type\_scope}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.links.eq0}{eq0}{\coqdocdefinition{eq0}} := 0 \coqref{Coqdoc.links.:type scope:x '=' x ':>' x}{\coqdocnotation{=}} 0 \coqref{Coqdoc.links.:type scope:x '=' x ':>' x}{\coqdocnotation{:>}} \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.::'(' x 'x23' x ';' '..' ';' x ')'}{"}{"}( x \# y ; .. ; z )" := (\coqexternalref{pair}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocconstructor{pair}} .. (\coqexternalref{pair}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocconstructor{pair}} \coqdocvar{x} \coqdocvar{y}) .. \coqdocvar{z}).\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Definition} \coqdef{Coqdoc.links.b xCExB1}{b\_α}{\coqdocdefinition{b\_α}} := \coqexternalref{:core scope:'(' x ',' x ',' '..' ',' x ')'}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocnotation{(}}\coqref{Coqdoc.links.::'(' x 'x23' x ';' '..' ';' x ')'}{\coqdocnotation{(}}0\coqref{Coqdoc.links.::'(' x 'x23' x ';' '..' ';' x ')'}{\coqdocnotation{\#}}0\coqref{Coqdoc.links.::'(' x 'x23' x ';' '..' ';' x ')'}{\coqdocnotation{;}}0\coqref{Coqdoc.links.::'(' x 'x23' x ';' '..' ';' x ')'}{\coqdocnotation{)}} \coqexternalref{:core scope:'(' x ',' x ',' '..' ',' x ')'}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocnotation{,}} \coqexternalref{:core scope:'(' x ',' x ',' '..' ',' x ')'}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocnotation{(}}0 \coqref{Coqdoc.links.::x '**' x}{\coqdocnotation{**}} 0\coqexternalref{:core scope:'(' x ',' x ',' '..' ',' x ')'}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocnotation{))}}.\coqdoceol
+\coqdocemptyline
+\coqdocnoindent
+\coqdockw{Notation} \coqdef{Coqdoc.links.h}{h}{\coqdocabbreviation{h}} := \coqref{Coqdoc.links.a}{\coqdocdefinition{a}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{1.00em}
+\coqdockw{Section} \coqdef{Coqdoc.links.test}{test}{\coqdocsection{test}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Variables} \coqdef{Coqdoc.links.test.b'}{b'}{\coqdocvariable{b'}} \coqdef{Coqdoc.links.test.b2}{b2}{\coqdocvariable{b2}}: \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Notation} \coqdef{Coqdoc.links.test.:my scope:x '+' x}{"}{"}n + m" := (\coqdocvar{n} \coqref{Coqdoc.links.::x 'xE2x96xB5' x}{\coqdocnotation{▵}} \coqdocvar{m}) : \coqdocvar{my\_scope}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Delimit} \coqdockw{Scope} \coqdocvar{my\_scope} \coqdockw{with} \coqdocvar{my}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Notation} \coqdef{Coqdoc.links.l}{l}{\coqdocabbreviation{l}} := 0.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Definition} \coqdef{Coqdoc.links.xCExB1}{α}{\coqdocdefinition{α}} := (0 \coqref{Coqdoc.links.test.:my scope:x '+' x}{\coqdocnotation{+}} \coqref{Coqdoc.links.l}{\coqdocabbreviation{l}})\%\coqdocvar{my}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Definition} \coqdef{Coqdoc.links.a'}{a'}{\coqdocdefinition{a'}} \coqdocvar{b} := \coqdocvariable{b'}\coqref{Coqdoc.links.::x '++' x}{\coqdocnotation{++}}0\coqref{Coqdoc.links.::x '++' x}{\coqdocnotation{++}}\coqdocvariable{b2} \coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{\_}} \coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{++}}\coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{x}} \coqdocvariable{b}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Definition} \coqdef{Coqdoc.links.c}{c}{\coqdocdefinition{c}} := \coqexternalref{:type scope:'x7B' x 'x7D' '+' 'x7B' x 'x7D'}{http://coq.inria.fr/stdlib/Coq.Init.Specif}{\coqdocnotation{\{}}\coqexternalref{True}{http://coq.inria.fr/stdlib/Coq.Init.Logic}{\coqdocinductive{True}}\coqexternalref{:type scope:'x7B' x 'x7D' '+' 'x7B' x 'x7D'}{http://coq.inria.fr/stdlib/Coq.Init.Specif}{\coqdocnotation{\}+\{}}\coqexternalref{True}{http://coq.inria.fr/stdlib/Coq.Init.Logic}{\coqdocinductive{True}}\coqexternalref{:type scope:'x7B' x 'x7D' '+' 'x7B' x 'x7D'}{http://coq.inria.fr/stdlib/Coq.Init.Specif}{\coqdocnotation{\}}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Definition} \coqdef{Coqdoc.links.d}{d}{\coqdocdefinition{d}} := (1\coqexternalref{:nat scope:x '+' x}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocnotation{+}}2)\%\coqdocvar{nat}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Lemma} \coqdef{Coqdoc.links.e}{e}{\coqdoclemma{e}} : \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}} \coqexternalref{:type scope:x '+' x}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocnotation{+}} \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}.\coqdoceol
+\coqdocindent{2.00em}
+\coqdocvar{Admitted}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{1.00em}
+\coqdockw{End} \coqref{Coqdoc.links.test}{\coqdocsection{test}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{1.00em}
+\coqdockw{Section} \coqdef{Coqdoc.links.test2}{test2}{\coqdocsection{test2}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Variables} \coqdef{Coqdoc.links.test2.b'}{b'}{\coqdocvariable{b'}}: \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{Section} \coqdef{Coqdoc.links.test2.test}{test}{\coqdocsection{test}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{3.00em}
+\coqdockw{Variables} \coqdef{Coqdoc.links.test2.test.b2}{b2}{\coqdocvariable{b2}}: \coqexternalref{nat}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocinductive{nat}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{3.00em}
+\coqdockw{Definition} \coqdef{Coqdoc.links.a''}{a'{}'}{\coqdocdefinition{a'{}'}} \coqdocvar{b} := \coqdocvariable{b'} \coqref{Coqdoc.links.::x '++' x}{\coqdocnotation{++}} \coqexternalref{O}{http://coq.inria.fr/stdlib/Coq.Init.Datatypes}{\coqdocconstructor{O}} \coqref{Coqdoc.links.::x '++' x}{\coqdocnotation{++}} \coqdocvariable{b2} \coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{\_}} \coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{++}} \coqref{Coqdoc.links.::x ''' ''' '++' 'x' x}{\coqdocnotation{x}} \coqdocvariable{b} \coqexternalref{:nat scope:x '+' x}{http://coq.inria.fr/stdlib/Coq.Init.Peano}{\coqdocnotation{+}} \coqref{Coqdoc.links.h}{\coqdocabbreviation{h}} 0.\coqdoceol
+\coqdocemptyline
+\coqdocindent{2.00em}
+\coqdockw{End} \coqref{Coqdoc.links.test2.test}{\coqdocsection{test}}.\coqdoceol
+\coqdocemptyline
+\coqdocindent{1.00em}
+\coqdockw{End} \coqref{Coqdoc.links.test2}{\coqdocsection{test2}}.\coqdoceol
+\coqdocemptyline
+\end{coqdoccode}
+skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip
+
+ skip \begin{coqdoccode}
+\coqdocemptyline
+\end{coqdoccode}
+\end{document}
diff --git a/test-suite/coqwc/BZ5637.out b/test-suite/coqwc/BZ5637.out
new file mode 100644
index 00000000..f0b5e4f7
--- /dev/null
+++ b/test-suite/coqwc/BZ5637.out
@@ -0,0 +1,2 @@
+ spec proof comments
+ 5 0 0 coqwc/BZ5637.v
diff --git a/test-suite/coqwc/BZ5637.v b/test-suite/coqwc/BZ5637.v
new file mode 100644
index 00000000..6428b10f
--- /dev/null
+++ b/test-suite/coqwc/BZ5637.v
@@ -0,0 +1,5 @@
+Local Obligation Tactic := idtac.
+Definition a := 1.
+Definition b := 1.
+Definition c := 1.
+Definition d := 1.
diff --git a/test-suite/coqwc/BZ5756.out b/test-suite/coqwc/BZ5756.out
new file mode 100644
index 00000000..039d1e50
--- /dev/null
+++ b/test-suite/coqwc/BZ5756.out
@@ -0,0 +1,2 @@
+ spec proof comments
+ 3 0 2 coqwc/BZ5756.v
diff --git a/test-suite/coqwc/BZ5756.v b/test-suite/coqwc/BZ5756.v
new file mode 100644
index 00000000..ccb12076
--- /dev/null
+++ b/test-suite/coqwc/BZ5756.v
@@ -0,0 +1,3 @@
+Definition myNextValue := 0. (* OK *)
+Definition x := myNextValue. (* not OK *)
+Definition y := 0.
diff --git a/test-suite/coqwc/false.out b/test-suite/coqwc/false.out
new file mode 100644
index 00000000..14c5713f
--- /dev/null
+++ b/test-suite/coqwc/false.out
@@ -0,0 +1,2 @@
+ spec proof comments
+ 3 3 1 coqwc/false.v
diff --git a/test-suite/coqwc/false.v b/test-suite/coqwc/false.v
new file mode 100644
index 00000000..640f9ea7
--- /dev/null
+++ b/test-suite/coqwc/false.v
@@ -0,0 +1,8 @@
+Axiom x : nat.
+
+Definition foo (x : nat) := x + 1.
+
+Lemma bar : False.
+ idtac.
+ idtac. (* truth is overrated *)
+Admitted.
diff --git a/test-suite/coqwc/next-obligation.out b/test-suite/coqwc/next-obligation.out
new file mode 100644
index 00000000..7a0fd777
--- /dev/null
+++ b/test-suite/coqwc/next-obligation.out
@@ -0,0 +1,2 @@
+ spec proof comments
+ 1 7 0 coqwc/next-obligation.v
diff --git a/test-suite/coqwc/next-obligation.v b/test-suite/coqwc/next-obligation.v
new file mode 100644
index 00000000..786df989
--- /dev/null
+++ b/test-suite/coqwc/next-obligation.v
@@ -0,0 +1,10 @@
+(* make sure all proof lines are counted *)
+
+Goal True.
+ Next Obligation.
+ idtac.
+ Next Obligation.
+ idtac.
+ Next Obligation.
+ idtac.
+Qed.
diff --git a/test-suite/coqwc/theorem.out b/test-suite/coqwc/theorem.out
new file mode 100644
index 00000000..d01507bf
--- /dev/null
+++ b/test-suite/coqwc/theorem.out
@@ -0,0 +1,2 @@
+ spec proof comments
+ 1 9 2 coqwc/theorem.v
diff --git a/test-suite/coqwc/theorem.v b/test-suite/coqwc/theorem.v
new file mode 100644
index 00000000..901c9074
--- /dev/null
+++ b/test-suite/coqwc/theorem.v
@@ -0,0 +1,10 @@
+Theorem foo : True.
+Proof.
+ idtac. (* comment *)
+ idtac.
+ idtac.
+ idtac. (* comment *)
+ idtac.
+ idtac.
+ auto.
+Qed.
diff --git a/test-suite/failure/Tauto.v b/test-suite/failure/Tauto.v
index d91d159d..81d5b635 100644
--- a/test-suite/failure/Tauto.v
+++ b/test-suite/failure/Tauto.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(**** Tactics Tauto and Intuition ****)
diff --git a/test-suite/failure/circular_subtyping.v b/test-suite/failure/circular_subtyping.v
index ceccd460..9eb7e3bc 100644
--- a/test-suite/failure/circular_subtyping.v
+++ b/test-suite/failure/circular_subtyping.v
@@ -7,4 +7,4 @@ Module NN <: T. Module M:=N. End NN.
Fail Module P <: T with Module M:=NN := NN.
Module F (X:S) (Y:T with Module M:=X). End F.
-Fail Module G := F N N. \ No newline at end of file
+Fail Module G := F N N.
diff --git a/test-suite/failure/clash_cons.v b/test-suite/failure/clash_cons.v
index b3fbff68..89299110 100644
--- a/test-suite/failure/clash_cons.v
+++ b/test-suite/failure/clash_cons.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Teste la verification d'unicite des noms de constr *)
diff --git a/test-suite/failure/cofixpoint.v b/test-suite/failure/cofixpoint.v
index cb39893f..d193dc48 100644
--- a/test-suite/failure/cofixpoint.v
+++ b/test-suite/failure/cofixpoint.v
@@ -12,4 +12,4 @@ Fail CoFixpoint loop : CoFalse :=
(cofix f := I with g := loop for g).
Fail CoFixpoint loop : CoFalse :=
- (cofix f := loop with g := I for f). \ No newline at end of file
+ (cofix f := loop with g := I for f).
diff --git a/test-suite/failure/fixpoint1.v b/test-suite/failure/fixpoint1.v
index c2b521c2..eb3d9452 100644
--- a/test-suite/failure/fixpoint1.v
+++ b/test-suite/failure/fixpoint1.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Fail Fixpoint PreParadox (u : unit) : False := PreParadox u.
(*Definition Paradox := PreParadox tt.*)
diff --git a/test-suite/failure/fixpointeta.v b/test-suite/failure/fixpointeta.v
new file mode 100644
index 00000000..9af71932
--- /dev/null
+++ b/test-suite/failure/fixpointeta.v
@@ -0,0 +1,70 @@
+
+Set Primitive Projections.
+
+Record R := C { p : nat }.
+(* R is defined
+p is defined *)
+
+Unset Primitive Projections.
+Record R' := C' { p' : nat }.
+
+
+
+Fail Definition f := fix f (x : R) : nat := p x.
+(** Not allowed to make fixpoint defs on (non-recursive) records
+ having eta *)
+
+Fail Definition f := fix f (x : R') : nat := p' x.
+(** Even without eta (R' is not primitive here), as long as they're
+ found to be BiFinite (non-recursive), we disallow it *)
+
+(*
+
+(* Subject reduction failure example, if we allowed fixpoints *)
+
+Set Primitive Projections.
+
+Record R := C { p : nat }.
+
+Definition f := fix f (x : R) : nat := p x.
+
+(* eta rule for R *)
+Definition Rtr (P : R -> Type) x (v : P (C (p x))) : P x
+ := v.
+
+Definition goal := forall x, f x = p x.
+
+(* when we compute the Rtr away typechecking will fail *)
+Definition thing : goal := fun x =>
+(Rtr (fun x => f x = p x) x (eq_refl _)).
+
+Definition thing' := Eval compute in thing.
+
+Fail Check (thing = thing').
+(*
+The command has indeed failed with message:
+The term "thing'" has type "forall x : R, (let (p) := x in p) = (let (p) := x in p)"
+while it is expected to have type "goal" (cannot unify "(let (p) := x in p) = (let (p) := x in p)"
+and "f x = p x").
+*)
+
+Definition thing_refl := eq_refl thing.
+
+Fail Definition thing_refl' := Eval compute in thing_refl.
+(*
+The command has indeed failed with message:
+Illegal application:
+The term "@eq_refl" of type "forall (A : Type) (x : A), x = x"
+cannot be applied to the terms
+ "forall x : R, (fix f (x0 : R) : nat := let (p) := x0 in p) x = (let (p) := x in p)" : "Prop"
+ "fun x : R => eq_refl" : "forall x : R, (let (p) := x in p) = (let (p) := x in p)"
+The 2nd term has type "forall x : R, (let (p) := x in p) = (let (p) := x in p)"
+which should be coercible to
+ "forall x : R, (fix f (x0 : R) : nat := let (p) := x0 in p) x = (let (p) := x in p)".
+ *)
+
+Definition more_refls : thing_refl = thing_refl.
+Proof.
+ compute. reflexivity.
+Fail Defined. Abort.
+ *)
diff --git a/test-suite/failure/guard-cofix.v b/test-suite/failure/guard-cofix.v
index eda4a186..3ae87705 100644
--- a/test-suite/failure/guard-cofix.v
+++ b/test-suite/failure/guard-cofix.v
@@ -40,4 +40,4 @@ Fail CoFixpoint loop' : CoFalse :=
Omega match eq_sym H in _ = T return T with eq_refl => loop' end
end.
-Fail Definition ff' : False := match loop' with CF _ t => t end. \ No newline at end of file
+Fail Definition ff' : False := match loop' with CF _ t => t end.
diff --git a/test-suite/failure/guard.v b/test-suite/failure/guard.v
index 8db27858..2a5ad778 100644
--- a/test-suite/failure/guard.v
+++ b/test-suite/failure/guard.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(*
Fixpoint F (n:nat) : False := F (match F n with end).
diff --git a/test-suite/failure/illtype1.v b/test-suite/failure/illtype1.v
index 8ed3af1c..ec43ea5f 100644
--- a/test-suite/failure/illtype1.v
+++ b/test-suite/failure/illtype1.v
@@ -1,8 +1,10 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Fail Check (S S).
diff --git a/test-suite/failure/int31.v b/test-suite/failure/int31.v
index b1d11224..ed4c9f9c 100644
--- a/test-suite/failure/int31.v
+++ b/test-suite/failure/int31.v
@@ -1,4 +1,4 @@
-Require Import Int31 BigN.
+Require Import Int31 Cyclic31.
Open Scope int31_scope.
diff --git a/test-suite/failure/positivity.v b/test-suite/failure/positivity.v
index 8089de2b..2798dcf9 100644
--- a/test-suite/failure/positivity.v
+++ b/test-suite/failure/positivity.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Negative occurrence *)
diff --git a/test-suite/failure/proofirrelevance.v b/test-suite/failure/proofirrelevance.v
index b62f9b68..bb9579d4 100644
--- a/test-suite/failure/proofirrelevance.v
+++ b/test-suite/failure/proofirrelevance.v
@@ -1,6 +1,5 @@
-(* This was working in version 8.1beta (bug in the Sort-polymorphism
- of inductive types), but this is inconsistent with classical logic
- in Prop *)
+(* This was working in version 8.1beta (bug in template polymorphism),
+ but this is inconsistent with classical logic in Prop *)
Inductive bool_in_prop : Type := hide : bool -> bool_in_prop
with bool : Type := true : bool | false : bool.
diff --git a/test-suite/failure/redef.v b/test-suite/failure/redef.v
index c8dc6303..981d1438 100644
--- a/test-suite/failure/redef.v
+++ b/test-suite/failure/redef.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Definition toto := Set.
Fail Definition toto := Set.
diff --git a/test-suite/failure/search.v b/test-suite/failure/search.v
index 648ab082..058c427c 100644
--- a/test-suite/failure/search.v
+++ b/test-suite/failure/search.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Fail SearchPattern (_ = _) outside n_existe_pas.
diff --git a/test-suite/failure/sortelim.v b/test-suite/failure/sortelim.v
index 2b3cf106..3d2eef6a 100644
--- a/test-suite/failure/sortelim.v
+++ b/test-suite/failure/sortelim.v
@@ -146,4 +146,4 @@ Qed.
Print Assumptions pandora.
-*) \ No newline at end of file
+*)
diff --git a/test-suite/ide/blocking-futures.fake b/test-suite/ide/blocking-futures.fake
index b63f09bc..541fb798 100644
--- a/test-suite/ide/blocking-futures.fake
+++ b/test-suite/ide/blocking-futures.fake
@@ -4,6 +4,7 @@
# Extraction will force the future computation, assert it is blocking
# Example courtesy of Jonathan (jonikelee)
#
+ADD { Require Coq.extraction.Extraction. }
ADD { Require Import List. }
ADD { Import ListNotations. }
ADD { Definition myrev{A}(l : list A) : {rl : list A | rl = rev l}. }
diff --git a/test-suite/ide/bug7088.fake b/test-suite/ide/bug7088.fake
new file mode 100644
index 00000000..e2a2aa52
--- /dev/null
+++ b/test-suite/ide/bug7088.fake
@@ -0,0 +1,13 @@
+ADD { Arguments id T x : rename. }
+ADD { Lemma foo : True. }
+ADD here { Proof. }
+ADD { exact 3. }
+ADD { Qed. }
+WAIT
+EDIT_AT here
+ADD { Arguments id FOO BAR : rename. }
+ADD { exact I. }
+ADD { Qed. }
+ADD { Arguments id T x : assert. }
+JOIN
+
diff --git a/test-suite/ide/load.fake b/test-suite/ide/load.fake
new file mode 100644
index 00000000..f6a7ef4d
--- /dev/null
+++ b/test-suite/ide/load.fake
@@ -0,0 +1,11 @@
+ADD revert { Load "output/load/Load_noproof.v". }
+ADD { Load "output/load/Load_proof.v". }
+ADD { Fail Load "output/load/Load_openproof.v". }
+WAIT
+QUERY { Check f. }
+QUERY { Check u. }
+EDIT_AT revert
+QUERY { Check f. }
+QUERY { Fail Check u. }
+JOIN
+
diff --git a/test-suite/ide/undo.v b/test-suite/ide/undo.v
deleted file mode 100644
index ea392055..00000000
--- a/test-suite/ide/undo.v
+++ /dev/null
@@ -1,103 +0,0 @@
-(* Here are a sequences of scripts to test interactively with undo and
- replay in coqide proof sessions *)
-
-(* Undoing arbitrary commands, as first step *)
-
-Theorem a : O=O. (* 2 *)
-Ltac f x := x. (* 1 * 3 *)
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing arbitrary commands, as non-first step *)
-
-Theorem b : O=O.
-assert True by trivial.
-Ltac g x := x.
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing declarations, as first step *)
-(* was bugged in 8.1 *)
-
-Theorem c : O=O.
-Inductive T : Type := I.
-trivial.
-Qed.
-
-(* Undoing declarations, as first step *)
-(* new in 8.2 *)
-
-Theorem d : O=O.
-Definition e := O.
-Definition f := O.
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing declarations, as non-first step *)
-(* new in 8.2 *)
-
-Theorem h : O=O.
-assert True by trivial.
-Definition i := O.
-Definition j := O.
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing declarations, interleaved with proof steps *)
-(* new in 8.2 *)
-
-Theorem k : O=O.
-assert True by trivial.
-Definition l := O.
-assert True by trivial.
-Definition m := O.
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing declarations, interleaved with proof steps and commands *)
-(* new in 8.2 *)
-
-Theorem n : O=O.
-assert True by trivial.
-Definition o := O.
-Ltac h x := x.
-assert True by trivial.
-Focus.
-Definition p := O.
-assert True by trivial.
-trivial.
-Qed.
-
-(* Undoing declarations, not in proof *)
-
-Definition q := O.
-Definition r := O.
-
-(* Bug 2082 : Follow the numbers *)
-(* Broken due to proof engine rewriting *)
-
-Variable A : Prop.
-Variable B : Prop.
-
-Axiom OR : A \/ B.
-
-Lemma MyLemma2 : True.
-proof.
-per cases of (A \/ B) by OR.
-suppose A.
- then (1 = 1).
- then H1 : thesis. (* 4 *)
- thus thesis by H1. (* 2 *)
-suppose B. (* 1 *) (* 3 *)
- then (1 = 1).
- then H2 : thesis.
- thus thesis by H2.
-end cases.
-end proof.
-Qed. (* 5 if you made it here, there is no regression *)
-
diff --git a/test-suite/ide/undo011.fake b/test-suite/ide/undo011.fake
deleted file mode 100644
index 0be439b2..00000000
--- a/test-suite/ide/undo011.fake
+++ /dev/null
@@ -1,34 +0,0 @@
-# Script simulating a dialog between coqide and coqtop -ideslave
-# Run it via fake_ide
-#
-# Bug 2082
-# Broken due to proof engine rewriting
-#
-ADD { Variable A : Prop. }
-ADD { Variable B : Prop. }
-ADD { Axiom OR : A \/ B. }
-ADD { Lemma MyLemma2 : True. }
-ADD { proof. }
-ADD { per cases of (A \/ B) by OR. }
-ADD { suppose A. }
-ADD { then (1 = 1). }
-ADD there { then H1 : thesis. }
-ADD here { thus thesis by H1. }
-ADD { suppose B. }
-QUERY { Show. }
-EDIT_AT here
-# <replay>
-ADD { suppose B. }
-# </replay>
-EDIT_AT there
-# <replay>
-ADD { thus thesis by H1. }
-ADD { suppose B. }
-# </replay>
-QUERY { Show. }
-ADD { then (1 = 1). }
-ADD { then H2 : thesis. }
-ADD { thus thesis by H2. }
-ADD { end cases. }
-ADD { end proof. }
-ADD { Qed. }
diff --git a/test-suite/ideal-features/Apply.v b/test-suite/ideal-features/Apply.v
index c8e9af21..14eb1e3f 100644
--- a/test-suite/ideal-features/Apply.v
+++ b/test-suite/ideal-features/Apply.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* This needs step by step unfolding *)
diff --git a/test-suite/ideal-features/complexity/evars_subst.v b/test-suite/ideal-features/complexity/evars_subst.v
index b3dfb33c..b9c35988 100644
--- a/test-suite/ideal-features/complexity/evars_subst.v
+++ b/test-suite/ideal-features/complexity/evars_subst.v
@@ -1,4 +1,4 @@
-(* Bug report #932 *)
+(* BZ#932 *)
(* Expected time < 1.00s *)
(* Let n be the number of let-in. The complexity comes from the fact
diff --git a/test-suite/ideal-features/evars_subst.v b/test-suite/ideal-features/evars_subst.v
index b3dfb33c..b9c35988 100644
--- a/test-suite/ideal-features/evars_subst.v
+++ b/test-suite/ideal-features/evars_subst.v
@@ -1,4 +1,4 @@
-(* Bug report #932 *)
+(* BZ#932 *)
(* Expected time < 1.00s *)
(* Let n be the number of let-in. The complexity comes from the fact
diff --git a/test-suite/ideal-features/implicit_binders.v b/test-suite/ideal-features/implicit_binders.v
index 2ec72780..d75620c2 100644
--- a/test-suite/ideal-features/implicit_binders.v
+++ b/test-suite/ideal-features/implicit_binders.v
@@ -121,4 +121,4 @@ Definition qux₁ {( F : `(SomeStruct a) )} : nat := 0.
(** *** Questions
- Autres propositions de syntaxe ?
- Réactions sur la construction ?
- *) \ No newline at end of file
+ *)
diff --git a/test-suite/interactive/Back.v b/test-suite/interactive/Back.v
index b813a79a..22364254 100644
--- a/test-suite/interactive/Back.v
+++ b/test-suite/interactive/Back.v
@@ -1,5 +1,5 @@
(* Check that reset remains synchronised with the compilation unit cache *)
-(* See bug #1030 *)
+(* See BZ#1030 *)
Section multiset_defs.
Require Import Plus.
diff --git a/test-suite/interactive/ParalITP.v b/test-suite/interactive/ParalITP.v
index a96d4a5c..7fab2a58 100644
--- a/test-suite/interactive/ParalITP.v
+++ b/test-suite/interactive/ParalITP.v
@@ -44,4 +44,4 @@ split.
exact a.
Qed.
-End Demo. \ No newline at end of file
+End Demo.
diff --git a/test-suite/interactive/proof_block.v b/test-suite/interactive/proof_block.v
index 31e34937..a865632e 100644
--- a/test-suite/interactive/proof_block.v
+++ b/test-suite/interactive/proof_block.v
@@ -63,4 +63,4 @@ split. split. split.
- solve [ trivial ].
- solve [ trivial ].
- exact 6.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/kernel/inds.mv b/test-suite/kernel/inds.mv
deleted file mode 100644
index bd1cc49f..00000000
--- a/test-suite/kernel/inds.mv
+++ /dev/null
@@ -1,3 +0,0 @@
-Inductive [] nat : Set := O : nat | S : nat->nat.
-Check Construct nat 0 1.
-Check Construct nat 0 2.
diff --git a/test-suite/micromega/square.v b/test-suite/micromega/square.v
index abf8be72..d163dfbc 100644
--- a/test-suite/micromega/square.v
+++ b/test-suite/micromega/square.v
@@ -40,7 +40,7 @@ Proof.
Qed.
-Lemma QdenZpower : forall x : Q, ' Qden (x ^ 2)%Q = ('(Qden x) ^ 2) %Z.
+Lemma QdenZpower : forall x : Q, Zpos (Qden (x ^ 2)%Q) = (Zpos (Qden x) ^ 2) %Z.
Proof.
intros.
destruct x.
@@ -54,9 +54,9 @@ Qed.
Theorem sqrt2_not_rational : ~exists x:Q, x^2==2#1.
Proof.
unfold Qeq; intros (x,HQeq); simpl (Qden (2#1)) in HQeq; rewrite Z.mul_1_r in HQeq.
- assert (Heq : (Qnum x ^ 2 = 2 * ' Qden x ^ 2%Q)%Z) by
+ assert (Heq : (Qnum x ^ 2 = 2 * Zpos (Qden x) ^ 2%Q)%Z) by
(rewrite QnumZpower in HQeq ; rewrite QdenZpower in HQeq ; auto).
assert (Hnx : (Qnum x <> 0)%Z)
by (intros Hx; simpl in HQeq; rewrite Hx in HQeq; discriminate HQeq).
- apply integer_statement; exists (Qnum x); exists (' Qden x); auto.
+ apply integer_statement; exists (Qnum x); exists (Zpos (Qden x)); auto.
Qed.
diff --git a/test-suite/misc/4722.sh b/test-suite/misc/4722.sh
new file mode 100755
index 00000000..86bc50b5
--- /dev/null
+++ b/test-suite/misc/4722.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+# create test files
+mkdir -p misc/4722
+ln -sf toto misc/4722/tata
+touch misc/4722.v
+
+# run test
+$coqtop "-R" "misc/4722" "Foo" -top Top -load-vernac-source misc/4722.v
+
+# clean up test files
+rm misc/4722/tata
+rmdir misc/4722
+rm misc/4722.v
diff --git a/test-suite/misc/berardi_test.v b/test-suite/misc/berardi_test.v
deleted file mode 100644
index a64db4da..00000000
--- a/test-suite/misc/berardi_test.v
+++ /dev/null
@@ -1,153 +0,0 @@
-(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
-(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
-(************************************************************************)
-
-(** This file formalizes Berardi's paradox which says that in
- the calculus of constructions, excluded middle (EM) and axiom of
- choice (AC) imply proof irrelevance (PI).
- Here, the axiom of choice is not necessary because of the use
- of inductive types.
-<<
-@article{Barbanera-Berardi:JFP96,
- author = {F. Barbanera and S. Berardi},
- title = {Proof-irrelevance out of Excluded-middle and Choice
- in the Calculus of Constructions},
- journal = {Journal of Functional Programming},
- year = {1996},
- volume = {6},
- number = {3},
- pages = {519-525}
-}
->> *)
-
-Set Implicit Arguments.
-
-Section Berardis_paradox.
-
-(** Excluded middle *)
-Hypothesis EM : forall P:Prop, P \/ ~ P.
-
-(** Conditional on any proposition. *)
-Definition IFProp (P B:Prop) (e1 e2:P) :=
- match EM B with
- | or_introl _ => e1
- | or_intror _ => e2
- end.
-
-(** Axiom of choice applied to disjunction.
- Provable in Coq because of dependent elimination. *)
-Lemma AC_IF :
- forall (P B:Prop) (e1 e2:P) (Q:P -> Prop),
- (B -> Q e1) -> (~ B -> Q e2) -> Q (IFProp B e1 e2).
-Proof.
-intros P B e1 e2 Q p1 p2.
-unfold IFProp.
-case (EM B); assumption.
-Qed.
-
-
-(** We assume a type with two elements. They play the role of booleans.
- The main theorem under the current assumptions is that [T=F] *)
-Variable Bool : Prop.
-Variable T : Bool.
-Variable F : Bool.
-
-(** The powerset operator *)
-Definition pow (P:Prop) := P -> Bool.
-
-
-(** A piece of theory about retracts *)
-Section Retracts.
-
-Variables A B : Prop.
-
-Record retract : Prop :=
- {i : A -> B; j : B -> A; inv : forall a:A, j (i a) = a}.
-
-Record retract_cond : Prop :=
- {i2 : A -> B; j2 : B -> A; inv2 : retract -> forall a:A, j2 (i2 a) = a}.
-
-
-(** The dependent elimination above implies the axiom of choice: *)
-Lemma AC : forall r:retract_cond, retract -> forall a:A, j2 r (i2 r a) = a.
-Proof.
-intros r.
-case r; simpl.
-trivial.
-Qed.
-
-End Retracts.
-
-(** This lemma is basically a commutation of implication and existential
- quantification: (EX x | A -> P(x)) <=> (A -> EX x | P(x))
- which is provable in classical logic ( => is already provable in
- intuitionnistic logic). *)
-
-Lemma L1 : forall A B:Prop, retract_cond (pow A) (pow B).
-Proof.
-intros A B.
-destruct (EM (retract (pow A) (pow B))) as [(f0,g0,e) | hf].
- exists f0 g0; trivial.
- exists (fun (x:pow A) (y:B) => F) (fun (x:pow B) (y:A) => F); intros;
- destruct hf; auto.
-Qed.
-
-
-(** The paradoxical set *)
-Definition U := forall P:Prop, pow P.
-
-(** Bijection between [U] and [(pow U)] *)
-Definition f (u:U) : pow U := u U.
-
-Definition g (h:pow U) : U :=
- fun X => let lX := j2 (L1 X U) in let rU := i2 (L1 U U) in lX (rU h).
-
-(** We deduce that the powerset of [U] is a retract of [U].
- This lemma is stated in Berardi's article, but is not used
- afterwards. *)
-Lemma retract_pow_U_U : retract (pow U) U.
-Proof.
-exists g f.
-intro a.
-unfold f, g; simpl.
-apply AC.
-exists (fun x:pow U => x) (fun x:pow U => x).
-trivial.
-Qed.
-
-(** Encoding of Russel's paradox *)
-
-(** The boolean negation. *)
-Definition Not_b (b:Bool) := IFProp (b = T) F T.
-
-(** the set of elements not belonging to itself *)
-Definition R : U := g (fun u:U => Not_b (u U u)).
-
-
-Lemma not_has_fixpoint : R R = Not_b (R R).
-Proof.
-unfold R at 1.
-unfold g.
-rewrite AC with (r := L1 U U) (a := fun u:U => Not_b (u U u)).
-trivial.
-exists (fun x:pow U => x) (fun x:pow U => x); trivial.
-Qed.
-
-
-Theorem classical_proof_irrelevence : T = F.
-Proof.
-generalize not_has_fixpoint.
-unfold Not_b.
-apply AC_IF.
-intros is_true is_false.
-elim is_true; elim is_false; trivial.
-
-intros not_true is_true.
-elim not_true; trivial.
-Qed.
-
-End Berardis_paradox.
diff --git a/test-suite/misc/coqc_dash_o.sh b/test-suite/misc/coqc_dash_o.sh
new file mode 100755
index 00000000..0ae7873f
--- /dev/null
+++ b/test-suite/misc/coqc_dash_o.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+DOUT=misc/tmp_coqc_dash_o/
+OUT=${DOUT}coqc_dash_o.vo
+
+
+mkdir -p "${DOUT}"
+rm -f "${OUT}"
+$coqc misc/coqc_dash_o.v -o "${OUT}"
+if [ ! -f "${OUT}" ]; then
+ printf "coqc -o not working"
+ exit 1
+fi
+rm -fr "${DOUT}"
+exit 0
diff --git a/test-suite/misc/coqc_dash_o.v b/test-suite/misc/coqc_dash_o.v
new file mode 100644
index 00000000..7426dff1
--- /dev/null
+++ b/test-suite/misc/coqc_dash_o.v
@@ -0,0 +1 @@
+Definition x := nat.
diff --git a/test-suite/misc/deps-checksum.sh b/test-suite/misc/deps-checksum.sh
new file mode 100755
index 00000000..e07612b8
--- /dev/null
+++ b/test-suite/misc/deps-checksum.sh
@@ -0,0 +1,5 @@
+rm -f misc/deps/A/*.vo misc/deps/B/*.vo
+$coqc -R misc/deps/A A misc/deps/A/A.v
+$coqc -R misc/deps/B A misc/deps/B/A.v
+$coqc -R misc/deps/B A misc/deps/B/B.v
+$coqtop -R misc/deps/B A -R misc/deps/A A -load-vernac-source misc/deps/checksum.v
diff --git a/test-suite/misc/deps-order.sh b/test-suite/misc/deps-order.sh
new file mode 100755
index 00000000..299f4946
--- /dev/null
+++ b/test-suite/misc/deps-order.sh
@@ -0,0 +1,20 @@
+# Check that both coqdep and coqtop/coqc supports -R
+# Check that both coqdep and coqtop/coqc takes the later -R
+# See bugs 2242, 2337, 2339
+rm -f misc/deps/lib/*.vo misc/deps/client/*.vo
+tmpoutput=`mktemp /tmp/coqcheck.XXXXXX`
+$coqdep -R misc/deps/lib lib -R misc/deps/client client misc/deps/client/bar.v 2>&1 | head -n 1 > $tmpoutput
+diff -u --strip-trailing-cr misc/deps/deps.out $tmpoutput 2>&1
+R=$?
+times
+$coqc -R misc/deps/lib lib misc/deps/lib/foo.v 2>&1
+$coqc -R misc/deps/lib lib -R misc/deps/client client misc/deps/client/foo.v 2>&1
+$coqtop -R misc/deps/lib lib -R misc/deps/client client -load-vernac-source misc/deps/client/bar.v 2>&1
+S=$?
+if [ $R = 0 -a $S = 0 ]; then
+ printf "coqdep and coqtop agree\n"
+ exit 0
+else
+ printf "coqdep and coqtop disagree\n"
+ exit 1
+fi
diff --git a/test-suite/misc/deps-utf8.sh b/test-suite/misc/deps-utf8.sh
new file mode 100755
index 00000000..13e264c0
--- /dev/null
+++ b/test-suite/misc/deps-utf8.sh
@@ -0,0 +1,17 @@
+# Check reading directories matching non pure ascii idents
+# See bug #5715 (utf-8 working on macos X and linux)
+# Windows is still not compliant
+a=`uname`
+if [ "$a" = "Darwin" -o "$a" = "Linux" ]; then
+rm -f misc/deps/théorèmes/*.v
+tmpoutput=`mktemp /tmp/coqcheck.XXXXXX`
+$coqc -R misc/deps AlphaBêta misc/deps/αβ/γδ.v
+R=$?
+$coqtop -R misc/deps AlphaBêta -load-vernac-source misc/deps/αβ/εζ.v
+S=$?
+if [ $R = 0 -a $S = 0 ]; then
+ exit 0
+else
+ exit 1
+fi
+fi
diff --git a/test-suite/misc/deps/αβ/γδ.v b/test-suite/misc/deps/αβ/γδ.v
new file mode 100644
index 00000000..f43a2d65
--- /dev/null
+++ b/test-suite/misc/deps/αβ/γδ.v
@@ -0,0 +1,4 @@
+Theorem simple : forall A, A -> A.
+Proof.
+auto.
+Qed.
diff --git a/test-suite/misc/deps/αβ/εζ.v b/test-suite/misc/deps/αβ/εζ.v
new file mode 100644
index 00000000..e7fd25c0
--- /dev/null
+++ b/test-suite/misc/deps/αβ/εζ.v
@@ -0,0 +1 @@
+Require Import γδ.
diff --git a/test-suite/misc/exitstatus.sh b/test-suite/misc/exitstatus.sh
new file mode 100755
index 00000000..cea1de86
--- /dev/null
+++ b/test-suite/misc/exitstatus.sh
@@ -0,0 +1,7 @@
+$coqtop -load-vernac-source misc/exitstatus/illtyped.v
+N=$?
+$coqc misc/exitstatus/illtyped.v
+P=$?
+printf "On ill-typed input, coqtop returned $N.\n"
+printf "On ill-typed input, coqc returned $P.\n"
+if [ $N = 1 -a $P = 1 ]; then exit 0; else exit 1; fi
diff --git a/test-suite/misc/exitstatus/illtyped.v b/test-suite/misc/exitstatus/illtyped.v
new file mode 100644
index 00000000..df6bbb38
--- /dev/null
+++ b/test-suite/misc/exitstatus/illtyped.v
@@ -0,0 +1 @@
+Check S S.
diff --git a/test-suite/misc/printers.sh b/test-suite/misc/printers.sh
new file mode 100755
index 00000000..28e7dc36
--- /dev/null
+++ b/test-suite/misc/printers.sh
@@ -0,0 +1,3 @@
+printf "Drop. #use\"include\";; #quit;;\n" | $coqtopbyte 2>&1 | egrep "Error|Unbound"
+if [ $? = 0 ]; then exit 1; else exit 0; fi
+
diff --git a/test-suite/misc/universes.sh b/test-suite/misc/universes.sh
new file mode 100755
index 00000000..d87a8603
--- /dev/null
+++ b/test-suite/misc/universes.sh
@@ -0,0 +1,8 @@
+# Sort universes for the whole standard library
+EXPECTED_UNIVERSES=4 # Prop is not counted
+$coqc -R misc/universes Universes misc/universes/all_stdlib 2>&1
+$coqc -R misc/universes Universes misc/universes/universes 2>&1
+mv universes.txt misc/universes
+N=`awk '{print $3}' misc/universes/universes.txt | sort -u | wc -l`
+printf "Found %s/%s universes\n" $N $EXPECTED_UNIVERSES
+if [ "$N" -eq $EXPECTED_UNIVERSES ]; then exit 0; else exit 1; fi
diff --git a/test-suite/modules/Demo.v b/test-suite/modules/Demo.v
index 1f27fe1b..820fda17 100644
--- a/test-suite/modules/Demo.v
+++ b/test-suite/modules/Demo.v
@@ -52,4 +52,4 @@ Print N'''.x.
Import N'''.
-Print t. \ No newline at end of file
+Print t.
diff --git a/test-suite/modules/Nat.v b/test-suite/modules/Nat.v
index 57878a5f..d2116d21 100644
--- a/test-suite/modules/Nat.v
+++ b/test-suite/modules/Nat.v
@@ -16,4 +16,4 @@ Qed.
Lemma le_antis : forall n m : nat, le n m -> le m n -> n = m.
eauto with arith.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/modules/PO.v b/test-suite/modules/PO.v
index 6198f29a..8ba8525c 100644
--- a/test-suite/modules/PO.v
+++ b/test-suite/modules/PO.v
@@ -54,4 +54,4 @@ Module NN := Pair Nat Nat.
Lemma zz_min : forall p : NN.T, NN.le (0, 0) p.
info auto with arith.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/modules/SeveralWith.v b/test-suite/modules/SeveralWith.v
new file mode 100644
index 00000000..bbf72a76
--- /dev/null
+++ b/test-suite/modules/SeveralWith.v
@@ -0,0 +1,12 @@
+Module Type S.
+Parameter A : Type.
+End S.
+
+Module Type ES.
+Parameter A : Type.
+Parameter eq : A -> A -> Type.
+End ES.
+
+Module Make
+ (AX : S)
+ (X : ES with Definition A := AX.A with Definition eq := @eq AX.A).
diff --git a/test-suite/modules/Tescik.v b/test-suite/modules/Tescik.v
index 1d1b1e0a..ea495539 100644
--- a/test-suite/modules/Tescik.v
+++ b/test-suite/modules/Tescik.v
@@ -27,4 +27,4 @@ Module List (X: ELEM).
End List.
-Module N := List Nat. \ No newline at end of file
+Module N := List Nat.
diff --git a/test-suite/modules/WithDefUBinders.v b/test-suite/modules/WithDefUBinders.v
new file mode 100644
index 00000000..e6834551
--- /dev/null
+++ b/test-suite/modules/WithDefUBinders.v
@@ -0,0 +1,15 @@
+
+Set Universe Polymorphism.
+Module Type T.
+ Axiom foo@{u v|u < v} : Type@{v}.
+End T.
+
+Module M : T with Definition foo@{u v} := Type@{u} : Type@{v}.
+ Definition foo@{u v} := Type@{u} : Type@{v}.
+End M.
+
+Fail Module M' : T with Definition foo := Type.
+
+(* Without the binder expression we have to do trickery to get the
+ universes in the right order. *)
+Module M' : T with Definition foo := let t := Type in t.
diff --git a/test-suite/modules/cumpoly.v b/test-suite/modules/cumpoly.v
new file mode 100644
index 00000000..654b86cb
--- /dev/null
+++ b/test-suite/modules/cumpoly.v
@@ -0,0 +1,19 @@
+Set Universe Polymorphism.
+
+(** Check that variance subtyping is respected. The signature T is asking for
+ invariance, while M provide an irrelevant implementation, which is deemed
+ legit.
+
+ There is currently no way to go the other way around, so it's not possible
+ to generate a counter-example that should fail with the wrong subtyping.
+*)
+
+Module Type T.
+Parameter t@{i|Set <= i} : Type@{i}.
+Cumulative Inductive I@{i|Set <= i} : Type@{i} := C : t@{i} -> I.
+End T.
+
+Module M : T.
+Definition t@{i|Set <= i} : Type@{i} := nat.
+Cumulative Inductive I@{i|Set <= i} : Type@{i} := C : t@{i} -> I.
+End M.
diff --git a/test-suite/modules/grammar.v b/test-suite/modules/grammar.v
index 9657c685..11ad205e 100644
--- a/test-suite/modules/grammar.v
+++ b/test-suite/modules/grammar.v
@@ -12,4 +12,4 @@ Check (f 0 0).
Check (f 0 0).
Import M.
Check (f 0 0).
-Check (N.f 0 0). \ No newline at end of file
+Check (N.f 0 0).
diff --git a/test-suite/modules/injection_discriminate_inversion.v b/test-suite/modules/injection_discriminate_inversion.v
index d4ac7b3a..8b5969dd 100644
--- a/test-suite/modules/injection_discriminate_inversion.v
+++ b/test-suite/modules/injection_discriminate_inversion.v
@@ -31,4 +31,4 @@ Goal forall x, M.C x = M1.C 0 -> x = 0.
par des modules differents
*)
inversion H. reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/modules/modeq.v b/test-suite/modules/modeq.v
index 1238ee9d..c8129eec 100644
--- a/test-suite/modules/modeq.v
+++ b/test-suite/modules/modeq.v
@@ -19,4 +19,4 @@ Module Z.
Module N := M.
End Z.
-Module A : SIG := Z. \ No newline at end of file
+Module A : SIG := Z.
diff --git a/test-suite/modules/objects2.v b/test-suite/modules/objects2.v
index 220e2b36..0a6b1f06 100644
--- a/test-suite/modules/objects2.v
+++ b/test-suite/modules/objects2.v
@@ -2,7 +2,7 @@
the logical objects in the environment
*)
-(* Bug #1118 (simplified version), submitted by Evelyne Contejean
+(* BZ#1118 (simplified version), submitted by Evelyne Contejean
(used to failed in pre-V8.1 trunk because of a call to lookup_mind
for structure objects)
*)
diff --git a/test-suite/modules/pliczek.v b/test-suite/modules/pliczek.v
index f806a7c4..51f5f400 100644
--- a/test-suite/modules/pliczek.v
+++ b/test-suite/modules/pliczek.v
@@ -1,3 +1,3 @@
Require Export plik.
-Definition tutu (X : Set) := toto X. \ No newline at end of file
+Definition tutu (X : Set) := toto X.
diff --git a/test-suite/modules/plik.v b/test-suite/modules/plik.v
index 50bfd960..c2f0fe3c 100644
--- a/test-suite/modules/plik.v
+++ b/test-suite/modules/plik.v
@@ -1,3 +1,3 @@
Definition toto (x : Set) := x.
-(* <Warning> : Grammar is replaced by Notation *) \ No newline at end of file
+(* <Warning> : Grammar is replaced by Notation *)
diff --git a/test-suite/modules/polymorphism.v b/test-suite/modules/polymorphism.v
new file mode 100644
index 00000000..63eaa382
--- /dev/null
+++ b/test-suite/modules/polymorphism.v
@@ -0,0 +1,81 @@
+Set Universe Polymorphism.
+
+(** Tests for module subtyping of polymorphic terms *)
+
+Module Type S.
+
+Section Foo.
+
+Universes i j.
+Constraint i <= j.
+
+Parameter foo : Type@{i} -> Type@{j}.
+
+End Foo.
+
+End S.
+
+(** Same constraints *)
+
+Module OK_1.
+
+Definition foo@{i j} (A : Type@{i}) : Type@{j} := A.
+
+End OK_1.
+
+Module OK_1_Test : S := OK_1.
+
+(** More general constraints *)
+
+Module OK_2.
+
+Inductive X@{i} : Type@{i} :=.
+Definition foo@{i j} (A : Type@{i}) : Type@{j} := X@{j}.
+
+End OK_2.
+
+Module OK_2_Test : S := OK_2.
+
+(** Wrong instance length *)
+
+Module KO_1.
+
+Definition foo@{i} (A : Type@{i}) : Type@{i} := A.
+
+End KO_1.
+
+Fail Module KO_Test_1 : S := KO_1.
+
+(** Less general constraints *)
+
+Module KO_2.
+
+Section Foo.
+
+Universe i j.
+Constraint i < j.
+
+Definition foo (A : Type@{i}) : Type@{j} := A.
+
+End Foo.
+
+End KO_2.
+
+Fail Module KO_Test_2 : S := KO_2.
+
+(** Less general constraints *)
+
+Module KO_3.
+
+Section Foo.
+
+Universe i j.
+Constraint i = j.
+
+Definition foo (A : Type@{i}) : Type@{j} := A.
+
+End Foo.
+
+End KO_3.
+
+Fail Module KO_Test_3 : S := KO_3.
diff --git a/test-suite/modules/polymorphism2.v b/test-suite/modules/polymorphism2.v
new file mode 100644
index 00000000..7e3327ee
--- /dev/null
+++ b/test-suite/modules/polymorphism2.v
@@ -0,0 +1,87 @@
+Set Universe Polymorphism.
+
+(** Tests for module subtyping of polymorphic terms *)
+
+Module Type S.
+
+Section Foo.
+
+Universes i j.
+Constraint i <= j.
+
+Inductive foo : Type@{i} -> Type@{j} :=.
+
+End Foo.
+
+End S.
+
+(** Same constraints *)
+
+Module OK_1.
+
+Section Foo.
+
+Universes i j.
+Constraint i <= j.
+
+Inductive foo : Type@{i} -> Type@{j} :=.
+
+End Foo.
+
+End OK_1.
+
+Module OK_1_Test : S := OK_1.
+
+(** More general constraints *)
+
+Module OK_2.
+
+Inductive foo@{i j} : Type@{i} -> Type@{j} :=.
+
+End OK_2.
+
+Module OK_2_Test : S := OK_2.
+
+(** Wrong instance length *)
+
+Module KO_1.
+
+Inductive foo@{i} : Type@{i} -> Type@{i} :=.
+
+End KO_1.
+
+Fail Module KO_Test_1 : S := KO_1.
+
+(** Less general constraints *)
+
+Module KO_2.
+
+Section Foo.
+
+Universe i j.
+Constraint i < j.
+
+Inductive foo : Type@{i} -> Type@{j} :=.
+
+End Foo.
+
+End KO_2.
+
+Fail Module KO_Test_2 : S := KO_2.
+
+(** Less general constraints *)
+
+Module KO_3.
+
+Section Foo.
+
+Universe i j.
+Constraint i = j.
+
+Inductive foo : Type@{i} -> Type@{j} :=.
+
+End Foo.
+
+End KO_3.
+
+Fail Module KO_Test_3 : S := KO_3.
diff --git a/test-suite/modules/pseudo_circular_with.v b/test-suite/modules/pseudo_circular_with.v
index 9e46d17e..6bf067fd 100644
--- a/test-suite/modules/pseudo_circular_with.v
+++ b/test-suite/modules/pseudo_circular_with.v
@@ -3,4 +3,4 @@ Module Type T. Declare Module M:S. End T.
Module N:S. End N.
Module NN:T. Module M:=N. End NN.
-Module Type U := T with Module M:=NN. \ No newline at end of file
+Module Type U := T with Module M:=NN.
diff --git a/test-suite/modules/sig.v b/test-suite/modules/sig.v
index da5d25fa..fc936a51 100644
--- a/test-suite/modules/sig.v
+++ b/test-suite/modules/sig.v
@@ -26,4 +26,4 @@ Module Type SIG.
Parameter x : T.
End SIG.
-Module J : SIG := M.N. \ No newline at end of file
+Module J : SIG := M.N.
diff --git a/test-suite/output-modulo-time/ltacprof.out b/test-suite/output-modulo-time/ltacprof.out
index cc04c2c9..5553e1b3 100644
--- a/test-suite/output-modulo-time/ltacprof.out
+++ b/test-suite/output-modulo-time/ltacprof.out
@@ -1,12 +1,15 @@
-total time: 1.528s
+total time: 1.032s
- tactic local total calls max
+ tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─sleep' -------------------------------- 100.0% 100.0% 1 1.528s
+─sleep' -------------------------------- 100.0% 100.0% 1 1.032s
+─sleep --------------------------------- 0.0% 0.0% 0 0.000s
─constructor --------------------------- 0.0% 0.0% 1 0.000s
- tactic local total calls max
+ tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─sleep' -------------------------------- 100.0% 100.0% 1 1.528s
+─sleep' -------------------------------- 100.0% 100.0% 1 1.032s
+─sleep --------------------------------- 0.0% 0.0% 0 0.000s
+└sleep' -------------------------------- 0.0% 0.0% 0 0.000s
─constructor --------------------------- 0.0% 0.0% 1 0.000s
diff --git a/test-suite/output-modulo-time/ltacprof.v b/test-suite/output-modulo-time/ltacprof.v
index 6611db70..1e9e9197 100644
--- a/test-suite/output-modulo-time/ltacprof.v
+++ b/test-suite/output-modulo-time/ltacprof.v
@@ -1,4 +1,4 @@
-(* -*- coq-prog-args: ("-emacs" "-profile-ltac-cutoff" "0.0") -*- *)
+(* -*- coq-prog-args: ("-profile-ltac-cutoff" "0.0") -*- *)
Ltac sleep' := do 100 (do 100 (do 100 idtac)).
Ltac sleep := sleep'.
diff --git a/test-suite/output-modulo-time/ltacprof_abstract.out b/test-suite/output-modulo-time/ltacprof_abstract.out
new file mode 100644
index 00000000..fef4fa24
--- /dev/null
+++ b/test-suite/output-modulo-time/ltacprof_abstract.out
@@ -0,0 +1,17 @@
+total time: 0.922s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─abstract (sleep; constructor) --------- 0.0% 100.0% 1 0.922s
+─sleep' -------------------------------- 100.0% 100.0% 1 0.922s
+─constructor --------------------------- 0.0% 0.0% 1 0.000s
+─sleep --------------------------------- 0.0% 0.0% 0 0.000s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─abstract (sleep; constructor) --------- 0.0% 100.0% 1 0.922s
+ ├─sleep' ------------------------------ 100.0% 100.0% 1 0.922s
+ ├─constructor ------------------------- 0.0% 0.0% 1 0.000s
+ └─sleep ------------------------------- 0.0% 0.0% 0 0.000s
+ └sleep' ------------------------------ 0.0% 0.0% 0 0.000s
+
diff --git a/test-suite/output-modulo-time/ltacprof_abstract.v b/test-suite/output-modulo-time/ltacprof_abstract.v
new file mode 100644
index 00000000..10a76309
--- /dev/null
+++ b/test-suite/output-modulo-time/ltacprof_abstract.v
@@ -0,0 +1,8 @@
+(* -*- coq-prog-args: ("-profile-ltac-cutoff" "0.0") -*- *)
+Ltac sleep' := do 100 (do 100 (do 100 idtac)).
+Ltac sleep := sleep'.
+
+Theorem x : True.
+Proof.
+ idtac. idtac. abstract (sleep; constructor).
+Defined.
diff --git a/test-suite/output-modulo-time/ltacprof_cutoff.out b/test-suite/output-modulo-time/ltacprof_cutoff.out
index 0cd5777c..d91a38bb 100644
--- a/test-suite/output-modulo-time/ltacprof_cutoff.out
+++ b/test-suite/output-modulo-time/ltacprof_cutoff.out
@@ -1,31 +1,37 @@
-total time: 1.584s
+total time: 1.632s
tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─foo2 ---------------------------------- 0.0% 100.0% 1 1.584s
-─sleep --------------------------------- 100.0% 100.0% 3 0.572s
-─foo1 ---------------------------------- 0.0% 63.9% 1 1.012s
+─sleep --------------------------------- 100.0% 100.0% 3 0.584s
+─foo2 ---------------------------------- 0.0% 100.0% 1 1.632s
+─foo1 ---------------------------------- 0.0% 64.2% 1 1.048s
tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─foo2 ---------------------------------- 0.0% 100.0% 1 1.584s
-└foo1 ---------------------------------- 0.0% 63.9% 1 1.012s
+─foo2 ---------------------------------- 0.0% 100.0% 1 1.632s
+└foo1 ---------------------------------- 0.0% 64.2% 1 1.048s
-total time: 1.584s
+total time: 0.520s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─foo2 ---------------------------------- 0.0% 100.0% 1 0.520s
+─sleep --------------------------------- 99.2% 99.2% 52 0.016s
+─foo1 ---------------------------------- 0.0% 97.7% 1 0.508s
+─foo0 ---------------------------------- 0.8% 96.2% 1 0.500s
+
+ tactic local total calls max
+────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
+─foo2 ---------------------------------- 0.0% 100.0% 1 0.520s
+└foo1 ---------------------------------- 0.0% 97.7% 1 0.508s
+└foo0 ---------------------------------- 0.8% 96.2% 1 0.500s
+└sleep --------------------------------- 95.4% 95.4% 50 0.016s
+
+total time: 0.000s
tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─sleep --------------------------------- 100.0% 100.0% 3 0.572s
-─foo2 ---------------------------------- 0.0% 100.0% 1 1.584s
-─foo1 ---------------------------------- 0.0% 63.9% 1 1.012s
-─foo0 ---------------------------------- 0.0% 31.3% 1 0.496s
tactic local total calls max
────────────────────────────────────────┴──────┴──────┴───────┴─────────┘
-─foo2 ---------------------------------- 0.0% 100.0% 1 1.584s
- ├─foo1 -------------------------------- 0.0% 63.9% 1 1.012s
- │ ├─sleep ----------------------------- 32.6% 32.6% 1 0.516s
- │ └─foo0 ------------------------------ 0.0% 31.3% 1 0.496s
- │ └sleep ----------------------------- 31.3% 31.3% 1 0.496s
- └─sleep ------------------------------- 36.1% 36.1% 1 0.572s
diff --git a/test-suite/output-modulo-time/ltacprof_cutoff.v b/test-suite/output-modulo-time/ltacprof_cutoff.v
index 50131470..ae5d51ba 100644
--- a/test-suite/output-modulo-time/ltacprof_cutoff.v
+++ b/test-suite/output-modulo-time/ltacprof_cutoff.v
@@ -1,12 +1,28 @@
-(* -*- coq-prog-args: ("-emacs" "-profile-ltac") -*- *)
+(* -*- coq-prog-args: ("-profile-ltac") -*- *)
Require Coq.ZArith.BinInt.
-Ltac sleep := do 50 (idtac; let sleep := (eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl) in idtac).
+Module WithIdTac.
+ Ltac sleep := do 50 (idtac; let sleep := (eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl) in idtac).
-Ltac foo0 := idtac; sleep.
-Ltac foo1 := sleep; foo0.
-Ltac foo2 := sleep; foo1.
-Goal True.
- foo2.
- Show Ltac Profile CutOff 47.
- constructor.
-Qed.
+ Ltac foo0 := idtac; sleep.
+ Ltac foo1 := sleep; foo0.
+ Ltac foo2 := sleep; foo1.
+ Goal True.
+ foo2.
+ Show Ltac Profile CutOff 47.
+ constructor.
+ Qed.
+End WithIdTac.
+
+Module TestEval.
+ Ltac sleep := let sleep := (eval vm_compute in Coq.ZArith.BinInt.Z.div_eucl) in idtac.
+
+ Ltac foo0 := idtac; do 50 (idtac; sleep).
+ Ltac foo1 := sleep; foo0.
+ Ltac foo2 := sleep; foo1.
+ Goal True.
+ Reset Ltac Profile.
+ foo2.
+ Show Ltac Profile CutOff 47.
+ constructor.
+ Qed.
+End TestEval.
diff --git a/test-suite/output/Arguments.out b/test-suite/output/Arguments.out
index a2ee2d4c..97939696 100644
--- a/test-suite/output/Arguments.out
+++ b/test-suite/output/Arguments.out
@@ -97,8 +97,8 @@ Expands to: Constant Top.f
forall w : r, w 3 true = tt
: Prop
The command has indeed failed with message:
-Error: Unknown interpretation for notation "$".
+Unknown interpretation for notation "$".
w 3 true = tt
: Prop
The command has indeed failed with message:
-Error: Extra arguments: _, _.
+Extra arguments: _, _.
diff --git a/test-suite/output/Arguments_renaming.out b/test-suite/output/Arguments_renaming.out
index b084ad49..e73312c6 100644
--- a/test-suite/output/Arguments_renaming.out
+++ b/test-suite/output/Arguments_renaming.out
@@ -1,5 +1,5 @@
The command has indeed failed with message:
-Error: To rename arguments the "rename" flag must be specified.
+To rename arguments the "rename" flag must be specified.
Argument A renamed to B.
File "stdin", line 2, characters 0-25:
Warning: This command is just asserting the names of arguments of identity.
@@ -11,7 +11,7 @@ notation scopes add ': clear scopes' [arguments-assert,vernacular]
eq_refl
: ?y = ?y
where
-?y : [ |- nat]
+?y : [ |- nat]
Inductive eq (A : Type) (x : A) : A -> Prop := eq_refl : x = x
For eq_refl: Arguments are renamed to B, y
@@ -103,15 +103,15 @@ Expands to: Constant Top.myplus
@myplus
: forall Z : Type, Z -> nat -> nat -> nat
The command has indeed failed with message:
-Error: Argument lists should agree on the names they provide.
+Argument lists should agree on the names they provide.
The command has indeed failed with message:
-Error: Sequences of implicit arguments must be of different lengths.
+Sequences of implicit arguments must be of different lengths.
The command has indeed failed with message:
-Error: Some argument names are duplicated: F
+Some argument names are duplicated: F
The command has indeed failed with message:
-Error: Argument z cannot be declared implicit.
+Argument z cannot be declared implicit.
The command has indeed failed with message:
-Error: Extra arguments: y.
+Extra arguments: y.
The command has indeed failed with message:
-Error: To rename arguments the "rename" flag must be specified.
+To rename arguments the "rename" flag must be specified.
Argument A renamed to R.
diff --git a/test-suite/output/Cases.out b/test-suite/output/Cases.out
index 8ce6f979..419dcadb 100644
--- a/test-suite/output/Cases.out
+++ b/test-suite/output/Cases.out
@@ -2,18 +2,18 @@ t_rect =
fun (P : t -> Type) (f : let x := t in forall x0 : x, P x0 -> P (k x0)) =>
fix F (t : t) : P t :=
match t as t0 return (P t0) with
- | @k _ x0 => f x0 (F x0)
+ | k _ x0 => f x0 (F x0)
end
: forall P : t -> Type,
(let x := t in forall x0 : x, P x0 -> P (k x0)) -> forall t : t, P t
Argument scopes are [function_scope function_scope _]
= fun d : TT => match d with
- | @CTT _ _ b => b
+ | {| f3 := b |} => b
end
: TT -> 0 = 0
= fun d : TT => match d with
- | @CTT _ _ b => b
+ | {| f3 := b |} => b
end
: TT -> 0 = 0
proj =
@@ -72,3 +72,100 @@ e1 : texp t1
e2 : texp t2
The term "0" has type "nat" while it is expected to have type
"typeDenote t0".
+fun '{{n, m, _}} => n + m
+ : J -> nat
+fun '{{n, m, p}} => n + m + p
+ : J -> nat
+fun '(D n m p q) => n + m + p + q
+ : J -> nat
+The command has indeed failed with message:
+The constructor D (in type J) expects 3 arguments.
+lem1 =
+fun dd : nat * nat => let (bb, cc) as aa return (aa = aa) := dd in eq_refl
+ : forall k : nat * nat, k = k
+lem2 =
+fun dd : bool => if dd as aa return (aa = aa) then eq_refl else eq_refl
+ : forall k : bool, k = k
+
+Argument scope is [bool_scope]
+lem3 =
+fun dd : nat * nat => let (bb, cc) as aa return (aa = aa) := dd in eq_refl
+ : forall k : nat * nat, k = k
+1 subgoal
+
+ x : nat
+ n, n0 := match x + 0 with
+ | 0 | S _ => 0
+ end : nat
+ e,
+ e0 := match x + 0 as y return (y = y) with
+ | 0 => eq_refl
+ | S n => eq_refl
+ end : x + 0 = x + 0
+ n1, n2 := match x with
+ | 0 | S _ => 0
+ end : nat
+ e1, e2 := match x return (x = x) with
+ | 0 => eq_refl
+ | S n => eq_refl
+ end : x = x
+ ============================
+ x + 0 = 0
+1 subgoal
+
+ p : nat
+ a,
+ a0 := match eq_refl as y in (_ = e) return (y = y /\ e = e) with
+ | eq_refl => conj eq_refl eq_refl
+ end : eq_refl = eq_refl /\ p = p
+ a1,
+ a2 := match eq_refl in (_ = e) return (p = p /\ e = e) with
+ | eq_refl => conj eq_refl eq_refl
+ end : p = p /\ p = p
+ ============================
+ eq_refl = eq_refl
+fun x : comparison => match x with
+ | Eq => 1
+ | _ => 0
+ end
+ : comparison -> nat
+fun x : comparison => match x with
+ | Eq => 1
+ | Lt => 0
+ | Gt => 0
+ end
+ : comparison -> nat
+fun x : comparison => match x with
+ | Eq => 1
+ | Lt | Gt => 0
+ end
+ : comparison -> nat
+fun x : comparison =>
+match x return nat with
+| Eq => S O
+| Lt => O
+| Gt => O
+end
+ : forall _ : comparison, nat
+fun x : K => match x with
+ | a3 | a4 => 3
+ | _ => 2
+ end
+ : K -> nat
+fun x : K => match x with
+ | a1 | a2 => 4
+ | a3 => 3
+ | _ => 2
+ end
+ : K -> nat
+fun x : K => match x with
+ | a1 | a2 => 4
+ | a4 => 3
+ | _ => 2
+ end
+ : K -> nat
+fun x : K => match x with
+ | a1 | a3 | a4 => 3
+ | _ => 2
+ end
+ : K -> nat
diff --git a/test-suite/output/Cases.v b/test-suite/output/Cases.v
index 40748964..caf3b287 100644
--- a/test-suite/output/Cases.v
+++ b/test-suite/output/Cases.v
@@ -1,5 +1,7 @@
(* Cases with let-in in constructors types *)
+Unset Printing Allow Match Default Clause.
+
Inductive t : Set :=
k : let x := t in x -> x.
@@ -106,3 +108,111 @@ Fail Fixpoint texpDenote t (e:texp t):typeDenote t:=
| TBinop t1 t2 _ b e1 e2 => O
end.
+(* Test notations with local definitions in constructors *)
+
+Inductive J := D : forall n m, let p := n+m in nat -> J.
+Notation "{{ n , m , q }}" := (D n m q).
+
+Check fun x : J => let '{{n, m, _}} := x in n + m.
+Check fun x : J => let '{{n, m, p}} := x in n + m + p.
+
+(* Cannot use the notation because of the dependency in p *)
+
+Check fun x => let '(D n m p q) := x in n+m+p+q.
+
+(* This used to succeed, being interpreted as "let '{{n, m, p}} := ..." *)
+
+Fail Check fun x : J => let '{{n, m, _}} p := x in n + m + p.
+
+(* Test use of idents bound to ltac names in a "match" *)
+
+Lemma lem1 : forall k, k=k :>nat * nat.
+let x := fresh "aa" in
+let y := fresh "bb" in
+let z := fresh "cc" in
+let k := fresh "dd" in
+refine (fun k : nat * nat => match k as x return x = x with (y,z) => eq_refl end).
+Qed.
+Print lem1.
+
+Lemma lem2 : forall k, k=k :> bool.
+let x := fresh "aa" in
+let y := fresh "bb" in
+let z := fresh "cc" in
+let k := fresh "dd" in
+refine (fun k => if k as x return x = x then eq_refl else eq_refl).
+Qed.
+Print lem2.
+
+Lemma lem3 : forall k, k=k :>nat * nat.
+let x := fresh "aa" in
+let y := fresh "bb" in
+let z := fresh "cc" in
+let k := fresh "dd" in
+refine (fun k : nat * nat => let (y,z) as x return x = x := k in eq_refl).
+Qed.
+Print lem3.
+
+Lemma lem4 x : x+0=0.
+match goal with |- ?y = _ => pose (match y with 0 => 0 | S n => 0 end) end.
+match goal with |- ?y = _ => pose (match y as y with 0 => 0 | S n => 0 end) end.
+match goal with |- ?y = _ => pose (match y as y return y=y with 0 => eq_refl | S n => eq_refl end) end.
+match goal with |- ?y = _ => pose (match y return y=y with 0 => eq_refl | S n => eq_refl end) end.
+match goal with |- ?y + _ = _ => pose (match y with 0 => 0 | S n => 0 end) end.
+match goal with |- ?y + _ = _ => pose (match y as y with 0 => 0 | S n => 0 end) end.
+match goal with |- ?y + _ = _ => pose (match y as y return y=y with 0 => eq_refl | S n => eq_refl end) end.
+match goal with |- ?y + _ = _ => pose (match y return y=y with 0 => eq_refl | S n => eq_refl end) end.
+Show.
+
+Lemma lem5 (p:nat) : eq_refl p = eq_refl p.
+let y := fresh "n" in (* Checking that y is hidden *)
+ let z := fresh "e" in (* Checking that z is hidden *)
+ match goal with
+ |- ?y = _ => pose (match y as y in _ = z return y=y /\ z=z with eq_refl => conj eq_refl eq_refl end)
+ end.
+let y := fresh "n" in
+ let z := fresh "e" in
+ match goal with
+ |- ?y = _ => pose (match y in _ = z return y=y /\ z=z with eq_refl => conj eq_refl eq_refl end)
+ end.
+let y := fresh "n" in
+ let z := fresh "e" in
+ match goal with
+ |- eq_refl ?y = _ => pose (match eq_refl y in _ = z return y=y /\ z=z with eq_refl => conj eq_refl eq_refl end)
+ end.
+let p := fresh "p" in
+ let z := fresh "e" in
+ match goal with
+ |- eq_refl ?p = _ => pose (match eq_refl p in _ = z return p=p /\ z=z with eq_refl => conj eq_refl eq_refl end)
+ end.
+Show.
+
+Set Printing Allow Match Default Clause.
+
+(***************************************************)
+(* Testing strategy for factorizing cases branches *)
+
+(* Factorization + default clause *)
+Check fun x => match x with Eq => 1 | _ => 0 end.
+
+(* No factorization *)
+Unset Printing Factorizable Match Patterns.
+Check fun x => match x with Eq => 1 | _ => 0 end.
+Set Printing Factorizable Match Patterns.
+
+(* Factorization but no default clause *)
+Unset Printing Allow Match Default Clause.
+Check fun x => match x with Eq => 1 | _ => 0 end.
+Set Printing Allow Match Default Clause.
+
+(* No factorization in printing all mode *)
+Set Printing All.
+Check fun x => match x with Eq => 1 | _ => 0 end.
+Unset Printing All.
+
+(* Several clauses *)
+Inductive K := a1|a2|a3|a4|a5|a6.
+Check fun x => match x with a3 | a4 => 3 | _ => 2 end.
+Check fun x => match x with a3 => 3 | a2 | a1 => 4 | _ => 2 end.
+Check fun x => match x with a4 => 3 | a2 | a1 => 4 | _ => 2 end.
+Check fun x => match x with a3 | a4 | a1 => 3 | _ => 2 end.
diff --git a/test-suite/output/CompactContexts.out b/test-suite/output/CompactContexts.out
new file mode 100644
index 00000000..9d1d1987
--- /dev/null
+++ b/test-suite/output/CompactContexts.out
@@ -0,0 +1,7 @@
+1 subgoal
+
+ hP1 : True
+ a : nat b : list nat h : forall x : nat, {y : nat | y > x}
+ h2 : True
+ ============================
+ False
diff --git a/test-suite/output/CompactContexts.v b/test-suite/output/CompactContexts.v
new file mode 100644
index 00000000..c409c0ee
--- /dev/null
+++ b/test-suite/output/CompactContexts.v
@@ -0,0 +1,5 @@
+Set Printing Compact Contexts.
+
+Lemma f (hP1:True) (a:nat) (b:list nat) (h:forall (x:nat) , { y:nat | y > x}) (h2:True): False.
+Show.
+Abort.
diff --git a/test-suite/output/ErrorInCanonicalStructures.out b/test-suite/output/ErrorInCanonicalStructures.out
new file mode 100644
index 00000000..73da4f44
--- /dev/null
+++ b/test-suite/output/ErrorInCanonicalStructures.out
@@ -0,0 +1,5 @@
+File "stdin", line 3, characters 0-24:
+Error:
+Could not declare a canonical structure Foo.
+Expected an instance of a record or structure.
+
diff --git a/test-suite/output/ErrorInCanonicalStructures.v b/test-suite/output/ErrorInCanonicalStructures.v
new file mode 100644
index 00000000..49597df6
--- /dev/null
+++ b/test-suite/output/ErrorInCanonicalStructures.v
@@ -0,0 +1,3 @@
+Record Foo := MkFoo { field1 : nat; field2 : nat -> nat }.
+
+Canonical Structure Foo.
diff --git a/test-suite/output/ErrorInCanonicalStructures2.out b/test-suite/output/ErrorInCanonicalStructures2.out
new file mode 100644
index 00000000..63a2871b
--- /dev/null
+++ b/test-suite/output/ErrorInCanonicalStructures2.out
@@ -0,0 +1,5 @@
+File "stdin", line 3, characters 0-24:
+Error:
+Could not declare a canonical structure bar.
+Expected an instance of a record or structure.
+
diff --git a/test-suite/output/ErrorInCanonicalStructures2.v b/test-suite/output/ErrorInCanonicalStructures2.v
new file mode 100644
index 00000000..10ee177a
--- /dev/null
+++ b/test-suite/output/ErrorInCanonicalStructures2.v
@@ -0,0 +1,3 @@
+Definition bar := 99.
+
+Canonical Structure bar.
diff --git a/test-suite/output/ErrorInModule.out b/test-suite/output/ErrorInModule.out
new file mode 100644
index 00000000..776dfeb5
--- /dev/null
+++ b/test-suite/output/ErrorInModule.out
@@ -0,0 +1,3 @@
+File "stdin", line 3, characters 20-31:
+Error: The reference nonexistent was not found in the current environment.
+
diff --git a/test-suite/output/ErrorInModule.v b/test-suite/output/ErrorInModule.v
new file mode 100644
index 00000000..b2e3c3e9
--- /dev/null
+++ b/test-suite/output/ErrorInModule.v
@@ -0,0 +1,4 @@
+(* -*- mode: coq; coq-prog-args: ("-quick") -*- *)
+Module M.
+ Definition foo := nonexistent.
+End M.
diff --git a/test-suite/output/ErrorInSection.out b/test-suite/output/ErrorInSection.out
new file mode 100644
index 00000000..776dfeb5
--- /dev/null
+++ b/test-suite/output/ErrorInSection.out
@@ -0,0 +1,3 @@
+File "stdin", line 3, characters 20-31:
+Error: The reference nonexistent was not found in the current environment.
+
diff --git a/test-suite/output/ErrorInSection.v b/test-suite/output/ErrorInSection.v
new file mode 100644
index 00000000..505c5ce3
--- /dev/null
+++ b/test-suite/output/ErrorInSection.v
@@ -0,0 +1,4 @@
+(* -*- mode: coq; coq-prog-args: ("-quick") -*- *)
+Section S.
+ Definition foo := nonexistent.
+End S.
diff --git a/test-suite/output/Errors.out b/test-suite/output/Errors.out
index 06a6b2d1..38d055b2 100644
--- a/test-suite/output/Errors.out
+++ b/test-suite/output/Errors.out
@@ -7,4 +7,4 @@ In nested Ltac calls to "f" and "apply x", last call failed.
Unable to unify "nat" with "True".
The command has indeed failed with message:
Ltac call to "instantiate ( (ident) := (lglob) )" failed.
-Error: Instance is not well-typed in the environment of ?x.
+Instance is not well-typed in the environment of ?x.
diff --git a/test-suite/output/Existentials.out b/test-suite/output/Existentials.out
index 9680d2bb..18f5d89f 100644
--- a/test-suite/output/Existentials.out
+++ b/test-suite/output/Existentials.out
@@ -1,4 +1,4 @@
-Existential 1 = ?Goal : [p : nat q := S p : nat n : nat m : nat |- ?y = m]
+Existential 1 = ?Goal : [p : nat q := S p : nat n : nat m : nat |- ?y = m]
Existential 2 =
-?y : [p : nat q := S p : nat n : nat m : nat |- nat] (p, q cannot be used)
-Existential 3 = ?Goal0 : [q : nat n : nat m : nat |- n = ?y]
+?y : [p : nat q := S p : nat n : nat m : nat |- nat] (p, q cannot be used) (shelved)
+Existential 3 = ?Goal0 : [q : nat n : nat m : nat |- n = ?y]
diff --git a/test-suite/output/Extraction_infix.out b/test-suite/output/Extraction_infix.out
new file mode 100644
index 00000000..29d50775
--- /dev/null
+++ b/test-suite/output/Extraction_infix.out
@@ -0,0 +1,20 @@
+(** val test : foo **)
+
+let test =
+ (fun (b, p) -> bar) (True, False)
+(** val test : foo **)
+
+let test =
+ True@@?False
+(** val test : foo **)
+
+let test =
+ True#^^False
+(** val test : foo **)
+
+let test =
+ True@?:::False
+(** val test : foo **)
+
+let test =
+ True @?::: False
diff --git a/test-suite/output/Extraction_infix.v b/test-suite/output/Extraction_infix.v
new file mode 100644
index 00000000..fe5926a3
--- /dev/null
+++ b/test-suite/output/Extraction_infix.v
@@ -0,0 +1,26 @@
+(* @herbelin's example for issue #6212 *)
+
+Require Import Extraction.
+Inductive I := C : bool -> bool -> I.
+Definition test := C true false.
+
+(* the parentheses around the function wrong signalled an infix operator *)
+
+Extract Inductive I => "foo" [ "(fun (b, p) -> bar)" ].
+Extraction test.
+
+(* some bonafide infix operators *)
+
+Extract Inductive I => "foo" [ "(@@?)" ].
+Extraction test.
+
+Extract Inductive I => "foo" [ "(#^^)" ].
+Extraction test.
+
+Extract Inductive I => "foo" [ "(@?:::)" ].
+Extraction test.
+
+(* allow whitespace around infix operator *)
+
+Extract Inductive I => "foo" [ "( @?::: )" ].
+Extraction test.
diff --git a/test-suite/output/Extraction_matchs_2413.v b/test-suite/output/Extraction_matchs_2413.v
index 6c514b16..1ecd9771 100644
--- a/test-suite/output/Extraction_matchs_2413.v
+++ b/test-suite/output/Extraction_matchs_2413.v
@@ -1,5 +1,7 @@
(** Extraction : tests of optimizations of pattern matching *)
+Require Coq.extraction.Extraction.
+
(** First, a few basic tests *)
Definition test1 b :=
diff --git a/test-suite/output/Fixpoint.out b/test-suite/output/Fixpoint.out
index a13ae462..6879cbc3 100644
--- a/test-suite/output/Fixpoint.out
+++ b/test-suite/output/Fixpoint.out
@@ -10,3 +10,5 @@ let fix f (m : nat) : nat := match m with
end in f 0
: nat
Ltac f id1 id2 := fix id1 2 with (id2 (n:_) (H:odd n) {struct H} : n >= 1)
+ = cofix inf : Inf := {| projS := inf |}
+ : Inf
diff --git a/test-suite/output/Fixpoint.v b/test-suite/output/Fixpoint.v
index 8afa50ba..61ae4edb 100644
--- a/test-suite/output/Fixpoint.v
+++ b/test-suite/output/Fixpoint.v
@@ -7,7 +7,7 @@ Check
| a :: l => f a :: F _ _ f l
end).
-(* V8 printing of this term used to failed in V8.0 and V8.0pl1 (cf bug #860) *)
+(* V8 printing of this term used to failed in V8.0 and V8.0pl1 (cf BZ#860) *)
Check
let fix f (m : nat) : nat :=
match m with
@@ -44,4 +44,7 @@ fix even_pos_odd_pos 2 with (odd_pos_even_pos n (H:odd n) {struct H} : n >= 1).
omega.
Qed.
-
+CoInductive Inf := S { projS : Inf }.
+Definition expand_Inf (x : Inf) := S (projS x).
+CoFixpoint inf := S inf.
+Eval compute in inf.
diff --git a/test-suite/output/FunExt.out b/test-suite/output/FunExt.out
new file mode 100644
index 00000000..8d2a125c
--- /dev/null
+++ b/test-suite/output/FunExt.out
@@ -0,0 +1,19 @@
+The command has indeed failed with message:
+Ltac call to "extensionality in (var)" failed.
+Tactic failure: Not an extensional equality.
+The command has indeed failed with message:
+Ltac call to "extensionality in (var)" failed.
+Tactic failure: Not an extensional equality.
+The command has indeed failed with message:
+Ltac call to "extensionality in (var)" failed.
+Tactic failure: Not an extensional equality.
+The command has indeed failed with message:
+Ltac call to "extensionality in (var)" failed.
+Tactic failure: Not an extensional equality.
+The command has indeed failed with message:
+Ltac call to "extensionality in (var)" failed.
+Tactic failure: Already an intensional equality.
+The command has indeed failed with message:
+In nested Ltac calls to "extensionality in (var)" and
+"clearbody (ne_var_list)", last call failed.
+Hypothesis e depends on the body of H'
diff --git a/test-suite/output/FunExt.v b/test-suite/output/FunExt.v
new file mode 100644
index 00000000..7658ce71
--- /dev/null
+++ b/test-suite/output/FunExt.v
@@ -0,0 +1,168 @@
+Require Import FunctionalExtensionality.
+
+(* Basic example *)
+Goal (forall x y z, x+y+z = z+y+x) -> (fun x y z => z+y+x) = (fun x y z => x+y+z).
+intro H.
+extensionality in H.
+symmetry in H.
+assumption.
+Qed.
+
+(* Test rejection of non-equality *)
+Goal forall H:(forall A:Prop, A), H=H -> forall H'':True, H''=H''.
+intros H H' H''.
+Fail extensionality in H.
+clear H'.
+Fail extensionality in H.
+Fail extensionality in H''.
+Abort.
+
+(* Test success on dependent equality *)
+Goal forall (p : forall x, S x = x + 1), p = p -> S = fun x => x + 1.
+intros p H.
+extensionality in p.
+assumption.
+Qed.
+
+(* Test dependent functional extensionality *)
+Goal forall (P:nat->Type) (Q:forall a, P a -> Type) (f g:forall a (b:P a), Q a b),
+ (forall x y, f x y = g x y) -> f = g.
+intros * H.
+extensionality in H.
+assumption.
+Qed.
+
+(* Other tests, courtesy of Jason Gross *)
+
+Goal forall A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c), (forall a b c, f a b c = g a b c) -> f = g.
+Proof.
+ intros A B C D f g H.
+ extensionality in H.
+ match type of H with f = g => idtac end.
+ exact H.
+Qed.
+
+Section test_section.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall a b c, f a b c = g a b c).
+ Goal f = g.
+ Proof.
+ extensionality in H.
+ match type of H with f = g => idtac end.
+ exact H.
+ Qed.
+End test_section.
+
+Section test2.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall b a c, f a b c = g a b c).
+ Goal (fun b a c => f a b c) = (fun b a c => g a b c).
+ Proof.
+ extensionality in H.
+ match type of H with (fun b a => f a b) = (fun b' a' => g a' b') => idtac end.
+ exact H.
+ Qed.
+End test2.
+
+Section test3.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall a c, (fun b => f a b c) = (fun b => g a b c)).
+ Goal (fun a c b => f a b c) = (fun a c b => g a b c).
+ Proof.
+ extensionality in H.
+ match type of H with (fun a c b => f a b c) = (fun a' c' b' => g a' b' c') => idtac end.
+ exact H.
+ Qed.
+End test3.
+
+Section test4.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c -> Type)
+ (H : forall b, (forall a c d, f a b c d) = (forall a c d, g a b c d)).
+ Goal (fun b => forall a c d, f a b c d) = (fun b => forall a c d, g a b c d).
+ Proof.
+ extensionality in H.
+ exact H.
+ Qed.
+End test4.
+
+Section test5.
+ Goal nat -> True.
+ Proof.
+ intro n.
+ Fail extensionality in n.
+ constructor.
+ Qed.
+End test5.
+
+Section test6.
+ Goal let f := fun A (x : A) => x in let pf := fun A x => @eq_refl _ (f A x) in f = f.
+ Proof.
+ intros f pf.
+ extensionality in pf.
+ match type of pf with f = f => idtac end.
+ exact pf.
+ Qed.
+End test6.
+
+Section test7.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall a b c, True -> f a b c = g a b c).
+ Goal True.
+ Proof.
+ extensionality in H.
+ match type of H with (fun a b c (_ : True) => f a b c) = (fun a' b' c' (_ : True) => g a' b' c') => idtac end.
+ constructor.
+ Qed.
+End test7.
+
+Section test8.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : True -> forall a b c, f a b c = g a b c).
+ Goal True.
+ Proof.
+ extensionality in H.
+ match type of H with (fun (_ : True) => f) = (fun (_ : True) => g) => idtac end.
+ constructor.
+ Qed.
+End test8.
+
+Section test9.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall b a c, f a b c = g a b c).
+ Goal (fun b a c => f a b c) = (fun b a c => g a b c).
+ Proof.
+ pose H as H'.
+ extensionality in H.
+ extensionality in H'.
+ let T := type of H in let T' := type of H' in constr_eq T T'.
+ match type of H with (fun b a => f a b) = (fun b' a' => g a' b') => idtac end.
+ exact H'.
+ Qed.
+End test9.
+
+Section test10.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : f = g).
+ Goal True.
+ Proof.
+ Fail extensionality in H.
+ constructor.
+ Qed.
+End test10.
+
+Section test11.
+ Context A B C (D : forall a : A, C a -> Type) (f g : forall a : A, B -> forall c : C a, D a c)
+ (H : forall a b c, f a b c = f a b c).
+ Goal True.
+ Proof.
+ pose H as H'.
+ pose (eq_refl : H = H') as e.
+ extensionality in H.
+ Fail extensionality in H'.
+ clear e.
+ extensionality in H'.
+ let T := type of H in let T' := type of H' in constr_eq T T'.
+ lazymatch type of H with f = f => idtac end.
+ constructor.
+ Qed.
+End test11.
diff --git a/test-suite/output/Implicit.v b/test-suite/output/Implicit.v
index 7c9b89f9..306532c0 100644
--- a/test-suite/output/Implicit.v
+++ b/test-suite/output/Implicit.v
@@ -1,7 +1,7 @@
Set Implicit Arguments.
Unset Strict Implicit.
-(* Suggested by Pierre Casteran (bug #169) *)
+(* Suggested by Pierre Casteran (BZ#169) *)
(* Argument 3 is needed to typecheck and should be printed *)
Definition compose (A B C : Set) (f : A -> B) (g : B -> C) (x : A) := g (f x).
Check (compose (C:=nat) S).
diff --git a/test-suite/output/Inductive.out b/test-suite/output/Inductive.out
index e912003f..af202ea0 100644
--- a/test-suite/output/Inductive.out
+++ b/test-suite/output/Inductive.out
@@ -1,3 +1,7 @@
The command has indeed failed with message:
Last occurrence of "list'" must have "A" as 1st argument in
"A -> list' A -> list' (A * A)%type".
+Inductive foo (A : Type) (x : A) (y : A := x) : Prop := Foo : foo A x
+
+For foo: Argument scopes are [type_scope _]
+For Foo: Argument scopes are [type_scope _]
diff --git a/test-suite/output/Inductive.v b/test-suite/output/Inductive.v
index 8db8956e..8ff91268 100644
--- a/test-suite/output/Inductive.v
+++ b/test-suite/output/Inductive.v
@@ -1,3 +1,7 @@
Fail Inductive list' (A:Set) : Set :=
| nil' : list' A
| cons' : A -> list' A -> list' (A*A).
+
+(* Check printing of let-ins *)
+Inductive foo (A : Type) (x : A) (y := x) := Foo.
+Print foo.
diff --git a/test-suite/output/Int31Syntax.out b/test-suite/output/Int31Syntax.out
new file mode 100644
index 00000000..4e8796c1
--- /dev/null
+++ b/test-suite/output/Int31Syntax.out
@@ -0,0 +1,14 @@
+I31
+ : digits31 int31
+2
+ : int31
+660865024
+ : int31
+2 + 2
+ : int31
+2 + 2
+ : int31
+ = 4
+ : int31
+ = 710436486
+ : int31
diff --git a/test-suite/output/Int31Syntax.v b/test-suite/output/Int31Syntax.v
new file mode 100644
index 00000000..83be3b97
--- /dev/null
+++ b/test-suite/output/Int31Syntax.v
@@ -0,0 +1,13 @@
+Require Import Int31 Cyclic31.
+
+Open Scope int31_scope.
+Check I31. (* Would be nice to have I31 : digits->digits->...->int31
+ For the moment, I31 : digits31 int31, which is better
+ than (fix nfun .....) size int31 *)
+Check 2.
+Check 1000000000000000000. (* = 660865024, after modulo 2^31 *)
+Check (add31 2 2).
+Check (2+2).
+Eval vm_compute in 2+2.
+Eval vm_compute in 65675757 * 565675998.
+Close Scope int31_scope.
diff --git a/test-suite/output/InvalidDisjunctiveIntro.out b/test-suite/output/InvalidDisjunctiveIntro.out
new file mode 100644
index 00000000..25a306b4
--- /dev/null
+++ b/test-suite/output/InvalidDisjunctiveIntro.out
@@ -0,0 +1,16 @@
+The command has indeed failed with message:
+Cannot coerce to a disjunctive/conjunctive pattern.
+The command has indeed failed with message:
+Disjunctive/conjunctive introduction pattern expected.
+The command has indeed failed with message:
+Cannot coerce to a disjunctive/conjunctive pattern.
+The command has indeed failed with message:
+Cannot coerce to a disjunctive/conjunctive pattern.
+The command has indeed failed with message:
+Ltac variable H is bound to <tactic closure> which cannot be coerced to
+an introduction pattern.
+The command has indeed failed with message:
+Disjunctive/conjunctive introduction pattern expected.
+The command has indeed failed with message:
+Ltac variable H' is bound to <tactic closure> which cannot be coerced to
+an introduction pattern.
diff --git a/test-suite/output/InvalidDisjunctiveIntro.v b/test-suite/output/InvalidDisjunctiveIntro.v
new file mode 100644
index 00000000..4febdf03
--- /dev/null
+++ b/test-suite/output/InvalidDisjunctiveIntro.v
@@ -0,0 +1,18 @@
+Theorem test (A:Prop) : A \/ A -> A.
+ Fail intros H; destruct H as H.
+ (* Cannot coerce to a disjunctive/conjunctive pattern. *)
+ Fail intro H; destruct H as H.
+ (* Disjunctive/conjunctive introduction pattern expected. *)
+ Fail let H := fresh in intro H; destruct H as H.
+ (* Cannot coerce to a disjunctive/conjunctive pattern. *)
+ Fail let H := fresh in intros H; destruct H as H.
+ (* Cannot coerce to a disjunctive/conjunctive pattern. *)
+ Fail let H := idtac in intros H; destruct H as H.
+ (* Ltac variable H is bound to <tactic closure> which cannot be
+coerced to an introduction pattern. *)
+ Fail let H := idtac in intros H; destruct H as H'.
+ (* Disjunctive/conjunctive introduction pattern expected. *)
+ Fail let H' := idtac in intros H; destruct H as H'.
+(* Ltac variable H' is bound to <tactic closure> which cannot
+be coerced to an introduction pattern. *)
+Abort.
diff --git a/test-suite/output/Load.out b/test-suite/output/Load.out
new file mode 100644
index 00000000..0904d554
--- /dev/null
+++ b/test-suite/output/Load.out
@@ -0,0 +1,6 @@
+f = 2
+ : nat
+u = I
+ : True
+The command has indeed failed with message:
+Files processed by Load cannot leave open proofs.
diff --git a/test-suite/output/Load.v b/test-suite/output/Load.v
new file mode 100644
index 00000000..96750741
--- /dev/null
+++ b/test-suite/output/Load.v
@@ -0,0 +1,7 @@
+Load "output/load/Load_noproof.v".
+Print f.
+
+Load "output/load/Load_proof.v".
+Print u.
+
+Fail Load "output/load/Load_openproof.v".
diff --git a/test-suite/output/MExtraction.v b/test-suite/output/MExtraction.v
new file mode 100644
index 00000000..352e422c
--- /dev/null
+++ b/test-suite/output/MExtraction.v
@@ -0,0 +1,12 @@
+Require Import micromega.MExtraction.
+Require Import RingMicromega.
+Require Import QArith.
+Require Import VarMap.
+Require Import ZMicromega.
+Require Import QMicromega.
+Require Import RMicromega.
+
+Recursive Extraction
+ List.map RingMicromega.simpl_cone (*map_cone indexes*)
+ denorm Qpower vm_add
+ n_of_Z N.of_nat ZTautoChecker ZWeakChecker QTautoChecker RTautoChecker find.
diff --git a/test-suite/output/Notations.out b/test-suite/output/Notations.out
index 26eaca82..b60b1ee8 100644
--- a/test-suite/output/Notations.out
+++ b/test-suite/output/Notations.out
@@ -41,29 +41,29 @@ fun x : nat => ifn x is succ n then n else 0
-4
: Z
The command has indeed failed with message:
-Error: x should not be bound in a recursive pattern of the right-hand side.
+Cannot find where the recursive pattern starts.
The command has indeed failed with message:
-Error: in the right-hand side, y and z should appear in
+in the right-hand side, y and z should appear in
term position as part of a recursive pattern.
The command has indeed failed with message:
The reference w was not found in the current environment.
The command has indeed failed with message:
-Error: in the right-hand side, y and z should appear in
+in the right-hand side, y and z should appear in
term position as part of a recursive pattern.
The command has indeed failed with message:
-Error: z is expected to occur in binding position in the right-hand side.
+z is expected to occur in binding position in the right-hand side.
The command has indeed failed with message:
-Error: as y is a non-closed binder, no such "," is allowed to occur.
+as y is a non-closed binder, no such "," is allowed to occur.
The command has indeed failed with message:
-Error: Cannot find where the recursive pattern starts.
+Cannot find where the recursive pattern starts.
The command has indeed failed with message:
-Error: Cannot find where the recursive pattern starts.
+Cannot find where the recursive pattern starts.
The command has indeed failed with message:
-Error: Cannot find where the recursive pattern starts.
+Cannot find where the recursive pattern starts.
The command has indeed failed with message:
-Error: Cannot find where the recursive pattern starts.
+Cannot find where the recursive pattern starts.
The command has indeed failed with message:
-Error: Both ends of the recursive pattern are the same.
+Both ends of the recursive pattern are the same.
SUM (nat * nat) nat
: Set
FST (0; 1)
@@ -133,3 +133,5 @@ fun (x : nat) (p : x = x) => match p with
| 1 => 1
end = p
: forall x : nat, x = x -> Prop
+bar 0
+ : nat
diff --git a/test-suite/output/Notations.v b/test-suite/output/Notations.v
index 2ccca829..fe6c05c3 100644
--- a/test-suite/output/Notations.v
+++ b/test-suite/output/Notations.v
@@ -1,3 +1,14 @@
+(* Bug 5568, don't warn for notations in repeated module import *)
+
+Module foo.
+Notation compose := (fun g f => g f).
+Notation "g & f" := (compose g f) (at level 10).
+End foo.
+
+Import foo.
+Import foo.
+Import foo.
+
(**********************************************************************)
(* Notations for if and let (submitted by Roland Zumkeller) *)
@@ -280,3 +291,11 @@ Check fun (x:nat) (p : x=x) => match p with ONE => ONE end = p.
Notation "1" := eq_refl.
Check fun (x:nat) (p : x=x) => match p with 1 => 1 end = p.
+(* Check bug 5693 *)
+
+Module M.
+Definition A := 0.
+Definition bar (a b : nat) := plus a b.
+Notation "" := A (format "", only printing).
+Check (bar A 0).
+End M.
diff --git a/test-suite/output/Notations2.out b/test-suite/output/Notations2.out
index ad60aecc..41d15937 100644
--- a/test-suite/output/Notations2.out
+++ b/test-suite/output/Notations2.out
@@ -17,10 +17,9 @@ fun (P : nat -> nat -> Prop) (x : nat) => exists y, P x y
∃ n p : nat, n + p = 0
: Prop
let a := 0 in
-∃ x y : nat,
-let b := 1 in
-let c := b in
-let d := 2 in ∃ z : nat, let e := 3 in let f := 4 in x + y = z + d
+∃ (x y : nat) (b := 1) (c := b) (d := 2) (z : nat),
+let e := 3 in
+let f := 4 in x + y = z + d
: Prop
∀ n p : nat, n + p = 0
: Prop
@@ -32,11 +31,22 @@ let d := 2 in ∃ z : nat, let e := 3 in let f := 4 in x + y = z + d
: Type -> Prop
λ A : Type, ∀ n p : A, n = p
: Type -> Prop
-let' f (x y : nat) (a:=0) (z : nat) (_ : bool) := x + y + z + 1 in f 0 1 2
+let' f (x y : nat) (a := 0) (z : nat) (_ : bool) := x + y + z + 1 in f 0 1 2
: bool -> nat
λ (f : nat -> nat) (x : nat), f(x) + S(x)
: (nat -> nat) -> nat -> nat
Notation plus2 n := (S(S(n)))
+λ n : list(nat), match n with
+ | list1 => 0
+ | _ => 2
+ end
+ : list(nat) -> nat
+λ n : list(nat),
+match n with
+| list1 => 0
+| nil | 0 :: _ | 1 :: _ :: _ | plus2 _ :: _ => 2
+end
+ : list(nat) -> nat
λ n : list(nat),
match n with
| nil => 2
@@ -84,3 +94,9 @@ a≡
: Set
: Set
+# a : .α =>
+# b : .α =>
+let res := 0 in
+for i from 0 to a updating (res)
+{{for j from 0 to b updating (res) {{S res}};; res}};; res
+ : .α -> .α -> .α
diff --git a/test-suite/output/Notations2.v b/test-suite/output/Notations2.v
index ceb29d1b..bcb24687 100644
--- a/test-suite/output/Notations2.v
+++ b/test-suite/output/Notations2.v
@@ -36,8 +36,9 @@ Check fun P:nat->nat->Prop => fun x:nat => ex (P x).
(* Test notations with binders *)
-Notation "∃ x .. y , P":= (ex (fun x => .. (ex (fun y => P)) ..))
- (x binder, y binder, at level 200, right associativity).
+Notation "∃ x .. y , P":= (ex (fun x => .. (ex (fun y => P)) ..))
+ (x binder, y binder, at level 200, right associativity,
+ format "'[ ' ∃ x .. y ']' , P").
Check (∃ n p, n+p=0).
@@ -78,6 +79,13 @@ Notation plus2 n := (S (S n)).
(* plus2 was not correctly printed in the two following tests in 8.3pl1 *)
Print plus2.
Check fun n => match n with list1 => 0 | _ => 2 end.
+Unset Printing Allow Match Default Clause.
+Check fun n => match n with list1 => 0 | _ => 2 end.
+Unset Printing Factorizable Match Patterns.
+Check fun n => match n with list1 => 0 | _ => 2 end.
+Set Printing Allow Match Default Clause.
+Set Printing Factorizable Match Patterns.
+
End A.
(* This one is not fully satisfactory because binders in the same type
@@ -145,3 +153,24 @@ Check .a≡.
Notation ".α" := nat.
Check nat.
Check .α.
+
+(* A test for #6304 *)
+
+Module M6304.
+Notation "'for' m 'from' 0 'to' N 'updating' ( s1 ) {{ b }} ;; rest" :=
+ (let s1 :=
+ (fix rec(n: nat) := match n with
+ | 0 => s1
+ | S m => let s1 := rec m in b
+ end) N
+ in rest)
+ (at level 20).
+
+Check fun (a b : nat) =>
+ let res := 0 in
+ for i from 0 to a updating (res) {{
+ for j from 0 to b updating (res) {{ S res }};;
+ res
+ }};; res.
+
+End M6304.
diff --git a/test-suite/output/Notations3.out b/test-suite/output/Notations3.out
index 360f3796..5ab61616 100644
--- a/test-suite/output/Notations3.out
+++ b/test-suite/output/Notations3.out
@@ -1,3 +1,5 @@
+{x : nat | x = 0} + {True /\ False} + {forall x : nat, x = 0}
+ : Set
[<0, 2 >]
: nat * nat * (nat * nat)
[<0, 2 >]
@@ -31,24 +33,24 @@ fun f : forall x : nat * (bool * unit), ?T => CURRY (x : nat) (y : bool), f
: (forall x : nat * (bool * unit), ?T) ->
forall (x : nat) (y : bool), ?T@{x:=(x, (y, tt))}
where
-?T : [x : nat * (bool * unit) |- Type]
+?T : [x : nat * (bool * unit) |- Type]
fun f : forall x : bool * (nat * unit), ?T =>
CURRYINV (x : nat) (y : bool), f
: (forall x : bool * (nat * unit), ?T) ->
forall (x : nat) (y : bool), ?T@{x:=(y, (x, tt))}
where
-?T : [x : bool * (nat * unit) |- Type]
+?T : [x : bool * (nat * unit) |- Type]
fun f : forall x : unit * nat * bool, ?T => CURRYLEFT (x : nat) (y : bool), f
: (forall x : unit * nat * bool, ?T) ->
forall (x : nat) (y : bool), ?T@{x:=(tt, x, y)}
where
-?T : [x : unit * nat * bool |- Type]
+?T : [x : unit * nat * bool |- Type]
fun f : forall x : unit * bool * nat, ?T =>
CURRYINVLEFT (x : nat) (y : bool), f
: (forall x : unit * bool * nat, ?T) ->
forall (x : nat) (y : bool), ?T@{x:=(tt, y, x)}
where
-?T : [x : unit * bool * nat |- Type]
+?T : [x : unit * bool * nat |- Type]
forall n : nat, {#n | 1 > n}
: Prop
forall x : nat, {|x | x > 0|}
@@ -98,3 +100,149 @@ fun n : nat => foo4 n (fun _ y : nat => ETA z : nat, (fun _ : nat => y = 0))
: nat -> Prop
tele (t : Type) '(y, z) (x : t0) := tt
: forall t : Type, nat * nat -> t -> fpack
+[fun x : nat => x + 0;; fun x : nat => x + 1;; fun x : nat => x + 2]
+ : (nat -> nat) *
+ ((nat -> nat) *
+ ((nat -> nat) *
+ ((nat -> nat) * ((nat -> nat) * ((nat -> nat) * (nat -> nat))))))
+foo5 x nat x
+ : nat -> nat
+fun x : ?A => x === x
+ : forall x : ?A, x = x
+where
+?A : [x : ?A |- Type] (x cannot be used)
+{{0, 1}}
+ : nat * nat
+{{0, 1, 2}}
+ : nat * (nat * nat)
+{{0, 1, 2, 3}}
+ : nat * (nat * (nat * nat))
+letpair x [1] = {0};
+return (1, 2, 3, 4)
+ : nat * nat * nat * nat
+{{ 1 | 1 // 1 }}
+ : nat
+!!! _ _ : nat, True
+ : (nat -> Prop) * ((nat -> Prop) * Prop)
+((*1).2).3
+ : nat
+*(1.2)
+ : nat
+! '{{x, y}}, x.y = 0
+ : Prop
+exists x : nat,
+ nat ->
+ exists y : nat,
+ nat -> exists '{{u, t}}, forall z1 : nat, z1 = 0 /\ x.y = 0 /\ u.t = 0
+ : Prop
+exists x : nat,
+ nat ->
+ exists y : nat,
+ nat -> exists '{{z, t}}, forall z2 : nat, z2 = 0 /\ x.y = 0 /\ z.t = 0
+ : Prop
+exists_true '{{x, y}} (u := 0) '{{z, t}}, x.y = 0 /\ z.t = 0
+ : Prop
+exists_true (A : Type) (R : A -> A -> Prop) (_ : Reflexive R),
+(forall x : A, R x x)
+ : Prop
+exists_true (x : nat) (A : Type) (R : A -> A -> Prop)
+(_ : Reflexive R) (y : nat), x.y = 0 -> forall z : A, R z z
+ : Prop
+{{{{True, nat -> True}}, nat -> True}}
+ : Prop * Prop * Prop
+{{D 1, 2}}
+ : nat * nat * (nat * nat * (nat * nat))
+! a b : nat # True #
+ : Prop * (Prop * Prop)
+!!!! a b : nat # True #
+ : Prop * Prop * (Prop * Prop * Prop)
+@@ a b : nat # a = b # b = a #
+ : Prop * Prop
+exists_non_null x y z t : nat , x = y /\ z = t
+ : Prop
+forall_non_null x y z t : nat , x = y /\ z = t
+ : Prop
+{{RL 1, 2}}
+ : nat * (nat * nat)
+{{RR 1, 2}}
+ : nat * nat * nat
+@pair nat (prod nat nat) (S (S O)) (@pair nat nat (S O) O)
+ : prod nat (prod nat nat)
+@pair (prod nat nat) nat (@pair nat nat O (S (S O))) (S O)
+ : prod (prod nat nat) nat
+{{RLRR 1, 2}}
+ : nat * (nat * nat) * (nat * nat * nat) * (nat * (nat * nat)) *
+ (nat * nat * nat)
+pair
+ (pair
+ (pair (pair (S (S O)) (pair (S O) O)) (pair (pair O (S (S O))) (S O)))
+ (pair (S O) (pair (S (S O)) O))) (pair (pair O (S O)) (S (S O)))
+ : prod
+ (prod (prod (prod nat (prod nat nat)) (prod (prod nat nat) nat))
+ (prod nat (prod nat nat))) (prod (prod nat nat) nat)
+fun x : nat => if x is n .+ 1 then n else 1
+ : nat -> nat
+{'{{x, y}} : nat * nat | x.y = 0}
+ : Set
+exists2' {{x, y}}, x = 0 & y = 0
+ : Prop
+myexists2 x : nat * nat,
+ let '{{y, z}} := x in y > z & let '{{y, z}} := x in z > y
+ : Prop
+fun '({{x, y}} as z) => x.y = 0 /\ z = z
+ : nat * nat -> Prop
+myexists ({{x, y}} as z), x.y = 0 /\ z = z
+ : Prop
+exists '({{x, y}} as z), x.y = 0 /\ z = z
+ : Prop
+∀ '({{x, y}} as z), x.y = 0 /\ z = z
+ : Prop
+fun '({{{{x, y}}, true}} | {{{{x, y}}, false}}) => x.y
+ : nat * nat * bool -> nat
+myexists ({{{{x, y}}, true}} | {{{{x, y}}, false}}), x > y
+ : Prop
+exists '({{{{x, y}}, true}} | {{{{x, y}}, false}}), x > y
+ : Prop
+∀ '({{{{x, y}}, true}} | {{{{x, y}}, false}}), x > y
+ : Prop
+fun p : nat => if p is S n then n else 0
+ : nat -> nat
+fun p : comparison => if p is Lt then 1 else 0
+ : comparison -> nat
+fun S : nat => [S | S.S]
+ : nat -> nat * (nat -> nat)
+fun N : nat => [N | N.0]
+ : nat -> nat * (nat -> nat)
+fun S : nat => [[S | S.S]]
+ : nat -> nat * (nat -> nat)
+{I : nat | I = I}
+ : Set
+{'I : True | I = I}
+ : Prop
+{'{{x, y}} : nat * nat | x.y = 0}
+ : Set
+exists2 '{{y, z}} : nat * nat, y > z & z > y
+ : Prop
+foo =
+fun l : list nat => match l with
+ | _ :: (_ :: _) as l1 => l1
+ | _ => l
+ end
+ : list nat -> list nat
+
+Argument scope is [list_scope]
+Notation
+"'exists' x .. y , p" := ex (fun x => .. (ex (fun y => p)) ..) : type_scope
+(default interpretation)
+"'exists' ! x .. y , p" := ex
+ (unique
+ (fun x => .. (ex (unique (fun y => p))) ..))
+: type_scope (default interpretation)
+Notation
+"( x , y , .. , z )" := pair .. (pair x y) .. z : core_scope
+(default interpretation)
+1 subgoal
+
+ ============================
+ ##@%
+ ^^^
diff --git a/test-suite/output/Notations3.v b/test-suite/output/Notations3.v
index 4b8bfe31..876aaa39 100644
--- a/test-suite/output/Notations3.v
+++ b/test-suite/output/Notations3.v
@@ -1,4 +1,9 @@
(**********************************************************************)
+(* Check precedence, spacing, etc. in printing with curly brackets *)
+
+Check {x|x=0}+{True/\False}+{forall x, x=0}.
+
+(**********************************************************************)
(* Check printing of notations with several instances of a recursive pattern *)
(* Was wrong but I could not trigger a problem due to the collision between *)
(* different instances of ".." *)
@@ -139,3 +144,258 @@ Notation "'tele' x .. z := b" :=
(at level 85, x binder, z binder).
Check tele (t:Type) '((y,z):nat*nat) (x:t) := tt.
+
+(* Checking that "fun" in a notation does not mixed up with the
+ detection of a recursive binder *)
+
+Notation "[ x ;; .. ;; y ]" := ((x,((fun u => S u), .. (y,(fun u => S u,fun v:nat => v)) ..))).
+Check [ fun x => x+0 ;; fun x => x+1 ;; fun x => x+2 ].
+
+(* Cyprien's part of bug #4765 *)
+
+Section Bug4765.
+
+Notation foo5 x T y := (fun x : T => y).
+Check foo5 x nat x.
+
+End Bug4765.
+
+(**********************************************************************)
+(* Test printing of #5526 *)
+
+Notation "x === x" := (eq_refl x) (only printing, at level 10).
+Check (fun x => eq_refl x).
+
+(* Test recursive notations with the recursive pattern repeated on the right *)
+
+Notation "{{ x , .. , y , z }}" := (pair x .. (pair y z) ..).
+Check {{0,1}}.
+Check {{0,1,2}}.
+Check {{0,1,2,3}}.
+
+(* Test printing of #5608 *)
+
+Reserved Notation "'letpair' x [1] = { A } ; 'return' ( b0 , b1 , .. , b2 )"
+ (at level 200, format "'letpair' x [1] = { A } ; '//' 'return' ( b0 , b1 , .. , b2 )").
+Notation "'letpair' x [1] = { a } ; 'return' ( b0 , b1 , .. , b2 )" :=
+ (let x:=a in ( .. (b0,b1) .., b2)).
+Check letpair x [1] = {0}; return (1,2,3,4).
+
+(* Test spacing in #5569 *)
+
+Notation "{ { xL | xR // xcut } }" := (xL+xR+xcut)
+ (at level 0, xR at level 39, format "{ { xL | xR // xcut } }").
+Check 1+1+1.
+
+(* Test presence of notation variables in the recursive parts (introduced in dfdaf4de) *)
+Notation "!!! x .. y , b" := ((fun x => b), .. ((fun y => b), True) ..) (at level 200, x binder).
+Check !!! (x y:nat), True.
+
+(* Allow level for leftmost nonterminal when printing-only, BZ#5739 *)
+
+Notation "* x" := (id x) (only printing, at level 15, format "* x").
+Notation "x . y" := (x + y) (only printing, at level 20, x at level 14, left associativity, format "x . y").
+Check (((id 1) + 2) + 3).
+Check (id (1 + 2)).
+
+(* Test contraction of "forall x, let 'pat := x in ..." into "forall 'pat, ..." *)
+(* for isolated "forall" (was not working already in 8.6) *)
+Notation "! x .. y , A" := (id (forall x, .. (id (forall y, A)) .. )) (at level 200, x binder).
+Check ! '(x,y), x+y=0.
+
+(* Check that the terminator of a recursive pattern is interpreted in
+ the correct environment of bindings *)
+Notation "'exists_mixed' x .. y , P" := (ex (fun x => forall z:nat, .. (ex (fun y => forall z:nat, z=0 /\ P)) ..)) (at level 200, x binder).
+Check exists_mixed x y '(u,t), x+y=0/\u+t=0.
+Check exists_mixed x y '(z,t), x+y=0/\z+t=0.
+
+(* Check that intermediary let-in are inserted inbetween instances of
+ the repeated pattern *)
+Notation "'exists_true' x .. y , P" := (exists x, True /\ .. (exists y, True /\ P) ..) (at level 200, x binder).
+Check exists_true '(x,y) (u:=0) '(z,t), x+y=0/\z+t=0.
+
+(* Check that generalized binders are correctly interpreted *)
+
+Module G.
+Generalizable Variables A R.
+Class Reflexive {A:Type} (R : A->A->Prop) := reflexivity : forall x : A, R x x.
+Check exists_true `{Reflexive A R}, forall x, R x x.
+Check exists_true x `{Reflexive A R} y, x+y=0 -> forall z, R z z.
+End G.
+
+(* Allows recursive patterns for binders to be associative on the left *)
+Notation "!! x .. y # A #" := (.. (A,(forall x, True)) ..,(forall y, True)) (at level 200, x binder).
+Check !! a b : nat # True #.
+
+(* Examples where the recursive pattern refer several times to the recursive variable *)
+
+Notation "{{D x , .. , y }}" := ((x,x), .. ((y,y),(0,0)) ..).
+Check {{D 1, 2 }}.
+
+Notation "! x .. y # A #" :=
+ ((forall x, x=x), .. ((forall y, y=y), A) ..)
+ (at level 200, x binder).
+Check ! a b : nat # True #.
+
+Notation "!!!! x .. y # A #" :=
+ (((forall x, x=x),(forall x, x=0)), .. (((forall y, y=y),(forall y, y=0)), A) ..)
+ (at level 200, x binder).
+Check !!!! a b : nat # True #.
+
+Notation "@@ x .. y # A # B #" :=
+ ((forall x, .. (forall y, A) ..), (forall x, .. (forall y, B) ..))
+ (at level 200, x binder).
+Check @@ a b : nat # a=b # b=a #.
+
+Notation "'exists_non_null' x .. y , P" :=
+ (ex (fun x => x <> 0 /\ .. (ex (fun y => y <> 0 /\ P)) ..))
+ (at level 200, x binder).
+Check exists_non_null x y z t , x=y/\z=t.
+
+Notation "'forall_non_null' x .. y , P" :=
+ (forall x, x <> 0 -> .. (forall y, y <> 0 -> P) ..)
+ (at level 200, x binder).
+Check forall_non_null x y z t , x=y/\z=t.
+
+(* Examples where the recursive pattern is in reverse order *)
+
+Notation "{{RL c , .. , d }}" := (pair d .. (pair c 0) ..).
+Check {{RL 1 , 2}}.
+
+Notation "{{RR c , .. , d }}" := (pair .. (pair 0 d) .. c).
+Check {{RR 1 , 2}}.
+
+Set Printing All.
+Check {{RL 1 , 2}}.
+Check {{RR 1 , 2}}.
+Unset Printing All.
+
+Notation "{{RLRR c , .. , d }}" := (pair d .. (pair c 0) .., pair .. (pair 0 d) .. c, pair c .. (pair d 0) .., pair .. (pair 0 c) .. d).
+Check {{RLRR 1 , 2}}.
+Unset Printing Notations.
+Check {{RLRR 1 , 2}}.
+Set Printing Notations.
+
+(* Check insensitivity of "match" clauses to order *)
+
+Module IfPat.
+Notation "'if' t 'is' n .+ 1 'then' p 'else' q" :=
+ (match t with S n => p | 0 => q end)
+ (at level 200).
+Check fun x => if x is n.+1 then n else 1.
+End IfPat.
+
+(* Examples with binding patterns *)
+
+Check {'(x,y)|x+y=0}.
+
+Module D.
+Notation "'exists2'' x , p & q" := (ex2 (fun x => p) (fun x => q))
+ (at level 200, x pattern, p at level 200, right associativity,
+ format "'[' 'exists2'' '/ ' x , '/ ' '[' p & '/' q ']' ']'")
+ : type_scope.
+
+Check exists2' (x,y), x=0 & y=0.
+End D.
+
+(* Ensuring for reparsability that printer of notations does not use a
+ pattern where only an ident could be reparsed *)
+
+Module E.
+Inductive myex2 {A:Type} (P Q:A -> Prop) : Prop :=
+ myex_intro2 : forall x:A, P x -> Q x -> myex2 P Q.
+Notation "'myexists2' x : A , p & q" := (myex2 (A:=A) (fun x => p) (fun x => q))
+ (at level 200, x ident, A at level 200, p at level 200, right associativity,
+ format "'[' 'myexists2' '/ ' x : A , '/ ' '[' p & '/' q ']' ']'")
+ : type_scope.
+Check myex2 (fun x => let '(y,z) := x in y>z) (fun x => let '(y,z) := x in z>y).
+End E.
+
+(* A canonical example of a notation with a non-recursive binder *)
+
+Parameter myex : forall {A}, (A -> Prop) -> Prop.
+Notation "'myexists' x , p" := (myex (fun x => p))
+ (at level 200, x pattern, p at level 200, right associativity).
+
+(* A canonical example of a notation with recursive binders *)
+
+Notation "∀ x .. y , P" := (forall x, .. (forall y, P) ..)
+ (at level 200, x binder, y binder, right associativity) : type_scope.
+
+(* Check that printing 'pat uses an "as" when the variable bound to
+ the pattern is dependent. We check it for the three kinds of
+ notations involving bindings of patterns *)
+
+Check fun '((x,y) as z) => x+y=0/\z=z. (* Primitive fun/forall *)
+Check myexists ((x,y) as z), x+y=0/\z=z. (* Isolated binding pattern *)
+Check exists '((x,y) as z), x+y=0/\z=z. (* Applicative recursive binder *)
+Check ∀ '((x,y) as z), x+y=0/\z=z. (* Other example of recursive binder, now treated as the exists case *)
+
+(* Check parsability and printability of irrefutable disjunctive patterns *)
+
+Check fun '(((x,y),true)|((x,y),false)) => x+y.
+Check myexists (((x,y),true)|((x,y),false)), x>y.
+Check exists '(((x,y),true)|((x,y),false)), x>y.
+Check ∀ '(((x,y),true)|((x,y),false)), x>y.
+
+(* Check Georges' printability of a "if is then else" notation *)
+
+Module IfPat2.
+Notation "'if' c 'is' p 'then' u 'else' v" :=
+ (match c with p => u | _ => v end)
+ (at level 200, p pattern at level 100).
+Check fun p => if p is S n then n else 0.
+Check fun p => if p is Lt then 1 else 0.
+End IfPat2.
+
+(* Check that mixed binders and terms defaults to ident and not pattern *)
+Module F.
+ (* First without an indirection *)
+Notation "[ n | t ]" := (n, (fun n : nat => t)).
+Check fun S : nat => [ S | S+S ].
+Check fun N : nat => (N, (fun n => n+0)). (* another test in passing *)
+ (* Then with an indirection *)
+Notation "[[ n | p | t ]]" := (n, (fun p : nat => t)).
+Notation "[[ n | t ]]" := [[ n | n | t ]].
+Check fun S : nat => [[ S | S+S ]].
+End F.
+
+(* Check parsability/printability of {x|P} and variants *)
+
+Check {I:nat|I=I}.
+Check {'I:True|I=I}.
+Check {'(x,y)|x+y=0}.
+
+(* Check exists2 with a pattern *)
+Check ex2 (fun x => let '(y,z) := x in y>z) (fun x => let '(y,z) := x in z>y).
+
+Module Issue7110.
+Open Scope list_scope.
+Notation "[ :: x1 , x2 , .. , xn & s ]" := (x1 :: x2 :: .. (xn :: s) ..)
+ (at level 0).
+Definition foo (l : list nat) :=
+ match l with
+ | a :: (b :: l) as l1 => l1
+ | _ => l
+end.
+Print foo.
+End Issue7110.
+
+Module LocateNotations.
+Locate "exists".
+Locate "( _ , _ , .. , _ )".
+End LocateNotations.
+
+Module Issue7731.
+
+Axiom (P : nat -> Prop).
+Parameter (X : nat).
+Notation "## @ E ^^^" := (P E) (at level 20, E at level 1, format "'[ ' ## '/' @ E '/' ^^^ ']'").
+Notation "%" := X.
+
+Set Printing Width 7.
+Goal ## @ % ^^^.
+Show.
+Abort.
+
+End Issue7731.
diff --git a/test-suite/output/NumbersSyntax.out b/test-suite/output/NumbersSyntax.out
deleted file mode 100644
index b2677b6a..00000000
--- a/test-suite/output/NumbersSyntax.out
+++ /dev/null
@@ -1,67 +0,0 @@
-I31
- : digits31 int31
-2
- : int31
-660865024
- : int31
-2 + 2
- : int31
-2 + 2
- : int31
- = 4
- : int31
- = 710436486
- : int31
-2
- : BigN.t'
-1000000000000000000
- : BigN.t'
-2 + 2
- : bigN
-2 + 2
- : bigN
- = 4
- : bigN
- = 37151199385380486
- : bigN
- = 1267650600228229401496703205376
- : bigN
-2
- : BigZ.t_
--1000000000000000000
- : BigZ.t_
-2 + 2
- : BigZ.t_
-2 + 2
- : BigZ.t_
- = 4
- : BigZ.t_
- = 37151199385380486
- : BigZ.t_
- = 1267650600228229401496703205376
- : BigZ.t_
-2
- : BigQ.t_
--1000000000000000000
- : BigQ.t_
-2 + 2
- : bigQ
-2 + 2
- : bigQ
- = 4
- : bigQ
- = 37151199385380486
- : bigQ
-6562 # 456
- : BigQ.t_
- = 3281 # 228
- : bigQ
- = -1 # 10000
- : bigQ
- = 100
- : bigQ
- = 515377520732011331036461129765621272702107522001
- # 1267650600228229401496703205376
- : bigQ
- = 1
- : bigQ
diff --git a/test-suite/output/NumbersSyntax.v b/test-suite/output/NumbersSyntax.v
deleted file mode 100644
index 4fbf56ab..00000000
--- a/test-suite/output/NumbersSyntax.v
+++ /dev/null
@@ -1,50 +0,0 @@
-
-Require Import BigQ.
-
-Open Scope int31_scope.
-Check I31. (* Would be nice to have I31 : digits->digits->...->int31
- For the moment, I31 : digits31 int31, which is better
- than (fix nfun .....) size int31 *)
-Check 2.
-Check 1000000000000000000. (* = 660865024, after modulo 2^31 *)
-Check (add31 2 2).
-Check (2+2).
-Eval vm_compute in 2+2.
-Eval vm_compute in 65675757 * 565675998.
-Close Scope int31_scope.
-
-Open Scope bigN_scope.
-Check 2.
-Check 1000000000000000000.
-Check (BigN.add 2 2).
-Check (2+2).
-Eval vm_compute in 2+2.
-Eval vm_compute in 65675757 * 565675998.
-Eval vm_compute in 2^100.
-Close Scope bigN_scope.
-
-Open Scope bigZ_scope.
-Check 2.
-Check -1000000000000000000.
-Check (BigZ.add 2 2).
-Check (2+2).
-Eval vm_compute in 2+2.
-Eval vm_compute in 65675757 * 565675998.
-Eval vm_compute in (-2)^100.
-Close Scope bigZ_scope.
-
-Open Scope bigQ_scope.
-Check 2.
-Check -1000000000000000000.
-Check (BigQ.add 2 2).
-Check (2+2).
-Eval vm_compute in 2+2.
-Eval vm_compute in 65675757 * 565675998.
-(* fractions *)
-Check (6562 # 456). (* Nota: # is BigQ.Qq i.e. base fractions *)
-Eval vm_compute in (BigQ.red (6562 # 456)).
-Eval vm_compute in (1/-10000).
-Eval vm_compute in (BigQ.red (1/(1/100))). (* back to integers... *)
-Eval vm_compute in ((2/3)^(-100)).
-Eval vm_compute in BigQ.red ((2/3)^(-1000) * (2/3)^(1000)).
-Close Scope bigQ_scope.
diff --git a/test-suite/output/PatternsInBinders.out b/test-suite/output/PatternsInBinders.out
index c012a86b..8a6d94c7 100644
--- a/test-suite/output/PatternsInBinders.out
+++ b/test-suite/output/PatternsInBinders.out
@@ -31,9 +31,17 @@ exists '(x, y) '(z, w), swap (x, y) = (z, w)
: Prop
both_z =
fun pat : nat * nat =>
-let '(n, p) as pat0 := pat return (F pat0) in (Z n, Z p) : F (n, p)
+let '(n, p) as x := pat return (F x) in (Z n, Z p) : F (n, p)
: forall pat : nat * nat, F pat
fun '(x, y) '(z, t) => swap (x, y) = (z, t)
: A * B -> B * A -> Prop
forall '(x, y) '(z, t), swap (x, y) = (z, t)
: Prop
+fun (pat : nat) '(x, y) => x + y = pat
+ : nat -> nat * nat -> Prop
+f = fun x : nat => x + x
+ : nat -> nat
+
+Argument scope is [nat_scope]
+fun x : nat => x + x
+ : nat -> nat
diff --git a/test-suite/output/PatternsInBinders.v b/test-suite/output/PatternsInBinders.v
index 6fa357a9..d671053c 100644
--- a/test-suite/output/PatternsInBinders.v
+++ b/test-suite/output/PatternsInBinders.v
@@ -64,3 +64,11 @@ Check fun '((x,y) : A*B) '(z,t) => swap (x,y) = (z,t).
Check forall '(x,y) '((z,t) : B*A), swap (x,y) = (z,t).
End Suboptimal.
+
+(** Test risk of collision for internal name *)
+Check fun pat => fun '(x,y) => x+y = pat.
+
+(** Test name in degenerate case *)
+Definition f 'x := x+x.
+Print f.
+Check fun 'x => x+x.
diff --git a/test-suite/output/PrintAssumptions.out b/test-suite/output/PrintAssumptions.out
index 66458543..3f4d5ef5 100644
--- a/test-suite/output/PrintAssumptions.out
+++ b/test-suite/output/PrintAssumptions.out
@@ -18,3 +18,7 @@ Closed under the global context
Closed under the global context
Axioms:
M.foo : False
+Closed under the global context
+Closed under the global context
+Closed under the global context
+Closed under the global context
diff --git a/test-suite/output/PrintAssumptions.v b/test-suite/output/PrintAssumptions.v
index c2003816..3d4dfe60 100644
--- a/test-suite/output/PrintAssumptions.v
+++ b/test-suite/output/PrintAssumptions.v
@@ -110,3 +110,40 @@ End N.
Print Assumptions N.foo.
End INCLUDE.
+
+(* Print Assumptions did not enter implementation of submodules (#7192) *)
+
+Module SUBMODULES.
+
+Definition a := True.
+Module Type B. Axiom f : Prop. End B.
+Module Type C. Declare Module D : B. End C.
+Module E: C.
+ Module D <: B. Definition f := a. End D.
+End E.
+Print Assumptions E.D.f.
+
+(* Idem in the scope of a functor *)
+
+Module Type T. End T.
+Module F (X : T).
+ Definition a := True.
+ Module Type B. Axiom f : Prop. End B.
+ Module Type C. Declare Module D : B. End C.
+ Module E: C.
+ Module D <: B. Definition f := a. End D.
+ End E.
+ Print Assumptions E.D.f.
+End F.
+
+End SUBMODULES.
+
+(* Testing a variant of #7192 across files *)
+(* This was missing in the original fix to #7192 *)
+Require Import module_bug7192.
+Print Assumptions M7192.D.f.
+
+(* Testing reporting assumptions from modules in files *)
+(* A regression introduced in the original fix to #7192 was missing implementations *)
+Require Import module_bug8416.
+Print Assumptions M8416.f.
diff --git a/test-suite/output/PrintInfos.v b/test-suite/output/PrintInfos.v
index 08918981..a498db3e 100644
--- a/test-suite/output/PrintInfos.v
+++ b/test-suite/output/PrintInfos.v
@@ -26,6 +26,7 @@ About bar.
Print bar.
About Peano. (* Module *)
+Set Warnings "-deprecated".
About existS2. (* Notation *)
Arguments eq_refl {A} {x}, {A} x.
diff --git a/test-suite/output/Projections.out b/test-suite/output/Projections.out
new file mode 100644
index 00000000..e9c28faf
--- /dev/null
+++ b/test-suite/output/Projections.out
@@ -0,0 +1,2 @@
+fun S : store => S.(store_funcs)
+ : store -> host_func
diff --git a/test-suite/output/Projections.v b/test-suite/output/Projections.v
new file mode 100644
index 00000000..098a518d
--- /dev/null
+++ b/test-suite/output/Projections.v
@@ -0,0 +1,11 @@
+
+Set Printing Projections.
+
+Class HostFunction := host_func : Type.
+
+Section store.
+ Context `{HostFunction}.
+ Record store := { store_funcs : host_func }.
+End store.
+
+Check (fun (S:@store nat) => S.(store_funcs)).
diff --git a/test-suite/output/RecognizePluginWarning.out b/test-suite/output/RecognizePluginWarning.out
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test-suite/output/RecognizePluginWarning.out
diff --git a/test-suite/output/RecognizePluginWarning.v b/test-suite/output/RecognizePluginWarning.v
new file mode 100644
index 00000000..cd667bbd
--- /dev/null
+++ b/test-suite/output/RecognizePluginWarning.v
@@ -0,0 +1,5 @@
+(* -*- mode: coq; coq-prog-args: ("-emacs" "-w" "extraction-logical-axiom") -*- *)
+
+(* Test that mentioning a warning defined in plugins works. The failure
+mode here is that these result in a warning about unknown warnings, since the
+plugins are not known at command line parsing time. *)
diff --git a/test-suite/output/Record.out b/test-suite/output/Record.out
index 36d643a4..d45343fe 100644
--- a/test-suite/output/Record.out
+++ b/test-suite/output/Record.out
@@ -14,3 +14,19 @@ build 5
: test_r
build_c 5
: test_c
+fun '(C _ p) => p
+ : N -> True
+fun '{| T := T |} => T
+ : N -> Type
+fun '(C T p) => (T, p)
+ : N -> Type * True
+fun '{| q := p |} => p
+ : M -> True
+fun '{| U := T |} => T
+ : M -> Type
+fun '{| U := T; q := p |} => (T, p)
+ : M -> Type * True
+fun '{| U := T; a := a; q := p |} => (T, p, a)
+ : M -> Type * True * nat
+fun '{| U := T; a := a; q := p |} => (T, p, a)
+ : M -> Type * True * nat
diff --git a/test-suite/output/Record.v b/test-suite/output/Record.v
index 6aa3df98..d9a649fa 100644
--- a/test-suite/output/Record.v
+++ b/test-suite/output/Record.v
@@ -19,3 +19,15 @@ Check build 5.
Check {| field := 5 |}.
Check build_r 5.
Check build_c 5.
+
+Record N := C { T : Type; _ : True }.
+Check fun x:N => let 'C _ p := x in p.
+Check fun x:N => let 'C T _ := x in T.
+Check fun x:N => let 'C T p := x in (T,p).
+
+Record M := D { U : Type; a := 0; q : True }.
+Check fun x:M => let 'D T _ p := x in p.
+Check fun x:M => let 'D T _ p := x in T.
+Check fun x:M => let 'D T p := x in (T,p).
+Check fun x:M => let 'D T a p := x in (T,p,a).
+Check fun x:M => let '{|U:=T;a:=a;q:=p|} := x in (T,p,a).
diff --git a/test-suite/output/Search.out b/test-suite/output/Search.out
index c17b285b..7446c17d 100644
--- a/test-suite/output/Search.out
+++ b/test-suite/output/Search.out
@@ -1,108 +1,116 @@
le_n: forall n : nat, n <= n
+le_0_n: forall n : nat, 0 <= n
le_S: forall n m : nat, n <= m -> n <= S m
+le_n_S: forall n m : nat, n <= m -> S n <= S m
+le_pred: forall n m : nat, n <= m -> Nat.pred n <= Nat.pred m
+le_S_n: forall n m : nat, S n <= S m -> n <= m
+min_l: forall n m : nat, n <= m -> Nat.min n m = n
+max_r: forall n m : nat, n <= m -> Nat.max n m = m
+min_r: forall n m : nat, m <= n -> Nat.min n m = m
+max_l: forall n m : nat, m <= n -> Nat.max n m = n
le_ind:
forall (n : nat) (P : nat -> Prop),
P n ->
(forall m : nat, n <= m -> P m -> P (S m)) ->
forall n0 : nat, n <= n0 -> P n0
-le_pred: forall n m : nat, n <= m -> Nat.pred n <= Nat.pred m
-le_S_n: forall n m : nat, S n <= S m -> n <= m
-le_0_n: forall n : nat, 0 <= n
-le_n_S: forall n m : nat, n <= m -> S n <= S m
-max_l: forall n m : nat, m <= n -> Nat.max n m = n
-max_r: forall n m : nat, n <= m -> Nat.max n m = m
-min_l: forall n m : nat, n <= m -> Nat.min n m = n
-min_r: forall n m : nat, m <= n -> Nat.min n m = m
-true: bool
false: bool
-bool_rect: forall P : bool -> Type, P true -> P false -> forall b : bool, P b
-bool_ind: forall P : bool -> Prop, P true -> P false -> forall b : bool, P b
-bool_rec: forall P : bool -> Set, P true -> P false -> forall b : bool, P b
-andb: bool -> bool -> bool
-orb: bool -> bool -> bool
-implb: bool -> bool -> bool
-xorb: bool -> bool -> bool
+true: bool
+is_true: bool -> Prop
negb: bool -> bool
-andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
-andb_true_intro:
- forall b1 b2 : bool, b1 = true /\ b2 = true -> (b1 && b2)%bool = true
eq_true: bool -> Prop
-eq_true_rect:
- forall P : bool -> Type, P true -> forall b : bool, eq_true b -> P b
-eq_true_ind:
- forall P : bool -> Prop, P true -> forall b : bool, eq_true b -> P b
+implb: bool -> bool -> bool
+orb: bool -> bool -> bool
+andb: bool -> bool -> bool
+xorb: bool -> bool -> bool
+Nat.even: nat -> bool
+Nat.odd: nat -> bool
+BoolSpec: Prop -> Prop -> bool -> Prop
+Nat.eqb: nat -> nat -> bool
+Nat.testbit: nat -> nat -> bool
+Nat.ltb: nat -> nat -> bool
+Nat.leb: nat -> nat -> bool
+Nat.bitwise: (bool -> bool -> bool) -> nat -> nat -> nat -> nat
+bool_ind: forall P : bool -> Prop, P true -> P false -> forall b : bool, P b
+bool_rec: forall P : bool -> Set, P true -> P false -> forall b : bool, P b
eq_true_rec:
forall P : bool -> Set, P true -> forall b : bool, eq_true b -> P b
-is_true: bool -> Prop
-eq_true_ind_r:
- forall (P : bool -> Prop) (b : bool), P b -> eq_true b -> P true
-eq_true_rec_r:
- forall (P : bool -> Set) (b : bool), P b -> eq_true b -> P true
+eq_true_ind:
+ forall P : bool -> Prop, P true -> forall b : bool, eq_true b -> P b
eq_true_rect_r:
forall (P : bool -> Type) (b : bool), P b -> eq_true b -> P true
-BoolSpec: Prop -> Prop -> bool -> Prop
+eq_true_rec_r:
+ forall (P : bool -> Set) (b : bool), P b -> eq_true b -> P true
+eq_true_rect:
+ forall P : bool -> Type, P true -> forall b : bool, eq_true b -> P b
+bool_rect: forall P : bool -> Type, P true -> P false -> forall b : bool, P b
+eq_true_ind_r:
+ forall (P : bool -> Prop) (b : bool), P b -> eq_true b -> P true
+andb_true_intro:
+ forall b1 b2 : bool, b1 = true /\ b2 = true -> (b1 && b2)%bool = true
+andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
BoolSpec_ind:
forall (P Q : Prop) (P0 : bool -> Prop),
(P -> P0 true) ->
(Q -> P0 false) -> forall b : bool, BoolSpec P Q b -> P0 b
-Nat.eqb: nat -> nat -> bool
-Nat.leb: nat -> nat -> bool
-Nat.ltb: nat -> nat -> bool
-Nat.even: nat -> bool
-Nat.odd: nat -> bool
-Nat.testbit: nat -> nat -> bool
-Nat.bitwise: (bool -> bool -> bool) -> nat -> nat -> nat -> nat
bool_choice:
forall (S : Set) (R1 R2 : S -> Prop),
(forall x : S, {R1 x} + {R2 x}) ->
{f : S -> bool | forall x : S, f x = true /\ R1 x \/ f x = false /\ R2 x}
-eq_S: forall x y : nat, x = y -> S x = S y
-f_equal_nat: forall (B : Type) (f : nat -> B) (x y : nat), x = y -> f x = f y
-f_equal_pred: forall x y : nat, x = y -> Nat.pred x = Nat.pred y
+mult_n_O: forall n : nat, 0 = n * 0
+plus_O_n: forall n : nat, 0 + n = n
+plus_n_O: forall n : nat, n = n + 0
+n_Sn: forall n : nat, n <> S n
pred_Sn: forall n : nat, n = Nat.pred (S n)
+O_S: forall n : nat, 0 <> S n
+f_equal_pred: forall x y : nat, x = y -> Nat.pred x = Nat.pred y
+eq_S: forall x y : nat, x = y -> S x = S y
eq_add_S: forall n m : nat, S n = S m -> n = m
+min_r: forall n m : nat, m <= n -> Nat.min n m = m
+min_l: forall n m : nat, n <= m -> Nat.min n m = n
+max_r: forall n m : nat, n <= m -> Nat.max n m = m
+max_l: forall n m : nat, m <= n -> Nat.max n m = n
+plus_Sn_m: forall n m : nat, S n + m = S (n + m)
+plus_n_Sm: forall n m : nat, S (n + m) = n + S m
+f_equal_nat: forall (B : Type) (f : nat -> B) (x y : nat), x = y -> f x = f y
not_eq_S: forall n m : nat, n <> m -> S n <> S m
-O_S: forall n : nat, 0 <> S n
-n_Sn: forall n : nat, n <> S n
+mult_n_Sm: forall n m : nat, n * m + n = n * S m
f_equal2_plus:
forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 + x2 = y1 + y2
+f_equal2_mult:
+ forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 * x2 = y1 * y2
f_equal2_nat:
forall (B : Type) (f : nat -> nat -> B) (x1 y1 x2 y2 : nat),
x1 = y1 -> x2 = y2 -> f x1 x2 = f y1 y2
-plus_n_O: forall n : nat, n = n + 0
-plus_O_n: forall n : nat, 0 + n = n
-plus_n_Sm: forall n m : nat, S (n + m) = n + S m
-plus_Sn_m: forall n m : nat, S n + m = S (n + m)
-f_equal2_mult:
- forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 * x2 = y1 * y2
-mult_n_O: forall n : nat, 0 = n * 0
-mult_n_Sm: forall n m : nat, n * m + n = n * S m
-max_l: forall n m : nat, m <= n -> Nat.max n m = n
-max_r: forall n m : nat, n <= m -> Nat.max n m = m
-min_l: forall n m : nat, n <= m -> Nat.min n m = n
-min_r: forall n m : nat, m <= n -> Nat.min n m = m
-andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
andb_true_intro:
forall b1 b2 : bool, b1 = true /\ b2 = true -> (b1 && b2)%bool = true
+andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
bool_choice:
forall (S : Set) (R1 R2 : S -> Prop),
(forall x : S, {R1 x} + {R2 x}) ->
{f : S -> bool | forall x : S, f x = true /\ R1 x \/ f x = false /\ R2 x}
-andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
andb_true_intro:
forall b1 b2 : bool, b1 = true /\ b2 = true -> (b1 && b2)%bool = true
andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
+andb_prop: forall a b : bool, (a && b)%bool = true -> a = true /\ b = true
+h: n <> newdef n
h': newdef n <> n
h: n <> newdef n
h': newdef n <> n
h: n <> newdef n
h: n <> newdef n
h: n <> newdef n
-h': ~ P n
+h': newdef n <> n
+The command has indeed failed with message:
+No such goal.
+The command has indeed failed with message:
+Query commands only support the single numbered goal selector.
+The command has indeed failed with message:
+Query commands only support the single numbered goal selector.
h: P n
h': ~ P n
h: P n
h': ~ P n
h: P n
+h': ~ P n
h: P n
h: P n
diff --git a/test-suite/output/Search.v b/test-suite/output/Search.v
index 2a0f0b40..82096f29 100644
--- a/test-suite/output/Search.v
+++ b/test-suite/output/Search.v
@@ -10,11 +10,19 @@ Search (@eq _ _ _) true -false "prop" -"intro". (* andb_prop *)
Definition newdef := fun x:nat => x.
Goal forall n:nat, n <> newdef n -> newdef n <> n -> False.
- intros n h h'.
+ cut False.
+ intros _ n h h'.
Search n. (* search hypothesis *)
Search newdef. (* search hypothesis *)
Search ( _ <> newdef _). (* search hypothesis, pattern *)
Search ( _ <> newdef _) -"h'". (* search hypothesis, pattern *)
+
+ 1:Search newdef.
+ 2:Search newdef.
+
+ Fail 3:Search newdef.
+ Fail 1-2:Search newdef.
+ Fail all:Search newdef.
Abort.
Goal forall n (P:nat -> Prop), P n -> ~P n -> False.
diff --git a/test-suite/output/SearchHead.out b/test-suite/output/SearchHead.out
index 0d5924ec..7038eac2 100644
--- a/test-suite/output/SearchHead.out
+++ b/test-suite/output/SearchHead.out
@@ -1,39 +1,39 @@
le_n: forall n : nat, n <= n
+le_0_n: forall n : nat, 0 <= n
le_S: forall n m : nat, n <= m -> n <= S m
le_pred: forall n m : nat, n <= m -> Nat.pred n <= Nat.pred m
-le_S_n: forall n m : nat, S n <= S m -> n <= m
-le_0_n: forall n : nat, 0 <= n
le_n_S: forall n m : nat, n <= m -> S n <= S m
-true: bool
+le_S_n: forall n m : nat, S n <= S m -> n <= m
false: bool
-andb: bool -> bool -> bool
-orb: bool -> bool -> bool
+true: bool
+negb: bool -> bool
implb: bool -> bool -> bool
+orb: bool -> bool -> bool
+andb: bool -> bool -> bool
xorb: bool -> bool -> bool
-negb: bool -> bool
-Nat.eqb: nat -> nat -> bool
-Nat.leb: nat -> nat -> bool
-Nat.ltb: nat -> nat -> bool
Nat.even: nat -> bool
Nat.odd: nat -> bool
+Nat.leb: nat -> nat -> bool
+Nat.ltb: nat -> nat -> bool
Nat.testbit: nat -> nat -> bool
-eq_S: forall x y : nat, x = y -> S x = S y
-f_equal_pred: forall x y : nat, x = y -> Nat.pred x = Nat.pred y
+Nat.eqb: nat -> nat -> bool
+mult_n_O: forall n : nat, 0 = n * 0
+plus_O_n: forall n : nat, 0 + n = n
+plus_n_O: forall n : nat, n = n + 0
pred_Sn: forall n : nat, n = Nat.pred (S n)
+f_equal_pred: forall x y : nat, x = y -> Nat.pred x = Nat.pred y
eq_add_S: forall n m : nat, S n = S m -> n = m
-f_equal2_plus:
- forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 + x2 = y1 + y2
-plus_n_O: forall n : nat, n = n + 0
-plus_O_n: forall n : nat, 0 + n = n
+eq_S: forall x y : nat, x = y -> S x = S y
+max_r: forall n m : nat, n <= m -> Nat.max n m = m
+max_l: forall n m : nat, m <= n -> Nat.max n m = n
+min_r: forall n m : nat, m <= n -> Nat.min n m = m
+min_l: forall n m : nat, n <= m -> Nat.min n m = n
plus_n_Sm: forall n m : nat, S (n + m) = n + S m
plus_Sn_m: forall n m : nat, S n + m = S (n + m)
+mult_n_Sm: forall n m : nat, n * m + n = n * S m
+f_equal2_plus:
+ forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 + x2 = y1 + y2
f_equal2_mult:
forall x1 y1 x2 y2 : nat, x1 = y1 -> x2 = y2 -> x1 * x2 = y1 * y2
-mult_n_O: forall n : nat, 0 = n * 0
-mult_n_Sm: forall n m : nat, n * m + n = n * S m
-max_l: forall n m : nat, m <= n -> Nat.max n m = n
-max_r: forall n m : nat, n <= m -> Nat.max n m = m
-min_l: forall n m : nat, n <= m -> Nat.min n m = n
-min_r: forall n m : nat, m <= n -> Nat.min n m = m
h: newdef n
h: P n
diff --git a/test-suite/output/SearchPattern.out b/test-suite/output/SearchPattern.out
index f3c12eff..b0ac9ea2 100644
--- a/test-suite/output/SearchPattern.out
+++ b/test-suite/output/SearchPattern.out
@@ -1,77 +1,86 @@
-true: bool
false: bool
-andb: bool -> bool -> bool
-orb: bool -> bool -> bool
+true: bool
+negb: bool -> bool
implb: bool -> bool -> bool
+orb: bool -> bool -> bool
+andb: bool -> bool -> bool
xorb: bool -> bool -> bool
-negb: bool -> bool
-Nat.eqb: nat -> nat -> bool
-Nat.leb: nat -> nat -> bool
-Nat.ltb: nat -> nat -> bool
Nat.even: nat -> bool
Nat.odd: nat -> bool
+Nat.leb: nat -> nat -> bool
+Nat.ltb: nat -> nat -> bool
Nat.testbit: nat -> nat -> bool
-O: nat
-S: nat -> nat
-length: forall A : Type, list A -> nat
-Nat.zero: nat
-Nat.one: nat
+Nat.eqb: nat -> nat -> bool
Nat.two: nat
+Nat.one: nat
+Nat.zero: nat
+O: nat
+Nat.div2: nat -> nat
+Nat.log2: nat -> nat
Nat.succ: nat -> nat
+Nat.sqrt: nat -> nat
Nat.pred: nat -> nat
-Nat.add: nat -> nat -> nat
Nat.double: nat -> nat
-Nat.mul: nat -> nat -> nat
-Nat.sub: nat -> nat -> nat
+Nat.square: nat -> nat
+S: nat -> nat
+Nat.ldiff: nat -> nat -> nat
+Nat.tail_add: nat -> nat -> nat
+Nat.land: nat -> nat -> nat
+Nat.tail_mul: nat -> nat -> nat
+Nat.div: nat -> nat -> nat
+Nat.lor: nat -> nat -> nat
+Nat.gcd: nat -> nat -> nat
+Nat.modulo: nat -> nat -> nat
Nat.max: nat -> nat -> nat
+Nat.sub: nat -> nat -> nat
+Nat.mul: nat -> nat -> nat
+Nat.lxor: nat -> nat -> nat
+Nat.add: nat -> nat -> nat
Nat.min: nat -> nat -> nat
Nat.pow: nat -> nat -> nat
-Nat.div: nat -> nat -> nat
-Nat.modulo: nat -> nat -> nat
-Nat.gcd: nat -> nat -> nat
-Nat.square: nat -> nat
+Nat.of_uint: Decimal.uint -> nat
+Nat.tail_addmul: nat -> nat -> nat -> nat
+Nat.of_uint_acc: Decimal.uint -> nat -> nat
+Nat.log2_iter: nat -> nat -> nat -> nat -> nat
Nat.sqrt_iter: nat -> nat -> nat -> nat -> nat
+length: forall A : Type, list A -> nat
+Nat.bitwise: (bool -> bool -> bool) -> nat -> nat -> nat -> nat
+Nat.div2: nat -> nat
Nat.sqrt: nat -> nat
-Nat.log2_iter: nat -> nat -> nat -> nat -> nat
Nat.log2: nat -> nat
-Nat.div2: nat -> nat
-Nat.bitwise: (bool -> bool -> bool) -> nat -> nat -> nat -> nat
-Nat.land: nat -> nat -> nat
-Nat.lor: nat -> nat -> nat
-Nat.ldiff: nat -> nat -> nat
-Nat.lxor: nat -> nat -> nat
-S: nat -> nat
-Nat.succ: nat -> nat
-Nat.pred: nat -> nat
-Nat.add: nat -> nat -> nat
Nat.double: nat -> nat
-Nat.mul: nat -> nat -> nat
-Nat.sub: nat -> nat -> nat
-Nat.max: nat -> nat -> nat
-Nat.min: nat -> nat -> nat
+Nat.pred: nat -> nat
+Nat.square: nat -> nat
+Nat.succ: nat -> nat
+S: nat -> nat
+Nat.ldiff: nat -> nat -> nat
Nat.pow: nat -> nat -> nat
+Nat.land: nat -> nat -> nat
+Nat.lxor: nat -> nat -> nat
Nat.div: nat -> nat -> nat
+Nat.lor: nat -> nat -> nat
+Nat.tail_mul: nat -> nat -> nat
Nat.modulo: nat -> nat -> nat
+Nat.sub: nat -> nat -> nat
+Nat.mul: nat -> nat -> nat
Nat.gcd: nat -> nat -> nat
-Nat.square: nat -> nat
-Nat.sqrt_iter: nat -> nat -> nat -> nat -> nat
-Nat.sqrt: nat -> nat
+Nat.max: nat -> nat -> nat
+Nat.tail_add: nat -> nat -> nat
+Nat.add: nat -> nat -> nat
+Nat.min: nat -> nat -> nat
+Nat.tail_addmul: nat -> nat -> nat -> nat
+Nat.of_uint_acc: Decimal.uint -> nat -> nat
Nat.log2_iter: nat -> nat -> nat -> nat -> nat
-Nat.log2: nat -> nat
-Nat.div2: nat -> nat
+Nat.sqrt_iter: nat -> nat -> nat -> nat -> nat
Nat.bitwise: (bool -> bool -> bool) -> nat -> nat -> nat -> nat
-Nat.land: nat -> nat -> nat
-Nat.lor: nat -> nat -> nat
-Nat.ldiff: nat -> nat -> nat
-Nat.lxor: nat -> nat -> nat
mult_n_Sm: forall n m : nat, n * m + n = n * S m
-identity_refl: forall (A : Type) (a : A), identity a a
iff_refl: forall A : Prop, A <-> A
+le_n: forall n : nat, n <= n
+identity_refl: forall (A : Type) (a : A), identity a a
eq_refl: forall (A : Type) (x : A), x = x
Nat.divmod: nat -> nat -> nat -> nat -> nat * nat
-le_n: forall n : nat, n <= n
-pair: forall A B : Type, A -> B -> A * B
conj: forall A B : Prop, A -> B -> A /\ B
+pair: forall A B : Type, A -> B -> A * B
Nat.divmod: nat -> nat -> nat -> nat -> nat * nat
h: n <> newdef n
h: n <> newdef n
diff --git a/test-suite/output/SearchPattern.v b/test-suite/output/SearchPattern.v
index bde195a5..de9f4887 100644
--- a/test-suite/output/SearchPattern.v
+++ b/test-suite/output/SearchPattern.v
@@ -33,4 +33,4 @@ Goal forall n (P:nat -> Prop), P n -> ~P n -> False.
Search (P _) -"h'". (* search hypothesis also for patterns *)
Search (P _) -not. (* search hypothesis also for patterns *)
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/output/Show.out b/test-suite/output/Show.out
new file mode 100644
index 00000000..ca56f032
--- /dev/null
+++ b/test-suite/output/Show.out
@@ -0,0 +1,10 @@
+3 subgoals (ID 31)
+
+ H : 0 = 0
+ ============================
+ 1 = 1
+
+subgoal 2 (ID 35) is:
+ 1 = S (S m')
+subgoal 3 (ID 22) is:
+ S (S n') = S m
diff --git a/test-suite/output/Show.v b/test-suite/output/Show.v
new file mode 100644
index 00000000..60faac8d
--- /dev/null
+++ b/test-suite/output/Show.v
@@ -0,0 +1,11 @@
+(* -*- mode: coq; coq-prog-args: ("-emacs") -*- *)
+
+(* tests of Show output with -emacs flag to coqtop; see bug 5535 *)
+
+Theorem nums : forall (n m : nat), n = m -> (S n) = (S m).
+Proof.
+ intros.
+ induction n as [| n'].
+ induction m as [| m'].
+ Show.
+Admitted.
diff --git a/test-suite/output/ShowMatch.out b/test-suite/output/ShowMatch.out
new file mode 100644
index 00000000..e5520b8d
--- /dev/null
+++ b/test-suite/output/ShowMatch.out
@@ -0,0 +1,8 @@
+match # with
+ | f =>
+ end
+
+match # with
+ | A.f =>
+ end
+
diff --git a/test-suite/output/ShowMatch.v b/test-suite/output/ShowMatch.v
new file mode 100644
index 00000000..02b7eada
--- /dev/null
+++ b/test-suite/output/ShowMatch.v
@@ -0,0 +1,13 @@
+(* Bug 5546 complained about unqualified constructors in Show Match output,
+ when qualification is needed to disambiguate them
+*)
+
+Module A.
+ Inductive foo := f.
+ Show Match foo. (* no need to disambiguate *)
+End A.
+
+Module B.
+ Inductive foo := f.
+ (* local foo shadows A.foo, so constructor "f" needs disambiguation *)
+ Show Match A.foo.
diff --git a/test-suite/output/ShowProof.out b/test-suite/output/ShowProof.out
new file mode 100644
index 00000000..2d4be8bc
--- /dev/null
+++ b/test-suite/output/ShowProof.out
@@ -0,0 +1 @@
+(fun x : Type => conj I ?Goal)
diff --git a/test-suite/output/ShowProof.v b/test-suite/output/ShowProof.v
new file mode 100644
index 00000000..73ecaf22
--- /dev/null
+++ b/test-suite/output/ShowProof.v
@@ -0,0 +1,6 @@
+(* Was #4524 *)
+Definition foo (x : Type) : True /\ True.
+Proof.
+split.
+- exact I.
+ Show Proof. (* Was not finding an evar name at some time *)
diff --git a/test-suite/output/SuggestProofUsing.out b/test-suite/output/SuggestProofUsing.out
new file mode 100644
index 00000000..8d67a4a4
--- /dev/null
+++ b/test-suite/output/SuggestProofUsing.out
@@ -0,0 +1,7 @@
+The proof of nat should start with one of the following commands:
+Proof using .
+Proof using Type*.
+Proof using Type.
+The proof of foo should start with one of the following commands:
+Proof using A B.
+Proof using All.
diff --git a/test-suite/output/SuggestProofUsing.v b/test-suite/output/SuggestProofUsing.v
new file mode 100644
index 00000000..00b6f8e1
--- /dev/null
+++ b/test-suite/output/SuggestProofUsing.v
@@ -0,0 +1,31 @@
+Set Suggest Proof Using.
+
+Section Sec.
+ Variables A B : Type.
+
+ (* Some normal lemma. *)
+ Lemma nat : Set.
+ Proof.
+ exact nat.
+ Qed.
+
+ (* Make sure All is suggested even though we add an unused variable
+ to the context. *)
+ Let foo : Type.
+ Proof.
+ exact (A -> B).
+ Qed.
+
+ (* Having a [Proof using] disables the suggestion message. *)
+ Definition bar : Type.
+ Proof using A.
+ exact A.
+ Qed.
+
+ (* Transparent definitions don't get a suggestion message. *)
+ Definition baz : Type.
+ Proof.
+ exact A.
+ Defined.
+
+End Sec.
diff --git a/test-suite/output/Tactics.out b/test-suite/output/Tactics.out
index 239edd1d..19c9fc44 100644
--- a/test-suite/output/Tactics.out
+++ b/test-suite/output/Tactics.out
@@ -2,3 +2,7 @@ Ltac f H := split; [ a H | e H ]
Ltac g := match goal with
| |- context [ if ?X then _ else _ ] => case X
end
+The command has indeed failed with message:
+H is already used.
+The command has indeed failed with message:
+H is already used.
diff --git a/test-suite/output/Tactics.v b/test-suite/output/Tactics.v
index a7c497cf..75b66e46 100644
--- a/test-suite/output/Tactics.v
+++ b/test-suite/output/Tactics.v
@@ -7,7 +7,17 @@ Ltac f H := split; [a H|e H].
Print Ltac f.
(* Test printing of match context *)
-(* Used to fail after translator removal (see bug #1070) *)
+(* Used to fail after translator removal (see BZ#1070) *)
Ltac g := match goal with |- context [if ?X then _ else _ ] => case X end.
Print Ltac g.
+
+(* Test an error message (BZ#5390) *)
+Lemma myid (P : Prop) : P <-> P.
+Proof. split; auto. Qed.
+
+Goal True -> (True /\ True) -> True.
+Proof.
+intros H.
+Fail intros [H%myid ?].
+Fail destruct 1 as [H%myid ?].
diff --git a/test-suite/output/TypeclassDebug.out b/test-suite/output/TypeclassDebug.out
new file mode 100644
index 00000000..8b38fe0f
--- /dev/null
+++ b/test-suite/output/TypeclassDebug.out
@@ -0,0 +1,18 @@
+Debug: 1: looking for foo without backtracking
+Debug: 1.1: simple apply H on foo, 1 subgoal(s)
+Debug: 1.1-1 : foo
+Debug: 1.1-1: looking for foo without backtracking
+Debug: 1.1-1.1: simple apply H on foo, 1 subgoal(s)
+Debug: 1.1-1.1-1 : foo
+Debug: 1.1-1.1-1: looking for foo without backtracking
+Debug: 1.1-1.1-1.1: simple apply H on foo, 1 subgoal(s)
+Debug: 1.1-1.1-1.1-1 : foo
+Debug: 1.1-1.1-1.1-1: looking for foo without backtracking
+Debug: 1.1-1.1-1.1-1.1: simple apply H on foo, 1 subgoal(s)
+Debug: 1.1-1.1-1.1-1.1-1 : foo
+Debug: 1.1-1.1-1.1-1.1-1: looking for foo without backtracking
+Debug: 1.1-1.1-1.1-1.1-1.1: simple apply H on foo, 1 subgoal(s)
+Debug: 1.1-1.1-1.1-1.1-1.1-1 : foo
+The command has indeed failed with message:
+Ltac call to "typeclasses eauto (int_or_var_opt) with (ne_preident_list)" failed.
+Tactic failure: Proof search reached its limit.
diff --git a/test-suite/output/TypeclassDebug.v b/test-suite/output/TypeclassDebug.v
new file mode 100644
index 00000000..d38e2a50
--- /dev/null
+++ b/test-suite/output/TypeclassDebug.v
@@ -0,0 +1,8 @@
+(* show alternating separators in typeclass debug output; see discussion in PR #868 *)
+
+Parameter foo : Prop.
+Axiom H : foo -> foo.
+Hint Resolve H : foo.
+Goal foo.
+Typeclasses eauto := debug.
+Fail typeclasses eauto 5 with foo.
diff --git a/test-suite/output/UnclosedBlocks.out b/test-suite/output/UnclosedBlocks.out
new file mode 100644
index 00000000..b83e94ad
--- /dev/null
+++ b/test-suite/output/UnclosedBlocks.out
@@ -0,0 +1,3 @@
+
+Error: The section Baz, module type Bar and module Foo need to be closed.
+
diff --git a/test-suite/output/UnclosedBlocks.v b/test-suite/output/UnclosedBlocks.v
new file mode 100644
index 00000000..854bd6a6
--- /dev/null
+++ b/test-suite/output/UnclosedBlocks.v
@@ -0,0 +1,8 @@
+(* -*- mode: coq; coq-prog-args: ("-compile" "UnclosedBlocks.v") *)
+Module Foo.
+ Module Closed.
+ End Closed.
+ Module Type Bar.
+ Section Baz.
+ (* end-of-compilation error message reports unclosed sections, blocks, and
+ module types *)
diff --git a/test-suite/output/UnivBinders.out b/test-suite/output/UnivBinders.out
new file mode 100644
index 00000000..23379afd
--- /dev/null
+++ b/test-suite/output/UnivBinders.out
@@ -0,0 +1,181 @@
+NonCumulative Inductive Empty@{u} : Type@{u} :=
+NonCumulative Record PWrap (A : Type@{u}) : Type@{u} := pwrap { punwrap : A }
+
+PWrap has primitive projections with eta conversion.
+For PWrap: Argument scope is [type_scope]
+For pwrap: Argument scopes are [type_scope _]
+punwrap@{u} =
+fun (A : Type@{u}) (p : PWrap@{u} A) => punwrap _ p
+ : forall A : Type@{u}, PWrap@{u} A -> A
+(* u |= *)
+
+punwrap is universe polymorphic
+Argument scopes are [type_scope _]
+NonCumulative Record RWrap (A : Type@{u}) : Type@{u} := rwrap { runwrap : A }
+
+For RWrap: Argument scope is [type_scope]
+For rwrap: Argument scopes are [type_scope _]
+runwrap@{u} =
+fun (A : Type@{u}) (r : RWrap@{u} A) => let (runwrap) := r in runwrap
+ : forall A : Type@{u}, RWrap@{u} A -> A
+(* u |= *)
+
+runwrap is universe polymorphic
+Argument scopes are [type_scope _]
+Wrap@{u} = fun A : Type@{u} => A
+ : Type@{u} -> Type@{u}
+(* u |= *)
+
+Wrap is universe polymorphic
+Argument scope is [type_scope]
+wrap@{u} =
+fun (A : Type@{u}) (Wrap : Wrap@{u} A) => Wrap
+ : forall A : Type@{u}, Wrap@{u} A -> A
+(* u |= *)
+
+wrap is universe polymorphic
+Arguments A, Wrap are implicit and maximally inserted
+Argument scopes are [type_scope _]
+bar@{u} = nat
+ : Wrap@{u} Set
+(* u |= Set < u
+ *)
+
+bar is universe polymorphic
+foo@{u Top.17 v} =
+Type@{Top.17} -> Type@{v} -> Type@{u}
+ : Type@{max(u+1,Top.17+1,v+1)}
+(* u Top.17 v |= *)
+
+foo is universe polymorphic
+Type@{i} -> Type@{j}
+ : Type@{max(i+1,j+1)}
+(* {j i} |= *)
+ = Type@{i} -> Type@{j}
+ : Type@{max(i+1,j+1)}
+(* {j i} |= *)
+Monomorphic mono = Type@{mono.u}
+ : Type@{mono.u+1}
+(* {mono.u} |= *)
+
+mono is not universe polymorphic
+mono
+ : Type@{mono.u+1}
+Type@{mono.u}
+ : Type@{mono.u+1}
+The command has indeed failed with message:
+Universe u already exists.
+monomono
+ : Type@{MONOU+1}
+mono.monomono
+ : Type@{mono.MONOU+1}
+monomono
+ : Type@{MONOU+1}
+mono
+ : Type@{mono.u+1}
+The command has indeed failed with message:
+Universe u already exists.
+bobmorane =
+let tt := Type@{tt.v} in let ff := Type@{ff.v} in tt -> ff
+ : Type@{max(tt.u,ff.u)}
+The command has indeed failed with message:
+Universe u already bound.
+foo@{E M N} =
+Type@{M} -> Type@{N} -> Type@{E}
+ : Type@{max(E+1,M+1,N+1)}
+(* E M N |= *)
+
+foo is universe polymorphic
+foo@{Top.16 Top.17 Top.18} =
+Type@{Top.17} -> Type@{Top.18} -> Type@{Top.16}
+ : Type@{max(Top.16+1,Top.17+1,Top.18+1)}
+(* Top.16 Top.17 Top.18 |= *)
+
+foo is universe polymorphic
+NonCumulative Inductive Empty@{E} : Type@{E} :=
+NonCumulative Record PWrap (A : Type@{E}) : Type@{E} := pwrap { punwrap : A }
+
+PWrap has primitive projections with eta conversion.
+For PWrap: Argument scope is [type_scope]
+For pwrap: Argument scopes are [type_scope _]
+punwrap@{K} : forall A : Type@{K}, PWrap@{K} A -> A
+(* K |= *)
+
+punwrap is universe polymorphic
+Argument scopes are [type_scope _]
+punwrap is transparent
+Expands to: Constant Top.punwrap
+The command has indeed failed with message:
+Universe instance should have length 3
+The command has indeed failed with message:
+Universe instance should have length 0
+The command has indeed failed with message:
+This object does not support universe names.
+The command has indeed failed with message:
+Cannot enforce v < u because u < gU < gV < v
+Monomorphic bind_univs.mono =
+Type@{bind_univs.mono.u}
+ : Type@{bind_univs.mono.u+1}
+(* {bind_univs.mono.u} |= *)
+
+bind_univs.mono is not universe polymorphic
+bind_univs.poly@{u} = Type@{u}
+ : Type@{u+1}
+(* u |= *)
+
+bind_univs.poly is universe polymorphic
+insec@{v} = Type@{u} -> Type@{v}
+ : Type@{max(u+1,v+1)}
+(* v |= *)
+
+insec is universe polymorphic
+insec@{u v} = Type@{u} -> Type@{v}
+ : Type@{max(u+1,v+1)}
+(* u v |= *)
+
+insec is universe polymorphic
+inmod@{u} = Type@{u}
+ : Type@{u+1}
+(* u |= *)
+
+inmod is universe polymorphic
+SomeMod.inmod@{u} = Type@{u}
+ : Type@{u+1}
+(* u |= *)
+
+SomeMod.inmod is universe polymorphic
+inmod@{u} = Type@{u}
+ : Type@{u+1}
+(* u |= *)
+
+inmod is universe polymorphic
+Applied.infunct@{u v} =
+inmod@{u} -> Type@{v}
+ : Type@{max(u+1,v+1)}
+(* u v |= *)
+
+Applied.infunct is universe polymorphic
+axfoo@{i Top.48 Top.49} : Type@{Top.48} -> Type@{i}
+(* i Top.48 Top.49 |= *)
+
+axfoo is universe polymorphic
+Argument scope is [type_scope]
+Expands to: Constant Top.axfoo
+axbar@{i Top.48 Top.49} : Type@{Top.49} -> Type@{i}
+(* i Top.48 Top.49 |= *)
+
+axbar is universe polymorphic
+Argument scope is [type_scope]
+Expands to: Constant Top.axbar
+axfoo' : Type@{Top.51} -> Type@{axbar'.i}
+
+axfoo' is not universe polymorphic
+Argument scope is [type_scope]
+Expands to: Constant Top.axfoo'
+axbar' : Type@{Top.51} -> Type@{axbar'.i}
+
+axbar' is not universe polymorphic
+Argument scope is [type_scope]
+Expands to: Constant Top.axbar'
+The command has indeed failed with message:
+When declaring multiple axioms in one command, only the first is allowed a universe binder (which will be shared by the whole block).
diff --git a/test-suite/output/UnivBinders.v b/test-suite/output/UnivBinders.v
new file mode 100644
index 00000000..f806a9f4
--- /dev/null
+++ b/test-suite/output/UnivBinders.v
@@ -0,0 +1,154 @@
+Set Universe Polymorphism.
+Set Printing Universes.
+(* Unset Strict Universe Declaration. *)
+
+(* universe binders on inductive types and record projections *)
+Inductive Empty@{u} : Type@{u} := .
+Print Empty.
+
+Set Primitive Projections.
+Record PWrap@{u} (A:Type@{u}) := pwrap { punwrap : A }.
+Print PWrap.
+Print punwrap.
+
+Unset Primitive Projections.
+Record RWrap@{u} (A:Type@{u}) := rwrap { runwrap : A }.
+Print RWrap.
+Print runwrap.
+
+(* universe binders also go on the constants for operational typeclasses. *)
+Class Wrap@{u} (A:Type@{u}) := wrap : A.
+Print Wrap.
+Print wrap.
+
+(* Instance in lemma mode used to ignore the binders. *)
+Instance bar@{u} : Wrap@{u} Set. Proof. exact nat. Qed.
+Print bar.
+
+Unset Strict Universe Declaration.
+(* The universes in the binder come first, then the extra universes in
+ order of appearance. *)
+Definition foo@{u +} := Type -> Type@{v} -> Type@{u}.
+Print foo.
+
+Check Type@{i} -> Type@{j}.
+
+Eval cbv in Type@{i} -> Type@{j}.
+
+Set Strict Universe Declaration.
+
+(* Binders even work with monomorphic definitions! *)
+Monomorphic Definition mono@{u} := Type@{u}.
+Print mono.
+Check mono.
+Check Type@{mono.u}.
+
+Module mono.
+ Fail Monomorphic Universe u.
+ Monomorphic Universe MONOU.
+
+ Monomorphic Definition monomono := Type@{MONOU}.
+ Check monomono.
+
+ Monomorphic Inductive monoind@{i} : Type@{i} := .
+ Monomorphic Record monorecord@{i} : Type@{i} := mkmonorecord {}.
+End mono.
+Check mono.monomono. (* qualified MONOU *)
+Import mono.
+Check monomono. (* unqualified MONOU *)
+Check mono. (* still qualified mono.u *)
+
+Monomorphic Constraint Set < Top.mono.u.
+
+Module mono2.
+ Monomorphic Universe u.
+End mono2.
+
+Fail Monomorphic Definition mono2@{u} := Type@{u}.
+
+Module SecLet.
+ Unset Universe Polymorphism.
+ Section foo.
+ (* Fail Let foo@{} := Type@{u}. (* doesn't parse: Let foo@{...} doesn't exist *) *)
+ Unset Strict Universe Declaration.
+ Let tt : Type@{u} := Type@{v}. (* names disappear in the ether *)
+ Let ff : Type@{u}. Proof. exact Type@{v}. Qed. (* if Set Universe Polymorphism: universes are named ff.u and ff.v. Otherwise names disappear into space *)
+ Definition bobmorane := tt -> ff.
+ End foo.
+ Print bobmorane. (*
+ bobmorane@{Top.15 Top.16 ff.u ff.v} =
+ let tt := Type@{Top.16} in let ff := Type@{ff.v} in tt -> ff
+ : Type@{max(Top.15,ff.u)}
+ (* Top.15 Top.16 ff.u ff.v |= Top.16 < Top.15
+ ff.v < ff.u
+ *)
+
+ bobmorane is universe polymorphic
+ *)
+End SecLet.
+
+(* fun x x => foo is nonsense with local binders *)
+Fail Definition fo@{u u} := Type@{u}.
+
+(* Using local binders for printing. *)
+Print foo@{E M N}.
+(* Underscores discard the name if there's one. *)
+Print foo@{_ _ _}.
+
+(* Also works for inductives and records. *)
+Print Empty@{E}.
+Print PWrap@{E}.
+
+(* Also works for About. *)
+About punwrap@{K}.
+
+(* Instance length check. *)
+Fail Print foo@{E}.
+Fail Print mono@{E}.
+
+(* Not everything can be printed with custom universe names. *)
+Fail Print Coq.Init.Logic@{E}.
+
+(* Nice error when constraints are impossible. *)
+Monomorphic Universes gU gV. Monomorphic Constraint gU < gV.
+Fail Lemma foo@{u v|u < gU, gV < v, v < u} : nat.
+
+(* Universe binders survive through compilation, sections and modules. *)
+Require TestSuite.bind_univs.
+Print bind_univs.mono.
+Print bind_univs.poly.
+
+Section SomeSec.
+ Universe u.
+ Definition insec@{v} := Type@{u} -> Type@{v}.
+ Print insec.
+End SomeSec.
+Print insec.
+
+Module SomeMod.
+ Definition inmod@{u} := Type@{u}.
+ Print inmod.
+End SomeMod.
+Print SomeMod.inmod.
+Import SomeMod.
+Print inmod.
+
+Module Type SomeTyp. Definition inmod := Type. End SomeTyp.
+Module SomeFunct (In : SomeTyp).
+ Definition infunct@{u v} := In.inmod@{u} -> Type@{v}.
+End SomeFunct.
+Module Applied := SomeFunct(SomeMod).
+Print Applied.infunct.
+
+(* Multi-axiom declaration
+
+ In polymorphic mode the domain Type gets separate universes for the
+ different axioms, but all axioms have to declare all universes. In
+ polymorphic mode they get the same universes, ie the type is only
+ interpd once. *)
+Axiom axfoo@{i+} axbar : Type -> Type@{i}.
+Monomorphic Axiom axfoo'@{i+} axbar' : Type -> Type@{i}.
+
+About axfoo. About axbar. About axfoo'. About axbar'.
+
+Fail Axiom failfoo failbar@{i} : Type.
diff --git a/test-suite/output/UsePluginWarning.out b/test-suite/output/UsePluginWarning.out
new file mode 100644
index 00000000..47409f3e
--- /dev/null
+++ b/test-suite/output/UsePluginWarning.out
@@ -0,0 +1 @@
+type foo = __
diff --git a/test-suite/output/UsePluginWarning.v b/test-suite/output/UsePluginWarning.v
new file mode 100644
index 00000000..c6e00546
--- /dev/null
+++ b/test-suite/output/UsePluginWarning.v
@@ -0,0 +1,7 @@
+(* -*- mode: coq; coq-prog-args: ("-emacs" "-w" "-extraction-logical-axiom") -*- *)
+
+Require Extraction.
+Axiom foo : Prop.
+
+Extraction foo.
+
diff --git a/test-suite/output/Warnings.out b/test-suite/output/Warnings.out
new file mode 100644
index 00000000..a70f8ca4
--- /dev/null
+++ b/test-suite/output/Warnings.out
@@ -0,0 +1,3 @@
+File "stdin", line 4, characters 0-22:
+Warning: Projection value has no head constant: fun x : B => x in canonical
+instance a of b, ignoring it. [projection-no-head-constant,typechecker]
diff --git a/test-suite/output/Warnings.v b/test-suite/output/Warnings.v
new file mode 100644
index 00000000..7465442c
--- /dev/null
+++ b/test-suite/output/Warnings.v
@@ -0,0 +1,5 @@
+(* Term in warning was not printed in the right environment at some time *)
+Record A := { B:Type; b:B->B }.
+Definition a B := {| B:=B; b:=fun x => x |}.
+Canonical Structure a.
+
diff --git a/test-suite/output/auto.out b/test-suite/output/auto.out
new file mode 100644
index 00000000..2761b87b
--- /dev/null
+++ b/test-suite/output/auto.out
@@ -0,0 +1,22 @@
+(* info auto: *)
+simple apply or_intror (in core).
+ intro.
+ assumption.
+Debug: (* debug auto: *)
+Debug: * assumption. (*fail*)
+Debug: * intro. (*fail*)
+Debug: * simple apply or_intror (in core). (*success*)
+Debug: ** assumption. (*fail*)
+Debug: ** intro. (*success*)
+Debug: ** assumption. (*success*)
+(* info eauto: *)
+simple apply or_intror.
+ intro.
+ exact H.
+Debug: (* debug eauto: *)
+Debug: 1 depth=5
+Debug: 1.1 depth=4 simple apply or_intror
+Debug: 1.1.1 depth=4 intro
+Debug: 1.1.1.1 depth=4 exact H
+(* info trivial: *)
+exact I (in core).
diff --git a/test-suite/output/auto.v b/test-suite/output/auto.v
new file mode 100644
index 00000000..92917cdf
--- /dev/null
+++ b/test-suite/output/auto.v
@@ -0,0 +1,15 @@
+(* testing info/debug auto/eauto *)
+
+Goal False \/ (True -> True).
+info_auto.
+Undo.
+debug auto.
+Undo.
+info_eauto.
+Undo.
+debug eauto.
+Qed.
+
+Goal True.
+info_trivial.
+Qed.
diff --git a/test-suite/output/bug5778.out b/test-suite/output/bug5778.out
new file mode 100644
index 00000000..91ceb1b5
--- /dev/null
+++ b/test-suite/output/bug5778.out
@@ -0,0 +1,4 @@
+The command has indeed failed with message:
+In nested Ltac calls to "c", "abs" and "abstract b ltac:(())", last call
+failed.
+The term "I" has type "True" which should be Set, Prop or Type.
diff --git a/test-suite/output/bug5778.v b/test-suite/output/bug5778.v
new file mode 100644
index 00000000..0dcd76ae
--- /dev/null
+++ b/test-suite/output/bug5778.v
@@ -0,0 +1,7 @@
+Ltac a _ := pose (I : I).
+Ltac b _ := a ().
+Ltac abs _ := abstract b ().
+Ltac c _ := abs ().
+Goal True.
+ Fail c ().
+Abort.
diff --git a/test-suite/output/bug6821.out b/test-suite/output/bug6821.out
new file mode 100644
index 00000000..7b12b532
--- /dev/null
+++ b/test-suite/output/bug6821.out
@@ -0,0 +1,2 @@
+forall f : nat -> Type, f x where x : nat := 1
+ : Type
diff --git a/test-suite/output/bug6821.v b/test-suite/output/bug6821.v
new file mode 100644
index 00000000..40627e33
--- /dev/null
+++ b/test-suite/output/bug6821.v
@@ -0,0 +1,8 @@
+(* Was failing at printing time with stack overflow due to an infinite
+ eta-expansion *)
+
+Notation "x 'where' y .. z := v " :=
+ ((fun y => .. ((fun z => x) v) ..) v)
+ (at level 11, v at next level, y binder, z binder).
+
+Check forall f, f x where x := 1.
diff --git a/test-suite/output/goal_output.out b/test-suite/output/goal_output.out
new file mode 100644
index 00000000..773533a8
--- /dev/null
+++ b/test-suite/output/goal_output.out
@@ -0,0 +1,8 @@
+Nat.t = nat
+ : Set
+Nat.t = nat
+ : Set
+1 subgoal
+
+ ============================
+ False
diff --git a/test-suite/output/goal_output.v b/test-suite/output/goal_output.v
new file mode 100644
index 00000000..327b80b0
--- /dev/null
+++ b/test-suite/output/goal_output.v
@@ -0,0 +1,13 @@
+(* From
+ - https://coq.inria.fr/bugs/show_bug.cgi?id=5529
+ - https://coq.inria.fr/bugs/show_bug.cgi?id=5537
+ *)
+
+Print Nat.t.
+Timeout 1 Print Nat.t.
+
+Lemma toto: False.
+Set Printing All.
+Show.
+Abort.
+
diff --git a/test-suite/output/idtac.out b/test-suite/output/idtac.out
new file mode 100644
index 00000000..3855f88a
--- /dev/null
+++ b/test-suite/output/idtac.out
@@ -0,0 +1,11 @@
+"foo"
+True
+foo
+3
+foo
+2
+< True False Prop >
+< True False Prop >
+< >
+< >
+<< 1 2 3 >>
diff --git a/test-suite/output/idtac.v b/test-suite/output/idtac.v
new file mode 100644
index 00000000..ac60ea91
--- /dev/null
+++ b/test-suite/output/idtac.v
@@ -0,0 +1,45 @@
+(* Printing all kinds of Ltac generic arguments *)
+
+Tactic Notation "myidtac" string(v) := idtac v.
+Goal True.
+myidtac "foo".
+Abort.
+
+Tactic Notation "myidtac2" ref(c) := idtac c.
+Goal True.
+myidtac2 True.
+Abort.
+
+Tactic Notation "myidtac3" preident(s) := idtac s.
+Goal True.
+myidtac3 foo.
+Abort.
+
+Tactic Notation "myidtac4" int_or_var(n) := idtac n.
+Goal True.
+myidtac4 3.
+Abort.
+
+Tactic Notation "myidtac5" ident(id) := idtac id.
+Goal True.
+myidtac5 foo.
+Abort.
+
+(* Checking non focussing of idtac for integers *)
+Goal True/\True. split.
+all:let c:=numgoals in idtac c.
+Abort.
+
+(* Checking printing of lists and its focussing *)
+Tactic Notation "myidtac6" constr_list(l) := idtac "<" l ">".
+Goal True/\True. split.
+all:myidtac6 True False Prop.
+(* An empty list is focussing because of interp_genarg of a constr *)
+(* even if it is not focussing on printing *)
+all:myidtac6.
+Abort.
+
+Tactic Notation "myidtac7" int_list(l) := idtac "<<" l ">>".
+Goal True/\True. split.
+all:myidtac7 1 2 3.
+Abort.
diff --git a/test-suite/output/inference.out b/test-suite/output/inference.out
index 576fbd7c..f7ffd195 100644
--- a/test-suite/output/inference.out
+++ b/test-suite/output/inference.out
@@ -4,15 +4,13 @@ fun e : option L => match e with
| None => None
end
: option L -> option L
-fun (m n p : nat) (H : S m <= S n + p) => le_S_n m (n + p) H
- : forall m n p : nat, S m <= S n + p -> m <= n + p
-fun n : nat => let x := A n : T n in ?y ?y0 : T n
+fun n : nat => let y : T n := A n in ?t ?x : T n
: forall n : nat, T n
where
-?y : [n : nat x := A n : T n |- ?T -> T n]
-?y0 : [n : nat x := A n : T n |- ?T]
-fun n : nat => ?y ?y0 : T n
+?t : [n : nat y := A n : T n |- ?T -> T n]
+?x : [n : nat y := A n : T n |- ?T]
+fun n : nat => ?t ?x : T n
: forall n : nat, T n
where
-?y : [n : nat |- ?T -> T n]
-?y0 : [n : nat |- ?T]
+?t : [n : nat |- ?T -> T n]
+?x : [n : nat |- ?T]
diff --git a/test-suite/output/inference.v b/test-suite/output/inference.v
index 1825db16..57a4739e 100644
--- a/test-suite/output/inference.v
+++ b/test-suite/output/inference.v
@@ -13,11 +13,6 @@ Definition P (e:option L) :=
Print P.
-(* Check that plus is folded even if reduction is involved *)
-Set Refolding Reduction.
-Check (fun m n p (H : S m <= (S n) + p) => le_S_n _ _ H).
-
-
(* Check that the heuristic to solve constraints is not artificially
dependent on the presence of a let-in, and in particular that the
second [_] below is not inferred to be n, as if obtained by
@@ -27,5 +22,5 @@ Check (fun m n p (H : S m <= (S n) + p) => le_S_n _ _ H).
(* Note: exact numbers of evars are not important... *)
Inductive T (n:nat) : Type := A : T n.
-Check fun n (x:=A n:T n) => _ _ : T n.
+Check fun n (y:=A n:T n) => _ _ : T n.
Check fun n => _ _ : T n.
diff --git a/test-suite/output/load/Load_noproof.v b/test-suite/output/load/Load_noproof.v
new file mode 100644
index 00000000..aaf1ffe2
--- /dev/null
+++ b/test-suite/output/load/Load_noproof.v
@@ -0,0 +1 @@
+Definition f := 2.
diff --git a/test-suite/output/load/Load_openproof.v b/test-suite/output/load/Load_openproof.v
new file mode 100644
index 00000000..204d4ecb
--- /dev/null
+++ b/test-suite/output/load/Load_openproof.v
@@ -0,0 +1 @@
+Lemma k : True.
diff --git a/test-suite/output/load/Load_proof.v b/test-suite/output/load/Load_proof.v
new file mode 100644
index 00000000..e47f66a1
--- /dev/null
+++ b/test-suite/output/load/Load_proof.v
@@ -0,0 +1,2 @@
+Lemma u : True.
+Proof. exact I. Qed.
diff --git a/test-suite/output/ltac.out b/test-suite/output/ltac.out
index 1ff09e3a..eb9f5710 100644
--- a/test-suite/output/ltac.out
+++ b/test-suite/output/ltac.out
@@ -1,8 +1,7 @@
The command has indeed failed with message:
-Error:
Ltac variable y depends on pattern variable name z which is not bound in current context.
Ltac f x y z :=
- symmetry in x, y; auto with z; auto; intros **; clearbody x; generalize
+ symmetry in x, y; auto with z; auto; intros; clearbody x; generalize
dependent z
The command has indeed failed with message:
In nested Ltac calls to "g1" and "refine (uconstr)", last call failed.
@@ -22,13 +21,20 @@ The term "I" has type "True" while it is expected to have type "False".
The command has indeed failed with message:
In nested Ltac calls to "h" and "injection (destruction_arg)", last call
failed.
-Error: No primitive equality found.
+No primitive equality found.
The command has indeed failed with message:
In nested Ltac calls to "h" and "injection (destruction_arg)", last call
failed.
-Error: No primitive equality found.
+No primitive equality found.
Hx
nat
nat
0
0
+Ltac foo :=
+ let x := intros in
+ let y := intros -> in
+ let v := constr:(nil) in
+ let w := () in
+ let z := 1 in
+ pose v
diff --git a/test-suite/output/ltac.v b/test-suite/output/ltac.v
index 76c37625..6adbe95d 100644
--- a/test-suite/output/ltac.v
+++ b/test-suite/output/ltac.v
@@ -57,3 +57,14 @@ match goal with |- ?x*?y => idtac x end.
match goal with H: context [?x*?y] |- _ => idtac x end.
match goal with |- context [?x*?y] => idtac x end.
Abort.
+
+(* Check printing of let in Ltac and Tactic Notation *)
+
+Ltac foo :=
+ let x := intros in
+ let y := intros -> in
+ let v := constr:(@ nil True) in
+ let w := () in
+ let z := 1 in
+ pose v.
+Print Ltac foo.
diff --git a/test-suite/output/ltac_extra_args.out b/test-suite/output/ltac_extra_args.out
new file mode 100644
index 00000000..77e799d3
--- /dev/null
+++ b/test-suite/output/ltac_extra_args.out
@@ -0,0 +1,8 @@
+The command has indeed failed with message:
+Illegal tactic application: got 1 extra argument.
+The command has indeed failed with message:
+Illegal tactic application: got 2 extra arguments.
+The command has indeed failed with message:
+Illegal tactic application: got 1 extra argument.
+The command has indeed failed with message:
+Illegal tactic application: got 2 extra arguments.
diff --git a/test-suite/output/ltac_extra_args.v b/test-suite/output/ltac_extra_args.v
new file mode 100644
index 00000000..4caf619f
--- /dev/null
+++ b/test-suite/output/ltac_extra_args.v
@@ -0,0 +1,10 @@
+Ltac foo := idtac.
+Ltac bar H := idtac.
+
+Goal True.
+Proof.
+ Fail foo H.
+ Fail foo H H'.
+ Fail bar H H'.
+ Fail bar H H' H''.
+Abort.
diff --git a/test-suite/output/ltac_missing_args.out b/test-suite/output/ltac_missing_args.out
new file mode 100644
index 00000000..7326f137
--- /dev/null
+++ b/test-suite/output/ltac_missing_args.out
@@ -0,0 +1,40 @@
+The command has indeed failed with message:
+The user-defined tactic "Top.foo" was not fully applied:
+There is a missing argument for variable x,
+no arguments at all were provided.
+The command has indeed failed with message:
+The user-defined tactic "Top.bar" was not fully applied:
+There is a missing argument for variable x,
+no arguments at all were provided.
+The command has indeed failed with message:
+The user-defined tactic "Top.bar" was not fully applied:
+There are missing arguments for variables y and _,
+an argument was provided for variable x.
+The command has indeed failed with message:
+The user-defined tactic "Top.baz" was not fully applied:
+There is a missing argument for variable x,
+no arguments at all were provided.
+The command has indeed failed with message:
+The user-defined tactic "Top.qux" was not fully applied:
+There is a missing argument for variable x,
+no arguments at all were provided.
+The command has indeed failed with message:
+The user-defined tactic "Top.mydo" was not fully applied:
+There is a missing argument for variable _,
+no arguments at all were provided.
+The command has indeed failed with message:
+An unnamed user-defined tactic was not fully applied:
+There is a missing argument for variable _,
+no arguments at all were provided.
+The command has indeed failed with message:
+An unnamed user-defined tactic was not fully applied:
+There is a missing argument for variable _,
+no arguments at all were provided.
+The command has indeed failed with message:
+The user-defined tactic "Top.rec" was not fully applied:
+There is a missing argument for variable x,
+no arguments at all were provided.
+The command has indeed failed with message:
+An unnamed user-defined tactic was not fully applied:
+There is a missing argument for variable x,
+an argument was provided for variable tac.
diff --git a/test-suite/output/ltac_missing_args.v b/test-suite/output/ltac_missing_args.v
new file mode 100644
index 00000000..91331a1d
--- /dev/null
+++ b/test-suite/output/ltac_missing_args.v
@@ -0,0 +1,19 @@
+Ltac foo x := idtac x.
+Ltac bar x := fun y _ => idtac x y.
+Ltac baz := foo.
+Ltac qux := bar.
+Ltac mydo tac := tac ().
+Ltac rec x := rec.
+
+Goal True.
+ Fail foo.
+ Fail bar.
+ Fail bar True.
+ Fail baz.
+ Fail qux.
+ Fail mydo ltac:(fun _ _ => idtac).
+ Fail let tac := (fun _ => idtac) in tac.
+ Fail (fun _ => idtac).
+ Fail rec True.
+ Fail let rec tac x := tac in tac True.
+Abort.
diff --git a/test-suite/output/names.out b/test-suite/output/names.out
index 9471b892..48be63a4 100644
--- a/test-suite/output/names.out
+++ b/test-suite/output/names.out
@@ -3,3 +3,9 @@ In environment
y : nat
The term "a y" has type "{y0 : nat | y = y0}"
while it is expected to have type "{x : nat | x = y}".
+1 focused subgoal
+(shelved: 1)
+
+ H : ?n <= 3 -> 3 <= ?n -> ?n = 3
+ ============================
+ True
diff --git a/test-suite/output/names.v b/test-suite/output/names.v
index b3b5071a..f1efd0df 100644
--- a/test-suite/output/names.v
+++ b/test-suite/output/names.v
@@ -3,3 +3,7 @@
Parameter a : forall x, {y:nat|x=y}.
Fail Definition b y : {x:nat|x=y} := a y.
+
+Goal (forall n m, n <= m -> m <= n -> n = m) -> True.
+intro H; epose proof (H _ 3) as H.
+Show.
diff --git a/test-suite/output/optimize_heap.out b/test-suite/output/optimize_heap.out
new file mode 100644
index 00000000..94a0b191
--- /dev/null
+++ b/test-suite/output/optimize_heap.out
@@ -0,0 +1,8 @@
+1 subgoal
+
+ ============================
+ True
+1 subgoal
+
+ ============================
+ True
diff --git a/test-suite/output/optimize_heap.v b/test-suite/output/optimize_heap.v
new file mode 100644
index 00000000..e566bd7b
--- /dev/null
+++ b/test-suite/output/optimize_heap.v
@@ -0,0 +1,7 @@
+(* optimize_heap should not affect the proof state *)
+
+Goal True.
+ idtac.
+ Show.
+ optimize_heap.
+ Show.
diff --git a/test-suite/output/qualification.out b/test-suite/output/qualification.out
index 9300c3f5..e9c70d1e 100644
--- a/test-suite/output/qualification.out
+++ b/test-suite/output/qualification.out
@@ -1,3 +1,4 @@
File "stdin", line 19, characters 0-7:
Error: Signature components for label test do not match: expected type
"Top.M2.t = Top.M2.M.t" but found type "Top.M2.t = Top.M2.t".
+
diff --git a/test-suite/output/ssr_clear.out b/test-suite/output/ssr_clear.out
new file mode 100644
index 00000000..15159540
--- /dev/null
+++ b/test-suite/output/ssr_clear.out
@@ -0,0 +1,3 @@
+The command has indeed failed with message:
+Ltac call to "move (ssrmovearg) (ssrclauses)" failed.
+No assumption is named NO_SUCH_NAME
diff --git a/test-suite/output/ssr_clear.v b/test-suite/output/ssr_clear.v
new file mode 100644
index 00000000..573ec47e
--- /dev/null
+++ b/test-suite/output/ssr_clear.v
@@ -0,0 +1,6 @@
+Require Import ssreflect.
+
+Example foo : True -> True.
+Proof.
+Fail move=> {NO_SUCH_NAME}.
+Abort.
diff --git a/test-suite/prerequisite/bind_univs.v b/test-suite/prerequisite/bind_univs.v
new file mode 100644
index 00000000..e834fde1
--- /dev/null
+++ b/test-suite/prerequisite/bind_univs.v
@@ -0,0 +1,7 @@
+(* Used in output/UnivBinders.v *)
+
+Monomorphic Definition mono@{u} := Type@{u}.
+
+Polymorphic Definition poly@{u} := Type@{u}.
+
+Monomorphic Universe reqU.
diff --git a/test-suite/prerequisite/module_bug7192.v b/test-suite/prerequisite/module_bug7192.v
new file mode 100644
index 00000000..82cfe560
--- /dev/null
+++ b/test-suite/prerequisite/module_bug7192.v
@@ -0,0 +1,9 @@
+(* Variant of #7192 to be tested in a file requiring this file *)
+(* #7192 is about Print Assumptions not entering implementation of submodules *)
+
+Definition a := True.
+Module Type B. Axiom f : Prop. End B.
+Module Type C. Declare Module D : B. End C.
+Module M7192: C.
+ Module D <: B. Definition f := a. End D.
+End M7192.
diff --git a/test-suite/prerequisite/module_bug8416.v b/test-suite/prerequisite/module_bug8416.v
new file mode 100644
index 00000000..70f43d13
--- /dev/null
+++ b/test-suite/prerequisite/module_bug8416.v
@@ -0,0 +1,2 @@
+Module Type A. Axiom f : True. End A.
+Module M8416 : A. Definition f := I. End M8416.
diff --git a/test-suite/save-logs.sh b/test-suite/save-logs.sh
new file mode 100755
index 00000000..9b8fff09
--- /dev/null
+++ b/test-suite/save-logs.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+SAVEDIR="logs"
+
+# reset for local builds
+rm -rf "$SAVEDIR"
+mkdir "$SAVEDIR"
+
+# keep this synced with test-suite/Makefile
+FAILMARK="==========> FAILURE <=========="
+
+FAILED=$(mktemp /tmp/coq-check-XXXXXX)
+find . '(' -path ./bugs/opened -prune ')' -o '(' -name '*.log' -exec grep "$FAILMARK" -q '{}' ';' -print0 ')' > "$FAILED"
+
+rsync -a --from0 --files-from="$FAILED" . "$SAVEDIR"
+cp summary.log "$SAVEDIR"/
+
+# cleanup
+rm "$FAILED"
diff --git a/test-suite/ssr/rew_polyuniv.v b/test-suite/ssr/rew_polyuniv.v
new file mode 100644
index 00000000..e2bbbc9e
--- /dev/null
+++ b/test-suite/ssr/rew_polyuniv.v
@@ -0,0 +1,90 @@
+From Coq Require Import Utf8 Setoid ssreflect.
+Set Default Proof Using "Type".
+
+Local Set Universe Polymorphism.
+
+(** Telescopes *)
+Inductive tele : Type :=
+ | TeleO : tele
+ | TeleS {X} (binder : X → tele) : tele.
+
+Arguments TeleS {_} _.
+
+(** The telescope version of Coq's function type *)
+Fixpoint tele_fun (TT : tele) (T : Type) : Type :=
+ match TT with
+ | TeleO => T
+ | TeleS b => ∀ x, tele_fun (b x) T
+ end.
+
+Notation "TT -t> A" :=
+ (tele_fun TT A) (at level 99, A at level 200, right associativity).
+
+(** A sigma-like type for an "element" of a telescope, i.e. the data it
+ takes to get a [T] from a [TT -t> T]. *)
+Inductive tele_arg : tele → Type :=
+| TargO : tele_arg TeleO
+(* the [x] is the only relevant data here *)
+| TargS {X} {binder} (x : X) : tele_arg (binder x) → tele_arg (TeleS binder).
+
+Definition tele_app {TT : tele} {T} (f : TT -t> T) : tele_arg TT → T :=
+ λ a, (fix rec {TT} (a : tele_arg TT) : (TT -t> T) → T :=
+ match a in tele_arg TT return (TT -t> T) → T with
+ | TargO => λ t : T, t
+ | TargS x a => λ f, rec a (f x)
+ end) TT a f.
+Arguments tele_app {!_ _} _ !_ /.
+
+Coercion tele_arg : tele >-> Sortclass.
+Coercion tele_app : tele_fun >-> Funclass.
+
+(** Inversion lemma for [tele_arg] *)
+Lemma tele_arg_inv {TT : tele} (a : TT) :
+ match TT as TT return TT → Prop with
+ | TeleO => λ a, a = TargO
+ | TeleS f => λ a, ∃ x a', a = TargS x a'
+ end a.
+Proof. induction a; eauto. Qed.
+Lemma tele_arg_O_inv (a : TeleO) : a = TargO.
+Proof. exact (tele_arg_inv a). Qed.
+Lemma tele_arg_S_inv {X} {f : X → tele} (a : TeleS f) :
+ ∃ x a', a = TargS x a'.
+Proof. exact (tele_arg_inv a). Qed.
+
+(** Operate below [tele_fun]s with argument telescope [TT]. *)
+Fixpoint tele_bind {U} {TT : tele} : (TT → U) → TT -t> U :=
+ match TT as TT return (TT → U) → TT -t> U with
+ | TeleO => λ F, F TargO
+ | @TeleS X b => λ (F : TeleS b → U) (x : X), (* b x -t> U *)
+ tele_bind (λ a, F (TargS x a))
+ end.
+Arguments tele_bind {_ !_} _ /.
+
+(* Show that tele_app ∘ tele_bind is the identity. *)
+Lemma tele_app_bind {U} {TT : tele} (f : TT → U) x :
+ (tele_app (tele_bind f)) x = f x.
+Proof.
+ induction TT as [|X b IH]; simpl in *.
+ - rewrite (tele_arg_O_inv x). auto.
+ - destruct (tele_arg_S_inv x) as [x' [a' ->]]. simpl.
+ rewrite IH. auto.
+Qed.
+
+(** Notation-compatible telescope mapping *)
+(* This adds (tele_app ∘ tele_bind), which is an identity function, around every
+ binder so that, after simplifying, this matches the way we typically write
+ notations involving telescopes. *)
+Notation "'λ..' x .. y , e" :=
+ (tele_app (tele_bind (λ x, .. (tele_app (tele_bind (λ y, e))) .. )))
+ (at level 200, x binder, y binder, right associativity,
+ format "'[ ' 'λ..' x .. y ']' , e").
+
+(* The testcase *)
+Lemma test {TA TB : tele} {X} (α' β' γ' : X → Prop) (Φ : TA → TB → Prop) x' :
+ (forall P Q, ((P /\ Q) = Q) * ((P -> Q) = Q)) ->
+ ∀ a b, Φ a b = (λ.. x y, β' x' ∧ (γ' x' → Φ x y)) a b.
+Proof.
+intros cheat a b.
+rewrite !tele_app_bind.
+by rewrite !cheat.
+Qed.
diff --git a/test-suite/ssr/set_polyuniv.v b/test-suite/ssr/set_polyuniv.v
new file mode 100644
index 00000000..436eeafc
--- /dev/null
+++ b/test-suite/ssr/set_polyuniv.v
@@ -0,0 +1,11 @@
+From Coq Require Import ssreflect.
+Set Default Proof Using "Type".
+
+Local Set Universe Polymorphism.
+
+Axiom foo : Type -> Prop.
+
+Lemma test : foo nat.
+Proof.
+set x := foo _. (* key @foo{i} matches @foo{j} *)
+Abort.
diff --git a/test-suite/success/Abstract.v b/test-suite/success/Abstract.v
index ffd50f6e..d52a853a 100644
--- a/test-suite/success/Abstract.v
+++ b/test-suite/success/Abstract.v
@@ -1,5 +1,4 @@
-
-(* Cf coqbugs #546 *)
+(* Cf BZ#546 *)
Require Import Omega.
diff --git a/test-suite/success/BracketsWithGoalSelector.v b/test-suite/success/BracketsWithGoalSelector.v
new file mode 100644
index 00000000..ed035f52
--- /dev/null
+++ b/test-suite/success/BracketsWithGoalSelector.v
@@ -0,0 +1,16 @@
+Goal forall A B, B \/ A -> A \/ B.
+Proof.
+ intros * [HB | HA].
+ 2: {
+ left.
+ exact HA.
+ Fail right. (* No such goal. Try unfocusing with "}". *)
+ }
+ Fail 2: { (* Non-existent goal. *)
+ idtac. (* The idtac is to get a dot, so that IDEs know to stop there. *)
+ 1:{ (* Syntactic test: no space before bracket. *)
+ right.
+ exact HB.
+Fail Qed.
+ }
+Qed.
diff --git a/test-suite/success/Case19.v b/test-suite/success/Case19.v
index c29e5297..ce98879a 100644
--- a/test-suite/success/Case19.v
+++ b/test-suite/success/Case19.v
@@ -1,5 +1,5 @@
(* This used to fail in Coq version 8.1 beta due to a non variable
- universe (issued by the inductive sort-polymorphism) being sent by
+ universe (issued by template polymorphism) being sent by
pretyping to the kernel (bug #1182) *)
Variable T : Type.
@@ -17,3 +17,22 @@ Fail exists (fun x =>
with
| eq_refl => eq_refl
end).
+Abort.
+
+(* Some tests with ltac matching on building "if" and "let" *)
+
+Goal forall b c d, (if negb b then c else d) = 0.
+intros.
+match goal with
+|- (if ?b then ?c else ?d) = 0 => transitivity (if b then d else c)
+end.
+Abort.
+
+Definition swap {A} {B} '((x,y):A*B) := (y,x).
+
+Goal forall p, (let '(x,y) := swap p in x + y) = 0.
+intros.
+match goal with
+|- (let '(x,y) := ?p in x + y) = 0 => transitivity (let (x,y) := p in x+y)
+end.
+Abort.
diff --git a/test-suite/success/Case22.v b/test-suite/success/Case22.v
index 3c696502..465b3eb8 100644
--- a/test-suite/success/Case22.v
+++ b/test-suite/success/Case22.v
@@ -41,6 +41,7 @@ Definition F (x:IND True) (A:Type) :=
Theorem paradox : False.
(* This succeeded in 8.3, 8.4 and 8.5beta1 because F had wrong type *)
Fail Proof (F C False).
+Abort.
(* Another bug found in November 2015 (a substitution was wrongly
reversed at pretyping level) *)
@@ -61,3 +62,30 @@ Inductive Ind2 (b:=1) (c:nat) : Type :=
Constr2 : Ind2 c.
Eval vm_compute in Constr2 2.
+
+(* A bug introduced in ade2363 (similar to #5322 and #5324). This
+ commit started to see that some List.rev was wrong in the "var"
+ case of a pattern-matching problem but it failed to see that a
+ transformation from a list of arguments into a substitution was
+ still needed. *)
+
+(* The order of real arguments was made wrong by ade2363 in the "var"
+ case of the compilation of "match" *)
+
+Inductive IND2 : forall X Y:Type, Type :=
+ CONSTR2 : IND2 unit Empty_set.
+
+Check fun x:IND2 bool nat =>
+ match x in IND2 a b return a with
+ | y => _
+ end = true.
+
+(* From January 2017, using the proper function to turn arguments into
+ a substitution up to a context possibly containing let-ins, so that
+ the following, which was wrong also before ade2363, now works
+ correctly *)
+
+Check fun x:Ind bool nat =>
+ match x in Ind _ X Y Z return Z with
+ | y => (true,0)
+ end.
diff --git a/test-suite/success/Cases.v b/test-suite/success/Cases.v
index 49c465b6..52fe98ac 100644
--- a/test-suite/success/Cases.v
+++ b/test-suite/success/Cases.v
@@ -1868,3 +1868,8 @@ Definition transport {A} (P : A->Type) {x y : A} (p : x=y) (u : P x) : P y :=
Check match eq_refl 0 in _=O return O=O with eq_refl => eq_refl end.
Check match niln in listn O return O=O with niln => eq_refl end.
+
+(* A test about nested "as" clauses *)
+(* (was failing up to May 2017) *)
+
+Check fun x => match x with (y,z) as t as w => (y+z,t) = (0,w) end.
diff --git a/test-suite/success/Check.v b/test-suite/success/Check.v
index e4ee351c..36fecf72 100644
--- a/test-suite/success/Check.v
+++ b/test-suite/success/Check.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Compiling the theories allows testing parsing and typing but not printing *)
(* This file tests that pretty-printing does not fail *)
@@ -12,3 +14,5 @@
Check 0.
Check S.
Check nat.
+
+Type Type : Type.
diff --git a/test-suite/success/Compat84.v b/test-suite/success/Compat84.v
deleted file mode 100644
index db6348fa..00000000
--- a/test-suite/success/Compat84.v
+++ /dev/null
@@ -1,19 +0,0 @@
-(* -*- coq-prog-args: ("-emacs" "-compat" "8.4") -*- *)
-
-Goal True.
- solve [ constructor 1 ]. Undo.
- solve [ econstructor 1 ]. Undo.
- solve [ constructor ]. Undo.
- solve [ econstructor ]. Undo.
- solve [ constructor (fail) ]. Undo.
- solve [ econstructor (fail) ]. Undo.
- split.
-Qed.
-
-Goal False \/ True.
- solve [ constructor (constructor) ]. Undo.
- solve [ econstructor (econstructor) ]. Undo.
- solve [ constructor 2; constructor ]. Undo.
- solve [ econstructor 2; econstructor ]. Undo.
- right; esplit.
-Qed.
diff --git a/test-suite/success/CompatCurrentFlag.v b/test-suite/success/CompatCurrentFlag.v
new file mode 100644
index 00000000..288c9d1d
--- /dev/null
+++ b/test-suite/success/CompatCurrentFlag.v
@@ -0,0 +1,3 @@
+(* -*- coq-prog-args: ("-compat" "8.8") -*- *)
+(** Check that the current compatibility flag actually requires the relevant modules. *)
+Import Coq.Compat.Coq88.
diff --git a/test-suite/success/CompatOldFlag.v b/test-suite/success/CompatOldFlag.v
new file mode 100644
index 00000000..b7bbc505
--- /dev/null
+++ b/test-suite/success/CompatOldFlag.v
@@ -0,0 +1,5 @@
+(* -*- coq-prog-args: ("-compat" "8.6") -*- *)
+(** Check that the current-minus-two compatibility flag actually requires the relevant modules. *)
+Import Coq.Compat.Coq88.
+Import Coq.Compat.Coq87.
+Import Coq.Compat.Coq86.
diff --git a/test-suite/success/CompatPreviousFlag.v b/test-suite/success/CompatPreviousFlag.v
new file mode 100644
index 00000000..9cfe6039
--- /dev/null
+++ b/test-suite/success/CompatPreviousFlag.v
@@ -0,0 +1,4 @@
+(* -*- coq-prog-args: ("-compat" "8.7") -*- *)
+(** Check that the current-minus-one compatibility flag actually requires the relevant modules. *)
+Import Coq.Compat.Coq88.
+Import Coq.Compat.Coq87.
diff --git a/test-suite/success/Discriminate.v b/test-suite/success/Discriminate.v
index a7596741..6abfca4c 100644
--- a/test-suite/success/Discriminate.v
+++ b/test-suite/success/Discriminate.v
@@ -38,3 +38,10 @@ Abort.
Goal ~ identity 0 1.
discriminate.
Qed.
+
+(* Check discriminate on types with local definitions *)
+
+Inductive A := B (T := unit) (x y : bool) (z := x).
+Goal forall x y, B x true = B y false -> False.
+discriminate.
+Qed.
diff --git a/test-suite/success/Field.v b/test-suite/success/Field.v
index 438e4613..fdf7797d 100644
--- a/test-suite/success/Field.v
+++ b/test-suite/success/Field.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(**** Tests of Field with real numbers ****)
diff --git a/test-suite/success/Fixpoint.v b/test-suite/success/Fixpoint.v
index 5fc703cf..efb32ef6 100644
--- a/test-suite/success/Fixpoint.v
+++ b/test-suite/success/Fixpoint.v
@@ -91,3 +91,33 @@ apply Cons2.
exact b.
apply (ex1 (S n) (negb b)).
Defined.
+
+Section visibility.
+
+ Let Fixpoint imm (n:nat) : True := I.
+
+ Let Fixpoint by_proof (n:nat) : True.
+ Proof. exact I. Defined.
+End visibility.
+
+Fail Check imm.
+Fail Check by_proof.
+
+Module Import mod_local.
+ Fixpoint imm_importable (n:nat) : True := I.
+
+ Local Fixpoint imm_local (n:nat) : True := I.
+
+ Fixpoint by_proof_importable (n:nat) : True.
+ Proof. exact I. Defined.
+
+ Local Fixpoint by_proof_local (n:nat) : True.
+ Proof. exact I. Defined.
+End mod_local.
+
+Check imm_importable.
+Fail Check imm_local.
+Check mod_local.imm_local.
+Check by_proof_importable.
+Fail Check by_proof_local.
+Check mod_local.by_proof_local.
diff --git a/test-suite/success/Funind.v b/test-suite/success/Funind.v
index 3bf97c13..f87f2e2a 100644
--- a/test-suite/success/Funind.v
+++ b/test-suite/success/Funind.v
@@ -1,4 +1,6 @@
+Require Import Coq.funind.FunInd.
+
Definition iszero (n : nat) : bool :=
match n with
| O => true
diff --git a/test-suite/success/FunindExtraction_compat86.v b/test-suite/success/FunindExtraction_compat86.v
new file mode 100644
index 00000000..8912197d
--- /dev/null
+++ b/test-suite/success/FunindExtraction_compat86.v
@@ -0,0 +1,506 @@
+(* -*- coq-prog-args: ("-compat" "8.6") -*- *)
+
+Definition iszero (n : nat) : bool :=
+ match n with
+ | O => true
+ | _ => false
+ end.
+
+Functional Scheme iszero_ind := Induction for iszero Sort Prop.
+
+Lemma toto : forall n : nat, n = 0 -> iszero n = true.
+intros x eg.
+ functional induction iszero x; simpl.
+trivial.
+inversion eg.
+Qed.
+
+
+Function ftest (n m : nat) : nat :=
+ match n with
+ | O => match m with
+ | O => 0
+ | _ => 1
+ end
+ | S p => 0
+ end.
+(* MS: FIXME: apparently can't define R_ftest_complete. Rest of the file goes through. *)
+
+Lemma test1 : forall n m : nat, ftest n m <= 2.
+intros n m.
+ functional induction ftest n m; auto.
+Qed.
+
+Lemma test2 : forall m n, ~ 2 = ftest n m.
+Proof.
+intros n m;intro H.
+functional inversion H ftest.
+Qed.
+
+Lemma test3 : forall n m, ftest n m = 0 -> (n = 0 /\ m = 0) \/ n <> 0.
+Proof.
+functional inversion 1 ftest;auto.
+Qed.
+
+
+Require Import Arith.
+Lemma test11 : forall m : nat, ftest 0 m <= 2.
+intros m.
+ functional induction ftest 0 m.
+auto.
+auto.
+auto with *.
+Qed.
+
+Function lamfix (m n : nat) {struct n } : nat :=
+ match n with
+ | O => m
+ | S p => lamfix m p
+ end.
+
+(* Parameter v1 v2 : nat. *)
+
+Lemma lamfix_lem : forall v1 v2 : nat, lamfix v1 v2 = v1.
+intros v1 v2.
+ functional induction lamfix v1 v2.
+trivial.
+assumption.
+Defined.
+
+
+
+(* polymorphic function *)
+Require Import List.
+
+Functional Scheme app_ind := Induction for app Sort Prop.
+
+Lemma appnil : forall (A : Set) (l l' : list A), l' = nil -> l = l ++ l'.
+intros A l l'.
+ functional induction app A l l'; intuition.
+ rewrite <- H0; trivial.
+Qed.
+
+
+
+
+
+Require Export Arith.
+
+
+Function trivfun (n : nat) : nat :=
+ match n with
+ | O => 0
+ | S m => trivfun m
+ end.
+
+
+(* essaie de parametre variables non locaux:*)
+
+Parameter varessai : nat.
+
+Lemma first_try : trivfun varessai = 0.
+ functional induction trivfun varessai.
+trivial.
+assumption.
+Defined.
+
+
+ Functional Scheme triv_ind := Induction for trivfun Sort Prop.
+
+Lemma bisrepetita : forall n' : nat, trivfun n' = 0.
+intros n'.
+ functional induction trivfun n'.
+trivial.
+assumption.
+Qed.
+
+
+
+
+
+
+
+Function iseven (n : nat) : bool :=
+ match n with
+ | O => true
+ | S (S m) => iseven m
+ | _ => false
+ end.
+
+
+Function funex (n : nat) : nat :=
+ match iseven n with
+ | true => n
+ | false => match n with
+ | O => 0
+ | S r => funex r
+ end
+ end.
+
+
+Function nat_equal_bool (n m : nat) {struct n} : bool :=
+ match n with
+ | O => match m with
+ | O => true
+ | _ => false
+ end
+ | S p => match m with
+ | O => false
+ | S q => nat_equal_bool p q
+ end
+ end.
+
+
+Require Export Div2.
+Require Import Nat.
+Functional Scheme div2_ind := Induction for div2 Sort Prop.
+Lemma div2_inf : forall n : nat, div2 n <= n.
+intros n.
+ functional induction div2 n.
+auto.
+auto.
+
+apply le_S.
+apply le_n_S.
+exact IHn0.
+Qed.
+
+(* reuse this lemma as a scheme:*)
+
+Function nested_lam (n : nat) : nat -> nat :=
+ match n with
+ | O => fun m : nat => 0
+ | S n' => fun m : nat => m + nested_lam n' m
+ end.
+
+
+Lemma nest : forall n m : nat, nested_lam n m = n * m.
+intros n m.
+ functional induction nested_lam n m; simpl;auto.
+Qed.
+
+
+Function essai (x : nat) (p : nat * nat) {struct x} : nat :=
+ let (n, m) := (p: nat*nat) in
+ match n with
+ | O => 0
+ | S q => match x with
+ | O => 1
+ | S r => S (essai r (q, m))
+ end
+ end.
+
+Lemma essai_essai :
+ forall (x : nat) (p : nat * nat), let (n, m) := p in 0 < n -> 0 < essai x p.
+intros x p.
+ functional induction essai x p; intros.
+inversion H.
+auto with arith.
+ auto with arith.
+Qed.
+
+Function plus_x_not_five'' (n m : nat) {struct n} : nat :=
+ let x := nat_equal_bool m 5 in
+ let y := 0 in
+ match n with
+ | O => y
+ | S q =>
+ let recapp := plus_x_not_five'' q m in
+ match x with
+ | true => S recapp
+ | false => S recapp
+ end
+ end.
+
+Lemma notplusfive'' : forall x y : nat, y = 5 -> plus_x_not_five'' x y = x.
+intros a b.
+ functional induction plus_x_not_five'' a b; intros hyp; simpl; auto.
+Qed.
+
+Lemma iseq_eq : forall n m : nat, n = m -> nat_equal_bool n m = true.
+intros n m.
+ functional induction nat_equal_bool n m; simpl; intros hyp; auto.
+rewrite <- hyp in y; simpl in y;tauto.
+inversion hyp.
+Qed.
+
+Lemma iseq_eq' : forall n m : nat, nat_equal_bool n m = true -> n = m.
+intros n m.
+ functional induction nat_equal_bool n m; simpl; intros eg; auto.
+inversion eg.
+inversion eg.
+Qed.
+
+
+Inductive istrue : bool -> Prop :=
+ istrue0 : istrue true.
+
+Functional Scheme add_ind := Induction for add Sort Prop.
+
+Lemma inf_x_plusxy' : forall x y : nat, x <= x + y.
+intros n m.
+ functional induction add n m; intros.
+auto with arith.
+auto with arith.
+Qed.
+
+
+Lemma inf_x_plusxy'' : forall x : nat, x <= x + 0.
+intros n.
+unfold plus.
+ functional induction plus n 0; intros.
+auto with arith.
+apply le_n_S.
+assumption.
+Qed.
+
+Lemma inf_x_plusxy''' : forall x : nat, x <= 0 + x.
+intros n.
+ functional induction plus 0 n; intros; auto with arith.
+Qed.
+
+Function mod2 (n : nat) : nat :=
+ match n with
+ | O => 0
+ | S (S m) => S (mod2 m)
+ | _ => 0
+ end.
+
+Lemma princ_mod2 : forall n : nat, mod2 n <= n.
+intros n.
+ functional induction mod2 n; simpl; auto with arith.
+Qed.
+
+Function isfour (n : nat) : bool :=
+ match n with
+ | S (S (S (S O))) => true
+ | _ => false
+ end.
+
+Function isononeorfour (n : nat) : bool :=
+ match n with
+ | S O => true
+ | S (S (S (S O))) => true
+ | _ => false
+ end.
+
+Lemma toto'' : forall n : nat, istrue (isfour n) -> istrue (isononeorfour n).
+intros n.
+ functional induction isononeorfour n; intros istr; simpl;
+ inversion istr.
+apply istrue0.
+destruct n. inversion istr.
+destruct n. tauto.
+destruct n. inversion istr.
+destruct n. inversion istr.
+destruct n. tauto.
+simpl in *. inversion H0.
+Qed.
+
+Lemma toto' : forall n m : nat, n = 4 -> istrue (isononeorfour n).
+intros n.
+ functional induction isononeorfour n; intros m istr; inversion istr.
+apply istrue0.
+rewrite H in y; simpl in y;tauto.
+Qed.
+
+Function ftest4 (n m : nat) : nat :=
+ match n with
+ | O => match m with
+ | O => 0
+ | S q => 1
+ end
+ | S p => match m with
+ | O => 0
+ | S r => 1
+ end
+ end.
+
+Lemma test4 : forall n m : nat, ftest n m <= 2.
+intros n m.
+ functional induction ftest n m; auto with arith.
+Qed.
+
+Lemma test4' : forall n m : nat, ftest4 (S n) m <= 2.
+intros n m.
+assert ({n0 | n0 = S n}).
+exists (S n);reflexivity.
+destruct H as [n0 H1].
+rewrite <- H1;revert H1.
+ functional induction ftest4 n0 m.
+inversion 1.
+inversion 1.
+
+auto with arith.
+auto with arith.
+Qed.
+
+Function ftest44 (x : nat * nat) (n m : nat) : nat :=
+ let (p, q) := (x: nat*nat) in
+ match n with
+ | O => match m with
+ | O => 0
+ | S q => 1
+ end
+ | S p => match m with
+ | O => 0
+ | S r => 1
+ end
+ end.
+
+Lemma test44 :
+ forall (pq : nat * nat) (n m o r s : nat), ftest44 pq n (S m) <= 2.
+intros pq n m o r s.
+ functional induction ftest44 pq n (S m).
+auto with arith.
+auto with arith.
+auto with arith.
+auto with arith.
+Qed.
+
+Function ftest2 (n m : nat) {struct n} : nat :=
+ match n with
+ | O => match m with
+ | O => 0
+ | S q => 0
+ end
+ | S p => ftest2 p m
+ end.
+
+Lemma test2' : forall n m : nat, ftest2 n m <= 2.
+intros n m.
+ functional induction ftest2 n m; simpl; intros; auto.
+Qed.
+
+Function ftest3 (n m : nat) {struct n} : nat :=
+ match n with
+ | O => 0
+ | S p => match m with
+ | O => ftest3 p 0
+ | S r => 0
+ end
+ end.
+
+Lemma test3' : forall n m : nat, ftest3 n m <= 2.
+intros n m.
+ functional induction ftest3 n m.
+intros.
+auto.
+intros.
+auto.
+intros.
+simpl.
+auto.
+Qed.
+
+Function ftest5 (n m : nat) {struct n} : nat :=
+ match n with
+ | O => 0
+ | S p => match m with
+ | O => ftest5 p 0
+ | S r => ftest5 p r
+ end
+ end.
+
+Lemma test5 : forall n m : nat, ftest5 n m <= 2.
+intros n m.
+ functional induction ftest5 n m.
+intros.
+auto.
+intros.
+auto.
+intros.
+simpl.
+auto.
+Qed.
+
+Function ftest7 (n : nat) : nat :=
+ match ftest5 n 0 with
+ | O => 0
+ | S r => 0
+ end.
+
+Lemma essai7 :
+ forall (Hrec : forall n : nat, ftest5 n 0 = 0 -> ftest7 n <= 2)
+ (Hrec0 : forall n r : nat, ftest5 n 0 = S r -> ftest7 n <= 2)
+ (n : nat), ftest7 n <= 2.
+intros hyp1 hyp2 n.
+ functional induction ftest7 n; auto.
+Qed.
+
+Function ftest6 (n m : nat) {struct n} : nat :=
+ match n with
+ | O => 0
+ | S p => match ftest5 p 0 with
+ | O => ftest6 p 0
+ | S r => ftest6 p r
+ end
+ end.
+
+
+Lemma princ6 :
+ (forall n m : nat, n = 0 -> ftest6 0 m <= 2) ->
+ (forall n m p : nat,
+ ftest6 p 0 <= 2 -> ftest5 p 0 = 0 -> n = S p -> ftest6 (S p) m <= 2) ->
+ (forall n m p r : nat,
+ ftest6 p r <= 2 -> ftest5 p 0 = S r -> n = S p -> ftest6 (S p) m <= 2) ->
+ forall x y : nat, ftest6 x y <= 2.
+intros hyp1 hyp2 hyp3 n m.
+generalize hyp1 hyp2 hyp3.
+clear hyp1 hyp2 hyp3.
+ functional induction ftest6 n m; auto.
+Qed.
+
+Lemma essai6 : forall n m : nat, ftest6 n m <= 2.
+intros n m.
+ functional induction ftest6 n m; simpl; auto.
+Qed.
+
+(* Some tests with modules *)
+Module M.
+Function test_m (n:nat) : nat :=
+ match n with
+ | 0 => 0
+ | S n => S (S (test_m n))
+ end.
+
+Lemma test_m_is_double : forall n, div2 (test_m n) = n.
+Proof.
+intros n.
+functional induction (test_m n).
+reflexivity.
+simpl;rewrite IHn0;reflexivity.
+Qed.
+End M.
+(* We redefine a new Function with the same name *)
+Function test_m (n:nat) : nat :=
+ pred n.
+
+Lemma test_m_is_pred : forall n, test_m n = pred n.
+Proof.
+intro n.
+functional induction (test_m n). (* the test_m_ind to use is the last defined saying that test_m = pred*)
+reflexivity.
+Qed.
+
+(* Checks if the dot notation are correctly treated in infos *)
+Lemma M_test_m_is_double : forall n, div2 (M.test_m n) = n.
+intro n.
+(* here we should apply M.test_m_ind *)
+functional induction (M.test_m n).
+reflexivity.
+simpl;rewrite IHn0;reflexivity.
+Qed.
+
+Import M.
+(* Now test_m is the one which defines double *)
+
+Lemma test_m_is_double : forall n, div2 (M.test_m n) = n.
+intro n.
+(* here we should apply M.test_m_ind *)
+functional induction (test_m n).
+reflexivity.
+simpl;rewrite IHn0;reflexivity.
+Qed.
+
+Extraction iszero.
diff --git a/test-suite/success/Hints.v b/test-suite/success/Hints.v
index 1abe1477..8d08f597 100644
--- a/test-suite/success/Hints.v
+++ b/test-suite/success/Hints.v
@@ -37,7 +37,6 @@ Hint Resolve predf | 0 : predconv.
Goal exists n, pred n.
eexists.
- Fail Timeout 1 typeclasses eauto with pred.
Set Typeclasses Filtered Unification.
Set Typeclasses Debug Verbosity 2.
(* predf is not tried as it doesn't match the goal *)
@@ -80,8 +79,6 @@ Qed.
(** The other way around: goal contains redexes instead of instances *)
Goal exists n, pred (0 + n).
eexists.
- (* predf is applied indefinitely *)
- Fail Timeout 1 typeclasses eauto with pred.
(* pred0 (pred _) matches the goal *)
typeclasses eauto with predconv.
Qed.
@@ -169,11 +166,20 @@ Instance foo f :
E (id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘
id ∘ id ∘ id ∘ id ∘ id ∘ f ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id ∘ id).
Proof.
- Fail Timeout 1 apply _. (* 3.7s *)
-
Hint Cut [_* (a_is_b | b_is_c | c_is_d | d_is_e)
(a_compose | b_compose | c_compose | d_compose | e_compose)] : typeclass_instances.
Timeout 1 Fail apply _. (* 0.06s *)
Abort.
End HintCut.
+
+
+(* Check that auto-like tactics do not prefer "eq_refl" over more complex solutions, *)
+(* e.g. those tactics when considering a goal with existential varibles *)
+(* like "m = ?n" won't pick "plus_n_O" hint over "eq_refl" hint. *)
+(* See this Coq club post for more detail: *)
+(* https://sympa.inria.fr/sympa/arc/coq-club/2017-12/msg00103.html *)
+
+Goal forall (m : nat), exists n, m = n /\ m = n.
+ intros m; eexists; split; [trivial | reflexivity].
+Qed.
diff --git a/test-suite/success/ImplicitArguments.v b/test-suite/success/ImplicitArguments.v
index f702aa62..921433ca 100644
--- a/test-suite/success/ImplicitArguments.v
+++ b/test-suite/success/ImplicitArguments.v
@@ -21,3 +21,14 @@ Fixpoint app {A : Type} {n m : nat} (v : vector A n) (w : vector A m) : vector A
(* Test sharing information between different hypotheses *)
Parameters (a:_) (b:a=0).
+
+(* These examples were failing due to a lifting wrongly taking let-in into account *)
+
+Definition foo6 (x:=1) : forall {n:nat}, n=n := fun n => eq_refl.
+
+Fixpoint foo7 (x:=1) (n:nat) {p:nat} {struct n} : nat.
+
+(* Some example which should succeed with local implicit arguments *)
+
+Inductive A {P:forall m {n}, n=m -> Prop} := C : P 0 eq_refl -> A.
+Inductive B (P:forall m {n}, n=m -> Prop) := D : P 0 eq_refl -> B P.
diff --git a/test-suite/success/Inductive.v b/test-suite/success/Inductive.v
index f746def5..5b1482fd 100644
--- a/test-suite/success/Inductive.v
+++ b/test-suite/success/Inductive.v
@@ -64,7 +64,7 @@ Check (fun x:I1 =>
end).
(* Check implicit parameters of inductive types (submitted by Pierre
- Casteran and also implicit in #338) *)
+ Casteran and also implicit in BZ#338) *)
Set Implicit Arguments.
Unset Strict Implicit.
@@ -80,7 +80,7 @@ Inductive Finite (A : Set) : LList A -> Prop :=
| Finite_LCons :
forall (a : A) (l : LList A), Finite l -> Finite (LCons a l).
-(* Check positivity modulo reduction (cf bug #983) *)
+(* Check positivity modulo reduction (cf bug BZ#983) *)
Record P:Type := {PA:Set; PB:Set}.
@@ -183,3 +183,26 @@ Module PolyNoLowerProp.
Fail Check Foo True : Prop.
End PolyNoLowerProp.
+
+(* Test building of elimination scheme with noth let-ins and
+ non-recursively uniform parameters *)
+
+Module NonRecLetIn.
+
+ Unset Implicit Arguments.
+
+ Inductive Ind (b:=2) (a:nat) (c:=1) : Type :=
+ | Base : Ind a
+ | Rec : Ind (S a) -> Ind a.
+
+ Check Ind_rect (fun n (b:Ind n) => b = b)
+ (fun n => eq_refl)
+ (fun n b c => f_equal (Rec n) eq_refl) 0 (Rec 0 (Base 1)).
+
+End NonRecLetIn.
+
+(* Test treatment of let-in in the definition of Records *)
+(* Should fail with "Sort expected" *)
+
+Fail Inductive foo (T : Type) : let T := Type in T :=
+ { r : forall x : T, x = x }.
diff --git a/test-suite/success/Injection.v b/test-suite/success/Injection.v
index da218384..78652fb6 100644
--- a/test-suite/success/Injection.v
+++ b/test-suite/success/Injection.v
@@ -150,6 +150,13 @@ match goal with
end.
Abort.
+(* Injection in the presence of local definitions *)
+Inductive A := B (T := unit) (x y : bool) (z := x).
+Goal forall x y x' y', B x y = B x' y' -> y = y'.
+intros * [= H1 H2].
+exact H2.
+Qed.
+
(* Injection does not project at positions in Prop... allow it?
Inductive t (A:Prop) : Set := c : A -> t A.
diff --git a/test-suite/success/Inversion.v b/test-suite/success/Inversion.v
index 850f0943..45c71615 100644
--- a/test-suite/success/Inversion.v
+++ b/test-suite/success/Inversion.v
@@ -1,6 +1,6 @@
Axiom magic : False.
-(* Submitted by Dachuan Yu (bug #220) *)
+(* Submitted by Dachuan Yu (BZ#220) *)
Fixpoint T (n : nat) : Type :=
match n with
| O => nat -> Prop
@@ -16,7 +16,7 @@ Lemma Inversion_RO : forall l : nat, R 0 Psi0 l -> Psi00 l.
inversion 1.
Abort.
-(* Submitted by Pierre Casteran (bug #540) *)
+(* Submitted by Pierre Casteran (BZ#540) *)
Set Implicit Arguments.
Unset Strict Implicit.
@@ -64,7 +64,7 @@ elim magic.
elim magic.
Qed.
-(* Submitted by Boris Yakobowski (bug #529) *)
+(* Submitted by Boris Yakobowski (BZ#529) *)
(* Check that Inversion does not fail due to unnormalized evars *)
Set Implicit Arguments.
@@ -100,7 +100,7 @@ intros a b H.
inversion H.
Abort.
-(* Check non-regression of bug #1968 *)
+(* Check non-regression of BZ#1968 *)
Inductive foo2 : option nat -> Prop := Foo : forall t, foo2 (Some t).
Goal forall o, foo2 o -> 0 = 1.
@@ -130,7 +130,7 @@ Proof.
intros. inversion H.
Abort.
-(* Bug #2314 (simplified): check that errors do not show as anomalies *)
+(* BZ#2314 (simplified): check that errors do not show as anomalies *)
Goal True -> True.
intro.
@@ -158,7 +158,7 @@ reflexivity.
Qed.
(* Up to September 2014, Mapp below was called MApp0 because of a bug
- in intro_replacing (short version of bug 2164.v)
+ in intro_replacing (short version of BZ#2164.v)
(example taken from CoLoR) *)
Parameter Term : Type.
diff --git a/test-suite/success/InversionSigma.v b/test-suite/success/InversionSigma.v
new file mode 100644
index 00000000..51f33c7c
--- /dev/null
+++ b/test-suite/success/InversionSigma.v
@@ -0,0 +1,40 @@
+Section inversion_sigma.
+ Local Unset Implicit Arguments.
+ Context A (B : A -> Prop) (C C' : forall a, B a -> Prop)
+ (D : forall a b, C a b -> Prop) (E : forall a b c, D a b c -> Prop).
+
+ (* Require that, after destructing sigma types and inverting
+ equalities, we can subst equalities of variables only, and reduce
+ down to [eq_refl = eq_refl]. *)
+ Local Ltac test_inversion_sigma :=
+ intros;
+ repeat match goal with
+ | [ H : sig _ |- _ ] => destruct H
+ | [ H : sigT _ |- _ ] => destruct H
+ | [ H : sig2 _ _ |- _ ] => destruct H
+ | [ H : sigT2 _ _ |- _ ] => destruct H
+ end; simpl in *;
+ inversion_sigma;
+ repeat match goal with
+ | [ H : ?x = ?y |- _ ] => is_var x; is_var y; subst x; simpl in *
+ end;
+ match goal with
+ | [ |- eq_refl = eq_refl ] => reflexivity
+ end.
+
+ Goal forall (x y : { a : A & { b : { b : B a & C a b } & { d : D a (projT1 b) (projT2 b) & E _ _ _ d } } })
+ (p : x = y), p = p.
+ Proof. test_inversion_sigma. Qed.
+
+ Goal forall (x y : { a : A | { b : { b : B a | C a b } | { d : D a (proj1_sig b) (proj2_sig b) | E _ _ _ d } } })
+ (p : x = y), p = p.
+ Proof. test_inversion_sigma. Qed.
+
+ Goal forall (x y : { a : { a : A & B a } & C _ (projT2 a) & C' _ (projT2 a) })
+ (p : x = y), p = p.
+ Proof. test_inversion_sigma. Qed.
+
+ Goal forall (x y : { a : { a : A & B a } | C _ (projT2 a) & C' _ (projT2 a) })
+ (p : x = y), p = p.
+ Proof. test_inversion_sigma. Qed.
+End inversion_sigma.
diff --git a/test-suite/success/Mod_type.v b/test-suite/success/Mod_type.v
index d5e1a38c..6c59bf6e 100644
--- a/test-suite/success/Mod_type.v
+++ b/test-suite/success/Mod_type.v
@@ -1,4 +1,4 @@
-(* Check bug #1025 submitted by Pierre-Luc Carmel Biron *)
+(* Check BZ#1025 submitted by Pierre-Luc Carmel Biron *)
Module Type FOO.
Parameter A : Type.
@@ -18,7 +18,7 @@ Module Bar : BAR.
End Bar.
-(* Check bug #2809: correct printing of modules with notations *)
+(* Check BZ#2809: correct printing of modules with notations *)
Module C.
Inductive test : Type :=
diff --git a/test-suite/success/Notations.v b/test-suite/success/Notations.v
index 07bbb60c..3c0ad207 100644
--- a/test-suite/success/Notations.v
+++ b/test-suite/success/Notations.v
@@ -1,5 +1,5 @@
(* Check that "where" clause behaves as if given independently of the *)
-(* definition (variant of bug #1132 submitted by Assia Mahboubi) *)
+(* definition (variant of BZ#1132 submitted by Assia Mahboubi) *)
Fixpoint plus1 (n m:nat) {struct n} : nat :=
match n with
@@ -121,6 +121,7 @@ Notation " |- {{ a }} b" := (a=b) (no associativity, at level 10).
Goal True.
{{ exact I. }}
Qed.
+
Check |- {{ 0 }} 0.
(* Check parsing of { and } is not affected by notations #3479 *)
@@ -128,3 +129,27 @@ Notation " |- {{ a }} b" := (a=b) (no associativity, at level 10).
Goal True.
{{ exact I. }}
Qed.
+
+(* Check that we can have notations without any symbol iff they are "only printing". *)
+Fail Notation "" := (@nil).
+Notation "" := (@nil) (only printing).
+
+(* Check that a notation cannot be neither parsing nor printing. *)
+Fail Notation "'foobarkeyword'" := (@nil) (only parsing, only printing).
+
+(* Check "where" clause for inductive types with parameters *)
+
+Reserved Notation "x === y" (at level 50).
+Inductive EQ {A} (x:A) : A -> Prop := REFL : x === x
+ where "x === y" := (EQ x y).
+
+(* Check that strictly ident or _ are coerced to a name *)
+
+Fail Check {x@{u},y|x=x}.
+Fail Check {?[n],y|0=0}.
+
+(* Check that 10 is well declared left associative *)
+
+Section C.
+Notation "f $$$ x" := (id f x) (at level 10, left associativity).
+End C.
diff --git a/test-suite/success/Notations2.v b/test-suite/success/Notations2.v
index 9505a56e..7c2cf3ee 100644
--- a/test-suite/success/Notations2.v
+++ b/test-suite/success/Notations2.v
@@ -90,3 +90,39 @@ Check fun A (x :prod' bool A) => match x with #### 0 y 0 => 2 | _ => 1 end.
Notation "##### x" := (pair' x) (at level 0, x at level 1).
Check ##### 0 _ 0%bool 0%bool : prod' bool bool.
Check fun A (x :prod' bool A) => match x with ##### 0 _ y 0%bool => 2 | _ => 1 end.
+
+(* 10. Check computation of binding variable through other notations *)
+(* it should be detected as binding variable and the scopes not being checked *)
+Notation "'FUNNAT' i => t" := (fun i : nat => i = t) (at level 200).
+Notation "'Funnat' i => t" := (FUNNAT i => t + i%nat) (at level 200).
+
+(* 11. Notations with needed factorization of a recursive pattern *)
+(* See https://github.com/coq/coq/issues/6078#issuecomment-342287412 *)
+Module M11.
+Notation "[:: x1 ; .. ; xn & s ]" := (cons x1 .. (cons xn s) ..).
+Notation "[:: x1 ; .. ; xn ]" := (cons x1 .. (cons xn nil) ..).
+Check [:: 1 ; 2 ; 3 ].
+Check [:: 1 ; 2 ; 3 & nil ]. (* was failing *)
+End M11.
+
+(* 12. Preventively check that a variable which does not occur can be instantiated *)
+(* by any term. In particular, it should not be restricted to a binder *)
+Module M12.
+Notation "N ++ x" := (S x) (only parsing).
+Check 2 ++ 0.
+End M12.
+
+(* 13. Check that internal data about associativity are not used in comparing levels *)
+Module M13.
+Notation "x ;; z" := (x + z)
+ (at level 100, z at level 200, only parsing, right associativity).
+Notation "x ;; z" := (x * z)
+ (at level 100, z at level 200, only parsing) : foo_scope.
+End M13.
+
+(* 14. Check that a notation with a "ident" binder does not include a pattern *)
+Module M14.
+Notation "'myexists' x , p" := (ex (fun x => p))
+ (at level 200, x ident, p at level 200, right associativity) : type_scope.
+Check myexists I, I = 0. (* Should not be seen as a constructor *)
+End M14.
diff --git a/test-suite/success/NumberScopes.v b/test-suite/success/NumberScopes.v
index 6d787210..15586374 100644
--- a/test-suite/success/NumberScopes.v
+++ b/test-suite/success/NumberScopes.v
@@ -39,24 +39,3 @@ Definition f_nat (x:nat) := x.
Definition f_nat' (x:Nat.t) := x.
Check (f_nat 1).
Check (f_nat' 1).
-
-Require Import BigN.
-Check (BigN.add 1 2).
-Check (BigN.add_comm 1 2).
-Check (BigN.min_comm 1 2).
-Definition f_bigN (x:bigN) := x.
-Check (f_bigN 1).
-
-Require Import BigZ.
-Check (BigZ.add 1 2).
-Check (BigZ.add_comm 1 2).
-Check (BigZ.min_comm 1 2).
-Definition f_bigZ (x:bigZ) := x.
-Check (f_bigZ 1).
-
-Require Import BigQ.
-Check (BigQ.add 1 2).
-Check (BigQ.add_comm 1 2).
-Check (BigQ.min_comm 1 2).
-Definition f_bigQ (x:bigQ) := x.
-Check (f_bigQ 1). \ No newline at end of file
diff --git a/test-suite/success/Omega.v b/test-suite/success/Omega.v
index ecbf04e4..470e4f05 100644
--- a/test-suite/success/Omega.v
+++ b/test-suite/success/Omega.v
@@ -52,7 +52,7 @@ Lemma lem5 : (H > 0)%Z.
Qed.
End B.
-(* From Nicolas Oury (bug #180): handling -> on Set (fixed Oct 2002) *)
+(* From Nicolas Oury (BZ#180): handling -> on Set (fixed Oct 2002) *)
Lemma lem6 :
forall (A : Set) (i : Z), (i <= 0)%Z -> ((i <= 0)%Z -> A) -> (i <= 0)%Z.
intros.
@@ -86,7 +86,7 @@ intros; omega.
Qed.
(* Check that the interpretation of mult on nat enforces its positivity *)
-(* Submitted by Hubert Thierry (bug #743) *)
+(* Submitted by Hubert Thierry (BZ#743) *)
(* Postponed... problem with goals of the form "(n*m=0)%nat -> (n*m=0)%Z" *)
Lemma lem10 : forall n m:nat, le n (plus n (mult n m)).
Proof.
diff --git a/test-suite/success/Omega0.v b/test-suite/success/Omega0.v
index b8f8660e..6fd93693 100644
--- a/test-suite/success/Omega0.v
+++ b/test-suite/success/Omega0.v
@@ -132,7 +132,7 @@ intros.
omega.
Qed.
-(* Magaud #240 *)
+(* Magaud BZ#240 *)
Lemma test_romega_8 : forall x y:Z, x*x<y*y-> ~ y*y <= x*x.
intros.
diff --git a/test-suite/success/Omega2.v b/test-suite/success/Omega2.v
index c4d086a3..4e726335 100644
--- a/test-suite/success/Omega2.v
+++ b/test-suite/success/Omega2.v
@@ -1,6 +1,6 @@
Require Import ZArith Omega.
-(* Submitted by Yegor Bryukhov (#922) *)
+(* Submitted by Yegor Bryukhov (BZ#922) *)
Open Scope Z_scope.
diff --git a/test-suite/success/ProgramWf.v b/test-suite/success/ProgramWf.v
index 681c4716..85d7a770 100644
--- a/test-suite/success/ProgramWf.v
+++ b/test-suite/success/ProgramWf.v
@@ -102,4 +102,4 @@ Qed.
Program Fixpoint check_n' (n : nat) (m : {m:nat | m = n}) (p : nat) (q:{q : nat | q = p})
{measure (p - n) p} : nat :=
- _. \ No newline at end of file
+ _.
diff --git a/test-suite/success/ROmega.v b/test-suite/success/ROmega.v
index 801ece9e..0df3d568 100644
--- a/test-suite/success/ROmega.v
+++ b/test-suite/success/ROmega.v
@@ -52,7 +52,7 @@ Lemma lem5 : (H > 0)%Z.
Qed.
End B.
-(* From Nicolas Oury (bug #180): handling -> on Set (fixed Oct 2002) *)
+(* From Nicolas Oury (BZ#180): handling -> on Set (fixed Oct 2002) *)
Lemma lem6 :
forall (A : Set) (i : Z), (i <= 0)%Z -> ((i <= 0)%Z -> A) -> (i <= 0)%Z.
intros.
@@ -88,7 +88,7 @@ romega with nat.
Qed.
(* Check that the interpretation of mult on nat enforces its positivity *)
-(* Submitted by Hubert Thierry (bug #743) *)
+(* Submitted by Hubert Thierry (BZ#743) *)
(* Postponed... problem with goals of the form "(n*m=0)%nat -> (n*m=0)%Z" *)
Lemma lem10 : forall n m : nat, le n (plus n (mult n m)).
Proof.
diff --git a/test-suite/success/ROmega0.v b/test-suite/success/ROmega0.v
index 1348bb62..3ddf6a40 100644
--- a/test-suite/success/ROmega0.v
+++ b/test-suite/success/ROmega0.v
@@ -132,21 +132,37 @@ intros.
romega.
Qed.
-(* Magaud #240 *)
+(* Magaud BZ#240 *)
Lemma test_romega_8 : forall x y:Z, x*x<y*y-> ~ y*y <= x*x.
+Proof.
intros.
romega.
Qed.
Lemma test_romega_8b : forall x y:Z, x*x<y*y-> ~ y*y <= x*x.
+Proof.
intros x y.
romega.
Qed.
-(* Besson #1298 *)
+(* Besson BZ#1298 *)
Lemma test_romega9 : forall z z':Z, z<>z' -> z'=z -> False.
+Proof.
intros.
romega.
Qed.
+
+(* Letouzey, May 2017 *)
+
+Lemma test_romega10 : forall x a a' b b',
+ a' <= b ->
+ a <= b' ->
+ b < b' ->
+ a < a' ->
+ a <= x < b' <-> a <= x < b \/ a' <= x < b'.
+Proof.
+ intros.
+ romega.
+Qed.
diff --git a/test-suite/success/ROmega2.v b/test-suite/success/ROmega2.v
index 87e8c8e3..43eda67e 100644
--- a/test-suite/success/ROmega2.v
+++ b/test-suite/success/ROmega2.v
@@ -1,6 +1,6 @@
Require Import ZArith ROmega.
-(* Submitted by Yegor Bryukhov (#922) *)
+(* Submitted by Yegor Bryukhov (BZ#922) *)
Open Scope Z_scope.
diff --git a/test-suite/success/ROmega3.v b/test-suite/success/ROmega3.v
new file mode 100644
index 00000000..fd4ff260
--- /dev/null
+++ b/test-suite/success/ROmega3.v
@@ -0,0 +1,31 @@
+
+Require Import ZArith ROmega.
+Local Open Scope Z_scope.
+
+(** Benchmark provided by Chantal Keller, that romega used to
+ solve far too slowly (compared to omega or lia). *)
+
+Parameter v4 : Z.
+Parameter v3 : Z.
+Parameter o4 : Z.
+Parameter s5 : Z.
+Parameter v2 : Z.
+Parameter o5 : Z.
+Parameter s6 : Z.
+Parameter v1 : Z.
+Parameter o6 : Z.
+Parameter s7 : Z.
+Parameter v0 : Z.
+Parameter o7 : Z.
+
+Lemma lemma_5833 :
+ ~ 16 * v4 + (8 * v3 + (-8192 * o4 + (-4096 * s5 + (4 * v2 +
+ (-4096 * o5 + (-2048 * s6 + (2 * v1 + (-2048 * o6 +
+ (-1024 * s7 + (v0 + -1024 * o7)))))))))) >= 8192
+\/
+ 16 * v4 + (8 * v3 + (-8192 * o4 + (-4096 * s5 + (4 * v2 +
+ (-4096 * o5 + (-2048 * s6 + (2 * v1 + (-2048 * o6 +
+ (-1024 * s7 + (v0 + -1024 * o7)))))))))) >= 1024.
+Proof.
+Timeout 1 romega. (* should take a few milliseconds, not seconds *)
+Timeout 1 Qed. (* ditto *)
diff --git a/test-suite/success/ROmega4.v b/test-suite/success/ROmega4.v
new file mode 100644
index 00000000..58ae5b8f
--- /dev/null
+++ b/test-suite/success/ROmega4.v
@@ -0,0 +1,26 @@
+(** ROmega is now aware of the bodies of context variables
+ (of type Z or nat).
+ See also #148 for the corresponding improvement in Omega.
+*)
+
+Require Import ZArith ROmega.
+Open Scope Z.
+
+Goal let x := 3 in x = 3.
+intros.
+romega.
+Qed.
+
+(** Example seen in #4132
+ (actually solvable even if b isn't known to be 5) *)
+
+Lemma foo
+ (x y x' zxy zxy' z : Z)
+ (b := 5)
+ (Ry : - b <= y < b)
+ (Bx : x' <= b)
+ (H : - zxy' <= zxy)
+ (H' : zxy' <= x') : - b <= zxy.
+Proof.
+romega.
+Qed.
diff --git a/test-suite/success/RecTutorial.v b/test-suite/success/RecTutorial.v
index d8f80424..84194049 100644
--- a/test-suite/success/RecTutorial.v
+++ b/test-suite/success/RecTutorial.v
@@ -147,6 +147,7 @@ Proof.
intros; absurd (p < p); eauto with arith.
Qed.
+Require Coq.extraction.Extraction.
Extraction max.
diff --git a/test-suite/success/Record.v b/test-suite/success/Record.v
index 8334322c..6f27c1d3 100644
--- a/test-suite/success/Record.v
+++ b/test-suite/success/Record.v
@@ -87,3 +87,8 @@ Record R : Type := {
P (A : Type) : Prop := exists x : A -> A, x = x;
Q A : P A -> P A
}.
+
+(* We allow reusing an implicit parameter named in non-recursive types *)
+(* This is used in a couple of development such as UniMatch *)
+
+Record S {A:Type} := { a : A; b : forall A:Type, A }.
diff --git a/test-suite/success/Rename.v b/test-suite/success/Rename.v
index 0576f3c6..2789c6c9 100644
--- a/test-suite/success/Rename.v
+++ b/test-suite/success/Rename.v
@@ -4,7 +4,7 @@ rename n into p.
induction p; auto.
Qed.
-(* Submitted by Iris Loeb (#842) *)
+(* Submitted by Iris Loeb (BZ#842) *)
Section rename.
diff --git a/test-suite/success/Scheme.v b/test-suite/success/Scheme.v
index dd5aa81d..855f2669 100644
--- a/test-suite/success/Scheme.v
+++ b/test-suite/success/Scheme.v
@@ -2,3 +2,26 @@
Scheme Induction for eq Sort Prop.
Check eq_ind_dep.
+
+(* This was broken in v8.5 *)
+
+Set Rewriting Schemes.
+Inductive myeq A (a:A) : A -> Prop := myrefl : myeq A a a.
+Unset Rewriting Schemes.
+
+Check myeq_rect.
+Check myeq_ind.
+Check myeq_rec.
+Check myeq_congr.
+Check myeq_sym_internal.
+Check myeq_rew.
+Check myeq_rew_dep.
+Check myeq_rew_fwd_dep.
+Check myeq_rew_r.
+Check internal_myeq_sym_involutive.
+Check myeq_rew_r_dep.
+Check myeq_rew_fwd_r_dep.
+
+Set Rewriting Schemes.
+Inductive myeq_true : bool -> Prop := myrefl_true : myeq_true true.
+Unset Rewriting Schemes.
diff --git a/test-suite/success/Scopes.v b/test-suite/success/Scopes.v
index 43e3493c..ca374671 100644
--- a/test-suite/success/Scopes.v
+++ b/test-suite/success/Scopes.v
@@ -20,3 +20,9 @@ Inductive U := A.
Bind Scope u with U.
Notation "'ε'" := A : u.
Definition c := ε : U.
+
+(* Check activation of type scope for tactics such as assert *)
+
+Goal True.
+assert (nat * nat).
+
diff --git a/test-suite/success/ShowExtraction.v b/test-suite/success/ShowExtraction.v
new file mode 100644
index 00000000..a4a35003
--- /dev/null
+++ b/test-suite/success/ShowExtraction.v
@@ -0,0 +1,31 @@
+
+Require Extraction.
+Require Import List.
+
+Section Test.
+Variable A : Type.
+Variable decA : forall (x y:A), {x=y}+{x<>y}.
+
+(** Should fail when no proofs are started *)
+Fail Show Extraction.
+
+Lemma decListA : forall (xs ys : list A), {xs=ys}+{xs<>ys}.
+Proof.
+Show Extraction.
+fix decListA 1.
+destruct xs as [|x xs], ys as [|y ys].
+Show Extraction.
+- now left.
+- now right.
+- now right.
+- Show Extraction.
+ destruct (decA x y).
+ + destruct (decListA xs ys).
+ * left; now f_equal.
+ * Show Extraction.
+ right. congruence.
+ + right. congruence.
+Show Extraction.
+Defined.
+
+End Test.
diff --git a/test-suite/success/Tauto.v b/test-suite/success/Tauto.v
index 767f15be..7d01d3b0 100644
--- a/test-suite/success/Tauto.v
+++ b/test-suite/success/Tauto.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(**** Tactics Tauto and Intuition ****)
diff --git a/test-suite/success/TestRefine.v b/test-suite/success/TestRefine.v
index 023cb5f5..f1683078 100644
--- a/test-suite/success/TestRefine.v
+++ b/test-suite/success/TestRefine.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(************************************************************************)
diff --git a/test-suite/success/Try.v b/test-suite/success/Try.v
index 361c787e..76aac39a 100644
--- a/test-suite/success/Try.v
+++ b/test-suite/success/Try.v
@@ -1,5 +1,5 @@
(* To shorten interactive scripts, it is better that Try catches
- non-existent names in Unfold [cf bug #263] *)
+ non-existent names in Unfold [cf BZ#263] *)
Lemma lem1 : True.
try unfold i_dont_exist.
diff --git a/test-suite/success/Typeclasses.v b/test-suite/success/Typeclasses.v
index 6b1f0315..cd6eac35 100644
--- a/test-suite/success/Typeclasses.v
+++ b/test-suite/success/Typeclasses.v
@@ -240,3 +240,20 @@ Module IterativeDeepening.
Qed.
End IterativeDeepening.
+
+Module AxiomsAreInstances.
+ Set Typeclasses Axioms Are Instances.
+ Class TestClass1 := {}.
+ Axiom testax1 : TestClass1.
+ Definition testdef1 : TestClass1 := _.
+
+ Unset Typeclasses Axioms Are Instances.
+ Class TestClass2 := {}.
+ Axiom testax2 : TestClass2.
+ Fail Definition testdef2 : TestClass2 := _.
+
+ (* we didn't break typeclasses *)
+ Existing Instance testax2.
+ Definition testdef2 : TestClass2 := _.
+
+End AxiomsAreInstances.
diff --git a/test-suite/success/abstract_chain.v b/test-suite/success/abstract_chain.v
new file mode 100644
index 00000000..0ff61e87
--- /dev/null
+++ b/test-suite/success/abstract_chain.v
@@ -0,0 +1,43 @@
+Lemma foo1 : nat -> True.
+Proof.
+intros _.
+assert (H : True -> True).
+{ abstract (exact (fun x => x)) using bar. }
+assert (H' : True).
+{ abstract (exact (bar I)) using qux. }
+exact H'.
+Qed.
+
+Lemma foo2 : True.
+Proof.
+assert (H : True -> True).
+{ abstract (exact (fun x => x)) using bar. }
+assert (H' : True).
+{ abstract (exact (bar I)) using qux. }
+assert (H'' : True).
+{ abstract (exact (bar qux)) using quz. }
+exact H''.
+Qed.
+
+Set Universe Polymorphism.
+
+Lemma foo3 : nat -> True.
+Proof.
+intros _.
+assert (H : True -> True).
+{ abstract (exact (fun x => x)) using bar. }
+assert (H' : True).
+{ abstract (exact (bar I)) using qux. }
+exact H'.
+Qed.
+
+Lemma foo4 : True.
+Proof.
+assert (H : True -> True).
+{ abstract (exact (fun x => x)) using bar. }
+assert (H' : True).
+{ abstract (exact (bar I)) using qux. }
+assert (H'' : True).
+{ abstract (exact (bar qux)) using quz. }
+exact H''.
+Qed.
diff --git a/test-suite/success/abstract_poly.v b/test-suite/success/abstract_poly.v
new file mode 100644
index 00000000..aa8da533
--- /dev/null
+++ b/test-suite/success/abstract_poly.v
@@ -0,0 +1,20 @@
+Set Universe Polymorphism.
+
+Inductive path@{i} {A : Type@{i}} (x : A) : A -> Type@{i} := refl : path x x.
+Inductive unit@{i} : Type@{i} := tt.
+
+Lemma foo@{i j} : forall (m n : unit@{i}) (P : unit -> Type@{j}), path m n -> P m -> P n.
+Proof.
+intros m n P e p.
+abstract (rewrite e in p; exact p).
+Defined.
+
+Check foo_subproof@{Set Set}.
+
+Lemma bar : forall (m n : unit) (P : unit -> Type), path m n -> P m -> P n.
+Proof.
+intros m n P e p.
+abstract (rewrite e in p; exact p).
+Defined.
+
+Check bar_subproof@{Set Set}.
diff --git a/test-suite/success/all-check.v b/test-suite/success/all-check.v
new file mode 100644
index 00000000..391bc540
--- /dev/null
+++ b/test-suite/success/all-check.v
@@ -0,0 +1,3 @@
+Goal True.
+Fail all:Check _.
+Abort.
diff --git a/test-suite/success/bigQ.v b/test-suite/success/bigQ.v
deleted file mode 100644
index 7fd0cf66..00000000
--- a/test-suite/success/bigQ.v
+++ /dev/null
@@ -1,66 +0,0 @@
-Require Import BigQ.
-Import List.
-
-Definition pi_4_approx_low' :=
-(5066193963420194617885108698600649932059391557720145469382602092416947640628637390992675949693715109726079394291478795603894419483819297806310615866892414925850691415582239745615128821983865262221858109336884967754871321668348027076234335167119885298878199925731495390387858629042311908406056230882123787019283378509712244687397013657159455607193734144010901984756727174636853404278421831024545476850410085042498464474261035780891759930905778986584183710930670670301831474144997069400304290351567959717683444430666444319233768399342338059169002790777424962570605618705584660815518973602995097110557181643034682308210782171804373210646804613922337450953858508244032293753591878060539465788294318856859293281629951093130167801471787011911886414492513677892193100809508943832528344473873460853362957387889412799458784754514139679847887887544849825173792522272708046699681079289358082661375778523609867456540595586031625044964543428047238934233579184772793670436643502740076366994465457847106782560289782615794595755672643440040123002018908935362541166831619056664637901929131328502017686713274283777724453661234225382109584471950444925886358166551424008707439387934109226545596919797083495958300914344992836193126080289565652575543234385558967555959267746932292860747199382633363026440008828134867747920263181610216905129926037611247017868033961426567047355301676870662406173724238530061264149506666345040372864118731705584795947926329181826992456072045382170981478151356381437136818835196834068650217794381425547036331194595892801393225038235274901050364737353586927051766717037643833477566087835266968086513005761986678747515870298138062157791066648217784877968385924845017637219384732843791052551854695220023477365706464590594542001161575677402761543188277502092362285265847964496740584911576627239093631932307473445797386335961743298553548881544486940399236133577915988716682746485564575640818803540680574730591500432326858763829791848612343662539095316357052823005419355719381626599487868023399182174939253393897549026675976384326749445831606130546375395770778462506203752920470130305293966478109733954117063941901686840180727195741528561335809865193566993349413786715403053579411364371500063193205131503024022217701373077790337150298315820556080596579100618643147698304927957576213733526923182742441048553793831725592624850721293495085399785588171300815789795594858916409701139277050529011775828846362873246196866089783324522718656445008090114701320562608474099248873638488023114015981013142490827777895317580810590743940417298263300561876701828404744082864248409230009391001735746615476377303707782123483770118391136826609366946585715225248587168403619476143657107412319421501162805102723455593551478028055839072686207007765300258935153546418515706362733656094770289090398825190320430416955807878686642673124733998295439657633866090085982598765253268688814792672416195730086607425842181518560588819896560847103627615434844684536463752986969865794019299978956052589825441828842338163389851892617560591840546654410705167593310272272965900821031821380595084783691324416454359888103920904935692840264474003367023256964191100139001239923263691779167792867186165635514824889759796850863175082506408142175595463676408992027105356481220754473245821534527625758942093801142305560662681150069082553674495761075895588095760081401141419460482860852822686860785424514171214889677926763812031823537071721974799922995763666175738785000806081164280471363125324839717808977470218218571800106898347366938927189989988149888641129263448064762730769285877330997355234347773807099829665997515649429224335217107760728789764718885665291038706425454675746218345291274054088843647602239258308472486102933167465443294268551209015027897159307743987020521392788721231001835675584104894174434637260464035122611721657641428625505184886116917149318963070896162119215386541876236027342810162765609201440423207771441367926085768438143507025739041041240810056881304230519058117534418374553879198061289605354335880794397478047346975609179199801003098836622253165101961484972165230151495472006888128587168049198312469715081555662345452800468933420359802645393289853553618279788400476187713990872203669487294118461245455333004125835663010526985716431187034663870796866708678078952110615910196519835267441831874676895301527286826106517027821074816850326548617513767142627360001181210946100011774672126943957522004190414960909074050454565964857276407084991922274068961845339154089866785707764290964299529444616711194034827611771558783466230353209661849406004241580029437779784290315347968833708422223285859451369907260780956405036020581705441364379616715041818815829810906212826084485200785283123265202151252852134381195424724503189247411069117189489985791487434549080447866370484866697404176437230771558469231403088139693477706784802801265075586678597768511791952562627345622499328
- # 100788726492580594349650258277496659410917619472657560321971265983799894639441017438166498752997098978003489632843381325240982516059309714013145358125224597827602157516585886911710102182473475545864474089191789296685473601331678556438310133356793199956062857423397512495293688453655805536015029176541424005214818033707522950635262669828538132795615008381824067071229426026518897202246241637377064076189277685257166926338187911595052586669184297526234794666364657344206795357967279911782849686515024121916258300642000317525374433525235296287037535618423661645124459323811792936193272341688261801253469089129439519903538495370298752436267926761998785090092411372633429302950606054074205533246665546979112178855223925266166034953000200646676762301817000435641690517142795144469005596172113586738287118865058604922865654348297975054956781513943444060257230946224520058527667925776273088622386666860662470481606622952298649177217986593047495967209669116410592230626047083795555559776477430548946990993890380787911273437967786556742804566652408275798339221179283430482118140020742719695900657696142739101628984271513292954605191778803974738871043737934546460016184719168074062912083778327025499841998124431899131874519812228674255796948879306477894924710085384116453080236862135706628989104070747737689294987000148388110561753028594988959655591699155508380909698460304884908709246116411180876105681720036833487450945730831039969246996849503525429840196651386469599438064049723005123629385485140945945416764414133189625489032807860400751723995946290581976152580477047961138617997133510128194027510895265424780627975864980749945631413855375897945293107842908479797077570371447220506451229526132919408351287454305932886749170523056147842439813407002950370505941417426433452282518739345666494683448699945734453214481915512562995906034771246088038719298959180199052759295868161570318718927430655393250250811804905393113074074574608255523847592006804881016594060188745212933427473833239777228852952217878690668413947367586040297784502192683200664398064682201012931468052982448022330449955215606614483165425935154496289535573901139223034819824408001205784146243892228030383941863746839845526558421740316887532141893650230936137269356278754487130882868595412163277284772124736531380334814212708066069618080153747333573454834500999083737284449542481264971030785043701582134343596645346132964567391370300568578875509971483039720438955919863275044932311289587494336123538202079503922025306586828117649623642521324286648529829664567232756108169459356549144779085080036654897525078792273443307070502103724611233768453196294899770515940520895908289018412144327894912660060761908970811602375085884115384049610753387776858733798341463052471017393165656926510611173543365663267563198760597092606598728110197523695339144204179424646442294307593146446562536865057987897899655645968129515654148044008249646703504419478535298270862753806142083172190778193001810574370442181909146645889199829207284871551220439225371051511970054965951914399901815408791418836185742573331879114400013259342896515702942707292473805188905427717363630137869116872433627556880809120353079342030725196065815470427569172350436988386579444534375353968759750750178342190349607711313840613843718547859929387259163285524671855725511880656411741012446023392964655239624520090988149679656514996202498334816938716757663800773997302639681907686195671083505910700098597156238624351157219093280177066146218516478636356056420098245995113668018177690728654922707281126889313941750547830163078886329630807850633273613622550216189245162735650139455042125252043274668279981753287687674520319519360593091620297805736177366738063651905396783336064579717230286821545930579779462534206093794040878198825916141099864730374109311705285661056855668930671948265232862757146615431791375559792290479316263924560826544387396762768331402198937951439504767950821089741987629257538953417586416459087855138539304027013800937360598578194413362672871055543854633921502486683911956250444582746421552178164852341035733290405311280719066037175324627429434912416361334254696649419037348733709488576582107382055914938194078813926926742828297826939120316120573453588052056773875836843924877773978390546387248009519202370375478981843515393806263037580338009594022254079586380520797699651840576286033587273591899639699077044271208886940540056794360292760863657703246410020854088849880453524038877935317875884698324859548991680533307680053872403383516589028793015681082435908524045497475001609824047204954932626536311826911363867426654549346914317405110707189532251727848751560224936842128628673253616256326013555922159336370177663785738170802777550686079119049748734352584409583136667752555307842739679930698964098088960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)%bigQ
-.
-
-Definition pi_4_approx_high' :=
-(5066193963420194617885108698600649932059391557720145469382602092416947640628637390992675949693715109726079394291478795603894419483819297806310615866892414925850691415582239745615128821983865262221858109336884967754871321668348027076234335167119885298878199925731495390387858629042311908406056230882123787019283378509712244687397013657159455607193734144010901984756727174636853404278421831024545476850410085042498464474261035780891759930905778986584183710930670670301831474144997069400304290351567959717683444430666444319233768399342338059169002790777424962570605618705584660815518973602995097110557181643034682308210788409308322071457087096445676662503017187903223859814905546579050729173916234740628466315449085686468204847296426235788544874405450791749423436215032927889914519102361378633666267941326393265376660400091389373564825046526561381561278586121772300141564909333667988204680492088607706214346458601842899721615765319505314310192693665547163360402786722105590252780194994950097926184146718893770363322073641336811404180286358079915338791029818581497746089864894356686643882883410392601500048021013346713450539807687779704798018559373507951388092945938366448668853081682176581336156031434604604833692503597621519809826880683536141897075567053733515342478008373282599947520770191238802249392773327261328133194484586433840861730959791563023761306622956165536481335792721379318928171897265310054788931201902441066997927781894934061720760080768154565282051604447333036111267534150649674590201404453202347064545359869105856798745664471694795576801148562495225166002814304124970965817043547048503388910163287916513427409193998045119986267987892522931703487420953769290650229176116308194977201080691718825944370436642709192983358059711255925052564016519597530235976618244111239816418652282585432539731271068892992142956810775762851238126881225206289553948196520384709574383566733478326330112084307565420647201107231840508040019131253750047046446929758911912155202166566751947087545292626353331520202690130850009389387290465497377022080531269511355734944672010542204118978272180881335465227900174033380001851066811103401787656367819132934758616060307366679580043123632565656840669377840733018248707250548277181001911990237151790533341326223932843775840498222236867608395855700891719880219904948672458645420169533565809609056209006342663841718949396996175294237942265325043426430990062217643279654512512640557763489491751115437780462208361129433667449740743123546232162409802316714286708788831227582498585478334315076725145986771341647015244092760289407649044493584479944044779273447198382196766547779885914425854375158084417582279211000449529495605127376707776277159376010648950025135061284601443461110447113346277147728593420397807946636800365109579479211273476195727270004743568492888900356505584731622538401071221591141889158461271000051210318027818802379539544396973228585821742794928813630781709195703717312953337431290682263448669168179857644544116657440168099166467471736180072984407514757289757495435699300593165669101965987430482600019222913485092771346963058673132443387835726110205958057187517487684058179749952286341120230051432903482992282688283815697442898155194928723360957436110770317998431272108100149791425689283090777721270428030993332057319821685391144252815655146410678839177846108260765981523812232294638190350688210999605869296307711846463311346627138400477211801219366400312514793356564308532012682051019030257269068628100171220662165246389309014292764479226570049772046255291379151017129899157296574099437276707879597755725339406865738613810979022640265737120949077721294633786520294559343155148383011293584240192753971366644780434237846862975993387453786681995831719537733846579480995517357440575781962659282856696638992709756358478461648462532279323701121386551383509193782388241965285971965887701816406255233933761008649762854363984142178331798953040874526844255758512982810004271235810681505829473926495256537353108899526434200682024946218302499640511518360332022463196599199779172637638655415918976955930735312156870786600023896830267884391447789311101069654521354446521135407720085038662159974712373018912537116964809382149581004863115431780452188813210275393919111435118030412595133958954313836191108258769640843644195537185904547405641078708492098917460393911427237155683288565433183738513871595286090814836422982384810033331519971102974091067660369548406192526284519976668985518575216481570167748402860759832933071281814538397923687510782620605409323050353840034866296214149657376249634795555007199540807313397329050410326609108411299737760271566308288500400587417017113933243099961248847368789383209110747378488312550109911605079801570534271874115018095746872468910162721975463388518648962869080447866370484866697404176437230771558469231403088139693477706784802801265075586678597768511791952562627345622499328
- # 100788726492580594349650258277496659410917619472657560321971265983799894639441017438166498752997098978003489632843381325240982516059309714013145358125224597827602157516585886911710102182473475545864474089191789296685473601331678556438310133356793199956062857423397512495293688453655805536015029176541424005214818033707522950635262669828538132795615008381824067071229426026518897202246241637377064076189277685257166926338187911595052586669184297526234794666364657344206795357967279911782849686515024121916258300642000317525374433525235296287037535618423661645124459323811792936193272341688261801253469089129439519903538495370298752436267926761998785090092411372633429302950606054074205533246665546979112178855223925266166034953000200646676762301817000435641690517142795144469005596172113586738287118865058604922865654348297975054956781513943444060257230946224520058527667925776273088622386666860662470481606622952298649177217986593047495967209669116410592230626047083795555559776477430548946990993890380787911273437967786556742804566652408275798339221179283430482118140020742719695900657696142739101628984271513292954605191778803974738871043737934546460016184719168074062912083778327025499841998124431899131874519812228674255796948879306477894924710085384116453080236862135706628989104070747737689294987000148388110561753028594988959655591699155508380909698460304884908709246116411180876105681720036833487450945730831039969246996849503525429840196651386469599438064049723005123629385485140945945416764414133189625489032807860400751723995946290581976152580477047961138617997133510128194027510895265424780627975864980749945631413855375897945293107842908479797077570371447220506451229526132919408351287454305932886749170523056147842439813407002950370505941417426433452282518739345666494683448699945734453214481915512562995906034771246088038719298959180199052759295868161570318718927430655393250250811804905393113074074574608255523847592006804881016594060188745212933427473833239777228852952217878690668413947367586040297784502192683200664398064682201012931468052982448022330449955215606614483165425935154496289535573901139223034819824408001205784146243892228030383941863746839845526558421740316887532141893650230936137269356278754487130882868595412163277284772124736531380334814212708066069618080153747333573454834500999083737284449542481264971030785043701582134343596645346132964567391370300568578875509971483039720438955919863275044932311289587494336123538202079503922025306586828117649623642521324286648529829664567232756108169459356549144779085080036654897525078792273443307070502103724611233768453196294899770515940520895908289018412144327894912660060761908970811602375085884115384049610753387776858733798341463052471017393165656926510611173543365663267563198760597092606598728110197523695339144204179424646442294307593146446562536865057987897899655645968129515654148044008249646703504419478535298270862753806142083172190778193001810574370442181909146645889199829207284871551220439225371051511970054965951914399901815408791418836185742573331879114400013259342896515702942707292473805188905427717363630137869116872433627556880809120353079342030725196065815470427569172350436988386579444534375353968759750750178342190349607711313840613843718547859929387259163285524671855725511880656411741012446023392964655239624520090988149679656514996202498334816938716757663800773997302639681907686195671083505910700098597156238624351157219093280177066146218516478636356056420098245995113668018177690728654922707281126889313941750547830163078886329630807850633273613622550216189245162735650139455042125252043274668279981753287687674520319519360593091620297805736177366738063651905396783336064579717230286821545930579779462534206093794040878198825916141099864730374109311705285661056855668930671948265232862757146615431791375559792290479316263924560826544387396762768331402198937951439504767950821089741987629257538953417586416459087855138539304027013800937360598578194413362672871055543854633921502486683911956250444582746421552178164852341035733290405311280719066037175324627429434912416361334254696649419037348733709488576582107382055914938194078813926926742828297826939120316120573453588052056773875836843924877773978390546387248009519202370375478981843515393806263037580338009594022254079586380520797699651840576286033587273591899639699077044271208886940540056794360292760863657703246410020854088849880453524038877935317875884698324859548991680533307680053872403383516589028793015681082435908524045497475001609824047204954932626536311826911363867426654549346914317405110707189532251727848751560224936842128628673253616256326013555922159336370177663785738170802777550686079119049748734352584409583136667752555307842739679930698964098088960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)%bigQ
-.
-
-Fixpoint numden_Rcontfrac_tailrecB (accu: list bigZ) (n1 d1: bigZ) (n2 d2: bigZ) (fuel: nat) {struct fuel}:
- (list bigZ * bigQ * bigQ) :=
- let default := (rev_append accu nil, BigQ.div (BigQ.Qz n1) (BigQ.Qz d1), BigQ.div (BigQ.Qz n2) (BigQ.Qz d2)) in
- match fuel with
- | O => default
- | S fuel' =>
- let '(q1, r1) := BigZ.div_eucl n1 d1 in
- let '(q2, r2) := BigZ.div_eucl n2 d2 in
- match BigZ.eqb q1 q2 with
- | false => default
- | true =>
- let r1_is_zero := BigZ.eqb r1 0 in
- let r2_is_zero := BigZ.eqb r2 0 in
- match Bool.eqb r1_is_zero r2_is_zero with
- | false => default
- | true =>
- match r1_is_zero with
- | true =>
- match BigZ.eqb q1 1 with
- | true => (rev_append accu nil, 1%bigQ, 1%bigQ)
- | false => (rev_append ((q1 - 1)%bigZ :: accu) nil, 1%bigQ, 1%bigQ)
- end
- | false => numden_Rcontfrac_tailrecB (q1 :: accu) d1 r1 d2 r2 fuel'
- end
- end
- end
- end.
-
-Definition Bnum b :=
- match b with
- | BigQ.Qz t => t
- | BigQ.Qq n d =>
- if (d =? BigN.zero)%bigN then 0%bigZ else n
- end.
-
-Definition Bden b :=
- match b with
- | BigQ.Qz _ => 1%bigN
- | BigQ.Qq _ d => if (d =? BigN.zero)%bigN then 1%bigN else d
- end.
-
-Definition rat_Rcontfrac_tailrecB q1 q2 :=
- numden_Rcontfrac_tailrecB nil (Bnum q1) (BigZ.Pos (Bden q1)) (Bnum q2) (BigZ.Pos (Bden q2)).
-
-Definition pi_4_contfrac :=
- rat_Rcontfrac_tailrecB pi_4_approx_low' pi_4_approx_high' 3000.
-
-(* The following used to fail because of a non canonical representation of 0 in
-the bytecode interpreter. Bug reported privately by Tahina Ramananandro. *)
-Goal pi_4_contfrac = pi_4_contfrac.
-vm_compute.
-reflexivity.
-Qed.
diff --git a/test-suite/success/boundvars.v b/test-suite/success/boundvars.v
new file mode 100644
index 00000000..fafe2729
--- /dev/null
+++ b/test-suite/success/boundvars.v
@@ -0,0 +1,14 @@
+(* An example showing a bug in the detection of free variables *)
+(* "x" is not free in the common type of "x" and "y" *)
+
+Check forall (x z:unit) (x y : match z as x return x=x with tt => eq_refl end = eq_refl), x=x.
+
+(* An example showing a bug in the detection of bound variables *)
+
+Goal forall x, match x return x = x with 0 => eq_refl | _ => eq_refl end = eq_refl.
+intro.
+match goal with
+|- (match x as y in nat return y = y with O => _ | S n => _ end) = _ => assert (forall y, y = 0) end.
+intro.
+Check x0. (* Check that "y" has been bound to "x0" while matching "match x as x0 return x0=x0 with ... end" *)
+Abort.
diff --git a/test-suite/success/bteauto.v b/test-suite/success/bteauto.v
index 3178c6fc..730b367d 100644
--- a/test-suite/success/bteauto.v
+++ b/test-suite/success/bteauto.v
@@ -55,6 +55,7 @@ Module Backtracking.
Axiom A : Type.
Existing Class A.
Axioms a b c d e: A.
+ Existing Instances a b c d e.
Ltac get_value H := eval cbv delta [H] in H.
diff --git a/test-suite/success/cbn.v b/test-suite/success/cbn.v
new file mode 100644
index 00000000..c98689c2
--- /dev/null
+++ b/test-suite/success/cbn.v
@@ -0,0 +1,18 @@
+(* cbn is able to refold mutual recursive calls *)
+
+Fixpoint foo (n : nat) :=
+ match n with
+ | 0 => true
+ | S n => g n
+ end
+with g (n : nat) : bool :=
+ match n with
+ | 0 => true
+ | S n => foo n
+ end.
+Goal forall n, foo (S n) = g n.
+ intros. cbn.
+ match goal with
+ |- g _ = g _ => reflexivity
+ end.
+Qed.
diff --git a/test-suite/success/cc.v b/test-suite/success/cc.v
index bbfe5ec4..49a8b9cf 100644
--- a/test-suite/success/cc.v
+++ b/test-suite/success/cc.v
@@ -151,3 +151,17 @@ Section JLeivant.
congruence.
Qed.
End JLeivant.
+
+(* An example with primitive projections *)
+
+Module PrimitiveProjections.
+Set Primitive Projections.
+Record t (A:Type) := { f : A }.
+Goal forall g (a:t nat), @f nat = g -> f a = 0 -> g a = 0.
+congruence.
+Undo.
+intros.
+unfold f in H0. (* internally turn the projection to unfolded form *)
+congruence.
+Qed.
+End PrimitiveProjections.
diff --git a/test-suite/success/change.v b/test-suite/success/change.v
index 1f0b7d38..a9821b02 100644
--- a/test-suite/success/change.v
+++ b/test-suite/success/change.v
@@ -59,3 +59,12 @@ unfold x.
(* check that n in 0+n is not interpreted as the n from "fun n" *)
change n with (0+n).
Abort.
+
+(* Check non-collision of non-normalized defined evars with pattern variables *)
+
+Goal exists x, 1=1 -> x=1/\x=1.
+eexists ?[n]; intros; split.
+eassumption.
+match goal with |- ?x=1 => change (x=1) with (0+x=1) end.
+match goal with |- 0+1=1 => trivial end.
+Qed.
diff --git a/test-suite/success/change_pattern.v b/test-suite/success/change_pattern.v
new file mode 100644
index 00000000..874abf49
--- /dev/null
+++ b/test-suite/success/change_pattern.v
@@ -0,0 +1,34 @@
+Set Implicit Arguments.
+Unset Strict Implicit.
+
+Axiom vector : Type -> nat -> Type.
+
+Record KleeneStore i j a := kleeneStore
+ { dim : nat
+ ; peek : vector j dim -> a
+ ; pos : vector i dim
+ }.
+
+Definition KSmap i j a b (f : a -> b) (s : KleeneStore i j a) : KleeneStore i j b :=
+ kleeneStore (fun v => f (peek v)) (pos s).
+
+Record KleeneCoalg (i o : Type -> Type) := kleeneCoalg
+ { coalg :> forall a b, (o a) -> KleeneStore (i a) (i b) (o b) }.
+
+Axiom free_b_dim : forall i o (k : KleeneCoalg i o) a b b' (x : o a), dim (coalg k b x) = dim (coalg k b' x).
+Axiom t : Type -> Type.
+Axiom traverse : KleeneCoalg (fun x => x) t.
+
+Definition size a (x:t a) : nat := dim (traverse a a x).
+
+Lemma iso1_iso2_2 a (y : {x : t unit & vector a (size x)}) : False.
+Proof.
+destruct y.
+pose (X := KSmap (traverse a unit) (traverse unit a x)).
+set (e :=(eq_sym (free_b_dim traverse (a:=unit) a unit x))).
+clearbody e.
+(** The pattern generated by change must have holes where there were implicit
+ arguments in the original user-provided term. This particular example fails
+ if this is not the case because the inferred argument does not coincide with
+ the one in the considered term. *)
+progress (change (dim (traverse unit a x)) with (dim X) in e).
diff --git a/test-suite/success/clear.v b/test-suite/success/clear.v
index e25510cf..03034cf1 100644
--- a/test-suite/success/clear.v
+++ b/test-suite/success/clear.v
@@ -30,4 +30,4 @@ Section Foo.
assert(b:=Build_A).
solve [ typeclasses eauto ].
Qed.
-End Foo. \ No newline at end of file
+End Foo.
diff --git a/test-suite/success/coercions.v b/test-suite/success/coercions.v
index b538d2ed..9389c9d3 100644
--- a/test-suite/success/coercions.v
+++ b/test-suite/success/coercions.v
@@ -130,4 +130,59 @@ Local Coercion l2v2 : list >-> vect.
of coercions *)
Fail Check (fun l : list (T1 * T1) => (l : vect _ _)).
Check (fun l : list (T1 * T1) => (l2v2 l : vect _ _)).
-Section what_we_could_do. \ No newline at end of file
+End what_we_could_do.
+
+
+(** Unit test for Prop as source class *)
+
+Module TestPropAsSourceCoercion.
+
+ Parameter heap : Prop.
+
+ Parameter heap_empty : heap.
+
+ Definition hprop := heap -> Prop.
+
+ Coercion hpure (P:Prop) : hprop := fun h => h = heap_empty /\ P.
+
+ Parameter heap_single : nat -> nat -> hprop.
+
+ Parameter hstar : hprop -> hprop -> hprop.
+
+ Notation "H1 \* H2" := (hstar H1 H2) (at level 69).
+
+ Definition test := heap_single 4 5 \* (5 <> 4) \* heap_single 2 4 \* (True).
+
+ (* Print test. -- reveals [hpure] coercions *)
+
+End TestPropAsSourceCoercion.
+
+
+(** Unit test for Type as source class *)
+
+Module TestTypeAsSourceCoercion.
+
+ Require Import Coq.Setoids.Setoid.
+
+ Record setoid := { A : Type ; R : relation A ; eqv : Equivalence R }.
+
+ Definition default_setoid (T : Type) : setoid
+ := {| A := T ; R := eq ; eqv := _ |}.
+
+ Coercion default_setoid : Sortclass >-> setoid.
+
+ Definition foo := Type : setoid.
+
+ Inductive type := U | Nat.
+ Inductive term : type -> Type :=
+ | ty (_ : Type) : term U
+ | nv (_ : nat) : term Nat.
+
+ Coercion ty : Sortclass >-> term.
+
+ Definition ty1 := Type : term _.
+ Definition ty2 := Prop : term _.
+ Definition ty3 := Set : term _.
+ Definition ty4 := (Type : Type) : term _.
+
+End TestTypeAsSourceCoercion.
diff --git a/test-suite/success/coindprim.v b/test-suite/success/coindprim.v
index 5b9265b6..05ab9139 100644
--- a/test-suite/success/coindprim.v
+++ b/test-suite/success/coindprim.v
@@ -13,9 +13,10 @@ Definition eta {A} (s : Stream A) := {| hd := s.(hd); tl := s.(tl) |}.
CoFixpoint ones := {| hd := 1; tl := ones |}.
CoFixpoint ticks := {| hd := tt; tl := ticks |}.
-CoInductive stream_equiv {A} {s : Stream A} {s' : Stream A} : Prop :=
- mkStreamEq { hdeq : s.(hd) = s'.(hd); tleq : stream_equiv _ s.(tl) s'.(tl) }.
-Arguments stream_equiv {A} s s'.
+CoInductive stream_equiv {A} (s : Stream A) (s' : Stream A) : Prop :=
+ mkStreamEq { hdeq : s.(hd) = s'.(hd); tleq : stream_equiv s.(tl) s'.(tl) }.
+Arguments hdeq {A} {s} {s'}.
+Arguments tleq {A} {s} {s'}.
Program CoFixpoint ones_eq : stream_equiv ones ones.(tl) :=
{| hdeq := eq_refl; tleq := ones_eq |}.
@@ -88,4 +89,4 @@ Lemma eq (x : U) : x = force x.
Proof.
Fail destruct x.
Abort.
- (* Impossible *) \ No newline at end of file
+ (* Impossible *)
diff --git a/test-suite/success/cumulativity.v b/test-suite/success/cumulativity.v
new file mode 100644
index 00000000..3d97f27b
--- /dev/null
+++ b/test-suite/success/cumulativity.v
@@ -0,0 +1,139 @@
+Polymorphic Cumulative Inductive T1 := t1 : T1.
+Fail Monomorphic Cumulative Inductive T2 := t2 : T2.
+
+Polymorphic Cumulative Record R1 := { r1 : T1 }.
+Fail Monomorphic Cumulative Inductive R2 := {r2 : T1}.
+
+Set Universe Polymorphism.
+Set Polymorphic Inductive Cumulativity.
+Set Printing Universes.
+
+Inductive List (A: Type) := nil | cons : A -> List A -> List A.
+
+Definition LiftL@{k i j|k <= i, k <= j} {A:Type@{k}} : List@{i} A -> List@{j} A := fun x => x.
+
+Lemma LiftL_Lem A (l : List A) : l = LiftL l.
+Proof. reflexivity. Qed.
+
+Inductive Tp := tp : Type -> Tp.
+
+Definition LiftTp@{i j|i <= j} : Tp@{i} -> Tp@{j} := fun x => x.
+
+Fail Definition LowerTp@{i j|j < i} : Tp@{i} -> Tp@{j} := fun x => x.
+
+Record Tp' := { tp' : Tp }.
+
+Definition CTp := Tp.
+(* here we have to reduce a constant to infer the correct subtyping. *)
+Record Tp'' := { tp'' : CTp }.
+
+Definition LiftTp'@{i j|i <= j} : Tp'@{i} -> Tp'@{j} := fun x => x.
+Definition LiftTp''@{i j|i <= j} : Tp''@{i} -> Tp''@{j} := fun x => x.
+
+Lemma LiftC_Lem (t : Tp) : LiftTp t = t.
+Proof. reflexivity. Qed.
+
+Section subtyping_test.
+ Universe i j.
+ Constraint i < j.
+
+ Inductive TP2 := tp2 : Type@{i} -> Type@{j} -> TP2.
+
+End subtyping_test.
+
+Record A : Type := { a :> Type; }.
+
+Record B (X : A) : Type := { b : X; }.
+
+NonCumulative Inductive NCList (A: Type)
+ := ncnil | nccons : A -> NCList A -> NCList A.
+
+Fail Definition LiftNCL@{k i j|k <= i, k <= j} {A:Type@{k}}
+ : NCList@{i} A -> NCList@{j} A := fun x => x.
+
+Inductive eq@{i} {A : Type@{i}} (x : A) : A -> Type@{i} := eq_refl : eq x x.
+
+Definition funext_type@{a b e} (A : Type@{a}) (B : A -> Type@{b})
+ := forall f g : (forall a, B a),
+ (forall x, eq@{e} (f x) (g x))
+ -> eq@{e} f g.
+
+Section down.
+ Universes a b e e'.
+ Constraint e' < e.
+ Lemma funext_down {A B}
+ : @funext_type@{a b e} A B -> @funext_type@{a b e'} A B.
+ Proof.
+ intros H f g Hfg. exact (H f g Hfg).
+ Defined.
+End down.
+
+Record Arrow@{i j} := { arrow : Type@{i} -> Type@{j} }.
+
+Fail Definition arrow_lift@{i i' j j' | i' < i, j < j'}
+ : Arrow@{i j} -> Arrow@{i' j'}
+ := fun x => x.
+
+Definition arrow_lift@{i i' j j' | i' = i, j <= j'}
+ : Arrow@{i j} -> Arrow@{i' j'}
+ := fun x => x.
+
+Inductive Mut1 A :=
+| Base1 : Type -> Mut1 A
+| Node1 : (A -> Mut2 A) -> Mut1 A
+with Mut2 A :=
+ | Base2 : Type -> Mut2 A
+ | Node2 : Mut1 A -> Mut2 A.
+
+(* If we don't reduce T while inferring cumulativity for the
+ constructor we will see a Rel and believe i is irrelevant. *)
+Inductive withparams@{i j} (T:=Type@{i}:Type@{j}) := mkwithparams : T -> withparams.
+
+Definition withparams_co@{i i' j|i < i', i' < j} : withparams@{i j} -> withparams@{i' j}
+ := fun x => x.
+
+Fail Definition withparams_not_irr@{i i' j|i' < i, i' < j} : withparams@{i j} -> withparams@{i' j}
+ := fun x => x.
+
+(** Cumulative constructors *)
+
+
+Record twotys@{u v w} : Type@{w} :=
+ twoconstr { fstty : Type@{u}; sndty : Type@{v} }.
+
+Monomorphic Universes i j k l.
+
+Monomorphic Constraint i < j.
+Monomorphic Constraint j < k.
+Monomorphic Constraint k < l.
+
+Parameter Tyi : Type@{i}.
+
+Definition checkcumul :=
+ eq_refl _ : @eq twotys@{k k l} (twoconstr@{i j k} Tyi Tyi) (twoconstr@{j i k} Tyi Tyi).
+
+(* They can only be compared at the highest type *)
+Fail Definition checkcumul' :=
+ eq_refl _ : @eq twotys@{i k l} (twoconstr@{i j k} Tyi Tyi) (twoconstr@{j i k} Tyi Tyi).
+
+(* An inductive type with an irrelevant universe *)
+Inductive foo@{i} : Type@{i} := mkfoo { }.
+
+Definition bar := foo.
+
+(* The universe on mkfoo is flexible and should be unified with i. *)
+Definition foo1@{i} : foo@{i} := let x := mkfoo in x. (* fast path for conversion *)
+Definition foo2@{i} : bar@{i} := let x := mkfoo in x. (* must reduce *)
+
+(* Rigid universes however should not be unified unnecessarily. *)
+Definition foo3@{i j|} : foo@{i} := let x := mkfoo@{j} in x.
+Definition foo4@{i j|} : bar@{i} := let x := mkfoo@{j} in x.
+
+(* Constructors for an inductive with indices *)
+Module WithIndex.
+ Inductive foo@{i} : (Prop -> Prop) -> Prop := mkfoo: foo (fun x => x).
+
+ Monomorphic Universes i j.
+ Monomorphic Constraint i < j.
+ Definition bar : eq mkfoo@{i} mkfoo@{j} := eq_refl _.
+End WithIndex.
diff --git a/test-suite/success/decl_mode.v b/test-suite/success/decl_mode.v
deleted file mode 100644
index 58f79d45..00000000
--- a/test-suite/success/decl_mode.v
+++ /dev/null
@@ -1,182 +0,0 @@
-(* \sqrt 2 is irrationnal, (c) 2006 Pierre Corbineau *)
-
-Set Firstorder Depth 1.
-Require Import ArithRing Wf_nat Peano_dec Div2 Even Lt.
-
-Lemma double_div2: forall n, div2 (double n) = n.
-proof.
- assume n:nat.
- per induction on n.
- suppose it is 0.
- suffices (0=0) to show thesis.
- thus thesis.
- suppose it is (S m) and Hrec:thesis for m.
- have (div2 (double (S m))= div2 (S (S (double m)))).
- ~= (S (div2 (double m))).
- thus ~= (S m) by Hrec.
- end induction.
-end proof.
-Show Script.
-Qed.
-
-Lemma double_inv : forall n m, double n = double m -> n = m .
-proof.
- let n, m be such that H:(double n = double m).
-have (n = div2 (double n)) by double_div2,H.
- ~= (div2 (double m)) by H.
- thus ~= m by double_div2.
-end proof.
-Qed.
-
-Lemma double_mult_l : forall n m, (double (n * m)=n * double m).
-proof.
- assume n:nat and m:nat.
- have (double (n * m) = n*m + n * m).
- ~= (n * (m+m)) by * using ring.
- thus ~= (n * double m).
-end proof.
-Qed.
-
-Lemma double_mult_r : forall n m, (double (n * m)=double n * m).
-proof.
- assume n:nat and m:nat.
- have (double (n * m) = n*m + n * m).
- ~= ((n + n) * m) by * using ring.
- thus ~= (double n * m).
-end proof.
-Qed.
-
-Lemma even_is_even_times_even: forall n, even (n*n) -> even n.
-proof.
- let n be such that H:(even (n*n)).
- per cases of (even n \/ odd n) by even_or_odd.
- suppose (odd n).
- hence thesis by H,even_mult_inv_r.
- end cases.
-end proof.
-Qed.
-
-Lemma main_thm_aux: forall n,even n ->
-double (double (div2 n *div2 n))=n*n.
-proof.
- given n such that H:(even n).
- *** have (double (double (div2 n * div2 n))
- = double (div2 n) * double (div2 n))
- by double_mult_l,double_mult_r.
- thus ~= (n*n) by H,even_double.
-end proof.
-Qed.
-
-Require Import Omega.
-
-Lemma even_double_n: (forall m, even (double m)).
-proof.
- assume m:nat.
- per induction on m.
- suppose it is 0.
- thus thesis.
- suppose it is (S mm) and thesis for mm.
- then H:(even (S (S (mm+mm)))).
- have (S (S (mm + mm)) = S mm + S mm) using omega.
- hence (even (S mm +S mm)) by H.
- end induction.
-end proof.
-Qed.
-
-Theorem main_theorem: forall n p, n*n=double (p*p) -> p=0.
-proof.
- assume n0:nat.
- define P n as (forall p, n*n=double (p*p) -> p=0).
- claim rec_step: (forall n, (forall m,m<n-> P m) -> P n).
- let n be such that H:(forall m : nat, m < n -> P m) and p:nat .
- per cases of ({n=0}+{n<>0}) by eq_nat_dec.
- suppose H1:(n=0).
- per cases on p.
- suppose it is (S p').
- assume (n * n = double (S p' * S p')).
- =~ 0 by H1,mult_n_O.
- ~= (S ( p' + p' * S p' + S p'* S p'))
- by plus_n_Sm.
- hence thesis .
- suppose it is 0.
- thus thesis.
- end cases.
- suppose H1:(n<>0).
- assume H0:(n*n=double (p*p)).
- have (even (double (p*p))) by even_double_n .
- then (even (n*n)) by H0.
- then H2:(even n) by even_is_even_times_even.
- then (double (double (div2 n *div2 n))=n*n)
- by main_thm_aux.
- ~= (double (p*p)) by H0.
- then H':(double (div2 n *div2 n)= p*p) by double_inv.
- have (even (double (div2 n *div2 n))) by even_double_n.
- then (even (p*p)) by even_double_n,H'.
- then H3:(even p) by even_is_even_times_even.
- have (double(double (div2 n * div2 n)) = n*n)
- by H2,main_thm_aux.
- ~= (double (p*p)) by H0.
- ~= (double(double (double (div2 p * div2 p))))
- by H3,main_thm_aux.
- then H'':(div2 n * div2 n = double (div2 p * div2 p))
- by double_inv.
- then (div2 n < n) by lt_div2,neq_O_lt,H1.
- then H4:(div2 p=0) by (H (div2 n)),H''.
- then (double (div2 p) = double 0).
- =~ p by even_double,H3.
- thus ~= 0.
- end cases.
- end claim.
- hence thesis by (lt_wf_ind n0 P).
-end proof.
-Qed.
-
-Require Import Reals Field.
-(*Coercion INR: nat >->R.
-Coercion IZR: Z >->R.*)
-
-Open Scope R_scope.
-
-Lemma square_abs_square:
- forall p,(INR (Z.abs_nat p) * INR (Z.abs_nat p)) = (IZR p * IZR p).
-proof.
- assume p:Z.
- per cases on p.
- suppose it is (0%Z).
- thus thesis.
- suppose it is (Zpos z).
- thus thesis.
- suppose it is (Zneg z).
- have ((INR (Z.abs_nat (Zneg z)) * INR (Z.abs_nat (Zneg z))) =
- (IZR (Zpos z) * IZR (Zpos z))).
- ~= ((- IZR (Zpos z)) * (- IZR (Zpos z))).
- thus ~= (IZR (Zneg z) * IZR (Zneg z)).
- end cases.
-end proof.
-Qed.
-
-Definition irrational (x:R):Prop :=
- forall (p:Z) (q:nat),q<>0%nat -> x<> (IZR p/INR q).
-
-Theorem irrationnal_sqrt_2: irrational (sqrt (INR 2%nat)).
-proof.
- let p:Z,q:nat be such that H:(q<>0%nat)
- and H0:(sqrt (INR 2%nat)=(IZR p/INR q)).
- have H_in_R:(INR q<>0:>R) by H.
- have triv:((IZR p/INR q* INR q) =IZR p :>R) by * using field.
- have sqrt2:((sqrt (INR 2%nat) * sqrt (INR 2%nat))= INR 2%nat:>R) by sqrt_def.
- have (INR (Z.abs_nat p * Z.abs_nat p)
- = (INR (Z.abs_nat p) * INR (Z.abs_nat p)))
- by mult_INR.
- ~= (IZR p* IZR p) by square_abs_square.
- ~= ((IZR p/INR q*INR q)*(IZR p/INR q*INR q)) by triv. (* we have to factor because field is too weak *)
- ~= ((IZR p/INR q)*(IZR p/INR q)*(INR q*INR q)) using ring.
- ~= (sqrt (INR 2%nat) * sqrt (INR 2%nat)*(INR q*INR q)) by H0.
- ~= (INR (2%nat * (q*q))) by sqrt2,mult_INR.
- then (Z.abs_nat p * Z.abs_nat p = 2* (q * q))%nat.
- ~= ((q*q)+(q*q))%nat.
- ~= (Div2.double (q*q)).
- then (q=0%nat) by main_theorem.
- hence thesis by H.
-end proof.
-Qed.
diff --git a/test-suite/success/decl_mode2.v b/test-suite/success/decl_mode2.v
deleted file mode 100644
index 46174e48..00000000
--- a/test-suite/success/decl_mode2.v
+++ /dev/null
@@ -1,249 +0,0 @@
-Theorem this_is_trivial: True.
-proof.
- thus thesis.
-end proof.
-Qed.
-
-Theorem T: (True /\ True) /\ True.
- split. split.
-proof. (* first subgoal *)
- thus thesis.
-end proof.
-trivial. (* second subgoal *)
-proof. (* third subgoal *)
- thus thesis.
-end proof.
-Abort.
-
-Theorem this_is_not_so_trivial: False.
-proof.
-end proof. (* here a warning is issued *)
-Fail Qed. (* fails: the proof in incomplete *)
-Admitted. (* Oops! *)
-
-Theorem T: True.
-proof.
-escape.
-auto.
-return.
-Abort.
-
-Theorem T: let a:=false in let b:= true in ( if a then True else False -> if b then True else False).
-intros a b.
-proof.
-assume H:(if a then True else False).
-reconsider H as False.
-reconsider thesis as True.
-Abort.
-
-Theorem T: forall x, x=2 -> 2+x=4.
-proof.
-let x be such that H:(x=2).
-have H':(2+x=2+2) by H.
-Abort.
-
-Theorem T: forall x, x=2 -> 2+x=4.
-proof.
-let x be such that H:(x=2).
-then (2+x=2+2).
-Abort.
-
-Theorem T: forall x, x=2 -> x + x = x * x.
-proof.
-let x be such that H:(x=2).
-have (4 = 4).
- ~= (2 * 2).
- ~= (x * x) by H.
- =~ (2 + 2).
- =~ H':(x + x) by H.
-Abort.
-
-Theorem T: forall x, x + x = x * x -> x = 0 \/ x = 2.
-proof.
-let x be such that H:(x + x = x * x).
-claim H':((x - 2) * x = 0).
-thus thesis.
-end claim.
-Abort.
-
-Theorem T: forall (A B:Prop), A -> B -> A /\ B.
-intros A B HA HB.
-proof.
-hence B.
-Abort.
-
-Theorem T: forall (A B C:Prop), A -> B -> C -> A /\ B /\ C.
-intros A B C HA HB HC.
-proof.
-thus B by HB.
-Abort.
-
-Theorem T: forall (A B C:Prop), A -> B -> C -> A /\ B.
-intros A B C HA HB HC.
-proof.
-Fail hence C. (* fails *)
-Abort.
-
-Theorem T: forall (A B:Prop), B -> A \/ B.
-intros A B HB.
-proof.
-hence B.
-Abort.
-
-Theorem T: forall (A B C D:Prop), C -> D -> (A /\ B) \/ (C /\ D).
-intros A B C D HC HD.
-proof.
-thus C by HC.
-Abort.
-
-Theorem T: forall (P:nat -> Prop), P 2 -> exists x,P x.
-intros P HP.
-proof.
-take 2.
-Abort.
-
-Theorem T: forall (P:nat -> Prop), P 2 -> exists x,P x.
-intros P HP.
-proof.
-hence (P 2).
-Abort.
-
-Theorem T: forall (P:nat -> Prop) (R:nat -> nat -> Prop), P 2 -> R 0 2 -> exists x, exists y, P y /\ R x y.
-intros P R HP HR.
-proof.
-thus (P 2) by HP.
-Abort.
-
-Theorem T: forall (A B:Prop) (P:nat -> Prop), (forall x, P x -> B) -> A -> A /\ B.
-intros A B P HP HA.
-proof.
-suffices to have x such that HP':(P x) to show B by HP,HP'.
-Abort.
-
-Theorem T: forall (A:Prop) (P:nat -> Prop), P 2 -> A -> A /\ (forall x, x = 2 -> P x).
-intros A P HP HA.
-proof.
-(* BUG: the next line fails when it should succeed.
-Waiting for someone to investigate the bug.
-focus on (forall x, x = 2 -> P x).
-let x be such that (x = 2).
-hence thesis by HP.
-end focus.
-*)
-Abort.
-
-Theorem T: forall x, x = 0 -> x + x = x * x.
-proof.
-let x be such that H:(x = 0).
-define sqr x as (x * x).
-reconsider thesis as (x + x = sqr x).
-Abort.
-
-Theorem T: forall (P:nat -> Prop), forall x, P x -> P x.
-proof.
-let P:(nat -> Prop).
-let x:nat.
-assume HP:(P x).
-Abort.
-
-Theorem T: forall (P:nat -> Prop), forall x, P x -> P x.
-proof.
-let P:(nat -> Prop).
-Fail let x. (* fails because x's type is not clear *)
-let x be such that HP:(P x). (* here x's type is inferred from (P x) *)
-Abort.
-
-Theorem T: forall (P:nat -> Prop), forall x, P x -> P x -> P x.
-proof.
-let P:(nat -> Prop).
-let x:nat.
-assume (P x). (* temporary name created *)
-Abort.
-
-Theorem T: forall (P:nat -> Prop), forall x, P x -> P x.
-proof.
-let P:(nat -> Prop).
-let x be such that (P x). (* temporary name created *)
-Abort.
-
-Theorem T: forall (P:nat -> Prop) (A:Prop), (exists x, (P x /\ A)) -> A.
-proof.
-let P:(nat -> Prop),A:Prop be such that H:(exists x, P x /\ A).
-consider x such that HP:(P x) and HA:A from H.
-Abort.
-
-(* Here is an example with pairs: *)
-
-Theorem T: forall p:(nat * nat)%type, (fst p >= snd p) \/ (fst p < snd p).
-proof.
-let p:(nat * nat)%type.
-consider x:nat,y:nat from p.
-reconsider thesis as (x >= y \/ x < y).
-Abort.
-
-Theorem T: forall P:(nat -> Prop), (forall n, P n -> P (n - 1)) ->
-(exists m, P m) -> P 0.
-proof.
-let P:(nat -> Prop) be such that HP:(forall n, P n -> P (n - 1)).
-given m such that Hm:(P m).
-Abort.
-
-Theorem T: forall (A B C:Prop), (A -> C) -> (B -> C) -> (A \/ B) -> C.
-proof.
-let A:Prop,B:Prop,C:Prop be such that HAC:(A -> C) and HBC:(B -> C).
-assume HAB:(A \/ B).
-per cases on HAB.
-suppose A.
- hence thesis by HAC.
-suppose HB:B.
- thus thesis by HB,HBC.
-end cases.
-Abort.
-
-Section Coq.
-
-Hypothesis EM : forall P:Prop, P \/ ~ P.
-
-Theorem T: forall (A C:Prop), (A -> C) -> (~A -> C) -> C.
-proof.
-let A:Prop,C:Prop be such that HAC:(A -> C) and HNAC:(~A -> C).
-per cases of (A \/ ~A) by EM.
-suppose (~A).
- hence thesis by HNAC.
-suppose A.
- hence thesis by HAC.
-end cases.
-Abort.
-
-Theorem T: forall (A C:Prop), (A -> C) -> (~A -> C) -> C.
-proof.
-let A:Prop,C:Prop be such that HAC:(A -> C) and HNAC:(~A -> C).
-per cases on (EM A).
-suppose (~A).
-Abort.
-End Coq.
-
-Theorem T: forall (A B:Prop) (x:bool), (if x then A else B) -> A \/ B.
-proof.
-let A:Prop,B:Prop,x:bool.
-per cases on x.
-suppose it is true.
- assume A.
- hence A.
-suppose it is false.
- assume B.
- hence B.
-end cases.
-Abort.
-
-Theorem T: forall (n:nat), n + 0 = n.
-proof.
-let n:nat.
-per induction on n.
-suppose it is 0.
- thus (0 + 0 = 0).
-suppose it is (S m) and H:thesis for m.
- then (S (m + 0) = S m).
- thus =~ (S m + 0).
-end induction.
-Abort. \ No newline at end of file
diff --git a/test-suite/success/dependentind.v b/test-suite/success/dependentind.v
index 12ddbda8..f5bb884d 100644
--- a/test-suite/success/dependentind.v
+++ b/test-suite/success/dependentind.v
@@ -15,7 +15,7 @@ Proof.
intros n H.
dependent destruction H.
assumption.
-Save.
+Qed.
Require Import ProofIrrelevance.
@@ -25,7 +25,7 @@ Proof.
dependent destruction v.
exists v ; exists a.
reflexivity.
-Save.
+Qed.
(* Extraction Unnamed_thm. *)
diff --git a/test-suite/success/destruct.v b/test-suite/success/destruct.v
index 90a60daa..6fbe61a9 100644
--- a/test-suite/success/destruct.v
+++ b/test-suite/success/destruct.v
@@ -12,7 +12,7 @@ assumption.
assumption.
Qed.
-(* Simplification of bug 711 *)
+(* Simplification of BZ#711 *)
Parameter f : true = false.
Goal let p := f in True.
@@ -37,7 +37,7 @@ Goal True.
case Refl || ecase Refl.
Abort.
-(* Submitted by B. Baydemir (bug #1882) *)
+(* Submitted by B. Baydemir (BZ#1882) *)
Require Import List.
@@ -385,7 +385,7 @@ intros.
Fail destruct H.
Abort.
-(* Check keep option (bug #3791) *)
+(* Check keep option (BZ#3791) *)
Goal forall b:bool, True.
intro b.
@@ -430,3 +430,9 @@ eexists ?[x].
destruct (S _).
change (0 = ?x).
Abort.
+
+Goal (forall P, P 0 -> True/\True) -> True.
+intro H.
+destruct (H (fun x => True)).
+match goal with |- True => idtac end.
+Abort.
diff --git a/test-suite/success/dtauto-let-deps.v b/test-suite/success/dtauto-let-deps.v
new file mode 100644
index 00000000..094b2f8b
--- /dev/null
+++ b/test-suite/success/dtauto-let-deps.v
@@ -0,0 +1,24 @@
+(*
+This test is sensitive to changes in which let-ins are expanded when checking
+for dependencies in constructors.
+If the (x := X) is not reduced, Foo1 won't be recognized as a conjunction,
+and if the (y := X) is reduced, Foo2 will be recognized as a conjunction.
+
+This tests the behavior of engine/termops.ml : prod_applist_assum,
+which is currently specified to reduce exactly the parameters.
+
+If dtauto is changed to reduce lets in constructors before checking dependency,
+this test will need to be changed.
+*)
+
+Context (P Q : Type).
+Inductive Foo1 (X : Type) (x := X) := foo1 : let y := X in P -> Q -> Foo1 x.
+Inductive Foo2 (X : Type) (x := X) := foo2 : let y := X in P -> Q -> Foo2 y.
+
+Goal P -> Q -> Foo1 nat.
+solve [dtauto].
+Qed.
+
+Goal P -> Q -> Foo2 nat.
+Fail solve [dtauto].
+Abort.
diff --git a/test-suite/success/eauto.v b/test-suite/success/eauto.v
index 160f2d9d..c4474737 100644
--- a/test-suite/success/eauto.v
+++ b/test-suite/success/eauto.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Class A (A : Type).
diff --git a/test-suite/success/eqdecide.v b/test-suite/success/eqdecide.v
index 724e2998..9b3fb3c5 100644
--- a/test-suite/success/eqdecide.v
+++ b/test-suite/success/eqdecide.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Inductive T : Set :=
diff --git a/test-suite/success/evars.v b/test-suite/success/evars.v
index 4e2bf451..0f9fb745 100644
--- a/test-suite/success/evars.v
+++ b/test-suite/success/evars.v
@@ -23,7 +23,7 @@ Definition f1 frm0 a1 : B := f frm0 a1.
(* Checks that solvable ? in the type part of the definition are harmless *)
Definition f2 frm0 a1 : B := f frm0 a1.
-(* Checks that sorts that are evars are handled correctly (bug 705) *)
+(* Checks that sorts that are evars are handled correctly (BZ#705) *)
Require Import List.
Fixpoint build (nl : list nat) :
@@ -58,11 +58,11 @@ Check
(forall y n : nat, {q : nat | y = q * n}) ->
forall n : nat, {q : nat | x = q * n}).
-(* Check instantiation of nested evars (bug #1089) *)
+(* Check instantiation of nested evars (BZ#1089) *)
Check (fun f:(forall (v:Type->Type), v (v nat) -> nat) => f _ (Some (Some O))).
-(* This used to fail with anomaly (Pp.str "evar was not declared") in V8.0pl3 *)
+(* This used to fail with anomaly (Pp.str "evar was not declared.") in V8.0pl3 *)
Theorem contradiction : forall p, ~ p -> p -> False.
Proof. trivial. Qed.
@@ -188,7 +188,7 @@ Abort.
End Additions_while.
-(* Two examples from G. Melquiond (bugs #1878 and #1884) *)
+(* Two examples from G. Melquiond (BZ#1878 and BZ#1884) *)
Parameter F1 G1 : nat -> Prop.
Goal forall x : nat, F1 x -> G1 x.
@@ -207,7 +207,7 @@ Fixpoint filter (A:nat->Set) (l:list (sigT A)) : list (sigT A) :=
| (existT _ k v)::l' => (existT _ k v):: (filter A l')
end.
-(* Bug #2000: used to raise Out of memory in 8.2 while it should fail by
+(* BZ#2000: used to raise Out of memory in 8.2 while it should fail by
lack of information on the conclusion of the type of j *)
Goal True.
@@ -381,7 +381,7 @@ Section evar_evar_occur.
Check match g _ with conj a b => f _ a b end.
End evar_evar_occur.
-(* Eta expansion (bug #2936) *)
+(* Eta expansion (BZ#2936) *)
Record iffT (X Y:Type) : Type := mkIff { iffLR : X->Y; iffRL : Y->X }.
Record tri (R:Type->Type->Type) (S:Type->Type->Type) (T:Type->Type->Type) := mkTri {
tri0 : forall a b c, R a b -> S a c -> T b c
@@ -414,4 +414,15 @@ Axiom test : forall P1 P2, P1 = P2 -> P1 -> P2.
Import EqNotations.
Definition test2 {A B:Type} {H:A=B} (a:A) : B := rew H in a.
+(* Check that pre-existing evars are not counted as newly undefined in "set" *)
+(* Reported by Théo *)
+Goal exists n : nat, n = n -> True.
+eexists.
+set (H := _ = _).
+Abort.
+
+(* Check interpretation of default evar instance in pretyping *)
+(* (reported as bug #7356) *)
+
+Check fun (P : nat -> Prop) (x:nat) (h:P x) => exist _ ?[z] (h : P ?z).
diff --git a/test-suite/success/extraction.v b/test-suite/success/extraction.v
index 0086e090..95ae0709 100644
--- a/test-suite/success/extraction.v
+++ b/test-suite/success/extraction.v
@@ -1,11 +1,14 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
+Require Coq.extraction.Extraction.
Require Import Arith.
Require Import List.
@@ -544,47 +547,96 @@ Recursive Extraction test_proj.
(*** TO SUM UP: ***)
-(* Was previously producing a "test_extraction.ml" *)
-Recursive Extraction
- idnat id id' test2 test3 test4 test5 test6 test7 d d2
- d3 d4 d5 d6 test8 id id' test9 test10 test11 test12
- test13 test19 test20 nat sumbool_rect c Finite tree
- tree_size test14 test15 eta_c test16 test17 test18 bidon
- tb fbidon fbidon2 fbidon2 test_0 test_1 eq eq_rect tp1
- tp1bis Truc oups test24 loop horibilis PropSet natbool
- zerotrue zeroTrue zeroprop test21 test22 test23 f f_prop
- f_arity f_normal Boite boite1 boite2 test_boite Box box1
- zarb test_proj.
+Module Everything.
+ Definition idnat := idnat.
+ Definition id := id.
+ Definition id' := id'.
+ Definition test2 := test2.
+ Definition test3 := test3.
+ Definition test4 := test4.
+ Definition test5 := test5.
+ Definition test6 := test6.
+ Definition test7 := test7.
+ Definition d := d.
+ Definition d2 := d2.
+ Definition d3 := d3.
+ Definition d4 := d4.
+ Definition d5 := d5.
+ Definition d6 := d6.
+ Definition test8 := test8.
+ Definition test9 := test9.
+ Definition test10 := test10.
+ Definition test11 := test11.
+ Definition test12 := test12.
+ Definition test13 := test13.
+ Definition test19 := test19.
+ Definition test20 := test20.
+ Definition nat := nat.
+ Definition sumbool_rect := sumbool_rect.
+ Definition c := c.
+ Definition Finite := Finite.
+ Definition tree := tree.
+ Definition tree_size := tree_size.
+ Definition test14 := test14.
+ Definition test15 := test15.
+ Definition eta_c := eta_c.
+ Definition test16 := test16.
+ Definition test17 := test17.
+ Definition test18 := test18.
+ Definition bidon := bidon.
+ Definition tb := tb.
+ Definition fbidon := fbidon.
+ Definition fbidon2 := fbidon2.
+ Definition test_0 := test_0.
+ Definition test_1 := test_1.
+ Definition eq_rect := eq_rect.
+ Definition tp1 := tp1.
+ Definition tp1bis := tp1bis.
+ Definition Truc := Truc.
+ Definition oups := oups.
+ Definition test24 := test24.
+ Definition loop := loop.
+ Definition horibilis := horibilis.
+ Definition PropSet := PropSet.
+ Definition natbool := natbool.
+ Definition zerotrue := zerotrue.
+ Definition zeroTrue := zeroTrue.
+ Definition zeroprop := zeroprop.
+ Definition test21 := test21.
+ Definition test22 := test22.
+ Definition test23 := test23.
+ Definition f := f.
+ Definition f_prop := f_prop.
+ Definition f_arity := f_arity.
+ Definition f_normal := f_normal.
+ Definition Boite := Boite.
+ Definition boite1 := boite1.
+ Definition boite2 := boite2.
+ Definition test_boite := test_boite.
+ Definition Box := Box.
+ Definition box1 := box1.
+ Definition zarb := zarb.
+ Definition test_proj := test_proj.
+End Everything.
+
+(* Extraction "test_extraction.ml" Everything. *)
+Recursive Extraction Everything.
+(* Check that the previous OCaml code is compilable *)
+Extraction TestCompile Everything.
Extraction Language Haskell.
-(* Was previously producing a "Test_extraction.hs" *)
-Recursive Extraction
- idnat id id' test2 test3 test4 test5 test6 test7 d d2
- d3 d4 d5 d6 test8 id id' test9 test10 test11 test12
- test13 test19 test20 nat sumbool_rect c Finite tree
- tree_size test14 test15 eta_c test16 test17 test18 bidon
- tb fbidon fbidon2 fbidon2 test_0 test_1 eq eq_rect tp1
- tp1bis Truc oups test24 loop horibilis PropSet natbool
- zerotrue zeroTrue zeroprop test21 test22 test23 f f_prop
- f_arity f_normal Boite boite1 boite2 test_boite Box box1
- zarb test_proj.
+(* Extraction "Test_extraction.hs" Everything. *)
+Recursive Extraction Everything.
Extraction Language Scheme.
-(* Was previously producing a "test_extraction.scm" *)
-Recursive Extraction
- idnat id id' test2 test3 test4 test5 test6 test7 d d2
- d3 d4 d5 d6 test8 id id' test9 test10 test11 test12
- test13 test19 test20 nat sumbool_rect c Finite tree
- tree_size test14 test15 eta_c test16 test17 test18 bidon
- tb fbidon fbidon2 fbidon2 test_0 test_1 eq eq_rect tp1
- tp1bis Truc oups test24 loop horibilis PropSet natbool
- zerotrue zeroTrue zeroprop test21 test22 test23 f f_prop
- f_arity f_normal Boite boite1 boite2 test_boite Box box1
- zarb test_proj.
+(* Extraction "test_extraction.scm" Everything. *)
+Recursive Extraction Everything.
(*** Finally, a test more focused on everyday's life situations ***)
Require Import ZArith.
-Recursive Extraction two_or_two_plus_one Zdiv_eucl_exist.
+Extraction Language OCaml.
+Recursive Extraction Z_modulo_2 Zdiv_eucl_exist.
+Extraction TestCompile Z_modulo_2 Zdiv_eucl_exist.
diff --git a/test-suite/success/extraction_dep.v b/test-suite/success/extraction_dep.v
index 11bb25fd..fb0adaba 100644
--- a/test-suite/success/extraction_dep.v
+++ b/test-suite/success/extraction_dep.v
@@ -1,8 +1,10 @@
(** Examples of code elimination inside modules during extraction *)
+Require Coq.extraction.Extraction.
+
(** NB: we should someday check the produced code instead of
- simply running the commands. *)
+ extracting and just compiling. *)
(** 1) Without signature ... *)
@@ -18,6 +20,7 @@ End A.
Definition testA := A.u + A.B.x.
Recursive Extraction testA. (* without: v w *)
+Extraction TestCompile testA.
(** 1b) Same with an Include *)
@@ -29,6 +32,7 @@ End Abis.
Definition testAbis := Abis.u + Abis.y.
Recursive Extraction testAbis. (* without: A B v w x *)
+Extraction TestCompile testAbis.
(** 2) With signature, we only keep elements mentionned in signature. *)
@@ -44,3 +48,4 @@ End Ater.
Definition testAter := Ater.u.
Recursive Extraction testAter. (* with only: u v *)
+Extraction TestCompile testAter.
diff --git a/test-suite/success/extraction_impl.v b/test-suite/success/extraction_impl.v
index dfdeff82..a38a688f 100644
--- a/test-suite/success/extraction_impl.v
+++ b/test-suite/success/extraction_impl.v
@@ -2,7 +2,9 @@
(** Examples of extraction with manually-declared implicit arguments *)
(** NB: we should someday check the produced code instead of
- simply running the commands. *)
+ extracting and just compiling. *)
+
+Require Coq.extraction.Extraction.
(** Bug #4243, part 1 *)
@@ -20,9 +22,11 @@ Proof.
Defined.
Recursive Extraction dnat_nat.
+Extraction TestCompile dnat_nat.
Extraction Implicit dnat_nat [n].
Recursive Extraction dnat_nat.
+Extraction TestCompile dnat_nat.
(** Same, with a Fixpoint *)
@@ -33,9 +37,11 @@ Fixpoint dnat_nat' n (d:dnat n) :=
end.
Recursive Extraction dnat_nat'.
+Extraction TestCompile dnat_nat'.
Extraction Implicit dnat_nat' [n].
Recursive Extraction dnat_nat'.
+Extraction TestCompile dnat_nat'.
(** Bug #4243, part 2 *)
@@ -54,6 +60,7 @@ Defined.
Extraction Implicit es [n].
Extraction Implicit enat_nat [n].
Recursive Extraction enat_nat.
+Extraction TestCompile enat_nat.
(** Same, with a Fixpoint *)
@@ -65,6 +72,7 @@ Fixpoint enat_nat' n (e:enat n) : nat :=
Extraction Implicit enat_nat' [n].
Recursive Extraction enat_nat'.
+Extraction TestCompile enat_nat'.
(** Bug #4228 *)
@@ -80,3 +88,4 @@ Extraction Implicit two_course [n].
End Food.
Recursive Extraction Food.Meal.
+Extraction TestCompile Food.Meal.
diff --git a/test-suite/success/extraction_polyprop.v b/test-suite/success/extraction_polyprop.v
index 7215bd99..936d838c 100644
--- a/test-suite/success/extraction_polyprop.v
+++ b/test-suite/success/extraction_polyprop.v
@@ -3,6 +3,8 @@
code that segfaults. See Table.error_singleton_become_prop
or S. Glondu's thesis for more details. *)
+Require Coq.extraction.Extraction.
+
Definition f {X} (p : (nat -> X) * True) : X * nat :=
(fst p 0, 0).
diff --git a/test-suite/success/forward.v b/test-suite/success/forward.v
new file mode 100644
index 00000000..4e36dec1
--- /dev/null
+++ b/test-suite/success/forward.v
@@ -0,0 +1,29 @@
+(* Testing forward reasoning *)
+
+Goal 0=0.
+Fail assert (_ = _).
+eassert (_ = _)by reflexivity.
+eassumption.
+Qed.
+
+Goal 0=0.
+Fail set (S ?[nl]).
+eset (S ?[n]).
+remember (S ?n) as x.
+instantiate (n:=0).
+Fail remember (S (S _)).
+eremember (S (S ?[x])).
+instantiate (x:=0).
+reflexivity.
+Qed.
+
+(* Don't know if it is good or not but the compatibility tells that
+ the asserted goal to prove is subject to beta-iota but not the
+ asserted hypothesis *)
+
+Goal True.
+assert ((fun x => x) False).
+Fail match goal with |- (?f ?a) => idtac end. (* should be beta-iota reduced *)
+2:match goal with _: (?f ?a) |- _ => idtac end. (* should not be beta-iota reduced *)
+Abort.
+
diff --git a/test-suite/success/guard.v b/test-suite/success/guard.v
index b9181d43..3a1c6dab 100644
--- a/test-suite/success/guard.v
+++ b/test-suite/success/guard.v
@@ -9,3 +9,20 @@ Check let x (f:nat->nat) k := f k in
| 0 => 0
| S k => f F k (* here Rel 3 = F ! *)
end.
+
+(** Commutation of guard condition allows recursive calls on functional arguments,
+ despite rewriting in their domain types. *)
+Inductive foo : Type -> Type :=
+| End A : foo A
+| Next A : (A -> foo A) -> foo A.
+
+Definition nat : Type := nat.
+
+Fixpoint bar (A : Type) (e : nat = A) (f : foo A) {struct f} : nat :=
+match f with
+| End _ => fun _ => O
+| Next A g => fun e =>
+ match e in (_ = B) return (B -> foo A) -> nat with
+ | eq_refl => fun (g' : nat -> foo A) => bar A e (g' O)
+ end g
+end e.
diff --git a/test-suite/success/hintdb_in_ltac.v b/test-suite/success/hintdb_in_ltac.v
new file mode 100644
index 00000000..f12b4d1f
--- /dev/null
+++ b/test-suite/success/hintdb_in_ltac.v
@@ -0,0 +1,14 @@
+Definition x := 0.
+
+Hint Unfold x : mybase.
+
+Ltac autounfoldify base := autounfold with base.
+
+Tactic Notation "autounfoldify_bis" ident(base) := autounfold with base.
+
+Goal x = 0.
+ progress autounfoldify mybase.
+ Undo.
+ progress autounfoldify_bis mybase.
+ trivial.
+Qed.
diff --git a/test-suite/success/hintdb_in_ltac_bis.v b/test-suite/success/hintdb_in_ltac_bis.v
new file mode 100644
index 00000000..2bc3f9d2
--- /dev/null
+++ b/test-suite/success/hintdb_in_ltac_bis.v
@@ -0,0 +1,15 @@
+Parameter Foo : Prop.
+Axiom H : Foo.
+
+Hint Resolve H : mybase.
+
+Ltac foo base := eauto with base.
+
+Tactic Notation "bar" ident(base) :=
+ typeclasses eauto with base.
+
+Goal Foo.
+ progress foo mybase.
+ Undo.
+ progress bar mybase.
+Qed.
diff --git a/test-suite/success/if.v b/test-suite/success/if.v
index 9fde95e8..c81d2b9b 100644
--- a/test-suite/success/if.v
+++ b/test-suite/success/if.v
@@ -3,7 +3,7 @@
Check (fun b : bool => if b then Type else nat).
-(* Check correct use of if-then-else predicate annotation (cf bug 690) *)
+(* Check correct use of if-then-else predicate annotation (cf BZ#690) *)
Check fun b : bool =>
if b as b0 return (if b0 then b0 = true else b0 = false)
diff --git a/test-suite/success/indelim.v b/test-suite/success/indelim.v
index 91b6dee2..a962c29f 100644
--- a/test-suite/success/indelim.v
+++ b/test-suite/success/indelim.v
@@ -58,4 +58,4 @@ Inductive color := Red | Black.
Inductive option (A : Type) : Type :=
| None : option A
-| Some : A -> option A. \ No newline at end of file
+| Some : A -> option A.
diff --git a/test-suite/success/inds_type_sec.v b/test-suite/success/inds_type_sec.v
index c729b23c..92fd6cb1 100644
--- a/test-suite/success/inds_type_sec.v
+++ b/test-suite/success/inds_type_sec.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Section S.
Inductive T (U : Type) : Type :=
diff --git a/test-suite/success/induct.v b/test-suite/success/induct.v
index 1ed731f5..da7df69e 100644
--- a/test-suite/success/induct.v
+++ b/test-suite/success/induct.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Test des definitions inductives imbriquees *)
diff --git a/test-suite/success/intros.v b/test-suite/success/intros.v
index ee69df97..a329894a 100644
--- a/test-suite/success/intros.v
+++ b/test-suite/success/intros.v
@@ -1,5 +1,5 @@
(* Thinning introduction hypothesis must be done after all introductions *)
-(* Submitted by Guillaume Melquiond (bug #1000) *)
+(* Submitted by Guillaume Melquiond (BZ#1000) *)
Goal forall A, A -> True.
intros _ _.
diff --git a/test-suite/success/keyedrewrite.v b/test-suite/success/keyedrewrite.v
index b88c142b..5638a7d3 100644
--- a/test-suite/success/keyedrewrite.v
+++ b/test-suite/success/keyedrewrite.v
@@ -59,4 +59,4 @@ Qed.
Lemma test b : b && true = b.
Fail rewrite andb_true_l.
Admitted.
- \ No newline at end of file
+
diff --git a/test-suite/success/letproj.v b/test-suite/success/letproj.v
index a183be62..de2857b4 100644
--- a/test-suite/success/letproj.v
+++ b/test-suite/success/letproj.v
@@ -1,5 +1,5 @@
Set Primitive Projections.
-Set Record Elimination Schemes.
+Set Nonrecursive Elimination Schemes.
Record Foo (A : Type) := { bar : A -> A; baz : A }.
Definition test (A : Type) (f : Foo A) :=
diff --git a/test-suite/success/ltac.v b/test-suite/success/ltac.v
index ce909905..0f22a1f0 100644
--- a/test-suite/success/ltac.v
+++ b/test-suite/success/ltac.v
@@ -147,7 +147,7 @@ check_binding ipattern:(H).
Abort.
(* Check that variables explicitly parsed as ltac variables are not
- seen as intro pattern or constr (bug #984) *)
+ seen as intro pattern or constr (BZ#984) *)
Ltac afi tac := intros; tac.
Goal 1 = 2.
@@ -317,3 +317,34 @@ let T := constr:(fun a b : nat => a) in
end.
exact (eq_refl n).
Qed.
+
+(* A variant of #2602 which was wrongly succeeding because "a", bound to
+ "?m", was then internally turned into a "_" in the second matching *)
+
+Goal exists m, S m > 0.
+eexists.
+Fail match goal with
+ | |- context [ S ?a ] =>
+ match goal with
+ | |- S a > a => idtac
+ end
+end.
+Abort.
+
+(* Test evar syntax *)
+
+Goal True.
+evar (0=0).
+Abort.
+
+(* Test location of hypothesis in "symmetry in H". This was broken in
+ 8.6 where H, when the oldest hyp, was moved at the place of most
+ recent hypothesis *)
+
+Goal 0=1 -> True -> True.
+intros H H0.
+symmetry in H.
+(* H should be the first hypothesis *)
+match goal with h:_ |- _ => assert (h=h) end. (* h should be H0 *)
+exact (eq_refl H0).
+Abort.
diff --git a/test-suite/success/ltac_match_pattern_names.v b/test-suite/success/ltac_match_pattern_names.v
new file mode 100644
index 00000000..790cd1b3
--- /dev/null
+++ b/test-suite/success/ltac_match_pattern_names.v
@@ -0,0 +1,28 @@
+(* example from bug 5345 *)
+Ltac break_tuple :=
+ match goal with
+ | [ H: context[let '(n, m) := ?a in _] |- _ ] =>
+ let n := fresh n in
+ let m := fresh m in
+ destruct a as [n m]
+ end.
+
+(* desugared version of break_tuple *)
+Ltac break_tuple' :=
+ match goal with
+ | [ H: context[match ?a with | pair n m => _ end] |- _ ] =>
+ let n := fresh n in
+ let m := fresh m in
+ idtac
+ end.
+
+Ltac multiple_branches :=
+ match goal with
+ | [ H: match _ with
+ | left P => _
+ | right Q => _
+ end |- _ ] =>
+ let P := fresh P in
+ let Q := fresh Q in
+ idtac
+ end.
diff --git a/test-suite/success/ltac_plus.v b/test-suite/success/ltac_plus.v
index 8a08d646..01d477bd 100644
--- a/test-suite/success/ltac_plus.v
+++ b/test-suite/success/ltac_plus.v
@@ -9,4 +9,4 @@ Proof.
Fail ((apply h0+apply h2) || apply h1); apply h3.
(* interaction with || *)
((apply h0+apply h1) || apply h2); apply h3.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/success/mutual_ind.v b/test-suite/success/mutual_ind.v
index 45c1a5e5..2c76a135 100644
--- a/test-suite/success/mutual_ind.v
+++ b/test-suite/success/mutual_ind.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Definition mutuellement inductive et dependante *)
diff --git a/test-suite/success/name_mangling.v b/test-suite/success/name_mangling.v
new file mode 100644
index 00000000..e9824142
--- /dev/null
+++ b/test-suite/success/name_mangling.v
@@ -0,0 +1,191 @@
+(* -*- coq-prog-args: ("-mangle-names" "_") -*- *)
+
+(* Check that refine policy of redefining previous names make these names private *)
+(* abstract can change names in the environment! See bug #3146 *)
+
+Goal True -> True.
+intro.
+Fail exact H.
+exact _0.
+Abort.
+
+Unset Mangle Names.
+Goal True -> True.
+intro; exact H.
+Abort.
+
+Set Mangle Names.
+Set Mangle Names Prefix "baz".
+Goal True -> True.
+intro.
+Fail exact H.
+Fail exact _0.
+exact baz0.
+Abort.
+
+Goal True -> True.
+intro; assumption.
+Abort.
+
+Goal True -> True.
+intro x; exact x.
+Abort.
+
+Goal forall x y, x+y=0.
+intro x.
+refine (fun x => _).
+Fail Check x0.
+Check x.
+Abort.
+
+(* Example from Emilio *)
+
+Goal forall b : False, b = b.
+intro b.
+refine (let b := I in _).
+Fail destruct b0.
+Abort.
+
+(* Example from Cyprien *)
+
+Goal True -> True.
+Proof.
+ refine (fun _ => _).
+ Fail exact t.
+Abort.
+
+(* Example from Jason *)
+
+Goal False -> False.
+intro H.
+Fail abstract exact H.
+Abort.
+
+(* Variant *)
+
+Goal False -> False.
+intro.
+Fail abstract exact H.
+Abort.
+
+(* Example from Jason *)
+
+Goal False -> False.
+intro H.
+(* Name H' is from Ltac here, so it preserves the privacy *)
+(* But abstract messes everything up *)
+Fail let H' := H in abstract exact H'.
+let H' := H in exact H'.
+Qed.
+
+(* Variant *)
+
+Goal False -> False.
+intro.
+Fail let H' := H in abstract exact H'.
+Abort.
+
+(* Indirectly testing preservation of names by move (derived from Jason) *)
+
+Inductive nat2 := S2 (_ _ : nat2).
+Goal forall t : nat2, True.
+ intro t.
+ let IHt1 := fresh "IHt1" in
+ let IHt2 := fresh "IHt2" in
+ induction t as [? IHt1 ? IHt2].
+ Fail exact IHt1.
+Abort.
+
+(* Example on "pose proof" (from Jason) *)
+
+Goal False -> False.
+intro; pose proof I as H0.
+Fail exact H.
+Abort.
+
+(* Testing the approach for which non alpha-renamed quantified names are user-generated *)
+
+Section foo.
+Context (b : True).
+Goal forall b : False, b = b.
+Fail destruct b0.
+Abort.
+
+Goal forall b : False, b = b.
+now destruct b.
+Qed.
+End foo.
+
+(* Test stability of "fix" *)
+
+Lemma a : forall n, n = 0.
+Proof.
+fix a 1.
+Check a.
+Fail fix a 1.
+Abort.
+
+(* Test stability of "induction" *)
+
+Lemma a : forall n : nat, n = n.
+Proof.
+intro n; induction n as [ | n IHn ].
+- auto.
+- Check n.
+ Check IHn.
+Abort.
+
+Inductive I := C : I -> I -> I.
+
+Lemma a : forall n : I, n = n.
+Proof.
+intro n; induction n as [ n1 IHn1 n2 IHn2 ].
+Check n1.
+Check n2.
+apply f_equal2.
++ apply IHn1.
++ apply IHn2.
+Qed.
+
+(* Testing remember *)
+
+Lemma c : 0 = 0.
+Proof.
+remember 0 as x eqn:Heqx.
+Check Heqx.
+Abort.
+
+Lemma c : forall Heqx, Heqx -> 0 = 0.
+Proof.
+intros Heqx X.
+remember 0 as x.
+Fail Check Heqx0. (* Heqx0 is not canonical *)
+Abort.
+
+(* An example by Jason from the discussion for PR #268 *)
+
+Goal nat -> Set -> True.
+ intros x y.
+ match goal with
+ | [ x : _, y : _ |- _ ]
+ => let z := fresh "z" in
+ rename y into z, x into y;
+ let x' := fresh "x" in
+ rename z into x'
+ end.
+ revert y. (* x has been explicitly moved to y *)
+ Fail revert x. (* x comes from "fresh" *)
+Abort.
+
+Goal nat -> Set -> True.
+ intros.
+ match goal with
+ | [ x : _, y : _ |- _ ]
+ => let z := fresh "z" in
+ rename y into z, x into y;
+ let x' := fresh "x" in
+ rename z into x'
+ end.
+ Fail revert y. (* generated by intros *)
+ Fail revert x. (* generated by intros *)
+Abort.
diff --git a/test-suite/success/polymorphism.v b/test-suite/success/polymorphism.v
index 878875bd..d76b3079 100644
--- a/test-suite/success/polymorphism.v
+++ b/test-suite/success/polymorphism.v
@@ -156,6 +156,58 @@ Polymorphic Definition twoprojs (d : dyn) := dyn_proof d = dyn_proof d.
End structures.
+
+Module binders.
+
+ Definition mynat@{|} := nat.
+
+ Definition foo@{i j | i < j, i < j} (A : Type@{i}) : Type@{j}.
+ exact A.
+ Defined.
+
+ Definition nomoreu@{i j | i < j +} (A : Type@{i}) : Type@{j}.
+ pose(foo:=Type).
+ exact A.
+ Fail Defined.
+ Abort.
+
+ Polymorphic Definition moreu@{i j +} (A : Type@{i}) : Type@{j}.
+ pose(foo:=Type).
+ exact A.
+ Defined.
+
+ Check moreu@{_ _ _ _}.
+
+ Fail Definition morec@{i j|} (A : Type@{i}) : Type@{j} := A.
+
+ (* By default constraints are extensible *)
+ Polymorphic Definition morec@{i j} (A : Type@{i}) : Type@{j} := A.
+ Check morec@{_ _}.
+
+ (* Handled in proofs as well *)
+ Lemma bar@{i j | } : Type@{i}.
+ exact Type@{j}.
+ Fail Defined.
+ Abort.
+
+ Fail Lemma bar@{u v | } : let x := (fun x => x) : Type@{u} -> Type@{v} in nat.
+
+ Lemma bar@{i j| i < j} : Type@{j}.
+ Proof.
+ exact Type@{i}.
+ Qed.
+
+ Lemma barext@{i j|+} : Type@{j}.
+ Proof.
+ exact Type@{i}.
+ Qed.
+
+ Monomorphic Universe M.
+ Fail Definition with_mono@{u|} : Type@{M} := Type@{u}.
+ Definition with_mono@{u|u < M} : Type@{M} := Type@{u}.
+
+End binders.
+
Section cats.
Local Set Universe Polymorphism.
Require Import Utf8.
@@ -321,4 +373,98 @@ Definition unwrap' := fun (X : Type) (b : box X) => let (unw) := b in unw.
Fail Definition bad : False := TypeNeqSmallType.paradox (unwrap' Type (wrap _
Type)) eq_refl.
-End Hurkens'. \ No newline at end of file
+End Hurkens'.
+
+Module Anonymous.
+ Set Universe Polymorphism.
+
+ Definition defaultid := (fun x => x) : Type -> Type.
+ Definition collapseid := defaultid@{_ _}.
+ Check collapseid@{_}.
+
+ Definition anonid := (fun x => x) : Type -> Type@{_}.
+ Check anonid@{_}.
+
+ Definition defaultalg := (fun x : Type => x) (Type : Type).
+ Definition usedefaultalg := defaultalg@{_ _ _}.
+ Check usedefaultalg@{_ _}.
+
+ Definition anonalg := (fun x : Type@{_} => x) (Type : Type).
+ Check anonalg@{_ _}.
+
+ Definition unrelated@{i j} := nat.
+ Definition useunrelated := unrelated@{_ _}.
+ Check useunrelated@{_ _}.
+
+ Definition inthemiddle@{i j k} :=
+ let _ := defaultid@{i j} in
+ anonalg@{k j}.
+ (* i <= j < k *)
+ Definition collapsethemiddle := inthemiddle@{i _ j}.
+ Check collapsethemiddle@{_ _}.
+
+End Anonymous.
+
+Module Restrict.
+ (* Universes which don't appear in the term should be pruned, unless they have names *)
+ Set Universe Polymorphism.
+
+ Ltac exact0 := let x := constr:(Type) in exact 0.
+ Definition dummy_pruned@{} : nat := ltac:(exact0).
+
+ Definition named_not_pruned@{u} : nat := 0.
+ Check named_not_pruned@{_}.
+
+ Definition named_not_pruned_nonstrict : nat := ltac:(let x := constr:(Type@{u}) in exact 0).
+ Check named_not_pruned_nonstrict@{_}.
+
+ Lemma lemma_restrict_poly@{} : nat.
+ Proof. exact0. Defined.
+
+ Unset Universe Polymorphism.
+ Lemma lemma_restrict_mono_qed@{} : nat.
+ Proof. exact0. Qed.
+
+ Lemma lemma_restrict_abstract@{} : nat.
+ Proof. abstract exact0. Qed.
+
+End Restrict.
+
+Module F.
+ Context {A B : Type}.
+ Definition foo : Type := B.
+End F.
+
+Set Universe Polymorphism.
+
+Cumulative Record box (X : Type) (T := Type) : Type := wrap { unwrap : T }.
+
+Section test_letin_subtyping.
+ Universe i j k i' j' k'.
+ Constraint j < j'.
+
+ Context (W : Type) (X : box@{i j k} W).
+ Definition Y := X : box@{i' j' k'} W.
+
+ Universe i1 j1 k1 i2 j2 k2.
+ Constraint i1 < i2.
+ Constraint k2 < k1.
+ Context (V : Type).
+
+ Definition Z : box@{i1 j1 k1} V := {| unwrap := V |}.
+ Definition Z' : box@{i2 j2 k2} V := {| unwrap := V |}.
+ Lemma ZZ' : @eq (box@{i2 j2 k2} V) Z Z'.
+ Proof.
+ Set Printing All. Set Printing Universes.
+ cbv.
+ reflexivity.
+ Qed.
+
+End test_letin_subtyping.
+
+Module ObligationRegression.
+ (** Test for a regression encountered when fixing obligations for
+ stronger restriction of universe context. *)
+ Require Import CMorphisms.
+ Check trans_co_eq_inv_arrow_morphism@{_ _ _ _ _ _ _ _}.
+End ObligationRegression.
diff --git a/test-suite/success/primitiveproj.v b/test-suite/success/primitiveproj.v
index 2fa77049..31a1608c 100644
--- a/test-suite/success/primitiveproj.v
+++ b/test-suite/success/primitiveproj.v
@@ -1,5 +1,5 @@
Set Primitive Projections.
-Set Record Elimination Schemes.
+Set Nonrecursive Elimination Schemes.
Module Prim.
Record F := { a : nat; b : a = a }.
@@ -181,7 +181,10 @@ Record wrap (A : Type) := { unwrap : A; unwrap2 : A }.
Definition term (x : wrap nat) := x.(unwrap).
Definition term' (x : wrap nat) := let f := (@unwrap2 nat) in f x.
+
+Require Coq.extraction.Extraction.
Recursive Extraction term term'.
+Extraction TestCompile term term'.
(*Unset Printing Primitive Projection Parameters.*)
(* Primitive projections in the presence of let-ins (was not failing in beta3)*)
diff --git a/test-suite/success/programequality.v b/test-suite/success/programequality.v
index 414c572f..05f4a718 100644
--- a/test-suite/success/programequality.v
+++ b/test-suite/success/programequality.v
@@ -10,4 +10,4 @@ Proof.
pi_eq_proofs. clear e.
destruct e'. simpl.
change (P a eq_refl).
-Abort. \ No newline at end of file
+Abort.
diff --git a/test-suite/success/qed_export.v b/test-suite/success/qed_export.v
deleted file mode 100644
index b3e41ab1..00000000
--- a/test-suite/success/qed_export.v
+++ /dev/null
@@ -1,18 +0,0 @@
-Lemma a : True.
-Proof.
-assert True as H.
- abstract (trivial) using exported_seff.
-exact H.
-Fail Qed exporting a_subproof.
-Qed exporting exported_seff.
-Check ( exported_seff : True ).
-
-Lemma b : True.
-Proof.
-assert True as H.
- abstract (trivial) using exported_seff2.
-exact H.
-Qed.
-
-Fail Check ( exported_seff2 : True ).
-
diff --git a/test-suite/success/record_syntax.v b/test-suite/success/record_syntax.v
index db2bbb0d..07a5bc06 100644
--- a/test-suite/success/record_syntax.v
+++ b/test-suite/success/record_syntax.v
@@ -45,3 +45,11 @@ Record Foo := { foo : unit; }.
Definition foo_ := {| foo := tt; |}.
End E.
+
+Module F.
+
+Record Foo := { foo : nat * nat -> nat -> nat }.
+
+Definition foo_ := {| foo '(x,y) n := x+y+n |}.
+
+End F.
diff --git a/test-suite/success/refine.v b/test-suite/success/refine.v
index 352abb2a..22fb4d75 100644
--- a/test-suite/success/refine.v
+++ b/test-suite/success/refine.v
@@ -31,7 +31,7 @@ Proof.
end).
Abort.
-(* Submitted by Roland Zumkeller (bug #888) *)
+(* Submitted by Roland Zumkeller (BZ#888) *)
(* The Fix and CoFix rules expect a subgoal even for closed components of the
(co-)fixpoint *)
@@ -43,7 +43,7 @@ Goal nat -> nat.
exact 0.
Qed.
-(* Submitted by Roland Zumkeller (bug #889) *)
+(* Submitted by Roland Zumkeller (BZ#889) *)
(* The types of metas were in metamap and they were not updated when
passing through a binder *)
@@ -56,7 +56,7 @@ Goal forall n : nat, nat -> n = 0.
end).
Abort.
-(* Submitted by Roland Zumkeller (bug #931) *)
+(* Submitted by Roland Zumkeller (BZ#931) *)
(* Don't turn dependent evar into metas *)
Goal (forall n : nat, n = 0 -> Prop) -> Prop.
@@ -65,7 +65,7 @@ intro P.
reflexivity.
Abort.
-(* Submitted by Jacek Chrzaszcz (bug #1102) *)
+(* Submitted by Jacek Chrzaszcz (BZ#1102) *)
(* le problème a été résolu ici par normalisation des evars présentes
dans les types d'evars, mais le problème reste a priori ouvert dans
@@ -122,3 +122,13 @@ Abort.
Goal (forall A : Prop, A -> ~~A).
Proof. refine(fun A a f => _).
+
+(* Checking beta-iota normalization of hypotheses in created evars *)
+
+Goal {x|x=0} -> True.
+refine (fun y => let (x,a) := y in _).
+match goal with a:_=0 |- _ => idtac end.
+
+Goal (forall P, {P 0}+{P 1}) -> True.
+refine (fun H => if H (fun x => x=x) then _ else _).
+match goal with _:0=0 |- _ => idtac end.
diff --git a/test-suite/success/rewrite.v b/test-suite/success/rewrite.v
index 62249666..448d0082 100644
--- a/test-suite/success/rewrite.v
+++ b/test-suite/success/rewrite.v
@@ -151,10 +151,25 @@ Abort.
(* Check that rewriting within evars still work (was broken in 8.5beta1) *)
-
Goal forall (a: unit) (H: a = tt), exists x y:nat, x = y.
intros; eexists; eexists.
rewrite H.
Undo.
subst.
Abort.
+
+(* Check that iterated rewriting does not rewrite in the side conditions *)
+(* Example from Sigurd Schneider, extracted from contrib containers *)
+
+Lemma EQ
+ : forall (e e' : nat), True -> e = e'.
+Admitted.
+
+Lemma test (v1 v2 v3: nat) (v' : v1 = v2) : v2 = v1.
+Proof.
+ rewrite <- (EQ v1 v2) in *.
+ exact v'.
+ (* There should be only two side conditions *)
+ exact I.
+ exact I.
+Qed.
diff --git a/test-suite/success/rewrite_dep.v b/test-suite/success/rewrite_dep.v
index d0aafd38..d73864e4 100644
--- a/test-suite/success/rewrite_dep.v
+++ b/test-suite/success/rewrite_dep.v
@@ -31,4 +31,4 @@ Proof.
intros.
rewrite H0.
reflexivity.
-Qed. \ No newline at end of file
+Qed.
diff --git a/test-suite/success/rewrite_evar.v b/test-suite/success/rewrite_evar.v
new file mode 100644
index 00000000..f7ad261c
--- /dev/null
+++ b/test-suite/success/rewrite_evar.v
@@ -0,0 +1,8 @@
+Require Import Coq.Setoids.Setoid.
+
+Goal forall (T2 MT1 MT2 : Type) (x : T2) (M2 m2 : MT2) (M1 m1 : MT1) (F : T2 -> MT1 -> MT2 -> Prop),
+ (forall (defaultB : T2) (m3 : MT1) (m4 : MT2), F defaultB m3 m4 <-> True) -> F x M1 M2 -> F x m1 m2.
+ intros ????????? H' H.
+ rewrite (H' _) in *.
+ (** The above rewrite should also rewrite in H. *)
+ Fail progress rewrite H' in H.
diff --git a/test-suite/success/rewrite_strat.v b/test-suite/success/rewrite_strat.v
index 04c67556..a6e59fdd 100644
--- a/test-suite/success/rewrite_strat.v
+++ b/test-suite/success/rewrite_strat.v
@@ -50,4 +50,4 @@ Proof.
Time Qed. (* 0.06 s *)
Set Printing All.
-Set Printing Depth 100000. \ No newline at end of file
+Set Printing Depth 100000.
diff --git a/test-suite/success/setoid_test.v b/test-suite/success/setoid_test.v
index 1f24ef2a..c8dfcd2c 100644
--- a/test-suite/success/setoid_test.v
+++ b/test-suite/success/setoid_test.v
@@ -33,7 +33,8 @@ Qed.
Add Setoid set same setoid_set as setsetoid.
-Add Morphism In : In_ext.
+Add Morphism In with signature (eq ==> same ==> iff) as In_ext.
+Proof.
unfold same; intros a s t H; elim (H a); auto.
Qed.
@@ -50,10 +51,9 @@ simpl; right.
apply (H2 H1).
Qed.
-Add Morphism Add : Add_ext.
+Add Morphism Add with signature (eq ==> same ==> same) as Add_ext.
split; apply add_aux.
assumption.
-
rewrite H.
reflexivity.
Qed.
@@ -90,7 +90,7 @@ Qed.
Parameter P : set -> Prop.
Parameter P_ext : forall s t : set, same s t -> P s -> P t.
-Add Morphism P : P_extt.
+Add Morphism P with signature (same ==> iff) as P_extt.
intros; split; apply P_ext; (assumption || apply (Seq_sym _ _ setoid_set); assumption).
Qed.
@@ -113,7 +113,7 @@ Definition f: forall A : Set, A -> A := fun A x => x.
Add Relation (id A) (rel A) as eq_rel.
-Add Morphism (@f A) : f_morph.
+Add Morphism (@f A) with signature (eq ==> eq) as f_morph.
Proof.
unfold rel, f. trivial.
Qed.
diff --git a/test-suite/success/setoid_test2.v b/test-suite/success/setoid_test2.v
index 6baf7970..79467e54 100644
--- a/test-suite/success/setoid_test2.v
+++ b/test-suite/success/setoid_test2.v
@@ -134,8 +134,8 @@ Axiom SetoidS2 : Setoid_Theory S2 eqS2.
Add Setoid S2 eqS2 SetoidS2 as S2setoid.
Axiom f : S1 -> nat -> S2.
-Add Morphism f : f_compat. Admitted.
-Add Morphism f : f_compat2. Admitted.
+Add Morphism f with signature (eqS1 ==> eq ==> eqS2) as f_compat. Admitted.
+Add Morphism f with signature (eqS1 ==> eq ==> eqS2) as f_compat2. Admitted.
Theorem test1: forall x y, (eqS1 x y) -> (eqS2 (f x 0) (f y 0)).
intros.
@@ -151,7 +151,7 @@ Theorem test1': forall x y, (eqS1 x y) -> (eqS2 (f x 0) (f y 0)).
Qed.
Axiom g : S1 -> S2 -> nat.
-Add Morphism g : g_compat. Admitted.
+Add Morphism g with signature (eqS1 ==> eqS2 ==> eq) as g_compat. Admitted.
Axiom P : nat -> Prop.
Theorem test2:
@@ -190,13 +190,13 @@ Theorem test5:
Qed.
Axiom f_test6 : S2 -> Prop.
-Add Morphism f_test6 : f_test6_compat. Admitted.
+Add Morphism f_test6 with signature (eqS2 ==> iff) as f_test6_compat. Admitted.
Axiom g_test6 : bool -> S2.
-Add Morphism g_test6 : g_test6_compat. Admitted.
+Add Morphism g_test6 with signature (eq ==> eqS2) as g_test6_compat. Admitted.
Axiom h_test6 : S1 -> bool.
-Add Morphism h_test6 : h_test6_compat. Admitted.
+Add Morphism h_test6 with signature (eqS1 ==> eq) as h_test6_compat. Admitted.
Theorem test6:
forall E1 E2, (eqS1 E1 E2) -> (f_test6 (g_test6 (h_test6 E2))) ->
@@ -223,7 +223,7 @@ Add Setoid S1_test8 eqS1_test8 SetoidS1_test8 as S1_test8setoid.
Instance eqS1_test8_default : DefaultRelation eqS1_test8.
Axiom f_test8 : S2 -> S1_test8.
-Add Morphism f_test8 : f_compat_test8. Admitted.
+Add Morphism f_test8 with signature (eqS2 ==> eqS1_test8) as f_compat_test8. Admitted.
Axiom eqS1_test8': S1_test8 -> S1_test8 -> Prop.
Axiom SetoidS1_test8' : Setoid_Theory S1_test8 eqS1_test8'.
@@ -233,7 +233,7 @@ Add Setoid S1_test8 eqS1_test8' SetoidS1_test8' as S1_test8setoid'.
(S1_test8, eqS1_test8'). However this does not happen and
there is still no syntax for it ;-( *)
Axiom g_test8 : S1_test8 -> S2.
-Add Morphism g_test8 : g_compat_test8. Admitted.
+Add Morphism g_test8 with signature (eqS1_test8 ==> eqS2) as g_compat_test8. Admitted.
Theorem test8:
forall x x': S2, (eqS2 x x') ->
diff --git a/test-suite/success/shrink_abstract.v b/test-suite/success/shrink_abstract.v
index 3f6b9cb3..916bb846 100644
--- a/test-suite/success/shrink_abstract.v
+++ b/test-suite/success/shrink_abstract.v
@@ -1,5 +1,3 @@
-Set Shrink Abstract.
-
Definition foo : forall (n m : nat), bool.
Proof.
pose (p := 0).
diff --git a/test-suite/success/simpl.v b/test-suite/success/simpl.v
index 5b87e877..1bfb8580 100644
--- a/test-suite/success/simpl.v
+++ b/test-suite/success/simpl.v
@@ -1,6 +1,6 @@
Require Import TestSuite.admit.
(* Check that inversion of names of mutual inductive fixpoints works *)
-(* (cf bug #1031) *)
+(* (cf BZ#1031) *)
Inductive tree : Set :=
| node : nat -> forest -> tree
diff --git a/test-suite/success/specialize.v b/test-suite/success/specialize.v
index fba05cd9..f12db8b0 100644
--- a/test-suite/success/specialize.v
+++ b/test-suite/success/specialize.v
@@ -17,6 +17,29 @@ specialize (eq_trans (x:=a)(y:=b)). intros _.
specialize (eq_trans H H0). intros _.
specialize (eq_trans H0 (z:=b)). intros _.
+(* incomplete bindings: y is left quantified and z is instantiated. *)
+specialize eq_trans with (x:=a)(z:=c).
+intro h.
+(* y can be instantiated now *)
+specialize h with (y:=b).
+(* z was instantiated above so this must fail. *)
+Fail specialize h with (z:=c).
+clear h.
+
+(* incomplete bindings: 1st dep hyp is instantiated thus A, x and y
+ instantiated too. *)
+specialize eq_trans with (1:=H).
+intro h.
+(* 2nd dep hyp can be instantiated now, which instatiates z too. *)
+specialize h with (1:=H0).
+(* checking that there is no more products in h. *)
+match type of h with
+| _ = _ => idtac
+| _ => fail "specialize test failed: hypothesis h should be an equality at this point"
+end.
+clear h.
+
+
(* local "in place" specialization *)
assert (Eq:=eq_trans).
@@ -31,6 +54,27 @@ specialize (Eq _ a b c). Undo.
specialize (Eq _ _ _ _ H H0). Undo.
specialize (Eq _ _ _ b H0). Undo.
+(* incomplete binding *)
+specialize Eq with (y:=b).
+(* A and y have been instantiated so this works *)
+specialize (Eq _ _ H H0).
+Undo 2.
+
+(* incomplete binding (dependent) *)
+specialize Eq with (1:=H).
+(* A, x and y have been instantiated so this works *)
+specialize (Eq _ H0).
+Undo 2.
+
+(* incomplete binding (dependent) *)
+specialize Eq with (1:=H) (2:=H0).
+(* A, x and y have been instantiated so this works *)
+match type of Eq with
+| _ = _ => idtac
+| _ => fail "specialize test failed: hypothesis Eq should be an equality at this point"
+end.
+Undo 2.
+
(*
(** strange behavior to inspect more precisely *)
@@ -40,7 +84,7 @@ specialize (Eq _ _ _ b H0). Undo.
(* 2) echoue moins lorsque zero premise de mangé *)
specialize eq_trans with (1:=Eq). (* mal typé !! *)
-(* 3) *)
+(* 3) Seems fixed.*)
specialize eq_trans with _ a b c. intros _.
(* Anomaly: Evar ?88 was not declared. Please report. *)
*)
@@ -72,3 +116,11 @@ intros.
specialize (H 1) as ->.
reflexivity.
Qed.
+
+(* A test from corn *)
+
+Goal (forall x y, x=0 -> y=0 -> True) -> True.
+intros.
+specialize (fun z => H 0 z eq_refl).
+exact (H 0 eq_refl).
+Qed.
diff --git a/test-suite/success/ssr_delayed_clear_rename.v b/test-suite/success/ssr_delayed_clear_rename.v
new file mode 100644
index 00000000..951e5aff
--- /dev/null
+++ b/test-suite/success/ssr_delayed_clear_rename.v
@@ -0,0 +1,5 @@
+Require Import ssreflect.
+Example foo (t t1 t2 : True) : True /\ True -> True -> True.
+Proof.
+move=>[{t1 t2 t} t1 t2] t.
+Abort.
diff --git a/test-suite/success/transparent_abstract.v b/test-suite/success/transparent_abstract.v
new file mode 100644
index 00000000..ff4509c4
--- /dev/null
+++ b/test-suite/success/transparent_abstract.v
@@ -0,0 +1,21 @@
+Class by_transparent_abstract {T} (x : T) := make_by_transparent_abstract : T.
+Hint Extern 0 (@by_transparent_abstract ?T ?x) => change T; transparent_abstract exact_no_check x : typeclass_instances.
+
+Goal True /\ True.
+Proof.
+ split.
+ transparent_abstract exact I using foo.
+ let x := (eval hnf in foo) in constr_eq x I.
+ let x := constr:(ltac:(constructor) : True) in
+ let T := type of x in
+ let x := constr:(_ : by_transparent_abstract x) in
+ let x := (eval cbv delta [by_transparent_abstract] in (let y : T := x in y)) in
+ pose x as x'.
+ simpl in x'.
+ let v := eval cbv [x'] in x' in tryif constr_eq v I then fail 0 else idtac.
+ hnf in x'.
+ let v := eval cbv [x'] in x' in tryif constr_eq v I then idtac else fail 0.
+ exact x'.
+Defined.
+Check eq_refl : I = foo.
+Eval compute in foo.
diff --git a/test-suite/success/unfold.v b/test-suite/success/unfold.v
index d595cbc2..de8aa252 100644
--- a/test-suite/success/unfold.v
+++ b/test-suite/success/unfold.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Test le Hint Unfold sur des var locales *)
diff --git a/test-suite/success/unidecls.v b/test-suite/success/unidecls.v
new file mode 100644
index 00000000..c4a1d7c2
--- /dev/null
+++ b/test-suite/success/unidecls.v
@@ -0,0 +1,121 @@
+Set Printing Universes.
+
+Module unidecls.
+ Universes a b.
+End unidecls.
+
+Universe a.
+
+Constraint a < unidecls.a.
+
+Print Universes.
+
+(** These are different universes *)
+Check Type@{a}.
+Check Type@{unidecls.a}.
+
+Check Type@{unidecls.b}.
+
+Fail Check Type@{unidecls.c}.
+
+Fail Check Type@{i}.
+Universe foo.
+Module Foo.
+ (** Already declared globaly: but universe names are scoped at the module level *)
+ Universe foo.
+ Universe bar.
+
+ Check Type@{Foo.foo}.
+ Definition bar := 0.
+End Foo.
+
+(** Already declared in the module *)
+Universe bar.
+
+(** Accessible outside the module: universe declarations are global *)
+Check Type@{bar}.
+Check Type@{Foo.bar}.
+
+Check Type@{Foo.foo}.
+(** The same *)
+Check Type@{foo}.
+Check Type@{Top.foo}.
+
+Universe secfoo.
+Section Foo'.
+ Fail Universe secfoo.
+ Universe secfoo2.
+ Check Type@{Foo'.secfoo2}.
+ Constraint secfoo2 < a.
+End Foo'.
+
+Check Type@{secfoo2}.
+Fail Check Type@{Foo'.secfoo2}.
+Fail Check eq_refl : Type@{secfoo2} = Type@{a}.
+
+(** Below, u and v are global, fixed universes *)
+Module Type Arg.
+ Universe u.
+ Parameter T: Type@{u}.
+End Arg.
+
+Module Fn(A : Arg).
+ Universes v.
+
+ Check Type@{A.u}.
+ Constraint A.u < v.
+
+ Definition foo : Type@{v} := nat.
+ Definition bar : Type@{A.u} := nat.
+
+ Fail Definition foo(A : Type@{v}) : Type@{A.u} := A.
+End Fn.
+
+Module ArgImpl : Arg.
+ Definition T := nat.
+End ArgImpl.
+
+Module ArgImpl2 : Arg.
+ Definition T := bool.
+End ArgImpl2.
+
+(** Two applications of the functor result in the exact same universes *)
+Module FnApp := Fn(ArgImpl).
+
+Check Type@{FnApp.v}.
+Check FnApp.foo.
+Check FnApp.bar.
+
+Check (eq_refl : Type@{ArgImpl.u} = Type@{ArgImpl2.u}).
+
+Module FnApp2 := Fn(ArgImpl).
+Check Type@{FnApp2.v}.
+Check FnApp2.foo.
+Check FnApp2.bar.
+
+Import ArgImpl2.
+(** Now u refers to ArgImpl.u and ArgImpl2.u *)
+Check FnApp2.bar.
+
+(** It can be shadowed *)
+Universe u.
+
+(** This refers to the qualified name *)
+Check FnApp2.bar.
+
+Constraint u = ArgImpl.u.
+Print Universes.
+
+Set Universe Polymorphism.
+
+Section PS.
+ Universe poly.
+
+ Definition id (A : Type@{poly}) (a : A) : A := a.
+End PS.
+(** The universe is polymorphic and discharged, does not persist *)
+Fail Check Type@{poly}.
+
+Print Universes.
+Check id nat.
+Check id@{Set}.
diff --git a/test-suite/success/unification.v b/test-suite/success/unification.v
index 296686e1..1ffc0267 100644
--- a/test-suite/success/unification.v
+++ b/test-suite/success/unification.v
@@ -43,7 +43,7 @@ Check (fun _h1 => (zenon_notall nat _ (fun _T_0 =>
(fun _h2 => (zenon_noteq _ _T_0 _h2))) _h1)).
-(* Core of an example submitted by Ralph Matthes (#849)
+(* Core of an example submitted by Ralph Matthes (BZ#849)
It used to fail because of the K-variable x in the type of "sum_rec ..."
which was not in the scope of the evar ?B. Solved by a head
@@ -131,7 +131,7 @@ try case nonemptyT_intro. (* check that it fails w/o anomaly *)
Abort.
(* Test handling of return type and when it is decided to make the
- predicate dependent or not - see "bug" #1851 *)
+ predicate dependent or not - see "bug" BZ#1851 *)
Goal forall X (a:X) (f':nat -> X), (exists f : nat -> X, True).
intros.
@@ -188,3 +188,14 @@ Proof.
apply idpath.
apply idpath.
Defined.
+
+(* An example where it is necessary to evar-normalize the instance of
+ an evar to evaluate if it is a pattern *)
+
+Check
+ let a := ?[P] in
+ fun (H : forall y (P : nat -> Prop), y = 0 -> P y)
+ x (p:x=0) =>
+ H ?[y] a p : x = 0.
+(* We have to solve "?P ?y[x] == x = 0" knowing from
+ "p : (x=0) == (?y[x] = 0)" that "?y := x" *)
diff --git a/test-suite/success/univers.v b/test-suite/success/univers.v
index 269359ae..28634045 100644
--- a/test-suite/success/univers.v
+++ b/test-suite/success/univers.v
@@ -20,8 +20,7 @@ intro P; pattern P.
apply lem2.
Abort.
-(* Check managing of universe constraints in inversion *)
-(* Bug report #855 *)
+(* Check managing of universe constraints in inversion (BZ#855) *)
Inductive dep_eq : forall X : Type, X -> X -> Prop :=
| intro_eq : forall (X : Type) (f : X), dep_eq X f f
@@ -40,7 +39,7 @@ Proof.
Abort.
-(* Submitted by Bas Spitters (bug report #935) *)
+(* Submitted by Bas Spitters (BZ#935) *)
(* This is a problem with the status of the type in LetIn: is it a
user-provided one or an inferred one? At the current time, the
@@ -76,4 +75,4 @@ End Ind.
Module Rec.
Record box_in : myType :=
BoxIn { coord :> nat * nat; _ : is_box_in_shape coord }.
-End Rec. \ No newline at end of file
+End Rec.
diff --git a/test-suite/success/univnames.v b/test-suite/success/univnames.v
index 048b53d2..fe3b8c1d 100644
--- a/test-suite/success/univnames.v
+++ b/test-suite/success/univnames.v
@@ -21,6 +21,17 @@ Inductive bla@{l k} : Type@{k} := blaI : Type@{l} -> bla.
Inductive blacopy@{k l} : Type@{k} := blacopyI : Type@{l} -> blacopy.
+Class Wrap A := wrap : A.
+
+Fail Instance bad@{} : Wrap Type := Type.
+
+Instance bad@{} : Wrap Type.
+Fail Proof Type.
+Abort.
+
+Instance bar@{u} : Wrap@{u} Set. Proof nat.
+
+
Monomorphic Universe g.
-Inductive blacopy'@{l} : Type@{g} := blacopy'I : Type@{l} -> blacopy'. \ No newline at end of file
+Inductive blacopy'@{l} : Type@{g} := blacopy'I : Type@{l} -> blacopy'.
diff --git a/test-suite/success/unshelve.v b/test-suite/success/unshelve.v
index 672222bd..a4fa544c 100644
--- a/test-suite/success/unshelve.v
+++ b/test-suite/success/unshelve.v
@@ -9,3 +9,11 @@ unshelve (refine (F _ _ _ _)).
+ exact (@eq_refl bool true).
+ exact (@eq_refl unit tt).
Qed.
+
+(* This was failing in 8.6, because of ?a:nat being wrongly duplicated *)
+
+Goal (forall a : nat, a = 0 -> True) -> True.
+intros F.
+unshelve (eapply (F _);clear F).
+2:reflexivity.
+Qed.
diff --git a/test-suite/success/vm_evars.v b/test-suite/success/vm_evars.v
new file mode 100644
index 00000000..2c8b099e
--- /dev/null
+++ b/test-suite/success/vm_evars.v
@@ -0,0 +1,23 @@
+Fixpoint iter {A} (n : nat) (f : A -> A) (x : A) :=
+match n with
+| 0 => x
+| S n => iter n f (f x)
+end.
+
+Goal nat -> True.
+Proof.
+intros n.
+evar (f : nat -> nat).
+cut (iter 10 f 0 = 0).
+vm_compute.
+intros; constructor.
+instantiate (f := (fun x => x)).
+reflexivity.
+Qed.
+
+Goal exists x, x = 5 + 5.
+Proof.
+ eexists.
+ vm_compute.
+ reflexivity.
+Qed.
diff --git a/test-suite/typeclasses/NewSetoid.v b/test-suite/typeclasses/NewSetoid.v
index 49f20a23..81c4a146 100644
--- a/test-suite/typeclasses/NewSetoid.v
+++ b/test-suite/typeclasses/NewSetoid.v
@@ -1,9 +1,11 @@
(************************************************************************)
-(* v * The Coq Proof Assistant / The Coq Development Team *)
-(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2016 *)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
-(* // * This file is distributed under the terms of the *)
-(* * GNU Lesser General Public License Version 2.1 *)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(* Certified Haskell Prelude.
diff --git a/test-suite/typeclasses/deftwice.v b/test-suite/typeclasses/deftwice.v
index 439782c9..13944770 100644
--- a/test-suite/typeclasses/deftwice.v
+++ b/test-suite/typeclasses/deftwice.v
@@ -6,4 +6,4 @@ Instance inhab_C : C Type := Inhab.
Variable full : forall A (X : C A), forall x : A, c x.
-Definition truc {A : Type} : Inhab A := (full _ _ _). \ No newline at end of file
+Definition truc {A : Type} : Inhab A := (full _ _ _).
diff --git a/test-suite/typeclasses/unification_delta.v b/test-suite/typeclasses/unification_delta.v
index 663a837f..51891243 100644
--- a/test-suite/typeclasses/unification_delta.v
+++ b/test-suite/typeclasses/unification_delta.v
@@ -43,4 +43,4 @@ Proof.
(* Breaks if too much delta in unification *)
rewrite H.
reflexivity.
-Qed. \ No newline at end of file
+Qed.