diff options
author | 2014-10-15 15:48:16 +0200 | |
---|---|---|
committer | 2014-10-17 12:41:14 +0200 | |
commit | 251218905daea0838a3738466afa1c278bb3e81b (patch) | |
tree | 88170ea32c1b36b4e0ab5a4c0e47f34930421b90 /plugins/cc | |
parent | a53b44aa042cfded28c34205074f194de7e2e4ee (diff) |
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.
Diffstat (limited to 'plugins/cc')
-rw-r--r-- | plugins/cc/ccproof.ml | 2 |
1 files changed, 1 insertions, 1 deletions
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 |