Open yutakang opened 4 years ago
Producing this structural proof script is too much work for little gain.
lemma "itrev xs [] = rev xs"
(*
apply (subgoal_tac "⋀Nil. itrev xs Nil = rev xs @ Nil")
apply fastforce
apply (induct xs)
apply auto
done
*)
proof -
{
fix ys
have "itrev xs ys = rev xs @ ys"
apply(induct xs arbitrary: ys)
apply auto
done
}
from this
show "itrev xs [] = rev xs"
apply fastforce
done
qed
specialisation: goal-oriented conjecturing (top-down).
datatype nat = zero ("0") | Suc nat
primrec plus:: "nat ⇒ nat ⇒ nat" where
"plus zero y = y"
| "plus (Suc x) y = Suc (plus x y)"
lemma 4: "plus x (plus x x) = plus (plus x x) x"
(*try_hard fails*)
apply(subgoal_tac "⋀x y. plus x (plus y y) = plus (plus x y) y")
apply fastforce
apply(induct_tac x)
apply auto
done
How do we mutate proof goals to produce conjectures?
How do we mutate proof goals to produce conjectures?
- term generalisation.
- extension (done in our CICM2018 paper)
- one-step unfolding
So far, these are done by ML functions. We should improve SeLFiE to make these.
Prod/TIP_prop_09.thy drop_succ
usesdrop_nil
.)Prod/TIP_prop_09.thy drop_comm
usesdrop_succ
. But this is not an ab)