Isabelle 如何解除引理
下面是一个具有确定性关系的示例数据类型Isabelle 如何解除引理,isabelle,Isabelle,下面是一个具有确定性关系的示例数据类型 datatype ty1 = A | B | C ty1 | D ty1 inductive rel1 where "rel1 A (C B)" | "rel1 (C B) (D A)" lemma rel1_det: "rel1 x y ⟹ rel1 x z ⟹ y = z" by (elim rel1.cases; auto) 我正试图为以下类型提升引理: datatype 'a ty2 = E 'a | F 'a abbrevia
datatype ty1 = A | B | C ty1 | D ty1
inductive rel1 where
"rel1 A (C B)"
| "rel1 (C B) (D A)"
lemma rel1_det:
"rel1 x y ⟹ rel1 x z ⟹ y = z"
by (elim rel1.cases; auto)
我正试图为以下类型提升引理:
datatype 'a ty2 = E 'a | F 'a
abbreviation "rel2 ≡ rel_ty2 rel1"
lemma rel2_det:
"rel2 x y ⟹ rel2 x z ⟹ y = z"
apply (cases x; cases y; auto)
apply (metis rel1_det right_uniqueD right_uniqueI ty2.rel_intros(1) ty2.right_unique_rel)
by (metis rel1_det right_uniqueD right_uniqueI ty2.rel_intros(2) ty2.right_unique_rel)
但证据很难看。我想可以使用
转移
方法、提升包或其他方法来简化。你能建议如何使用它吗?我不知道如何使用传输包来证明这一点;但是,如果您使用库中的谓词right\u unique
以及数据类型包免费提供的规则,则很容易证明:
lemma right_unique_rel1: "right_unique rel1"
by (auto simp: right_unique_def elim: rel1.cases)
lemma right_unique_rel2: "right_unique rel2"
by (intro ty2.right_unique_rel right_unique_rel1)