Isabelle 在《伊莎贝尔》中多次使用组合战术
我发现自己正在解决一个目标,这个目标通过Isabelle 在《伊莎贝尔》中多次使用组合战术,isabelle,Isabelle,我发现自己正在解决一个目标,这个目标通过safe分解为32个子目标。这是一个相当代数化的目标,所以总的来说,我需要使用argo、代数和auto。我想知道是否有一种方法可以指定auto应该被应用,比如说2次,然后代数10次等等。我将来应该在哪里寻找这种语法?它是eisbach的一部分吗?在$ISABELLE\u HOME/src/Pure/tactical.ML中有重复的战术决定,我从来没有使用过它,所以我不能100%确定它是你需要的 或者,您的功能可以这样做: theory NTimes imp
safe
分解为32个子目标。这是一个相当代数化的目标,所以总的来说,我需要使用argo、代数和auto。我想知道是否有一种方法可以指定auto应该被应用,比如说2次,然后代数10次等等。我将来应该在哪里寻找这种语法?它是eisbach的一部分吗?在$ISABELLE\u HOME/src/Pure/tactical.ML中有重复的战术决定,我从来没有使用过它,所以我不能100%确定它是你需要的
或者,您的功能可以这样做:
theory NTimes
imports
Main
"~~/src/HOL/Eisbach/Eisbach"
begin
ML ‹
infixr 2 TIMES
fun 0 TIMES _ = all_tac
| n TIMES tac = tac THEN (n - 1) TIMES tac
›
notepad
begin
fix A B C D
have test1: "A ∧ B ∧ C ∧ D ⟹ True"
apply (tactic ‹3 TIMES eresolve_tac @{context} [@{thm conjE}] 1›)
apply (rule TrueI)
done
fix E
have test2: "A ∧ B ∧ C ∧ D ∧ E ⟹ True"
apply (tactic ‹2 TIMES 2 TIMES eresolve_tac @{context} [@{thm conjE}] 1›)
apply (rule TrueI)
done
end
(* For good examples for working
with higher order methods in ML see $ISABELLE_HOME/src/HOL/Eisbach/Eisbach.thy *)
method_setup ntimes = ‹
Scan.lift Parse.nat -- Method.text_closure >>
(fn (n, closure) => fn ctxt => fn facts =>
let
val tac = method_evaluate closure ctxt facts
in
SIMPLE_METHOD (n TIMES tac) facts
end)
›
notepad
begin
fix A B C D
have test1: "A ∧ B ∧ C ∧ D ⟹ True"
apply (ntimes 3 ‹erule conjE›)
apply (rule TrueI)
done
fix E
have test2: "A ∧ B ∧ C ∧ D ∧ E ⟹ True"
apply (ntimes 2 ‹ntimes 2 ‹erule conjE››)
apply (rule TrueI)
done
have test3: "A ∧ B ∧ C ∧ D ∧ E ⟹ True"
apply (ntimes 3 ‹erule conjE›)
apply (rule TrueI)
done
have test4: "A = A" "B = B" "C = C"
apply -
apply (ntimes 2 ‹fastforce›)
apply (rule refl)
done
(* in some examples one can instead use subgoal ranges *)
have test5: "A = A" "B = B" "C = C"
apply -
apply (fastforce+)[2]
apply (rule refl)
done
end
end
我不是Isabelle/ML编程方面的专家,所以这段代码的质量可能很低,但我希望这对您来说是一个很好的起点