Hi,
I’m trying to prove some relational theorems in the latest version of Isabelle, using ProofGeneral. I have two inductively defined sets, plus, defined like so:
consts
plus :: "(nat * nat * nat) set"
inductive plus
intros
zero[intro!]: "(0, y, y) \<in> plus"
addition[intro!]: "z = x + y ==> (x, y, z) \<in> plus"
consts
succ :: "(nat * nat) set"
inductive succ
intros
addition[intro!]: "y = x + 1 ==> (x, y) \<in> succ"
Now, I’m trying to prove that (x + y) + z = x + (y + z) in relational form. To do this, I’m inducting on x. It would really help me if in the inductive conclusion, instead of having something like (Suc x, y, z) <in> plus, I had <exists>x’.succ(x, x’) /\ plus(x’, y, z) <in> plus.
I’ve proven in a seperate lemma marked with [simp] that plus(Suc x, y, z) = <exists>x’. succ(x, x’) /\ plus(x’, y, z). However, when I try to simplify the inductive conclusion using simp only: name_of_lemma I get an “empty” error.
What am I doing wrong?
Thanks.