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编程方面的专家,所以这段代码的质量可能很低,但我希望这对您来说是一个很好的起点