[isabelle] A beginner's questionu
I am just starting with Isabelle, my intention is to prove some simple
theorems of simply-typed lambda (from Pierce's TAPL book) calculus using
I am using the tutorial and the isar reference as guides (and the
I am starting nice and easy trying to do the determinism proof for a
very simple language of arithmetic expressions.
So far I have defined my datatype and the step by step semantics
relation, and I have formulated my theorem (I've attached the code as I
have it so far).
On my paper proof, I would proceed by induction on the structure of the
step relation but I don't know how to proceed in this case (apply (rule
step.induct) confuses me).
What I need is some help to start, and hopefully be able to keep the
How do I approach this proof? (are there any examples that I should check?)
Thanks in advance,
datatype arith =
| Succ "arith"
| Pred "arith"
datatype val =
| V_Succ "val"
value "Pred Z"
value "Succ (Pred Z)"
inductive isvalue :: "arith \<Rightarrow> bool" where
v_z : "isvalue Z" |
v_s : "isvalue M ==> isvalue (Succ M)"
inductive step :: "arith \<Rightarrow> arith \<Rightarrow> bool" ("_\<down>_") where
s_succ : "m \<down> m' ==> (Succ m) \<down> (Succ m')" |
s_pred_zero : "(Pred Z) \<down> Z" |
s_pred : "m \<down> m' ==> (Pred m) \<down> (Pred m')" |
s_pred_succ : "isvalue v ==> (Pred(Succ v)) \<down> v" |
(* I add these rules because I don't know how to
proove the theorem that values don't step, so
values have to step to themselves *)
s_z [simp] : "Z \<down> Z"
(* s_val : "isvalue v ==> v \<down> v" *)
theorem det: shows "(step m n_1) \<and> (step m n_2) ==> (n_1 = n_2)"
(* apply (rule step.induct) \<leftarrow> this doesn't do what I expected *)
This archive was generated by a fusion of
Pipermail (Mailman edition) and