From 251218905daea0838a3738466afa1c278bb3e81b Mon Sep 17 00:00:00 2001 From: Hugo Herbelin Date: Wed, 15 Oct 2014 15:48:16 +0200 Subject: Fixing a loop in proof reconstruction for congruence (#2447). Proofs of C t1..tn+1 = C t1..tn+1, even when the terms were syntactically the same, were built by composition of a proof of C t1..tn = C t1..tn with a proof of reflexivity of tn+1. The latter was reduced to showing C t1..tn = C u1..un for C u1..un the canonical representant of C t1..tn in its congruence class. But if some pair ti=ui was derivable by injectivity of the constructor C, it might go back to find a proof of C t1..tn+1 = C t1..tn+1 again, while a simple reflexivity proof was enough here. Not sure that the fix prevents any further loop in this part of the code though. --- plugins/cc/ccproof.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins/cc') diff --git a/plugins/cc/ccproof.ml b/plugins/cc/ccproof.ml index 6177f22f3..ba449e76d 100644 --- a/plugins/cc/ccproof.ml +++ b/plugins/cc/ccproof.ml @@ -116,7 +116,7 @@ let build_proof uf= in ptrans (ptrans pi pij) pj and constr_proof i t ipac= - if ipac.args=[] then + if ipac.args=[] || i=t then equal_proof i t else let npac=tail_pac ipac in -- cgit v1.2.3