| author | wenzelm | 
| Wed, 02 Oct 2019 14:45:37 +0200 | |
| changeset 70780 | 034742453594 | 
| parent 69085 | 9999d7823b8f | 
| permissions | -rw-r--r-- | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Imperative_HOL/ex/SatChecker.thy  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
2  | 
Author: Lukas Bulwahn, TU Muenchen  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
4  | 
|
| 63167 | 5  | 
section \<open>An efficient checker for proofs from a SAT solver\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
7  | 
theory SatChecker  | 
| 
66453
 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 
wenzelm 
parents: 
63167 
diff
changeset
 | 
8  | 
imports "HOL-Library.RBT_Impl" Sorted_List "../Imperative_HOL"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
9  | 
begin  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
10  | 
|
| 63167 | 11  | 
section\<open>General settings and functions for our representation of clauses\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
12  | 
|
| 63167 | 13  | 
subsection\<open>Types for Literals, Clauses and ProofSteps\<close>  | 
14  | 
text \<open>We encode Literals as integers and Clauses as sorted Lists.\<close>  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
15  | 
|
| 42463 | 16  | 
type_synonym ClauseId = nat  | 
17  | 
type_synonym Lit = int  | 
|
18  | 
type_synonym Clause = "Lit list"  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
19  | 
|
| 63167 | 20  | 
text \<open>This resembles exactly to Isat's Proof Steps\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
21  | 
|
| 42463 | 22  | 
type_synonym Resolvants = "ClauseId * (Lit * ClauseId) list"  | 
| 58310 | 23  | 
datatype ProofStep =  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
24  | 
ProofDone bool  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
25  | 
| Root ClauseId Clause  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
26  | 
| Conflict ClauseId Resolvants  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
27  | 
| Delete ClauseId  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
28  | 
| Xstep ClauseId ClauseId  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
29  | 
|
| 63167 | 30  | 
subsection\<open>Interpretation of Literals, Clauses, and an array of Clauses\<close>  | 
31  | 
text \<open>Specific definitions for Literals as integers\<close>  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
32  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
33  | 
definition compl :: "Lit \<Rightarrow> Lit"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
34  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
35  | 
"compl a = -a"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
37  | 
definition interpLit :: "(nat \<Rightarrow> bool) \<Rightarrow> Lit \<Rightarrow> bool"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
38  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
39  | 
"interpLit assgnmt lit = (if lit > 0 then assgnmt (nat lit) else (if (lit < 0) then \<not> (assgnmt (nat (- lit))) else undefined))"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
40  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
41  | 
lemma interpLit_compl[simp]:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
42  | 
assumes lit_not_zero: "lit \<noteq> 0"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
43  | 
shows "interpLit a (compl lit) = (\<not> interpLit a lit)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
44  | 
unfolding interpLit_def compl_def using lit_not_zero by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
45  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
46  | 
lemma compl_compl_is_id[simp]:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
47  | 
"compl (compl x) = x"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
48  | 
unfolding compl_def by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
49  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
50  | 
lemma compl_not_zero[simp]:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
51  | 
"(compl x \<noteq> 0) = (x \<noteq> 0)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
52  | 
unfolding compl_def by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
53  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
54  | 
lemma compl_exists: "\<exists>l'. l = compl l'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
55  | 
unfolding compl_def by arith  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
56  | 
|
| 63167 | 57  | 
text \<open>Specific definitions for Clauses as sorted lists\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
58  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
59  | 
definition interpClause :: "(nat \<Rightarrow> bool) \<Rightarrow> Clause \<Rightarrow> bool"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
60  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
61  | 
"interpClause assgnmt cl = (\<exists> l \<in> set cl. interpLit assgnmt l)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
62  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
63  | 
lemma interpClause_empty[simp]:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
64  | 
"interpClause a [] = False"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
65  | 
unfolding interpClause_def by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
66  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
67  | 
lemma interpClause_sort[simp]: "interpClause a (sort clause) = interpClause a clause"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
68  | 
unfolding interpClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
69  | 
by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
70  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
71  | 
lemma interpClause_remdups[simp]: "interpClause a (remdups clause) = interpClause a clause"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
72  | 
unfolding interpClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
73  | 
by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
74  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
75  | 
definition  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
76  | 
"inconsistent cs = (\<forall>a.\<exists>c\<in>set cs. \<not> interpClause a c)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
77  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
78  | 
lemma interpClause_resolvants':  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
79  | 
assumes lit_not_zero: "lit \<noteq> 0"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
80  | 
assumes resolv_clauses: "lit \<in> cli" "compl lit \<in> clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
81  | 
assumes interp: "\<exists>x \<in> cli. interpLit a x" "\<exists>x \<in> clj. interpLit a x"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
82  | 
  shows "\<exists>x \<in> (cli - {lit} \<union> (clj - {compl lit})). interpLit a x"
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
83  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
84  | 
  from resolv_clauses interp have "(\<exists>l \<in> cli - {lit}. interpLit a l) \<or> interpLit a lit"
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
85  | 
    "(\<exists>l \<in> clj - {compl lit}. interpLit a l) \<or> interpLit a (compl lit)" by auto
 | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
