abella-prover / abella

An interactive theorem prover based on lambda-tree syntax
https://abella-prover.org/
GNU General Public License v3.0
90 stars 18 forks source link

Unfolding named clauses assumes range restriction invalidly #33

Closed chaudhuri closed 9 years ago

chaudhuri commented 9 years ago

Consider this input:

sig bad.
kind i type.
type a,b1,b2,c i.
type p i -> i -> o. 
----
module bad.
%:pab1:
p a b1.
%:pb2c:
p b2 c.
%:trans:
p X Z :- p X Y, p Y Z.
----
Specification "bad".   
Theorem foo : {p a c}.
unfold trans. search. search.

The issue is that after the unfold we get two subgoals, one with {p a ?1} and the other with {p ?1 c}. Since logic variables in different subgoals have nothing to do with each other, each subgoal is individually proved.

The expected result of the unfold is exists L, {p a L} /\ {p L c}.

This bug is reported by Claudio Sacerdoti Coen.