86  | 
with lit_not_zero show ?thesis by (fastforce simp add: bex_Un)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
87  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
88  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
89  | 
lemma interpClause_resolvants:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
90  | 
assumes lit_not_zero: "lit \<noteq> 0"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
91  | 
assumes sorted_and_distinct: "sorted cli" "distinct cli" "sorted clj" "distinct clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
92  | 
assumes resolv_clauses: "lit \<in> set cli" "compl lit \<in> set clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
93  | 
assumes interp: "interpClause a cli" "interpClause a clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
94  | 
shows "interpClause a (merge (remove lit cli) (remove (compl lit) clj))"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
95  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
96  | 
from lit_not_zero resolv_clauses interp sorted_and_distinct show ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
97  | 
unfolding interpClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
98  | 
using interpClause_resolvants' by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
99  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
100  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
101  | 
definition correctClause :: "Clause list \<Rightarrow> Clause \<Rightarrow> bool"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
102  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
103  | 
"correctClause rootcls cl = (\<forall>a. (\<forall>rcl \<in> set rootcls. interpClause a rcl) \<longrightarrow> (interpClause a cl))"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
104  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
105  | 
lemma correctClause_resolvants:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
106  | 
assumes lit_not_zero: "lit \<noteq> 0"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
107  | 
assumes sorted_and_distinct: "sorted cli" "distinct cli" "sorted clj" "distinct clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
108  | 
assumes resolv_clauses: "lit \<in> set cli" "compl lit \<in> set clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
109  | 
assumes correct: "correctClause r cli" "correctClause r clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
110  | 
shows "correctClause r (merge (remove lit cli) (remove (compl lit) clj))"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
111  | 
using assms interpClause_resolvants unfolding correctClause_def by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
112  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
113  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
114  | 
lemma implies_empty_inconsistent:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
115  | 
"correctClause cs [] \<Longrightarrow> inconsistent cs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
116  | 
unfolding inconsistent_def correctClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
117  | 
by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
118  | 
|
| 63167 | 119  | 
text \<open>Specific definition for derived clauses in the Array\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
120  | 
|
| 37717 | 121  | 
definition  | 
| 61076 | 122  | 
  array_ran :: "('a::heap) option array \<Rightarrow> heap \<Rightarrow> 'a set" where
 | 
| 
37806
 
a7679be14442
qualified names for (really) all array operations
 
haftmann 
parents: 
37805 
diff
changeset
 | 
123  | 
  "array_ran a h = {e. Some e \<in> set (Array.get h a)}"
 | 
| 63167 | 124  | 
\<comment> \<open>FIXME\<close>  | 
| 37717 | 125  | 
|
| 
37806
 
a7679be14442
qualified names for (really) all array operations
 
haftmann 
parents: 
37805 
diff
changeset
 | 
126  | 
lemma array_ranI: "\<lbrakk> Some b = Array.get h a ! i; i < Array.length h a \<rbrakk> \<Longrightarrow> b \<in> array_ran a h"  | 
| 
37719
 
271ecd4fb9f9
moved "open" operations from Heap.thy to Array.thy and Ref.thy
 
haftmann 
parents: 
37717 
diff
changeset
 | 
127  | 
unfolding array_ran_def Array.length_def by simp  | 
| 37717 | 128  | 
|
129  | 
lemma array_ran_upd_array_Some:  | 
|
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
130  | 
assumes "cl \<in> array_ran a (Array.update a i (Some b) h)"  | 
| 37717 | 131  | 
shows "cl \<in> array_ran a h \<or> cl = b"  | 
132  | 
proof -  | 
|
| 69085 | 133  | 
have "set ((Array.get h a)[i := Some b]) \<subseteq> insert (Some b) (set (Array.get h a))" by (rule set_update_subset_insert)  | 
| 37717 | 134  | 
with assms show ?thesis  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
135  | 
unfolding array_ran_def Array.update_def by fastforce  | 
| 37717 | 136  | 
qed  | 
137  | 
||
138  | 
lemma array_ran_upd_array_None:  | 
|
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
139  | 
assumes "cl \<in> array_ran a (Array.update a i None h)"  | 
| 37717 | 140  | 
shows "cl \<in> array_ran a h"  | 
141  | 
proof -  | 
|
| 69085 | 142  | 
have "set ((Array.get h a)[i := None]) \<subseteq> insert None (set (Array.get h a))" by (rule set_update_subset_insert)  | 
| 37717 | 143  | 
with assms show ?thesis  | 
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
144  | 
unfolding array_ran_def Array.update_def by auto  | 
| 37717 | 145  | 
qed  | 
146  | 
||
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
147  | 
definition correctArray :: "Clause list \<Rightarrow> Clause option array \<Rightarrow> heap \<Rightarrow> bool"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
148  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
149  | 
"correctArray rootcls a h =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
150  | 
(\<forall>cl \<in> array_ran a h. correctClause rootcls cl \<and> sorted cl \<and> distinct cl)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
151  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
152  | 
lemma correctArray_update:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
153  | 
assumes "correctArray rcs a h"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
154  | 
assumes "correctClause rcs c" "sorted c" "distinct c"  | 
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
155  | 
shows "correctArray rcs a (Array.update a i (Some c) h)"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
156  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
157  | 
unfolding correctArray_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
158  | 
by (auto dest:array_ran_upd_array_Some)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
159  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
160  | 
lemma correctClause_mono:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
161  | 
assumes "correctClause rcs c"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
162  | 
assumes "set rcs \<subseteq> set rcs'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
163  | 
shows "correctClause rcs' c"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
164  | 
using assms unfolding correctClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
165  | 
by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
166  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
167  | 
|
| 63167 | 168  | 
section\<open>Improved version of SatChecker\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
169  | 
|
| 63167 | 170  | 
text\<open>This version just uses a single list traversal.\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
171  | 
|
| 63167 | 172  | 
subsection\<open>Function definitions\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
173  | 
|
| 37726 | 174  | 
primrec res_mem :: "Lit \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
175  | 
where  | 
| 68028 | 176  | 
"res_mem l [] = raise STR ''MiniSatChecked.res_thm: Cannot find literal''"  | 
| 37792 | 177  | 
| "res_mem l (x#xs) = (if (x = l) then return xs else do { v \<leftarrow> res_mem l xs; return (x # v) })"
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
178  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
179  | 
fun resolve1 :: "Lit \<Rightarrow> Clause \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
180  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
181  | 
"resolve1 l (x#xs) (y#ys) =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
182  | 
(if (x = l) then return (merge xs (y#ys))  | 
| 37792 | 183  | 
  else (if (x < y) then do { v \<leftarrow> resolve1 l xs (y#ys); return (x # v) }
 | 
184  | 
  else (if (x > y) then do { v \<leftarrow> resolve1 l (x#xs) ys; return (y # v) }
 | 
|
185  | 
  else do { v \<leftarrow> resolve1 l xs ys; return (x # v) })))"
 | 
|
| 68028 | 186  | 
| "resolve1 l [] ys = raise STR ''MiniSatChecked.res_thm: Cannot find literal''"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
187  | 
| "resolve1 l xs [] = res_mem l xs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
188  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
189  | 
fun resolve2 :: "Lit \<Rightarrow> Clause \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
190  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
191  | 
"resolve2 l (x#xs) (y#ys) =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
192  | 
(if (y = l) then return (merge (x#xs) ys)  | 
| 37792 | 193  | 
  else (if (x < y) then do { v \<leftarrow> resolve2 l xs (y#ys); return (x # v) }
 | 
194  | 
  else (if (x > y) then do { v \<leftarrow> resolve2 l (x#xs) ys; return (y # v) }
 | 
|
195  | 
  else do { v \<leftarrow> resolve2 l xs ys; return (x # v) })))"
 | 
|
| 68028 | 196  | 
| "resolve2 l xs [] = raise STR ''MiniSatChecked.res_thm: Cannot find literal''"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
197  | 
| "resolve2 l [] ys = res_mem l ys"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
198  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
199  | 
fun res_thm' :: "Lit \<Rightarrow> Clause \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
200  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
201  | 
"res_thm' l (x#xs) (y#ys) =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
202  | 
(if (x = l \<or> x = compl l) then resolve2 (compl x) xs (y#ys)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
203  | 
else (if (y = l \<or> y = compl l) then resolve1 (compl y) (x#xs) ys  | 
| 62026 | 204  | 
else (if (x < y) then (res_thm' l xs (y#ys)) \<bind> (\<lambda>v. return (x # v))  | 
205  | 
else (if (x > y) then (res_thm' l (x#xs) ys) \<bind> (\<lambda>v. return (y # v))  | 
|
206  | 
else (res_thm' l xs ys) \<bind> (\<lambda>v. return (x # v))))))"  | 
|
| 68028 | 207  | 
| "res_thm' l [] ys = raise STR ''MiniSatChecked.res_thm: Cannot find literal''"  | 
208  | 
| "res_thm' l xs [] = raise STR ''MiniSatChecked.res_thm: Cannot find literal''"  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
209  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
210  | 
declare res_mem.simps [simp del] resolve1.simps [simp del] resolve2.simps [simp del] res_thm'.simps [simp del]  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
211  | 
|
| 63167 | 212  | 
subsection \<open>Proofs about these functions\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
213  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
214  | 
lemma res_mem:  | 
| 40671 | 215  | 
assumes "effect (res_mem l xs) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
216  | 
shows "l \<in> set xs \<and> r = remove1 l xs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
217  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
218  | 
proof (induct xs arbitrary: r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
219  | 
case Nil  | 
| 40671 | 220  | 
thus ?case unfolding res_mem.simps by (auto elim: effect_raiseE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
221  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
222  | 
case (Cons x xs')  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
223  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
224  | 
unfolding res_mem.simps  | 
| 40671 | 225  | 
by (elim effect_raiseE effect_returnE effect_ifE effect_bindE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
226  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
227  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
228  | 
lemma resolve1_Inv:  | 
| 40671 | 229  | 
assumes "effect (resolve1 l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
230  | 
shows "l \<in> set xs \<and> r = merge (remove1 l xs) ys"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
231  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
232  | 
proof (induct xs ys arbitrary: r rule: resolve1.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
233  | 
case (1 l x xs y ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
234  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
235  | 
unfolding resolve1.simps  | 
| 40671 | 236  | 
by (elim effect_bindE effect_ifE effect_returnE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
237  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
238  | 
case (2 l ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
239  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
240  | 
unfolding resolve1.simps  | 
| 40671 | 241  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
242  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
243  | 
case (3 l v va r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
244  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
245  | 
unfolding resolve1.simps  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
246  | 
by (fastforce dest!: res_mem)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
247  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
248  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
249  | 
lemma resolve2_Inv:  | 
| 40671 | 250  | 
assumes "effect (resolve2 l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
251  | 
shows "l \<in> set ys \<and> r = merge xs (remove1 l ys)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
252  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
253  | 
proof (induct xs ys arbitrary: r rule: resolve2.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
254  | 
case (1 l x xs y ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
255  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
256  | 
unfolding resolve2.simps  | 
| 40671 | 257  | 
by (elim effect_bindE effect_ifE effect_returnE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
258  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
259  | 
case (2 l ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
260  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
261  | 
unfolding resolve2.simps  | 
| 40671 | 262  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
263  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
264  | 
case (3 l v va r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
265  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
266  | 
unfolding resolve2.simps  | 
| 46150 | 267  | 
by (fastforce dest!: res_mem)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
268  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
269  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
270  | 
lemma res_thm'_Inv:  | 
| 40671 | 271  | 
assumes "effect (res_thm' l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
272  | 
shows "\<exists>l'. (l' \<in> set xs \<and> compl l' \<in> set ys \<and> (l' = compl l \<or> l' = l)) \<and> r = merge (remove1 l' xs) (remove1 (compl l') ys)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
273  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
274  | 
proof (induct xs ys arbitrary: r rule: res_thm'.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
275  | 
case (1 l x xs y ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
276  | 
(* There are five cases for res_thm: We will consider them one after another: *)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
277  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
278  | 
assume cond: "x = l \<or> x = compl l"  | 
| 40671 | 279  | 
assume resolve2: "effect (resolve2 (compl x) xs (y # ys)) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
280  | 
from resolve2_Inv [OF resolve2] cond have ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
281  | 
apply -  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
282  | 
by (rule exI[of _ "x"]) fastforce  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
283  | 
} moreover  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
284  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
285  | 
assume cond: "\<not> (x = l \<or> x = compl l)" "y = l \<or> y = compl l"  | 
| 40671 | 286  | 
assume resolve1: "effect (resolve1 (compl y) (x # xs) ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
287  | 
from resolve1_Inv [OF resolve1] cond have ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
288  | 
apply -  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
289  | 
by (rule exI[of _ "compl y"]) fastforce  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
290  | 
} moreover  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
291  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
292  | 
fix r'  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
293  | 
assume cond: "\<not> (x = l \<or> x = compl l)" "\<not> (y = l \<or> y = compl l)" "x < y"  | 
| 40671 | 294  | 
assume res_thm: "effect (res_thm' l xs (y # ys)) h h' r'"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
295  | 
assume return: "r = x # r'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
296  | 
from "1.hyps"(1) [OF cond res_thm] cond return have ?case by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
297  | 
} moreover  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
298  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
299  | 
fix r'  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
300  | 
assume cond: "\<not> (x = l \<or> x = compl l)" "\<not> (y = l \<or> y = compl l)" "\<not> x < y" "y < x"  | 
| 40671 | 301  | 
assume res_thm: "effect (res_thm' l (x # xs) ys) h h' r'"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
302  | 
assume return: "r = y # r'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
303  | 
from "1.hyps"(2) [OF cond res_thm] cond return have ?case by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
304  | 
} moreover  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
305  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
306  | 
fix r'  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
307  | 
assume cond: "\<not> (x = l \<or> x = compl l)" "\<not> (y = l \<or> y = compl l)" "\<not> x < y" "\<not> y < x"  | 
| 40671 | 308  | 
assume res_thm: "effect (res_thm' l xs ys) h h' r'"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
309  | 
assume return: "r = x # r'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
310  | 
from "1.hyps"(3) [OF cond res_thm] cond return have ?case by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
311  | 
} moreover  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
312  | 
note "1.prems"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
313  | 
ultimately show ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
314  | 
unfolding res_thm'.simps  | 
| 40671 | 315  | 
apply (elim effect_bindE effect_ifE effect_returnE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
316  | 
apply simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
317  | 
apply simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
318  | 
apply simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
319  | 
apply simp  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
320  | 
apply fastforce  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
321  | 
done  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
322  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
323  | 
case (2 l ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
324  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
325  | 
unfolding res_thm'.simps  | 
| 40671 | 326  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
327  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
328  | 
case (3 l v va r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
329  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
330  | 
unfolding res_thm'.simps  | 
| 40671 | 331  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
332  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
333  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
334  | 
lemma res_mem_no_heap:  | 
| 40671 | 335  | 
assumes "effect (res_mem l xs) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
336  | 
shows "h = h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
337  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
338  | 
apply (induct xs arbitrary: r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
339  | 
unfolding res_mem.simps  | 
| 40671 | 340  | 
apply (elim effect_raiseE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
341  | 
apply auto  | 
| 40671 | 342  | 
apply (elim effect_ifE effect_bindE effect_raiseE effect_returnE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
343  | 
apply auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
344  | 
done  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
345  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
346  | 
lemma resolve1_no_heap:  | 
| 40671 | 347  | 
assumes "effect (resolve1 l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
348  | 
shows "h = h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
349  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
350  | 
apply (induct xs ys arbitrary: r rule: resolve1.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
351  | 
unfolding resolve1.simps  | 
| 40671 | 352  | 
apply (elim effect_bindE effect_ifE effect_returnE effect_raiseE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
353  | 
apply (auto simp add: res_mem_no_heap)  | 
| 40671 | 354  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
355  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
356  | 
lemma resolve2_no_heap:  | 
| 40671 | 357  | 
assumes "effect (resolve2 l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
358  | 
shows "h = h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
359  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
360  | 
apply (induct xs ys arbitrary: r rule: resolve2.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
361  | 
unfolding resolve2.simps  | 
| 40671 | 362  | 
apply (elim effect_bindE effect_ifE effect_returnE effect_raiseE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
363  | 
apply (auto simp add: res_mem_no_heap)  | 
| 40671 | 364  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
365  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
366  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
367  | 
lemma res_thm'_no_heap:  | 
| 40671 | 368  | 
assumes "effect (res_thm' l xs ys) h h' r"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
369  | 
shows "h = h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
370  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
371  | 
proof (induct xs ys arbitrary: r rule: res_thm'.induct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
372  | 
case (1 l x xs y ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
373  | 
thus ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
374  | 
unfolding res_thm'.simps  | 
| 40671 | 375  | 
by (elim effect_bindE effect_ifE effect_returnE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
376  | 
(auto simp add: resolve1_no_heap resolve2_no_heap)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
377  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
378  | 
case (2 l ys r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
379  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
380  | 
unfolding res_thm'.simps  | 
| 40671 | 381  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
382  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
383  | 
case (3 l v va r)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
384  | 
thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
385  | 
unfolding res_thm'.simps  | 
| 40671 | 386  | 
by (elim effect_raiseE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
387  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
388  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
389  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
390  | 
lemma res_thm'_Inv2:  | 
| 40671 | 391  | 
assumes res_thm: "effect (res_thm' l xs ys) h h' rcl"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
392  | 
assumes l_not_null: "l \<noteq> 0"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
393  | 
assumes ys: "correctClause r ys \<and> sorted ys \<and> distinct ys"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
394  | 
assumes xs: "correctClause r xs \<and> sorted xs \<and> distinct xs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
395  | 
shows "correctClause r rcl \<and> sorted rcl \<and> distinct rcl"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
396  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
397  | 
from res_thm'_Inv [OF res_thm] xs ys l_not_null show ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
398  | 
apply (auto simp add: sorted_remove1)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
399  | 
unfolding correctClause_def  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
400  | 
apply (auto simp add: remove1_eq_remove)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
401  | 
prefer 2  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
402  | 
apply (rule interpClause_resolvants)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
403  | 
apply simp_all  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
404  | 
apply (insert compl_exists [of l])  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
405  | 
apply auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
406  | 
apply (rule interpClause_resolvants)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
407  | 
apply simp_all  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
408  | 
done  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
409  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
410  | 
|
| 63167 | 411  | 
subsection \<open>res_thm and doProofStep\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
412  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
413  | 
definition get_clause :: "Clause option array \<Rightarrow> ClauseId \<Rightarrow> Clause Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
414  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
415  | 
"get_clause a i =  | 
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
416  | 
       do { c \<leftarrow> Array.nth a i;
 | 
| 68028 | 417  | 
(case c of None \<Rightarrow> raise STR ''Clause not found''  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
418  | 
| Some x \<Rightarrow> return x)  | 
| 37792 | 419  | 
}"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
420  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
421  | 
|
| 37726 | 422  | 
primrec res_thm2 :: "Clause option array \<Rightarrow> (Lit * ClauseId) \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
423  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
424  | 
"res_thm2 a (l, j) cli =  | 
| 68028 | 425  | 
( if l = 0 then raise STR ''Illegal literal''  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
426  | 
else  | 
| 37792 | 427  | 
     do { clj \<leftarrow> get_clause a j;
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
428  | 
res_thm' l cli clj  | 
| 37792 | 429  | 
})"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
430  | 
|
| 37709 | 431  | 
primrec  | 
432  | 
  foldM :: "('a \<Rightarrow> 'b \<Rightarrow> 'b Heap) \<Rightarrow> 'a list \<Rightarrow> 'b \<Rightarrow> 'b Heap"
 | 
|
433  | 
where  | 
|
434  | 
"foldM f [] s = return s"  | 
|
| 62026 | 435  | 
| "foldM f (x#xs) s = f x s \<bind> foldM f xs"  | 
| 37709 | 436  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
437  | 
fun doProofStep2 :: "Clause option array \<Rightarrow> ProofStep \<Rightarrow> Clause list \<Rightarrow> Clause list Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
438  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
439  | 
"doProofStep2 a (Conflict saveTo (i, rs)) rcs =  | 
| 37792 | 440  | 
  do {
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
441  | 
cli \<leftarrow> get_clause a i;  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
442  | 
result \<leftarrow> foldM (res_thm2 a) rs cli;  | 
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
443  | 
Array.upd saveTo (Some result) a;  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
444  | 
return rcs  | 
| 37792 | 445  | 
}"  | 
| 
37798
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
446  | 
| "doProofStep2 a (Delete cid) rcs = do { Array.upd cid None a; return rcs }"
 | 
| 
 
0b0570445a2a
proper merge of operation changes and generic do-syntax
 
haftmann 
parents: 
37797 
diff
changeset
 | 
447  | 
| "doProofStep2 a (Root cid clause) rcs = do { Array.upd cid (Some (remdups (sort clause))) a; return (clause # rcs) }"
 | 
| 68028 | 448  | 
| "doProofStep2 a (Xstep cid1 cid2) rcs = raise STR ''MiniSatChecked.doProofStep: Xstep constructor found.''"  | 
449  | 
| "doProofStep2 a (ProofDone b) rcs = raise STR ''MiniSatChecked.doProofStep: ProofDone constructor found.''"  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
450  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
451  | 
definition checker :: "nat \<Rightarrow> ProofStep list \<Rightarrow> nat \<Rightarrow> Clause list Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
452  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
453  | 
"checker n p i =  | 
| 37792 | 454  | 
  do {
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
455  | 
a \<leftarrow> Array.new n None;  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
456  | 
rcs \<leftarrow> foldM (doProofStep2 a) p [];  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
457  | 
ec \<leftarrow> Array.nth a i;  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
458  | 
(if ec = Some [] then return rcs  | 
| 68028 | 459  | 
else raise STR ''No empty clause'')  | 
| 37792 | 460  | 
}"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
461  | 
|
| 
55413
 
a8e96847523c
adapted theories to '{case,rec}_{list,option}' names
 
blanchet 
parents: 
47451 
diff
changeset
 | 
462  | 
lemma effect_case_option:  | 
| 40671 | 463  | 
assumes "effect (case x of None \<Rightarrow> n | Some y \<Rightarrow> s y) h h' r"  | 
464  | 
obtains "x = None" "effect n h h' r"  | 
|
465  | 
| y where "x = Some y" "effect (s y) h h' r"  | 
|
466  | 
using assms unfolding effect_def by (auto split: option.splits)  | 
|
| 37775 | 467  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
468  | 
lemma res_thm2_Inv:  | 
| 40671 | 469  | 
assumes res_thm: "effect (res_thm2 a (l, j) cli) h h' rs"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
470  | 
assumes correct_a: "correctArray r a h"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
471  | 
assumes correct_cli: "correctClause r cli \<and> sorted cli \<and> distinct cli"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
472  | 
shows "h = h' \<and> correctClause r rs \<and> sorted rs \<and> distinct rs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
473  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
474  | 
from res_thm have l_not_zero: "l \<noteq> 0"  | 
| 40671 | 475  | 
by (auto elim: effect_raiseE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
476  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
477  | 
fix clj  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
478  | 
let ?rs = "merge (remove l cli) (remove (compl l) clj)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
479  | 
let ?rs' = "merge (remove (compl l) cli) (remove l clj)"  | 
| 
37806
 
a7679be14442
qualified names for (really) all array operations
 
haftmann 
parents: 
37805 
diff
changeset
 | 
480  | 
assume "h = h'" "Some clj = Array.get h' a ! j" "j < Array.length h' a"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
481  | 
with correct_a have clj: "correctClause r clj" "sorted clj" "distinct clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
482  | 
unfolding correctArray_def by (auto intro: array_ranI)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
483  | 
with clj l_not_zero correct_cli  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
484  | 
have "(l \<in> set cli \<and> compl l \<in> set clj  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
485  | 
\<longrightarrow> correctClause r ?rs \<and> sorted ?rs \<and> distinct ?rs) \<and>  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
486  | 
(compl l \<in> set cli \<and> l \<in> set clj  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
487  | 
\<longrightarrow> correctClause r ?rs' \<and> sorted ?rs' \<and> distinct ?rs')"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
488  | 
apply (auto intro!: correctClause_resolvants)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
489  | 
apply (insert compl_exists [of l])  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
490  | 
by (auto intro!: correctClause_resolvants)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
491  | 
}  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
492  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
493  | 
fix v clj  | 
| 
37806
 
a7679be14442
qualified names for (really) all array operations
 
haftmann 
parents: 
37805 
diff
changeset
 | 
494  | 
assume "Some clj = Array.get h a ! j" "j < Array.length h a"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
495  | 
with correct_a have clj: "correctClause r clj \<and> sorted clj \<and> distinct clj"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
496  | 
unfolding correctArray_def by (auto intro: array_ranI)  | 
| 40671 | 497  | 
assume "effect (res_thm' l cli clj) h h' rs"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
498  | 
from res_thm'_no_heap[OF this] res_thm'_Inv2[OF this l_not_zero clj correct_cli]  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
499  | 
have "h = h' \<and> correctClause r rs \<and> sorted rs \<and> distinct rs" by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
500  | 
}  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
501  | 
with assms show ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
502  | 
unfolding res_thm2.simps get_clause_def  | 
| 
55413
 
a8e96847523c
adapted theories to '{case,rec}_{list,option}' names
 
blanchet 
parents: 
47451 
diff
changeset
 | 
503  | 
by (elim effect_bindE effect_ifE effect_nthE effect_raiseE effect_returnE effect_case_option) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
504  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
505  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
506  | 
lemma foldM_Inv2:  | 
| 40671 | 507  | 
assumes "effect (foldM (res_thm2 a) rs cli) h h' rcl"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
508  | 
assumes correct_a: "correctArray r a h"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
509  | 
assumes correct_cli: "correctClause r cli \<and> sorted cli \<and> distinct cli"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
510  | 
shows "h = h' \<and> correctClause r rcl \<and> sorted rcl \<and> distinct rcl"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
511  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
512  | 
proof (induct rs arbitrary: h h' cli)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
513  | 
case Nil thus ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
514  | 
unfolding foldM.simps  | 
| 40671 | 515  | 
by (elim effect_returnE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
516  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
517  | 
case (Cons x xs)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
518  | 
  {
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
519  | 
fix h1 ret  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
520  | 
obtain l j where x_is: "x = (l, j)" by fastforce  | 
| 40671 | 521  | 
assume res_thm2: "effect (res_thm2 a x cli) h h1 ret"  | 
522  | 
with x_is have res_thm2': "effect (res_thm2 a (l, j) cli) h h1 ret" by simp  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
523  | 
note step = res_thm2_Inv [OF res_thm2' Cons.prems(2) Cons.prems(3)]  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
524  | 
from step have ret: "correctClause r ret \<and> sorted ret \<and> distinct ret" by simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
525  | 
from step Cons.prems(2) have correct_a: "correctArray r a h1" by simp  | 
| 40671 | 526  | 
assume foldM: "effect (foldM (res_thm2 a) xs ret) h1 h' rcl"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
527  | 
from step Cons.hyps [OF foldM correct_a ret] have  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
528  | 
"h = h' \<and> correctClause r rcl \<and> sorted rcl \<and> distinct rcl" by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
529  | 
}  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
530  | 
with Cons show ?case  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
531  | 
unfolding foldM.simps  | 
| 40671 | 532  | 
by (elim effect_bindE) auto  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
533  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
534  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
535  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
536  | 
lemma step_correct2:  | 
| 40671 | 537  | 
assumes effect: "effect (doProofStep2 a step rcs) h h' res"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
538  | 
assumes correctArray: "correctArray rcs a h"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
539  | 
shows "correctArray res a h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
540  | 
proof (cases "(a,step,rcs)" rule: doProofStep2.cases)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
541  | 
case (1 a saveTo i rs rcs)  | 
| 40671 | 542  | 
with effect correctArray  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
543  | 
show ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
544  | 
apply auto  | 
| 40671 | 545  | 
apply (auto simp: get_clause_def elim!: effect_bindE effect_nthE)  | 
| 
55413
 
a8e96847523c
adapted theories to '{case,rec}_{list,option}' names
 
blanchet 
parents: 
47451 
diff
changeset
 | 
546  | 
apply (auto elim!: effect_bindE effect_nthE effect_case_option effect_raiseE  | 
| 40671 | 547  | 
effect_returnE effect_updE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
548  | 
apply (frule foldM_Inv2)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
549  | 
apply assumption  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
550  | 
apply (simp add: correctArray_def)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
551  | 
apply (drule_tac x="y" in bspec)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
552  | 
apply (rule array_ranI[where i=i])  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
553  | 
by (auto intro: correctArray_update)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
554  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
555  | 
case (2 a cid rcs)  | 
| 40671 | 556  | 
with effect correctArray  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
557  | 
show ?thesis  | 
| 40671 | 558  | 
by (auto simp: correctArray_def elim!: effect_bindE effect_updE effect_returnE  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
559  | 
dest: array_ran_upd_array_None)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
560  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
561  | 
case (3 a cid c rcs)  | 
| 40671 | 562  | 
with effect correctArray  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
563  | 
show ?thesis  | 
| 40671 | 564  | 
apply (auto elim!: effect_bindE effect_updE effect_returnE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
565  | 
apply (auto simp: correctArray_def dest!: array_ran_upd_array_Some)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
566  | 
apply (auto intro: correctClause_mono)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
567  | 
by (auto simp: correctClause_def)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
568  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
569  | 
case 4  | 
| 40671 | 570  | 
with effect correctArray  | 
571  | 
show ?thesis by (auto elim: effect_raiseE)  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
572  | 
next  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
573  | 
case 5  | 
| 40671 | 574  | 
with effect correctArray  | 
575  | 
show ?thesis by (auto elim: effect_raiseE)  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
576  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
577  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
578  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
579  | 
theorem fold_steps_correct:  | 
| 40671 | 580  | 
assumes "effect (foldM (doProofStep2 a) steps rcs) h h' res"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
581  | 
assumes "correctArray rcs a h"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
582  | 
shows "correctArray res a h'"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
583  | 
using assms  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
584  | 
by (induct steps arbitrary: rcs h h' res)  | 
| 40671 | 585  | 
(auto elim!: effect_bindE effect_returnE dest:step_correct2)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
586  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
587  | 
theorem checker_soundness:  | 
| 40671 | 588  | 
assumes "effect (checker n p i) h h' cs"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
589  | 
shows "inconsistent cs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
590  | 
using assms unfolding checker_def  | 
| 40671 | 591  | 
apply (elim effect_bindE effect_nthE effect_ifE effect_returnE effect_raiseE effect_newE)  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
592  | 
prefer 2 apply simp  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
593  | 
apply auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
594  | 
apply (drule fold_steps_correct)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
595  | 
apply (simp add: correctArray_def array_ran_def)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
596  | 
apply (rule implies_empty_inconsistent)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
597  | 
apply (simp add:correctArray_def)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
598  | 
apply (drule bspec)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
599  | 
by (rule array_ranI, auto)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
600  | 
|
| 63167 | 601  | 
section \<open>Functional version with Lists as Array\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
602  | 
|
| 63167 | 603  | 
subsection \<open>List specific definitions\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
604  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
605  | 
definition list_ran :: "'a option list \<Rightarrow> 'a set"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
606  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
607  | 
  "list_ran xs = {e. Some e \<in> set xs }"
 | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
608  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
609  | 
lemma list_ranI: "\<lbrakk> i < List.length xs; xs ! i = Some b \<rbrakk> \<Longrightarrow> b \<in> list_ran xs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
610  | 
unfolding list_ran_def by (drule sym, simp)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
611  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
612  | 
lemma list_ran_update_Some:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
613  | 
"cl \<in> list_ran (xs[i := (Some b)]) \<Longrightarrow> cl \<in> list_ran xs \<or> cl = b"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
614  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
615  | 
assume assms: "cl \<in> list_ran (xs[i := (Some b)])"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
616  | 
have "set (xs[i := Some b]) \<subseteq> insert (Some b) (set xs)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
617  | 
by (simp only: set_update_subset_insert)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
618  | 
with assms have "Some cl \<in> insert (Some b) (set xs)"  | 
| 
44890
 
22f665a2e91c
new fastforce replacing fastsimp - less confusing name
 
nipkow 
parents: 
42463 
diff
changeset
 | 
619  | 
unfolding list_ran_def by fastforce  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
620  | 
thus ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
621  | 
unfolding list_ran_def by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
622  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
623  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
624  | 
lemma list_ran_update_None:  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
625  | 
"cl \<in> list_ran (xs[i := None]) \<Longrightarrow> cl \<in> list_ran xs"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
626  | 
proof -  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
627  | 
assume assms: "cl \<in> list_ran (xs[i := None])"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
628  | 
have "set (xs[i := None]) \<subseteq> insert None (set xs)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
629  | 
by (simp only: set_update_subset_insert)  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
630  | 
with assms show ?thesis  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
631  | 
unfolding list_ran_def by auto  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
632  | 
qed  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
633  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
634  | 
definition correctList :: "Clause list \<Rightarrow> Clause option list \<Rightarrow> bool"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
635  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
636  | 
"correctList rootcls xs =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
637  | 
(\<forall>cl \<in> list_ran xs. correctClause rootcls cl \<and> sorted cl \<and> distinct cl)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
638  | 
|
| 63167 | 639  | 
subsection \<open>Checker functions\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
640  | 
|
| 37726 | 641  | 
primrec lres_thm :: "Clause option list \<Rightarrow> (Lit * ClauseId) \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
642  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
643  | 
"lres_thm xs (l, j) cli = (if (j < List.length xs) then (case (xs ! j) of  | 
| 68028 | 644  | 
None \<Rightarrow> raise STR ''MiniSatChecked.res_thm: No resolvant clause in thms array for Conflict step.''  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
645  | 
| Some clj \<Rightarrow> res_thm' l cli clj  | 
| 68028 | 646  | 
) else raise STR ''Error'')"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
647  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
648  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
649  | 
fun ldoProofStep :: " ProofStep \<Rightarrow> (Clause option list * Clause list) \<Rightarrow> (Clause option list * Clause list) Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
650  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
651  | 
"ldoProofStep (Conflict saveTo (i, rs)) (xs, rcl) =  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
652  | 
(case (xs ! i) of  | 
| 68028 | 653  | 
None \<Rightarrow> raise STR ''MiniSatChecked.doProofStep: No starting clause in thms array for Conflict step.''  | 
| 37792 | 654  | 
     | Some cli \<Rightarrow> do {
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
655  | 
result \<leftarrow> foldM (lres_thm xs) rs cli ;  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
656  | 
return ((xs[saveTo:=Some result]), rcl)  | 
| 37792 | 657  | 
})"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
658  | 
| "ldoProofStep (Delete cid) (xs, rcl) = return (xs[cid:=None], rcl)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
659  | 
| "ldoProofStep (Root cid clause) (xs, rcl) = return (xs[cid:=Some (sort clause)], (remdups(sort clause)) # rcl)"  | 
| 68028 | 660  | 
| "ldoProofStep (Xstep cid1 cid2) (xs, rcl) = raise STR ''MiniSatChecked.doProofStep: Xstep constructor found.''"  | 
661  | 
| "ldoProofStep (ProofDone b) (xs, rcl) = raise STR ''MiniSatChecked.doProofStep: ProofDone constructor found.''"  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
662  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
663  | 
definition lchecker :: "nat \<Rightarrow> ProofStep list \<Rightarrow> nat \<Rightarrow> Clause list Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
664  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
665  | 
"lchecker n p i =  | 
| 37792 | 666  | 
  do {
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
667  | 
rcs \<leftarrow> foldM (ldoProofStep) p ([], []);  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
668  | 
(if (fst rcs ! i) = Some [] then return (snd rcs)  | 
| 68028 | 669  | 
else raise STR ''No empty clause'')  | 
| 37792 | 670  | 
}"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
671  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
672  | 
|
| 63167 | 673  | 
section \<open>Functional version with RedBlackTrees\<close>  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
674  | 
|
| 37726 | 675  | 
primrec tres_thm :: "(ClauseId, Clause) RBT_Impl.rbt \<Rightarrow> Lit \<times> ClauseId \<Rightarrow> Clause \<Rightarrow> Clause Heap"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
676  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
677  | 
"tres_thm t (l, j) cli =  | 
| 47451 | 678  | 
(case (rbt_lookup t j) of  | 
| 68028 | 679  | 
None \<Rightarrow> raise STR ''MiniSatChecked.res_thm: No resolvant clause in thms array for Conflict step.''  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
680  | 
| Some clj \<Rightarrow> res_thm' l cli clj)"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
681  | 
|
| 
36147
 
b43b22f63665
theory RBT with abstract type of red-black trees backed by implementation RBT_Impl
 
haftmann 
parents: 
36098 
diff
changeset
 | 
682  | 
fun tdoProofStep :: " ProofStep \<Rightarrow> ((ClauseId, Clause) RBT_Impl.rbt * Clause list) \<Rightarrow> ((ClauseId, Clause) RBT_Impl.rbt * Clause list) Heap"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
683  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
684  | 
"tdoProofStep (Conflict saveTo (i, rs)) (t, rcl) =  | 
| 47451 | 685  | 
(case (rbt_lookup t i) of  | 
| 68028 | 686  | 
None \<Rightarrow> raise STR ''MiniSatChecked.doProofStep: No starting clause in thms array for Conflict step.''  | 
| 37792 | 687  | 
     | Some cli \<Rightarrow> do {
 | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
688  | 
result \<leftarrow> foldM (tres_thm t) rs cli;  | 
| 47451 | 689  | 
return ((rbt_insert saveTo result t), rcl)  | 
| 37792 | 690  | 
})"  | 
| 47451 | 691  | 
| "tdoProofStep (Delete cid) (t, rcl) = return ((rbt_delete cid t), rcl)"  | 
692  | 
| "tdoProofStep (Root cid clause) (t, rcl) = return (rbt_insert cid (sort clause) t, (remdups(sort clause)) # rcl)"  | 
|
| 68028 | 693  | 
| "tdoProofStep (Xstep cid1 cid2) (t, rcl) = raise STR ''MiniSatChecked.doProofStep: Xstep constructor found.''"  | 
694  | 
| "tdoProofStep (ProofDone b) (t, rcl) = raise STR ''MiniSatChecked.doProofStep: ProofDone constructor found.''"  | 
|
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
695  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
696  | 
definition tchecker :: "nat \<Rightarrow> ProofStep list \<Rightarrow> nat \<Rightarrow> Clause list Heap"  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
697  | 
where  | 
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
698  | 
"tchecker n p i =  | 
| 37792 | 699  | 
  do {
 | 
| 
36147
 
b43b22f63665
theory RBT with abstract type of red-black trees backed by implementation RBT_Impl
 
haftmann 
parents: 
36098 
diff
changeset
 | 
700  | 
rcs \<leftarrow> foldM (tdoProofStep) p (RBT_Impl.Empty, []);  | 
| 47451 | 701  | 
(if (rbt_lookup (fst rcs) i) = Some [] then return (snd rcs)  | 
| 68028 | 702  | 
else raise STR ''No empty clause'')  | 
| 37792 | 703  | 
}"  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
704  | 
|
| 
47108
 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 
huffman 
parents: 
46150 
diff
changeset
 | 
705  | 
export_code checker tchecker lchecker checking SML  | 
| 
36098
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
706  | 
|
| 
 
53992c639da5
added imperative SAT checker; improved headers of example files; adopted IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
707  | 
end  | 
| 46150 | 708  |