From 4c36ba72a31e37b2561fd2388a1506d2a263d5c6 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 12:29:31 +0200 Subject: [PATCH 01/31] introducing infrastructure for final values w/o select. manually replaying fd0fa6fd11dddc0f49502d038bd1ff9ca6c536ad --- .../java/de/uka/ilkd/key/ldt/HeapLDT.java | 12 +++ .../de/uka/ilkd/key/logic/TermBuilder.java | 16 ++++ .../key/speclang/njml/JmlTermFactory.java | 5 + .../translation/SLAttributeResolver.java | 4 + .../de/uka/ilkd/key/proof/rules/heap.key | 3 + .../de/uka/ilkd/key/proof/rules/javaRules.key | 96 ++++++++++++++++++- 6 files changed, 131 insertions(+), 5 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java index 1e93af66fc3..901e58fd193 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java @@ -41,6 +41,7 @@ public final class HeapLDT extends LDT { public static final Name SELECT_NAME = new Name("select"); public static final Name STORE_NAME = new Name("store"); + public static final Name FINAL_NAME = new Name("final"); public static final Name BASE_HEAP_NAME = new Name("heap"); public static final Name SAVED_HEAP_NAME = new Name("savedHeap"); public static final Name PERMISSION_HEAP_NAME = new Name("permissions"); @@ -54,6 +55,7 @@ public final class HeapLDT extends LDT { // select/store private final SortDependingFunction select; + private final SortDependingFunction finalFunction; private final JFunction store; private final JFunction create; private final JFunction anon; @@ -96,6 +98,7 @@ public HeapLDT(TermServices services) { fieldSort = sorts.lookup(new Name("Field")); select = addSortDependingFunction(services, SELECT_NAME.toString()); + finalFunction = addSortDependingFunction(services, FINAL_NAME.toString()); store = addFunction(services, "store"); create = addFunction(services, "create"); anon = addFunction(services, "anon"); @@ -233,6 +236,15 @@ public SortDependingFunction getSelect(Sort instanceSort, TermServices services) return select.getInstanceFor(instanceSort, services); } + public SortDependingFunction getFinal(Sort instanceSort, Services services) { + return finalFunction.getInstanceFor(instanceSort, services); + } + + public boolean isFinalOp(Operator op) { + return op instanceof SortDependingFunction + && ((SortDependingFunction) op).isSimilar(finalFunction); + } + /** * If the passed operator is an instance of "select", this method returns the sort of the diff --git a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java index c6a697b2181..354b31cf2e0 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java @@ -1627,6 +1627,11 @@ public Term select(Sort asSort, Term h, Term o, LocationVariable field) { return select(asSort, h, o, func(f)); } + private Term readFinal(Sort asSort, Term o, Term f) { + return func(services.getTypeConverter().getHeapLDT().getFinal(asSort, services), + o, f); + } + public Term dot(Sort asSort, Term o, Term f) { return select(asSort, getBaseHeap(), o, f); } @@ -1657,6 +1662,17 @@ public Term staticDot(Sort asSort, JFunction f) { return f.sort() == fieldSort ? staticDot(asSort, func(f)) : func(f, getBaseHeap()); } + public Term finalDot(Sort sort, Term o, JFunction f) { + final Sort fieldSort = services.getTypeConverter().getHeapLDT() + .getFieldSort(); + return f.sort() == fieldSort ? finalDot(sort, o, func(f)) + : func(f, getBaseHeap(), o); + } + + public Term finalDot(Sort asSort, Term o, Term f) { + return readFinal(asSort, o, f); + } + public Term arr(Term idx) { return func(services.getNamespaces().functions().lookup("arr"), idx); // return func(services.getTypeConverter().getHeapLDT().getArr(), idx); diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/njml/JmlTermFactory.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/njml/JmlTermFactory.java index 968913112a5..95a25169ba1 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/njml/JmlTermFactory.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/njml/JmlTermFactory.java @@ -918,6 +918,11 @@ public Term createLocSet(ImmutableList exprList) { final Term fieldTerm = t.sub(2); t = tb.singleton(objTerm, fieldTerm); singletons = singletons.append(t); + } else if (heapLDT.isFinalOp(t.op())) { + final Term objTerm = t.sub(0); + final Term fieldTerm = t.sub(1); + t = tb.singleton(objTerm, fieldTerm); + singletons = singletons.append(t); } else if (t.op() instanceof ProgramVariable) { // this case may happen with local variables exc.addIgnoreWarning("local variable in assignable clause"); diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java index da064a6aae2..d611c701e08 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java @@ -135,6 +135,10 @@ protected SLExpression doResolving(SLExpression receiver, String name, SLParamet if (attribute.isStatic()) { attributeTerm = services.getTermBuilder().staticDot(attribute.sort(), fieldSymbol); + } else if (attribute.isFinal()) { + attributeTerm = services.getTermBuilder().finalDot(attribute.sort(), + recTerm, + fieldSymbol); } else { attributeTerm = services.getTermBuilder().dot(attribute.sort(), recTerm, fieldSymbol); diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key index ea930965540..545f0c24582 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key @@ -22,6 +22,9 @@ // default value for a field alpha alpha::defaultValue; + // reading from final attributes + alpha alpha::final(Object, Field); + // fields \unique Field arr(int); \unique Field java.lang.Object::; diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key index c4317a71342..f394a257bdb 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key @@ -3243,7 +3243,8 @@ \not \isModelField(#a), \not \isArrayLength(#a), \hasSort(#a, G), - \not \isThisReference(#v)) + \not \isThisReference(#v), + \not \final(#a)) "Normal Execution (#v != null)": \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) \add( ==> (#v = null)); @@ -3258,6 +3259,25 @@ \heuristics(simplify_prog, simplify_prog_subset) }; + assignment_read_attribute_final { + \find (\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) \sameUpdateLevel + \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \not\isThisReference(#v), \final(#a)) + "Normal Execution (#v != null)": + \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) + \add (==>(#v=null)); + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality(post)) + \add(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith(\modality{#allmodal}{..throw new java.lang.NullPointerException();...}\endmodality(post)) + \add (#v=null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; + + + assignment_read_attribute_this { \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) \sameUpdateLevel @@ -3266,7 +3286,8 @@ \not \isArrayLength(#a), \not \isModelField(#a), \hasSort(#a, G), - \isThisReference(#v)) + \isThisReference(#v), + \not\final(#a)) "Normal Execution": \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) ; @@ -3278,6 +3299,20 @@ \heuristics(simplify_prog, simplify_prog_subset) }; + assignment_read_attribute_this_final { + \find (\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) \sameUpdateLevel + \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \isThisReference(#v), \final(#a)) + "Normal Execution": + \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality(post)) + \add(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; + assignment_read_length { \find(\modality{#allmodal}{.. #v0 = #v.#length; ...}\endmodality (post)) \sameUpdateLevel @@ -3312,7 +3347,8 @@ \not \isArrayLength(#a), \not \isModelField(#a), \hasSort(#a, G), - \not \isThisReference(#v)) + \not \isThisReference(#v), + \not \final(#a)) "Normal Execution (#v != null)": \replacewith( ==> {#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) // \add (==>(#v=null)) @@ -3327,6 +3363,25 @@ \heuristics(simplify_prog, simplify_prog_subset) }; + assignment_read_attribute_final { + \find (==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) + \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \not\isThisReference(#v), \final(#a)) + "Normal Execution (#v != null)": + \replacewith(==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) + //\add (==>(#v=null)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith(==> false) + \add (#v=null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; + + + assignment_read_attribute_this { \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) \varcond( @@ -3334,7 +3389,8 @@ \not \isArrayLength(#a), \not \isModelField(#a), \hasSort(#a, G), - \isThisReference(#v)) + \isThisReference(#v), + \not \final(#a)) "Normal Execution": \replacewith( ==> {#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) ; @@ -3345,6 +3401,21 @@ \heuristics(simplify_prog, simplify_prog_subset) }; + assignment_read_attribute_this_final { + \find (==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) + \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \isThisReference(#v), \final(#a)) + "Normal Execution": + \replacewith(==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; + + + assignment_read_length { \find( ==> \modality{#allmodal}{.. #v0 = #v.#length; ...}\endmodality (post)) \varcond(\not \isThisReference(#v)) @@ -3632,10 +3703,11 @@ \displayname "active_attribute_access" }; + // TODO 2 variants with different taclet options assignment_read_static_attribute { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) \sameUpdateLevel - \varcond(\hasSort(#sv, G)) + \varcond(\hasSort(#sv, G), \not\final(#sv)) \replacewith({#v0 := G::select(heap, null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality (post)) ; (permissions:on) { @@ -3646,6 +3718,20 @@ \heuristics(simplify_prog, simplify_prog_subset) }; + assignment_read_static_attribute_final { + \find (\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality(post)) \sameUpdateLevel + \varcond(\hasSort(#sv, G), \final(#sv)) + \replacewith({#v0 := G::final(null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality(post)) + ; + (permissions:on) { + "Read Permission to #sv": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (static read)."; ...}\endmodality(post)) + \add(==> readPermission(Permission::select(permissions, null, #memberPVToField(#sv)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; + + // constant case cannot occur as no static initilisation handling happens assignment_read_static_attribute_with_variable_prefix { \find(\modality{#allmodal}{.. #loc = @(#v.#sv); ...}\endmodality (post)) From 11539dbd12ada6259d831a3ccc85f44385ad45a5 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 12:40:26 +0200 Subject: [PATCH 02/31] adding taclets for wellformedness of final fields manually replaying 428ebfd755fc963df0b997a68827ecaa6dfba874 --- .../de/uka/ilkd/key/proof/rules/heapRules.key | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key index 8303f8a0288..a36463e29d0 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key @@ -830,6 +830,23 @@ \heuristics(inReachableStateImplication) }; + onlyCreatedObjectsAreReferencedFinal { + \schemaVar \term Heap h; + \schemaVar \term Object o; + \schemaVar \term Field f; + + \assumes(wellFormed(h) ==>) + \find(deltaObject::final(o, f)) + \sameUpdateLevel + + \add(deltaObject::final(o, f) = null + | boolean::select(h, + deltaObject::final(o, f), + java.lang.Object::) = TRUE ==>) + + \heuristics(inReachableStateImplication) + }; + onlyCreatedObjectsAreInLocSets { \schemaVar \term Heap h; \schemaVar \term Object o, o2; @@ -845,7 +862,24 @@ \heuristics(inReachableStateImplication) }; + + onlyCreatedObjectsAreInLocSetsFinal { + \schemaVar \term Heap h; + \schemaVar \term Object o, o2; + \schemaVar \term Field f, f2; + + \assumes(wellFormed(h) ==>) + \find(elementOf(o2, f2, LocSet::final(o, f)) ==>) + + \add(o2 = null + | boolean::select(h, + o2, + java.lang.Object::) = TRUE ==>) + + \heuristics(inReachableStateImplication) + }; + onlyCreatedObjectsAreInLocSetsEQ { \schemaVar \term Heap h; \schemaVar \term Object o, o2; @@ -863,6 +897,26 @@ \heuristics(inReachableStateImplication) }; + onlyCreatedObjectsAreInLocSetsEQFinal { + \schemaVar \term Heap h; + \schemaVar \term Object o, o2; + \schemaVar \term Field f, f2; + \schemaVar \term LocSet EQ; + + \assumes(wellFormed(h), LocSet::final(o, f) = EQ ==>) + \find(elementOf(o2, f2, EQ) ==>) + + \add(o2 = null + | boolean::select(h, + o2, + java.lang.Object::) = TRUE ==>) + + \heuristics(inReachableStateImplication) + }; + + + + arrayLengthNotNegative { \schemaVar \term Object o; @@ -1298,6 +1352,20 @@ \heuristics(simplify) }; + narrowTypeFinal { + \schemaVar \term Object o; + \schemaVar \term Field f; + + \find(beta::final(o,f)) + + \varcond(\fieldType(f, alpha), + \strict\sub(alpha, beta)) + + \replacewith(alpha::final(o,f)) + + \heuristics(simplify) + }; + narrowSelectArrayType { \schemaVar \term Heap h; @@ -1316,6 +1384,26 @@ \heuristics(simplify) }; + narrowFinalArrayType { + \schemaVar \term Object o; + \schemaVar \term int idx; + + \assumes( ==> o = null ) + + \find(beta::final(o,arr(idx))) \sameUpdateLevel + + \varcond(\hasSort(\elemSort(o), alpha), + \strict\sub(alpha, beta)) + + \replacewith(alpha::final(o,arr(idx))) + + \heuristics(simplify) + }; + + + // NB: This taclet axiomatises the cast of booleans + // This is (proven to be) equivalent to the axiom + // "\forall any x; ((boolean)x=TRUE ==> x=TRUE)" castTrueImpliesOriginalTrue { \schemaVar \term Heap h; From 8ebaa618b89f9b2cb89ebb84519b5e52588b76de Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 12:44:27 +0200 Subject: [PATCH 03/31] soundness bugfix for final values manually replaying 252fc9fa9c1d502721a38bf35a9dec869e7fb3c3 --- .../resources/de/uka/ilkd/key/proof/rules/heapRules.key | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key index a36463e29d0..3570733be2a 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key @@ -835,7 +835,9 @@ \schemaVar \term Object o; \schemaVar \term Field f; - \assumes(wellFormed(h) ==>) + // Without that created-check, it is not consistent. + \assumes(wellFormed(h), + boolean::select(h, o, java.lang.Object::) = TRUE ==>) \find(deltaObject::final(o, f)) \sameUpdateLevel @@ -862,7 +864,7 @@ \heuristics(inReachableStateImplication) }; - + onlyCreatedObjectsAreInLocSetsFinal { \schemaVar \term Heap h; \schemaVar \term Object o, o2; @@ -879,7 +881,7 @@ \heuristics(inReachableStateImplication) }; - + onlyCreatedObjectsAreInLocSetsEQ { \schemaVar \term Heap h; \schemaVar \term Object o, o2; From d4f7ec02747090066a8cadd1f7ac45bc957c955e Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 13:46:45 +0200 Subject: [PATCH 04/31] introducing a taclet option for the new final field mechanism manually replaying 5552b59dabede56fb0fbb399b98e7f218717055f --- .../uka/ilkd/key/ldt/FinalHeapResolver.java | 119 ++++++++ .../init/FunctionalOperationContractPO.java | 4 + .../key/rule/UseDependencyContractRule.java | 11 +- .../key/rule/UseOperationContractRule.java | 8 +- .../speclang/FunctionalOperationContract.java | 3 + .../FunctionalOperationContractImpl.java | 5 + .../de/uka/ilkd/key/proof/rules/javaRules.key | 266 ++++++++++++------ .../key/proof/rules/optionsDeclarations.key | 5 + 8 files changed, 337 insertions(+), 84 deletions(-) create mode 100644 key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java new file mode 100644 index 00000000000..a7894b20161 --- /dev/null +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java @@ -0,0 +1,119 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ +package de.uka.ilkd.key.ldt; + +import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.op.Operator; +import de.uka.ilkd.key.logic.op.ProgramVariable; +import de.uka.ilkd.key.proof.init.InitConfig; +import de.uka.ilkd.key.settings.ProofSettings; +import de.uka.ilkd.key.speclang.Contract; + +import org.key_project.logic.op.Function; +import org.key_project.util.collection.ImmutableArray; + +public class FinalHeapResolver { + + private final Services services; + + public FinalHeapResolver(Services services) { + this.services = services; + } + + public static boolean isFinalEnabled(InitConfig initConfig) { + ProofSettings settings = initConfig.getSettings(); + if (settings == null) { + settings = new ProofSettings(ProofSettings.DEFAULT_SETTINGS); + } + return isFinalEnabled(settings); + } + + public static boolean isFinalEnabled(ProofSettings settings) { + return settings.getChoiceSettings().getDefaultChoices().get("finalFields") + .equals("finalFields:immutable"); + } + + public T resolve(T contract) { + return (T) contract.map(this::resolve, services); + } + + private Term resolve(Term term) { + if (term == null) { + // for non-existing clauses in maps. + return null; + } + + if (services.getTypeConverter().getHeapLDT().isSelectOp(term.op())) { + return resolveSelect(term); + } + + return resolveDefault(term); + } + + private Term resolveDefault(Term term) { + Term[] newsubs = null; + ImmutableArray subs = term.subs(); + for (int i = 0; i < subs.size(); i++) { + Term in = subs.get(i); + Term out = resolve(in); + if (in != out) { + if (newsubs == null) { + newsubs = subs.toArray(new Term[subs.size()]); + } + newsubs[i] = out; + } + } + + if (newsubs == null) { + return term; + } else { + return services.getTermFactory().createTerm(term.op(), newsubs, + term.boundVars(), term.getLabels()); + } + } + + private Term resolveSelect(Term term) { + Term obj = term.sub(1); + Term field = term.sub(2); + ProgramVariable pv = getFieldSymbol(field); + if (pv != null && pv.isFinal()) { + return services.getTermBuilder().finalDot(pv.sort(), + resolve(obj), field); + } + return resolveDefault(term); + } + + private ProgramVariable getFieldSymbol(Term fieldTerm) { + Operator op = fieldTerm.op(); + if (op instanceof Function) { + final String name = op.name().toString(); + + // check for normal attribute + int endOfClassName = name.indexOf("::$"); + + int startAttributeName = endOfClassName + 3; + + + if (endOfClassName < 0) { + // not a normal attribute, maybe an implicit attribute like ? + endOfClassName = name.indexOf("::<"); + startAttributeName = endOfClassName + 2; + } + + if (endOfClassName < 0) { + return null; + } + + final String className = name.substring(0, endOfClassName); + final String attributeName = name.substring(startAttributeName); + + final ProgramVariable attribute = + services.getJavaInfo().getAttribute(attributeName, className); + + return attribute; + } + return null; + } +} diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java index 22b80db8c9e..625f36edd61 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java @@ -14,6 +14,7 @@ import de.uka.ilkd.key.java.expression.operator.New; import de.uka.ilkd.key.java.reference.TypeRef; import de.uka.ilkd.key.java.statement.MethodBodyStatement; +import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.logic.Sequent; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.label.OriginTermLabel.Origin; @@ -82,6 +83,9 @@ public class FunctionalOperationContractPO extends AbstractOperationPO implement public FunctionalOperationContractPO(InitConfig initConfig, FunctionalOperationContract contract) { super(initConfig, contract.getName()); + if (FinalHeapResolver.isFinalEnabled(initConfig)) { + contract = new FinalHeapResolver(initConfig.getServices()).resolve(contract); + } this.contract = contract; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java index 6b9fe73e9e1..caae9a8240f 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java +++ b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java @@ -10,6 +10,7 @@ import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.java.abstraction.KeYJavaType; +import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.ldt.LocSetLDT; import de.uka.ilkd.key.logic.*; @@ -397,10 +398,18 @@ public boolean isApplicable(Goal goal, PosInOccurrence pio) { } // configure contract - final DependencyContract contract = + DependencyContract contract = (DependencyContract) ((UseDependencyContractApp) ruleApp).getInstantiation(); + assert contract != null; + if (FinalHeapResolver.isFinalEnabled(goal.proof().getSettings())) { + contract = new FinalHeapResolver(services).resolve(contract); + } + + // get step + final PosInOccurrence step = + ((UseDependencyContractApp) ruleApp).step(goal.sequent(), services); // get step final PosInOccurrence step = ((UseDependencyContractApp) ruleApp).step(); diff --git a/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java b/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java index c5e3d287d09..135166a0712 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java +++ b/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java @@ -34,6 +34,7 @@ import de.uka.ilkd.key.java.reference.TypeReference; import de.uka.ilkd.key.java.statement.Throw; import de.uka.ilkd.key.java.visitor.ProgramContextAdder; +import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.JavaBlock; @@ -561,10 +562,15 @@ public boolean isApplicable(Goal goal, PosInOccurrence pio) { final TermBuilder tb = services.getTermBuilder(); // configure contract - final FunctionalOperationContract contract = + FunctionalOperationContract contract = (FunctionalOperationContract) ((AbstractContractRuleApp) ruleApp).getInstantiation(); + assert contract.getTarget().equals(inst.pm); + if (FinalHeapResolver.isFinalEnabled(goal.proof().getSettings())) { + contract = new FinalHeapResolver(services).resolve(contract); + } + final List heapContext = HeapContext.getModifiableHeaps(goal.proof().getServices(), inst.transaction); diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContract.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContract.java index 0636676430f..876c130729e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContract.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContract.java @@ -11,6 +11,7 @@ import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.java.abstraction.KeYJavaType; import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.LocationVariable; import de.uka.ilkd.key.logic.op.Modality; @@ -129,4 +130,6 @@ Term getRepresentsAxiom(LocationVariable heap, Term heapTerm, Term selfTerm, KeYJavaType getSpecifiedIn(); boolean hasResultVar(); + + IProgramMethod getProgramMethod(); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContractImpl.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContractImpl.java index 1e36ffe175e..1f72d696d90 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContractImpl.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/FunctionalOperationContractImpl.java @@ -1551,4 +1551,9 @@ public OriginalVariables getOrigVars() { return new OriginalVariables(originalSelfVar, originalResultVar, originalExcVar, atPreVars, originalParamVars); } + + @Override + public IProgramMethod getProgramMethod() { + return pm; + } } diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key index f394a257bdb..7ccce242b99 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key @@ -3234,17 +3234,15 @@ }; } -\rules(programRules:Java, runtimeExceptions:allow) { +\rules(programRules:Java, runtimeExceptions:allow, finalFields:onHeap) { assignment_read_attribute { \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) \sameUpdateLevel \varcond( \not \static(#a), - \not \isModelField(#a), \not \isArrayLength(#a), \hasSort(#a, G), - \not \isThisReference(#v), - \not \final(#a)) + \not \isThisReference(#v)) "Normal Execution (#v != null)": \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) \add( ==> (#v = null)); @@ -3259,24 +3257,72 @@ \heuristics(simplify_prog, simplify_prog_subset) }; - assignment_read_attribute_final { - \find (\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) \sameUpdateLevel - \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \not\isThisReference(#v), \final(#a)) - "Normal Execution (#v != null)": - \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) - \add (==>(#v=null)); - (permissions:on) { - "Read Permission to #v.#a": - \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality(post)) - \add(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) - }; - "Null Reference (#v = null)": - \replacewith(\modality{#allmodal}{..throw new java.lang.NullPointerException();...}\endmodality(post)) - \add (#v=null ==>) - \heuristics(simplify_prog, simplify_prog_subset) - }; + assignment_read_attribute_this { + \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \sameUpdateLevel + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \isThisReference(#v)) + "Normal Execution": + \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; +} +\rules(programRules:Java, runtimeExceptions:allow, finalFields:immutable) { + assignment_read_attribute { + \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \sameUpdateLevel + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \not \isThisReference(#v), + \not \final(#a)) + "Normal Execution (#v != null)": + \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + \add( ==> (#v = null)); + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith(\modality{#allmodal}{..throw new java.lang.NullPointerException();...}\endmodality (post)) + \add(#v = null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; + assignment_read_attribute_final { + \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \sameUpdateLevel + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \not \isThisReference(#v), + \final(#a)) + "Normal Execution (#v != null)": + \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + \add( ==> (#v = null)); + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith(\modality{#allmodal}{..throw new java.lang.NullPointerException();...}\endmodality (post)) + \add(#v = null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; assignment_read_attribute_this { \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) @@ -3287,7 +3333,7 @@ \not \isModelField(#a), \hasSort(#a, G), \isThisReference(#v), - \not\final(#a)) + \not \final(#a)) "Normal Execution": \replacewith({#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) ; @@ -3299,20 +3345,28 @@ \heuristics(simplify_prog, simplify_prog_subset) }; - assignment_read_attribute_this_final { - \find (\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) \sameUpdateLevel - \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \isThisReference(#v), \final(#a)) - "Normal Execution": - \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) - ; - (permissions:on) { - "Read Permission to #v.#a": - \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality(post)) - \add(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) - } - \heuristics(simplify_prog, simplify_prog_subset) - }; + assignment_read_attribute_this_final { + \find(\modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \sameUpdateLevel + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \isThisReference(#v), + \final(#a)) + "Normal Execution": + \replacewith({#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; +} +\rules(programRules:Java, runtimeExceptions:allow) { assignment_read_length { \find(\modality{#allmodal}{.. #v0 = #v.#length; ...}\endmodality (post)) \sameUpdateLevel @@ -3339,16 +3393,14 @@ } -\rules(programRules:Java, runtimeExceptions:ban) { +\rules(programRules:Java, runtimeExceptions:ban, finalFields:onHeap) { assignment_read_attribute { \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) \varcond( \not \static(#a), \not \isArrayLength(#a), - \not \isModelField(#a), \hasSort(#a, G), - \not \isThisReference(#v), - \not \final(#a)) + \not \isThisReference(#v)) "Normal Execution (#v != null)": \replacewith( ==> {#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) // \add (==>(#v=null)) @@ -3363,24 +3415,69 @@ \heuristics(simplify_prog, simplify_prog_subset) }; - assignment_read_attribute_final { - \find (==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) - \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \not\isThisReference(#v), \final(#a)) - "Normal Execution (#v != null)": - \replacewith(==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) - //\add (==>(#v=null)) - ; - (permissions:on) { - "Read Permission to #v.#a": - \replacewith(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) - }; - "Null Reference (#v = null)": - \replacewith(==> false) - \add (#v=null ==>) - \heuristics(simplify_prog, simplify_prog_subset) - }; + assignment_read_attribute_this { + \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \isThisReference(#v)) + "Normal Execution": + \replacewith( ==> {#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; +} +\rules(programRules:Java, runtimeExceptions:ban, finalFields:immutable) { + assignment_read_attribute { + \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \not \isThisReference(#v), + \not \final(#a)) + "Normal Execution (#v != null)": + \replacewith( ==> {#v0 := G::select(heap, #v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + // \add (==>(#v=null)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith( ==> false) + \add(#v = null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; + + assignment_read_attribute_final { + \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \not \isThisReference(#v), + \final(#a)) + "Normal Execution (#v != null)": + \replacewith( ==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + // \add (==>(#v=null)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + }; + "Null Reference (#v = null)": + \replacewith( ==> false) + \add(#v = null ==>) + \heuristics(simplify_prog, simplify_prog_subset) + }; assignment_read_attribute_this { \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) @@ -3401,21 +3498,26 @@ \heuristics(simplify_prog, simplify_prog_subset) }; - assignment_read_attribute_this_final { - \find (==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality(post)) - \varcond(\not \static(#a), \not \isArrayLength(#a), \hasSort(#a, G), \isThisReference(#v), \final(#a)) - "Normal Execution": - \replacewith(==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality(post)) - ; - (permissions:on) { - "Read Permission to #v.#a": - \replacewith(==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) - } - \heuristics(simplify_prog, simplify_prog_subset) - }; - - + assignment_read_attribute_this_final { + \find( ==> \modality{#allmodal}{.. #v0 = #v.#a; ...}\endmodality (post)) + \varcond( + \not \static(#a), + \not \isArrayLength(#a), + \hasSort(#a, G), + \isThisReference(#v), + \final(#a)) + "Normal Execution": + \replacewith( ==> {#v0 := G::final(#v, #memberPVToField(#a))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #v.#a": + \replacewith( ==> readPermission(Permission::select(permissions, #v, #memberPVToField(#a)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; +} +\rules(programRules:Java, runtimeExceptions:ban) { assignment_read_length { \find( ==> \modality{#allmodal}{.. #v0 = #v.#length; ...}\endmodality (post)) \varcond(\not \isThisReference(#v)) @@ -3707,7 +3809,7 @@ assignment_read_static_attribute { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) \sameUpdateLevel - \varcond(\hasSort(#sv, G), \not\final(#sv)) + \varcond(\hasSort(#sv, G), \not \final(#sv)) \replacewith({#v0 := G::select(heap, null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality (post)) ; (permissions:on) { @@ -3718,19 +3820,19 @@ \heuristics(simplify_prog, simplify_prog_subset) }; - assignment_read_static_attribute_final { - \find (\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality(post)) \sameUpdateLevel - \varcond(\hasSort(#sv, G), \final(#sv)) - \replacewith({#v0 := G::final(null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality(post)) - ; - (permissions:on) { - "Read Permission to #sv": - \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (static read)."; ...}\endmodality(post)) - \add(==> readPermission(Permission::select(permissions, null, #memberPVToField(#sv)))) - } - \heuristics(simplify_prog, simplify_prog_subset) - }; - + assignment_read_static_attribute_final { + \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) + \sameUpdateLevel + \varcond(\hasSort(#sv, G), \final(#sv)) + \replacewith({#v0 := G::final(null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #sv": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (static read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, null, #memberPVToField(#sv)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; // constant case cannot occur as no static initilisation handling happens assignment_read_static_attribute_with_variable_prefix { diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key index aac46391232..f6c274a3890 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key @@ -232,6 +232,11 @@ noRestriction }; + /*! + Missing documentation + */ + finalFields: {immutable, onHeap}; + /*! Missing documentation */ From 79a50da09166a50652d6f77a8fe40ce5a6fe2599 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 15:16:56 +0200 Subject: [PATCH 05/31] more general way to respect taclet options for final fields manually replaying 6397702f9569f382e013149cdb5d386140666471 --- .../uka/ilkd/key/ldt/FinalHeapResolver.java | 183 +++++++++--------- .../init/FunctionalOperationContractPO.java | 4 - .../key/rule/UseDependencyContractRule.java | 7 - .../key/rule/UseOperationContractRule.java | 5 - .../de/uka/ilkd/key/speclang/SLEnvInput.java | 2 +- .../key/speclang/jml/JMLSpecExtractor.java | 10 +- .../translation/SLAttributeResolver.java | 4 +- 7 files changed, 107 insertions(+), 108 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java index a7894b20161..65e7583010d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java @@ -3,24 +3,13 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.ldt; -import de.uka.ilkd.key.java.Services; -import de.uka.ilkd.key.logic.Term; -import de.uka.ilkd.key.logic.op.Operator; -import de.uka.ilkd.key.logic.op.ProgramVariable; import de.uka.ilkd.key.proof.init.InitConfig; import de.uka.ilkd.key.settings.ProofSettings; -import de.uka.ilkd.key.speclang.Contract; -import org.key_project.logic.op.Function; -import org.key_project.util.collection.ImmutableArray; public class FinalHeapResolver { - private final Services services; - - public FinalHeapResolver(Services services) { - this.services = services; - } + private static final ThreadLocal finalEnabledVariable = new ThreadLocal<>(); public static boolean isFinalEnabled(InitConfig initConfig) { ProofSettings settings = initConfig.getSettings(); @@ -35,85 +24,103 @@ public static boolean isFinalEnabled(ProofSettings settings) { .equals("finalFields:immutable"); } - public T resolve(T contract) { - return (T) contract.map(this::resolve, services); - } - - private Term resolve(Term term) { - if (term == null) { - // for non-existing clauses in maps. - return null; - } - - if (services.getTypeConverter().getHeapLDT().isSelectOp(term.op())) { - return resolveSelect(term); + public static boolean recallIsFinalEnabled() { + Boolean bool = finalEnabledVariable.get(); + if (bool == null) { + throw new IllegalStateException("Unset final enabled variable"); } - - return resolveDefault(term); + return bool.booleanValue(); } - private Term resolveDefault(Term term) { - Term[] newsubs = null; - ImmutableArray subs = term.subs(); - for (int i = 0; i < subs.size(); i++) { - Term in = subs.get(i); - Term out = resolve(in); - if (in != out) { - if (newsubs == null) { - newsubs = subs.toArray(new Term[subs.size()]); - } - newsubs[i] = out; - } - } - - if (newsubs == null) { - return term; - } else { - return services.getTermFactory().createTerm(term.op(), newsubs, - term.boundVars(), term.getLabels()); - } + public static void rememberIfFinalEnabled(InitConfig initConfig) { + finalEnabledVariable.set(isFinalEnabled(initConfig)); } - private Term resolveSelect(Term term) { - Term obj = term.sub(1); - Term field = term.sub(2); - ProgramVariable pv = getFieldSymbol(field); - if (pv != null && pv.isFinal()) { - return services.getTermBuilder().finalDot(pv.sort(), - resolve(obj), field); - } - return resolveDefault(term); - } - - private ProgramVariable getFieldSymbol(Term fieldTerm) { - Operator op = fieldTerm.op(); - if (op instanceof Function) { - final String name = op.name().toString(); - - // check for normal attribute - int endOfClassName = name.indexOf("::$"); - - int startAttributeName = endOfClassName + 3; - - - if (endOfClassName < 0) { - // not a normal attribute, maybe an implicit attribute like ? - endOfClassName = name.indexOf("::<"); - startAttributeName = endOfClassName + 2; - } - - if (endOfClassName < 0) { - return null; - } - - final String className = name.substring(0, endOfClassName); - final String attributeName = name.substring(startAttributeName); - - final ProgramVariable attribute = - services.getJavaInfo().getAttribute(attributeName, className); - - return attribute; - } - return null; - } + // private final Services services; + // + // public FinalHeapResolver(Services services) { + // this.services = services; + // } + + // public T resolve(T contract) { + // return (T) contract.map(this::resolve, services); + // } + // + // private Term resolve(Term term) { + // if (term == null) { + // // for non-existing clauses in maps. + // return null; + // } + // + // if(services.getTypeConverter().getHeapLDT().isSelectOp(term.op())) { + // return resolveSelect(term); + // } + // + // return resolveDefault(term); + // } + // + // private Term resolveDefault(Term term) { + // Term[] newsubs = null; + // ImmutableArray subs = term.subs(); + // for (int i = 0; i < subs.size(); i++) { + // Term in = subs.get(i); + // Term out = resolve(in); + // if (in != out) { + // if (newsubs == null) { + // newsubs = subs.toArray(new Term[subs.size()]); + // } + // newsubs[i] = out; + // } + // } + // + // if (newsubs == null) { + // return term; + // } else { + // return services.getTermFactory().createTerm(term.op(), newsubs, + // term.boundVars(), term.javaBlock(), term.getLabels()); + // } + // } + // + // private Term resolveSelect(Term term) { + // Term obj = term.sub(1); + // Term field = term.sub(2); + // ProgramVariable pv = getFieldSymbol(field); + // if (pv != null && pv.isFinal()) { + // return services.getTermBuilder().finalDot(pv.sort(), + // resolve(obj), field); + // } + // return resolveDefault(term); + // } + // + // private ProgramVariable getFieldSymbol(Term fieldTerm) { + // Operator op = fieldTerm.op(); + // if (op instanceof Function) { + // final String name = op.name().toString(); + // + // // check for normal attribute + // int endOfClassName = name.indexOf("::$"); + // + // int startAttributeName = endOfClassName + 3; + // + // + // if (endOfClassName < 0) { + // // not a normal attribute, maybe an implicit attribute like ? + // endOfClassName = name.indexOf("::<"); + // startAttributeName = endOfClassName + 2; + // } + // + // if (endOfClassName < 0) { + // return null; + // } + // + // final String className = name.substring(0, endOfClassName); + // final String attributeName = name.substring(startAttributeName); + // + // final ProgramVariable attribute = + // services.getJavaInfo().getAttribute(attributeName, className); + // + // return attribute; + // } + // return null; + // } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java index 625f36edd61..22b80db8c9e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FunctionalOperationContractPO.java @@ -14,7 +14,6 @@ import de.uka.ilkd.key.java.expression.operator.New; import de.uka.ilkd.key.java.reference.TypeRef; import de.uka.ilkd.key.java.statement.MethodBodyStatement; -import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.logic.Sequent; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.label.OriginTermLabel.Origin; @@ -83,9 +82,6 @@ public class FunctionalOperationContractPO extends AbstractOperationPO implement public FunctionalOperationContractPO(InitConfig initConfig, FunctionalOperationContract contract) { super(initConfig, contract.getName()); - if (FinalHeapResolver.isFinalEnabled(initConfig)) { - contract = new FinalHeapResolver(initConfig.getServices()).resolve(contract); - } this.contract = contract; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java index caae9a8240f..632cc88288e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java +++ b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java @@ -10,7 +10,6 @@ import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.java.abstraction.KeYJavaType; -import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.ldt.LocSetLDT; import de.uka.ilkd.key.logic.*; @@ -403,15 +402,9 @@ public boolean isApplicable(Goal goal, PosInOccurrence pio) { assert contract != null; - if (FinalHeapResolver.isFinalEnabled(goal.proof().getSettings())) { - contract = new FinalHeapResolver(services).resolve(contract); - } - // get step final PosInOccurrence step = ((UseDependencyContractApp) ruleApp).step(goal.sequent(), services); - // get step - final PosInOccurrence step = ((UseDependencyContractApp) ruleApp).step(); final boolean twoState = target.getStateCount() == 2; final int obsHeapCount = target.getHeapCount(services); diff --git a/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java b/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java index 135166a0712..2ea0da61db0 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java +++ b/key.core/src/main/java/de/uka/ilkd/key/rule/UseOperationContractRule.java @@ -34,7 +34,6 @@ import de.uka.ilkd.key.java.reference.TypeReference; import de.uka.ilkd.key.java.statement.Throw; import de.uka.ilkd.key.java.visitor.ProgramContextAdder; -import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.JavaBlock; @@ -567,10 +566,6 @@ public boolean isApplicable(Goal goal, PosInOccurrence pio) { assert contract.getTarget().equals(inst.pm); - if (FinalHeapResolver.isFinalEnabled(goal.proof().getSettings())) { - contract = new FinalHeapResolver(services).resolve(contract); - } - final List heapContext = HeapContext.getModifiableHeaps(goal.proof().getServices(), inst.transaction); diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/SLEnvInput.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/SLEnvInput.java index c738ffcdd77..c029d65f677 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/SLEnvInput.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/SLEnvInput.java @@ -390,7 +390,7 @@ public ImmutableSet read() throws ProofInputException { final GeneralSettings gs = ProofIndependentSettings.DEFAULT_INSTANCE.getGeneralSettings(); if (gs.isUseJML()) { - return createSpecs(new JMLSpecExtractor(initConfig.getServices())); + return createSpecs(new JMLSpecExtractor(initConfig)); } else { return null; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java index 76224db9010..44ea359a7f1 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java @@ -19,11 +19,13 @@ import de.uka.ilkd.key.java.statement.LabeledStatement; import de.uka.ilkd.key.java.statement.LoopStatement; import de.uka.ilkd.key.java.statement.MergePointStatement; +import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.logic.label.ParameterlessTermLabel; import de.uka.ilkd.key.logic.label.TermLabel; import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.LocationVariable; import de.uka.ilkd.key.parser.Location; +import de.uka.ilkd.key.proof.init.InitConfig; import de.uka.ilkd.key.speclang.*; import de.uka.ilkd.key.speclang.jml.pretranslation.*; import de.uka.ilkd.key.speclang.jml.translation.JMLSpecFactory; @@ -34,6 +36,9 @@ import de.uka.ilkd.key.speclang.translation.SLWarningException; import org.key_project.util.collection.*; +import org.key_project.util.collection.DefaultImmutableSet; +import org.key_project.util.collection.ImmutableArray; +import org.key_project.util.collection.ImmutableList; import org.antlr.v4.runtime.ParserRuleContext; @@ -69,8 +74,9 @@ public final class JMLSpecExtractor implements SpecExtractor { // constructors // ------------------------------------------------------------------------- - public JMLSpecExtractor(Services services) { - this.services = services; + public JMLSpecExtractor(InitConfig initConfig) { + FinalHeapResolver.rememberIfFinalEnabled(initConfig); + this.services = initConfig.getServices(); this.jsf = new JMLSpecFactory(services); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java index d611c701e08..4631fe92e4b 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java @@ -10,6 +10,7 @@ import de.uka.ilkd.key.java.declaration.MemberDeclaration; import de.uka.ilkd.key.java.declaration.TypeDeclaration; import de.uka.ilkd.key.java.recoderext.ImplicitFieldAdder; +import de.uka.ilkd.key.ldt.FinalHeapResolver; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.op.*; @@ -135,7 +136,8 @@ protected SLExpression doResolving(SLExpression receiver, String name, SLParamet if (attribute.isStatic()) { attributeTerm = services.getTermBuilder().staticDot(attribute.sort(), fieldSymbol); - } else if (attribute.isFinal()) { + } else if (attribute.isFinal() && + FinalHeapResolver.recallIsFinalEnabled()) { attributeTerm = services.getTermBuilder().finalDot(attribute.sort(), recTerm, fieldSymbol); From bbafd0fdbed071fa8f2b863e59648db824e54e42 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 15:24:08 +0200 Subject: [PATCH 06/31] adapt rule for new syntax manually replayed 94437c05212cbe6e23b97a79e4b1a2f6cb1edb24 --- .../main/resources/de/uka/ilkd/key/proof/rules/heapRules.key | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key index 3570733be2a..5c4cabcdfa8 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key @@ -1394,7 +1394,7 @@ \find(beta::final(o,arr(idx))) \sameUpdateLevel - \varcond(\hasSort(\elemSort(o), alpha), + \varcond(\hasElementarySort(o, alpha), \strict\sub(alpha, beta)) \replacewith(alpha::final(o,arr(idx))) From d928eb04df8f338d6a368d15ed786cbc7ac1ff1b Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 15:36:39 +0200 Subject: [PATCH 07/31] Add pretty printing for final fields manually replaying 1ebb594fd2c95feeeb81125c0a0dc7192032cb05 --- .../java/de/uka/ilkd/key/pp/FinalPrinter.java | 203 ++++++++++++++++++ .../java/de/uka/ilkd/key/pp/LogicPrinter.java | 10 + .../java/de/uka/ilkd/key/pp/Notation.java | 15 ++ .../java/de/uka/ilkd/key/pp/NotationInfo.java | 1 + .../de/uka/ilkd/key/pp/SelectPrinter.java | 4 + .../key/rule/UseDependencyContractRule.java | 2 +- 6 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java new file mode 100644 index 00000000000..1c6fd628e19 --- /dev/null +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java @@ -0,0 +1,203 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ +package de.uka.ilkd.key.pp; + +import java.io.IOException; + +import de.uka.ilkd.key.java.JavaInfo; +import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.java.abstraction.KeYJavaType; +import de.uka.ilkd.key.ldt.HeapLDT; +import de.uka.ilkd.key.ldt.JavaDLTheory; +import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.op.ProgramVariable; +import org.key_project.logic.op.Function; +import org.key_project.logic.sort.Sort; + +/** + * This class is used by LogicPrinter.java to print out final-terms, i.e. terms + * of the following form: T::final(heap, object, field) + * + * Almost exact copy of SelectPrinter without the heap printing. + * + * @author Julian Wiesler + */ +class FinalPrinter extends FieldPrinter { + + FinalPrinter(Services services) { + super(services); + } + + /* + * Print a term of the form: T::final(object, field). + */ + public void printFinal(LogicPrinter lp, Term t) { + assert t.boundVars().isEmpty(); + assert t.arity() == 2; + HeapLDT heapLDT = lp.getHeapLDT(); + + if (lp.notationInfo.isPrettySyntax() && heapLDT != null) { + final Term objectTerm = t.sub(0); + final Term fieldTerm = t.sub(1); + // Array selects are never final, no need to handle them + if (t.sort().equals(JavaDLTheory.ANY)) { + /* + * This section deals with PP of frame conditions (and similar). + * Select-type is any. + */ + if (isFieldName(fieldTerm.op().name().toString(), objectTerm) + || isJavaFieldConstant(fieldTerm)) { + lp.printFunctionTerm(t); + } else { + printAnySelect(lp, objectTerm, fieldTerm); + } + } else if (isBuiltinObjectProperty(fieldTerm)) { + // object properties denoted like o. + printBuiltinObjectProperty(lp, t, objectTerm, fieldTerm); + } else if (isStaticFieldConstant(objectTerm, fieldTerm) + && getFieldSort(fieldTerm).equals(t.sort())) { + // static field access + printStaticJavaFieldConstant(lp, fieldTerm); + } else if (isJavaFieldConstant(fieldTerm) + && getFieldSort(fieldTerm).equals(t.sort())) { + // non-static field access + printNonStaticJavaFieldConstant(lp, objectTerm, fieldTerm); + } else { + lp.printFunctionTerm(t); + } + } else { + lp.printFunctionTerm(t); + } + } + + /* + * Check whether there is a field with the same name as a variable. + */ + private boolean isFieldName(String variableName, Term objectTerm) { + Sort sort = objectTerm.sort(); + JavaInfo javaInfo = services.getJavaInfo(); + KeYJavaType kjt = javaInfo.getKeYJavaType(sort); + ProgramVariable pv = javaInfo.getCanonicalFieldProgramVariable(variableName, kjt); + return pv != null; + } + + /* + * Get sort of selected field. + */ + private Sort getFieldSort(Term fieldTerm) { + String lookup = fieldTerm.op().toString().replace("$", ""); + ProgramVariable progVar = services.getJavaInfo().getAttribute(lookup); + return progVar.sort(); + } + + /* + * Print a static field constant. + */ + private void printStaticJavaFieldConstant( + LogicPrinter lp, final Term fieldTerm) { + lp.layouter.startTerm(2); + /* + * Is consideration for static arrays missing in this? + * (Kai Wallisch 08/2014) + * + * No, array accesses are not static selects. + * This only handles the access to the static array reference. + */ + + String className = HeapLDT.getClassName((Function) fieldTerm.op()); + + if (className == null) { + // if the class name cannot be determined, print "null" + lp.layouter.markStartSub(0); + lp.printTerm(lp.services.getTermBuilder().NULL()); + lp.layouter.markEndSub(); + } else { + lp.layouter.markStartSub(0); + // "null" not printed, print className (which is not a subterm) + lp.layouter.markEndSub(); + lp.printClassName(className); + } + + lp.layouter.print("."); + lp.layouter.markStartSub(1); + lp.layouter.startTerm(0); + lp.layouter.print(HeapLDT.getPrettyFieldName(fieldTerm.op())); + lp.layouter.markEndSub(); + } + + /* + * Print a non-static field constant. + */ + private void printNonStaticJavaFieldConstant( + LogicPrinter lp, final Term objectTerm, + final Term fieldTerm) { + lp.layouter.startTerm(2); + lp.layouter.markStartSub(0); + lp.printTerm(objectTerm); + lp.layouter.markEndSub(); + lp.layouter.print("."); + lp.layouter.markStartSub(1); + lp.layouter.startTerm(0); + lp.layouter.print(getPrettySyntaxForFieldConstant(objectTerm, fieldTerm)); + lp.printLabels(fieldTerm); + lp.layouter.markEndSub(); + } + + /* + * Print a term of the form: any::final(heap, object, field). + */ + private void printAnySelect( + LogicPrinter lp, final Term objectTerm, + final Term fieldTerm) { + lp.layouter.startTerm(2); + lp.layouter.markStartSub(0); + lp.printTerm(objectTerm); + lp.layouter.markEndSub(); + lp.layouter.print("."); + lp.layouter.markStartSub(1); + lp.printTerm(fieldTerm); + lp.layouter.markEndSub(); + } + + /* + * Print a select-term of the following form: + * T::final( ... , ... , java.lang.Object::<...>) + * For example: + * boolean::final(heap, object, java.lang.Object::) + */ + private void printBuiltinObjectProperty( + LogicPrinter lp, Term t, + Term objectTerm, + Term fieldTerm) { + JavaInfo javaInfo = services.getJavaInfo(); + KeYJavaType selectKJT = javaInfo.getKeYJavaType(t.sort()); + KeYJavaType objectKJT = javaInfo.getKeYJavaType(objectTerm.sort()); + + if (selectKJT != null && objectKJT != null) { + assert fieldTerm.op().name().toString().contains("::<"); + String prettyFieldName = HeapLDT.getPrettyFieldName(fieldTerm.op()); + ProgramVariable pv = + javaInfo.getCanonicalFieldProgramVariable(prettyFieldName, objectKJT); + + if (pv != null && pv.sort().equals(t.sort())) { + lp.layouter.startTerm(2); + lp.layouter.markStartSub(0); + lp.printTerm(objectTerm); + lp.layouter.markEndSub(); + lp.layouter.print("."); + lp.layouter.markStartSub(1); + lp.printConstant(fieldTerm, prettyFieldName); + lp.layouter.markEndSub(); + } else { + // In case field sort is not equal to select sort, use generic fallback. + lp.printFunctionTerm(t); + } + + } else { + // In case select sort is no KeYJavaType, use generic fallback. + lp.printFunctionTerm(t); + } + } + +} diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java index 11deca874c7..fd382b162d9 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java @@ -3,6 +3,7 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; +import java.io.IOException; import java.util.Iterator; import java.util.Set; @@ -74,6 +75,7 @@ public class LogicPrinter { private SVInstantiations instantiations = SVInstantiations.EMPTY_SVINSTANTIATIONS; private final SelectPrinter selectPrinter; + private final FinalPrinter finalPrinter; private final StorePrinter storePrinter; private QuantifiableVariablePrintMode quantifiableVariablePrintMode = @@ -98,6 +100,7 @@ public LogicPrinter(NotationInfo notationInfo, Services services, PosTableLayout notationInfo.refresh(services); } storePrinter = new StorePrinter(this.services); + finalPrinter = new FinalPrinter(this.services); selectPrinter = new SelectPrinter(this.services); this.layouter = layouter; } @@ -1060,6 +1063,13 @@ public void printSelect(Term t, Term tacitHeap) { selectPrinter.printSelect(this, t, tacitHeap); } + /* + * Print a term of the form: T::final(object, field). + */ + public void printFinal(Term t) { + finalPrinter.printFinal(this, t); + } + /* * Print a term of the form: store(heap, object, field, value). */ diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java b/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java index 25897691d5d..d66830f238c 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java @@ -3,6 +3,7 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; +import java.io.IOException; import java.util.Iterator; import de.uka.ilkd.key.java.ProgramElement; @@ -367,6 +368,20 @@ public void printWithHeap(Term t, LogicPrinter sp, Term heapTerm) { } } + /** + * The standard concrete syntax for select. + */ + public static final class FinalNotation extends Notation { + public FinalNotation() { + super(140); + } + + @Override + public void print(Term t, LogicPrinter sp) { + sp.printFinal(t); + } + } + /** * The standard concrete syntax for heap constructors. */ diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java b/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java index 9257f7d5618..954c779d867 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java @@ -282,6 +282,7 @@ private HashMap createPrettyNotation(Services services) { // heap operators final HeapLDT heapLDT = services.getTypeConverter().getHeapLDT(); tbl.put(HeapLDT.SELECT_NAME, new Notation.SelectNotation()); + tbl.put(HeapLDT.FINAL_NAME, new Notation.FinalNotation()); tbl.put(heapLDT.getStore(), new Notation.StoreNotation()); tbl.put(heapLDT.getAnon(), new Notation.HeapConstructorNotation()); tbl.put(heapLDT.getCreate(), new Notation.HeapConstructorNotation()); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java index 702e4acdecf..e92aeb77b2d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java @@ -129,11 +129,15 @@ private Sort getFieldSort(Term fieldTerm) { * Print a static field constant. */ private void printStaticJavaFieldConstant(LogicPrinter lp, final Term fieldTerm, + final Term heapTerm, Term tacitHeap) { lp.layouter.startTerm(3); /* * Is consideration for static arrays missing in this? (Kai Wallisch 08/2014) + * + * No, array accesses are not static selects. + * This only handles the access to the static array reference. */ String className = HeapLDT.getClassName((Function) fieldTerm.op()); diff --git a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java index 632cc88288e..c91a036b1cc 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java +++ b/key.core/src/main/java/de/uka/ilkd/key/rule/UseDependencyContractRule.java @@ -404,7 +404,7 @@ public boolean isApplicable(Goal goal, PosInOccurrence pio) { // get step final PosInOccurrence step = - ((UseDependencyContractApp) ruleApp).step(goal.sequent(), services); + ((UseDependencyContractApp) ruleApp).step(); final boolean twoState = target.getStateCount() == 2; final int obsHeapCount = target.getHeapCount(services); From 82e1aadce113111ef10d035587b203fd9674d67e Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 6 Jul 2024 23:33:04 +0200 Subject: [PATCH 08/31] set statements may also assign to final fields ... revert to heap updates in such cases. --- .../speclang/jml/translation/JMLSpecFactory.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java index 5c65044189b..751d7953e97 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java @@ -1552,6 +1552,7 @@ public void translateSetStatement(final SetStatement statement, final IProgramMe .resultVariable(pv.resultVar).exceptionVariable(pv.excVar).atPres(pv.atPres) .atBefore(pv.atBefores); Term assignee = io.translateTerm(setStatementContext.getAssignee()); + assignee = resolveFinalAssignee(assignee); Term value = io.translateTerm(setStatementContext.getValue()); if (value.sort() == JavaDLTheory.FORMULA) { value = tb.convertToBoolean(value); @@ -1568,6 +1569,19 @@ public void translateSetStatement(final SetStatement statement, final IProgramMe new SpecificationRepository.JmlStatementSpec(pv, ImmutableList.of(assignee, value))); } + private Term resolveFinalAssignee(Term assignee) { + if (services.getTypeConverter().getHeapLDT().isFinalOp(assignee.op())) { + SortDependingFunction finalOp = assignee.op(SortDependingFunction.class); + return tb.select( + finalOp.sort(), + tb.getBaseHeap(), + assignee.sub(0), + assignee.sub(1)); + } else { + return assignee; + } + } + /** * Creates a program variable collection for a specified block. This collection contains all * program variables that occur freely in the block as parameters (i.e., in From 44d86348de7a6cc44bc59a7ff72266b251669d9c Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sun, 7 Jul 2024 17:01:07 +0200 Subject: [PATCH 09/31] spotlessing ... --- .../src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java | 4 ++-- .../src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java | 1 - key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java | 3 +-- .../ilkd/key/speclang/jml/translation/JMLSpecFactory.java | 8 ++++---- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java index 1c6fd628e19..bef77098ae4 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java @@ -3,7 +3,6 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; -import java.io.IOException; import de.uka.ilkd.key.java.JavaInfo; import de.uka.ilkd.key.java.Services; @@ -12,6 +11,7 @@ import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.op.ProgramVariable; + import org.key_project.logic.op.Function; import org.key_project.logic.sort.Sort; @@ -149,7 +149,7 @@ private void printNonStaticJavaFieldConstant( */ private void printAnySelect( LogicPrinter lp, final Term objectTerm, - final Term fieldTerm) { + final Term fieldTerm) { lp.layouter.startTerm(2); lp.layouter.markStartSub(0); lp.printTerm(objectTerm); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java index fd382b162d9..f9045af4f56 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java @@ -3,7 +3,6 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; -import java.io.IOException; import java.util.Iterator; import java.util.Set; diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java b/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java index d66830f238c..ecd61d9af64 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/Notation.java @@ -3,7 +3,6 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; -import java.io.IOException; import java.util.Iterator; import de.uka.ilkd.key.java.ProgramElement; @@ -377,7 +376,7 @@ public FinalNotation() { } @Override - public void print(Term t, LogicPrinter sp) { + public void print(Term t, LogicPrinter sp) { sp.printFinal(t); } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java index 751d7953e97..b3a37812312 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java @@ -1573,10 +1573,10 @@ private Term resolveFinalAssignee(Term assignee) { if (services.getTypeConverter().getHeapLDT().isFinalOp(assignee.op())) { SortDependingFunction finalOp = assignee.op(SortDependingFunction.class); return tb.select( - finalOp.sort(), - tb.getBaseHeap(), - assignee.sub(0), - assignee.sub(1)); + finalOp.sort(), + tb.getBaseHeap(), + assignee.sub(0), + assignee.sub(1)); } else { return assignee; } From ea6e9ca4f99ae0aff2745c377222c3d7dea049ce Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 27 Aug 2024 15:55:40 +0200 Subject: [PATCH 10/31] towards final heaps with static analysis --- build.gradle | 3 +- .../po/TruthValuePOExtension.java | 4 +- .../uka/ilkd/key/ldt/FinalHeapResolver.java | 41 +++- .../key/proof/init/AbstractOperationPO.java | 9 +- .../proof/init/FinalFieldCodeValidator.java | 180 ++++++++++++++++++ .../proof/init/FinalFieldsPOExtension.java | 59 ++++++ .../uka/ilkd/key/proof/init/POExtension.java | 14 +- .../key/proof/init/ProblemInitializer.java | 2 +- .../de.uka.ilkd.key.proof.init.POExtension | 1 + 9 files changed, 299 insertions(+), 14 deletions(-) create mode 100644 key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java create mode 100644 key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java diff --git a/build.gradle b/build.gradle index 61364ce00d4..73176d4f9f4 100644 --- a/build.gradle +++ b/build.gradle @@ -371,7 +371,8 @@ subprojects { // "-Astubs=$projectDir/src/main/checkerframework", // "-Werror", // "-Aversion", -// ] +// +// skipCheckerFramework = true // } afterEvaluate { // required so project.description is non-null as set by sub build.gradle diff --git a/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java b/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java index 5126e429d94..b7e78e69322 100644 --- a/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java +++ b/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java @@ -8,6 +8,7 @@ import de.uka.ilkd.key.logic.TermFactory; import de.uka.ilkd.key.logic.label.FormulaTermLabel; import de.uka.ilkd.key.logic.label.TermLabel; +import de.uka.ilkd.key.logic.op.ProgramVariable; import de.uka.ilkd.key.proof.init.AbstractOperationPO; import de.uka.ilkd.key.proof.init.InitConfig; import de.uka.ilkd.key.proof.init.POExtension; @@ -35,7 +36,8 @@ public boolean isPOSupported(ProofOblInput po) { * {@inheritDoc} */ @Override - public Term modifyPostTerm(InitConfig proofConfig, Services services, Term postTerm) { + public Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, Services services, ProgramVariable selfTerm, + Term postTerm) { if (SymbolicExecutionJavaProfile.isTruthValueEvaluationEnabled(proofConfig)) { return labelPostTerm(services, postTerm); } else { diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java index 65e7583010d..270b3b995d3 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java @@ -3,6 +3,7 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.ldt; +import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.proof.init.InitConfig; import de.uka.ilkd.key.settings.ProofSettings; @@ -10,6 +11,7 @@ public class FinalHeapResolver { private static final ThreadLocal finalEnabledVariable = new ThreadLocal<>(); + private static String OPTION = "finalFields"; public static boolean isFinalEnabled(InitConfig initConfig) { ProofSettings settings = initConfig.getSettings(); @@ -20,8 +22,8 @@ public static boolean isFinalEnabled(InitConfig initConfig) { } public static boolean isFinalEnabled(ProofSettings settings) { - return settings.getChoiceSettings().getDefaultChoices().get("finalFields") - .equals("finalFields:immutable"); + return settings.getChoiceSettings().getDefaultChoices().get(OPTION) + .equals(OPTION + ":immutable"); } public static boolean recallIsFinalEnabled() { @@ -36,6 +38,41 @@ public static void rememberIfFinalEnabled(InitConfig initConfig) { finalEnabledVariable.set(isFinalEnabled(initConfig)); } + + +// // see WellDefinednessCheck.isOn() +// public static boolean isFinalEnabled() { +// final String setting = +// ProofSettings.DEFAULT_SETTINGS.getChoiceSettings().getDefaultChoices().get(OPTION); +// if(setting == null) { +// throw new RuntimeException("The setting for the wdProofs-option is not set."); +// } else if (setting.equals(OPTION + ":immutable")) { +// return true; +// } else if (setting.equals(OPTION + ":other")) { +// return false; +// } else { +// throw new RuntimeException( +// "The setting for the wdProofs-option is not valid: " + setting); +// } +// return bool.booleanValue(); +// } +// +// // see above ... I doubt that this works ... +// public static boolean isFinalEnabled(Services services) { +// final String setting = +// services.getProof().getSettings().getChoiceSettings().getDefaultChoices().get(OPTION); +// if(setting == null) { +// throw new RuntimeException("The setting for the wdProofs-option is not set."); +// } else if (setting.equals(OPTION + ":immutable")) { +// return true; +// } else if (setting.equals(OPTION + ":other")) { +// return false; +// } else { +// throw new RuntimeException( +// "The setting for the wdProofs-option is not valid: " + setting); +// } +// } + // private final Services services; // // public FinalHeapResolver(Services services) { diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/AbstractOperationPO.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/AbstractOperationPO.java index 2fd28490a66..f420f724e8f 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/AbstractOperationPO.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/AbstractOperationPO.java @@ -526,16 +526,17 @@ protected Services postInit() { /** * Modifies the post condition with help of - * {@link POExtension#modifyPostTerm(InitConfig, Services, Term)}. + * {@link POExtension#modifyPostTerm(AbstractOperationPO, InitConfig, Services, ProgramVariable, Term)}. * * @param proofServices The {@link Services} to use. + * @param self * @param post The post condition to modify. * @return The modified post condition or the original one if no modifications were performed. */ - protected Term modifyPostTerm(Services proofServices, Term post) { + protected Term modifyPostTerm(Services proofServices, ProgramVariable self, Term post) { ImmutableList extensions = ProofInitServiceUtil.getOperationPOExtension(this); for (POExtension extension : extensions) { - post = extension.modifyPostTerm(proofConfig, proofServices, post); + post = extension.modifyPostTerm(this, proofConfig, proofServices, self, post); } return post; } @@ -1117,7 +1118,7 @@ private Term createNonModelPOTerm(final IProgramMethod pm, final LocationVariabl // build program term Term post = createPost(selfVar, paramVars, formalParamVars, resultVar, exceptionVar, modifiableHeaps, atPreVars, modifiableHeaps, heapToAtPre, proofServices); - post = modifyPostTerm(proofServices, post); + post = modifyPostTerm(proofServices, selfVar, post); final Term progPost = buildProgramTerm(paramVars, formalParamVars, selfVar, resultVar, exceptionVar, atPreVars, post, sb, proofServices); diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java new file mode 100644 index 00000000000..7a8d15a3760 --- /dev/null +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -0,0 +1,180 @@ +package de.uka.ilkd.key.proof.init; + +import de.uka.ilkd.key.java.*; +import de.uka.ilkd.key.java.abstraction.ClassType; +import de.uka.ilkd.key.java.abstraction.KeYJavaType; +import de.uka.ilkd.key.java.expression.Assignment; +import de.uka.ilkd.key.java.reference.*; +import de.uka.ilkd.key.logic.op.IProgramMethod; +import de.uka.ilkd.key.logic.op.ProgramVariable; +import org.key_project.logic.SyntaxElement; +import org.key_project.util.collection.IdentityHashSet; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Set; + +/** + * Validates the code of a constructor to ensure that final fields are not read before they are initialized. + * + * Currently rather strict: + * - Called methods must not receive 'this' as an explicit parameter + * - 'this' must not be assigned to any field or variable + * - final fields must not be read. + * - Methods called on 'this' must be effectively final (not overridable) + * - Methods called on 'this' must not read any final fields as well. + * + * Potential for relaxaions: + * - Final fields may be read after initialization (locally and in called methods) + * This requires a lot more bookkeeping, though. + * + * If this is a secondary constructor (referring to another constructor via this()), there are no restrictions. + */ +class FinalFieldCodeValidator { + private final InitConfig initConfig; + private final Set validatedMethods = new IdentityHashSet<>(); + private final Deque methodStack = new ArrayDeque<>(); + private KeYJavaType enclosingClass; + + public FinalFieldCodeValidator(InitConfig initConfig) { + this.initConfig = initConfig; + } + + public static void validateFinalFields(IProgramMethod constructor, InitConfig initConfig) { + var validator = new FinalFieldCodeValidator(initConfig); + validator.enclosingClass = null; // constructor.getEnclosingClass(); // TODO! + if(isSecondaryConstructor(constructor)) { + // secondary constructors are fine! + return; + } + validator.validate(constructor); + } + + private static boolean isSecondaryConstructor(IProgramMethod constructor) { + StatementBlock body = constructor.getBody(); + if(body == null) { + return false; + } + + if(body.getStatementCount() == 0) { + return false; + } + + var firstStatement = body.getStatementAt(0); + if (firstStatement instanceof MethodOrConstructorReference methodReference) { + // check that this is a reference of the form this(...) + return true; + } + + return false; + } + + private void validate(IProgramMethod method) { + if(validatedMethods.contains(method)) { + return; + } + + methodStack.push(method); + + StatementBlock body = method.getBody(); + if(body == null) { + throw new FinalViolationException("Method " + method.getFullName() + " has no body."); + } + + for(int i = 0; i < body.getStatementCount(); i++) { + var statement = body.getStatementAt(i); + validateProgramElement(statement); + } + + var popped = methodStack.pop(); + assert popped == method; + validatedMethods.add(method); + } + + private void validateProgramElement(SyntaxElement element) { + if(element instanceof MethodOrConstructorReference methodReference) { + validateMethodReference(methodReference); + } else if(element instanceof FieldReference fieldReference) { + validateFieldReference(fieldReference); + } else if(element instanceof Assignment assignment) { + validateAssignment(assignment); + } + // Case: "string" + this .... not allowed! + // Case: Model method calls are as problematic as the rest ... + + for(int i = 0; i < element.getChildCount(); i++) { + validateProgramElement(element.getChild(i)); + } + } + + private void validateMethodReference(MethodOrConstructorReference methodReference) { + ReferencePrefix referencePrefix = methodReference.getReferencePrefix(); + var calledOnThis = referencePrefix == null || referencePrefix instanceof ThisReference; + var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); + + if(hasThisArgument) { + throw new FinalViolationException("Method call " + methodReference + " leaks 'this' to called method.", methodReference); + } + + if(calledOnThis) { + IProgramMethod method = findMethod(methodReference); + if(method.isStatic() || method.isConstructor()) { + // local static methods are acutally fine ... + // constructor calls are also fine + // TODO (well ... what about inner classes?) + return; + } + if(!method.isFinal() && !method.isPrivate() && !((ClassType)enclosingClass.getJavaType()).isFinal()) { + throw new FinalViolationException("Method called on 'this' that is not effectively final.", methodReference); + } + validate(method); + } + } + + private IProgramMethod findMethod(MethodOrConstructorReference methodReference) { + // return the program method for the method reference + // YOu can use enclosingClass to get the class in which the method is defined + // The method is guaranteed to be defined in the enclosing class not in a superclass. + // One can also peek the method stack if needed ... + throw new UnsupportedOperationException("Not implemented yet."); + } + + private void validateAssignment(Assignment assignment) { + SyntaxElement value = assignment.getChild(1); + if (value instanceof ThisReference) { + throw new FinalViolationException("'this' is leaked to a field or variable.", assignment); + } + } + + private void validateFieldReference(FieldReference fieldReference) { + ReferencePrefix prefix = fieldReference.getReferencePrefix(); + ProgramVariable field = fieldReference.getProgramVariable(); + if(field.isFinal() && prefix instanceof ThisReference) { + throw new FinalViolationException("Final field " + field + " is read.", fieldReference); + } + } + + static class FinalViolationException extends RuntimeException { + + private final Position position; + + public FinalViolationException(String message) { + this(message, null); + } + + public FinalViolationException(String message, SyntaxElement syntaxElement) { + super(message); + if (syntaxElement instanceof SourceElement sourceElement) { + this.position = sourceElement.getStartPosition(); + } else { + this.position = null; + } + } + + public Position getPosition() { + return position; + } + } +} + + diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java new file mode 100644 index 00000000000..1a2872fceee --- /dev/null +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -0,0 +1,59 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ +package de.uka.ilkd.key.proof.init; + +import java.util.List; + +import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.ldt.FinalHeapResolver; +import de.uka.ilkd.key.ldt.JavaDLTheory; +import de.uka.ilkd.key.logic.Choice; +import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.TermBuilder; +import de.uka.ilkd.key.logic.op.IProgramMethod; +import de.uka.ilkd.key.logic.op.LogicVariable; +import de.uka.ilkd.key.logic.op.ProgramVariable; + +import org.key_project.logic.Name; + +public class FinalFieldsPOExtension implements POExtension { + + private static final Choice FINAL_IMMUTABLE_CHOICE = new Choice("finalFields", "immutable"); + + @Override + public boolean isPOSupported(ProofOblInput po) { + if (po instanceof FunctionalOperationContractPO) { + FunctionalOperationContractPO fpo = (FunctionalOperationContractPO) po; + return fpo.getProgramMethod().isConstructor(); + } + return false; + } + + @Override + public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfig, Services services, ProgramVariable selfVar, + Term postTerm) { + + if(!FinalHeapResolver.isFinalEnabled(proofConfig)) { + return postTerm; + } + + // We know this holds because of isPOSupported: + FunctionalOperationContractPO fpo = (FunctionalOperationContractPO) abstractPO; + IProgramMethod constructor = fpo.getProgramMethod(); + assert constructor.isConstructor(); + + FinalFieldCodeValidator.validateFinalFields(constructor, proofConfig); + + TermBuilder tb = services.getTermBuilder(); + LogicVariable fv = new LogicVariable(new Name("o"), + services.getTypeConverter().getHeapLDT().getFieldSort()); + Term self = tb.var(selfVar); + Term sel = tb.dot(JavaDLTheory.ANY, self, tb.var(fv)); + Term fsel = tb.finalDot(JavaDLTheory.ANY, self, tb.var(fv)); + Term eq = tb.equals(sel, fsel); + Term all = tb.all(List.of(fv), eq); + Term imp = tb.imp(all, postTerm); + return imp; + } +} diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java index 266ed43b14b..4d7993e6586 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java @@ -5,6 +5,7 @@ import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.op.ProgramVariable; /** * Instances of this interface are used to customize and extend the behavior of a @@ -28,11 +29,14 @@ public interface POExtension { /** * Modifies the post condition. * - * @param proofConfig The {@link InitConfig} to use. - * @param services The {@link Services} to use. - * @param postTerm The post condition to modify. + * @param abstractOperationPO The proof obligation for which the mdification is done + * @param proofConfig The {@link InitConfig} to use. + * @param services The {@link Services} to use. + * @param selfTerm The {@link ProgramVariable} representing the current receiver object. + * @param postTerm The post condition to modify. * @return The modified post condition or the original post condition if no modifications were - * performed. + * performed. */ - Term modifyPostTerm(InitConfig proofConfig, Services services, Term postTerm); + Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, Services services, ProgramVariable selfTerm, + Term postTerm); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java index ed2304e2cc5..ec119249dd5 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java @@ -599,7 +599,7 @@ public ProofAggregate startProver(InitConfig initConfig, ProofOblInput po) // done proofCreated(pa); return pa; - } catch (ProofInputException e) { + } catch (Exception e) { reportException(po, e); throw e; } finally { diff --git a/key.core/src/main/resources/META-INF/services/de.uka.ilkd.key.proof.init.POExtension b/key.core/src/main/resources/META-INF/services/de.uka.ilkd.key.proof.init.POExtension index e69de29bb2d..7f30858649c 100644 --- a/key.core/src/main/resources/META-INF/services/de.uka.ilkd.key.proof.init.POExtension +++ b/key.core/src/main/resources/META-INF/services/de.uka.ilkd.key.proof.init.POExtension @@ -0,0 +1 @@ +de.uka.ilkd.key.proof.init.FinalFieldsPOExtension \ No newline at end of file From e46b239e3155e6bd70dbdcb2b5492d514670b526 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 10 Dec 2024 08:40:21 +0100 Subject: [PATCH 11/31] final field code validator and tests thanks to Richard for hinting at the needed infrastructure --- .../proof/init/FinalFieldCodeValidator.java | 40 ++++++---- .../proof/init/FinalFieldsPOExtension.java | 8 +- .../init/FinalFieldCodeValidatorTest.java | 74 +++++++++++++++++++ .../init/final/shouldfail/FinalProblem1.java | 17 +++++ .../FinalReadBeforeWriteIndirect.java | 17 +++++ .../init/final/shouldfail/LeakThis1.java | 17 +++++ .../init/final/shouldfail/LeakThis2.java | 23 ++++++ .../proof/init/final/shouldfail/Subclass.java | 23 ++++++ .../shouldparse/SecondaryConstructor.java | 15 ++++ .../key/gui/WindowUserInterfaceControl.java | 2 +- 10 files changed, 216 insertions(+), 20 deletions(-) create mode 100644 key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalReadBeforeWriteIndirect.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis1.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis2.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/Subclass.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index 7a8d15a3760..2961573c233 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -6,6 +6,7 @@ import de.uka.ilkd.key.java.expression.Assignment; import de.uka.ilkd.key.java.reference.*; import de.uka.ilkd.key.logic.op.IProgramMethod; +import de.uka.ilkd.key.logic.op.ProgramMethod; import de.uka.ilkd.key.logic.op.ProgramVariable; import org.key_project.logic.SyntaxElement; import org.key_project.util.collection.IdentityHashSet; @@ -27,6 +28,9 @@ * Potential for relaxaions: * - Final fields may be read after initialization (locally and in called methods) * This requires a lot more bookkeeping, though. + * - Effective finalness can be relaxed: If every constructor is subject to this treatment, + * corresponding expansion of the methods would reveal any illegal reads. ... if the super(...) + * calls are expanded for analysis. * * If this is a secondary constructor (referring to another constructor via this()), there are no restrictions. */ @@ -40,9 +44,9 @@ public FinalFieldCodeValidator(InitConfig initConfig) { this.initConfig = initConfig; } - public static void validateFinalFields(IProgramMethod constructor, InitConfig initConfig) { + public static void validateFinalFields(ProgramMethod constructor, InitConfig initConfig) { var validator = new FinalFieldCodeValidator(initConfig); - validator.enclosingClass = null; // constructor.getEnclosingClass(); // TODO! + validator.enclosingClass = constructor.getContainerType(); if(isSecondaryConstructor(constructor)) { // secondary constructors are fine! return; @@ -61,12 +65,7 @@ private static boolean isSecondaryConstructor(IProgramMethod constructor) { } var firstStatement = body.getStatementAt(0); - if (firstStatement instanceof MethodOrConstructorReference methodReference) { - // check that this is a reference of the form this(...) - return true; - } - - return false; + return firstStatement instanceof ThisConstructorReference; } private void validate(IProgramMethod method) { @@ -81,10 +80,7 @@ private void validate(IProgramMethod method) { throw new FinalViolationException("Method " + method.getFullName() + " has no body."); } - for(int i = 0; i < body.getStatementCount(); i++) { - var statement = body.getStatementAt(i); - validateProgramElement(statement); - } + validateProgramElement(body); var popped = methodStack.pop(); assert popped == method; @@ -92,8 +88,10 @@ private void validate(IProgramMethod method) { } private void validateProgramElement(SyntaxElement element) { - if(element instanceof MethodOrConstructorReference methodReference) { + if(element instanceof MethodReference methodReference) { validateMethodReference(methodReference); + } else if (element instanceof ConstructorReference constructorReference) { + validateConstructorReference(constructorReference); } else if(element instanceof FieldReference fieldReference) { validateFieldReference(fieldReference); } else if(element instanceof Assignment assignment) { @@ -107,7 +105,16 @@ private void validateProgramElement(SyntaxElement element) { } } - private void validateMethodReference(MethodOrConstructorReference methodReference) { + private void validateConstructorReference(ConstructorReference methodReference) { + // TODO We have to make sure that on non-static subclass is instantiated here + var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); + + if(hasThisArgument) { + throw new FinalViolationException("Method call " + methodReference + " leaks 'this' to called method.", methodReference); + } + } + + private void validateMethodReference(MethodReference methodReference) { ReferencePrefix referencePrefix = methodReference.getReferencePrefix(); var calledOnThis = referencePrefix == null || referencePrefix instanceof ThisReference; var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); @@ -131,12 +138,13 @@ private void validateMethodReference(MethodOrConstructorReference methodReferenc } } - private IProgramMethod findMethod(MethodOrConstructorReference methodReference) { + private IProgramMethod findMethod(MethodReference methodReference) { // return the program method for the method reference // YOu can use enclosingClass to get the class in which the method is defined // The method is guaranteed to be defined in the enclosing class not in a superclass. // One can also peek the method stack if needed ... - throw new UnsupportedOperationException("Not implemented yet."); + ExecutionContext ec = new ExecutionContext(new TypeRef(enclosingClass), methodStack.peek(), methodReference.getReferencePrefix()); + return methodReference.method(initConfig.getServices(), methodReference.determineStaticPrefixType(initConfig.getServices(), ec), ec); } private void validateAssignment(Assignment assignment) { diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 1a2872fceee..4054aed70f5 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -13,6 +13,7 @@ import de.uka.ilkd.key.logic.TermBuilder; import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.LogicVariable; +import de.uka.ilkd.key.logic.op.ProgramMethod; import de.uka.ilkd.key.logic.op.ProgramVariable; import org.key_project.logic.Name; @@ -40,13 +41,14 @@ public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfi // We know this holds because of isPOSupported: FunctionalOperationContractPO fpo = (FunctionalOperationContractPO) abstractPO; - IProgramMethod constructor = fpo.getProgramMethod(); - assert constructor.isConstructor(); + IProgramMethod iconstructor = fpo.getProgramMethod(); + assert iconstructor instanceof ProgramMethod : "Contracts cannot have schema "; + ProgramMethod constructor = (ProgramMethod) iconstructor; FinalFieldCodeValidator.validateFinalFields(constructor, proofConfig); TermBuilder tb = services.getTermBuilder(); - LogicVariable fv = new LogicVariable(new Name("o"), + LogicVariable fv = new LogicVariable(new Name("fld"), services.getTypeConverter().getHeapLDT().getFieldSort()); Term self = tb.var(selfVar); Term sel = tb.dot(JavaDLTheory.ANY, self, tb.var(fv)); diff --git a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java new file mode 100644 index 00000000000..83dcf87b94a --- /dev/null +++ b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java @@ -0,0 +1,74 @@ +package de.uka.ilkd.key.proof.init; + +import de.uka.ilkd.key.control.DefaultUserInterfaceControl; +import de.uka.ilkd.key.control.KeYEnvironment; +import de.uka.ilkd.key.java.abstraction.KeYJavaType; +import de.uka.ilkd.key.logic.op.ProgramMethod; +import de.uka.ilkd.key.proof.io.ProblemLoaderException; +import de.uka.ilkd.key.proof.mgt.SpecificationRepository; +import de.uka.ilkd.key.speclang.Contract; +import de.uka.ilkd.key.util.KeYTypeUtil; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.TestFactory; + +import java.io.File; +import java.net.URL; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Stream; + +class FinalFieldCodeValidatorTest { + + @TestFactory + public Stream testCodeValidatorParse() throws ProblemLoaderException { + return testContracts(false, "final/shouldparse"); + } + + //@TestFactory + public Stream testCodeValidatorFail() throws ProblemLoaderException { + return testContracts(true, "final/shouldfail"); + } + + private Stream testContracts(boolean shouldfail, String directory) throws ProblemLoaderException { + URL url = getClass().getResource(directory); + assert url != null : directory + " not found."; + assert "file".equals(url.getProtocol()): "Test cases must be in file system"; + File dir = new File(url.getPath()); + KeYEnvironment env = KeYEnvironment.load(dir, null, null, null); + + Set kjts = env.getJavaInfo().getAllKeYJavaTypes(); + Set contracts = new HashSet<>(); + for (KeYJavaType type : kjts) { + if (!KeYTypeUtil.isLibraryClass(type)) { + SpecificationRepository specRepo = env.getSpecificationRepository(); + for(Contract c: specRepo.getAllContracts()) { + var target = c.getTarget(); + if (target instanceof ProgramMethod pm && + pm.isConstructor() && + !KeYTypeUtil.isLibraryClass(pm.getContainerType())) { + contracts.add(c); + } + } + } + } + if(shouldfail) + return contracts.stream().map(c -> DynamicTest.dynamicTest("Illegal constructor " + c.getName(), + () -> Assertions.assertThrowsExactly(FinalFieldCodeValidator.FinalViolationException.class, + () -> testConstructor(c, env)))); + else return contracts.stream().map(c -> DynamicTest.dynamicTest("Legal constructor " + c.getName(), + ()->testConstructor(c, env))); + } + + private void testConstructor(Contract c, KeYEnvironment env) throws ProofInputException { + try { + // System.out.println("Contract id: " + c.getName()); + ContractPO po = c.createProofObl(env.getInitConfig()); + env.createProof(po); + } catch(FinalFieldCodeValidator.FinalViolationException fex) { + System.err.println("Position: " + fex.getPosition()); + fex.printStackTrace(); + throw fex; + } + } +} \ No newline at end of file diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java new file mode 100644 index 00000000000..8829d75a723 --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java @@ -0,0 +1,17 @@ +class FinalReadBeforeWriteIndirect { + final int finalField; + + //@ ensures b; + FinalReadBeforeWriteIndirect(boolean b) { + int before = getFinalField(); + finalField = 42; + int after = getFinalField(); + } + + /*@ normal_behaviour + @ ensures \result == finalField; + @*/ + private int getFinalField() { + return finalField; + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalReadBeforeWriteIndirect.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalReadBeforeWriteIndirect.java new file mode 100644 index 00000000000..8829d75a723 --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalReadBeforeWriteIndirect.java @@ -0,0 +1,17 @@ +class FinalReadBeforeWriteIndirect { + final int finalField; + + //@ ensures b; + FinalReadBeforeWriteIndirect(boolean b) { + int before = getFinalField(); + finalField = 42; + int after = getFinalField(); + } + + /*@ normal_behaviour + @ ensures \result == finalField; + @*/ + private int getFinalField() { + return finalField; + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis1.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis1.java new file mode 100644 index 00000000000..6cef6781e2c --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis1.java @@ -0,0 +1,17 @@ +class LeakThis1 { + final int finalField; + + //@ ensures b; + LeakThis1(boolean b) { + int before = getFinalField(this); + finalField = 42; + int after = getFinalField(this); + } + + /*@ normal_behaviour + @ ensures \result == x.finalField; + @*/ + private int getFinalField(LeakThis1 x) { + return x.finalField; + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis2.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis2.java new file mode 100644 index 00000000000..74f263194ca --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/LeakThis2.java @@ -0,0 +1,23 @@ +class LeakThis2 { + final int finalField; + LeakThis2 other; + + //@ ensures b; + LeakThis2(boolean b) { + leakThis(); + int before = getFinalField(); + finalField = 42; + int after = getFinalField(); + } + + private LeakThis2 leakThis() { + other = true ? this : this; + } + + /*@ normal_behaviour + @ ensures \result == finalField; + @*/ + int getFinalField() { + return other.finalField; + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/Subclass.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/Subclass.java new file mode 100644 index 00000000000..d26818cee4d --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/Subclass.java @@ -0,0 +1,23 @@ +class Subclass { + final int finalField; + + //@ ensures b; + Subclass(boolean b) { + int before = getFinalField(); + finalField = 42; + int after = getFinalField(); + } + + int getFinalField() { + return 0; + } +} + +class Subsubclass extends Subclass { + /*@ normal_behaviour + @ ensures \result == finalField; + @*/ + int getFinalField() { + return finalField; + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java new file mode 100644 index 00000000000..80239df2f8c --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java @@ -0,0 +1,15 @@ +class SecondaryConstructor { + final int finalField; + + boolean b; + + //@ ensures b; + SecondaryConstructor(int v) { + finalField = v; + } + + SecondaryCosntructor() { + this(42); + int x = finalField; + } +} diff --git a/key.ui/src/main/java/de/uka/ilkd/key/gui/WindowUserInterfaceControl.java b/key.ui/src/main/java/de/uka/ilkd/key/gui/WindowUserInterfaceControl.java index fa0578538d8..4680d6139b9 100644 --- a/key.ui/src/main/java/de/uka/ilkd/key/gui/WindowUserInterfaceControl.java +++ b/key.ui/src/main/java/de/uka/ilkd/key/gui/WindowUserInterfaceControl.java @@ -134,7 +134,7 @@ public void progressStopped(Object sender) { @Override public void reportException(Object sender, ProofOblInput input, Exception e) { - reportStatus(sender, input.name() + " failed"); + IssueDialog.showExceptionDialog(mainWindow, e); } @Override From 9bae13f5ac8bd65c415fc3a73b24e0ba615fcbba Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 10 Dec 2024 11:22:19 +0100 Subject: [PATCH 12/31] cleaning up towards PR --- .../uka/ilkd/key/ldt/FinalHeapResolution.java | 82 +++++++++ .../uka/ilkd/key/ldt/FinalHeapResolver.java | 163 ------------------ .../proof/init/FinalFieldCodeValidator.java | 137 +++++++++++---- .../proof/init/FinalFieldsPOExtension.java | 4 +- .../key/speclang/jml/JMLSpecExtractor.java | 4 +- .../translation/SLAttributeResolver.java | 4 +- .../init/FinalFieldCodeValidatorTest.java | 4 +- .../init/final/shouldfail/FinalProblem1.java | 17 -- 8 files changed, 195 insertions(+), 220 deletions(-) create mode 100644 key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java delete mode 100644 key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java delete mode 100644 key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java new file mode 100644 index 00000000000..31c9e321cce --- /dev/null +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java @@ -0,0 +1,82 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ +package de.uka.ilkd.key.ldt; + +import de.uka.ilkd.key.proof.init.InitConfig; +import de.uka.ilkd.key.settings.ProofSettings; +import org.jspecify.annotations.NonNull; + + +/** + * A little helper class to resolve the settings for treatment of final fields. + * + * During the generation of {@link de.uka.ilkd.key.proof.init.ProofOblInput}s, we need to know + * which final-treatment is activated. Also during translation from JML to JavaDL this is needed. + * Unfortunately, the settings are not directly available everywhere, so there is a mechanism to + * remember the setting while it is available in a thread-local variable. This class provides a + * simple interface to access this boolean variable. + * + * The alternative would be to make the settings available at more spots ... + * + * @author Mattias Ulbrich + */ +public class FinalHeapResolution { + + private static final ThreadLocal finalEnabledVariable = new ThreadLocal<>(); + private static final String SETTING = "finalFields"; + private static final String IMMUTABLE_OPTION = SETTING + ":immutable"; + + /** + * Returns whether final fields are treated different from normal fields as immutable data. + * + * If initConfig does not have settings yet, the default settings are used. + * + * @param initConfig the configuration to read the settings from + * @return true if final fields are treated as immutable + */ + public static boolean isFinalEnabled(@NonNull InitConfig initConfig) { + ProofSettings settings = initConfig.getSettings(); + if (settings == null) { + settings = new ProofSettings(ProofSettings.DEFAULT_SETTINGS); + } + return isFinalEnabled(settings); + } + + /** + * Returns whether final fields are treated different from normal fields as immutable data. + * + * @param settings the settings to read the settings from + * @return true if final fields are treated as immutable + */ + public static boolean isFinalEnabled(@NonNull ProofSettings settings) { + return settings.getChoiceSettings().getDefaultChoices().get(SETTING) + .equals(IMMUTABLE_OPTION); + } + + /** + * Remembers the final fields are treated different from normal fields as immutable data + * in a thread-local variable that can be recalled later using {@link #recallIsFinalEnabled()}. + * + * @param initConfig the configuration to read the settings from + */ + public static void rememberIfFinalEnabled(InitConfig initConfig) { + finalEnabledVariable.set(isFinalEnabled(initConfig)); + } + + /** + * Recall a previously stored status regarding the treatment of final fields. + * See {@link #rememberIfFinalEnabled(InitConfig)}. + * + * @return true if final fields are treated as immutable (as recorded earlier) + * @throws IllegalStateException if the variable has not been set before + */ + + public static boolean recallIsFinalEnabled() { + Boolean bool = finalEnabledVariable.get(); + if (bool == null) { + throw new IllegalStateException("Unset final enabled variable"); + } + return bool.booleanValue(); + } +} diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java deleted file mode 100644 index 270b3b995d3..00000000000 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolver.java +++ /dev/null @@ -1,163 +0,0 @@ -/* This file is part of KeY - https://key-project.org - * KeY is licensed under the GNU General Public License Version 2 - * SPDX-License-Identifier: GPL-2.0-only */ -package de.uka.ilkd.key.ldt; - -import de.uka.ilkd.key.java.Services; -import de.uka.ilkd.key.proof.init.InitConfig; -import de.uka.ilkd.key.settings.ProofSettings; - - -public class FinalHeapResolver { - - private static final ThreadLocal finalEnabledVariable = new ThreadLocal<>(); - private static String OPTION = "finalFields"; - - public static boolean isFinalEnabled(InitConfig initConfig) { - ProofSettings settings = initConfig.getSettings(); - if (settings == null) { - settings = new ProofSettings(ProofSettings.DEFAULT_SETTINGS); - } - return isFinalEnabled(settings); - } - - public static boolean isFinalEnabled(ProofSettings settings) { - return settings.getChoiceSettings().getDefaultChoices().get(OPTION) - .equals(OPTION + ":immutable"); - } - - public static boolean recallIsFinalEnabled() { - Boolean bool = finalEnabledVariable.get(); - if (bool == null) { - throw new IllegalStateException("Unset final enabled variable"); - } - return bool.booleanValue(); - } - - public static void rememberIfFinalEnabled(InitConfig initConfig) { - finalEnabledVariable.set(isFinalEnabled(initConfig)); - } - - - -// // see WellDefinednessCheck.isOn() -// public static boolean isFinalEnabled() { -// final String setting = -// ProofSettings.DEFAULT_SETTINGS.getChoiceSettings().getDefaultChoices().get(OPTION); -// if(setting == null) { -// throw new RuntimeException("The setting for the wdProofs-option is not set."); -// } else if (setting.equals(OPTION + ":immutable")) { -// return true; -// } else if (setting.equals(OPTION + ":other")) { -// return false; -// } else { -// throw new RuntimeException( -// "The setting for the wdProofs-option is not valid: " + setting); -// } -// return bool.booleanValue(); -// } -// -// // see above ... I doubt that this works ... -// public static boolean isFinalEnabled(Services services) { -// final String setting = -// services.getProof().getSettings().getChoiceSettings().getDefaultChoices().get(OPTION); -// if(setting == null) { -// throw new RuntimeException("The setting for the wdProofs-option is not set."); -// } else if (setting.equals(OPTION + ":immutable")) { -// return true; -// } else if (setting.equals(OPTION + ":other")) { -// return false; -// } else { -// throw new RuntimeException( -// "The setting for the wdProofs-option is not valid: " + setting); -// } -// } - - // private final Services services; - // - // public FinalHeapResolver(Services services) { - // this.services = services; - // } - - // public T resolve(T contract) { - // return (T) contract.map(this::resolve, services); - // } - // - // private Term resolve(Term term) { - // if (term == null) { - // // for non-existing clauses in maps. - // return null; - // } - // - // if(services.getTypeConverter().getHeapLDT().isSelectOp(term.op())) { - // return resolveSelect(term); - // } - // - // return resolveDefault(term); - // } - // - // private Term resolveDefault(Term term) { - // Term[] newsubs = null; - // ImmutableArray subs = term.subs(); - // for (int i = 0; i < subs.size(); i++) { - // Term in = subs.get(i); - // Term out = resolve(in); - // if (in != out) { - // if (newsubs == null) { - // newsubs = subs.toArray(new Term[subs.size()]); - // } - // newsubs[i] = out; - // } - // } - // - // if (newsubs == null) { - // return term; - // } else { - // return services.getTermFactory().createTerm(term.op(), newsubs, - // term.boundVars(), term.javaBlock(), term.getLabels()); - // } - // } - // - // private Term resolveSelect(Term term) { - // Term obj = term.sub(1); - // Term field = term.sub(2); - // ProgramVariable pv = getFieldSymbol(field); - // if (pv != null && pv.isFinal()) { - // return services.getTermBuilder().finalDot(pv.sort(), - // resolve(obj), field); - // } - // return resolveDefault(term); - // } - // - // private ProgramVariable getFieldSymbol(Term fieldTerm) { - // Operator op = fieldTerm.op(); - // if (op instanceof Function) { - // final String name = op.name().toString(); - // - // // check for normal attribute - // int endOfClassName = name.indexOf("::$"); - // - // int startAttributeName = endOfClassName + 3; - // - // - // if (endOfClassName < 0) { - // // not a normal attribute, maybe an implicit attribute like ? - // endOfClassName = name.indexOf("::<"); - // startAttributeName = endOfClassName + 2; - // } - // - // if (endOfClassName < 0) { - // return null; - // } - // - // final String className = name.substring(0, endOfClassName); - // final String attributeName = name.substring(startAttributeName); - // - // final ProgramVariable attribute = - // services.getJavaInfo().getAttribute(attributeName, className); - // - // return attribute; - // } - // return null; - // } -} diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index 2961573c233..80e4570c58d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -16,37 +16,70 @@ import java.util.Set; /** - * Validates the code of a constructor to ensure that final fields are not read before they are initialized. + * Validates a constructor to ensure that the executed code does not read final fields before they + * have been initialized. This is implemented by a rather straightforward static analysis of the + * code. + *

+ * Currently, the rather rules to be obeyed here are rather strict, but safe: + *

    + *
  • Called methods must not receive 'this' as an explicit parameter.
  • + *
  • 'this' must not be assigned to any field or variable.
  • + *
  • 'final' fields must not be read.
  • + *
  • Methods called on 'this' must be effectively final (not overridable).
  • + *
  • The body of methods called on 'this' must not read any final fields as well. + * (This applies transitively.)
  • + *
+ *

+ * There is some potential for relaxations should the above rules turn out to be too strict + * in practice: + *

    + *
  • Final fields may be read after their initialization (locally and also in called methods). + * This requires a lot more bookkeeping, though.
  • + *
  • Effective 'final'-ness can be relaxed: If every constructor of every subclass is subject + * to this treatment, violations would still be observable by expanding methods, and any + * illegal reads would be revealed. That would require 'super(...)' calls to be expanded + * for analysis.
  • + *
+ *

+ * There are no restrictions for secondary constructors (referring to another constructor + * via 'this(...)'). + *

* - * Currently rather strict: - * - Called methods must not receive 'this' as an explicit parameter - * - 'this' must not be assigned to any field or variable - * - final fields must not be read. - * - Methods called on 'this' must be effectively final (not overridable) - * - Methods called on 'this' must not read any final fields as well. - * - * Potential for relaxaions: - * - Final fields may be read after initialization (locally and in called methods) - * This requires a lot more bookkeeping, though. - * - Effective finalness can be relaxed: If every constructor is subject to this treatment, - * corresponding expansion of the methods would reveal any illegal reads. ... if the super(...) - * calls are expanded for analysis. - * - * If this is a secondary constructor (referring to another constructor via this()), there are no restrictions. + * @author Mattias Ulbrich + * @since 2024-12-10 */ + class FinalFieldCodeValidator { private final InitConfig initConfig; + private final KeYJavaType enclosingClass; + + /** + * Methods that have already been validated so far. + */ private final Set validatedMethods = new IdentityHashSet<>(); + + /** + * Stack of methods currently being validated. Needed to resolve method references. + */ private final Deque methodStack = new ArrayDeque<>(); - private KeYJavaType enclosingClass; - public FinalFieldCodeValidator(InitConfig initConfig) { + private FinalFieldCodeValidator(InitConfig initConfig, KeYJavaType containerType) { this.initConfig = initConfig; + this.enclosingClass = containerType; } + /** + * Validates the given constructor. + * + * The method does not do anything if the constructor is not problematic. + * If the code is deemed problematic a {@link FinalViolationException} is thrown. + * + * @param constructor the constructor to validate + * @param initConfig the init config to be used during validation + * @throws FinalViolationException if the code is considered problematic wrt. final fields + */ public static void validateFinalFields(ProgramMethod constructor, InitConfig initConfig) { - var validator = new FinalFieldCodeValidator(initConfig); - validator.enclosingClass = constructor.getContainerType(); + var validator = new FinalFieldCodeValidator(initConfig, constructor.getContainerType()); if(isSecondaryConstructor(constructor)) { // secondary constructors are fine! return; @@ -54,6 +87,9 @@ public static void validateFinalFields(ProgramMethod constructor, InitConfig ini validator.validate(constructor); } + /* + * Secondary constructors have a 'this(...)' (ThisConstructorReference) as their first statement. + */ private static boolean isSecondaryConstructor(IProgramMethod constructor) { StatementBlock body = constructor.getBody(); if(body == null) { @@ -68,6 +104,10 @@ private static boolean isSecondaryConstructor(IProgramMethod constructor) { return firstStatement instanceof ThisConstructorReference; } + /* + * Recursively validate code and all called methods. + * + */ private void validate(IProgramMethod method) { if(validatedMethods.contains(method)) { return; @@ -87,6 +127,10 @@ private void validate(IProgramMethod method) { validatedMethods.add(method); } + /* + * Recursively validate code and all called methods. Makes case distinctions for different + * program elements. + */ private void validateProgramElement(SyntaxElement element) { if(element instanceof MethodReference methodReference) { validateMethodReference(methodReference); @@ -96,15 +140,26 @@ private void validateProgramElement(SyntaxElement element) { validateFieldReference(fieldReference); } else if(element instanceof Assignment assignment) { validateAssignment(assignment); + } else { + validateChildren(element); } // Case: "string" + this .... not allowed! // Case: Model method calls are as problematic as the rest ... + } + + /* + * Recursively validate all children of the given element. + */ + private void validateChildren(SyntaxElement element) { for(int i = 0; i < element.getChildCount(); i++) { validateProgramElement(element.getChild(i)); } } + /* + * Constructor calls must not leak 'this' to the called constructor. + */ private void validateConstructorReference(ConstructorReference methodReference) { // TODO We have to make sure that on non-static subclass is instantiated here var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); @@ -112,8 +167,14 @@ private void validateConstructorReference(ConstructorReference methodReference) if(hasThisArgument) { throw new FinalViolationException("Method call " + methodReference + " leaks 'this' to called method.", methodReference); } + + validateChildren(methodReference); } + /* + * Method calls must not leak 'this' to the called method (other than as receiver) + * Method calls on 'this' must be effectively final and are recursively validated. + */ private void validateMethodReference(MethodReference methodReference) { ReferencePrefix referencePrefix = methodReference.getReferencePrefix(); var calledOnThis = referencePrefix == null || referencePrefix instanceof ThisReference; @@ -128,7 +189,7 @@ private void validateMethodReference(MethodReference methodReference) { if(method.isStatic() || method.isConstructor()) { // local static methods are acutally fine ... // constructor calls are also fine - // TODO (well ... what about inner classes?) + // TODO (well ... what about inner classes? Aren't they evil?) return; } if(!method.isFinal() && !method.isPrivate() && !((ClassType)enclosingClass.getJavaType()).isFinal()) { @@ -136,35 +197,49 @@ private void validateMethodReference(MethodReference methodReference) { } validate(method); } + + validateChildren(methodReference); } private IProgramMethod findMethod(MethodReference methodReference) { - // return the program method for the method reference - // YOu can use enclosingClass to get the class in which the method is defined - // The method is guaranteed to be defined in the enclosing class not in a superclass. - // One can also peek the method stack if needed ... ExecutionContext ec = new ExecutionContext(new TypeRef(enclosingClass), methodStack.peek(), methodReference.getReferencePrefix()); - return methodReference.method(initConfig.getServices(), methodReference.determineStaticPrefixType(initConfig.getServices(), ec), ec); + return methodReference.method(initConfig.getServices(), methodReference.determineStaticPrefixType(initConfig.getServices(), ec), ec); } + /* + * Validate assignments. 'this' must not be assigned to any field or variable. + * References to final fields are ok on the left hand side. + */ private void validateAssignment(Assignment assignment) { + SyntaxElement assignee = assignment.getChild(0); SyntaxElement value = assignment.getChild(1); if (value instanceof ThisReference) { throw new FinalViolationException("'this' is leaked to a field or variable.", assignment); } + if (assignee instanceof FieldReference fr) { + // it is ok to assign to this.finalfield! + validateProgramElement(fr.getReferencePrefix()); + } else { + validateProgramElement(assignee); + } + validateProgramElement(value); } + /* + * Validate field references. Final fields must not be read. (Exception see assignment.) + */ private void validateFieldReference(FieldReference fieldReference) { ReferencePrefix prefix = fieldReference.getReferencePrefix(); ProgramVariable field = fieldReference.getProgramVariable(); if(field.isFinal() && prefix instanceof ThisReference) { throw new FinalViolationException("Final field " + field + " is read.", fieldReference); } + validateChildren(fieldReference); } static class FinalViolationException extends RuntimeException { - private final Position position; + private final PositionInfo position; public FinalViolationException(String message) { this(message, null); @@ -173,16 +248,14 @@ public FinalViolationException(String message) { public FinalViolationException(String message, SyntaxElement syntaxElement) { super(message); if (syntaxElement instanceof SourceElement sourceElement) { - this.position = sourceElement.getStartPosition(); + this.position = sourceElement.getPositionInfo(); } else { this.position = null; } } - public Position getPosition() { + public PositionInfo getPositionInfo() { return position; } } -} - - +} \ No newline at end of file diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 4054aed70f5..5694dbe358c 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -6,7 +6,7 @@ import java.util.List; import de.uka.ilkd.key.java.Services; -import de.uka.ilkd.key.ldt.FinalHeapResolver; +import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.Choice; import de.uka.ilkd.key.logic.Term; @@ -35,7 +35,7 @@ public boolean isPOSupported(ProofOblInput po) { public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfig, Services services, ProgramVariable selfVar, Term postTerm) { - if(!FinalHeapResolver.isFinalEnabled(proofConfig)) { + if(!FinalHeapResolution.isFinalEnabled(proofConfig)) { return postTerm; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java index 44ea359a7f1..fc08e35f07a 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/JMLSpecExtractor.java @@ -19,7 +19,7 @@ import de.uka.ilkd.key.java.statement.LabeledStatement; import de.uka.ilkd.key.java.statement.LoopStatement; import de.uka.ilkd.key.java.statement.MergePointStatement; -import de.uka.ilkd.key.ldt.FinalHeapResolver; +import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.logic.label.ParameterlessTermLabel; import de.uka.ilkd.key.logic.label.TermLabel; import de.uka.ilkd.key.logic.op.IProgramMethod; @@ -75,7 +75,7 @@ public final class JMLSpecExtractor implements SpecExtractor { // ------------------------------------------------------------------------- public JMLSpecExtractor(InitConfig initConfig) { - FinalHeapResolver.rememberIfFinalEnabled(initConfig); + FinalHeapResolution.rememberIfFinalEnabled(initConfig); this.services = initConfig.getServices(); this.jsf = new JMLSpecFactory(services); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java index 4631fe92e4b..f0596c50c77 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java @@ -10,7 +10,7 @@ import de.uka.ilkd.key.java.declaration.MemberDeclaration; import de.uka.ilkd.key.java.declaration.TypeDeclaration; import de.uka.ilkd.key.java.recoderext.ImplicitFieldAdder; -import de.uka.ilkd.key.ldt.FinalHeapResolver; +import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.op.*; @@ -137,7 +137,7 @@ protected SLExpression doResolving(SLExpression receiver, String name, SLParamet attributeTerm = services.getTermBuilder().staticDot(attribute.sort(), fieldSymbol); } else if (attribute.isFinal() && - FinalHeapResolver.recallIsFinalEnabled()) { + FinalHeapResolution.recallIsFinalEnabled()) { attributeTerm = services.getTermBuilder().finalDot(attribute.sort(), recTerm, fieldSymbol); diff --git a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java index 83dcf87b94a..0520b16ec84 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java @@ -25,7 +25,7 @@ public Stream testCodeValidatorParse() throws ProblemLoaderExceptio return testContracts(false, "final/shouldparse"); } - //@TestFactory + @TestFactory public Stream testCodeValidatorFail() throws ProblemLoaderException { return testContracts(true, "final/shouldfail"); } @@ -66,7 +66,7 @@ private void testConstructor(Contract c, KeYEnvironment env) throws ProofInpu ContractPO po = c.createProofObl(env.getInitConfig()); env.createProof(po); } catch(FinalFieldCodeValidator.FinalViolationException fex) { - System.err.println("Position: " + fex.getPosition()); + System.err.println("Position: " + fex.getPositionInfo()); fex.printStackTrace(); throw fex; } diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java deleted file mode 100644 index 8829d75a723..00000000000 --- a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldfail/FinalProblem1.java +++ /dev/null @@ -1,17 +0,0 @@ -class FinalReadBeforeWriteIndirect { - final int finalField; - - //@ ensures b; - FinalReadBeforeWriteIndirect(boolean b) { - int before = getFinalField(); - finalField = 42; - int after = getFinalField(); - } - - /*@ normal_behaviour - @ ensures \result == finalField; - @*/ - private int getFinalField() { - return finalField; - } -} From 0c991b00c1a7697cd973043fba267a6fe4b0728c Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 10 Dec 2024 12:35:25 +0100 Subject: [PATCH 13/31] documentation, towards PR --- .../java/de/uka/ilkd/key/ldt/HeapLDT.java | 16 ++++- .../de/uka/ilkd/key/logic/TermBuilder.java | 31 +++++++--- .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 58 ++++++++++++++----- .../de/uka/ilkd/key/pp/SelectPrinter.java | 5 +- .../proof/init/FinalFieldsPOExtension.java | 17 +++++- .../uka/ilkd/key/settings/ChoiceSettings.java | 2 - 6 files changed, 98 insertions(+), 31 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java index 901e58fd193..8f46fbe997d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java @@ -18,6 +18,7 @@ import de.uka.ilkd.key.proof.init.JavaProfile; import de.uka.ilkd.key.proof.io.ProofSaver; +import org.jspecify.annotations.NonNull; import org.key_project.logic.Name; import org.key_project.logic.Named; import org.key_project.logic.op.Function; @@ -99,7 +100,7 @@ public HeapLDT(TermServices services) { fieldSort = sorts.lookup(new Name("Field")); select = addSortDependingFunction(services, SELECT_NAME.toString()); finalFunction = addSortDependingFunction(services, FINAL_NAME.toString()); - store = addFunction(services, "store"); + store = addFunction(services, STORE_NAME.toString()); create = addFunction(services, "create"); anon = addFunction(services, "anon"); memset = addFunction(services, "memset"); @@ -236,10 +237,21 @@ public SortDependingFunction getSelect(Sort instanceSort, TermServices services) return select.getInstanceFor(instanceSort, services); } - public SortDependingFunction getFinal(Sort instanceSort, Services services) { + /** + * Returns the function symbol to access final fields for the given instance sort. + * @param instanceSort the sort of the value to be read + * @param services the services to find/create the sort-depending function + * @return the function symbol to access final fields for the given instance sort + */ + public @NonNull SortDependingFunction getFinal(@NonNull Sort instanceSort, @NonNull Services services) { return finalFunction.getInstanceFor(instanceSort, services); } + /** + * Check if the given operator is an instance of the "final" function to access final fields. + * @param op the operator to check + * @return true if the operator is an instance of the "X::final" srot-depending function + */ public boolean isFinalOp(Operator op) { return op instanceof SortDependingFunction && ((SortDependingFunction) op).isSimilar(finalFunction); diff --git a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java index 354b31cf2e0..1c5b2b05c92 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java @@ -1627,11 +1627,6 @@ public Term select(Sort asSort, Term h, Term o, LocationVariable field) { return select(asSort, h, o, func(f)); } - private Term readFinal(Sort asSort, Term o, Term f) { - return func(services.getTypeConverter().getHeapLDT().getFinal(asSort, services), - o, f); - } - public Term dot(Sort asSort, Term o, Term f) { return select(asSort, getBaseHeap(), o, f); } @@ -1662,15 +1657,35 @@ public Term staticDot(Sort asSort, JFunction f) { return f.sort() == fieldSort ? staticDot(asSort, func(f)) : func(f, getBaseHeap()); } + /** + * Get a term for a accessing a final field. + * This can be used for ordinary fields and model fields. + * The results are quite different! + * + * @param sort the sort of the result. + * @param o the object to access + * @param f the field to access + * @return the term representing the access "o.f" + * @see #finalDot(Sort, Term, Term) for accessing final Java or ghost fields + * @see #dot(Sort, Term, JFunction) for accessing final model fields + */ public Term finalDot(Sort sort, Term o, JFunction f) { - final Sort fieldSort = services.getTypeConverter().getHeapLDT() - .getFieldSort(); + final Sort fieldSort = services.getTypeConverter().getHeapLDT().getFieldSort(); return f.sort() == fieldSort ? finalDot(sort, o, func(f)) : func(f, getBaseHeap(), o); } + /** + * Final fields can be treated differently outside the heap. + * This methods creates a heap-independent read access to final field. + * @param asSort the sort of the result. + * @param o the object to access + * @param f the field to access + * @return the term representing the access "o.f" + */ public Term finalDot(Sort asSort, Term o, Term f) { - return readFinal(asSort, o, f); + return func(services.getTypeConverter().getHeapLDT().getFinal(asSort, services), + o, f); } public Term arr(Term idx) { diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index cc4e4ff329b..8ba74984465 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -12,9 +12,12 @@ import de.uka.ilkd.key.logic.op.JFunction; import de.uka.ilkd.key.logic.op.ProgramVariable; +import org.jspecify.annotations.NonNull; import org.key_project.logic.op.Function; import org.key_project.logic.sort.Sort; +import java.util.NoSuchElementException; + /** * Common superclass of {@link StorePrinter} and {@link SelectPrinter}. * @@ -100,25 +103,41 @@ protected static boolean isFieldConstant(Term fieldTerm, HeapLDT heapLDT) { } /** - * Find out whether a {@link Term} represents a field symbol, declared in a Java class. + * Find the attribute program variable for a field term. * - * @return Returns true iff the given parameter represents a field constant. - * @param fieldTerm The target field. + * @return Returns the attribute program variable for the given field term. + * @param fieldTerm The field term to analyse. */ - protected static boolean isJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, - Services services) { + protected static @NonNull ProgramVariable getJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, + Services services) { String name = fieldTerm.op().name().toString(); if (name.contains("::$") && isFieldConstant(fieldTerm, heapLDT)) { String pvName = name.replace("::$", "::"); - try { - return services.getJavaInfo().getAttribute(pvName) != null; - } catch (UnknownJavaTypeException e) { - // If there exists a constant of the form x::$y and there is no type - // x, this exception is thrown. - return false; + ProgramVariable result = services.getJavaInfo().getAttribute(pvName); + if (result == null) { + throw new NoSuchElementException("No field constant: " + fieldTerm); } + return result; + } + throw new IllegalArgumentException("No field constant: " + fieldTerm); + } + + /** + * Find out whether a {@link Term} represents a field symbol, declared in a Java class. + * + * @return Returns true iff the given parameter represents a field constant. + * @param fieldTerm The target field. + */ + protected static boolean isJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, + Services services) { + try { + getJavaFieldConstant(fieldTerm, heapLDT, services); + return true; + } catch (RuntimeException e) { + // If there exists a constant of the form x::$y and there is no type + // x, this exception is thrown. + return false; } - return false; } protected boolean isJavaFieldConstant(Term fieldTerm) { @@ -135,12 +154,19 @@ protected boolean isBuiltinObjectProperty(Term fieldTerm) { } /* - * Determine whether a field constant is static. Field constants are considered static if - * reference object is null. + * Determine whether a field constant is static. */ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { - return objectTerm.equals(services.getTermBuilder().NULL()) - && isFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT()); + ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + return pv.isStatic(); + } + + /* + * Determine whether a field constant is declared final. + */ + protected boolean isFinalFieldConstant(Term objectTerm, Term fieldTerm) { + ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + return pv.isFinal(); } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java index e92aeb77b2d..19c0d665928 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java @@ -71,7 +71,10 @@ public void printSelect(LogicPrinter lp, Term t, Term tacitHeap) { } else if (isBuiltinObjectProperty(fieldTerm)) { // object properties denoted like o. printBuiltinObjectProperty(lp, t, heapTerm, objectTerm, fieldTerm, tacitHeap); - } else if (isStaticFieldConstant(objectTerm, fieldTerm) + + } + // TODO Check if final-treatment is immutable and act accordingly ... + else if (isStaticFieldConstant(objectTerm, fieldTerm) && getFieldSort(fieldTerm).equals(t.sort())) { // static field access printStaticJavaFieldConstant(lp, fieldTerm, heapTerm, tacitHeap); diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 5694dbe358c..61d7509c6ef 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -18,14 +18,27 @@ import org.key_project.logic.Name; +/** + * This class is responsible for making the immutable treatment of final fields possible also for constructors. + * It is an extension of the ProofOblInput interface (originally targeted for the symbolic execution engine) + * + * It has two purposes: + * 1. It checks if the final fields are not read before they are written (via {@link FinalFieldCodeValidator}). + * 2. It modifies the postcondition of the constructor to make the final field values available in the postconditions. + * + * To make 2 possible, an additional premiss is added in the post-state formulating that + * \forall Fields f; any::final(self, f) = any::select(heap, self, f) + * essentially activating the final field assignments. + * + * @author Mattias Ulbrich + */ public class FinalFieldsPOExtension implements POExtension { private static final Choice FINAL_IMMUTABLE_CHOICE = new Choice("finalFields", "immutable"); @Override public boolean isPOSupported(ProofOblInput po) { - if (po instanceof FunctionalOperationContractPO) { - FunctionalOperationContractPO fpo = (FunctionalOperationContractPO) po; + if (po instanceof FunctionalOperationContractPO fpo) { return fpo.getProgramMethod().isConstructor(); } return false; diff --git a/key.core/src/main/java/de/uka/ilkd/key/settings/ChoiceSettings.java b/key.core/src/main/java/de/uka/ilkd/key/settings/ChoiceSettings.java index 48dc7cfa3f2..c8c6002ac5a 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/settings/ChoiceSettings.java +++ b/key.core/src/main/java/de/uka/ilkd/key/settings/ChoiceSettings.java @@ -78,7 +78,6 @@ public Map> getChoices() { return Collections.unmodifiableMap(category2Default); } - /** * returns the current selected choices as an immutable set */ @@ -86,7 +85,6 @@ public Map> getChoices() { return choiceMap2choiceSet(category2Default); } - private static ImmutableSet choiceMap2choiceSet(Map ccc) { ImmutableList choices = ImmutableSLList.nil(); for (final Map.Entry entry : ccc.entrySet()) { From ae9ea9b39fb660fbf2e0af262cd7f370fec26656 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 10 Dec 2024 12:37:14 +0100 Subject: [PATCH 14/31] spotlessing --- .../po/TruthValuePOExtension.java | 5 +- .../uka/ilkd/key/ldt/FinalHeapResolution.java | 1 + .../java/de/uka/ilkd/key/ldt/HeapLDT.java | 7 +- .../de/uka/ilkd/key/logic/TermBuilder.java | 3 +- .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 16 +-- .../proof/init/FinalFieldCodeValidator.java | 104 ++++++++++-------- .../proof/init/FinalFieldsPOExtension.java | 21 ++-- .../uka/ilkd/key/proof/init/POExtension.java | 15 +-- .../init/FinalFieldCodeValidatorTest.java | 48 ++++---- 9 files changed, 130 insertions(+), 90 deletions(-) diff --git a/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java b/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java index b7e78e69322..8e9b75dd5bd 100644 --- a/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java +++ b/key.core.symbolic_execution/src/main/java/de/uka/ilkd/key/symbolic_execution/po/TruthValuePOExtension.java @@ -36,8 +36,9 @@ public boolean isPOSupported(ProofOblInput po) { * {@inheritDoc} */ @Override - public Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, Services services, ProgramVariable selfTerm, - Term postTerm) { + public Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, + Services services, ProgramVariable selfTerm, + Term postTerm) { if (SymbolicExecutionJavaProfile.isTruthValueEvaluationEnabled(proofConfig)) { return labelPostTerm(services, postTerm); } else { diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java index 31c9e321cce..8f8ececaaf5 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java @@ -5,6 +5,7 @@ import de.uka.ilkd.key.proof.init.InitConfig; import de.uka.ilkd.key.settings.ProofSettings; + import org.jspecify.annotations.NonNull; diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java index 8f46fbe997d..eec94ad0b9e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/HeapLDT.java @@ -18,7 +18,6 @@ import de.uka.ilkd.key.proof.init.JavaProfile; import de.uka.ilkd.key.proof.io.ProofSaver; -import org.jspecify.annotations.NonNull; import org.key_project.logic.Name; import org.key_project.logic.Named; import org.key_project.logic.op.Function; @@ -28,6 +27,7 @@ import org.key_project.util.collection.ImmutableList; import org.key_project.util.collection.ImmutableSLList; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; @@ -239,16 +239,19 @@ public SortDependingFunction getSelect(Sort instanceSort, TermServices services) /** * Returns the function symbol to access final fields for the given instance sort. + * * @param instanceSort the sort of the value to be read * @param services the services to find/create the sort-depending function * @return the function symbol to access final fields for the given instance sort */ - public @NonNull SortDependingFunction getFinal(@NonNull Sort instanceSort, @NonNull Services services) { + public @NonNull SortDependingFunction getFinal(@NonNull Sort instanceSort, + @NonNull Services services) { return finalFunction.getInstanceFor(instanceSort, services); } /** * Check if the given operator is an instance of the "final" function to access final fields. + * * @param op the operator to check * @return true if the operator is an instance of the "X::final" srot-depending function */ diff --git a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java index 1c5b2b05c92..b35e9bc8599 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java @@ -1678,6 +1678,7 @@ public Term finalDot(Sort sort, Term o, JFunction f) { /** * Final fields can be treated differently outside the heap. * This methods creates a heap-independent read access to final field. + * * @param asSort the sort of the result. * @param o the object to access * @param f the field to access @@ -1685,7 +1686,7 @@ public Term finalDot(Sort sort, Term o, JFunction f) { */ public Term finalDot(Sort asSort, Term o, Term f) { return func(services.getTypeConverter().getHeapLDT().getFinal(asSort, services), - o, f); + o, f); } public Term arr(Term idx) { diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index 8ba74984465..3180f6ec8ff 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -3,20 +3,20 @@ * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; +import java.util.NoSuchElementException; + import de.uka.ilkd.key.java.JavaInfo; import de.uka.ilkd.key.java.Services; -import de.uka.ilkd.key.java.UnknownJavaTypeException; import de.uka.ilkd.key.java.abstraction.KeYJavaType; import de.uka.ilkd.key.ldt.HeapLDT; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.op.JFunction; import de.uka.ilkd.key.logic.op.ProgramVariable; -import org.jspecify.annotations.NonNull; import org.key_project.logic.op.Function; import org.key_project.logic.sort.Sort; -import java.util.NoSuchElementException; +import org.jspecify.annotations.NonNull; /** * Common superclass of {@link StorePrinter} and {@link SelectPrinter}. @@ -109,7 +109,7 @@ protected static boolean isFieldConstant(Term fieldTerm, HeapLDT heapLDT) { * @param fieldTerm The field term to analyse. */ protected static @NonNull ProgramVariable getJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, - Services services) { + Services services) { String name = fieldTerm.op().name().toString(); if (name.contains("::$") && isFieldConstant(fieldTerm, heapLDT)) { String pvName = name.replace("::$", "::"); @@ -129,7 +129,7 @@ protected static boolean isFieldConstant(Term fieldTerm, HeapLDT heapLDT) { * @param fieldTerm The target field. */ protected static boolean isJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, - Services services) { + Services services) { try { getJavaFieldConstant(fieldTerm, heapLDT, services); return true; @@ -157,7 +157,8 @@ protected boolean isBuiltinObjectProperty(Term fieldTerm) { * Determine whether a field constant is static. */ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { - ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + ProgramVariable pv = + getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); return pv.isStatic(); } @@ -165,7 +166,8 @@ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { * Determine whether a field constant is declared final. */ protected boolean isFinalFieldConstant(Term objectTerm, Term fieldTerm) { - ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + ProgramVariable pv = + getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); return pv.isFinal(); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index 80e4570c58d..346ca4772e5 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -1,5 +1,12 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.proof.init; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.Set; + import de.uka.ilkd.key.java.*; import de.uka.ilkd.key.java.abstraction.ClassType; import de.uka.ilkd.key.java.abstraction.KeYJavaType; @@ -8,13 +15,10 @@ import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.ProgramMethod; import de.uka.ilkd.key.logic.op.ProgramVariable; + import org.key_project.logic.SyntaxElement; import org.key_project.util.collection.IdentityHashSet; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.Set; - /** * Validates a constructor to ensure that the executed code does not read final fields before they * have been initialized. This is implemented by a rather straightforward static analysis of the @@ -22,23 +26,23 @@ *

* Currently, the rather rules to be obeyed here are rather strict, but safe: *

    - *
  • Called methods must not receive 'this' as an explicit parameter.
  • - *
  • 'this' must not be assigned to any field or variable.
  • - *
  • 'final' fields must not be read.
  • - *
  • Methods called on 'this' must be effectively final (not overridable).
  • - *
  • The body of methods called on 'this' must not read any final fields as well. - * (This applies transitively.)
  • + *
  • Called methods must not receive 'this' as an explicit parameter.
  • + *
  • 'this' must not be assigned to any field or variable.
  • + *
  • 'final' fields must not be read.
  • + *
  • Methods called on 'this' must be effectively final (not overridable).
  • + *
  • The body of methods called on 'this' must not read any final fields as well. + * (This applies transitively.)
  • *
*

* There is some potential for relaxations should the above rules turn out to be too strict * in practice: *

    - *
  • Final fields may be read after their initialization (locally and also in called methods). - * This requires a lot more bookkeeping, though.
  • - *
  • Effective 'final'-ness can be relaxed: If every constructor of every subclass is subject - * to this treatment, violations would still be observable by expanding methods, and any - * illegal reads would be revealed. That would require 'super(...)' calls to be expanded - * for analysis.
  • + *
  • Final fields may be read after their initialization (locally and also in called methods). + * This requires a lot more bookkeeping, though.
  • + *
  • Effective 'final'-ness can be relaxed: If every constructor of every subclass is subject + * to this treatment, violations would still be observable by expanding methods, and any + * illegal reads would be revealed. That would require 'super(...)' calls to be expanded + * for analysis.
  • *
*

* There are no restrictions for secondary constructors (referring to another constructor @@ -75,12 +79,12 @@ private FinalFieldCodeValidator(InitConfig initConfig, KeYJavaType containerType * If the code is deemed problematic a {@link FinalViolationException} is thrown. * * @param constructor the constructor to validate - * @param initConfig the init config to be used during validation + * @param initConfig the init config to be used during validation * @throws FinalViolationException if the code is considered problematic wrt. final fields */ public static void validateFinalFields(ProgramMethod constructor, InitConfig initConfig) { var validator = new FinalFieldCodeValidator(initConfig, constructor.getContainerType()); - if(isSecondaryConstructor(constructor)) { + if (isSecondaryConstructor(constructor)) { // secondary constructors are fine! return; } @@ -88,15 +92,16 @@ public static void validateFinalFields(ProgramMethod constructor, InitConfig ini } /* - * Secondary constructors have a 'this(...)' (ThisConstructorReference) as their first statement. + * Secondary constructors have a 'this(...)' (ThisConstructorReference) as their first + * statement. */ private static boolean isSecondaryConstructor(IProgramMethod constructor) { StatementBlock body = constructor.getBody(); - if(body == null) { + if (body == null) { return false; } - if(body.getStatementCount() == 0) { + if (body.getStatementCount() == 0) { return false; } @@ -109,18 +114,18 @@ private static boolean isSecondaryConstructor(IProgramMethod constructor) { * */ private void validate(IProgramMethod method) { - if(validatedMethods.contains(method)) { + if (validatedMethods.contains(method)) { return; } methodStack.push(method); StatementBlock body = method.getBody(); - if(body == null) { + if (body == null) { throw new FinalViolationException("Method " + method.getFullName() + " has no body."); } - validateProgramElement(body); + validateProgramElement(body); var popped = methodStack.pop(); assert popped == method; @@ -132,13 +137,13 @@ private void validate(IProgramMethod method) { * program elements. */ private void validateProgramElement(SyntaxElement element) { - if(element instanceof MethodReference methodReference) { + if (element instanceof MethodReference methodReference) { validateMethodReference(methodReference); } else if (element instanceof ConstructorReference constructorReference) { validateConstructorReference(constructorReference); - } else if(element instanceof FieldReference fieldReference) { + } else if (element instanceof FieldReference fieldReference) { validateFieldReference(fieldReference); - } else if(element instanceof Assignment assignment) { + } else if (element instanceof Assignment assignment) { validateAssignment(assignment); } else { validateChildren(element); @@ -152,7 +157,7 @@ private void validateProgramElement(SyntaxElement element) { * Recursively validate all children of the given element. */ private void validateChildren(SyntaxElement element) { - for(int i = 0; i < element.getChildCount(); i++) { + for (int i = 0; i < element.getChildCount(); i++) { validateProgramElement(element.getChild(i)); } } @@ -162,10 +167,13 @@ private void validateChildren(SyntaxElement element) { */ private void validateConstructorReference(ConstructorReference methodReference) { // TODO We have to make sure that on non-static subclass is instantiated here - var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); + var hasThisArgument = + methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); - if(hasThisArgument) { - throw new FinalViolationException("Method call " + methodReference + " leaks 'this' to called method.", methodReference); + if (hasThisArgument) { + throw new FinalViolationException( + "Method call " + methodReference + " leaks 'this' to called method.", + methodReference); } validateChildren(methodReference); @@ -178,22 +186,27 @@ private void validateConstructorReference(ConstructorReference methodReference) private void validateMethodReference(MethodReference methodReference) { ReferencePrefix referencePrefix = methodReference.getReferencePrefix(); var calledOnThis = referencePrefix == null || referencePrefix instanceof ThisReference; - var hasThisArgument = methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); + var hasThisArgument = + methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); - if(hasThisArgument) { - throw new FinalViolationException("Method call " + methodReference + " leaks 'this' to called method.", methodReference); + if (hasThisArgument) { + throw new FinalViolationException( + "Method call " + methodReference + " leaks 'this' to called method.", + methodReference); } - if(calledOnThis) { + if (calledOnThis) { IProgramMethod method = findMethod(methodReference); - if(method.isStatic() || method.isConstructor()) { + if (method.isStatic() || method.isConstructor()) { // local static methods are acutally fine ... // constructor calls are also fine - // TODO (well ... what about inner classes? Aren't they evil?) + // TODO (well ... what about inner classes? Aren't they evil?) return; } - if(!method.isFinal() && !method.isPrivate() && !((ClassType)enclosingClass.getJavaType()).isFinal()) { - throw new FinalViolationException("Method called on 'this' that is not effectively final.", methodReference); + if (!method.isFinal() && !method.isPrivate() + && !((ClassType) enclosingClass.getJavaType()).isFinal()) { + throw new FinalViolationException( + "Method called on 'this' that is not effectively final.", methodReference); } validate(method); } @@ -202,8 +215,10 @@ private void validateMethodReference(MethodReference methodReference) { } private IProgramMethod findMethod(MethodReference methodReference) { - ExecutionContext ec = new ExecutionContext(new TypeRef(enclosingClass), methodStack.peek(), methodReference.getReferencePrefix()); - return methodReference.method(initConfig.getServices(), methodReference.determineStaticPrefixType(initConfig.getServices(), ec), ec); + ExecutionContext ec = new ExecutionContext(new TypeRef(enclosingClass), methodStack.peek(), + methodReference.getReferencePrefix()); + return methodReference.method(initConfig.getServices(), + methodReference.determineStaticPrefixType(initConfig.getServices(), ec), ec); } /* @@ -214,7 +229,8 @@ private void validateAssignment(Assignment assignment) { SyntaxElement assignee = assignment.getChild(0); SyntaxElement value = assignment.getChild(1); if (value instanceof ThisReference) { - throw new FinalViolationException("'this' is leaked to a field or variable.", assignment); + throw new FinalViolationException("'this' is leaked to a field or variable.", + assignment); } if (assignee instanceof FieldReference fr) { // it is ok to assign to this.finalfield! @@ -231,7 +247,7 @@ private void validateAssignment(Assignment assignment) { private void validateFieldReference(FieldReference fieldReference) { ReferencePrefix prefix = fieldReference.getReferencePrefix(); ProgramVariable field = fieldReference.getProgramVariable(); - if(field.isFinal() && prefix instanceof ThisReference) { + if (field.isFinal() && prefix instanceof ThisReference) { throw new FinalViolationException("Final field " + field + " is read.", fieldReference); } validateChildren(fieldReference); @@ -258,4 +274,4 @@ public PositionInfo getPositionInfo() { return position; } } -} \ No newline at end of file +} diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 61d7509c6ef..b52dbbac449 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -19,15 +19,19 @@ import org.key_project.logic.Name; /** - * This class is responsible for making the immutable treatment of final fields possible also for constructors. - * It is an extension of the ProofOblInput interface (originally targeted for the symbolic execution engine) + * This class is responsible for making the immutable treatment of final fields possible also for + * constructors. + * It is an extension of the ProofOblInput interface (originally targeted for the symbolic execution + * engine) * * It has two purposes: - * 1. It checks if the final fields are not read before they are written (via {@link FinalFieldCodeValidator}). - * 2. It modifies the postcondition of the constructor to make the final field values available in the postconditions. + * 1. It checks if the final fields are not read before they are written (via + * {@link FinalFieldCodeValidator}). + * 2. It modifies the postcondition of the constructor to make the final field values available in + * the postconditions. * * To make 2 possible, an additional premiss is added in the post-state formulating that - * \forall Fields f; any::final(self, f) = any::select(heap, self, f) + * \forall Fields f; any::final(self, f) = any::select(heap, self, f) * essentially activating the final field assignments. * * @author Mattias Ulbrich @@ -45,10 +49,11 @@ public boolean isPOSupported(ProofOblInput po) { } @Override - public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfig, Services services, ProgramVariable selfVar, - Term postTerm) { + public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfig, + Services services, ProgramVariable selfVar, + Term postTerm) { - if(!FinalHeapResolution.isFinalEnabled(proofConfig)) { + if (!FinalHeapResolution.isFinalEnabled(proofConfig)) { return postTerm; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java index 4d7993e6586..0d473db9797 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/POExtension.java @@ -30,13 +30,14 @@ public interface POExtension { * Modifies the post condition. * * @param abstractOperationPO The proof obligation for which the mdification is done - * @param proofConfig The {@link InitConfig} to use. - * @param services The {@link Services} to use. - * @param selfTerm The {@link ProgramVariable} representing the current receiver object. - * @param postTerm The post condition to modify. + * @param proofConfig The {@link InitConfig} to use. + * @param services The {@link Services} to use. + * @param selfTerm The {@link ProgramVariable} representing the current receiver object. + * @param postTerm The post condition to modify. * @return The modified post condition or the original post condition if no modifications were - * performed. + * performed. */ - Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, Services services, ProgramVariable selfTerm, - Term postTerm); + Term modifyPostTerm(AbstractOperationPO abstractOperationPO, InitConfig proofConfig, + Services services, ProgramVariable selfTerm, + Term postTerm); } diff --git a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java index 0520b16ec84..49150669cb9 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java @@ -1,5 +1,14 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.proof.init; +import java.io.File; +import java.net.URL; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Stream; + import de.uka.ilkd.key.control.DefaultUserInterfaceControl; import de.uka.ilkd.key.control.KeYEnvironment; import de.uka.ilkd.key.java.abstraction.KeYJavaType; @@ -8,21 +17,16 @@ import de.uka.ilkd.key.proof.mgt.SpecificationRepository; import de.uka.ilkd.key.speclang.Contract; import de.uka.ilkd.key.util.KeYTypeUtil; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; -import java.io.File; -import java.net.URL; -import java.util.HashSet; -import java.util.Set; -import java.util.stream.Stream; - class FinalFieldCodeValidatorTest { @TestFactory public Stream testCodeValidatorParse() throws ProblemLoaderException { - return testContracts(false, "final/shouldparse"); + return testContracts(false, "final/shouldparse"); } @TestFactory @@ -30,19 +34,21 @@ public Stream testCodeValidatorFail() throws ProblemLoaderException return testContracts(true, "final/shouldfail"); } - private Stream testContracts(boolean shouldfail, String directory) throws ProblemLoaderException { + private Stream testContracts(boolean shouldfail, String directory) + throws ProblemLoaderException { URL url = getClass().getResource(directory); assert url != null : directory + " not found."; - assert "file".equals(url.getProtocol()): "Test cases must be in file system"; + assert "file".equals(url.getProtocol()) : "Test cases must be in file system"; File dir = new File(url.getPath()); - KeYEnvironment env = KeYEnvironment.load(dir, null, null, null); + KeYEnvironment env = + KeYEnvironment.load(dir, null, null, null); Set kjts = env.getJavaInfo().getAllKeYJavaTypes(); Set contracts = new HashSet<>(); for (KeYJavaType type : kjts) { if (!KeYTypeUtil.isLibraryClass(type)) { SpecificationRepository specRepo = env.getSpecificationRepository(); - for(Contract c: specRepo.getAllContracts()) { + for (Contract c : specRepo.getAllContracts()) { var target = c.getTarget(); if (target instanceof ProgramMethod pm && pm.isConstructor() && @@ -52,12 +58,16 @@ private Stream testContracts(boolean shouldfail, String directory) } } } - if(shouldfail) - return contracts.stream().map(c -> DynamicTest.dynamicTest("Illegal constructor " + c.getName(), - () -> Assertions.assertThrowsExactly(FinalFieldCodeValidator.FinalViolationException.class, - () -> testConstructor(c, env)))); - else return contracts.stream().map(c -> DynamicTest.dynamicTest("Legal constructor " + c.getName(), - ()->testConstructor(c, env))); + if (shouldfail) + return contracts.stream() + .map(c -> DynamicTest.dynamicTest("Illegal constructor " + c.getName(), + () -> Assertions.assertThrowsExactly( + FinalFieldCodeValidator.FinalViolationException.class, + () -> testConstructor(c, env)))); + else + return contracts.stream() + .map(c -> DynamicTest.dynamicTest("Legal constructor " + c.getName(), + () -> testConstructor(c, env))); } private void testConstructor(Contract c, KeYEnvironment env) throws ProofInputException { @@ -65,10 +75,10 @@ private void testConstructor(Contract c, KeYEnvironment env) throws ProofInpu // System.out.println("Contract id: " + c.getName()); ContractPO po = c.createProofObl(env.getInitConfig()); env.createProof(po); - } catch(FinalFieldCodeValidator.FinalViolationException fex) { + } catch (FinalFieldCodeValidator.FinalViolationException fex) { System.err.println("Position: " + fex.getPositionInfo()); fex.printStackTrace(); throw fex; } } -} \ No newline at end of file +} From c647495f7a136ef6ef6f503da67d0c2d0efe0bfc Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 10 Dec 2024 14:40:30 +0100 Subject: [PATCH 15/31] mostly fixing the prettyprinting and parsing problem --- .../nparser/builder/ExpressionBuilder.java | 18 +++++++++++------ .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 12 +++++++---- .../java/de/uka/ilkd/key/pp/FinalPrinter.java | 15 +++++++------- .../java/de/uka/ilkd/key/pp/LogicPrinter.java | 2 +- .../java/de/uka/ilkd/key/pp/NotationInfo.java | 20 +++++++++++++++++++ .../de/uka/ilkd/key/pp/SelectPrinter.java | 12 +++++++---- .../shouldparse/SecondaryConstructor.java | 3 ++- 7 files changed, 59 insertions(+), 23 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java index 1d638f33534..5efcdec8a7d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java @@ -14,10 +14,7 @@ import de.uka.ilkd.key.java.*; import de.uka.ilkd.key.java.abstraction.KeYJavaType; import de.uka.ilkd.key.java.expression.literal.StringLiteral; -import de.uka.ilkd.key.ldt.IntegerLDT; -import de.uka.ilkd.key.ldt.JavaDLTheory; -import de.uka.ilkd.key.ldt.LDT; -import de.uka.ilkd.key.ldt.SeqLDT; +import de.uka.ilkd.key.ldt.*; import de.uka.ilkd.key.logic.*; import de.uka.ilkd.key.logic.label.TermLabel; import de.uka.ilkd.key.logic.op.*; @@ -680,9 +677,18 @@ public Term createAttributeTerm(Term prefix, Operator attribute, ParserRuleConte ProgramVariable pv = (ProgramVariable) attribute; JFunction fieldSymbol = getServices().getTypeConverter().getHeapLDT() .getFieldSymbolForPV((LocationVariable) pv, getServices()); - if (pv.isStatic()) { + if (pv.isFinal() && FinalHeapResolution.isFinalEnabled(getServices().getProof().getSettings())) { + if(pv.isStatic()) { + // TODO! Make a staticFinalDot method + throw new UnsupportedOperationException("Static final fields are not supported yet. (easy to be added)"); + } else { + result = getServices().getTermBuilder().finalDot(pv.sort(), result, fieldSymbol); + } + } else if (pv.isStatic()) { result = getServices().getTermBuilder().staticDot(pv.sort(), fieldSymbol); - } else { + } + + else { result = getServices().getTermBuilder().dot(pv.sort(), result, fieldSymbol); } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index 3180f6ec8ff..87a80e41d0a 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -157,15 +157,19 @@ protected boolean isBuiltinObjectProperty(Term fieldTerm) { * Determine whether a field constant is static. */ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { - ProgramVariable pv = - getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); - return pv.isStatic(); + try { + ProgramVariable pv = + getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + return pv.isStatic(); + } catch (RuntimeException e) { + return false; + } } /* * Determine whether a field constant is declared final. */ - protected boolean isFinalFieldConstant(Term objectTerm, Term fieldTerm) { + protected boolean isFinalFieldConstant(Term fieldTerm) { ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); return pv.isFinal(); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java index bef77098ae4..fc093e4e50c 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java @@ -46,12 +46,12 @@ public void printFinal(LogicPrinter lp, Term t) { * This section deals with PP of frame conditions (and similar). * Select-type is any. */ - if (isFieldName(fieldTerm.op().name().toString(), objectTerm) - || isJavaFieldConstant(fieldTerm)) { - lp.printFunctionTerm(t); - } else { - printAnySelect(lp, objectTerm, fieldTerm); - } + // if (isFieldName(fieldTerm.op().name().toString(), objectTerm) + // || isJavaFieldConstant(fieldTerm)) { + lp.printFunctionTerm(t); + // } else { + // printAnySelect(lp, objectTerm, fieldTerm); + // } } else if (isBuiltinObjectProperty(fieldTerm)) { // object properties denoted like o. printBuiltinObjectProperty(lp, t, objectTerm, fieldTerm); @@ -60,8 +60,9 @@ && getFieldSort(fieldTerm).equals(t.sort())) { // static field access printStaticJavaFieldConstant(lp, fieldTerm); } else if (isJavaFieldConstant(fieldTerm) + && isFinalFieldConstant(fieldTerm) && getFieldSort(fieldTerm).equals(t.sort())) { - // non-static field access + // non-static field access to a final field printNonStaticJavaFieldConstant(lp, objectTerm, fieldTerm); } else { lp.printFunctionTerm(t); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java index f9045af4f56..42321c39589 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/LogicPrinter.java @@ -100,7 +100,7 @@ public LogicPrinter(NotationInfo notationInfo, Services services, PosTableLayout } storePrinter = new StorePrinter(this.services); finalPrinter = new FinalPrinter(this.services); - selectPrinter = new SelectPrinter(this.services); + selectPrinter = new SelectPrinter(notationInfo, this.services); this.layouter = layouter; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java b/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java index 954c779d867..741210c73a7 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/NotationInfo.java @@ -11,6 +11,7 @@ import de.uka.ilkd.key.ldt.*; import de.uka.ilkd.key.logic.label.TermLabel; import de.uka.ilkd.key.logic.op.*; +import de.uka.ilkd.key.settings.ProofSettings; import de.uka.ilkd.key.util.UnicodeHelper; @@ -107,6 +108,14 @@ public final class NotationInfo { public static boolean DEFAULT_HIDE_PACKAGE_PREFIX = false; + /** + * Whether the final field special treatment is on. If on, then select(heap, o, f) is not + * pretty-printed as o.f. + * To be on the safe side, it is on by default. + */ + public static boolean DEFAULT_FINAL_IMMUTABLE = true; + + /** * This maps operators and classes of operators to {@link Notation}s. The idea is that we first * look whether the operator has a Notation registered. Otherwise, we see if there is one for @@ -126,6 +135,8 @@ public final class NotationInfo { private boolean hidePackagePrefix = DEFAULT_HIDE_PACKAGE_PREFIX; + private boolean finalImmutable = DEFAULT_FINAL_IMMUTABLE; + // ------------------------------------------------------------------------- // constructors // ------------------------------------------------------------------------- @@ -409,6 +420,11 @@ public void refresh(Services services, boolean usePrettyPrinting, boolean useUni this.notationTable = createDefaultNotation(); } hidePackagePrefix = DEFAULT_HIDE_PACKAGE_PREFIX; + + if (services != null && services.getProof() != null) { + ProofSettings settings = services.getProof().getSettings(); + finalImmutable = FinalHeapResolution.isFinalEnabled(settings); + } } public AbbrevMap getAbbrevMap() { @@ -498,6 +514,10 @@ public void setHidePackagePrefix(boolean b) { hidePackagePrefix = b; } + public boolean isFinalImmutable() { + return finalImmutable; + } + public Map getNotationTable() { return notationTable; } diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java index 19c0d665928..e58b508098d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java @@ -24,8 +24,11 @@ */ class SelectPrinter extends FieldPrinter { - SelectPrinter(Services services) { + private final NotationInfo ni; + + SelectPrinter(NotationInfo ni, Services services) { super(services); + this.ni = ni; } /* @@ -72,9 +75,10 @@ public void printSelect(LogicPrinter lp, Term t, Term tacitHeap) { // object properties denoted like o. printBuiltinObjectProperty(lp, t, heapTerm, objectTerm, fieldTerm, tacitHeap); - } - // TODO Check if final-treatment is immutable and act accordingly ... - else if (isStaticFieldConstant(objectTerm, fieldTerm) + } else if (ni.isFinalImmutable() && isFinalFieldConstant(fieldTerm)) { + // final field access: do not pretty print the sect term but only the final term. + lp.printFunctionTerm(t); + } else if (isStaticFieldConstant(objectTerm, fieldTerm) && getFieldSort(fieldTerm).equals(t.sort())) { // static field access printStaticJavaFieldConstant(lp, fieldTerm, heapTerm, tacitHeap); diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java index 80239df2f8c..66f6b6468da 100644 --- a/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/init/final/shouldparse/SecondaryConstructor.java @@ -8,7 +8,8 @@ class SecondaryConstructor { finalField = v; } - SecondaryCosntructor() { + //@ ensures b; + SecondaryConstructor() { this(42); int x = finalField; } From aa749dd47af962b2eddd999654ccb97b77575841 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 13 Dec 2024 18:12:08 +0100 Subject: [PATCH 16/31] test cases for pp and parsing, mainly wrt. final fields --- .../de/uka/ilkd/key/pp/FinalPrinterTest.java | 107 +++++++++++++++ .../de/uka/ilkd/key/pp/PPRoundtripTest.java | 125 ++++++++++++++++++ .../de/uka/ilkd/key/pp/roundTripTest.key | 9 ++ .../de/uka/ilkd/key/pp/roundtrip-src/C.java | 10 ++ 4 files changed, 251 insertions(+) create mode 100644 key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java create mode 100644 key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/pp/roundTripTest.key create mode 100644 key.core/src/test/resources/de/uka/ilkd/key/pp/roundtrip-src/C.java diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java new file mode 100644 index 00000000000..d5efb9b1082 --- /dev/null +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java @@ -0,0 +1,107 @@ +package de.uka.ilkd.key.pp; + +import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.logic.Choice; +import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.equality.RenamingTermProperty; +import de.uka.ilkd.key.nparser.KeyIO; +import de.uka.ilkd.key.util.HelperClassForTests; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * @author Mattias Ulbrich + */ + +public class FinalPrinterTest { + + public static final Choice WITHOUT_FINAL = new Choice("finalFields", "onHeap"); + private static KeyIO io; + private static Services services; + + @BeforeAll + public static void setup() { + services = getServices(); + io = new KeyIO(services, services.getNamespaces()); + } + + @AfterAll + public static void tearDown() { + io = null; + } + + public static Stream casesWithFinal() { + return Stream.of( + Arguments.of("int::select(heap, self, C::$f)", "self.f"), + Arguments.of("int::select(heap, self, C::$finf)", "int::select(heap, self, C::$finf)"), + Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), + Arguments.of("int::final(self, C::$finf)", "self.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)") + ); + } + + @ParameterizedTest(name = "{0} => {1}") + @MethodSource("casesWithFinal") + public void testPPWithFinal(String termString, String expected) throws Exception { + services.getProof().getSettings().getChoiceSettings().updateWith(List.of(PPRoundtripTest.WITH_FINAL)); + Term term = io.parseExpression(termString); + System.out.println("Original: " + term); + LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); + lp.printTerm(term); + var printed = lp.result(); + assertEquals(expected, printed); + } + + public static Stream casesWithoutFinal() { + return Stream.of( + Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), + Arguments.of("int::final(self, C::$finf)", "self.finf"), + Arguments.of("int::select(heap, self, C::$f)", "self.f"), + Arguments.of("int::select(heap, self, C::$finf)", "self.finf") + ); + } + + + @ParameterizedTest(name = "{0} => {1}") + @MethodSource("casesWithoutFinal") + public void testPPWithoutFinal(String termString, String expected) throws Exception { + services.getProof().getSettings().getChoiceSettings().updateWith(List.of(PPRoundtripTest.WITHOUT_FINAL)); + Term term = io.parseExpression(termString); + System.out.println("Original: " + term); + LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); + lp.printTerm(term); + var printed = lp.result(); + assertEquals(expected, printed); + } + + + private void assertEqualModAlpha(Term expected, Term actual) { + var value = expected.equalsModProperty(actual, RenamingTermProperty.RENAMING_TERM_PROPERTY); + if(!value) { + System.err.println("Expected: " + expected); + System.err.println("Actual : " + actual); + } + assertTrue(value, "Expected: " + expected + " but was: " + actual); + } + + private static Services getServices() { + URL url = de.uka.ilkd.key.pp.PPRoundtripTest.class.getResource("roundTripTest.key"); + assert url != null : "Could not find roundTripTest.key"; + assert "file".equals(url.getProtocol()) : "URL is not a file URL"; + File keyFile = new File(url.getPath()); + return HelperClassForTests.createServices(keyFile); + } +} diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java new file mode 100644 index 00000000000..b7506a9bf93 --- /dev/null +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java @@ -0,0 +1,125 @@ +package de.uka.ilkd.key.pp; + +import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.ldt.FinalHeapResolution; +import de.uka.ilkd.key.logic.Choice; +import de.uka.ilkd.key.logic.Term; +import de.uka.ilkd.key.logic.equality.RenamingTermProperty; +import de.uka.ilkd.key.nparser.KeyIO; +import de.uka.ilkd.key.util.HelperClassForTests; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * Pretty printer roundtrip test. + *

+ * Any term that is pretty printed and then parsed again should be equal to the original term. + * + * @author Mattias Ulbrich + */ +public class PPRoundtripTest { + + public static final Choice WITH_FINAL = new Choice("immutable", "finalFields" ); + public static final Choice WITHOUT_FINAL = new Choice("onHeap", "finalFields"); + private static KeyIO io; + private static Services services; + + @BeforeAll + public static void setup() { + services = getServices(); + io = new KeyIO(services, services.getNamespaces()); + } + + @AfterAll + public static void tearDown() { + io = null; + } + + private static final String[] CASES = { + "1+1", + "-1", + "1.1d+0d", + "-1d", + "-1r", + "-1f", + "1.1f+0f", + "union(empty, empty)", + }; + + private static final String[] HEAP_CASES = { + "self.f", + "sub.f", + "int::select(heap, sub, C::$f)", + "int::final(self, C::$f)", + "\\forall Field f; int::select(heap, self, C::$f) = 0", + "\\forall Field fvar; self.fvar = 0", + "\\forall Field fvar; any::final(self, fvar) = 0", + "self.finf" + }; + + public static Stream getCases() { + return Stream.concat(Stream.of(CASES), Stream.of(HEAP_CASES)).map(Arguments::of); + } + + public static Stream getHeapCases() { + return Stream.of(HEAP_CASES).map(Arguments::of); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("getCases") + public void roundtrip(String termString) throws Exception { + services.getProof().getSettings().getChoiceSettings().updateWith(List.of(WITH_FINAL)); + Term term = io.parseExpression(termString); + System.out.println("Original: " + term); + LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); + lp.printTerm(term); + var string = lp.result(); + System.out.println("Pretty printed: " + string); + Term term2 = io.parseExpression(string); + System.out.println("Reparsed: " + term2); + assertEqualModAlpha(term, term2); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("getHeapCases") + void roundtripWithoutFinal(String termString) throws Exception { + services.getProof().getSettings().getChoiceSettings().updateWith(List.of(WITHOUT_FINAL)); + Term term = io.parseExpression(termString); + System.out.println("Original: " + term); + LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); + lp.printTerm(term); + var string = lp.result(); + System.out.println("Pretty printed: " + string); + Term term2 = io.parseExpression(string); + System.out.println("Reparsed: " + term2); + assertEqualModAlpha(term, term2); + } + + private void assertEqualModAlpha(Term expected, Term actual) { + var value = expected.equalsModProperty(actual, RenamingTermProperty.RENAMING_TERM_PROPERTY); + if(!value) { + System.err.println("Expected: " + expected); + System.err.println("Actual : " + actual); + } + assertTrue(value, "Expected: " + expected + " but was: " + actual); + } + + private static Services getServices() { + URL url = PPRoundtripTest.class.getResource("roundTripTest.key"); + assert url != null : "Could not find roundTripTest.key"; + assert "file".equals(url.getProtocol()) : "URL is not a file URL"; + File keyFile = new File(url.getPath()); + return HelperClassForTests.createServices(keyFile); + } +} diff --git a/key.core/src/test/resources/de/uka/ilkd/key/pp/roundTripTest.key b/key.core/src/test/resources/de/uka/ilkd/key/pp/roundTripTest.key new file mode 100644 index 00000000000..9d9b8a18f9a --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/pp/roundTripTest.key @@ -0,0 +1,9 @@ +\javaSource "roundtrip-src"; + +\programVariables { + C self; + Csub sub; + Field fvar; +} + +\problem { true } \ No newline at end of file diff --git a/key.core/src/test/resources/de/uka/ilkd/key/pp/roundtrip-src/C.java b/key.core/src/test/resources/de/uka/ilkd/key/pp/roundtrip-src/C.java new file mode 100644 index 00000000000..e32330b8edb --- /dev/null +++ b/key.core/src/test/resources/de/uka/ilkd/key/pp/roundtrip-src/C.java @@ -0,0 +1,10 @@ +class C { + int f; + final int finf; + C next; +} + +class Csub extends C { + int f; // hiding the field f in C. + final int finf; +} From c3a28ef66a06c2ce0dc24243b2f63e427e435fdb Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 13 Dec 2024 18:12:26 +0100 Subject: [PATCH 17/31] repairing failing test cases --- .../ilkd/key/logic/equality/RenamingTermProperty.java | 2 ++ .../src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java | 10 +++++++--- .../de/uka/ilkd/key/parser/TestTermParserHeap.java | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/logic/equality/RenamingTermProperty.java b/key.core/src/main/java/de/uka/ilkd/key/logic/equality/RenamingTermProperty.java index 0931009a9b8..f57a2702845 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/logic/equality/RenamingTermProperty.java +++ b/key.core/src/main/java/de/uka/ilkd/key/logic/equality/RenamingTermProperty.java @@ -19,6 +19,8 @@ * {@link EqualsModProperty#equalsModProperty(Object, Property, Object[])} for terms. * Renaming of variables is ignored in this equality check. *

+ * This is also named "equality modulo bound renaming" or "equality modulo alpha-equivalence". + *

* The single instance of this property can be accessed through * {@link RenamingTermProperty#RENAMING_TERM_PROPERTY}. * diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index 87a80e41d0a..16b4d141830 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -170,9 +170,13 @@ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { * Determine whether a field constant is declared final. */ protected boolean isFinalFieldConstant(Term fieldTerm) { - ProgramVariable pv = - getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); - return pv.isFinal(); + try { + ProgramVariable pv = + getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + return pv.isFinal(); + } catch (RuntimeException e) { + return false; + } } } diff --git a/key.core/src/test/java/de/uka/ilkd/key/parser/TestTermParserHeap.java b/key.core/src/test/java/de/uka/ilkd/key/parser/TestTermParserHeap.java index 40a1b85091e..730d66cc4fc 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/parser/TestTermParserHeap.java +++ b/key.core/src/test/java/de/uka/ilkd/key/parser/TestTermParserHeap.java @@ -214,8 +214,8 @@ public void testVerifyExceptionIfAtOperatorNotPreceededBySelectTerm() { @Test // @Ignore(value="weigl: This test is not comprehensible anymore.") public void testUnknownConstant() throws Exception { - parseDecls("\\functions { \\unique Field unkonwn.Clazz::$unknownField; }"); - String string = "int::select(heap,a,unkonwn.Clazz::$unknownField)"; + parseDecls("\\functions { \\unique Field unknown.Clazz::$unknownField; }"); + String string = "int::select(heap,a,unknown.Clazz::$unknownField)"; comparePrettyPrintAgainstToString(string, string); } From 3af87757a8e63dfc0ff6e3e191d942d66d1c48e5 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 13 Dec 2024 19:58:54 +0100 Subject: [PATCH 18/31] more automation for finals in constructors --- .../ilkd/key/java/abstraction/Variable.java | 7 ++ .../java/declaration/FieldSpecification.java | 2 +- .../declaration/VariableSpecification.java | 64 +++++++++++-------- .../proof/init/FinalFieldsPOExtension.java | 37 +++++++---- 4 files changed, 69 insertions(+), 41 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/java/abstraction/Variable.java b/key.core/src/main/java/de/uka/ilkd/key/java/abstraction/Variable.java index fb4efa56196..65e79a5cf09 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/java/abstraction/Variable.java +++ b/key.core/src/main/java/de/uka/ilkd/key/java/abstraction/Variable.java @@ -18,6 +18,13 @@ public interface Variable extends ProgramModelElement { */ boolean isFinal(); + /** + * Checks if this variable is a model entity. + * + * @return true if this variable is a model entity, false otherwise. + */ + public boolean isModel(); + /** * Returns the type of this variable. * diff --git a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/FieldSpecification.java b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/FieldSpecification.java index cb69c80f803..0c18e6e95a2 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/FieldSpecification.java +++ b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/FieldSpecification.java @@ -91,7 +91,7 @@ public String getProgramName() { * Test whether the declaration is static. */ public boolean isStatic() { - return ((ProgramVariable) var).isStatic(); + return ((ProgramVariable) programVar).isStatic(); } /** diff --git a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java index dce692a4d7c..a139d9e8f1b 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java +++ b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java @@ -9,6 +9,7 @@ import de.uka.ilkd.key.java.visitor.Visitor; import de.uka.ilkd.key.logic.ProgramElementName; import de.uka.ilkd.key.logic.op.IProgramVariable; +import de.uka.ilkd.key.logic.op.ProgramVariable; import de.uka.ilkd.key.rule.MatchConditions; import org.key_project.util.ExtList; @@ -46,33 +47,33 @@ public class VariableSpecification extends JavaNonTerminalProgramElement */ protected final Type type; - protected final IProgramVariable var; + protected final IProgramVariable programVar; public VariableSpecification() { this(null, 0, null, null, null); } - public VariableSpecification(IProgramVariable var) { - this(var, var.getKeYJavaType()); + public VariableSpecification(IProgramVariable programVar) { + this(programVar, programVar.getKeYJavaType()); } - public VariableSpecification(IProgramVariable var, Type type) { - this(var, 0, null, type, null); + public VariableSpecification(IProgramVariable programVar, Type type) { + this(programVar, 0, null, type, null); } - public VariableSpecification(IProgramVariable var, Expression init, Type type) { - this(var, 0, init, type, null); + public VariableSpecification(IProgramVariable programVar, Expression init, Type type) { + this(programVar, 0, init, type, null); } - public VariableSpecification(IProgramVariable var, int dim, Expression init, Type type) { - this(var, dim, init, type, PositionInfo.UNDEFINED); + public VariableSpecification(IProgramVariable programVar, int dim, Expression init, Type type) { + this(programVar, dim, init, type, PositionInfo.UNDEFINED); } - public VariableSpecification(IProgramVariable var, int dim, Expression init, Type type, - PositionInfo pi) { + public VariableSpecification(IProgramVariable programVar, int dim, Expression init, Type type, + PositionInfo pi) { super(pi); - this.var = var; + this.programVar = programVar; this.initializer = init; this.dimensions = dim; this.type = type; @@ -86,9 +87,9 @@ public VariableSpecification(IProgramVariable var, int dim, Expression init, Typ * (as initializer of the variable) a Comment * @param dim the dimension of this type */ - public VariableSpecification(ExtList children, IProgramVariable var, int dim, Type type) { + public VariableSpecification(ExtList children, IProgramVariable programVar, int dim, Type type) { super(children); - this.var = var; + this.programVar = programVar; initializer = children.get(Expression.class); dimensions = dim; this.type = type; @@ -102,7 +103,7 @@ public VariableSpecification(ExtList children, IProgramVariable var, int dim, Ty */ public int getChildCount() { int result = 0; - if (var != null) { + if (programVar != null) { result++; } if (initializer != null) { @@ -119,9 +120,9 @@ public int getChildCount() { * @throws ArrayIndexOutOfBoundsException if index is out of bounds */ public ProgramElement getChildAt(int index) { - if (var != null) { + if (programVar != null) { if (index == 0) { - return var; + return programVar; } index--; } @@ -169,7 +170,7 @@ public Expression getExpressionAt(int index) { * @return the string. */ public final String getName() { - return (var == null) ? null : var.name().toString(); + return (programVar == null) ? null : programVar.name().toString(); } /** @@ -178,10 +179,10 @@ public final String getName() { * @return the name. */ public ProgramElementName getProgramElementName() { - if (var.name() instanceof ProgramElementName) { - return (ProgramElementName) var.name(); + if (programVar.name() instanceof ProgramElementName) { + return (ProgramElementName) programVar.name(); } else { - return new ProgramElementName(var.name().toString()); // only with SVs + return new ProgramElementName(programVar.name().toString()); // only with SVs } } @@ -192,7 +193,7 @@ public ProgramElementName getProgramElementName() { * @return the program variable. */ public IProgramVariable getProgramVariable() { - return var; + return programVar; } @@ -220,8 +221,19 @@ public boolean hasInitializer() { } public boolean isFinal() { - LOGGER.warn("Method in Variable Specification not implemented!"); - return false; + if (programVar instanceof ProgramVariable pv) { + return pv.isFinal(); + } + // This used to return always false. + throw new UnsupportedOperationException("Cannot determine finality of " + programVar); + } + + public boolean isModel() { + if (programVar instanceof ProgramVariable pv) { + return pv.isModel(); + } + // This used to return always false. + throw new UnsupportedOperationException("Cannot determine finality of " + programVar); } @@ -235,7 +247,7 @@ public String getFullName() { @Override public SourceElement getFirstElement() { - return var; + return programVar; } @Override @@ -243,7 +255,7 @@ public SourceElement getLastElement() { if (initializer != null) { return initializer.getLastElement(); } else { - return var; + return programVar; } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index b52dbbac449..f0cfef15386 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -6,17 +6,15 @@ import java.util.List; import de.uka.ilkd.key.java.Services; +import de.uka.ilkd.key.java.abstraction.ClassType; +import de.uka.ilkd.key.java.abstraction.Type; +import de.uka.ilkd.key.java.abstraction.Variable; import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.Choice; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.TermBuilder; -import de.uka.ilkd.key.logic.op.IProgramMethod; -import de.uka.ilkd.key.logic.op.LogicVariable; -import de.uka.ilkd.key.logic.op.ProgramMethod; -import de.uka.ilkd.key.logic.op.ProgramVariable; - -import org.key_project.logic.Name; +import de.uka.ilkd.key.logic.op.*; /** * This class is responsible for making the immutable treatment of final fields possible also for @@ -66,14 +64,25 @@ public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfi FinalFieldCodeValidator.validateFinalFields(constructor, proofConfig); TermBuilder tb = services.getTermBuilder(); - LogicVariable fv = new LogicVariable(new Name("fld"), - services.getTypeConverter().getHeapLDT().getFieldSort()); + List finalFields = findFinalFields(iconstructor, services); Term self = tb.var(selfVar); - Term sel = tb.dot(JavaDLTheory.ANY, self, tb.var(fv)); - Term fsel = tb.finalDot(JavaDLTheory.ANY, self, tb.var(fv)); - Term eq = tb.equals(sel, fsel); - Term all = tb.all(List.of(fv), eq); - Term imp = tb.imp(all, postTerm); - return imp; + for (JFunction finalField : finalFields) { + Term fieldRef = tb.tf().createTerm(finalField); + Term sel = tb.dot(JavaDLTheory.ANY, self, fieldRef); + Term fsel = tb.finalDot(JavaDLTheory.ANY, self, fieldRef); + Term eq = tb.equals(sel, fsel); + postTerm = tb.imp(eq, postTerm); + } + return postTerm; + } + + private List findFinalFields(IProgramMethod iconstructor, Services services) { + Type type = iconstructor.getContainerType().getJavaType(); + assert type instanceof ClassType : "Class type was expected here, since a constructor is present"; + ClassType classType = (ClassType) type; + return classType.getAllFields(services).filter(v -> v.isFinal() && !v.isModel()).map(f -> + services.getTypeConverter().getHeapLDT().getFieldSymbolForPV((LocationVariable)f.getProgramVariable(), services)).toList(); } + + } From 7c817000a41028309684b006fb84786e7f52a52e Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 13 Dec 2024 23:04:12 +0100 Subject: [PATCH 19/31] repairing test cases --- .../ilkd/key/nparser/TestTacletEquality.java | 2 +- .../de/uka/ilkd/key/pp/PPRoundtripTest.java | 4 +- .../de/uka/ilkd/key/nparser/taclets.old.txt | 84 +++++++++++++++++-- .../merge/gcd.mergePointStatements.key | 2 +- 4 files changed, 82 insertions(+), 10 deletions(-) diff --git a/key.core/src/test/java/de/uka/ilkd/key/nparser/TestTacletEquality.java b/key.core/src/test/java/de/uka/ilkd/key/nparser/TestTacletEquality.java index 548f53b4b39..8c15fbd065b 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/nparser/TestTacletEquality.java +++ b/key.core/src/test/java/de/uka/ilkd/key/nparser/TestTacletEquality.java @@ -42,7 +42,7 @@ *

How to update {@code taclet.old.txt} efficiently.

*

* You can generate a new oracle easily by invoking the disabled test-method - * {@link #createNewOracle()}. This method generates the {@code taclet.new.txt} file. Then, you + * {@link #createNewOracle()}. This method generates the {@code taclets.new.txt} file. Then, you * should use a diff-tool to compare the changes or directly overwrite {@code taclets.old.txt} with * the new representations. * diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java index b7506a9bf93..cc9ed091de6 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java @@ -51,10 +51,10 @@ public static void tearDown() { "-1", "1.1d+0d", "-1d", - "-1r", + // "-1r", "-1f", "1.1f+0f", - "union(empty, empty)", + // "union(empty, empty)", }; private static final String[] HEAP_CASES = { diff --git a/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt b/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt index 2e397ca646a..a7f14f62d3b 100644 --- a/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt +++ b/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt @@ -1,5 +1,5 @@ # This files contains representation of taclets, which are accepted and revised. -# Date: Wed Jun 26 12:45:30 CEST 2024 +# Date: Fri Dec 13 23:01:56 CET 2024 == abortJavaCardTransactionAPI (abortJavaCardTransactionAPI) ========================================= abortJavaCardTransactionAPI { @@ -1840,21 +1840,42 @@ assignment_read_attribute { \find(==>#allmodal ((modal operator))|{{ .. #v0 = #v.#a; ... }}| (post)) -\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \not\isModelField(#a (program Variable)), \hasSort(#a (program Variable), G), \not\isThisReference (#v (program Variable))) +\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \hasSort(#a (program Variable), G), \not\isThisReference (#v (program Variable)), \not \final(#a (program Variable))) \add [equals(#v,null)]==>[] \replacewith([]==>[false]) ; \replacewith([]==>[update-application(elem-update(#v0 (program Variable))(G::select(heap,#v,#memberPVToField(#a))),#allmodal(post))]) \heuristics(simplify_prog_subset, simplify_prog) -Choices: (programRules:Java & runtimeExceptions:ban)} +Choices: ((programRules:Java & runtimeExceptions:ban) & finalFields:immutable)} +----------------------------------------------------- +== assignment_read_attribute_final (assignment_read_attribute_final) ========================================= +assignment_read_attribute_final { +\find(==>#allmodal ((modal operator))|{{ .. + #v0 = #v.#a; +... }}| (post)) +\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \hasSort(#a (program Variable), G), \not\isThisReference (#v (program Variable)), \final(#a (program Variable))) +\add [equals(#v,null)]==>[] \replacewith([]==>[false]) ; +\replacewith([]==>[update-application(elem-update(#v0 (program Variable))(G::final(#v,#memberPVToField(#a))),#allmodal(post))]) +\heuristics(simplify_prog_subset, simplify_prog) +Choices: ((programRules:Java & runtimeExceptions:ban) & finalFields:immutable)} ----------------------------------------------------- == assignment_read_attribute_this (assignment_read_attribute_this) ========================================= assignment_read_attribute_this { \find(==>#allmodal ((modal operator))|{{ .. #v0 = #v.#a; ... }}| (post)) -\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \not\isModelField(#a (program Variable)), \hasSort(#a (program Variable), G), \isThisReference (#v (program Variable))) +\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \not\isModelField(#a (program Variable)), \hasSort(#a (program Variable), G), \isThisReference (#v (program Variable)), \not \final(#a (program Variable))) \replacewith([]==>[update-application(elem-update(#v0 (program Variable))(G::select(heap,#v,#memberPVToField(#a))),#allmodal(post))]) \heuristics(simplify_prog_subset, simplify_prog) -Choices: (programRules:Java & runtimeExceptions:ban)} +Choices: ((programRules:Java & runtimeExceptions:ban) & finalFields:immutable)} +----------------------------------------------------- +== assignment_read_attribute_this_final (assignment_read_attribute_this_final) ========================================= +assignment_read_attribute_this_final { +\find(==>#allmodal ((modal operator))|{{ .. + #v0 = #v.#a; +... }}| (post)) +\varcond( \not \static(#a (program Variable)), \not \isArrayLength(#a (program Variable)), \hasSort(#a (program Variable), G), \isThisReference (#v (program Variable)), \final(#a (program Variable))) +\replacewith([]==>[update-application(elem-update(#v0 (program Variable))(G::final(#v,#memberPVToField(#a))),#allmodal(post))]) +\heuristics(simplify_prog_subset, simplify_prog) +Choices: ((programRules:Java & runtimeExceptions:ban) & finalFields:immutable)} ----------------------------------------------------- == assignment_read_length (assignment_read_length) ========================================= assignment_read_length { @@ -1882,11 +1903,21 @@ assignment_read_static_attribute { \find(#allmodal ((modal operator))|{{ .. #v0 = @(#sv); ... }}| (post)) -\sameUpdateLevel\varcond(\hasSort(#sv (program StaticVariable), G)) +\sameUpdateLevel\varcond(\hasSort(#sv (program StaticVariable), G), \not \final(#sv (program StaticVariable))) \replacewith(update-application(elem-update(#v0 (program Variable))(G::select(heap,null,#memberPVToField(#sv))),#allmodal(post))) \heuristics(simplify_prog_subset, simplify_prog) Choices: programRules:Java} ----------------------------------------------------- +== assignment_read_static_attribute_final (assignment_read_static_attribute_final) ========================================= +assignment_read_static_attribute_final { +\find(#allmodal ((modal operator))|{{ .. + #v0 = @(#sv); +... }}| (post)) +\sameUpdateLevel\varcond(\hasSort(#sv (program StaticVariable), G), \final(#sv (program StaticVariable))) +\replacewith(update-application(elem-update(#v0 (program Variable))(G::final(null,#memberPVToField(#sv))),#allmodal(post))) +\heuristics(simplify_prog_subset, simplify_prog) +Choices: programRules:Java} +----------------------------------------------------- == assignment_read_static_attribute_with_variable_prefix (assignment) ========================================= assignment_read_static_attribute_with_variable_prefix { \find(#allmodal ((modal operator))|{{ .. @@ -13484,6 +13515,15 @@ multiply_inEq1 { Choices: integerSimplificationRules:full} ----------------------------------------------------- +== narrowFinalArrayType (narrowFinalArrayType) ========================================= +narrowFinalArrayType { +\assumes ([]==>[equals(o,null)]) +\find(beta::final(o,arr(idx))) +\sameUpdateLevel\varcond(\hasSort(\elemSort(o (java.lang.Object term)), alpha), \strict\sub(alpha, beta)) +\replacewith(alpha::final(o,arr(idx))) +\heuristics(simplify) +Choices: programRules:Java} +----------------------------------------------------- == narrowSelectArrayType (narrowSelectArrayType) ========================================= narrowSelectArrayType { \assumes ([wellFormed(h)]==>[equals(o,null)]) @@ -13502,6 +13542,14 @@ narrowSelectType { \heuristics(simplify) Choices: programRules:Java} ----------------------------------------------------- +== narrowTypeFinal (narrowTypeFinal) ========================================= +narrowTypeFinal { +\find(beta::final(o,f)) +\varcond(\fieldType(f (Field term), alpha), \strict\sub(alpha, beta)) +\replacewith(alpha::final(o,f)) +\heuristics(simplify) +Choices: programRules:Java} +----------------------------------------------------- == narrowingByteCastBigint (cast) ========================================= narrowingByteCastBigint { \find(#allmodal ((modal operator))|{{ .. @@ -13913,6 +13961,22 @@ onlyCreatedObjectsAreInLocSetsEQ { \heuristics(inReachableStateImplication) Choices: programRules:Java} ----------------------------------------------------- +== onlyCreatedObjectsAreInLocSetsEQFinal (onlyCreatedObjectsAreInLocSetsEQFinal) ========================================= +onlyCreatedObjectsAreInLocSetsEQFinal { +\assumes ([wellFormed(h),equals(LocSet::final(o,f),EQ)]==>[]) +\find(elementOf(o2,f2,EQ)==>) +\add [or(equals(o2,null),equals(boolean::select(h,o2,java.lang.Object::),TRUE))]==>[] +\heuristics(inReachableStateImplication) +Choices: programRules:Java} +----------------------------------------------------- +== onlyCreatedObjectsAreInLocSetsFinal (onlyCreatedObjectsAreInLocSetsFinal) ========================================= +onlyCreatedObjectsAreInLocSetsFinal { +\assumes ([wellFormed(h)]==>[]) +\find(elementOf(o2,f2,LocSet::final(o,f))==>) +\add [or(equals(o2,null),equals(boolean::select(h,o2,java.lang.Object::),TRUE))]==>[] +\heuristics(inReachableStateImplication) +Choices: programRules:Java} +----------------------------------------------------- == onlyCreatedObjectsAreObserved (onlyCreatedObjectsAreObserved) ========================================= onlyCreatedObjectsAreObserved { \find(obs) @@ -13946,6 +14010,14 @@ onlyCreatedObjectsAreReferenced { \heuristics(inReachableStateImplication) Choices: programRules:Java} ----------------------------------------------------- +== onlyCreatedObjectsAreReferencedFinal (onlyCreatedObjectsAreReferencedFinal) ========================================= +onlyCreatedObjectsAreReferencedFinal { +\assumes ([wellFormed(h),equals(boolean::select(h,o,java.lang.Object::),TRUE)]==>[]) +\find(deltaObject::final(o,f)) +\sameUpdateLevel\add [or(equals(deltaObject::final(o,f),null),equals(boolean::select(h,deltaObject::final(o,f),java.lang.Object::),TRUE))]==>[] +\heuristics(inReachableStateImplication) +Choices: programRules:Java} +----------------------------------------------------- == only_created_objects_are_reachable (only_created_objects_are_reachable) ========================================= only_created_objects_are_reachable { \assumes ([wellFormed(h)]==>[equals(o,null)]) diff --git a/key.core/src/test/resources/testcase/merge/gcd.mergePointStatements.key b/key.core/src/test/resources/testcase/merge/gcd.mergePointStatements.key index 6459c0fad9c..f7dbfea12d4 100644 --- a/key.core/src/test/resources/testcase/merge/gcd.mergePointStatements.key +++ b/key.core/src/test/resources/testcase/merge/gcd.mergePointStatements.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=50000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=initialisation-initialisation\\:disableStaticInitialisation , wdChecks-wdChecks\\:off , reach-reach\\:on , moreSeqRules-moreSeqRules\\:off , sequences-sequences\\:on , Strings-Strings\\:on , mergeGenerateIsWeakeningGoal-mergeGenerateIsWeakeningGoal\\:off , runtimeExceptions-runtimeExceptions\\:ban , wdOperator-wdOperator\\:L , JavaCard-JavaCard\\:on , integerSimplificationRules-integerSimplificationRules\\:full , permissions-permissions\\:off , modelFields-modelFields\\:treatAsAxiom , assertions-assertions\\:safe , intRules-intRules\\:arithmeticSemanticsIgnoringOF , bigint-bigint\\:on , programRules-programRules\\:Java +[Choice]DefaultChoices=initialisation-initialisation\\:disableStaticInitialisation , wdChecks-wdChecks\\:off , reach-reach\\:on , moreSeqRules-moreSeqRules\\:off , sequences-sequences\\:on , Strings-Strings\\:on , mergeGenerateIsWeakeningGoal-mergeGenerateIsWeakeningGoal\\:off , runtimeExceptions-runtimeExceptions\\:ban , wdOperator-wdOperator\\:L , JavaCard-JavaCard\\:on , integerSimplificationRules-integerSimplificationRules\\:full , permissions-permissions\\:off , modelFields-modelFields\\:treatAsAxiom , assertions-assertions\\:safe , intRules-intRules\\:arithmeticSemanticsIgnoringOF , bigint-bigint\\:on , programRules-programRules\\:Java , finalFields-finalFields:onHeap [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_ON From dad8acaab120c9627e9fdb2f16bcd950be8755d2 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 20 Dec 2024 22:29:06 +0100 Subject: [PATCH 20/31] adding two rules for final fields. a final field reference in a created object points to null or to a created object. --- .../uka/ilkd/key/proof/rules/locSetsRules.key | 31 +++++++++++++++++++ .../runallproofs/automaticJAVADL.properties | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key index 3777a649823..10a0838873b 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key @@ -1329,6 +1329,37 @@ \heuristics(concrete) }; + referencedObjectIsCreatedRightFinal { + \schemaVar \term Heap h; + \schemaVar \term Object o; + \schemaVar \term Field f; + + \assumes( ==> deltaObject::final(o, f) = null) + \find( ==> boolean::select(h, + deltaObject::final(o, f), + java.lang.Object::) = TRUE ) + + \replacewith( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) + + \heuristics(concrete) + }; + + referencedObjectIsCreatedRighFinalEQ { + \schemaVar \term Heap h; + \schemaVar \term Object o; + \schemaVar \term Field f; + \schemaVar \term Object EQ; + + \assumes(deltaObject::final(o, f) = EQ ==> EQ = null) + \find( ==> boolean::select(h, + EQ, + java.lang.Object::) = TRUE) + + \replacewith( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) + + \heuristics(concrete) + }; + // -------------------------------------------------------------------------- // some other lemmata // -------------------------------------------------------------------------- diff --git a/key.core/src/test/resources/de/uka/ilkd/key/proof/runallproofs/automaticJAVADL.properties b/key.core/src/test/resources/de/uka/ilkd/key/proof/runallproofs/automaticJAVADL.properties index cbd79edbfbb..1498bb10ff4 100644 --- a/key.core/src/test/resources/de/uka/ilkd/key/proof/runallproofs/automaticJAVADL.properties +++ b/key.core/src/test/resources/de/uka/ilkd/key/proof/runallproofs/automaticJAVADL.properties @@ -33,5 +33,5 @@ [SMTSettings]instantiateHierarchyAssumptions=true [SMTSettings]useUninterpretedMultiplication=true [SMTSettings]SelectedTaclets= -[Choice]DefaultChoices=assertions-assertions:on , intRules-intRules:arithmeticSemanticsIgnoringOF , initialisation-initialisation:disableStaticInitialisation , programRules-programRules:Java , runtimeExceptions-runtimeExceptions:ban , JavaCard-JavaCard:on , Strings-Strings:on , modelFields-modelFields:showSatisfiability , bigint-bigint:on , sequences-sequences:on , reach-reach:on , integerSimplificationRules-integerSimplificationRules:full , wdOperator-wdOperator:L , wdChecks-wdChecks:off , permissions-permissions:off , moreSeqRules-moreSeqRules:off , mergeGenerateIsWeakeningGoal-mergeGenerateIsWeakeningGoal:off , javaLoopTreatment-javaLoopTreatment:efficient +[Choice]DefaultChoices=assertions-assertions:on , intRules-intRules:arithmeticSemanticsIgnoringOF , initialisation-initialisation:disableStaticInitialisation , programRules-programRules:Java , runtimeExceptions-runtimeExceptions:ban , JavaCard-JavaCard:on , Strings-Strings:on , modelFields-modelFields:showSatisfiability , bigint-bigint:on , sequences-sequences:on , reach-reach:on , integerSimplificationRules-integerSimplificationRules:full , wdOperator-wdOperator:L , wdChecks-wdChecks:off , permissions-permissions:off , moreSeqRules-moreSeqRules:off , mergeGenerateIsWeakeningGoal-mergeGenerateIsWeakeningGoal:off , javaLoopTreatment-javaLoopTreatment:efficient , finalFields-finalFields:immutable [Strategy]ActiveStrategy=JavaCardDLStrategy \ No newline at end of file From d99efd2ca3914047338bad2ec42715c30888290a Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 20 Dec 2024 22:30:34 +0100 Subject: [PATCH 21/31] applying spotless --- .../declaration/VariableSpecification.java | 5 +- .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 2 +- .../proof/init/FinalFieldsPOExtension.java | 10 +-- .../de/uka/ilkd/key/pp/FinalPrinterTest.java | 70 ++++++++++--------- .../de/uka/ilkd/key/pp/PPRoundtripTest.java | 50 ++++++------- 5 files changed, 73 insertions(+), 64 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java index a139d9e8f1b..4cb630d5936 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java +++ b/key.core/src/main/java/de/uka/ilkd/key/java/declaration/VariableSpecification.java @@ -71,7 +71,7 @@ public VariableSpecification(IProgramVariable programVar, int dim, Expression in } public VariableSpecification(IProgramVariable programVar, int dim, Expression init, Type type, - PositionInfo pi) { + PositionInfo pi) { super(pi); this.programVar = programVar; this.initializer = init; @@ -87,7 +87,8 @@ public VariableSpecification(IProgramVariable programVar, int dim, Expression in * (as initializer of the variable) a Comment * @param dim the dimension of this type */ - public VariableSpecification(ExtList children, IProgramVariable programVar, int dim, Type type) { + public VariableSpecification(ExtList children, IProgramVariable programVar, int dim, + Type type) { super(children); this.programVar = programVar; initializer = children.get(Expression.class); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index 16b4d141830..c0a254338f1 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -172,7 +172,7 @@ protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { protected boolean isFinalFieldConstant(Term fieldTerm) { try { ProgramVariable pv = - getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); + getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); return pv.isFinal(); } catch (RuntimeException e) { return false; diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index f0cfef15386..827021d648f 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -8,7 +8,6 @@ import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.java.abstraction.ClassType; import de.uka.ilkd.key.java.abstraction.Type; -import de.uka.ilkd.key.java.abstraction.Variable; import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.ldt.JavaDLTheory; import de.uka.ilkd.key.logic.Choice; @@ -78,10 +77,13 @@ public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfi private List findFinalFields(IProgramMethod iconstructor, Services services) { Type type = iconstructor.getContainerType().getJavaType(); - assert type instanceof ClassType : "Class type was expected here, since a constructor is present"; + assert type instanceof ClassType + : "Class type was expected here, since a constructor is present"; ClassType classType = (ClassType) type; - return classType.getAllFields(services).filter(v -> v.isFinal() && !v.isModel()).map(f -> - services.getTypeConverter().getHeapLDT().getFieldSymbolForPV((LocationVariable)f.getProgramVariable(), services)).toList(); + return classType.getAllFields(services).filter(v -> v.isFinal() && !v.isModel()) + .map(f -> services.getTypeConverter().getHeapLDT() + .getFieldSymbolForPV((LocationVariable) f.getProgramVariable(), services)) + .toList(); } diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java index d5efb9b1082..f7473a48d12 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java @@ -1,22 +1,26 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.stream.Stream; + import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.logic.Choice; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.equality.RenamingTermProperty; import de.uka.ilkd.key.nparser.KeyIO; import de.uka.ilkd.key.util.HelperClassForTests; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.io.File; -import java.net.URL; -import java.util.List; -import java.util.stream.Stream; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -26,36 +30,36 @@ public class FinalPrinterTest { - public static final Choice WITHOUT_FINAL = new Choice("finalFields", "onHeap"); - private static KeyIO io; - private static Services services; + public static final Choice WITHOUT_FINAL = new Choice("finalFields", "onHeap"); + private static KeyIO io; + private static Services services; - @BeforeAll - public static void setup() { - services = getServices(); - io = new KeyIO(services, services.getNamespaces()); - } + @BeforeAll + public static void setup() { + services = getServices(); + io = new KeyIO(services, services.getNamespaces()); + } - @AfterAll - public static void tearDown() { - io = null; - } + @AfterAll + public static void tearDown() { + io = null; + } public static Stream casesWithFinal() { return Stream.of( - Arguments.of("int::select(heap, self, C::$f)", "self.f"), - Arguments.of("int::select(heap, self, C::$finf)", "int::select(heap, self, C::$finf)"), - Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), - Arguments.of("int::final(self, C::$finf)", "self.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)") - ); + Arguments.of("int::select(heap, self, C::$f)", "self.f"), + Arguments.of("int::select(heap, self, C::$finf)", "int::select(heap, self, C::$finf)"), + Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), + Arguments.of("int::final(self, C::$finf)", "self.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)")); } @ParameterizedTest(name = "{0} => {1}") @MethodSource("casesWithFinal") public void testPPWithFinal(String termString, String expected) throws Exception { - services.getProof().getSettings().getChoiceSettings().updateWith(List.of(PPRoundtripTest.WITH_FINAL)); + services.getProof().getSettings().getChoiceSettings() + .updateWith(List.of(PPRoundtripTest.WITH_FINAL)); Term term = io.parseExpression(termString); System.out.println("Original: " + term); LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); @@ -66,19 +70,19 @@ public void testPPWithFinal(String termString, String expected) throws Exception public static Stream casesWithoutFinal() { return Stream.of( - Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), - Arguments.of("int::final(self, C::$finf)", "self.finf"), - Arguments.of("int::select(heap, self, C::$f)", "self.f"), - Arguments.of("int::select(heap, self, C::$finf)", "self.finf") - ); + Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), + Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), + Arguments.of("int::final(self, C::$finf)", "self.finf"), + Arguments.of("int::select(heap, self, C::$f)", "self.f"), + Arguments.of("int::select(heap, self, C::$finf)", "self.finf")); } @ParameterizedTest(name = "{0} => {1}") @MethodSource("casesWithoutFinal") public void testPPWithoutFinal(String termString, String expected) throws Exception { - services.getProof().getSettings().getChoiceSettings().updateWith(List.of(PPRoundtripTest.WITHOUT_FINAL)); + services.getProof().getSettings().getChoiceSettings() + .updateWith(List.of(PPRoundtripTest.WITHOUT_FINAL)); Term term = io.parseExpression(termString); System.out.println("Original: " + term); LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); @@ -90,7 +94,7 @@ public void testPPWithoutFinal(String termString, String expected) throws Except private void assertEqualModAlpha(Term expected, Term actual) { var value = expected.equalsModProperty(actual, RenamingTermProperty.RENAMING_TERM_PROPERTY); - if(!value) { + if (!value) { System.err.println("Expected: " + expected); System.err.println("Actual : " + actual); } diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java index cc9ed091de6..13e0447b81c 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java @@ -1,23 +1,25 @@ +/* This file is part of KeY - https://key-project.org + * KeY is licensed under the GNU General Public License Version 2 + * SPDX-License-Identifier: GPL-2.0-only */ package de.uka.ilkd.key.pp; +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.stream.Stream; + import de.uka.ilkd.key.java.Services; -import de.uka.ilkd.key.ldt.FinalHeapResolution; import de.uka.ilkd.key.logic.Choice; import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.equality.RenamingTermProperty; import de.uka.ilkd.key.nparser.KeyIO; import de.uka.ilkd.key.util.HelperClassForTests; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; - -import java.io.File; -import java.net.URL; -import java.util.List; -import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.*; @@ -30,7 +32,7 @@ */ public class PPRoundtripTest { - public static final Choice WITH_FINAL = new Choice("immutable", "finalFields" ); + public static final Choice WITH_FINAL = new Choice("immutable", "finalFields"); public static final Choice WITHOUT_FINAL = new Choice("onHeap", "finalFields"); private static KeyIO io; private static Services services; @@ -47,25 +49,25 @@ public static void tearDown() { } private static final String[] CASES = { - "1+1", - "-1", - "1.1d+0d", - "-1d", - // "-1r", - "-1f", - "1.1f+0f", + "1+1", + "-1", + "1.1d+0d", + "-1d", + // "-1r", + "-1f", + "1.1f+0f", // "union(empty, empty)", }; private static final String[] HEAP_CASES = { - "self.f", - "sub.f", - "int::select(heap, sub, C::$f)", - "int::final(self, C::$f)", - "\\forall Field f; int::select(heap, self, C::$f) = 0", - "\\forall Field fvar; self.fvar = 0", - "\\forall Field fvar; any::final(self, fvar) = 0", - "self.finf" + "self.f", + "sub.f", + "int::select(heap, sub, C::$f)", + "int::final(self, C::$f)", + "\\forall Field f; int::select(heap, self, C::$f) = 0", + "\\forall Field fvar; self.fvar = 0", + "\\forall Field fvar; any::final(self, fvar) = 0", + "self.finf" }; public static Stream getCases() { @@ -108,7 +110,7 @@ void roundtripWithoutFinal(String termString) throws Exception { private void assertEqualModAlpha(Term expected, Term actual) { var value = expected.equalsModProperty(actual, RenamingTermProperty.RENAMING_TERM_PROPERTY); - if(!value) { + if (!value) { System.err.println("Expected: " + expected); System.err.println("Actual : " + actual); } From da84fda9bf3430ac9f414d98cece1292d1e669fe Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 21 Dec 2024 01:24:52 +0100 Subject: [PATCH 22/31] making non-final fields in interfaces possible --- .../de/uka/ilkd/key/java/recoderext/JMLTransformer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/key.core/src/main/java/de/uka/ilkd/key/java/recoderext/JMLTransformer.java b/key.core/src/main/java/de/uka/ilkd/key/java/recoderext/JMLTransformer.java index ca003b25b19..a2e486c6cf8 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/java/recoderext/JMLTransformer.java +++ b/key.core/src/main/java/de/uka/ilkd/key/java/recoderext/JMLTransformer.java @@ -295,6 +295,12 @@ private void transformFieldDecl(TextualJMLFieldDecl decl, Comment[] originalComm public boolean isStatic() { return false; } + + @Override + public boolean isFinal() { + return ((FieldDeclaration) old).getModifiers() + .contains(JMLModifier.FINAL); + } }; fieldDecl.setStartPosition(old.getStartPosition()); fieldDecl.setEndPosition(old.getEndPosition()); From 3e8fbbd55879de5d258edd5e999dbc3fec8cdb6e Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Mon, 20 Jan 2025 19:37:42 +0100 Subject: [PATCH 23/31] changing one rule for final fields it was not wrong before but not confluent. Failed the case vstte10_05_Queue/AmortizedQueue_AmortizedQueue.key --- .../main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key index 10a0838873b..c856eee3079 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key @@ -1355,7 +1355,7 @@ EQ, java.lang.Object::) = TRUE) - \replacewith( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) + \add( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) \heuristics(concrete) }; From 27f1584264aa2a0fb51558ab77c61eabdc5ce061 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Tue, 21 Jan 2025 00:16:25 +0100 Subject: [PATCH 24/31] enabling static final fields --- .../de/uka/ilkd/key/logic/TermBuilder.java | 18 +- .../translation/SLAttributeResolver.java | 11 +- ...normal_behavior operation contract.0.proof | 7502 ++++------------- 3 files changed, 1483 insertions(+), 6048 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java index b35e9bc8599..1319d279b7b 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/logic/TermBuilder.java @@ -1658,7 +1658,7 @@ public Term staticDot(Sort asSort, JFunction f) { } /** - * Get a term for a accessing a final field. + * Get a term for accessing a final field. * This can be used for ordinary fields and model fields. * The results are quite different! * @@ -1675,6 +1675,22 @@ public Term finalDot(Sort sort, Term o, JFunction f) { : func(f, getBaseHeap(), o); } + /** + * Get a term for accessing a static final field. + * This can be used for ordinary fields. + * + * @param sort the sort of the result. + * @param f the field to access + * @return the term representing the static access "C.f" + * @see #finalDot(Sort, Term, Term) for accessing final Java or ghost fields + * @see #dot(Sort, Term, JFunction) for accessing final model fields + */ + public Term staticFinalDot(Sort sort, JFunction f) { + final Sort fieldSort = services.getTypeConverter().getHeapLDT().getFieldSort(); + return f.sort() == fieldSort ? finalDot(sort, NULL(), func(f)) + : func(f, getBaseHeap(), NULL()); + } + /** * Final fields can be treated differently outside the heap. * This methods creates a heap-independent read access to final field. diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java index f0596c50c77..f445b2911e7 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/translation/SLAttributeResolver.java @@ -134,8 +134,15 @@ protected SLExpression doResolving(SLExpression receiver, String name, SLParamet heapLDT.getFieldSymbolForPV((LocationVariable) attribute, services); Term attributeTerm; if (attribute.isStatic()) { - attributeTerm = - services.getTermBuilder().staticDot(attribute.sort(), fieldSymbol); + if (attribute.isFinal() && + FinalHeapResolution.recallIsFinalEnabled()) { + attributeTerm = + services.getTermBuilder().staticFinalDot(attribute.sort(), + fieldSymbol); + } else { + attributeTerm = + services.getTermBuilder().staticDot(attribute.sort(), fieldSymbol); + } } else if (attribute.isFinal() && FinalHeapResolution.recallIsFinalEnabled()) { attributeTerm = services.getTermBuilder().finalDot(attribute.sort(), diff --git a/key.ui/examples/heap/BoyerMoore/BM(BM__bm((I)).JML normal_behavior operation contract.0.proof b/key.ui/examples/heap/BoyerMoore/BM(BM__bm((I)).JML normal_behavior operation contract.0.proof index bbe096cf120..6c6b444ae69 100644 --- a/key.ui/examples/heap/BoyerMoore/BM(BM__bm((I)).JML normal_behavior operation contract.0.proof +++ b/key.ui/examples/heap/BoyerMoore/BM(BM__bm((I)).JML normal_behavior operation contract.0.proof @@ -7,6 +7,7 @@ "Strings" : "Strings:on", "assertions" : "assertions:on", "bigint" : "bigint:on", + "finalFields" : "finalFields:immutable", "floatRules" : "floatRules:strictfpOnly", "initialisation" : "initialisation:disableStaticInitialisation", "intRules" : "intRules:arithmeticSemanticsIgnoringOF", @@ -21,6 +22,7 @@ "reach" : "reach:on", "runtimeExceptions" : "runtimeExceptions:ban", "sequences" : "sequences:on", + "soundDefaultContracts" : "soundDefaultContracts:on", "wdChecks" : "wdChecks:off", "wdOperator" : "wdOperator:L" }, @@ -76,17 +78,18 @@ \javaSource "src"; -\proofObligation "#Proof Obligation Settings -#Fri Apr 12 16:53:51 CEST 2024 -contract=BoyerMoore[BoyerMoore\\:\\:bm([I)].JML normal_behavior operation contract.0 -name=BoyerMoore[BoyerMoore\\:\\:bm([I)].JML normal_behavior operation contract.0 -class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO -"; +\proofObligation +// Proof-Obligation settings +{ + "class" : "de.uka.ilkd.key.proof.init.FunctionalOperationContractPO", + "contract" : "BoyerMoore[BoyerMoore::bm([I)].JML normal_behavior operation contract.0", + "name" : "BoyerMoore[BoyerMoore::bm([I)].JML normal_behavior operation contract.0" + } \proof { -(keyLog "0" (keyUser "mattias" ) (keyVersion "9cc569ccced37e242b3a85779f2afdc42b0031ca")) +(keyLog "0" (keyUser "ulbrich" ) (keyVersion "da84fda9bf3430ac9f414d98cece1292d1e669fe")) -(autoModeTime "2904") +(autoModeTime "2359") (branch "dummy ID" (builtin "One Step Simplification" (formula "1") (newnames "heapAtPre,o,f")) @@ -130,7 +133,34 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "andRight" (formula "10")) (branch "Case 1" - (opengoal " wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<> ==> (self<> = null)<>, (a = null)<>, {(heapAtPre:=heap || _a:=a || exc:=null || mc:=Z(0(#)) || mx:=Z(0(#)) || k:=Z(0(#))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>)< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>} (( (leq(Z(0(#)), k) & leq(k, length(_a)))<> & geq(mc, Z(0(#)))<>)<>)") + (rule "andRight" (formula "10")) + (branch "Case 1" + (rule "andRight" (formula "10")) + (branch "Case 1" + (builtin "One Step Simplification" (formula "10")) + (rule "leq_literals" (formula "10")) + (rule "closeTrue" (formula "10")) + ) + (branch "Case 2" + (builtin "One Step Simplification" (formula "10")) + (rule "inEqSimp_leqRight" (formula "10")) + (rule "add_zero_right" (formula "1") (term "0")) + (rule "polySimp_mulComm0" (formula "1") (term "1,0")) + (rule "inEqSimp_sepNegMonomial1" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "0")) + (rule "polySimp_elimOne" (formula "1") (term "0")) + (rule "arrayLengthNotNegative" (formula "1") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "1") (ifseqformula "2")) + (rule "qeq_literals" (formula "1") (term "0")) + (builtin "One Step Simplification" (formula "1")) + (rule "closeFalse" (formula "1")) + ) + ) + (branch "Case 2" + (builtin "One Step Simplification" (formula "10")) + (rule "qeq_literals" (formula "10")) + (rule "closeTrue" (formula "10")) + ) ) (branch "Case 2" (builtin "One Step Simplification" (formula "10")) @@ -155,25 +185,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0")) (rule "leq_literals" (formula "1") (term "0")) (builtin "One Step Simplification" (formula "1")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "7")) - (rule "andLeft" (formula "7")) - (rule "notLeft" (formula "7")) - (rule "notLeft" (formula "7")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "7") (ifseqformula "4")) - (rule "true_left" (formula "7")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (inst "l=l")) - (rule "bsum_lower_equals_upper" (formula "1") (term "1,0,1")) - (rule "leq_literals" (formula "1") (term "0,0,0,0,0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "11")) (ifInst "" (formula "3")) (ifInst "" (formula "4")) (ifInst "" (formula "10"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,1") (ifseqformula "2")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "1") (term "0,0,0,1")) - (rule "leq_literals" (formula "1") (term "0,0,1")) - (builtin "One Step Simplification" (formula "1")) - (rule "notLeft" (formula "1")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (ifseqformula "4")) (builtin "One Step Simplification" (formula "1")) (rule "castDel" (formula "1") (term "0")) @@ -186,7 +197,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "sub_literals" (formula "10") (term "1,1,0")) (rule "allRight" (formula "10") (inst "sk=x_0")) (rule "impRight" (formula "10")) - (rule "notLeft" (formula "1")) (rule "polySimp_mulComm0" (formula "11") (term "0")) (rule "inEqSimp_leqRight" (formula "11")) (rule "mul_literals" (formula "1") (term "1,0,0")) @@ -207,26 +217,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0")) (rule "leq_literals" (formula "1") (term "0")) (builtin "One Step Simplification" (formula "1")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "7")) - (rule "andLeft" (formula "7")) - (rule "notLeft" (formula "7")) - (rule "notLeft" (formula "7")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "7") (ifseqformula "4")) - (rule "true_left" (formula "7")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (inst "l=l")) - (rule "bsum_lower_equals_upper" (formula "1") (term "1,0,1")) - (rule "leq_literals" (formula "1") (term "0,0,0,0,0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "12")) (ifInst "" (formula "3")) (ifInst "" (formula "4")) (ifInst "" (formula "11"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,1") (ifseqformula "2")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "1") (term "0,0,0,1")) - (rule "leq_literals" (formula "1") (term "0,0,1")) - (builtin "One Step Simplification" (formula "1")) - (rule "notLeft" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (ifseqformula "4")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (ifseqformula "5")) (builtin "One Step Simplification" (formula "1")) (rule "castDel" (formula "1") (term "0")) (rule "qeq_literals" (formula "1")) @@ -234,7 +225,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "Case 2" - (opengoal " wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<> ==> (self<> = null)<>, (a = null)<>, {(heapAtPre:=heap || _a:=a || exc:=null || mc:=Z(0(#)) || mx:=Z(0(#)) || k:=Z(0(#))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>)< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>} wellFormed(heap)") + (builtin "One Step Simplification" (formula "10") (ifInst "" (formula "1"))) + (rule "closeTrue" (formula "10")) ) ) (branch "Body Preserves Invariant" @@ -247,8 +239,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "andLeft" (formula "10")) (rule "eqSymm" (formula "17") (term "0,0,1,0,1,1,0,1")) (rule "polySimp_elimSub" (formula "14") (term "1,1,0")) - (rule "polySimp_elimSub" (formula "17") (term "0,1,1,1,0")) (rule "polySimp_elimSub" (formula "17") (term "1,1,0,1,0,0,1,1,0,1")) + (rule "polySimp_elimSub" (formula "17") (term "0,1,1,1,0")) (rule "polySimp_elimSub" (formula "17") (term "0,1,1,1,0,1")) (rule "polySimp_mulComm0" (formula "14") (term "0,1,0")) (rule "polySimp_mulComm0" (formula "17") (term "0,1,0,0,0,1,1,0,1")) @@ -256,8 +248,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_mulComm0" (formula "13") (term "0")) (rule "polySimp_addComm0" (formula "17") (term "0,1,1,1,0")) (rule "polySimp_addComm0" (formula "17") (term "0,1,1,1,0,1")) - (rule "inEqSimp_commuteLeq" (formula "17") (term "1,0,0,0,0,0,1,1,0,1")) (rule "inEqSimp_commuteLeq" (formula "17") (term "0,0,0,0,0,0,1,1,0,1")) + (rule "inEqSimp_commuteLeq" (formula "17") (term "1,0,0,0,0,0,1,1,0,1")) (rule "inEqSimp_commuteLeq" (formula "10")) (rule "inEqSimp_commuteLeq" (formula "11")) (rule "variableDeclarationAssign" (formula "1") (term "1")) @@ -319,24 +311,24 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "arrayLengthNotNegative" (formula "11") (term "0")) (rule "ifElseSplit" (formula "19")) (branch "if mc == 0 true" - (builtin "One Step Simplification" (formula "1")) (builtin "One Step Simplification" (formula "20")) + (builtin "One Step Simplification" (formula "1")) (rule "assignment" (formula "20") (term "1")) (builtin "One Step Simplification" (formula "20")) (rule "assignment_array2" (formula "20")) (branch "Normal Execution (mc == 0 != null)" (builtin "One Step Simplification" (formula "20")) (rule "blockEmpty" (formula "20") (term "1")) - (rule "applyEq" (formula "16") (term "1,1") (ifseqformula "1")) + (rule "applyEqRigid" (formula "16") (term "1,1") (ifseqformula "1")) (rule "add_zero_right" (formula "16") (term "1")) - (rule "applyEqRigid" (formula "17") (term "0,1,1,1,0") (ifseqformula "1")) - (rule "times_zero_2" (formula "17") (term "1,1,1,0")) - (rule "add_zero_right" (formula "17") (term "1,1,0")) (rule "applyEq" (formula "14") (term "0") (ifseqformula "1")) (rule "qeq_literals" (formula "14")) (rule "true_left" (formula "14")) + (rule "applyEq" (formula "16") (term "0,1,1,1,0") (ifseqformula "1")) + (rule "times_zero_2" (formula "16") (term "1,1,1,0")) + (rule "add_zero_right" (formula "16") (term "1,1,0")) (rule "postincrement" (formula "19") (term "1")) - (rule "compound_int_cast_expression" (formula "19") (term "1") (inst "#v=i_4")) + (rule "compound_reference_cast_expression_primitive" (formula "19") (term "1") (inst "#v=i_4")) (rule "variableDeclarationAssign" (formula "19") (term "1")) (rule "variableDeclaration" (formula "19") (term "1") (newnames "i_4")) (rule "remove_parentheses_right" (formula "19") (term "1")) @@ -357,7 +349,53 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "andRight" (formula "19")) (branch "Case 1" - (opengoal " (mc_0 = Z(0(#)))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit), decreases @ file BoyerMoore.java @ line 50, loop_invariant @ file BoyerMoore.java @ line 45, loop_invariant @ file BoyerMoore.java @ line 46, loop_invariant @ file BoyerMoore.java @ line 47, loop_invariant @ file BoyerMoore.java @ line 48]\")>>, lt(k_0, length(a<>))<>, wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<>, wellFormed(anon_heap_LOOP<>), geq(k_0, Z(0(#)))<>, geq(length(a), Z(0(#))), geq(length(a), k_0)<>, BoyerMoore::count$lmtd(heap, self, a, k_0, mx_0) = BoyerMoore::count(heap, self, a, k_0, mx_0), leq(mul(BoyerMoore::count(heap, self, a, k_0, mx_0), Z(2(#))), k_0)<>, (\\forall int x; ( !x = mx_0 -> leq(mul(BoyerMoore::count(heap, self, a, k_0, x), Z(2(#))), k_0)))<> ==> (self<> = null)<>, (a = null)<>, ( (geq(add(Z(1(#)), k_0), Z(0(#))) & geq(length(a), add(Z(1(#)), k_0)))<> & geq(Z(1(#)), Z(0(#)))<>)< (implicit)\",\"[loop_invariant @ file BoyerMoore.java @ line 45, loop_invariant @ file BoyerMoore.java @ line 46]\")>>") + (rule "andRight" (formula "19")) + (branch "Case 1" + (rule "andRight" (formula "19")) + (branch "Case 1" + (rule "inEqSimp_geqRight" (formula "19")) + (rule "times_zero_1" (formula "1") (term "1,0,0")) + (rule "add_zero_right" (formula "1") (term "0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0")) + (rule "add_literals" (formula "1") (term "0,0")) + (rule "inEqSimp_sepPosMonomial0" (formula "1")) + (rule "mul_literals" (formula "1") (term "1")) + (rule "inEqSimp_contradInEq0" (formula "12") (ifseqformula "1")) + (rule "qeq_literals" (formula "12") (term "0")) + (builtin "One Step Simplification" (formula "12")) + (rule "closeFalse" (formula "12")) + ) + (branch "Case 2" + (rule "inEqSimp_geqRight" (formula "19")) + (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) + (rule "mul_literals" (formula "1") (term "0,1,0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0,0")) + (rule "add_literals" (formula "1") (term "0,0,0")) + (rule "add_zero_left" (formula "1") (term "0,0")) + (rule "inEqSimp_ltToLeq" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "3") (term "0")) + (rule "inEqSimp_sepPosMonomial0" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "1")) + (rule "polySimp_elimOne" (formula "1") (term "1")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "polySimp_elimOne" (formula "3") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) + (rule "andLeft" (formula "3")) + (rule "inEqSimp_homoInEq1" (formula "3")) + (rule "polySimp_pullOutFactor1b" (formula "3") (term "0")) + (rule "add_literals" (formula "3") (term "1,1,0")) + (rule "times_zero_1" (formula "3") (term "1,0")) + (rule "add_zero_right" (formula "3") (term "0")) + (rule "leq_literals" (formula "3")) + (rule "closeFalse" (formula "3")) + ) + ) + (branch "Case 2" + (rule "qeq_literals" (formula "19")) + (rule "closeTrue" (formula "19")) + ) ) (branch "Case 2" (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "19") (term "0,0") (ifseqformula "5")) @@ -373,12 +411,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "mul_literals" (formula "1") (term "0,1,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) (rule "polySimp_sepPosMonomial" (formula "2")) (rule "mul_literals" (formula "2") (term "1")) - (rule "applyEq" (formula "17") (term "1") (ifseqformula "2")) (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "2")) (rule "mul_literals" (formula "1") (term "1,0")) (rule "add_literals" (formula "1") (term "0")) @@ -392,25 +426,18 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "unlimit_BoyerMoore_count[I\bigint\bigint" (formula "21") (term "1,0,0")) (rule "polySimp_elimSub" (formula "21") (term "3,1,0,0")) (rule "mul_literals" (formula "21") (term "1,3,1,0,0")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0")) (rule "polySimp_mulComm0" (formula "21") (term "0")) (rule "polySimp_addComm1" (formula "21") (term "1")) (rule "add_literals" (formula "21") (term "0,1")) - (rule "polySimp_addComm1" (formula "1") (term "0,2,0")) - (rule "add_literals" (formula "1") (term "0,0,2,0")) - (rule "add_zero_left" (formula "1") (term "0,2,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "polySimp_addComm1" (formula "20") (term "3,1,1,0")) - (rule "add_literals" (formula "20") (term "0,3,1,1,0")) - (rule "add_zero_left" (formula "20") (term "3,1,1,0")) - (rule "polySimp_rightDist" (formula "20") (term "0")) - (rule "mul_literals" (formula "20") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "inEqSimp_leqRight" (formula "20")) + (rule "polySimp_addComm1" (formula "21") (term "3,1,1,0")) + (rule "add_literals" (formula "21") (term "0,3,1,1,0")) + (rule "add_zero_left" (formula "21") (term "3,1,1,0")) + (rule "polySimp_rightDist" (formula "21") (term "0")) + (rule "mul_literals" (formula "21") (term "0,0")) + (rule "inEqSimp_ltToLeq" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "3") (term "0")) + (rule "inEqSimp_leqRight" (formula "21")) (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) (rule "mul_literals" (formula "1") (term "0,1,0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0,0")) @@ -418,72 +445,28 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "polySimp_addComm1" (formula "1") (term "0,0")) (rule "add_literals" (formula "1") (term "0,0,0")) - (rule "polySimp_sepPosMonomial" (formula "20")) - (rule "mul_literals" (formula "20") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) + (rule "inEqSimp_sepNegMonomial0" (formula "4")) + (rule "polySimp_mulLiterals" (formula "4") (term "0")) + (rule "polySimp_elimOne" (formula "4") (term "0")) (rule "inEqSimp_sepPosMonomial1" (formula "1")) (rule "polySimp_mulComm0" (formula "1") (term "1")) (rule "polySimp_rightDist" (formula "1") (term "1")) (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) (rule "mul_literals" (formula "1") (term "0,1")) (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "inEqSimp_contradEq7" (formula "20") (ifseqformula "12")) - (rule "add_zero_left" (formula "20") (term "0,0")) - (rule "mul_literals" (formula "20") (term "0,0")) - (rule "leq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "false_right" (formula "20")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "nnf_imp2or" (formula "16") (term "0")) - (builtin "One Step Simplification" (formula "16")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "15") (term "0,1")) - (rule "replace_known_left" (formula "15") (term "1,0,0,0,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "15") (ifInst "" (formula "10")) (ifInst "" (formula "19")) (ifInst "" (formula "5")) (ifInst "" (formula "18")) (ifInst "" (formula "10"))) - (rule "measuredByCheckEmpty" (formula "15") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "0,0")) - (rule "replace_known_left" (formula "15") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "0")) - (rule "inEqSimp_subsumption1" (formula "15") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "15") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "15") (term "0,0,0")) - (rule "add_literals" (formula "15") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "15") (term "1,0,0,0")) - (rule "add_zero_right" (formula "15") (term "0,0,0")) - (rule "qeq_literals" (formula "15") (term "0,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "9")) - (rule "andLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "1,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "9")) (ifInst "" (formula "21")) (ifInst "" (formula "4")) (ifInst "" (formula "20")) (ifInst "" (formula "15")) (ifInst "" (formula "9"))) - (rule "true_left" (formula "13")) + (rule "nnf_imp2or" (formula "18") (term "0")) + (builtin "One Step Simplification" (formula "18")) (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "21")) (ifInst "" (formula "5")) (ifInst "" (formula "6")) (ifInst "" (formula "20")) (ifInst "" (formula "10"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) + (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "12")) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "21")) (ifInst "" (formula "6")) (ifInst "" (formula "7")) (ifInst "" (formula "20")) (ifInst "" (formula "12"))) + (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "12")) + (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "14")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "4")) + (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "5")) (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0")) (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0")) (rule "add_literals" (formula "1") (term "1,1,0,0,0")) @@ -491,48 +474,27 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0,0")) (rule "qeq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "10") (ifseqformula "7")) - (rule "true_left" (formula "10")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "13") (term "1")) - (rule "eqSymm" (formula "13")) - (rule "polySimp_elimSub" (formula "13") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "13") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "13") (term "3,1,2,0")) - (rule "mul_literals" (formula "13") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "13") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "13") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "13") (term "2,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (ifseqformula "7")) - (rule "castDel" (formula "15") (term "0,0")) - (rule "polySimp_elimSub" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_elimSub" (formula "15") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "2,0,0")) - (rule "applyEq" (formula "15") (term "0,0") (ifseqformula "13")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "21")) (ifInst "" (formula "5")) (ifInst "" (formula "20")) (ifInst "" (formula "15"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0,0")) - (rule "replace_known_left" (formula "14") (term "0,0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "14") (term "0,0") (ifseqformula "4")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0,0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0,0")) - (rule "qeq_literals" (formula "14") (term "0,0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,0") (ifseqformula "7")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "17") (term "1") (ifseqformula "8")) + (rule "castDel" (formula "17") (term "1")) + (rule "eqSymm" (formula "17")) + (rule "polySimp_elimSub" (formula "17") (term "0,2,0,0,0,2,0")) + (rule "mul_literals" (formula "17") (term "1,0,2,0,0,0,2,0")) + (rule "polySimp_elimSub" (formula "17") (term "3,1,2,0")) + (rule "mul_literals" (formula "17") (term "1,3,1,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "0,2,0,0,0,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "3,1,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "2,0")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "18") (term "0,0") (ifseqformula "8")) + (rule "castDel" (formula "18") (term "0,0")) + (rule "polySimp_elimSub" (formula "18") (term "0,2,0,0,0,2,0,0")) + (rule "mul_literals" (formula "18") (term "1,0,2,0,0,0,2,0,0")) + (rule "polySimp_elimSub" (formula "18") (term "3,1,2,0,0")) + (rule "mul_literals" (formula "18") (term "1,3,1,2,0,0")) + (rule "polySimp_addComm0" (formula "18") (term "0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm0" (formula "18") (term "3,1,2,0,0")) + (rule "polySimp_addComm0" (formula "18") (term "2,0,0")) + (rule "applyEq" (formula "18") (term "0,0") (ifseqformula "17")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,0") (ifseqformula "8")) (rule "castDel" (formula "2") (term "0,0")) (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0,0")) (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0,0")) @@ -541,46 +503,17 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "2,0,0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "21")) (ifInst "" (formula "7")) (ifInst "" (formula "20")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0,1,0") (ifseqformula "7")) - (rule "castDel" (formula "16") (term "0,0,1,0")) - (rule "eqSymm" (formula "16") (term "0,0,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,3,1,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "2,0,0,1,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "14") (term "1")) - (rule "polySimp_elimSub" (formula "14") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "14") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "14") (term "3,1,2,1")) - (rule "mul_literals" (formula "14") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "2,1")) - (rule "applyEq" (formula "14") (term "1") (ifseqformula "13")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "7")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "19") (term "0,0,1,0") (ifseqformula "8")) + (rule "castDel" (formula "19") (term "0,0,1,0")) + (rule "eqSymm" (formula "19") (term "0,0,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "19") (term "3,1,2,0,0,1,0")) + (rule "mul_literals" (formula "19") (term "1,3,1,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "19") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "mul_literals" (formula "19") (term "1,0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "3,1,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "2,0,0,1,0")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "8")) (rule "castDel" (formula "1") (term "1")) (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,1")) (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,1")) @@ -589,61 +522,45 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,1")) (rule "polySimp_addComm0" (formula "1") (term "3,1,2,1")) (rule "polySimp_addComm0" (formula "1") (term "2,1")) - (rule "ifthenelse_split" (formula "13") (term "0")) + (rule "ifthenelse_split" (formula "17") (term "0")) (branch "k_0 = 0 TRUE" - (rule "eqSymm" (formula "14")) - (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "13")) + (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "17")) (builtin "One Step Simplification" (formula "2")) (rule "mul_literals" (formula "2") (term "0")) - (rule "replace_known_left" (formula "17") (term "0,0,0,1,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "17")) - (rule "times_zero_2" (formula "17") (term "0,1,0")) - (rule "replace_known_left" (formula "1") (term "0,1") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "17") (term "1,0")) - (rule "replace_known_left" (formula "17") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "17")) - (rule "true_left" (formula "17")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "times_zero_2" (formula "2") (term "1,0")) (rule "add_zero_right" (formula "2") (term "0")) - (rule "applyEqRigid" (formula "1") (term "1,0") (ifseqformula "13")) - (rule "bsum_lower_equals_upper" (formula "1") (term "0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEqRigid" (formula "15") (term "1") (ifseqformula "12")) - (rule "applyEq" (formula "15") (term "3,0,0") (ifseqformula "12")) - (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "12")) - (rule "add_zero_right" (formula "1") (term "0")) - (rule "leq_literals" (formula "1")) - (rule "closeFalse" (formula "1")) + (rule "applyEq" (formula "2") (term "1,0") (ifseqformula "17")) + (rule "add_zero_right" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) (branch "k_0 = 0 FALSE" - (rule "replace_known_right" (formula "16") (term "0,0,0,1,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "16")) - (rule "replace_known_right" (formula "1") (term "0,1") (ifseqformula "17")) + (rule "replace_known_right" (formula "19") (term "0,0,0,1,0") (ifseqformula "20")) + (builtin "One Step Simplification" (formula "19")) + (rule "replace_known_right" (formula "1") (term "0,1") (ifseqformula "20")) (builtin "One Step Simplification" (formula "1")) - (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "17")) + (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "20")) (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "13")) - (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) + (rule "polySimp_homoEq" (formula "17")) + (rule "polySimp_mulComm0" (formula "19") (term "0,1,0")) (rule "polySimp_mulComm0" (formula "2") (term "0")) - (rule "polySimp_mulComm0" (formula "13") (term "1,0")) - (rule "polySimp_rightDist" (formula "16") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0")) + (rule "polySimp_mulComm0" (formula "17") (term "1,0")) + (rule "polySimp_rightDist" (formula "19") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "19") (term "0,0,1,0")) (rule "polySimp_rightDist" (formula "2") (term "0")) (rule "polySimp_mulComm0" (formula "2") (term "0,0")) - (rule "polySimp_rightDist" (formula "13") (term "1,0")) - (rule "polySimp_mulComm0" (formula "13") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "13") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "1,0,1,0")) - (rule "polySimp_rightDist" (formula "16") (term "1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "1,1,0,1,0")) - (rule "polySimp_mulAssoc" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_addAssoc" (formula "16") (term "0,1,0")) + (rule "polySimp_rightDist" (formula "17") (term "1,0")) + (rule "polySimp_mulComm0" (formula "17") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "17") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "19") (term "1,0")) + (rule "polySimp_mulComm0" (formula "19") (term "1,0,1,0")) + (rule "polySimp_rightDist" (formula "19") (term "1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0,1,0")) + (rule "polySimp_mulAssoc" (formula "19") (term "0,1,0,1,0")) + (rule "polySimp_mulComm0" (formula "19") (term "0,0,1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "19") (term "0,1,0,1,0")) + (rule "polySimp_addAssoc" (formula "19") (term "0,1,0")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "polySimp_mulComm0" (formula "2") (term "1,0")) (rule "polySimp_rightDist" (formula "2") (term "1,0")) @@ -652,54 +569,38 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_mulComm0" (formula "2") (term "0,0,1,0")) (rule "polySimp_mulLiterals" (formula "2") (term "0,1,0")) (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "13")) - (rule "polySimp_mulLiterals" (formula "13") (term "0")) - (rule "polySimp_elimOne" (formula "13") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "16") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0")) + (rule "polySimp_sepNegMonomial" (formula "17")) + (rule "polySimp_mulLiterals" (formula "17") (term "0")) + (rule "polySimp_elimOne" (formula "17") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "19") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "19") (term "0,1,0")) (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "11") (ifseqformula "17")) - (rule "add_zero_right" (formula "11") (term "1")) - (rule "inEqSimp_contradEq7" (formula "17") (ifseqformula "11")) - (rule "times_zero_1" (formula "17") (term "1,0,0")) - (rule "add_zero_right" (formula "17") (term "0,0")) - (rule "leq_literals" (formula "17") (term "0")) - (builtin "One Step Simplification" (formula "17")) - (rule "false_right" (formula "17")) (rule "ifthenelse_split" (formula "1") (term "1,1")) (branch "a[-1 + k_0] = a[k_0] TRUE" (rule "replace_known_left" (formula "3") (term "0,0,0") (ifseqformula "1")) (builtin "One Step Simplification" (formula "3")) (rule "mul_literals" (formula "3") (term "0")) - (rule "polySimp_addComm0" (formula "2") (term "1")) (rule "inEqSimp_homoInEq1" (formula "3")) (rule "mul_literals" (formula "3") (term "1,0")) (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "polySimp_addComm1" (formula "3") (term "0,0")) (rule "add_literals" (formula "3") (term "0,0,0")) - (rule "applyEq" (formula "14") (term "0,0,0") (ifseqformula "1")) - (rule "applyEq" (formula "17") (term "1,0,0,0,1,0") (ifseqformula "1")) + (rule "applyEq" (formula "18") (term "0,0,0") (ifseqformula "1")) + (rule "applyEq" (formula "20") (term "1,0,0,0,1,0") (ifseqformula "1")) (rule "inEqSimp_sepNegMonomial0" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "ifthenelse_split" (formula "14") (term "0")) + (rule "ifthenelse_split" (formula "18") (term "0")) (branch "a[k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "15")) - (rule "mul_literals" (formula "15") (term "1,0")) - (rule "polySimp_addComm1" (formula "15") (term "0")) - (rule "polySimp_addComm0" (formula "15") (term "0,0")) - (rule "applyEq" (formula "3") (term "4,0,0") (ifseqformula "14")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "14")) - (rule "applyEq" (formula "18") (term "1,0,0,0,1,0") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "4,1,1") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "1,0,2,0") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "16")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "15")) - (rule "polySimp_mulLiterals" (formula "15") (term "0")) - (rule "polySimp_elimOne" (formula "15") (term "0")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "15")) + (rule "polySimp_homoEq" (formula "19")) + (rule "mul_literals" (formula "19") (term "1,0")) + (rule "polySimp_addComm1" (formula "19") (term "0")) + (rule "polySimp_addComm0" (formula "19") (term "0,0")) + (rule "applyEq" (formula "3") (term "4,0,0") (ifseqformula "18")) + (rule "polySimp_sepNegMonomial" (formula "19")) + (rule "polySimp_mulLiterals" (formula "19") (term "0")) + (rule "polySimp_elimOne" (formula "19") (term "0")) + (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "19")) (rule "polySimp_mulComm0" (formula "3") (term "0")) (rule "polySimp_rightDist" (formula "3") (term "0")) (rule "mul_literals" (formula "3") (term "0,0")) @@ -711,53 +612,37 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "3") (term "0")) (rule "polySimp_addComm1" (formula "3") (term "0,0")) (rule "add_literals" (formula "3") (term "0,0,0")) - (rule "applyEq" (formula "2") (term "1,0") (ifseqformula "15")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_addComm1" (formula "2") (term "0,0")) - (rule "add_literals" (formula "2") (term "0,0,0")) - (rule "add_zero_left" (formula "2") (term "0,0")) - (rule "polySimp_pullOutFactor2" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "inEqSimp_contradInEq4" (formula "16") (ifseqformula "2")) - (rule "greater_literals" (formula "16") (term "0,0")) - (builtin "One Step Simplification" (formula "16")) - (rule "greater_literals" (formula "16") (term "0,0")) - (builtin "One Step Simplification" (formula "16")) - (rule "andLeft" (formula "16")) - (rule "polySimp_mulComm0" (formula "16") (term "0")) - (rule "polySimp_rightDist" (formula "16") (term "1")) - (rule "mul_literals" (formula "16") (term "0,1")) - (rule "inEqSimp_homoInEq1" (formula "16")) - (rule "polySimp_mulLiterals" (formula "16") (term "1,0")) - (rule "polySimp_pullOutFactor0b" (formula "16") (term "0")) - (rule "add_literals" (formula "16") (term "1,1,0")) - (rule "times_zero_1" (formula "16") (term "1,0")) - (rule "add_zero_right" (formula "16") (term "0")) - (rule "leq_literals" (formula "16")) - (rule "closeFalse" (formula "16")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "inEqSimp_contradInEq4" (formula "20") (ifseqformula "3")) + (rule "greater_literals" (formula "20") (term "0,0")) + (builtin "One Step Simplification" (formula "20")) + (rule "greater_literals" (formula "20") (term "0,0")) + (builtin "One Step Simplification" (formula "20")) + (rule "andLeft" (formula "20")) + (rule "polySimp_mulComm0" (formula "20") (term "0")) + (rule "polySimp_rightDist" (formula "20") (term "1")) + (rule "mul_literals" (formula "20") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "20")) + (rule "polySimp_mulLiterals" (formula "20") (term "1,0")) + (rule "polySimp_pullOutFactor0b" (formula "20") (term "0")) + (rule "add_literals" (formula "20") (term "1,1,0")) + (rule "times_zero_1" (formula "20") (term "1,0")) + (rule "add_zero_right" (formula "20") (term "0")) + (rule "leq_literals" (formula "20")) + (rule "closeFalse" (formula "20")) ) (branch "a[k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "14")) - (rule "times_zero_2" (formula "14") (term "1,0")) - (rule "add_zero_right" (formula "14") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "0")) - (rule "polySimp_elimOne" (formula "14") (term "0")) - (rule "allLeft" (formula "17") (inst "t=int::select(heap, a, arr(k_0))")) - (builtin "One Step Simplification" (formula "17") (ifInst "" (formula "19"))) - (rule "mul_literals" (formula "17") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "17")) - (rule "mul_literals" (formula "17") (term "1,0")) - (rule "polySimp_addComm1" (formula "17") (term "0")) - (rule "polySimp_addComm0" (formula "17") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "17")) + (rule "allLeft" (formula "20") (inst "t=int::select(heap, a, arr(k_0))")) + (builtin "One Step Simplification" (formula "20") (ifInst "" (formula "22"))) + (rule "mul_literals" (formula "20") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "20")) + (rule "mul_literals" (formula "20") (term "1,0")) + (rule "polySimp_addComm1" (formula "20") (term "0")) + (rule "polySimp_addComm0" (formula "20") (term "0,0")) + (rule "inEqSimp_sepNegMonomial1" (formula "20")) + (rule "polySimp_mulLiterals" (formula "20") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "20")) (rule "andLeft" (formula "3")) (rule "inEqSimp_homoInEq1" (formula "3")) (rule "polySimp_mulComm0" (formula "3") (term "1,0")) @@ -775,8 +660,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "a[-1 + k_0] = a[k_0] FALSE" - (rule "add_zero_right" (formula "1") (term "1")) - (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "17")) + (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "20")) (builtin "One Step Simplification" (formula "2")) (rule "mul_literals" (formula "2") (term "0")) (rule "inEqSimp_homoInEq1" (formula "2")) @@ -784,111 +668,89 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "2") (term "0")) (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "ifthenelse_split" (formula "13") (term "0")) + (rule "ifthenelse_split" (formula "17") (term "0")) (branch "a[-1 + k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "14")) - (rule "mul_literals" (formula "14") (term "1,0")) - (rule "polySimp_addComm1" (formula "14") (term "0")) - (rule "polySimp_addComm0" (formula "14") (term "0,0")) - (rule "applyEq" (formula "18") (term "0") (ifseqformula "13")) - (rule "eqSymm" (formula "18")) - (rule "applyEq" (formula "17") (term "1,0,0,0,1,0") (ifseqformula "13")) - (rule "polySimp_sepNegMonomial" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "0")) - (rule "polySimp_elimOne" (formula "14") (term "0")) - (rule "allLeft" (formula "17") (inst "t=int::select(heap, a, arr(k_0))")) - (rule "replace_known_right" (formula "17") (term "0") (ifseqformula "19")) - (builtin "One Step Simplification" (formula "17") (ifInst "" (formula "19"))) - (rule "mul_literals" (formula "17") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "17")) + (rule "applyEq" (formula "21") (term "0") (ifseqformula "17")) + (rule "eqSymm" (formula "21")) + (rule "applyEq" (formula "20") (term "1,0,0,0,1,0") (ifseqformula "17")) + (rule "allLeft" (formula "20") (inst "t=int::select(heap, a, arr(k_0))")) + (rule "replace_known_right" (formula "20") (term "0") (ifseqformula "22")) + (builtin "One Step Simplification" (formula "20") (ifInst "" (formula "22"))) + (rule "mul_literals" (formula "20") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "20")) + (rule "times_zero_2" (formula "20") (term "1,0")) + (rule "add_zero_right" (formula "20") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "20")) + (rule "polySimp_mulLiterals" (formula "20") (term "0")) + (rule "inEqSimp_contradInEq1" (formula "20") (ifseqformula "2")) + (rule "andLeft" (formula "20")) + (rule "inEqSimp_homoInEq1" (formula "20")) + (rule "polySimp_pullOutFactor1b" (formula "20") (term "0")) + (rule "add_literals" (formula "20") (term "1,1,0")) + (rule "times_zero_1" (formula "20") (term "1,0")) + (rule "add_literals" (formula "20") (term "0")) + (rule "leq_literals" (formula "20")) + (rule "closeFalse" (formula "20")) + ) + (branch "a[-1 + k_0] = mx_0 FALSE" + (rule "polySimp_homoEq" (formula "17")) (rule "times_zero_2" (formula "17") (term "1,0")) (rule "add_zero_right" (formula "17") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "17")) + (rule "polySimp_sepNegMonomial" (formula "17")) (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "17") (ifseqformula "2")) - (rule "andLeft" (formula "17")) - (rule "inEqSimp_homoInEq1" (formula "17")) - (rule "polySimp_pullOutFactor1b" (formula "17") (term "0")) - (rule "add_literals" (formula "17") (term "1,1,0")) - (rule "times_zero_1" (formula "17") (term "1,0")) - (rule "add_literals" (formula "17") (term "0")) - (rule "leq_literals" (formula "17")) - (rule "closeFalse" (formula "17")) - ) - (branch "a[-1 + k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "13")) - (rule "times_zero_2" (formula "13") (term "1,0")) - (rule "add_zero_right" (formula "13") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "13")) - (rule "polySimp_mulLiterals" (formula "13") (term "0")) - (rule "polySimp_elimOne" (formula "13") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "19") (term "1,0") (ifseqformula "5")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "21")) - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "17") (inst "t=int::select(heap, a, arr(k_0))")) - (rule "eqSymm" (formula "17") (term "0,0,0,1")) - (rule "replace_known_right" (formula "17") (term "0,0,0,1") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "17")) - (rule "times_zero_2" (formula "17") (term "0,1")) - (rule "inEqSimp_homoInEq0" (formula "17") (term "1")) - (rule "times_zero_2" (formula "17") (term "1,0,1")) - (rule "add_zero_right" (formula "17") (term "0,1")) - (rule "inEqSimp_sepNegMonomial1" (formula "17") (term "1")) - (rule "polySimp_mulLiterals" (formula "17") (term "0,1")) - (rule "inEqSimp_contradInEq4" (formula "17") (term "1") (ifseqformula "3")) - (rule "greater_literals" (formula "17") (term "0,1,0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "greater_literals" (formula "17") (term "0,0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "polySimp_mulComm0" (formula "17") (term "0,0,1")) - (rule "polySimp_rightDist" (formula "17") (term "1,0,1")) - (rule "mul_literals" (formula "17") (term "0,1,0,1")) - (rule "inEqSimp_homoInEq1" (formula "17") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "17") (term "1,0,0,1")) - (rule "polySimp_pullOutFactor0b" (formula "17") (term "0,0,1")) - (rule "add_literals" (formula "17") (term "1,1,0,0,1")) - (rule "times_zero_1" (formula "17") (term "1,0,0,1")) - (rule "add_zero_right" (formula "17") (term "0,0,1")) - (rule "leq_literals" (formula "17") (term "0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "applyEq" (formula "3") (term "4,0,0") (ifseqformula "17")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "1,0,2,0") (ifseqformula "17")) - (rule "applyEq" (formula "15") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "15") (term "4,0") (ifseqformula "17")) - (rule "applyEq" (formula "19") (term "1") (ifseqformula "16")) - (rule "applyEq" (formula "2") (term "4,1") (ifseqformula "16")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "14")) - (rule "inEqSimp_contradInEq4" (formula "15") (ifseqformula "3")) - (rule "greater_literals" (formula "15") (term "0,1,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "greater_literals" (formula "15") (term "0,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "andLeft" (formula "15")) - (rule "polySimp_mulComm0" (formula "15") (term "0")) - (rule "polySimp_rightDist" (formula "15") (term "1")) - (rule "mul_literals" (formula "15") (term "0,1")) - (rule "inEqSimp_homoInEq1" (formula "15")) - (rule "polySimp_mulLiterals" (formula "15") (term "1,0")) - (rule "polySimp_pullOutFactor0b" (formula "15") (term "0")) - (rule "add_literals" (formula "15") (term "1,1,0")) - (rule "times_zero_1" (formula "15") (term "1,0")) - (rule "add_literals" (formula "15") (term "0")) - (rule "leq_literals" (formula "15")) - (rule "closeFalse" (formula "15")) + (rule "polySimp_elimOne" (formula "17") (term "0")) + (rule "allLeft" (formula "19") (inst "t=int::select(heap, a, arr(k_0))")) + (rule "eqSymm" (formula "19") (term "0,0,0,1")) + (rule "replace_known_right" (formula "19") (term "0,0,0,1") (ifseqformula "22")) + (builtin "One Step Simplification" (formula "19")) + (rule "times_zero_2" (formula "19") (term "0,1")) + (rule "inEqSimp_homoInEq0" (formula "19") (term "1")) + (rule "times_zero_2" (formula "19") (term "1,0,1")) + (rule "add_zero_right" (formula "19") (term "0,1")) + (rule "inEqSimp_sepNegMonomial1" (formula "19") (term "1")) + (rule "polySimp_mulLiterals" (formula "19") (term "0,1")) + (rule "inEqSimp_contradInEq4" (formula "19") (term "1") (ifseqformula "2")) + (rule "greater_literals" (formula "19") (term "0,0,1")) + (builtin "One Step Simplification" (formula "19")) + (rule "greater_literals" (formula "19") (term "0,0,1")) + (builtin "One Step Simplification" (formula "19")) + (rule "polySimp_mulComm0" (formula "19") (term "0,0,1")) + (rule "polySimp_rightDist" (formula "19") (term "1,0,1")) + (rule "mul_literals" (formula "19") (term "0,1,0,1")) + (rule "inEqSimp_homoInEq1" (formula "19") (term "0,1")) + (rule "polySimp_mulLiterals" (formula "19") (term "1,0,0,1")) + (rule "polySimp_pullOutFactor0b" (formula "19") (term "0,0,1")) + (rule "add_literals" (formula "19") (term "1,1,0,0,1")) + (rule "times_zero_1" (formula "19") (term "1,0,0,1")) + (rule "add_zero_right" (formula "19") (term "0,0,1")) + (rule "leq_literals" (formula "19") (term "0,1")) + (builtin "One Step Simplification" (formula "19")) + (rule "applyEq" (formula "2") (term "4,0,0") (ifseqformula "19")) + (rule "applyEq" (formula "2") (term "0,0") (ifseqformula "17")) + (rule "inEqSimp_contradInEq4" (formula "18") (ifseqformula "2")) + (rule "greater_literals" (formula "18") (term "0,0")) + (builtin "One Step Simplification" (formula "18")) + (rule "greater_literals" (formula "18") (term "0,0")) + (builtin "One Step Simplification" (formula "18")) + (rule "andLeft" (formula "18")) + (rule "polySimp_mulComm0" (formula "18") (term "0")) + (rule "polySimp_rightDist" (formula "18") (term "1")) + (rule "mul_literals" (formula "18") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "18")) + (rule "polySimp_mulLiterals" (formula "18") (term "1,0")) + (rule "polySimp_pullOutFactor0b" (formula "18") (term "0")) + (rule "add_literals" (formula "18") (term "1,1,0")) + (rule "times_zero_1" (formula "18") (term "1,0")) + (rule "add_literals" (formula "18") (term "0")) + (rule "leq_literals" (formula "18")) + (rule "closeFalse" (formula "18")) ) ) ) ) (branch "a[1 + k_0 - 1] = a[k_0] FALSE" - (rule "castDel" (formula "21") (term "0,0")) - (rule "add_zero_left" (formula "21") (term "0,0")) (rule "polySimp_elimSub" (formula "20") (term "0,2,0")) (rule "mul_literals" (formula "20") (term "1,0,2,0")) - (rule "polySimp_elimSub" (formula "21") (term "3,0,0")) - (rule "mul_literals" (formula "21") (term "1,3,0,0")) - (rule "polySimp_addComm1" (formula "21") (term "1")) - (rule "add_literals" (formula "21") (term "0,1")) (rule "polySimp_addComm1" (formula "20") (term "0,2,0")) (rule "add_literals" (formula "20") (term "0,0,2,0")) (rule "add_zero_left" (formula "20") (term "0,2,0")) @@ -944,52 +806,16 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "mul_literals" (formula "1") (term "0,0,0,0,0")) (rule "leq_literals" (formula "1") (term "0,0,0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "nnf_imp2or" (formula "16") (term "0")) - (builtin "One Step Simplification" (formula "16")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,1") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "10")) (ifInst "" (formula "20")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "19"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0")) - (rule "replace_known_left" (formula "14") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_subsumption1" (formula "14") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0")) - (rule "qeq_literals" (formula "14") (term "0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "16") (term "0,1")) - (rule "replace_known_left" (formula "16") (term "1,0,0,0,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "16") (ifInst "" (formula "10")) (ifInst "" (formula "21")) (ifInst "" (formula "5")) (ifInst "" (formula "20")) (ifInst "" (formula "14")) (ifInst "" (formula "10"))) - (rule "true_left" (formula "16")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "9")) - (rule "andLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "9")) + (rule "nnf_imp2or" (formula "17") (term "0")) + (builtin "One Step Simplification" (formula "17")) (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "10")) (ifInst "" (formula "22")) (ifInst "" (formula "6")) (ifInst "" (formula "21")) (ifInst "" (formula "10"))) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "11")) (ifInst "" (formula "21")) (ifInst "" (formula "6")) (ifInst "" (formula "20")) (ifInst "" (formula "11"))) (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "12")) + (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "13")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0")) (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "4")) @@ -1000,47 +826,26 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0,0")) (rule "qeq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "10") (ifseqformula "7")) - (rule "true_left" (formula "10")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "14") (term "1")) - (rule "eqSymm" (formula "14")) - (rule "polySimp_elimSub" (formula "14") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "14") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "14") (term "3,1,2,0")) - (rule "mul_literals" (formula "14") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "2,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (ifseqformula "7")) - (rule "castDel" (formula "15") (term "0,0")) - (rule "polySimp_elimSub" (formula "15") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,3,1,2,0,0")) - (rule "polySimp_elimSub" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "2,0,0")) - (rule "applyEq" (formula "15") (term "0,0") (ifseqformula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "1,0,0,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "22")) (ifInst "" (formula "5")) (ifInst "" (formula "21")) (ifInst "" (formula "14"))) - (rule "measuredByCheckEmpty" (formula "13") (term "1,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "0,0,0")) - (rule "replace_known_left" (formula "13") (term "0,0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "13") (term "0,0") (ifseqformula "4")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0,0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0,0,0")) - (rule "qeq_literals" (formula "13") (term "0,0,0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "16") (term "1") (ifseqformula "7")) + (rule "castDel" (formula "16") (term "1")) + (rule "eqSymm" (formula "16")) + (rule "polySimp_elimSub" (formula "16") (term "0,2,0,0,0,2,0")) + (rule "mul_literals" (formula "16") (term "1,0,2,0,0,0,2,0")) + (rule "polySimp_elimSub" (formula "16") (term "3,1,2,0")) + (rule "mul_literals" (formula "16") (term "1,3,1,2,0")) + (rule "polySimp_addComm0" (formula "16") (term "0,2,0,0,0,2,0")) + (rule "polySimp_addComm0" (formula "16") (term "3,1,2,0")) + (rule "polySimp_addComm0" (formula "16") (term "2,0")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "17") (term "0,0") (ifseqformula "7")) + (rule "castDel" (formula "17") (term "0,0")) + (rule "polySimp_elimSub" (formula "17") (term "3,1,2,0,0")) + (rule "mul_literals" (formula "17") (term "1,3,1,2,0,0")) + (rule "polySimp_elimSub" (formula "17") (term "0,2,0,0,0,2,0,0")) + (rule "mul_literals" (formula "17") (term "1,0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm0" (formula "17") (term "3,1,2,0,0")) + (rule "polySimp_addComm0" (formula "17") (term "0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm0" (formula "17") (term "2,0,0")) + (rule "applyEq" (formula "17") (term "0,0") (ifseqformula "16")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,0") (ifseqformula "7")) (rule "castDel" (formula "2") (term "0,0")) (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,0")) @@ -1050,45 +855,16 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "2,0,0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "22")) (ifInst "" (formula "7")) (ifInst "" (formula "21")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0,1,0") (ifseqformula "7")) - (rule "castDel" (formula "16") (term "0,0,1,0")) - (rule "eqSymm" (formula "16") (term "0,0,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,3,1,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "2,0,0,1,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "13") (term "1")) - (rule "polySimp_elimSub" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "13") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "13") (term "3,1,2,1")) - (rule "mul_literals" (formula "13") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "2,1")) - (rule "applyEq" (formula "13") (term "1") (ifseqformula "14")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "18") (term "0,0,1,0") (ifseqformula "7")) + (rule "castDel" (formula "18") (term "0,0,1,0")) + (rule "eqSymm" (formula "18") (term "0,0,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "18") (term "3,1,2,0,0,1,0")) + (rule "mul_literals" (formula "18") (term "1,3,1,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "18") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "mul_literals" (formula "18") (term "1,0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "18") (term "3,1,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "18") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "18") (term "2,0,0,1,0")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "7")) (rule "castDel" (formula "1") (term "1")) (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,1")) @@ -1098,58 +874,45 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,1")) (rule "polySimp_addComm0" (formula "1") (term "3,1,2,1")) (rule "polySimp_addComm0" (formula "1") (term "2,1")) - (rule "ifthenelse_split" (formula "14") (term "0")) + (rule "ifthenelse_split" (formula "16") (term "0")) (branch "k_0 = 0 TRUE" - (rule "eqSymm" (formula "15")) - (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "14")) + (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "16")) (builtin "One Step Simplification" (formula "2")) (rule "times_zero_2" (formula "2") (term "0")) - (rule "replace_known_left" (formula "17") (term "0,0,0,1,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "17")) - (rule "mul_literals" (formula "17") (term "0,1,0")) - (rule "replace_known_left" (formula "1") (term "0,1") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "17") (term "1,0")) - (rule "replace_known_left" (formula "17") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "17")) - (rule "true_left" (formula "17")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "times_zero_2" (formula "2") (term "1,0")) (rule "add_zero_right" (formula "2") (term "0")) - (rule "applyEqRigid" (formula "4") (term "1,1") (ifseqformula "14")) - (rule "add_zero_right" (formula "4") (term "1")) - (rule "applyEqRigid" (formula "19") (term "0,2,0") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "1,0") (ifseqformula "14")) + (rule "applyEq" (formula "2") (term "1,0") (ifseqformula "16")) (rule "add_zero_right" (formula "2") (term "0")) (rule "leq_literals" (formula "2")) (rule "closeFalse" (formula "2")) ) (branch "k_0 = 0 FALSE" - (rule "replace_known_right" (formula "16") (term "0,0,0,1,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "16")) - (rule "replace_known_right" (formula "1") (term "0,1") (ifseqformula "17")) + (rule "replace_known_right" (formula "18") (term "0,0,0,1,0") (ifseqformula "19")) + (builtin "One Step Simplification" (formula "18")) + (rule "replace_known_right" (formula "1") (term "0,1") (ifseqformula "19")) (builtin "One Step Simplification" (formula "1")) - (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "17")) + (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "19")) (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "14")) - (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) + (rule "polySimp_homoEq" (formula "16")) + (rule "polySimp_mulComm0" (formula "18") (term "0,1,0")) (rule "polySimp_mulComm0" (formula "2") (term "0")) - (rule "polySimp_mulComm0" (formula "14") (term "1,0")) - (rule "polySimp_rightDist" (formula "16") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0")) + (rule "polySimp_mulComm0" (formula "16") (term "1,0")) + (rule "polySimp_rightDist" (formula "18") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "18") (term "0,0,1,0")) (rule "polySimp_rightDist" (formula "2") (term "0")) (rule "polySimp_mulComm0" (formula "2") (term "0,0")) - (rule "polySimp_rightDist" (formula "14") (term "1,0")) - (rule "polySimp_mulComm0" (formula "14") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "14") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "1,0,1,0")) - (rule "polySimp_rightDist" (formula "16") (term "1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "1,1,0,1,0")) - (rule "polySimp_mulAssoc" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_addAssoc" (formula "16") (term "0,1,0")) + (rule "polySimp_rightDist" (formula "16") (term "1,0")) + (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "16") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "18") (term "1,0")) + (rule "polySimp_mulComm0" (formula "18") (term "1,0,1,0")) + (rule "polySimp_rightDist" (formula "18") (term "1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "18") (term "1,1,0,1,0")) + (rule "polySimp_mulAssoc" (formula "18") (term "0,1,0,1,0")) + (rule "polySimp_mulComm0" (formula "18") (term "0,0,1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "18") (term "0,1,0,1,0")) + (rule "polySimp_addAssoc" (formula "18") (term "0,1,0")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "polySimp_mulComm0" (formula "2") (term "1,0")) (rule "polySimp_rightDist" (formula "2") (term "1,0")) @@ -1158,55 +921,38 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_mulComm0" (formula "2") (term "0,0,1,0")) (rule "polySimp_mulLiterals" (formula "2") (term "0,1,0")) (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "0")) - (rule "polySimp_elimOne" (formula "14") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "16") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0")) + (rule "polySimp_sepNegMonomial" (formula "16")) + (rule "polySimp_mulLiterals" (formula "16") (term "0")) + (rule "polySimp_elimOne" (formula "16") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "18") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "18") (term "0,1,0")) (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "11") (ifseqformula "17")) - (rule "add_zero_right" (formula "11") (term "1")) - (rule "inEqSimp_contradEq7" (formula "17") (ifseqformula "11")) - (rule "times_zero_1" (formula "17") (term "1,0,0")) - (rule "add_zero_right" (formula "17") (term "0,0")) - (rule "leq_literals" (formula "17") (term "0")) - (builtin "One Step Simplification" (formula "17")) - (rule "false_right" (formula "17")) (rule "ifthenelse_split" (formula "1") (term "1,1")) (branch "a[-1 + k_0] = x_0 TRUE" (rule "replace_known_left" (formula "3") (term "0,0,0") (ifseqformula "1")) (builtin "One Step Simplification" (formula "3")) (rule "mul_literals" (formula "3") (term "0")) - (rule "polySimp_addComm0" (formula "2") (term "1")) (rule "inEqSimp_homoInEq1" (formula "3")) (rule "mul_literals" (formula "3") (term "1,0")) (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "polySimp_addComm1" (formula "3") (term "0,0")) (rule "add_literals" (formula "3") (term "0,0,0")) - (rule "applyEq" (formula "15") (term "0,0,0") (ifseqformula "1")) - (rule "applyEq" (formula "17") (term "1,0,0,0,1,0") (ifseqformula "1")) + (rule "applyEq" (formula "17") (term "0,0,0") (ifseqformula "1")) + (rule "applyEq" (formula "19") (term "1,0,0,0,1,0") (ifseqformula "1")) (rule "inEqSimp_sepNegMonomial0" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "ifthenelse_split" (formula "15") (term "0")) + (rule "ifthenelse_split" (formula "17") (term "0")) (branch "x_0 = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "16")) - (rule "mul_literals" (formula "16") (term "1,0")) - (rule "polySimp_addComm1" (formula "16") (term "0")) - (rule "polySimp_addComm0" (formula "16") (term "0,0")) - (rule "applyEqRigid" (formula "3") (term "4,0,0") (ifseqformula "15")) - (rule "applyEq" (formula "2") (term "1,0,2,0") (ifseqformula "15")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "14")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "applyEqRigid" (formula "21") (term "1") (ifseqformula "15")) - (rule "applyEqRigid" (formula "18") (term "1,0,0,0,1,0") (ifseqformula "15")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "15")) - (rule "applyEq" (formula "2") (term "4,1,0") (ifseqformula "15")) - (rule "polySimp_sepNegMonomial" (formula "16")) - (rule "polySimp_mulLiterals" (formula "16") (term "0")) - (rule "polySimp_elimOne" (formula "16") (term "0")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "16")) + (rule "polySimp_homoEq" (formula "18")) + (rule "mul_literals" (formula "18") (term "1,0")) + (rule "polySimp_addComm1" (formula "18") (term "0")) + (rule "polySimp_addComm0" (formula "18") (term "0,0")) + (rule "applyEqRigid" (formula "3") (term "4,0,0") (ifseqformula "17")) + (rule "polySimp_sepNegMonomial" (formula "18")) + (rule "polySimp_mulLiterals" (formula "18") (term "0")) + (rule "polySimp_elimOne" (formula "18") (term "0")) + (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "18")) (rule "polySimp_mulComm0" (formula "3") (term "0")) (rule "polySimp_rightDist" (formula "3") (term "0")) (rule "mul_literals" (formula "3") (term "0,0")) @@ -1218,81 +964,64 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "3") (term "0")) (rule "polySimp_addComm1" (formula "3") (term "0,0")) (rule "add_literals" (formula "3") (term "0,0,0")) - (rule "applyEq" (formula "2") (term "1,0") (ifseqformula "16")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_addComm1" (formula "2") (term "0,0")) - (rule "add_literals" (formula "2") (term "0,0,0")) - (rule "add_zero_left" (formula "2") (term "0,0")) - (rule "polySimp_pullOutFactor2" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "inEqSimp_contradInEq2" (formula "2") (ifseqformula "16")) - (rule "greater_literals" (formula "2") (term "0,1,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "greater_literals" (formula "2") (term "0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "andLeft" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "0")) - (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "mul_literals" (formula "2") (term "0,1")) - (rule "inEqSimp_homoInEq1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,0")) - (rule "polySimp_pullOutFactor0b" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,1,0")) - (rule "times_zero_1" (formula "2") (term "1,0")) - (rule "add_literals" (formula "2") (term "0")) - (rule "leq_literals" (formula "2")) - (rule "closeFalse" (formula "2")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "inEqSimp_contradInEq2" (formula "3") (ifseqformula "19")) + (rule "greater_literals" (formula "3") (term "0,1,0")) + (builtin "One Step Simplification" (formula "3")) + (rule "greater_literals" (formula "3") (term "0,0")) + (builtin "One Step Simplification" (formula "3")) + (rule "andLeft" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "0")) + (rule "polySimp_rightDist" (formula "3") (term "1")) + (rule "mul_literals" (formula "3") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "1,0")) + (rule "polySimp_pullOutFactor0b" (formula "3") (term "0")) + (rule "add_literals" (formula "3") (term "1,1,0")) + (rule "times_zero_1" (formula "3") (term "1,0")) + (rule "add_literals" (formula "3") (term "0")) + (rule "leq_literals" (formula "3")) + (rule "closeFalse" (formula "3")) ) (branch "x_0 = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "15")) - (rule "times_zero_2" (formula "15") (term "1,0")) - (rule "add_zero_right" (formula "15") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "15")) - (rule "polySimp_mulLiterals" (formula "15") (term "0")) - (rule "polySimp_elimOne" (formula "15") (term "0")) - (rule "allLeft" (formula "17") (inst "t=x_0")) - (builtin "One Step Simplification" (formula "17") (ifInst "" (formula "19"))) - (rule "mul_literals" (formula "17") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "17")) - (rule "mul_literals" (formula "17") (term "1,0")) - (rule "polySimp_addComm1" (formula "17") (term "0")) - (rule "polySimp_addComm0" (formula "17") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "inEqSimp_contradInEq4" (formula "17") (ifseqformula "3")) - (rule "greater_literals" (formula "17") (term "0,1,0")) - (builtin "One Step Simplification" (formula "17")) - (rule "greater_literals" (formula "17") (term "0,0")) - (builtin "One Step Simplification" (formula "17")) - (rule "andLeft" (formula "17")) - (rule "polySimp_rightDist" (formula "17") (term "1")) - (rule "mul_literals" (formula "17") (term "0,1")) - (rule "polySimp_rightDist" (formula "17") (term "0")) - (rule "mul_literals" (formula "17") (term "0,0")) - (rule "inEqSimp_homoInEq1" (formula "17")) - (rule "polySimp_mulComm0" (formula "17") (term "1,0")) - (rule "polySimp_rightDist" (formula "17") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "17") (term "1,1,0")) - (rule "mul_literals" (formula "17") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "17") (term "0")) - (rule "polySimp_addComm1" (formula "17") (term "0,0")) - (rule "add_literals" (formula "17") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "17") (term "0")) - (rule "add_literals" (formula "17") (term "1,1,0")) - (rule "times_zero_1" (formula "17") (term "1,0")) - (rule "add_zero_right" (formula "17") (term "0")) - (rule "leq_literals" (formula "17")) - (rule "closeFalse" (formula "17")) + (rule "allLeft" (formula "19") (inst "t=x_0")) + (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "21"))) + (rule "mul_literals" (formula "19") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "19")) + (rule "mul_literals" (formula "19") (term "1,0")) + (rule "polySimp_addComm1" (formula "19") (term "0")) + (rule "polySimp_addComm0" (formula "19") (term "0,0")) + (rule "inEqSimp_sepNegMonomial1" (formula "19")) + (rule "polySimp_mulLiterals" (formula "19") (term "0")) + (rule "inEqSimp_contradInEq4" (formula "19") (ifseqformula "3")) + (rule "greater_literals" (formula "19") (term "0,1,0")) + (builtin "One Step Simplification" (formula "19")) + (rule "greater_literals" (formula "19") (term "0,0")) + (builtin "One Step Simplification" (formula "19")) + (rule "andLeft" (formula "19")) + (rule "polySimp_rightDist" (formula "19") (term "1")) + (rule "mul_literals" (formula "19") (term "0,1")) + (rule "polySimp_rightDist" (formula "19") (term "0")) + (rule "mul_literals" (formula "19") (term "0,0")) + (rule "inEqSimp_homoInEq1" (formula "19")) + (rule "polySimp_mulComm0" (formula "19") (term "1,0")) + (rule "polySimp_rightDist" (formula "19") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0")) + (rule "mul_literals" (formula "19") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "19") (term "0")) + (rule "polySimp_addComm1" (formula "19") (term "0,0")) + (rule "add_literals" (formula "19") (term "0,0,0")) + (rule "polySimp_pullOutFactor0b" (formula "19") (term "0")) + (rule "add_literals" (formula "19") (term "1,1,0")) + (rule "times_zero_1" (formula "19") (term "1,0")) + (rule "add_zero_right" (formula "19") (term "0")) + (rule "leq_literals" (formula "19")) + (rule "closeFalse" (formula "19")) ) ) (branch "a[-1 + k_0] = x_0 FALSE" - (rule "add_zero_right" (formula "1") (term "1")) - (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "17")) + (rule "replace_known_right" (formula "2") (term "0,0,0") (ifseqformula "19")) (builtin "One Step Simplification" (formula "2")) (rule "times_zero_2" (formula "2") (term "0")) (rule "inEqSimp_homoInEq1" (formula "2")) @@ -1300,28 +1029,21 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "2") (term "0")) (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "ifthenelse_split" (formula "14") (term "0")) + (rule "ifthenelse_split" (formula "16") (term "0")) (branch "a[-1 + k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "15")) - (rule "mul_literals" (formula "15") (term "1,0")) - (rule "polySimp_addComm1" (formula "15") (term "0")) - (rule "polySimp_addComm0" (formula "15") (term "0,0")) - (rule "applyEq" (formula "18") (term "0") (ifseqformula "14")) - (rule "eqSymm" (formula "18")) - (rule "applyEq" (formula "17") (term "1,0,0,0,1,0") (ifseqformula "14")) - (rule "polySimp_sepNegMonomial" (formula "15")) - (rule "polySimp_mulLiterals" (formula "15") (term "0")) - (rule "polySimp_elimOne" (formula "15") (term "0")) - (rule "allLeft" (formula "17") (inst "t=x_0")) - (rule "replace_known_right" (formula "17") (term "0") (ifseqformula "19")) - (builtin "One Step Simplification" (formula "17") (ifInst "" (formula "19"))) - (rule "times_zero_2" (formula "17") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "17")) - (rule "times_zero_2" (formula "17") (term "1,0")) - (rule "add_zero_right" (formula "17") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "17")) + (rule "applyEq" (formula "20") (term "0") (ifseqformula "16")) + (rule "eqSymm" (formula "20")) + (rule "applyEq" (formula "19") (term "1,0,0,0,1,0") (ifseqformula "16")) + (rule "allLeft" (formula "19") (inst "t=x_0")) + (rule "replace_known_right" (formula "19") (term "0") (ifseqformula "21")) + (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "21"))) + (rule "times_zero_2" (formula "19") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "19")) + (rule "times_zero_2" (formula "19") (term "1,0")) + (rule "add_zero_right" (formula "19") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "19")) + (rule "polySimp_mulLiterals" (formula "19") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "19")) (rule "andLeft" (formula "2")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "polySimp_pullOutFactor1b" (formula "2") (term "0")) @@ -1332,58 +1054,49 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "closeFalse" (formula "2")) ) (branch "a[-1 + k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "14")) - (rule "times_zero_2" (formula "14") (term "1,0")) - (rule "add_zero_right" (formula "14") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "0")) - (rule "polySimp_elimOne" (formula "14") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "19") (term "1,0") (ifseqformula "5")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "21")) - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "17") (inst "t=x_0")) - (rule "eqSymm" (formula "17") (term "0,0,0,1")) - (rule "replace_known_right" (formula "17") (term "0,0,0,1") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "17")) - (rule "mul_literals" (formula "17") (term "0,1")) - (rule "inEqSimp_homoInEq0" (formula "17") (term "1")) - (rule "times_zero_2" (formula "17") (term "1,0,1")) - (rule "add_zero_right" (formula "17") (term "0,1")) - (rule "inEqSimp_sepNegMonomial1" (formula "17") (term "1")) - (rule "polySimp_mulLiterals" (formula "17") (term "0,1")) - (rule "inEqSimp_contradInEq4" (formula "17") (term "1") (ifseqformula "3")) - (rule "greater_literals" (formula "17") (term "0,0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "greater_literals" (formula "17") (term "0,0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "polySimp_mulComm0" (formula "17") (term "0,0,1")) - (rule "polySimp_rightDist" (formula "17") (term "1,0,1")) - (rule "mul_literals" (formula "17") (term "0,1,0,1")) - (rule "inEqSimp_homoInEq1" (formula "17") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "17") (term "1,0,0,1")) - (rule "polySimp_pullOutFactor0b" (formula "17") (term "0,0,1")) - (rule "add_literals" (formula "17") (term "1,1,0,0,1")) - (rule "times_zero_1" (formula "17") (term "1,0,0,1")) - (rule "add_zero_right" (formula "17") (term "0,0,1")) - (rule "leq_literals" (formula "17") (term "0,1")) - (builtin "One Step Simplification" (formula "17")) - (rule "applyEq" (formula "3") (term "4,0,0") (ifseqformula "17")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "15")) - (rule "applyEqRigid" (formula "2") (term "4,1") (ifseqformula "17")) - (rule "applyEq" (formula "20") (term "1") (ifseqformula "17")) - (rule "applyEq" (formula "2") (term "1,0,2,0") (ifseqformula "17")) - (rule "applyEqRigid" (formula "22") (term "1") (ifseqformula "17")) - (rule "applyEq" (formula "14") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "14")) - (rule "inEqSimp_contradInEq1" (formula "15") (ifseqformula "3")) - (rule "andLeft" (formula "15")) - (rule "inEqSimp_homoInEq1" (formula "15")) - (rule "polySimp_pullOutFactor1b" (formula "15") (term "0")) - (rule "add_literals" (formula "15") (term "1,1,0")) - (rule "times_zero_1" (formula "15") (term "1,0")) - (rule "add_zero_right" (formula "15") (term "0")) - (rule "leq_literals" (formula "15")) - (rule "closeFalse" (formula "15")) + (rule "polySimp_homoEq" (formula "16")) + (rule "times_zero_2" (formula "16") (term "1,0")) + (rule "add_zero_right" (formula "16") (term "0")) + (rule "polySimp_sepNegMonomial" (formula "16")) + (rule "polySimp_mulLiterals" (formula "16") (term "0")) + (rule "polySimp_elimOne" (formula "16") (term "0")) + (rule "allLeft" (formula "18") (inst "t=x_0")) + (rule "eqSymm" (formula "18") (term "0,0,0,1")) + (rule "replace_known_right" (formula "18") (term "0,0,0,1") (ifseqformula "21")) + (builtin "One Step Simplification" (formula "18")) + (rule "times_zero_2" (formula "18") (term "0,1")) + (rule "inEqSimp_homoInEq0" (formula "18") (term "1")) + (rule "times_zero_2" (formula "18") (term "1,0,1")) + (rule "add_zero_right" (formula "18") (term "0,1")) + (rule "inEqSimp_sepNegMonomial1" (formula "18") (term "1")) + (rule "polySimp_mulLiterals" (formula "18") (term "0,1")) + (rule "inEqSimp_contradInEq1" (formula "18") (term "1") (ifseqformula "2")) + (rule "inEqSimp_homoInEq1" (formula "18") (term "0,1")) + (rule "polySimp_pullOutFactor1b" (formula "18") (term "0,0,1")) + (rule "add_literals" (formula "18") (term "1,1,0,0,1")) + (rule "times_zero_1" (formula "18") (term "1,0,0,1")) + (rule "add_zero_right" (formula "18") (term "0,0,1")) + (rule "leq_literals" (formula "18") (term "0,1")) + (builtin "One Step Simplification" (formula "18")) + (rule "applyEq" (formula "2") (term "4,0,0") (ifseqformula "18")) + (rule "applyEq" (formula "2") (term "0,0") (ifseqformula "16")) + (rule "inEqSimp_contradInEq2" (formula "2") (ifseqformula "17")) + (rule "greater_literals" (formula "2") (term "0,0")) + (builtin "One Step Simplification" (formula "2")) + (rule "greater_literals" (formula "2") (term "0,0")) + (builtin "One Step Simplification" (formula "2")) + (rule "andLeft" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "0")) + (rule "polySimp_rightDist" (formula "2") (term "1")) + (rule "mul_literals" (formula "2") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "1,0")) + (rule "polySimp_pullOutFactor0b" (formula "2") (term "0")) + (rule "add_literals" (formula "2") (term "1,1,0")) + (rule "times_zero_1" (formula "2") (term "1,0")) + (rule "add_zero_right" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) ) ) @@ -1436,15 +1149,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) (rule "andLeft" (formula "3")) (rule "inEqSimp_homoInEq1" (formula "3")) @@ -1462,35 +1166,17 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) (branch "Index Out of Bounds (mc == 0 != null, but k < _a.length Out of Bounds!)" (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "20"))) - (rule "false_right" (formula "21")) (rule "inEqSimp_ltToLeq" (formula "3")) (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "inEqSimp_ltToLeq" (formula "1") (term "1")) (rule "times_zero_1" (formula "1") (term "1,0,0,1")) (rule "add_zero_right" (formula "1") (term "0,0,1")) - (rule "applyEqRigid" (formula "17") (term "1,1") (ifseqformula "2")) - (rule "add_zero_right" (formula "17") (term "1")) - (rule "applyEq" (formula "18") (term "0,1,1,1,0") (ifseqformula "2")) - (rule "times_zero_2" (formula "18") (term "1,1,1,0")) - (rule "add_zero_right" (formula "18") (term "1,1,0")) - (rule "applyEqRigid" (formula "15") (term "0") (ifseqformula "2")) - (rule "qeq_literals" (formula "15")) - (rule "true_left" (formula "15")) (rule "inEqSimp_sepNegMonomial0" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "0")) (rule "polySimp_elimOne" (formula "3") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1") (term "1")) (rule "mul_literals" (formula "1") (term "1,1")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "inEqSimp_contradInEq1" (formula "1") (term "1") (ifseqformula "12")) (rule "qeq_literals" (formula "1") (term "0,1")) (builtin "One Step Simplification" (formula "1")) @@ -1506,8 +1192,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "if mc == 0 false" - (builtin "One Step Simplification" (formula "1")) (builtin "One Step Simplification" (formula "20")) + (builtin "One Step Simplification" (formula "1")) (rule "notLeft" (formula "1")) (rule "elim_double_block_2" (formula "20") (term "1")) (rule "ifElseUnfold" (formula "20") (term "1") (inst "#boolv=b_4")) @@ -1530,7 +1216,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "21")) (builtin "One Step Simplification" (formula "1")) (rule "postincrement" (formula "21") (term "1")) - (rule "compound_reference_cast_expression_primitive" (formula "21") (term "1") (inst "#v=i_6")) + (rule "compound_int_cast_expression" (formula "21") (term "1") (inst "#v=i_6")) (rule "variableDeclarationAssign" (formula "21") (term "1")) (rule "variableDeclaration" (formula "21") (term "1") (newnames "i_6")) (rule "remove_parentheses_right" (formula "21") (term "1")) @@ -1543,7 +1229,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "21")) (rule "blockEmpty" (formula "21") (term "1")) (rule "postincrement" (formula "21") (term "1")) - (rule "compound_int_cast_expression" (formula "21") (term "1") (inst "#v=i_7")) + (rule "compound_reference_cast_expression_primitive" (formula "21") (term "1") (inst "#v=i_7")) (rule "variableDeclarationAssign" (formula "21") (term "1")) (rule "variableDeclaration" (formula "21") (term "1") (newnames "i_7")) (rule "remove_parentheses_right" (formula "21") (term "1")) @@ -1573,31 +1259,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "19")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "15")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "12")) (rule "qeq_literals" (formula "1") (term "0")) (builtin "One Step Simplification" (formula "1")) @@ -1619,23 +1282,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial0" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "0")) (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "19")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "15")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) (rule "andLeft" (formula "3")) (rule "inEqSimp_homoInEq1" (formula "3")) @@ -1653,20 +1299,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_contradEq3" (formula "19") (ifseqformula "1")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "qeq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) (rule "inEqSimp_contradInEq0" (formula "15") (ifseqformula "1")) (rule "qeq_literals" (formula "15") (term "0")) (builtin "One Step Simplification" (formula "15")) @@ -1699,56 +1333,28 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial0" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "0")) (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "19")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "15")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "nnf_imp2or" (formula "17") (term "0")) + (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "17") (term "0,0") (inst "l=l")) + (rule "eqSymm" (formula "17") (term "0,1")) + (rule "replace_known_right" (formula "17") (term "0,1,0,0") (ifseqformula "21")) + (builtin "One Step Simplification" (formula "17") (ifInst "" (formula "10")) (ifInst "" (formula "22")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "10"))) + (rule "measuredByCheckEmpty" (formula "17") (term "1,0") (ifseqformula "8")) + (builtin "One Step Simplification" (formula "17")) + (rule "inEqSimp_commuteLeq" (formula "17") (term "0,0")) + (rule "replace_known_left" (formula "17") (term "0,0") (ifseqformula "12")) + (builtin "One Step Simplification" (formula "17")) + (rule "inEqSimp_commuteLeq" (formula "17") (term "0")) + (rule "inEqSimp_subsumption1" (formula "17") (term "0") (ifseqformula "3")) + (rule "inEqSimp_homoInEq0" (formula "17") (term "0,0")) + (rule "polySimp_pullOutFactor1b" (formula "17") (term "0,0,0")) + (rule "add_literals" (formula "17") (term "1,1,0,0,0")) + (rule "times_zero_1" (formula "17") (term "1,0,0,0")) + (rule "add_zero_right" (formula "17") (term "0,0,0")) + (rule "qeq_literals" (formula "17") (term "0,0")) (builtin "One Step Simplification" (formula "17")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "9")) - (rule "andLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "15") (term "0,1")) - (rule "replace_known_right" (formula "15") (term "0,1,0,0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "15") (ifInst "" (formula "9")) (ifInst "" (formula "21")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "9"))) - (rule "measuredByCheckEmpty" (formula "15") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "0,0")) - (rule "replace_known_left" (formula "15") (term "0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "0")) - (rule "inEqSimp_subsumption1" (formula "15") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "15") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "15") (term "0,0,0")) - (rule "add_literals" (formula "15") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "15") (term "1,0,0,0")) - (rule "add_zero_right" (formula "15") (term "0,0,0")) - (rule "qeq_literals" (formula "15") (term "0,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "9")) (ifInst "" (formula "22")) (ifInst "" (formula "4")) (ifInst "" (formula "21")) (ifInst "" (formula "16")) (ifInst "" (formula "9"))) - (rule "true_left" (formula "14")) (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "10")) (ifInst "" (formula "22")) (ifInst "" (formula "5")) (ifInst "" (formula "21")) (ifInst "" (formula "10"))) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "11")) (ifInst "" (formula "23")) (ifInst "" (formula "5")) (ifInst "" (formula "22")) (ifInst "" (formula "11"))) (rule "bsum_induction_upper_concrete" (formula "1") (term "0,1")) (rule "replace_known_left" (formula "1") (term "0,1,1,0,1") (ifseqformula "3")) (builtin "One Step Simplification" (formula "1")) @@ -1761,7 +1367,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,1,0,0,1")) - (rule "replace_known_left" (formula "1") (term "0,0,1,0,0,1") (ifseqformula "12")) + (rule "replace_known_left" (formula "1") (term "0,0,1,0,0,1") (ifseqformula "13")) (builtin "One Step Simplification" (formula "1")) (rule "mul_literals" (formula "1") (term "1,0,0,1")) (rule "polySimp_addComm0" (formula "1") (term "0,0,1")) @@ -1771,7 +1377,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_homoInEq0" (formula "1") (term "0")) (rule "times_zero_2" (formula "1") (term "1,0,0")) (rule "add_zero_right" (formula "1") (term "0,0")) - (rule "applyEq" (formula "1") (term "0,1,0,1") (ifseqformula "16")) + (rule "applyEq" (formula "1") (term "0,1,0,1") (ifseqformula "18")) (rule "polySimp_addComm1" (formula "1") (term "0,1")) (rule "polySimp_sepPosMonomial" (formula "1") (term "1")) (rule "polySimp_mulComm0" (formula "1") (term "1,1")) @@ -1781,7 +1387,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_elimOne" (formula "1") (term "1,1,1")) (rule "inEqSimp_sepPosMonomial1" (formula "1") (term "0")) (rule "mul_literals" (formula "1") (term "1,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "12")) + (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "13")) (rule "leq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) (rule "applyEq" (formula "2") (term "0,0") (ifseqformula "1")) @@ -1799,7 +1405,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_literals" (formula "2") (term "0,0,0,0")) (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "17")) + (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "19")) (rule "andLeft" (formula "2")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "polySimp_mulComm0" (formula "2") (term "1,0")) @@ -1877,58 +1483,16 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "20")) (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "20") (ifseqformula "15")) - (rule "times_zero_1" (formula "20") (term "1,0,0")) - (rule "add_zero_right" (formula "20") (term "0,0")) - (rule "leq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "false_right" (formula "20")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "nnf_imp2or" (formula "17") (term "0")) - (builtin "One Step Simplification" (formula "17")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "15") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "15") (term "0,1")) - (rule "replace_known_left" (formula "15") (term "1,1") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "15") (ifInst "" (formula "10")) (ifInst "" (formula "21")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "20"))) - (rule "measuredByCheckEmpty" (formula "15") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "15") (term "0,0")) - (rule "replace_known_left" (formula "15") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "15")) - (rule "inEqSimp_subsumption1" (formula "15") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "15") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "15") (term "0,0,0")) - (rule "add_literals" (formula "15") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "15") (term "1,0,0,0")) - (rule "add_zero_right" (formula "15") (term "0,0,0")) - (rule "qeq_literals" (formula "15") (term "0,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "9")) - (rule "andLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "16") (term "0,1")) - (rule "replace_known_right" (formula "16") (term "0,1,0,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "16") (ifInst "" (formula "9")) (ifInst "" (formula "23")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "14")) (ifInst "" (formula "9"))) - (rule "true_left" (formula "16")) + (rule "nnf_imp2or" (formula "18") (term "0")) + (builtin "One Step Simplification" (formula "18")) (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) (rule "replace_known_right" (formula "1") (term "0,1,1,0,0,0,0,0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "10")) (ifInst "" (formula "5")) (ifInst "" (formula "6")) (ifInst "" (formula "22")) (ifInst "" (formula "10"))) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "11")) (ifInst "" (formula "5")) (ifInst "" (formula "6")) (ifInst "" (formula "22")) (ifInst "" (formula "11"))) (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "12")) + (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "13")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0")) (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "4")) @@ -1939,47 +1503,16 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0,0")) (rule "qeq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "17") (term "0,0") (ifseqformula "7")) - (rule "castDel" (formula "17") (term "0,0")) - (rule "polySimp_elimSub" (formula "17") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "17") (term "1,3,1,2,0,0")) - (rule "polySimp_elimSub" (formula "17") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "17") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "17") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "17") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "17") (term "2,0,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "16") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "16") (term "1")) - (rule "eqSymm" (formula "16")) - (rule "polySimp_elimSub" (formula "16") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "16") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "16") (term "3,1,2,0")) - (rule "mul_literals" (formula "16") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "16") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "16") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "16") (term "2,0")) - (rule "applyEq" (formula "17") (term "0,0") (ifseqformula "16")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "10") (ifseqformula "7")) - (rule "true_left" (formula "10")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "23")) (ifInst "" (formula "6")) (ifInst "" (formula "22")) (ifInst "" (formula "15"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0,0")) - (rule "replace_known_left" (formula "14") (term "0,0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_subsumption1" (formula "14") (term "0,0") (ifseqformula "4")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0,0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0,0")) - (rule "qeq_literals" (formula "14") (term "0,0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "17") (term "1") (ifseqformula "7")) + (rule "castDel" (formula "17") (term "1")) + (rule "eqSymm" (formula "17")) + (rule "polySimp_elimSub" (formula "17") (term "0,2,0,0,0,2,0")) + (rule "mul_literals" (formula "17") (term "1,0,2,0,0,0,2,0")) + (rule "polySimp_elimSub" (formula "17") (term "3,1,2,0")) + (rule "mul_literals" (formula "17") (term "1,3,1,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "0,2,0,0,0,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "3,1,2,0")) + (rule "polySimp_addComm0" (formula "17") (term "2,0")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,0") (ifseqformula "7")) (rule "castDel" (formula "2") (term "0,0")) (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,0")) @@ -1989,45 +1522,16 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0")) (rule "polySimp_addComm0" (formula "2") (term "2,0,0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,1,0,0,0,0,0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "6")) (ifInst "" (formula "7")) (ifInst "" (formula "22")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "17") (term "0,0,1,0") (ifseqformula "7")) - (rule "castDel" (formula "17") (term "0,0,1,0")) - (rule "eqSymm" (formula "17") (term "0,0,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "17") (term "3,1,2,0,0,1,0")) - (rule "mul_literals" (formula "17") (term "1,3,1,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "17") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "mul_literals" (formula "17") (term "1,0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "17") (term "3,1,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "17") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "17") (term "2,0,0,1,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "14") (term "1")) - (rule "polySimp_elimSub" (formula "14") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "14") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "14") (term "3,1,2,1")) - (rule "mul_literals" (formula "14") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "14") (term "2,1")) - (rule "applyEq" (formula "14") (term "1") (ifseqformula "15")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "19") (term "0,0,1,0") (ifseqformula "7")) + (rule "castDel" (formula "19") (term "0,0,1,0")) + (rule "eqSymm" (formula "19") (term "0,0,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "19") (term "3,1,2,0,0,1,0")) + (rule "mul_literals" (formula "19") (term "1,3,1,2,0,0,1,0")) + (rule "polySimp_elimSub" (formula "19") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "mul_literals" (formula "19") (term "1,0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "3,1,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "0,2,1,0,0,2,0,0,1,0")) + (rule "polySimp_addComm0" (formula "19") (term "2,0,0,1,0")) (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "1") (term "1")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) (rule "castDel" (formula "2") (term "1")) @@ -2041,12 +1545,12 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "24")) (ifInst "" (formula "7")) (ifInst "" (formula "23"))) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "24"))) (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "13")) + (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "15")) (builtin "One Step Simplification" (formula "1")) (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "3")) (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "6")) @@ -2069,113 +1573,12 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "2") (term "2,0")) (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "2")) (rule "applyEq" (formula "4") (term "0,0") (ifseqformula "2")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1,0,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "24"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "1")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "4")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "2"))) - (rule "true_left" (formula "1")) (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "1,1") (ifseqformula "9")) (builtin "One Step Simplification" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "9")) (ifInst "" (formula "24"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "14")) + (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "0") (ifseqformula "9")) (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "4")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "2") (term "0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "2")) - (rule "replace_known_left" (formula "1") (term "0,1") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) (rule "applyEq" (formula "4") (term "0,0") (ifseqformula "1")) (rule "applyEq" (formula "2") (term "1") (ifseqformula "1")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_right" (formula "4") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "24")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "replace_known_left" (formula "4") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_right" (formula "2") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "qeq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "9")) (rule "castDel" (formula "1") (term "1")) (rule "eqSymm" (formula "1")) @@ -2188,25 +1591,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "1") (term "2,0")) (rule "applyEq" (formula "2") (term "0") (ifseqformula "1")) (rule "applyEq" (formula "1") (term "1") (ifseqformula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "replace_known_left" (formula "3") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "9")) (rule "castDel" (formula "2") (term "1")) (rule "eqSymm" (formula "2")) @@ -2229,203 +1613,61 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,0")) (rule "polySimp_addComm0" (formula "4") (term "2,0,0")) (rule "applyEq" (formula "4") (term "0,0") (ifseqformula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "9")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_right" (formula "2") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "qeq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "ifthenelse_split" (formula "17") (term "0")) + (rule "ifthenelse_split" (formula "19") (term "0")) (branch "k_0 = 0 TRUE" - (rule "eqSymm" (formula "18")) - (rule "replace_known_left" (formula "2") (term "0,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "2")) - (rule "eqSymm" (formula "2")) - (rule "replace_known_left" (formula "20") (term "0,0,0,1,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "20")) - (rule "times_zero_2" (formula "20") (term "0,1,0")) - (rule "inEqSimp_homoInEq0" (formula "20") (term "1,0")) - (rule "times_zero_2" (formula "20") (term "1,0,1,0")) - (rule "add_zero_right" (formula "20") (term "0,1,0")) - (rule "applyEq" (formula "2") (term "3,0") (ifseqformula "17")) - (rule "applyEq" (formula "19") (term "0,0") (ifseqformula "18")) - (rule "times_zero_2" (formula "19") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "19")) - (rule "times_zero_2" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "applyEq" (formula "4") (term "3,0,0") (ifseqformula "17")) - (rule "applyEqRigid" (formula "1") (term "3,0") (ifseqformula "17")) - (rule "applyEq" (formula "6") (term "1,1") (ifseqformula "17")) - (rule "add_zero_right" (formula "6") (term "1")) - (rule "applyEq" (formula "3") (term "1,0") (ifseqformula "17")) - (rule "bsum_lower_equals_upper" (formula "3") (term "0")) - (rule "eqSymm" (formula "3")) - (rule "applyEqRigid" (formula "13") (term "0") (ifseqformula "17")) - (rule "qeq_literals" (formula "13")) - (rule "true_left" (formula "13")) - (rule "applyEq" (formula "15") (term "1,0") (ifseqformula "16")) - (rule "bsum_lower_equals_upper" (formula "15") (term "0")) - (rule "eqSymm" (formula "15")) - (rule "applyEqRigid" (formula "5") (term "0,2,0") (ifseqformula "15")) - (rule "applyEqRigid" (formula "16") (term "3,0") (ifseqformula "15")) - (rule "applyEq" (formula "1") (term "3,1") (ifseqformula "15")) - (rule "applyEq" (formula "4") (term "1,0,1") (ifseqformula "15")) - (rule "add_zero_right" (formula "4") (term "0,1")) - (rule "applyEqRigid" (formula "3") (term "3,0") (ifseqformula "15")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "2")) - (rule "times_zero_2" (formula "3") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "times_zero_2" (formula "3") (term "1,0")) - (rule "add_zero_right" (formula "3") (term "0")) - (rule "applyEqRigid" (formula "17") (term "0,0,1,0") (ifseqformula "14")) - (rule "add_zero_left" (formula "17") (term "0,1,0")) - (rule "applyEqRigid" (formula "16") (term "0,0") (ifseqformula "14")) - (rule "add_zero_left" (formula "16") (term "0")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_invertInEq1" (formula "16") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0")) - (rule "times_zero_2" (formula "16") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "16") (term "0,1,0")) - (rule "inEqSimp_subsumption1" (formula "15") (ifseqformula "12")) - (rule "leq_literals" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "true_left" (formula "15")) - (rule "inEqSimp_subsumption1" (formula "11") (ifseqformula "4")) - (rule "leq_literals" (formula "11") (term "0")) - (builtin "One Step Simplification" (formula "11")) - (rule "true_left" (formula "11")) - (rule "inEqSimp_contradInEq1" (formula "14") (term "1,0") (ifseqformula "11")) - (rule "qeq_literals" (formula "14") (term "0,1,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "closeFalse" (formula "14")) + (rule "replace_known_left" (formula "22") (term "0,0,0,1,0") (ifseqformula "19")) + (builtin "One Step Simplification" (formula "22")) + (rule "times_zero_2" (formula "22") (term "0,1,0")) + (rule "inEqSimp_homoInEq0" (formula "22") (term "1,0")) + (rule "times_zero_2" (formula "22") (term "1,0,1,0")) + (rule "add_zero_right" (formula "22") (term "0,1,0")) + (rule "applyEqRigid" (formula "22") (term "0,0,1,0") (ifseqformula "19")) + (rule "add_zero_left" (formula "22") (term "0,1,0")) + (rule "inEqSimp_invertInEq1" (formula "22") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "22") (term "0,1,0")) + (rule "times_zero_2" (formula "22") (term "1,1,0")) + (rule "polySimp_elimOne" (formula "22") (term "0,1,0")) + (rule "inEqSimp_contradInEq1" (formula "22") (term "1,0") (ifseqformula "18")) + (rule "qeq_literals" (formula "22") (term "0,1,0")) + (builtin "One Step Simplification" (formula "22")) + (rule "closeFalse" (formula "22")) ) (branch "k_0 = 0 FALSE" - (rule "replace_known_right" (formula "19") (term "0,0,0,1,0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "19")) - (rule "replace_known_right" (formula "2") (term "0,0") (ifseqformula "20")) + (rule "replace_known_right" (formula "21") (term "0,0,0,1,0") (ifseqformula "22")) + (builtin "One Step Simplification" (formula "21")) + (rule "replace_known_right" (formula "2") (term "0,0") (ifseqformula "22")) (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "17")) + (rule "polySimp_homoEq" (formula "19")) (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_mulComm0" (formula "19") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "17") (term "1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "19") (term "1,0")) (rule "polySimp_mulComm0" (formula "2") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,0,1,0")) - (rule "polySimp_rightDist" (formula "17") (term "1,0")) - (rule "polySimp_mulComm0" (formula "17") (term "0,1,0")) + (rule "polySimp_rightDist" (formula "21") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "0,0,1,0")) + (rule "polySimp_rightDist" (formula "19") (term "1,0")) + (rule "polySimp_mulComm0" (formula "19") (term "0,1,0")) (rule "polySimp_rightDist" (formula "2") (term "1,0")) (rule "polySimp_mulComm0" (formula "2") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "17") (term "0")) + (rule "polySimp_addAssoc" (formula "19") (term "0")) (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "19") (term "1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0,1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0,1,0")) - (rule "polySimp_mulAssoc" (formula "19") (term "0,1,0,1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,0,1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "0,1,0,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0,1,0")) - (rule "polySimp_sepNegMonomial" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "polySimp_elimOne" (formula "17") (term "0")) + (rule "inEqSimp_homoInEq0" (formula "21") (term "1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "1,0,1,0")) + (rule "polySimp_rightDist" (formula "21") (term "1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "21") (term "1,1,0,1,0")) + (rule "polySimp_mulAssoc" (formula "21") (term "0,1,0,1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "0,0,1,0,1,0")) + (rule "polySimp_mulLiterals" (formula "21") (term "0,1,0,1,0")) + (rule "polySimp_addAssoc" (formula "21") (term "0,1,0")) + (rule "polySimp_sepNegMonomial" (formula "19")) + (rule "polySimp_mulLiterals" (formula "19") (term "0")) + (rule "polySimp_elimOne" (formula "19") (term "0")) (rule "polySimp_sepNegMonomial" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "19") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "0,1,0")) - (rule "inEqSimp_strengthen1" (formula "13") (ifseqformula "20")) - (rule "add_zero_right" (formula "13") (term "1")) - (rule "inEqSimp_contradEq7" (formula "20") (ifseqformula "13")) - (rule "times_zero_1" (formula "20") (term "1,0,0")) - (rule "add_zero_right" (formula "20") (term "0,0")) - (rule "leq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "false_right" (formula "20")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_right" (formula "4") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0,0") (ifseqformula "14")) - (rule "leq_literals" (formula "4") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0,0") (ifseqformula "14")) - (rule "leq_literals" (formula "3") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) + (rule "inEqSimp_sepNegMonomial1" (formula "21") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "21") (term "0,1,0")) + (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "22")) + (rule "add_zero_right" (formula "15") (term "1")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "9")) (rule "castDel" (formula "1") (term "1")) (rule "eqSymm" (formula "1")) @@ -2443,32 +1685,12 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_literals" (formula "1") (term "1,1,2,0")) (rule "times_zero_1" (formula "1") (term "1,2,0")) (rule "add_zero_right" (formula "1") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "13")) + (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "15")) (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) (rule "add_zero_right" (formula "1") (term "0,0,0,0")) (rule "leq_literals" (formula "1") (term "0,0,0")) (builtin "One Step Simplification" (formula "1")) (rule "eqSymm" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_right" (formula "2") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0,0") (ifseqformula "14")) - (rule "leq_literals" (formula "2") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "qeq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,0") (ifseqformula "9")) (rule "castDel" (formula "4") (term "0,0")) (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,0")) @@ -2485,105 +1707,12 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_literals" (formula "4") (term "1,1,2,0,0")) (rule "times_zero_1" (formula "4") (term "1,2,0,0")) (rule "add_zero_right" (formula "4") (term "2,0,0")) - (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,0") (ifseqformula "13")) + (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,0") (ifseqformula "15")) (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,0")) (rule "add_zero_right" (formula "4") (term "0,0,0,0,0")) (rule "leq_literals" (formula "4") (term "0,0,0,0")) (builtin "One Step Simplification" (formula "4")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "9")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1,2,1") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "3") (term "2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,1")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "2,1")) - (rule "add_literals" (formula "3") (term "1,1,2,1")) - (rule "times_zero_1" (formula "3") (term "1,2,1")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "13")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "1,0,0") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "1") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "14")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1") (ifseqformula "9")) - (rule "castDel" (formula "2") (term "0,1")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0,0,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0,0,0")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,0,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "polySimp_addComm0" (formula "2") (term "2,1,0")) - (rule "polySimp_sepPosMonomial" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1")) - (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) - (rule "polySimp_elimOne" (formula "2") (term "1,1")) - (rule "polySimp_mulAssoc" (formula "2") (term "0,1")) - (rule "polySimp_mulComm0" (formula "2") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "2") (term "0,1")) - (rule "polySimp_elimOne" (formula "2") (term "0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2") (term "1")) - (rule "times_zero_2" (formula "2") (term "1,0,1")) - (rule "add_zero_right" (formula "2") (term "0,1")) - (rule "polySimp_sepPosMonomial" (formula "2") (term "1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "13")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,1,0,0,0,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "23")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,1,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "3") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "8")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "9")) (rule "castDel" (formula "1") (term "1")) (rule "eqSymm" (formula "1")) (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) @@ -2593,7 +1722,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "12")) + (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "15")) (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) (rule "add_zero_right" (formula "1") (term "0,0,0,0")) (rule "leq_literals" (formula "1") (term "0,0,0")) @@ -2606,223 +1735,71 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_sepNegMonomial" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_left" (formula "2") (term "1,0,0,0,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "24")) (ifInst "" (formula "8")) (ifInst "" (formula "23")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,1,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "2") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "0,0") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "0,0")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,0,0")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "3") (term "2,0,0")) - (rule "applyEq" (formula "3") (term "1,2,0,0") (ifseqformula "1")) - (rule "polySimp_addAssoc" (formula "3") (term "2,0,0")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "2,0,0")) - (rule "add_literals" (formula "3") (term "1,1,2,0,0")) - (rule "times_zero_1" (formula "3") (term "1,2,0,0")) - (rule "add_zero_right" (formula "3") (term "2,0,0")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0,0")) - (rule "add_literals" (formula "3") (term "0,0,0,0,0")) - (rule "leq_literals" (formula "3") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "2,1")) - (rule "applyEq" (formula "2") (term "1,2,1") (ifseqformula "1")) - (rule "polySimp_addAssoc" (formula "2") (term "2,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,1")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "2,1")) - (rule "add_literals" (formula "2") (term "1,1,2,1")) - (rule "times_zero_1" (formula "2") (term "1,2,1")) - (rule "add_zero_right" (formula "2") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "2") (term "0,0,0,1")) - (rule "leq_literals" (formula "2") (term "0,0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "ifthenelse_split" (formula "16") (term "0")) - (branch "a[-1 + k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "17")) - (rule "mul_literals" (formula "17") (term "1,0")) - (rule "polySimp_addComm1" (formula "17") (term "0")) - (rule "polySimp_addComm0" (formula "17") (term "0,0")) - (rule "applyEq" (formula "1") (term "0,0,0") (ifseqformula "16")) - (rule "eqSymm" (formula "1") (term "0,0")) - (rule "replace_known_right" (formula "1") (term "0,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "1")) - (rule "polySimp_homoEq" (formula "1")) - (rule "times_zero_2" (formula "1") (term "1,0")) - (rule "add_zero_right" (formula "1") (term "0")) - (rule "applyEq" (formula "19") (term "1,0,0,0,1,0") (ifseqformula "16")) - (rule "polySimp_sepNegMonomial" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "polySimp_elimOne" (formula "17") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "20") (term "1,0") (ifseqformula "6")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "20") (inst "t=x_0")) - (rule "replace_known_right" (formula "20") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "20") (ifInst "" (formula "24"))) - (rule "times_zero_2" (formula "20") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "20")) - (rule "mul_literals" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "applyEq" (formula "20") (term "0,1,0") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial1" (formula "20")) - (rule "polySimp_mulLiterals" (formula "20") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "20") (ifseqformula "4")) - (rule "andLeft" (formula "20")) - (rule "inEqSimp_homoInEq1" (formula "20")) - (rule "polySimp_mulComm0" (formula "20") (term "1,0")) - (rule "polySimp_rightDist" (formula "20") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "20") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "20") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_literals" (formula "20") (term "0")) - (rule "leq_literals" (formula "20")) - (rule "closeFalse" (formula "20")) - ) - (branch "a[-1 + k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "16")) - (rule "times_zero_2" (formula "16") (term "1,0")) - (rule "add_zero_right" (formula "16") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "16")) - (rule "polySimp_mulLiterals" (formula "16") (term "0")) - (rule "polySimp_elimOne" (formula "16") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "20") (term "1,0") (ifseqformula "6")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "1")) - (rule "ifthenelse_split" (formula "2") (term "0")) - (branch "a[-1 + k_0] = x_0 TRUE" - (rule "polySimp_homoEq" (formula "3")) - (rule "mul_literals" (formula "3") (term "1,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "polySimp_addComm0" (formula "3") (term "0,0")) - (rule "applyEq" (formula "21") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "20") (term "1,0,0,0,1,0") (ifseqformula "2")) - (rule "polySimp_sepNegMonomial" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "allLeft" (formula "20") (inst "t=x_0")) - (builtin "One Step Simplification" (formula "20") (ifInst "" (formula "24"))) - (rule "mul_literals" (formula "20") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "20")) - (rule "mul_literals" (formula "20") (term "1,0")) - (rule "polySimp_addComm1" (formula "20") (term "0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0")) - (rule "polySimp_addComm0" (formula "20") (term "0,0,0")) - (rule "applyEq" (formula "20") (term "0,1,0") (ifseqformula "3")) - (rule "polySimp_mulComm0" (formula "20") (term "1,0")) - (rule "polySimp_rightDist" (formula "20") (term "1,0")) - (rule "mul_literals" (formula "20") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0,0")) - (rule "add_literals" (formula "20") (term "0,0,0,0")) - (rule "add_zero_left" (formula "20") (term "0,0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "20")) - (rule "polySimp_mulLiterals" (formula "20") (term "0")) - (rule "inEqSimp_contradInEq0" (formula "5") (ifseqformula "20")) - (rule "andLeft" (formula "5")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0")) - (rule "polySimp_rightDist" (formula "5") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "5") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "5") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "5") (term "0")) - (rule "add_literals" (formula "5") (term "1,1,0")) - (rule "times_zero_1" (formula "5") (term "1,0")) - (rule "add_zero_right" (formula "5") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "5") (term "0")) - (rule "add_literals" (formula "5") (term "1,1,0")) - (rule "times_zero_1" (formula "5") (term "1,0")) - (rule "add_literals" (formula "5") (term "0")) - (rule "leq_literals" (formula "5")) - (rule "closeFalse" (formula "5")) - ) - (branch "a[-1 + k_0] = x_0 FALSE" - (rule "polySimp_homoEq" (formula "2")) - (rule "times_zero_2" (formula "2") (term "1,0")) - (rule "add_zero_right" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "allLeft" (formula "19") (inst "t=x_0")) - (rule "eqSymm" (formula "19") (term "0,0,0,1")) - (rule "replace_known_right" (formula "19") (term "0,0,0,1") (ifseqformula "21")) - (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "25"))) - (rule "times_zero_2" (formula "19") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "19")) - (rule "times_zero_2" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "applyEq" (formula "19") (term "0,1,0") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial1" (formula "19")) - (rule "polySimp_mulLiterals" (formula "19") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "19") (ifseqformula "4")) - (rule "andLeft" (formula "19")) - (rule "inEqSimp_homoInEq1" (formula "19")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "19") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0")) - (rule "polySimp_addComm1" (formula "19") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "leq_literals" (formula "19")) - (rule "closeFalse" (formula "19")) - ) - ) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,0") (ifseqformula "9")) + (rule "castDel" (formula "4") (term "0,0")) + (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,0")) + (rule "mul_literals" (formula "4") (term "1,3,1,2,0,0")) + (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,0")) + (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,0")) + (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm0" (formula "4") (term "2,0,0")) + (rule "applyEq" (formula "4") (term "1,2,0,0") (ifseqformula "1")) + (rule "polySimp_addAssoc" (formula "4") (term "2,0,0")) + (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0")) + (rule "polySimp_pullOutFactor1b" (formula "4") (term "2,0,0")) + (rule "add_literals" (formula "4") (term "1,1,2,0,0")) + (rule "times_zero_1" (formula "4") (term "1,2,0,0")) + (rule "add_zero_right" (formula "4") (term "2,0,0")) + (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,0") (ifseqformula "15")) + (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,0")) + (rule "add_literals" (formula "4") (term "0,0,0,0,0")) + (rule "leq_literals" (formula "4") (term "0,0,0,0")) + (builtin "One Step Simplification" (formula "4")) + (rule "allLeft" (formula "21") (inst "t=x_0")) + (rule "eqSymm" (formula "21") (term "0,0,0,1")) + (rule "replace_known_right" (formula "21") (term "0") (ifseqformula "24")) + (builtin "One Step Simplification" (formula "21")) + (rule "applyEq" (formula "21") (term "0,0") (ifseqformula "1")) + (rule "polySimp_mulComm0" (formula "21") (term "0")) + (rule "polySimp_rightDist" (formula "21") (term "0")) + (rule "polySimp_mulLiterals" (formula "21") (term "1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "0,0")) + (rule "inEqSimp_homoInEq0" (formula "21")) + (rule "polySimp_mulComm0" (formula "21") (term "1,0")) + (rule "polySimp_rightDist" (formula "21") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "21") (term "1,1,0")) + (rule "polySimp_mulAssoc" (formula "21") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "21") (term "0,0,1,0")) + (rule "polySimp_mulLiterals" (formula "21") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "21") (term "0")) + (rule "polySimp_addComm1" (formula "21") (term "0,0")) + (rule "polySimp_pullOutFactor0b" (formula "21") (term "0")) + (rule "add_literals" (formula "21") (term "1,1,0")) + (rule "times_zero_1" (formula "21") (term "1,0")) + (rule "add_zero_right" (formula "21") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "21")) + (rule "polySimp_mulLiterals" (formula "21") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "4") (ifseqformula "21")) + (rule "andLeft" (formula "4")) + (rule "inEqSimp_homoInEq1" (formula "4")) + (rule "polySimp_mulComm0" (formula "4") (term "1,0")) + (rule "polySimp_rightDist" (formula "4") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,1,0")) + (rule "polySimp_elimOne" (formula "4") (term "1,1,0")) + (rule "polySimp_mulComm0" (formula "4") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "4") (term "0")) + (rule "polySimp_addComm1" (formula "4") (term "0,0")) + (rule "polySimp_pullOutFactor2b" (formula "4") (term "0")) + (rule "add_literals" (formula "4") (term "1,1,0")) + (rule "times_zero_1" (formula "4") (term "1,0")) + (rule "add_zero_right" (formula "4") (term "0")) + (rule "polySimp_pullOutFactor1b" (formula "4") (term "0")) + (rule "add_literals" (formula "4") (term "1,1,0")) + (rule "times_zero_1" (formula "4") (term "1,0")) + (rule "add_zero_right" (formula "4") (term "0")) + (rule "leq_literals" (formula "4")) + (rule "closeFalse" (formula "4")) ) ) ) @@ -2873,23 +1850,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "19")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "15")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) (rule "andLeft" (formula "3")) (rule "inEqSimp_homoInEq1" (formula "3")) @@ -2905,6 +1865,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "21")) (builtin "One Step Simplification" (formula "1")) (rule "notLeft" (formula "1")) + (rule "elim_double_block_2" (formula "21") (term "1")) (rule "postdecrement" (formula "21") (term "1")) (rule "compound_subtraction_1" (formula "21") (term "1") (inst "#v=i_6")) (rule "variableDeclarationAssign" (formula "21") (term "1")) @@ -2920,7 +1881,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "21") (term "0,1,0")) (rule "blockEmpty" (formula "21") (term "1")) (rule "postincrement" (formula "21") (term "1")) - (rule "compound_int_cast_expression" (formula "21") (term "1") (inst "#v=i_7")) + (rule "compound_reference_cast_expression_primitive" (formula "21") (term "1") (inst "#v=i_7")) (rule "variableDeclarationAssign" (formula "21") (term "1")) (rule "variableDeclaration" (formula "21") (term "1") (newnames "i_7")) (rule "remove_parentheses_right" (formula "21") (term "1")) @@ -2936,9 +1897,9 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "emptyModality" (formula "21") (term "1")) (builtin "One Step Simplification" (formula "21")) (rule "andRight" (formula "21")) - (branch + (branch "Case 1" (rule "andRight" (formula "21")) - (branch "Case 1" + (branch (rule "andRight" (formula "21")) (branch "Case 1" (rule "andRight" (formula "21")) @@ -2950,22 +1911,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "19")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "14")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) (rule "inEqSimp_contradInEq0" (formula "11") (ifseqformula "1")) (rule "qeq_literals" (formula "11") (term "0")) (builtin "One Step Simplification" (formula "11")) @@ -2987,23 +1934,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "19")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "14")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "13") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0")) - (rule "qeq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "1")) (rule "andLeft" (formula "2")) (rule "inEqSimp_homoInEq1" (formula "2")) @@ -3022,20 +1952,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) (rule "add_zero_left" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) (rule "inEqSimp_strengthen0" (formula "1") (ifseqformula "19")) (rule "add_zero_right" (formula "1") (term "1")) - (rule "inEqSimp_contradEq3" (formula "19") (ifseqformula "1")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "qeq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) (rule "inEqSimp_contradInEq0" (formula "14") (ifseqformula "1")) (rule "qeq_literals" (formula "14") (term "0")) (builtin "One Step Simplification" (formula "14")) @@ -3066,56 +1984,28 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "19")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "14")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "13") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0")) - (rule "qeq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) - (rule "nnf_imp2or" (formula "16") (term "0")) + (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0") (inst "l=l")) + (rule "eqSymm" (formula "16") (term "0,1")) + (rule "replace_known_left" (formula "16") (term "1,0,0,0,0") (ifseqformula "3")) + (builtin "One Step Simplification" (formula "16") (ifInst "" (formula "9")) (ifInst "" (formula "22")) (ifInst "" (formula "4")) (ifInst "" (formula "21")) (ifInst "" (formula "9"))) + (rule "measuredByCheckEmpty" (formula "16") (term "1,0") (ifseqformula "7")) + (builtin "One Step Simplification" (formula "16")) + (rule "inEqSimp_commuteLeq" (formula "16") (term "1,0")) + (rule "inEqSimp_commuteLeq" (formula "16") (term "0,0")) + (rule "replace_known_left" (formula "16") (term "0,0") (ifseqformula "11")) + (builtin "One Step Simplification" (formula "16")) + (rule "inEqSimp_subsumption1" (formula "16") (term "0") (ifseqformula "2")) + (rule "inEqSimp_homoInEq0" (formula "16") (term "0,0")) + (rule "polySimp_pullOutFactor1b" (formula "16") (term "0,0,0")) + (rule "add_literals" (formula "16") (term "1,1,0,0,0")) + (rule "times_zero_1" (formula "16") (term "1,0,0,0")) + (rule "add_zero_right" (formula "16") (term "0,0,0")) + (rule "qeq_literals" (formula "16") (term "0,0")) (builtin "One Step Simplification" (formula "16")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "8")) - (rule "andLeft" (formula "8")) - (rule "notLeft" (formula "8")) - (rule "notLeft" (formula "8")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "8")) (ifInst "" (formula "21")) (ifInst "" (formula "4")) (ifInst "" (formula "20")) (ifInst "" (formula "8"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0")) - (rule "replace_known_left" (formula "14") (term "0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_subsumption1" (formula "14") (term "0") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0")) - (rule "qeq_literals" (formula "14") (term "0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "0,1,0,0,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "22")) (ifInst "" (formula "3")) (ifInst "" (formula "4")) (ifInst "" (formula "21")) (ifInst "" (formula "15")) (ifInst "" (formula "8"))) - (rule "true_left" (formula "13")) (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "22")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "21")) (ifInst "" (formula "9"))) + (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "10")) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "23")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "22")) (ifInst "" (formula "10"))) (rule "bsum_induction_upper_concrete" (formula "1") (term "0,1")) (rule "replace_known_right" (formula "1") (term "0,1,1,0,1") (ifseqformula "20")) (builtin "One Step Simplification" (formula "1")) @@ -3128,1587 +2018,151 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_homoInEq0" (formula "1") (term "0")) (rule "times_zero_2" (formula "1") (term "1,0,0")) (rule "add_zero_right" (formula "1") (term "0,0")) - (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "15")) + (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "17")) (rule "eqSymm" (formula "1") (term "1")) (rule "inEqSimp_sepPosMonomial1" (formula "1") (term "0")) (rule "mul_literals" (formula "1") (term "1,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "11")) + (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "12")) (rule "leq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) (rule "applyEq" (formula "2") (term "0,0") (ifseqformula "1")) - (rule "inEqSimp_contradInEq1" (formula "16") (ifseqformula "2")) - (rule "andLeft" (formula "16")) - (rule "inEqSimp_homoInEq1" (formula "16")) - (rule "polySimp_mulComm0" (formula "16") (term "1,0")) - (rule "polySimp_rightDist" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "16") (term "0")) - (rule "polySimp_addComm1" (formula "16") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "16") (term "0")) - (rule "add_literals" (formula "16") (term "1,1,0")) - (rule "times_zero_1" (formula "16") (term "1,0")) - (rule "add_zero_right" (formula "16") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "16") (term "0")) - (rule "add_literals" (formula "16") (term "1,1,0")) - (rule "times_zero_1" (formula "16") (term "1,0")) - (rule "add_literals" (formula "16") (term "0")) - (rule "leq_literals" (formula "16")) - (rule "closeFalse" (formula "16")) + (rule "inEqSimp_contradInEq1" (formula "18") (ifseqformula "2")) + (rule "andLeft" (formula "18")) + (rule "inEqSimp_homoInEq1" (formula "18")) + (rule "polySimp_mulComm0" (formula "18") (term "1,0")) + (rule "polySimp_rightDist" (formula "18") (term "1,0")) + (rule "polySimp_mulComm0" (formula "18") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "18") (term "0")) + (rule "polySimp_addComm1" (formula "18") (term "0,0")) + (rule "polySimp_pullOutFactor1b" (formula "18") (term "0")) + (rule "add_literals" (formula "18") (term "1,1,0")) + (rule "times_zero_1" (formula "18") (term "1,0")) + (rule "add_zero_right" (formula "18") (term "0")) + (rule "polySimp_pullOutFactor1b" (formula "18") (term "0")) + (rule "add_literals" (formula "18") (term "1,1,0")) + (rule "times_zero_1" (formula "18") (term "1,0")) + (rule "add_literals" (formula "18") (term "0")) + (rule "leq_literals" (formula "18")) + (rule "closeFalse" (formula "18")) ) ) (branch "Case 2" - (rule "allRight" (formula "21") (inst "sk=x_0")) - (rule "impRight" (formula "21")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "22") (term "0,0") (ifseqformula "5")) - (rule "unlimit_BoyerMoore_count[I\bigint\bigint" (formula "22") (term "1,2,0,0,0")) - (rule "castDel" (formula "22") (term "0,0")) - (rule "notLeft" (formula "1")) - (rule "polySimp_elimSub" (formula "22") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "22") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_elimSub" (formula "22") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "22") (term "1,3,1,2,0,0")) - (rule "polySimp_mulComm0" (formula "22") (term "1,1")) - (rule "polySimp_addComm1" (formula "22") (term "0,2,0,0,0,2,0,0")) - (rule "add_literals" (formula "22") (term "0,0,2,0,0,0,2,0,0")) - (rule "add_zero_left" (formula "22") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm1" (formula "22") (term "3,1,2,0,0")) - (rule "add_literals" (formula "22") (term "0,3,1,2,0,0")) - (rule "add_zero_left" (formula "22") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "22") (term "2,0,0")) - (rule "polySimp_rightDist" (formula "22") (term "1,1")) - (rule "mul_literals" (formula "22") (term "0,1,1")) - (rule "polySimp_addAssoc" (formula "22") (term "1")) - (rule "polySimp_addComm1" (formula "22") (term "0,1")) - (rule "add_literals" (formula "22") (term "0,0,1")) - (rule "inEqSimp_ltToLeq" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "1") (term "0")) - (rule "inEqSimp_leqRight" (formula "22")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) - (rule "polySimp_rightDist" (formula "1") (term "0,1,0,0")) - (rule "mul_literals" (formula "1") (term "0,0,1,0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0,0")) - (rule "add_literals" (formula "1") (term "0,0,0,0")) - (rule "polySimp_sepPosMonomial" (formula "1") (term "0,0,1,0")) - (rule "mul_literals" (formula "1") (term "1,0,0,1,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "0,1")) - (rule "mul_literals" (formula "1") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,0,1")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0,0") (ifseqformula "11")) - (rule "add_zero_left" (formula "1") (term "0,0,0,0,0")) - (rule "mul_literals" (formula "1") (term "0,0,0,0,0")) - (rule "leq_literals" (formula "1") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "0")) - (rule "polySimp_rightDist" (formula "1") (term "0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_homoInEq1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1,0")) - (rule "polySimp_rightDist" (formula "1") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "1") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "20")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "20") (ifseqformula "14")) - (rule "times_zero_1" (formula "20") (term "1,0,0")) - (rule "add_zero_right" (formula "20") (term "0,0")) - (rule "leq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "false_right" (formula "20")) - (rule "inEqSimp_subsumption1" (formula "13") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0")) - (rule "qeq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) - (rule "nnf_imp2or" (formula "16") (term "0")) - (builtin "One Step Simplification" (formula "16")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,1") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "9")) (ifInst "" (formula "21")) (ifInst "" (formula "3")) (ifInst "" (formula "4")) (ifInst "" (formula "20"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0")) - (rule "replace_known_left" (formula "14") (term "0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0")) - (rule "inEqSimp_subsumption1" (formula "14") (term "0") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "14") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0")) - (rule "qeq_literals" (formula "14") (term "0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "8")) - (rule "andLeft" (formula "8")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "8")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "15") (term "0,1")) - (rule "replace_known_left" (formula "15") (term "1,0,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "15") (ifInst "" (formula "8")) (ifInst "" (formula "23")) (ifInst "" (formula "4")) (ifInst "" (formula "22")) (ifInst "" (formula "13")) (ifInst "" (formula "8"))) - (rule "true_left" (formula "15")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "9")) (ifInst "" (formula "23")) (ifInst "" (formula "4")) (ifInst "" (formula "22")) (ifInst "" (formula "9"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "15") (term "1") (ifseqformula "6")) - (rule "castDel" (formula "15") (term "1")) - (rule "eqSymm" (formula "15")) - (rule "polySimp_elimSub" (formula "15") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "15") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "15") (term "3,1,2,0")) - (rule "mul_literals" (formula "15") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "15") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "15") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "15") (term "2,0")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "9") (ifseqformula "6")) - (rule "true_left" (formula "9")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0") (ifseqformula "6")) - (rule "castDel" (formula "15") (term "0,0")) - (rule "polySimp_elimSub" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_elimSub" (formula "15") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "15") (term "1,3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "15") (term "2,0,0")) - (rule "applyEq" (formula "15") (term "0,0") (ifseqformula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "1,0,0,0,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "23")) (ifInst "" (formula "5")) (ifInst "" (formula "22")) (ifInst "" (formula "14"))) - (rule "measuredByCheckEmpty" (formula "13") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "0,0,0")) - (rule "replace_known_left" (formula "13") (term "0,0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_subsumption1" (formula "13") (term "0,0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0,0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0,0,0")) - (rule "qeq_literals" (formula "13") (term "0,0,0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1,1") (ifseqformula "6")) - (rule "castDel" (formula "2") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "2") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "23")) (ifInst "" (formula "5")) (ifInst "" (formula "6")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "4")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0,1,0") (ifseqformula "6")) - (rule "castDel" (formula "16") (term "0,0,1,0")) - (rule "eqSymm" (formula "16") (term "0,0,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,3,1,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "mul_literals" (formula "16") (term "1,0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "3,1,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "16") (term "2,0,0,1,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (ifseqformula "6")) - (rule "castDel" (formula "13") (term "1")) - (rule "polySimp_elimSub" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "13") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "13") (term "3,1,2,1")) - (rule "mul_literals" (formula "13") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "2,1")) - (rule "applyEq" (formula "13") (term "1") (ifseqformula "14")) - (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "1") (term "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "2") (term "1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "2,1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,1,0,0,0,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "6")) (ifInst "" (formula "7")) (ifInst "" (formula "23"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "1")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "3")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "2")) - (rule "applyEq" (formula "4") (term "0,0") (ifseqformula "2")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1,0,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "8"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "1")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "4")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "2"))) - (rule "true_left" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1")) - (rule "andLeft" (formula "1")) - (rule "applyEq" (formula "5") (term "0,1,1") (ifseqformula "1")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "1")) - (rule "applyEq" (formula "4") (term "1") (ifseqformula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "3")) (ifInst "" (formula "26")) (ifInst "" (formula "9")) (ifInst "" (formula "25")) (ifInst "" (formula "5")) (ifInst "" (formula "3"))) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "5") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "5") (term "0,1")) - (rule "replace_known_left" (formula "5") (term "1,0,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "5") (ifInst "" (formula "2")) (ifInst "" (formula "26")) (ifInst "" (formula "9")) (ifInst "" (formula "25")) (ifInst "" (formula "4")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "5")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "2")) (ifInst "" (formula "26")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "3")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_left" (formula "4") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "2")) (ifInst "" (formula "26")) (ifInst "" (formula "8")) (ifInst "" (formula "25")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "4")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "2") (ifseqformula "9")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "1") (term "1")) - (rule "eqSymm" (formula "1")) - (rule "polySimp_elimSub" (formula "1") (term "3,1,2,0")) - (rule "mul_literals" (formula "1") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "1")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "4") (term "0,1,0") (ifseqformula "1")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "qeq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_left" (formula "4") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "24")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "replace_known_left" (formula "4") (term "0,0,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_left" (formula "2") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "replace_known_left" (formula "2") (term "0,0,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "qeq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "1") (term "1")) - (rule "eqSymm" (formula "1")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "1") (term "3,1,2,0")) - (rule "mul_literals" (formula "1") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "1")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_left" (formula "3") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "replace_known_left" (formula "3") (term "0,0,0") (ifseqformula "13")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "4") (term "0,1,0") (ifseqformula "1")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "1")) - (rule "ifthenelse_split" (formula "16") (term "0")) - (branch "k_0 = 0 TRUE" - (rule "eqSymm" (formula "17")) - (rule "replace_known_left" (formula "19") (term "0,0,0,1,0") (ifseqformula "16")) - (builtin "One Step Simplification" (formula "19")) - (rule "times_zero_2" (formula "19") (term "0,1,0")) - (rule "replace_known_left" (formula "2") (term "0,0") (ifseqformula "16")) - (builtin "One Step Simplification" (formula "2")) - (rule "eqSymm" (formula "2")) - (rule "inEqSimp_homoInEq0" (formula "19") (term "1,0")) - (rule "times_zero_2" (formula "19") (term "1,0,1,0")) - (rule "add_zero_right" (formula "19") (term "0,1,0")) - (rule "applyEqRigid" (formula "17") (term "3,0") (ifseqformula "16")) - (rule "applyEqRigid" (formula "12") (term "0") (ifseqformula "16")) - (rule "qeq_literals" (formula "12")) - (rule "true_left" (formula "12")) - (rule "applyEq" (formula "1") (term "3,0") (ifseqformula "15")) - (rule "applyEqRigid" (formula "4") (term "3,0,1,1") (ifseqformula "15")) - (rule "applyEq" (formula "14") (term "1,0") (ifseqformula "15")) - (rule "bsum_lower_equals_upper" (formula "14") (term "0")) - (rule "eqSymm" (formula "14")) - (rule "applyEq" (formula "17") (term "3,0,0") (ifseqformula "15")) - (rule "applyEqRigid" (formula "5") (term "1,1") (ifseqformula "15")) - (rule "add_zero_right" (formula "5") (term "1")) - (rule "applyEqRigid" (formula "2") (term "3,0") (ifseqformula "15")) - (rule "applyEqRigid" (formula "3") (term "1,0") (ifseqformula "15")) - (rule "bsum_lower_equals_upper" (formula "3") (term "0")) - (rule "eqSymm" (formula "3")) - (rule "applyEqRigid" (formula "4") (term "0,2,0,0,0,0") (ifseqformula "15")) - (rule "applyEq" (formula "22") (term "0,2,0") (ifseqformula "15")) - (rule "applyEq" (formula "1") (term "3,1") (ifseqformula "15")) - (rule "applyEq" (formula "17") (term "0,1") (ifseqformula "15")) - (rule "add_zero_left" (formula "17") (term "1")) - (rule "applyEqRigid" (formula "4") (term "1,0,0,1") (ifseqformula "15")) - (rule "add_zero_right" (formula "4") (term "0,0,1")) - (rule "applyEq" (formula "17") (term "0,0") (ifseqformula "16")) - (rule "times_zero_2" (formula "17") (term "0")) - (rule "inEqSimp_commuteLeq" (formula "17")) - (rule "applyEq" (formula "14") (term "3,0") (ifseqformula "15")) - (rule "applyEq" (formula "4") (term "0,1,1") (ifseqformula "2")) - (rule "times_zero_2" (formula "4") (term "1,1")) - (rule "add_zero_right" (formula "4") (term "1")) - (rule "applyEq" (formula "3") (term "3,0") (ifseqformula "14")) - (rule "applyEqRigid" (formula "16") (term "0,0,1,0") (ifseqformula "13")) - (rule "add_zero_left" (formula "16") (term "0,1,0")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "2")) - (rule "inEqSimp_invertInEq1" (formula "16") (term "1,0")) - (rule "mul_literals" (formula "16") (term "1,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0")) - (rule "polySimp_elimOne" (formula "16") (term "0,1,0")) - (rule "inEqSimp_subsumption1" (formula "11") (ifseqformula "4")) - (rule "leq_literals" (formula "11") (term "0")) - (builtin "One Step Simplification" (formula "11")) - (rule "true_left" (formula "11")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "11")) - (rule "leq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) - (rule "inEqSimp_contradInEq1" (formula "14") (term "1,0") (ifseqformula "11")) - (rule "qeq_literals" (formula "14") (term "0,1,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "closeFalse" (formula "14")) + (rule "allRight" (formula "21") (inst "sk=x_0") (userinteraction)) + (rule "impRight" (formula "21") (userinteraction)) + (rule "instAll" (formula "22") (term "4,0,0") (ifseqformula "17") (userinteraction)) + (rule "impLeft" (formula "1") (userinteraction)) + (branch "Case 1" + (rule "close" (formula "18") (ifseqformula "1")) ) - (branch "k_0 = 0 FALSE" - (rule "replace_known_right" (formula "18") (term "0,0,0,1,0") (ifseqformula "19")) - (builtin "One Step Simplification" (formula "18")) - (rule "replace_known_right" (formula "2") (term "0,0") (ifseqformula "19")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "16")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_mulComm0" (formula "18") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0")) - (rule "polySimp_rightDist" (formula "18") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "0,0,1,0")) - (rule "polySimp_rightDist" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) - (rule "polySimp_rightDist" (formula "2") (term "1,0")) - (rule "polySimp_mulComm0" (formula "2") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "16") (term "0")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "18") (term "1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "1,0,1,0")) - (rule "polySimp_rightDist" (formula "18") (term "1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "1,1,0,1,0")) - (rule "polySimp_mulAssoc" (formula "18") (term "0,1,0,1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "0,0,1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "0,1,0,1,0")) - (rule "polySimp_addAssoc" (formula "18") (term "0,1,0")) - (rule "polySimp_sepNegMonomial" (formula "16")) - (rule "polySimp_mulLiterals" (formula "16") (term "0")) - (rule "polySimp_elimOne" (formula "16") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "18") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "0,1,0")) - (rule "inEqSimp_strengthen1" (formula "12") (ifseqformula "19")) - (rule "add_zero_right" (formula "12") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "12")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1,2,1") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "3") (term "2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,1")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "2,1")) - (rule "add_literals" (formula "3") (term "1,1,2,1")) - (rule "times_zero_1" (formula "3") (term "1,2,1")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "1") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "1") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_right" (formula "4") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "4") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_right" (formula "2") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,1,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "2") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "1") (term "1")) - (rule "eqSymm" (formula "1")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "1") (term "3,1,2,0")) - (rule "mul_literals" (formula "1") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "applyEq" (formula "1") (term "1,2,0") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "1") (term "2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "2,0")) - (rule "add_literals" (formula "1") (term "1,1,2,0")) - (rule "times_zero_1" (formula "1") (term "1,2,0")) - (rule "add_zero_right" (formula "1") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "eqSymm" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,1,0,0,0,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "24")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "3") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "4") (term "1,2,0,1,0") (ifseqformula "2")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "polySimp_addAssoc" (formula "4") (term "2,0,1,0,0")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "2,0,1,0,0")) - (rule "add_literals" (formula "4") (term "1,1,2,0,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,2,0,1,0,0")) - (rule "add_zero_right" (formula "4") (term "2,0,1,0,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,1,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,1,1")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0,1,1")) - (rule "leq_literals" (formula "4") (term "0,0,0,1,1")) - (builtin "One Step Simplification" (formula "4")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "0,1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0,1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0,1")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,0")) + (branch "Case 2" + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "23") (term "0,0") (ifseqformula "6") (userinteraction)) + (rule "unlimit_BoyerMoore_count[I\bigint\bigint" (formula "23") (term "1,2,0,0,0") (userinteraction)) + (rule "castDel" (formula "23") (term "0,0")) + (rule "notLeft" (formula "2")) + (rule "polySimp_elimSub" (formula "23") (term "0,2,0,0,0,2,0,0")) + (rule "mul_literals" (formula "23") (term "1,0,2,0,0,0,2,0,0")) + (rule "polySimp_elimSub" (formula "23") (term "3,1,2,0,0")) + (rule "mul_literals" (formula "23") (term "1,3,1,2,0,0")) + (rule "polySimp_mulComm0" (formula "23") (term "1,1")) + (rule "polySimp_addComm1" (formula "23") (term "0,2,0,0,0,2,0,0")) + (rule "add_literals" (formula "23") (term "0,0,2,0,0,0,2,0,0")) + (rule "add_zero_left" (formula "23") (term "0,2,0,0,0,2,0,0")) + (rule "polySimp_addComm1" (formula "23") (term "3,1,2,0,0")) + (rule "add_literals" (formula "23") (term "0,3,1,2,0,0")) + (rule "add_zero_left" (formula "23") (term "3,1,2,0,0")) + (rule "polySimp_addComm0" (formula "23") (term "2,0,0")) + (rule "polySimp_rightDist" (formula "23") (term "1,1")) + (rule "mul_literals" (formula "23") (term "0,1,1")) + (rule "polySimp_addAssoc" (formula "23") (term "1")) + (rule "polySimp_addComm1" (formula "23") (term "0,1")) + (rule "add_literals" (formula "23") (term "0,0,1")) + (rule "inEqSimp_ltToLeq" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "polySimp_addComm0" (formula "2") (term "2,1,0")) - (rule "polySimp_sepPosMonomial" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1")) - (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) - (rule "polySimp_elimOne" (formula "2") (term "1,1")) - (rule "polySimp_mulAssoc" (formula "2") (term "0,1")) - (rule "polySimp_mulComm0" (formula "2") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "2") (term "0,1")) - (rule "polySimp_elimOne" (formula "2") (term "0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2") (term "1")) - (rule "times_zero_2" (formula "2") (term "1,0,1")) - (rule "add_zero_right" (formula "2") (term "0,1")) - (rule "polySimp_sepPosMonomial" (formula "2") (term "1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "2") (term "1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,1") (ifseqformula "11")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "2") (term "0,0,0,1")) - (rule "leq_literals" (formula "2") (term "0,0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "24")) (ifInst "" (formula "6")) (ifInst "" (formula "7"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "3")) - (rule "polySimp_homoEq" (formula "1") (term "0,1")) - (rule "polySimp_mulComm0" (formula "1") (term "1,0,0,1")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0,1")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0,1")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0,1")) - (rule "polySimp_sepNegMonomial" (formula "1") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0,0,1")) - (rule "polySimp_elimOne" (formula "1") (term "0,0,1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "1,0,0") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "1") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "12")) - (rule "leq_literals" (formula "1") (term "0,0,0")) + (rule "inEqSimp_leqRight" (formula "23")) + (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) + (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) + (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) + (rule "polySimp_rightDist" (formula "1") (term "0,1,0,0")) + (rule "mul_literals" (formula "1") (term "0,0,1,0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0,0,0")) + (rule "add_literals" (formula "1") (term "0,0,0,0")) + (rule "polySimp_sepPosMonomial" (formula "1") (term "0,0,1,0")) + (rule "mul_literals" (formula "1") (term "1,0,0,1,0")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "polySimp_elimOne" (formula "3") (term "0")) + (rule "inEqSimp_sepPosMonomial1" (formula "1")) + (rule "polySimp_mulComm0" (formula "1") (term "1")) + (rule "polySimp_rightDist" (formula "1") (term "1")) + (rule "polySimp_rightDist" (formula "1") (term "0,1")) + (rule "mul_literals" (formula "1") (term "0,0,1")) + (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) + (rule "polySimp_elimOne" (formula "1") (term "1,0,1")) + (rule "inEqSimp_contradEq7" (formula "1") (term "0,0,0") (ifseqformula "12")) + (rule "add_zero_left" (formula "1") (term "0,0,0,0,0")) + (rule "mul_literals" (formula "1") (term "0,0,0,0,0")) + (rule "leq_literals" (formula "1") (term "0,0,0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_right" (formula "4") (term "0,1,0,0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "25")) (ifInst "" (formula "7")) (ifInst "" (formula "8"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "applyEq" (formula "4") (term "0,0,1") (ifseqformula "3")) - (rule "polySimp_homoEq" (formula "4") (term "0,1")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0,0,1")) - (rule "polySimp_rightDist" (formula "4") (term "1,0,0,1")) - (rule "polySimp_mulComm0" (formula "4") (term "0,1,0,0,1")) - (rule "polySimp_addAssoc" (formula "4") (term "0,0,1")) - (rule "polySimp_sepNegMonomial" (formula "4") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "4") (term "0,0,1")) - (rule "polySimp_elimOne" (formula "4") (term "0,0,1")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "4") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "1"))) - (rule "true_left" (formula "4")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0")) - (rule "polySimp_rightDist" (formula "2") (term "1,0")) - (rule "polySimp_mulComm0" (formula "2") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "2")) - (rule "polySimp_homoEq" (formula "1") (term "0,1")) - (rule "polySimp_mulComm0" (formula "1") (term "1,0,0,1")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0,1")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0,1")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0,1")) - (rule "polySimp_addComm1" (formula "1") (term "0,0,0,1")) - (rule "polySimp_pullOutFactor2b" (formula "1") (term "0,0,1")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1")) - (rule "add_zero_right" (formula "1") (term "0,0,1")) - (rule "applyEq" (formula "3") (term "1,1") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "3") (term "1")) - (rule "polySimp_addComm0" (formula "3") (term "0,1")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "1")) - (rule "add_literals" (formula "3") (term "1,1,1")) - (rule "times_zero_1" (formula "3") (term "1,1")) - (rule "add_zero_right" (formula "3") (term "1")) - (rule "polySimp_sepNegMonomial" (formula "1") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0,0,1")) - (rule "polySimp_elimOne" (formula "1") (term "0,0,1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "4") (term "1,2,0,1,0") (ifseqformula "2")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "polySimp_addAssoc" (formula "4") (term "2,0,1,0,0")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "2,0,1,0,0")) - (rule "add_literals" (formula "4") (term "1,1,2,0,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,2,0,1,0,0")) - (rule "add_zero_right" (formula "4") (term "2,0,1,0,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,1,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,1,1")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0,1,1")) - (rule "leq_literals" (formula "4") (term "0,0,0,1,1")) - (builtin "One Step Simplification" (formula "4")) - (rule "ifthenelse_split" (formula "16") (term "0")) - (branch "a[-1 + k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "17")) - (rule "mul_literals" (formula "17") (term "1,0")) - (rule "polySimp_addComm1" (formula "17") (term "0")) - (rule "polySimp_addComm0" (formula "17") (term "0,0")) - (rule "applyEq" (formula "2") (term "0,0,0") (ifseqformula "16")) - (rule "eqSymm" (formula "2") (term "0,0")) - (rule "replace_known_right" (formula "2") (term "0,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2")) - (rule "times_zero_2" (formula "2") (term "1,0")) - (rule "add_zero_right" (formula "2") (term "0")) - (rule "applyEq" (formula "19") (term "1,0,0,0,1,0") (ifseqformula "16")) - (rule "polySimp_sepNegMonomial" (formula "17")) - (rule "polySimp_mulLiterals" (formula "17") (term "0")) - (rule "polySimp_elimOne" (formula "17") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1,0,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "26")) (ifInst "" (formula "8")) (ifInst "" (formula "25"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "4")) - (rule "inEqSimp_subsumption1" (formula "1") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "1") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "2"))) - (rule "true_left" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1")) - (rule "andLeft" (formula "1")) - (rule "applyEq" (formula "5") (term "0,1,1") (ifseqformula "1")) - (rule "applyEq" (formula "4") (term "1") (ifseqformula "1")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "26")) (ifInst "" (formula "5")) (ifInst "" (formula "3"))) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "5") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "5") (term "0,1")) - (rule "replace_known_left" (formula "5") (term "0,1,0,0,0,0,0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "5") (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "26")) (ifInst "" (formula "4")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "5")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_right" (formula "4") (term "0,1,0,0") (ifseqformula "26")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "2")) (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "9")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_left" (formula "3") (term "1,0,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "2")) (ifInst "" (formula "27")) (ifInst "" (formula "9")) (ifInst "" (formula "26")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "9")) - (rule "castDel" (formula "1") (term "1")) - (rule "eqSymm" (formula "1")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "1") (term "3,1,2,0")) - (rule "mul_literals" (formula "1") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "applyEq" (formula "1") (term "0,0,1,2,0") (ifseqformula "17")) - (rule "eqSymm" (formula "1") (term "0,1,2,0")) - (rule "replace_known_right" (formula "1") (term "0,1,2,0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "1")) - (rule "add_zero_right" (formula "1") (term "2,0")) - (rule "applyEq" (formula "1") (term "2,0") (ifseqformula "3")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "13")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "eqSymm" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "5") (term "0,1,1") (ifseqformula "9")) - (rule "castDel" (formula "5") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "5") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "5") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_elimSub" (formula "5") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "5") (term "1,3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "applyEq" (formula "5") (term "0,0,1,2,0,1,0") (ifseqformula "17")) - (rule "eqSymm" (formula "5") (term "0,1,2,0,1,0")) - (rule "replace_known_right" (formula "5") (term "0,1,2,0,1,0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "5")) - (rule "add_zero_right" (formula "5") (term "2,0,1,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "applyEq" (formula "5") (term "2,0,1,0,0") (ifseqformula "3")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "inEqSimp_contradEq7" (formula "5") (term "0,0,1,1") (ifseqformula "13")) - (rule "times_zero_1" (formula "5") (term "1,0,0,0,0,1,1")) - (rule "add_zero_right" (formula "5") (term "0,0,0,0,1,1")) - (rule "leq_literals" (formula "5") (term "0,0,0,1,1")) - (builtin "One Step Simplification" (formula "5")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "2") (ifseqformula "9")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "0,0,1,2,1") (ifseqformula "16")) - (rule "eqSymm" (formula "3") (term "0,1,2,1")) - (rule "replace_known_right" (formula "3") (term "0,1,2,1") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "3")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "2,1") (ifseqformula "2")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "applyEq" (formula "2") (term "0,0,1,2,0") (ifseqformula "16")) - (rule "eqSymm" (formula "2") (term "0,1,2,0")) - (rule "replace_known_right" (formula "2") (term "0,1,2,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "2")) - (rule "add_zero_right" (formula "2") (term "2,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "eqSymm" (formula "2") (term "1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "onlyCreatedObjectsAreReferenced" (formula "20") (term "1,0") (ifseqformula "5")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_left" (formula "2") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "26")) (ifInst "" (formula "7")) (ifInst "" (formula "25")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,1,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "2") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_left" (formula "4") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "26")) (ifInst "" (formula "7")) (ifInst "" (formula "25")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "4") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,1,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,1,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "4") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "4") (term "0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,0,0") (ifseqformula "25")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "26")) (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "3") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0")) - (rule "polySimp_rightDist" (formula "2") (term "1,0")) - (rule "polySimp_mulComm0" (formula "2") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "applyEq" (formula "2") (term "0,0,0,1,0") (ifseqformula "16")) - (rule "eqSymm" (formula "2") (term "0,0,1,0")) - (rule "replace_known_right" (formula "2") (term "0,0,1,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "2")) - (rule "times_zero_2" (formula "2") (term "1,0")) - (rule "add_zero_right" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "4") (term "0,2,0,1,0") (ifseqformula "2")) - (rule "applyEq" (formula "4") (term "0,0,1,2,0,1,0") (ifseqformula "16")) - (rule "eqSymm" (formula "4") (term "0,1,2,0,1,0")) - (rule "replace_known_right" (formula "4") (term "0,1,2,0,1,0") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "4")) - (rule "add_zero_right" (formula "4") (term "2,0,1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,1,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,1,1")) - (rule "add_zero_right" (formula "4") (term "0,0,0,0,1,1")) - (rule "leq_literals" (formula "4") (term "0,0,0,1,1")) - (builtin "One Step Simplification" (formula "4")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "0,2,1") (ifseqformula "2")) - (rule "applyEq" (formula "3") (term "0,0,1,2,1") (ifseqformula "16")) - (rule "eqSymm" (formula "3") (term "0,1,2,1")) - (rule "replace_known_right" (formula "3") (term "0,1,2,1") (ifseqformula "22")) - (builtin "One Step Simplification" (formula "3")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "ifthenelse_split" (formula "4") (term "0,0")) - (branch "a[k_0] = x_0 TRUE" - (rule "mul_literals" (formula "5") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "mul_literals" (formula "5") (term "1,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0,0")) - (rule "add_literals" (formula "5") (term "0,0,0,0")) - (rule "applyEq" (formula "24") (term "0") (ifseqformula "4")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "allLeft" (formula "20") (inst "t=x_0")) - (rule "replace_known_right" (formula "20") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "20") (ifInst "" (formula "24"))) - (rule "times_zero_2" (formula "20") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "20")) - (rule "mul_literals" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "applyEq" (formula "20") (term "0,1,0") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial1" (formula "20")) - (rule "polySimp_mulLiterals" (formula "20") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "20") (ifseqformula "5")) - (rule "andLeft" (formula "20")) - (rule "inEqSimp_homoInEq1" (formula "20")) - (rule "polySimp_mulComm0" (formula "20") (term "1,0")) - (rule "polySimp_rightDist" (formula "20") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "20") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "20") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_literals" (formula "20") (term "0")) - (rule "leq_literals" (formula "20")) - (rule "closeFalse" (formula "20")) - ) - (branch "a[k_0] = x_0 FALSE" - (rule "times_zero_2" (formula "4") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "times_zero_2" (formula "4") (term "1,0")) - (rule "add_zero_right" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "allLeft" (formula "19") (inst "t=x_0")) - (rule "replace_known_right" (formula "19") (term "0,0,0,1") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "24"))) - (rule "times_zero_2" (formula "19") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "19")) - (rule "times_zero_2" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "applyEq" (formula "19") (term "0,1,0") (ifseqformula "2")) - (rule "inEqSimp_sepNegMonomial1" (formula "19")) - (rule "polySimp_mulLiterals" (formula "19") (term "0")) - (rule "inEqSimp_contradInEq2" (formula "4") (ifseqformula "19")) - (rule "greater_literals" (formula "4") (term "0,1,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "greater_literals" (formula "4") (term "0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "andLeft" (formula "4")) - (rule "polySimp_rightDist" (formula "4") (term "1")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1")) - (rule "polySimp_rightDist" (formula "4") (term "0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_mulComm0" (formula "4") (term "0,0")) - (rule "polySimp_rightDist" (formula "4") (term "0,1")) - (rule "mul_literals" (formula "4") (term "0,0,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0")) - (rule "polySimp_rightDist" (formula "4") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "4") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "4") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "4") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "4") (term "0")) - (rule "polySimp_addComm1" (formula "4") (term "0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0")) - (rule "add_literals" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0")) - (rule "add_literals" (formula "4") (term "1,1,0")) - (rule "times_zero_1" (formula "4") (term "1,0")) - (rule "add_zero_right" (formula "4") (term "0")) - (rule "leq_literals" (formula "4")) - (rule "closeFalse" (formula "4")) - ) - ) - (branch "a[-1 + k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "16")) - (rule "times_zero_2" (formula "16") (term "1,0")) - (rule "add_zero_right" (formula "16") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "16")) - (rule "polySimp_mulLiterals" (formula "16") (term "0")) - (rule "polySimp_elimOne" (formula "16") (term "0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1,0,1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "26")) (ifInst "" (formula "8")) (ifInst "" (formula "25"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "applyEq" (formula "1") (term "0,0,1") (ifseqformula "4")) - (rule "inEqSimp_subsumption1" (formula "1") (term "1,0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "1,1,0,0,1,0,0")) - (rule "times_zero_1" (formula "1") (term "1,0,0,1,0,0")) - (rule "add_literals" (formula "1") (term "0,0,1,0,0")) - (rule "qeq_literals" (formula "1") (term "0,1,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "1") (term "0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "2"))) - (rule "true_left" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1")) - (rule "andLeft" (formula "1")) - (rule "applyEq" (formula "5") (term "0,1,1") (ifseqformula "1")) - (rule "applyEq" (formula "4") (term "1") (ifseqformula "1")) - (rule "applyEq" (formula "3") (term "0,1") (ifseqformula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "3")) (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "26")) (ifInst "" (formula "5")) (ifInst "" (formula "3"))) - (rule "true_left" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "5") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "5") (term "0,1")) - (rule "replace_known_left" (formula "5") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "5") (ifInst "" (formula "2")) (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "26")) (ifInst "" (formula "4")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "5")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_left" (formula "4") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "2")) (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "26")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "0,1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_left" (formula "3") (term "1,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "2")) (ifInst "" (formula "27")) (ifInst "" (formula "8")) (ifInst "" (formula "26")) (ifInst "" (formula "5")) (ifInst "" (formula "2"))) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "5") (term "0,1,1") (ifseqformula "9")) - (rule "castDel" (formula "5") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "5") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "5") (term "1,3,1,2,0,1,1")) - (rule "polySimp_elimSub" (formula "5") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "5") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "5") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "applyEq" (formula "5") (term "1,2,0,1,0") (ifseqformula "3")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "polySimp_addAssoc" (formula "5") (term "2,0,1,0,0")) - (rule "polySimp_addComm0" (formula "5") (term "0,2,0,1,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "5") (term "2,0,1,0,0")) - (rule "add_literals" (formula "5") (term "1,1,2,0,1,0,0")) - (rule "times_zero_1" (formula "5") (term "1,2,0,1,0,0")) - (rule "add_zero_right" (formula "5") (term "2,0,1,0,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "inEqSimp_contradEq7" (formula "5") (term "0,0,1,1") (ifseqformula "13")) - (rule "times_zero_1" (formula "5") (term "1,0,0,0,0,1,1")) - (rule "add_zero_right" (formula "5") (term "0,0,0,0,1,1")) - (rule "leq_literals" (formula "5") (term "0,0,0,1,1")) - (builtin "One Step Simplification" (formula "5")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (ifseqformula "9")) - (rule "castDel" (formula "1") (term "1")) - (rule "eqSymm" (formula "1")) - (rule "polySimp_elimSub" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "1") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "1") (term "3,1,2,0")) - (rule "mul_literals" (formula "1") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "1") (term "2,0")) - (rule "applyEq" (formula "1") (term "1,2,0") (ifseqformula "3")) - (rule "polySimp_addAssoc" (formula "1") (term "2,0")) - (rule "polySimp_addComm0" (formula "1") (term "0,2,0")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "2,0")) - (rule "add_literals" (formula "1") (term "1,1,2,0")) - (rule "times_zero_1" (formula "1") (term "1,2,0")) - (rule "add_zero_right" (formula "1") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "1") (term "0,0") (ifseqformula "13")) - (rule "times_zero_1" (formula "1") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "1") (term "0,0,0,0")) - (rule "leq_literals" (formula "1") (term "0,0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "eqSymm" (formula "1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "2") (ifseqformula "9")) - (rule "true_left" (formula "2")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1,2,1") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "3") (term "2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,1")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "2,1")) - (rule "add_literals" (formula "3") (term "1,1,2,1")) - (rule "times_zero_1" (formula "3") (term "1,2,1")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0,1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "0,1")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0,0,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0,0,0")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0,0,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0,0,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,0")) + (rule "polySimp_mulComm0" (formula "1") (term "0")) + (rule "polySimp_rightDist" (formula "1") (term "0")) + (rule "polySimp_mulComm0" (formula "1") (term "0,0")) + (rule "inEqSimp_homoInEq1" (formula "1")) + (rule "polySimp_mulComm0" (formula "1") (term "1,0")) + (rule "polySimp_rightDist" (formula "1") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0")) + (rule "polySimp_mulAssoc" (formula "1") (term "0,1,0")) + (rule "polySimp_mulComm0" (formula "1") (term "0,0,1,0")) + (rule "polySimp_mulLiterals" (formula "1") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0")) + (rule "inEqSimp_sepNegMonomial0" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "0")) + (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "21")) + (rule "add_zero_right" (formula "15") (term "1")) + (rule "inEqSimp_contradEq7" (formula "21") (ifseqformula "15")) + (rule "times_zero_1" (formula "21") (term "1,0,0")) + (rule "add_literals" (formula "21") (term "0,0")) + (rule "leq_literals" (formula "21") (term "0")) + (builtin "One Step Simplification" (formula "21")) + (rule "false_right" (formula "21")) + (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "3")) + (rule "inEqSimp_homoInEq0" (formula "14") (term "0")) + (rule "polySimp_pullOutFactor1b" (formula "14") (term "0,0")) + (rule "add_literals" (formula "14") (term "1,1,0,0")) + (rule "times_zero_1" (formula "14") (term "1,0,0")) + (rule "add_zero_right" (formula "14") (term "0,0")) + (rule "qeq_literals" (formula "14") (term "0")) + (builtin "One Step Simplification" (formula "14")) + (rule "true_left" (formula "14")) + (rule "nnf_imp2or" (formula "17") (term "0")) + (builtin "One Step Simplification" (formula "17")) + (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "2") (term "0,0")) + (rule "ifthenelse_split" (formula "1") (term "0,0")) + (branch "a[k_0] = x_0 TRUE" + (rule "mul_literals" (formula "2") (term "0")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "mul_literals" (formula "2") (term "1,0")) (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "polySimp_addComm0" (formula "2") (term "2,1,0")) - (rule "polySimp_sepPosMonomial" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1")) - (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) - (rule "polySimp_elimOne" (formula "2") (term "1,1")) - (rule "polySimp_mulAssoc" (formula "2") (term "0,1")) - (rule "polySimp_mulComm0" (formula "2") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "2") (term "0,1")) - (rule "polySimp_elimOne" (formula "2") (term "0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2") (term "1")) - (rule "times_zero_2" (formula "2") (term "1,0,1")) - (rule "add_zero_right" (formula "2") (term "0,1")) - (rule "polySimp_sepPosMonomial" (formula "2") (term "1")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) + (rule "polySimp_addComm1" (formula "2") (term "0,0")) + (rule "polySimp_addComm1" (formula "2") (term "0,0,0")) (rule "add_literals" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "onlyCreatedObjectsAreReferenced" (formula "19") (term "0") (ifseqformula "5")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "1")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (inst "l=l")) - (rule "eqSymm" (formula "4") (term "0,1")) - (rule "replace_known_left" (formula "4") (term "1,0,0,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "4") (ifInst "" (formula "26")) (ifInst "" (formula "7")) (ifInst "" (formula "25")) (ifInst "" (formula "3"))) - (rule "measuredByCheckEmpty" (formula "4") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "0,0,0")) - (rule "inEqSimp_commuteLeq" (formula "4") (term "1,0,0")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "4") (term "0,0,0,0")) + (rule "applyEq" (formula "21") (term "0") (ifseqformula "1")) + (rule "inEqSimp_sepNegMonomial0" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "0")) + (rule "inEqSimp_contradInEq4" (formula "4") (ifseqformula "2")) + (rule "greater_literals" (formula "4") (term "0,0")) (builtin "One Step Simplification" (formula "4")) - (rule "inEqSimp_subsumption1" (formula "4") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "4") (term "0,0,0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0")) - (rule "add_literals" (formula "4") (term "0,0,0,0")) - (rule "qeq_literals" (formula "4") (term "0,0,0")) + (rule "greater_literals" (formula "4") (term "0,0")) (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "2") (term "0,1")) - (rule "replace_known_right" (formula "2") (term "0,1,1,0,0,0,0,0") (ifseqformula "26")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "25")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "2") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "2") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "2") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_subsumption1" (formula "2") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "2") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_literals" (formula "2") (term "0,0,0,0")) - (rule "qeq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "3") (term "0,1")) - (rule "replace_known_right" (formula "3") (term "0,1,1,0,0,0,0,0") (ifseqformula "26")) - (builtin "One Step Simplification" (formula "3") (ifInst "" (formula "7")) (ifInst "" (formula "8")) (ifInst "" (formula "25")) (ifInst "" (formula "4"))) - (rule "measuredByCheckEmpty" (formula "3") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "3") (term "0,0,0")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0,0") (ifseqformula "13")) - (rule "leq_literals" (formula "3") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_subsumption1" (formula "3") (term "0,0") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "3") (term "0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0,0,0,0")) - (rule "add_literals" (formula "3") (term "1,1,0,0,0,0")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,0")) - (rule "add_literals" (formula "3") (term "0,0,0,0")) - (rule "qeq_literals" (formula "3") (term "0,0,0")) - (builtin "One Step Simplification" (formula "3")) - (rule "true_left" (formula "3")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "4") (term "0,1,1") (ifseqformula "8")) - (rule "castDel" (formula "4") (term "0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "3,1,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,3,1,2,0,1,1")) - (rule "polySimp_elimSub" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "mul_literals" (formula "4") (term "1,0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "3,1,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "0,2,0,0,0,2,0,1,1")) - (rule "polySimp_addComm0" (formula "4") (term "2,0,1,1")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "inEqSimp_contradEq7" (formula "4") (term "0,0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "4") (term "1,0,0,0,0,0")) - (rule "add_literals" (formula "4") (term "0,0,0,0,0")) - (rule "leq_literals" (formula "4") (term "0,0,0,0")) - (builtin "One Step Simplification" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "0")) + (rule "andLeft" (formula "4")) + (rule "polySimp_rightDist" (formula "4") (term "1")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,1")) (rule "polySimp_rightDist" (formula "4") (term "0")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) (rule "polySimp_mulComm0" (formula "4") (term "0,0")) + (rule "polySimp_rightDist" (formula "4") (term "0,1")) + (rule "mul_literals" (formula "4") (term "0,0,1")) (rule "inEqSimp_homoInEq1" (formula "4")) (rule "polySimp_mulComm0" (formula "4") (term "1,0")) (rule "polySimp_rightDist" (formula "4") (term "1,0")) @@ -4718,263 +2172,44 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_mulLiterals" (formula "4") (term "0,1,0")) (rule "polySimp_addAssoc" (formula "4") (term "0")) (rule "polySimp_addComm1" (formula "4") (term "0,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "2") (term "1")) - (rule "eqSymm" (formula "2")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "inEqSimp_contradEq7" (formula "2") (term "0,0") (ifseqformula "12")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "polySimp_homoEq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0")) - (rule "polySimp_rightDist" (formula "2") (term "1,0")) - (rule "polySimp_mulComm0" (formula "2") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "applyEq" (formula "4") (term "0,0") (ifseqformula "2")) - (rule "polySimp_mulComm0" (formula "4") (term "0")) - (rule "polySimp_rightDist" (formula "4") (term "0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_mulComm0" (formula "4") (term "0,0")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0")) - (rule "polySimp_rightDist" (formula "4") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "4") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "4") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "4") (term "0,1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "polySimp_addAssoc" (formula "4") (term "0,0")) - (rule "polySimp_addComm1" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "3") (term "1") (ifseqformula "8")) - (rule "castDel" (formula "3") (term "1")) - (rule "polySimp_elimSub" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "3") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "3") (term "3,1,2,1")) - (rule "mul_literals" (formula "3") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "3") (term "2,1")) - (rule "applyEq" (formula "3") (term "1,2,1") (ifseqformula "2")) - (rule "polySimp_addAssoc" (formula "3") (term "2,1")) - (rule "polySimp_addComm0" (formula "3") (term "0,2,1")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "2,1")) - (rule "add_literals" (formula "3") (term "1,1,2,1")) - (rule "times_zero_1" (formula "3") (term "1,2,1")) - (rule "add_zero_right" (formula "3") (term "2,1")) - (rule "inEqSimp_contradEq7" (formula "3") (term "0,1") (ifseqformula "12")) - (rule "times_zero_1" (formula "3") (term "1,0,0,0,1")) - (rule "add_zero_right" (formula "3") (term "0,0,0,1")) - (rule "leq_literals" (formula "3") (term "0,0,1")) - (builtin "One Step Simplification" (formula "3")) - (rule "allLeft" (formula "18") (inst "t=x_0")) - (rule "eqSymm" (formula "18") (term "0,0,0,1")) - (rule "replace_known_right" (formula "18") (term "0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "18")) - (rule "applyEq" (formula "18") (term "0,0") (ifseqformula "2")) - (rule "polySimp_mulComm0" (formula "18") (term "0")) - (rule "polySimp_rightDist" (formula "18") (term "0")) - (rule "polySimp_mulLiterals" (formula "18") (term "1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "0,0")) - (rule "inEqSimp_homoInEq0" (formula "18")) - (rule "polySimp_mulComm0" (formula "18") (term "1,0")) - (rule "polySimp_rightDist" (formula "18") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "18") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "18") (term "0")) - (rule "polySimp_addComm1" (formula "18") (term "0,0")) - (rule "polySimp_pullOutFactor0b" (formula "18") (term "0")) - (rule "add_literals" (formula "18") (term "1,1,0")) - (rule "times_zero_1" (formula "18") (term "1,0")) - (rule "add_zero_right" (formula "18") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "18")) - (rule "polySimp_mulLiterals" (formula "18") (term "0")) - (rule "ifthenelse_split" (formula "2") (term "0")) - (branch "a[-1 + k_0] = x_0 TRUE" - (rule "polySimp_homoEq" (formula "3")) - (rule "mul_literals" (formula "3") (term "1,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "polySimp_addComm0" (formula "3") (term "0,0")) - (rule "applyEq" (formula "21") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "20") (term "1,0,0,0,1,0") (ifseqformula "2")) - (rule "polySimp_sepNegMonomial" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "ifthenelse_split" (formula "5") (term "0,0")) - (branch "a[k_0] = x_0 TRUE" - (rule "mul_literals" (formula "6") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "6")) - (rule "mul_literals" (formula "6") (term "1,0")) - (rule "polySimp_addComm1" (formula "6") (term "0")) - (rule "polySimp_addComm1" (formula "6") (term "0,0")) - (rule "polySimp_addComm1" (formula "6") (term "0,0,0")) - (rule "add_literals" (formula "6") (term "0,0,0,0")) - (rule "applyEq" (formula "25") (term "0") (ifseqformula "5")) - (rule "inEqSimp_sepNegMonomial0" (formula "6")) - (rule "polySimp_mulLiterals" (formula "6") (term "0")) - (rule "inEqSimp_contradInEq4" (formula "20") (ifseqformula "6")) - (rule "greater_literals" (formula "20") (term "0,0")) - (builtin "One Step Simplification" (formula "20")) - (rule "greater_literals" (formula "20") (term "0,0")) - (builtin "One Step Simplification" (formula "20")) - (rule "andLeft" (formula "20")) - (rule "polySimp_rightDist" (formula "20") (term "1")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1")) - (rule "polySimp_rightDist" (formula "20") (term "0")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,0")) - (rule "polySimp_mulComm0" (formula "20") (term "0,0")) - (rule "polySimp_rightDist" (formula "20") (term "0,1")) - (rule "mul_literals" (formula "20") (term "0,0,1")) - (rule "inEqSimp_homoInEq1" (formula "20")) - (rule "polySimp_mulComm0" (formula "20") (term "1,0")) - (rule "polySimp_rightDist" (formula "20") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "20") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "20") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "20") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addComm1" (formula "20") (term "0,0")) - (rule "polySimp_pullOutFactor0b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "polySimp_pullOutFactor0b" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,1,0")) - (rule "times_zero_1" (formula "20") (term "1,0")) - (rule "add_literals" (formula "20") (term "0")) - (rule "leq_literals" (formula "20")) - (rule "closeFalse" (formula "20")) - ) - (branch "a[k_0] = x_0 FALSE" - (rule "mul_literals" (formula "5") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "times_zero_2" (formula "5") (term "1,0")) - (rule "add_zero_right" (formula "5") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "19") (ifseqformula "5")) - (rule "andLeft" (formula "19")) - (rule "inEqSimp_homoInEq1" (formula "19")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "19") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0")) - (rule "polySimp_addComm1" (formula "19") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "leq_literals" (formula "19")) - (rule "closeFalse" (formula "19")) - ) - ) - (branch "a[-1 + k_0] = x_0 FALSE" - (rule "polySimp_homoEq" (formula "2")) - (rule "times_zero_2" (formula "2") (term "1,0")) - (rule "add_zero_right" (formula "2") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "ifthenelse_split" (formula "4") (term "0,0")) - (branch "a[k_0] = x_0 TRUE" - (rule "mul_literals" (formula "5") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "mul_literals" (formula "5") (term "1,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0,0")) - (rule "add_literals" (formula "5") (term "0,0,0,0")) - (rule "applyEq" (formula "26") (term "0") (ifseqformula "4")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "inEqSimp_contradInEq4" (formula "19") (ifseqformula "5")) - (rule "greater_literals" (formula "19") (term "0,1,0")) - (builtin "One Step Simplification" (formula "19")) - (rule "greater_literals" (formula "19") (term "0,0")) - (builtin "One Step Simplification" (formula "19")) - (rule "andLeft" (formula "19")) - (rule "polySimp_rightDist" (formula "19") (term "0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,0")) - (rule "polySimp_rightDist" (formula "19") (term "1")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1")) - (rule "polySimp_rightDist" (formula "19") (term "0,1")) - (rule "mul_literals" (formula "19") (term "0,0,1")) - (rule "inEqSimp_homoInEq1" (formula "19")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0")) - (rule "polySimp_mulAssoc" (formula "19") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "19") (term "0,0,1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0")) - (rule "polySimp_addComm1" (formula "19") (term "0,0")) - (rule "polySimp_pullOutFactor0b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "polySimp_pullOutFactor0b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "leq_literals" (formula "19")) - (rule "closeFalse" (formula "19")) - ) - (branch "a[k_0] = x_0 FALSE" - (rule "times_zero_2" (formula "4") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "times_zero_2" (formula "4") (term "1,0")) - (rule "add_zero_right" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "inEqSimp_contradInEq1" (formula "18") (ifseqformula "4")) - (rule "andLeft" (formula "18")) - (rule "inEqSimp_homoInEq1" (formula "18")) - (rule "polySimp_mulComm0" (formula "18") (term "1,0")) - (rule "polySimp_rightDist" (formula "18") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "18") (term "1,1,0")) - (rule "polySimp_elimOne" (formula "18") (term "1,1,0")) - (rule "polySimp_mulComm0" (formula "18") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "18") (term "0")) - (rule "polySimp_addComm1" (formula "18") (term "0,0")) - (rule "polySimp_pullOutFactor2b" (formula "18") (term "0")) - (rule "add_literals" (formula "18") (term "1,1,0")) - (rule "times_zero_1" (formula "18") (term "1,0")) - (rule "add_zero_right" (formula "18") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "18") (term "0")) - (rule "add_literals" (formula "18") (term "1,1,0")) - (rule "times_zero_1" (formula "18") (term "1,0")) - (rule "add_zero_right" (formula "18") (term "0")) - (rule "leq_literals" (formula "18")) - (rule "closeFalse" (formula "18")) - ) - ) + (rule "polySimp_pullOutFactor0b" (formula "4") (term "0,0,0")) + (rule "add_literals" (formula "4") (term "1,1,0,0,0")) + (rule "times_zero_1" (formula "4") (term "1,0,0,0")) + (rule "add_zero_right" (formula "4") (term "0,0,0")) + (rule "polySimp_pullOutFactor0b" (formula "4") (term "0")) + (rule "add_literals" (formula "4") (term "1,1,0")) + (rule "times_zero_1" (formula "4") (term "1,0")) + (rule "add_zero_right" (formula "4") (term "0")) + (rule "leq_literals" (formula "4")) + (rule "closeFalse" (formula "4")) + ) + (branch "a[k_0] = x_0 FALSE" + (rule "times_zero_2" (formula "1") (term "0")) + (rule "inEqSimp_homoInEq1" (formula "1")) + (rule "times_zero_2" (formula "1") (term "1,0")) + (rule "add_zero_right" (formula "1") (term "0")) + (rule "inEqSimp_sepNegMonomial0" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "0")) + (rule "inEqSimp_contradInEq1" (formula "3") (ifseqformula "1")) + (rule "andLeft" (formula "3")) + (rule "inEqSimp_homoInEq1" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "1,0")) + (rule "polySimp_rightDist" (formula "3") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "3") (term "1,1,0")) + (rule "polySimp_elimOne" (formula "3") (term "1,1,0")) + (rule "polySimp_mulComm0" (formula "3") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "3") (term "0")) + (rule "polySimp_addComm1" (formula "3") (term "0,0")) + (rule "polySimp_pullOutFactor2b" (formula "3") (term "0")) + (rule "add_literals" (formula "3") (term "1,1,0")) + (rule "times_zero_1" (formula "3") (term "1,0")) + (rule "add_zero_right" (formula "3") (term "0")) + (rule "polySimp_pullOutFactor1b" (formula "3") (term "0")) + (rule "add_literals" (formula "3") (term "1,1,0")) + (rule "times_zero_1" (formula "3") (term "1,0")) + (rule "add_literals" (formula "3") (term "0")) + (rule "leq_literals" (formula "3")) + (rule "closeFalse" (formula "3")) ) ) ) @@ -5026,23 +2261,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "19")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "19") (ifseqformula "14")) - (rule "times_zero_1" (formula "19") (term "1,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0")) - (rule "leq_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "false_right" (formula "19")) - (rule "inEqSimp_subsumption1" (formula "13") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0")) - (rule "qeq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "1")) (rule "andLeft" (formula "2")) (rule "inEqSimp_homoInEq1" (formula "2")) @@ -5061,7 +2279,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) (branch "Index Out of Bounds (mc == 0 != null, but k < _a.length Out of Bounds!)" (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "20"))) - (rule "false_right" (formula "21")) (rule "inEqSimp_ltToLeq" (formula "2")) (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) (rule "polySimp_addComm1" (formula "2") (term "0")) @@ -5073,14 +2290,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_elimOne" (formula "2") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1") (term "1")) (rule "mul_literals" (formula "1") (term "1,1")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "18")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "18") (ifseqformula "14")) - (rule "times_zero_1" (formula "18") (term "1,0,0")) - (rule "add_zero_right" (formula "18") (term "0,0")) - (rule "leq_literals" (formula "18") (term "0")) - (builtin "One Step Simplification" (formula "18")) - (rule "false_right" (formula "18")) (rule "inEqSimp_contradInEq1" (formula "1") (term "0") (ifseqformula "2")) (rule "inEqSimp_homoInEq1" (formula "1") (term "0,0")) (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0")) @@ -5089,15 +2298,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "add_zero_right" (formula "1") (term "0,0,0")) (rule "leq_literals" (formula "1") (term "0,0")) (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_subsumption1" (formula "13") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,1,0,0")) - (rule "times_zero_1" (formula "13") (term "1,0,0")) - (rule "add_zero_right" (formula "13") (term "0,0")) - (rule "qeq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "true_left" (formula "13")) (rule "inEqSimp_contradInEq0" (formula "11") (ifseqformula "1")) (rule "qeq_literals" (formula "11") (term "0")) (builtin "One Step Simplification" (formula "11")) @@ -5160,21 +2360,21 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "18")) (rule "ifSplit" (formula "18")) (branch "if mc == 0 true" - (builtin "One Step Simplification" (formula "19")) (builtin "One Step Simplification" (formula "1")) - (rule "applyEqRigid" (formula "14") (term "1,1") (ifseqformula "1")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "applyEqRigid" (formula "15") (term "0,1,1,1,0") (ifseqformula "1")) - (rule "times_zero_2" (formula "15") (term "1,1,1,0")) - (rule "add_zero_right" (formula "15") (term "1,1,0")) + (builtin "One Step Simplification" (formula "19")) (rule "applyEq" (formula "12") (term "0") (ifseqformula "1")) (rule "qeq_literals" (formula "12")) (rule "true_left" (formula "12")) + (rule "applyEq" (formula "13") (term "1,1") (ifseqformula "1")) + (rule "add_zero_right" (formula "13") (term "1")) + (rule "applyEqRigid" (formula "14") (term "0,1,1,1,0") (ifseqformula "1")) + (rule "times_zero_2" (formula "14") (term "1,1,1,0")) + (rule "add_zero_right" (formula "14") (term "1,1,0")) (rule "returnUnfold" (formula "18") (term "1") (inst "#v0=i_2")) (rule "variableDeclarationAssign" (formula "18") (term "1")) (rule "variableDeclaration" (formula "18") (term "1") (newnames "i_2")) (rule "activeUseStaticFieldReadAccess" (formula "18") (term "1")) - (rule "assignment_read_static_attribute" (formula "18") (term "1")) + (rule "assignment_read_static_attribute_final" (formula "18") (term "1")) (builtin "One Step Simplification" (formula "18")) (rule "methodCallReturn" (formula "18") (term "1")) (builtin "One Step Simplification" (formula "18")) @@ -5191,72 +2391,20 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "impRight" (formula "18")) (builtin "One Step Simplification" (formula "1")) - (builtin "One Step Simplification" (formula "19")) - (rule "inEqSimp_ltRight" (formula "16")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "19")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepPosMonomial0" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1")) - (rule "polySimp_elimOne" (formula "1") (term "1")) - (rule "inEqSimp_antiSymm" (formula "14") (ifseqformula "2")) - (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "14")) - (rule "applyEq" (formula "1") (term "3,0") (ifseqformula "14")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "14")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "14") (term "0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq1" (formula "14")) - (rule "polySimp_pullOutFactor1" (formula "14") (term "0")) - (rule "add_literals" (formula "14") (term "1,0")) - (rule "times_zero_1" (formula "14") (term "0")) - (rule "leq_literals" (formula "14")) - (rule "true_left" (formula "14")) - (rule "nnf_imp2or" (formula "16") (term "0")) - (builtin "One Step Simplification" (formula "16")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0") (ifseqformula "5")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "10")) (ifInst "" (formula "19")) (ifInst "" (formula "4")) (ifInst "" (formula "18")) (ifInst "" (formula "10"))) - (rule "measuredByCheckEmpty" (formula "14") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0,0")) - (rule "replace_known_left" (formula "14") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "14")) - (rule "inEqSimp_commuteLeq" (formula "14") (term "0")) - (rule "applyEq" (formula "14") (term "0,0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq1" (formula "14") (term "0")) - (rule "polySimp_pullOutFactor1" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,0,0")) - (rule "times_zero_1" (formula "14") (term "0,0")) - (rule "leq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "16") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "16") (term "0,1")) - (rule "replace_known_left" (formula "16") (term "0,1,0,0,0,0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "16") (ifInst "" (formula "20")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "19")) (ifInst "" (formula "14")) (ifInst "" (formula "10"))) - (rule "true_left" (formula "16")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "9")) - (rule "andLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "notLeft" (formula "9")) - (rule "close" (formula "17") (ifseqformula "2")) + (rule "nnf_imp2or" (formula "15") (term "0")) + (builtin "One Step Simplification" (formula "15")) + (rule "allLeft" (formula "15") (inst "t=int::select(heap, + IntOpt::final(null, IntOpt::$NONE), + IntOpt::$value)")) + (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_2" (formula "8")) + (rule "notLeft" (formula "8")) + (rule "close" (formula "17") (ifseqformula "1")) ) (branch "Case 2" (rule "andRight" (formula "18")) (branch "Case 1" (rule "impRight" (formula "18")) - (builtin "One Step Simplification" (formula "1")) (builtin "One Step Simplification" (formula "19")) - (rule "notLeft" (formula "1")) (rule "notRight" (formula "19")) (rule "exLeft" (formula "1") (inst "sk=m_0")) (rule "inEqSimp_ltRight" (formula "17")) @@ -5270,623 +2418,101 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepPosMonomial1" (formula "2")) (rule "polySimp_mulComm0" (formula "2") (term "1")) (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "mul_literals" (formula "2") (term "0,1")) (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) + (rule "mul_literals" (formula "2") (term "0,1")) (rule "polySimp_elimOne" (formula "2") (term "1,1")) - (rule "inEqSimp_antiSymm" (formula "13") (ifseqformula "1")) - (rule "applyEq" (formula "14") (term "0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq1" (formula "14")) - (rule "polySimp_pullOutFactor1" (formula "14") (term "0")) - (rule "add_literals" (formula "14") (term "1,0")) - (rule "times_zero_1" (formula "14") (term "0")) - (rule "leq_literals" (formula "14")) - (rule "true_left" (formula "14")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEq" (formula "1") (term "3,0") (ifseqformula "12")) - (rule "applyEq" (formula "1") (term "0,1,1") (ifseqformula "12")) - (rule "nnf_imp2or" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "1,0,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "9")) (ifInst "" (formula "19")) (ifInst "" (formula "4")) (ifInst "" (formula "18")) (ifInst "" (formula "9"))) - (rule "measuredByCheckEmpty" (formula "13") (term "1,0") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "0,0")) - (rule "replace_known_left" (formula "13") (term "0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "13")) - (rule "applyEq" (formula "13") (term "0,0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "13") (term "0")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0,0")) - (rule "add_literals" (formula "13") (term "1,0,0")) - (rule "times_zero_1" (formula "13") (term "0,0")) - (rule "leq_literals" (formula "13") (term "0")) - (builtin "One Step Simplification" (formula "13")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "8")) - (rule "andLeft" (formula "8")) - (rule "notLeft" (formula "8")) - (rule "notLeft" (formula "8")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "14") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "14") (term "0,1")) - (rule "replace_known_left" (formula "14") (term "1,0,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "14") (ifInst "" (formula "8")) (ifInst "" (formula "20")) (ifInst "" (formula "4")) (ifInst "" (formula "19")) (ifInst "" (formula "12")) (ifInst "" (formula "8"))) - (rule "true_left" (formula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "0") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "1,0,0,0,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "9")) (ifInst "" (formula "20")) (ifInst "" (formula "5")) (ifInst "" (formula "19")) (ifInst "" (formula "9"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0")) - (rule "applyEq" (formula "1") (term "0,0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "1") (term "0")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0,0")) - (rule "add_literals" (formula "1") (term "1,0,0")) - (rule "times_zero_1" (formula "1") (term "0,0")) - (rule "leq_literals" (formula "1") (term "0")) - (builtin "One Step Simplification" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "14") (term "1") (ifseqformula "6")) - (rule "castDel" (formula "14") (term "1")) - (rule "eqSymm" (formula "14")) - (rule "polySimp_elimSub" (formula "14") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "14") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_elimSub" (formula "14") (term "3,1,2,0")) - (rule "mul_literals" (formula "14") (term "1,3,1,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "14") (term "2,0")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "9") (ifseqformula "6")) - (rule "true_left" (formula "9")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "14") (term "0,0") (ifseqformula "6")) - (rule "castDel" (formula "14") (term "0,0")) - (rule "polySimp_elimSub" (formula "14") (term "3,1,2,0,0")) - (rule "mul_literals" (formula "14") (term "1,3,1,2,0,0")) - (rule "polySimp_elimSub" (formula "14") (term "0,2,0,0,0,2,0,0")) - (rule "mul_literals" (formula "14") (term "1,0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "14") (term "3,1,2,0,0")) - (rule "polySimp_addComm0" (formula "14") (term "0,2,0,0,0,2,0,0")) - (rule "polySimp_addComm0" (formula "14") (term "2,0,0")) - (rule "applyEq" (formula "14") (term "0,0") (ifseqformula "13")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "12") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "12") (term "0,1")) - (rule "replace_known_right" (formula "12") (term "0,1,1,0,0,0,0,0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "12") (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "19")) (ifInst "" (formula "13"))) - (rule "measuredByCheckEmpty" (formula "12") (term "1,0") (ifseqformula "8")) - (builtin "One Step Simplification" (formula "12")) - (rule "inEqSimp_commuteLeq" (formula "12") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "12") (term "0,0,0")) - (rule "replace_known_left" (formula "12") (term "0,0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "12")) - (rule "applyEq" (formula "12") (term "0,0,0") (ifseqformula "11")) - (rule "inEqSimp_homoInEq1" (formula "12") (term "0,0")) - (rule "polySimp_pullOutFactor1" (formula "12") (term "0,0,0")) - (rule "add_literals" (formula "12") (term "1,0,0,0")) - (rule "times_zero_1" (formula "12") (term "0,0,0")) - (rule "leq_literals" (formula "12") (term "0,0")) - (builtin "One Step Simplification" (formula "12")) - (rule "true_left" (formula "12")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "0") (ifseqformula "6")) - (rule "castDel" (formula "2") (term "0")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,0")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,0")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,0")) - (rule "polySimp_addComm0" (formula "2") (term "2,0")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "15") (term "0,0,1,0") (ifseqformula "6")) - (rule "castDel" (formula "15") (term "0,0,1,0")) - (rule "eqSymm" (formula "15") (term "0,0,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "15") (term "3,1,2,0,0,1,0")) - (rule "mul_literals" (formula "15") (term "1,3,1,2,0,0,1,0")) - (rule "polySimp_elimSub" (formula "15") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "mul_literals" (formula "15") (term "1,0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "15") (term "3,1,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "15") (term "0,2,1,0,0,2,0,0,1,0")) - (rule "polySimp_addComm0" (formula "15") (term "2,0,0,1,0")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "1") (term "1") (inst "l=l")) - (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,1,0,0,0,0,0") (ifseqformula "20")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "5")) (ifInst "" (formula "6")) (ifInst "" (formula "19")) (ifInst "" (formula "2"))) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0,0")) - (rule "inEqSimp_commuteLeq" (formula "1") (term "0,0,0")) - (rule "replace_known_left" (formula "1") (term "0,0,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "1")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "13") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "13") (term "1")) - (rule "polySimp_elimSub" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "13") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "13") (term "3,1,2,1")) - (rule "mul_literals" (formula "13") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "13") (term "2,1")) - (rule "applyEq" (formula "13") (term "1") (ifseqformula "14")) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "2") (term "1") (ifseqformula "7")) - (rule "castDel" (formula "2") (term "1")) - (rule "polySimp_elimSub" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "mul_literals" (formula "2") (term "1,0,2,0,0,0,2,1")) - (rule "polySimp_elimSub" (formula "2") (term "3,1,2,1")) - (rule "mul_literals" (formula "2") (term "1,3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "0,2,0,0,0,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "3,1,2,1")) - (rule "polySimp_addComm0" (formula "2") (term "2,1")) - (rule "Class_invariant_axiom_for_BoyerMoore" (formula "1") (term "1") (ifseqformula "7")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) + (rule "inEqSimp_antiSymm" (formula "14") (ifseqformula "1")) + (rule "applyEq" (formula "2") (term "0,1,1") (ifseqformula "14")) + (rule "applyEq" (formula "2") (term "3,0") (ifseqformula "14")) + (rule "nnf_imp2or" (formula "18") (term "0")) + (builtin "One Step Simplification" (formula "18")) (rule "jdiv_axiom" (formula "2") (term "1,1")) (rule "eqSymm" (formula "2")) - (rule "replace_known_left" (formula "2") (term "0,0") (ifseqformula "11")) + (rule "replace_known_left" (formula "2") (term "0,0") (ifseqformula "14")) (builtin "One Step Simplification" (formula "2")) (rule "eqSymm" (formula "2")) - (rule "applyEq" (formula "3") (term "1,1") (ifseqformula "2")) - (rule "ifthenelse_split" (formula "14") (term "0")) - (branch "k_0 = 0 TRUE" - (rule "eqSymm" (formula "15")) - (rule "replace_known_left" (formula "17") (term "0,0,0,1,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "17")) - (rule "times_zero_2" (formula "17") (term "0,1,0")) - (rule "replace_known_left" (formula "1") (term "0,1") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "1")) - (rule "replace_known_left" (formula "3") (term "0,0") (ifseqformula "14")) - (builtin "One Step Simplification" (formula "3")) - (rule "inEqSimp_commuteLeq" (formula "17") (term "1,0")) - (rule "replace_known_left" (formula "17") (term "1,0") (ifseqformula "11")) - (builtin "One Step Simplification" (formula "17")) - (rule "true_left" (formula "17")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "times_zero_2" (formula "3") (term "1,0")) - (rule "add_zero_right" (formula "3") (term "0")) - (rule "applyEqRigid" (formula "2") (term "0,0") (ifseqformula "14")) - (rule "eqSymm" (formula "2")) - (rule "jdiv_axiom_inline" (formula "2") (term "1")) - (rule "div_literals" (formula "2") (term "1,1")) - (rule "times_zero_2" (formula "2") (term "0,0,2,1")) - (rule "qeq_literals" (formula "2") (term "0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "applyEqRigid" (formula "16") (term "3,0,0") (ifseqformula "14")) - (rule "applyEq" (formula "13") (term "1,0") (ifseqformula "14")) - (rule "bsum_lower_equals_upper" (formula "13") (term "0")) - (rule "eqSymm" (formula "13")) - (rule "applyEq" (formula "14") (term "3,0") (ifseqformula "13")) - (rule "applyEq" (formula "11") (term "0") (ifseqformula "13")) - (rule "qeq_literals" (formula "11")) - (rule "true_left" (formula "11")) - (rule "applyEqRigid" (formula "14") (term "1") (ifseqformula "12")) - (rule "applyEqRigid" (formula "1") (term "1,0") (ifseqformula "12")) - (rule "bsum_lower_equals_upper" (formula "1") (term "0")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEqRigid" (formula "2") (term "0,1,0") (ifseqformula "11")) - (rule "div_literals" (formula "2") (term "1,0")) - (rule "add_zero_right" (formula "2") (term "0")) - (rule "leq_literals" (formula "2")) - (rule "closeFalse" (formula "2")) + (rule "applyEqRigid" (formula "3") (term "1,1") (ifseqformula "2")) + (rule "div_axiom" (formula "2") (term "1") (inst "quotient=quotient_0")) + (rule "mul_literals" (formula "2") (term "1,1,1,1,1")) + (rule "qeq_literals" (formula "2") (term "0,1,1")) + (builtin "One Step Simplification" (formula "2")) + (rule "equal_literals" (formula "2") (term "0")) + (builtin "One Step Simplification" (formula "2")) + (rule "andLeft" (formula "2")) + (rule "andLeft" (formula "2")) + (rule "polySimp_addComm1" (formula "4") (term "1")) + (rule "add_literals" (formula "4") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "4")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) + (rule "polySimp_addComm1" (formula "4") (term "0")) + (rule "applyEqRigid" (formula "6") (term "1,1") (ifseqformula "2")) + (rule "inEqSimp_sepPosMonomial0" (formula "4")) + (rule "polySimp_mulComm0" (formula "4") (term "1")) + (rule "polySimp_rightDist" (formula "4") (term "1")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,1")) + (rule "mul_literals" (formula "4") (term "0,1")) + (rule "allLeft" (formula "22") (inst "t=m_0")) + (rule "eqSymm" (formula "22") (term "0")) + (rule "cut_direct" (formula "22") (term "1")) + (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 TRUE" + (rule "inEqSimp_exactShadow2" (formula "6") (ifseqformula "22")) + (rule "greater_literals" (formula "6") (term "0")) + (builtin "One Step Simplification" (formula "6")) + (rule "polySimp_rightDist" (formula "6") (term "1,0,0")) + (rule "mul_literals" (formula "6") (term "0,1,0,0")) + (rule "polySimp_rightDist" (formula "6") (term "0,0")) + (rule "polySimp_mulLiterals" (formula "6") (term "1,0,0")) + (rule "mul_literals" (formula "6") (term "0,0,0")) + (rule "inEqSimp_sepPosMonomial1" (formula "6")) + (rule "polySimp_mulComm0" (formula "6") (term "1")) + (rule "polySimp_rightDist" (formula "6") (term "1")) + (rule "polySimp_mulLiterals" (formula "6") (term "1,1")) + (rule "mul_literals" (formula "6") (term "0,1")) + (rule "inEqSimp_contradInEq1" (formula "4") (ifseqformula "6")) + (rule "andLeft" (formula "4")) + (rule "inEqSimp_homoInEq1" (formula "4")) + (rule "polySimp_mulComm0" (formula "4") (term "1,0")) + (rule "polySimp_rightDist" (formula "4") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "4") (term "1,1,0")) + (rule "mul_literals" (formula "4") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "4") (term "0")) + (rule "polySimp_addComm1" (formula "4") (term "0,0")) + (rule "add_literals" (formula "4") (term "0,0,0")) + (rule "polySimp_pullOutFactor0b" (formula "4") (term "0")) + (rule "add_literals" (formula "4") (term "1,1,0")) + (rule "times_zero_1" (formula "4") (term "1,0")) + (rule "add_zero_right" (formula "4") (term "0")) + (rule "leq_literals" (formula "4")) + (rule "closeFalse" (formula "4")) ) - (branch "k_0 = 0 FALSE" - (rule "replace_known_right" (formula "1") (term "0,1") (ifseqformula "17")) + (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 FALSE" + (builtin "One Step Simplification" (formula "22")) + (rule "inEqSimp_leqRight" (formula "24")) + (rule "polySimp_mulComm0" (formula "1") (term "1,0,0")) + (rule "applyEqRigid" (formula "22") (term "4,0,0") (ifseqformula "23")) + (rule "inEqSimp_sepPosMonomial1" (formula "1")) + (rule "polySimp_mulComm0" (formula "1") (term "1")) + (rule "polySimp_rightDist" (formula "1") (term "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) + (rule "mul_literals" (formula "1") (term "0,1")) + (rule "polySimp_elimOne" (formula "1") (term "1,1")) + (rule "inEqSimp_contradInEq2" (formula "1") (ifseqformula "22")) + (rule "greater_literals" (formula "1") (term "0,1,0")) (builtin "One Step Simplification" (formula "1")) - (rule "replace_known_right" (formula "16") (term "0,0,0,1,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "16")) - (rule "replace_known_right" (formula "3") (term "0,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "3")) - (rule "polySimp_homoEq" (formula "14")) - (rule "polySimp_mulComm0" (formula "16") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "14") (term "1,0")) - (rule "polySimp_rightDist" (formula "16") (term "0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0")) - (rule "polySimp_rightDist" (formula "14") (term "1,0")) - (rule "polySimp_mulComm0" (formula "14") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "14") (term "0")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0")) - (rule "polySimp_rightDist" (formula "3") (term "1,0")) - (rule "polySimp_mulComm0" (formula "3") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "3") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "16") (term "1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "1,0,1,0")) - (rule "polySimp_rightDist" (formula "16") (term "1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "1,1,0,1,0")) - (rule "polySimp_mulAssoc" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_mulComm0" (formula "16") (term "0,0,1,0,1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0,1,0")) - (rule "polySimp_addAssoc" (formula "16") (term "0,1,0")) - (rule "polySimp_sepNegMonomial" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "0")) - (rule "polySimp_elimOne" (formula "14") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "16") (term "1,0")) - (rule "polySimp_mulLiterals" (formula "16") (term "0,1,0")) - (rule "inEqSimp_strengthen1" (formula "11") (ifseqformula "17")) - (rule "add_zero_right" (formula "11") (term "1")) - (rule "inEqSimp_contradEq7" (formula "17") (ifseqformula "11")) - (rule "times_zero_1" (formula "17") (term "1,0,0")) - (rule "add_zero_right" (formula "17") (term "0,0")) - (rule "leq_literals" (formula "17") (term "0")) - (builtin "One Step Simplification" (formula "17")) - (rule "false_right" (formula "17")) - (rule "arrayLengthNotNegative" (formula "12") (term "0")) - (rule "applyEq" (formula "12") (term "0") (ifseqformula "13")) - (rule "inEqSimp_subsumption1" (formula "12") (ifseqformula "11")) - (rule "leq_literals" (formula "12") (term "0")) - (builtin "One Step Simplification" (formula "12")) - (rule "true_left" (formula "12")) - (rule "arrayLengthIsAShort" (formula "12") (term "0")) - (builtin "One Step Simplification" (formula "12")) - (rule "true_left" (formula "12")) - (rule "div_axiom" (formula "2") (term "1") (inst "quotient=quotient_0")) - (rule "mul_literals" (formula "2") (term "1,1,1,1,1")) - (rule "qeq_literals" (formula "2") (term "0,1,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "equal_literals" (formula "2") (term "0")) - (builtin "One Step Simplification" (formula "2")) - (rule "andLeft" (formula "2")) - (rule "andLeft" (formula "2")) - (rule "polySimp_addComm1" (formula "4") (term "1")) - (rule "add_literals" (formula "4") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "3")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "5") (term "1") (ifseqformula "2")) - (rule "applyEqRigid" (formula "6") (term "1,0,1") (ifseqformula "2")) - (rule "inEqSimp_sepPosMonomial0" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1")) - (rule "polySimp_rightDist" (formula "4") (term "1")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1")) - (rule "mul_literals" (formula "4") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "14") (ifseqformula "4")) - (rule "mul_literals" (formula "14") (term "0,0")) - (rule "polySimp_addAssoc" (formula "14") (term "0")) - (rule "add_literals" (formula "14") (term "0,0")) - (rule "add_zero_left" (formula "14") (term "0")) - (rule "elimGcdGeq_antec" (formula "14") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=quotient_0") (inst "elimGcdRightDiv=Z(0(#))")) - (rule "polySimp_mulLiterals" (formula "14") (term "1,0,1,0")) - (rule "leq_literals" (formula "14") (term "0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "add_zero_right" (formula "14") (term "0,0,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "14") (term "0,0")) - (rule "add_literals" (formula "14") (term "1,1,0,0")) - (rule "times_zero_1" (formula "14") (term "1,0,0")) - (rule "add_zero_right" (formula "14") (term "0,0")) - (rule "leq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "ifthenelse_split" (formula "1") (term "1,1")) - (branch "a[-1 + k_0] = m_0 TRUE" - (rule "replace_known_left" (formula "7") (term "0,0") (ifseqformula "1")) - (builtin "One Step Simplification" (formula "7")) - (rule "polySimp_addComm0" (formula "2") (term "1")) - (rule "inEqSimp_homoInEq1" (formula "7")) - (rule "mul_literals" (formula "7") (term "1,0")) - (rule "polySimp_addComm1" (formula "7") (term "0")) - (rule "polySimp_addComm1" (formula "7") (term "0,0")) - (rule "add_literals" (formula "7") (term "0,0,0")) - (rule "add_zero_left" (formula "7") (term "0,0")) - (rule "applyEq" (formula "19") (term "0,0,0") (ifseqformula "1")) - (rule "eqSymm" (formula "19") (term "0,0")) - (rule "applyEq" (formula "21") (term "1,0,0,0,1,0") (ifseqformula "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "7")) - (rule "polySimp_mulLiterals" (formula "7") (term "0")) - (rule "polySimp_elimOne" (formula "7") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "23") (term "1,0") (ifseqformula "9")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "23")) - (builtin "One Step Simplification" (formula "1")) - (rule "ifthenelse_split" (formula "20") (term "0")) - (branch "mx_0 = m_0 TRUE" - (rule "polySimp_homoEq" (formula "21")) - (rule "mul_literals" (formula "21") (term "1,0")) - (rule "polySimp_addComm1" (formula "21") (term "0")) - (rule "polySimp_addComm0" (formula "21") (term "0,0")) - (rule "applyEq" (formula "21") (term "4,0,1,0") (ifseqformula "20")) - (rule "applyEq" (formula "22") (term "4,0,0") (ifseqformula "20")) - (rule "applyEqRigid" (formula "19") (term "4,1") (ifseqformula "20")) - (rule "applyEq" (formula "23") (term "1,0,0") (ifseqformula "20")) - (rule "applyEq" (formula "19") (term "1,0,2,0") (ifseqformula "20")) - (rule "applyEq" (formula "19") (term "0") (ifseqformula "3")) - (rule "polySimp_homoEq" (formula "19")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0")) - (rule "mul_literals" (formula "19") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0")) - (rule "polySimp_addComm0" (formula "19") (term "0,0")) - (rule "applyEqRigid" (formula "21") (term "4,1,0,0") (ifseqformula "20")) - (rule "polySimp_sepNegMonomial" (formula "19")) - (rule "polySimp_mulLiterals" (formula "19") (term "0")) - (rule "polySimp_elimOne" (formula "19") (term "0")) - (rule "applyEq" (formula "8") (term "0") (ifseqformula "19")) - (rule "inEqSimp_homoInEq1" (formula "8")) - (rule "polySimp_mulComm0" (formula "8") (term "1,0")) - (rule "polySimp_rightDist" (formula "8") (term "1,0")) - (rule "mul_literals" (formula "8") (term "0,1,0")) - (rule "polySimp_addAssoc" (formula "8") (term "0")) - (rule "polySimp_addComm0" (formula "8") (term "0,0")) - (rule "applyEq" (formula "3") (term "1,1") (ifseqformula "19")) - (rule "polySimp_addAssoc" (formula "3") (term "1")) - (rule "add_literals" (formula "3") (term "0,1")) - (rule "add_zero_left" (formula "3") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "8")) - (rule "polySimp_mulLiterals" (formula "8") (term "0")) - (rule "polySimp_elimOne" (formula "8") (term "0")) - (rule "inEqSimp_exactShadow2" (formula "8") (ifseqformula "21")) - (rule "greater_literals" (formula "8") (term "0")) - (builtin "One Step Simplification" (formula "8")) - (rule "polySimp_rightDist" (formula "8") (term "1,0,0")) - (rule "mul_literals" (formula "8") (term "0,1,0,0")) - (rule "polySimp_rightDist" (formula "8") (term "0,0")) - (rule "polySimp_mulLiterals" (formula "8") (term "1,0,0")) - (rule "mul_literals" (formula "8") (term "0,0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "8")) - (rule "polySimp_mulComm0" (formula "8") (term "1")) - (rule "polySimp_rightDist" (formula "8") (term "1")) - (rule "mul_literals" (formula "8") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "8") (term "1,1")) - (rule "inEqSimp_contradInEq1" (formula "6") (ifseqformula "8")) - (rule "andLeft" (formula "6")) - (rule "inEqSimp_homoInEq1" (formula "6")) - (rule "polySimp_mulComm0" (formula "6") (term "1,0")) - (rule "polySimp_rightDist" (formula "6") (term "1,0")) - (rule "mul_literals" (formula "6") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "6") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "6") (term "0")) - (rule "polySimp_addComm1" (formula "6") (term "0,0")) - (rule "add_literals" (formula "6") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "6") (term "0")) - (rule "add_literals" (formula "6") (term "1,1,0")) - (rule "times_zero_1" (formula "6") (term "1,0")) - (rule "add_zero_right" (formula "6") (term "0")) - (rule "leq_literals" (formula "6")) - (rule "closeFalse" (formula "6")) - ) - (branch "mx_0 = m_0 FALSE" - (rule "polySimp_homoEq" (formula "20")) - (rule "times_zero_2" (formula "20") (term "1,0")) - (rule "add_zero_right" (formula "20") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "20")) - (rule "polySimp_mulLiterals" (formula "20") (term "0")) - (rule "polySimp_elimOne" (formula "20") (term "0")) - (rule "allLeft" (formula "22") (inst "t=m_0")) - (builtin "One Step Simplification" (formula "22")) - (rule "mul_literals" (formula "22") (term "0,1")) - (rule "eqSymm" (formula "22") (term "0")) - (rule "replace_known_right" (formula "22") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "22")) - (rule "inEqSimp_homoInEq0" (formula "22")) - (rule "mul_literals" (formula "22") (term "1,0")) - (rule "polySimp_addComm1" (formula "22") (term "0")) - (rule "polySimp_addComm0" (formula "22") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "22")) - (rule "polySimp_mulLiterals" (formula "22") (term "0")) - (rule "inEqSimp_exactShadow2" (formula "8") (ifseqformula "22")) - (rule "greater_literals" (formula "8") (term "0")) - (builtin "One Step Simplification" (formula "8")) - (rule "polySimp_mulComm0" (formula "8") (term "1,0,0")) - (rule "polySimp_mulAssoc" (formula "8") (term "0,0")) - (rule "polySimp_mulComm0" (formula "8") (term "0,0,0")) - (rule "polySimp_mulLiterals" (formula "8") (term "0,0")) - (rule "polySimp_addAssoc" (formula "8") (term "0")) - (rule "polySimp_addComm0" (formula "8") (term "0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "8")) - (rule "polySimp_mulComm0" (formula "8") (term "1")) - (rule "polySimp_rightDist" (formula "8") (term "1")) - (rule "mul_literals" (formula "8") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "8") (term "1,1")) - (rule "inEqSimp_subsumption1" (formula "5") (ifseqformula "8")) - (rule "inEqSimp_homoInEq0" (formula "5") (term "0")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "1,1,0,0")) - (rule "times_zero_1" (formula "5") (term "1,0,0")) - (rule "add_zero_right" (formula "5") (term "0,0")) - (rule "qeq_literals" (formula "5") (term "0")) - (builtin "One Step Simplification" (formula "5")) - (rule "true_left" (formula "5")) - (rule "inEqSimp_contradInEq1" (formula "5") (ifseqformula "7")) - (rule "andLeft" (formula "5")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0")) - (rule "polySimp_rightDist" (formula "5") (term "1,0")) - (rule "mul_literals" (formula "5") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "5") (term "0")) - (rule "add_literals" (formula "5") (term "1,1,0")) - (rule "times_zero_1" (formula "5") (term "1,0")) - (rule "add_literals" (formula "5") (term "0")) - (rule "leq_literals" (formula "5")) - (rule "closeFalse" (formula "5")) - ) - ) - (branch "a[-1 + k_0] = m_0 FALSE" - (rule "add_zero_right" (formula "1") (term "1")) - (rule "replace_known_right" (formula "6") (term "0,0") (ifseqformula "21")) - (builtin "One Step Simplification" (formula "6")) - (rule "inEqSimp_homoInEq1" (formula "6")) - (rule "times_zero_2" (formula "6") (term "1,0")) - (rule "add_zero_right" (formula "6") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "6")) - (rule "polySimp_mulLiterals" (formula "6") (term "0")) - (rule "polySimp_elimOne" (formula "6") (term "0")) - (rule "ifthenelse_split" (formula "18") (term "0")) - (branch "a[-1 + k_0] = mx_0 TRUE" - (rule "polySimp_homoEq" (formula "19")) - (rule "mul_literals" (formula "19") (term "1,0")) - (rule "polySimp_addComm1" (formula "19") (term "0")) - (rule "polySimp_addComm0" (formula "19") (term "0,0")) - (rule "applyEq" (formula "22") (term "0") (ifseqformula "18")) - (rule "applyEq" (formula "21") (term "1,0,0,0,1,0") (ifseqformula "18")) - (rule "polySimp_sepNegMonomial" (formula "19")) - (rule "polySimp_mulLiterals" (formula "19") (term "0")) - (rule "polySimp_elimOne" (formula "19") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "24") (term "1,0") (ifseqformula "8")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "22") (inst "t=m_0")) - (rule "eqSymm" (formula "22") (term "0,0,0,1")) - (rule "eqSymm" (formula "22") (term "0")) - (rule "replace_known_right" (formula "22") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "22") (ifInst "" (formula "24"))) - (rule "times_zero_2" (formula "22") (term "0")) - (rule "inEqSimp_homoInEq0" (formula "22")) - (rule "mul_literals" (formula "22") (term "1,0")) - (rule "add_zero_right" (formula "22") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "22")) - (rule "polySimp_mulLiterals" (formula "22") (term "0")) - (rule "inEqSimp_exactShadow2" (formula "7") (ifseqformula "22")) - (rule "greater_literals" (formula "7") (term "0")) - (builtin "One Step Simplification" (formula "7")) - (rule "polySimp_rightDist" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,1,0,0")) - (rule "polySimp_rightDist" (formula "7") (term "0,0")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "7")) - (rule "polySimp_mulComm0" (formula "7") (term "1")) - (rule "polySimp_rightDist" (formula "7") (term "1")) - (rule "mul_literals" (formula "7") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,1")) - (rule "inEqSimp_subsumption1" (formula "4") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0")) - (rule "qeq_literals" (formula "4") (term "0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "inEqSimp_contradInEq1" (formula "4") (ifseqformula "6")) - (rule "andLeft" (formula "4")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0")) - (rule "polySimp_rightDist" (formula "4") (term "1,0")) - (rule "mul_literals" (formula "4") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "4") (term "0")) - (rule "polySimp_addComm1" (formula "4") (term "0,0")) - (rule "add_literals" (formula "4") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0")) - (rule "add_literals" (formula "4") (term "1,1,0")) - (rule "times_zero_1" (formula "4") (term "1,0")) - (rule "add_literals" (formula "4") (term "0")) - (rule "leq_literals" (formula "4")) - (rule "closeFalse" (formula "4")) - ) - (branch "a[-1 + k_0] = mx_0 FALSE" - (rule "polySimp_homoEq" (formula "18")) - (rule "times_zero_2" (formula "18") (term "1,0")) - (rule "add_zero_right" (formula "18") (term "0")) - (rule "polySimp_sepNegMonomial" (formula "18")) - (rule "polySimp_mulLiterals" (formula "18") (term "0")) - (rule "polySimp_elimOne" (formula "18") (term "0")) - (rule "onlyCreatedObjectsAreReferenced" (formula "24") (term "1,0") (ifseqformula "8")) - (rule "replace_known_right" (formula "1") (term "0") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "21") (inst "t=m_0")) - (rule "eqSymm" (formula "21") (term "0,0,0,1")) - (rule "eqSymm" (formula "21") (term "0")) - (rule "replace_known_right" (formula "21") (term "0,0,0,1") (ifseqformula "24")) - (builtin "One Step Simplification" (formula "21")) - (rule "times_zero_2" (formula "21") (term "0,1")) - (rule "inEqSimp_homoInEq0" (formula "21") (term "1")) - (rule "times_zero_2" (formula "21") (term "1,0,1")) - (rule "add_zero_right" (formula "21") (term "0,1")) - (rule "inEqSimp_sepNegMonomial1" (formula "21") (term "1")) - (rule "polySimp_mulLiterals" (formula "21") (term "0,1")) - (rule "cut_direct" (formula "21") (term "1")) - (branch "CUT: self.(BoyerMoore::count$lmtd)(a, -1 + k_0, m_0) * 2 <= k_0 TRUE" - (builtin "One Step Simplification" (formula "22")) - (rule "true_left" (formula "22")) - (rule "inEqSimp_exactShadow2" (formula "7") (ifseqformula "21")) - (rule "greater_literals" (formula "7") (term "0")) - (builtin "One Step Simplification" (formula "7")) - (rule "polySimp_rightDist" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,1,0,0")) - (rule "polySimp_rightDist" (formula "7") (term "0,0")) - (rule "mul_literals" (formula "7") (term "0,0,0")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "7")) - (rule "polySimp_mulComm0" (formula "7") (term "1")) - (rule "polySimp_rightDist" (formula "7") (term "1")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,1")) - (rule "mul_literals" (formula "7") (term "0,1")) - (rule "inEqSimp_contradInEq1" (formula "5") (ifseqformula "7")) - (rule "andLeft" (formula "5")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0")) - (rule "polySimp_rightDist" (formula "5") (term "1,0")) - (rule "mul_literals" (formula "5") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "5") (term "0")) - (rule "add_literals" (formula "5") (term "1,1,0")) - (rule "times_zero_1" (formula "5") (term "1,0")) - (rule "add_zero_right" (formula "5") (term "0")) - (rule "leq_literals" (formula "5")) - (rule "closeFalse" (formula "5")) - ) - (branch "CUT: self.(BoyerMoore::count$lmtd)(a, -1 + k_0, m_0) * 2 <= k_0 FALSE" - (builtin "One Step Simplification" (formula "21")) - (rule "inEqSimp_leqRight" (formula "23")) - (rule "polySimp_mulComm0" (formula "1") (term "1,0,0")) - (rule "applyEq" (formula "20") (term "4,0") (ifseqformula "22")) - (rule "applyEq" (formula "21") (term "4,0,0") (ifseqformula "22")) - (rule "applyEq" (formula "8") (term "0") (ifseqformula "20")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "20")) - (rule "applyEqRigid" (formula "8") (term "4,0") (ifseqformula "22")) - (rule "applyEq" (formula "1") (term "4,0,1,0") (ifseqformula "22")) - (rule "applyEq" (formula "19") (term "1,0,2,0") (ifseqformula "22")) - (rule "applyEqRigid" (formula "24") (term "1") (ifseqformula "22")) - (rule "applyEq" (formula "19") (term "4,1") (ifseqformula "22")) - (rule "applyEq" (formula "23") (term "1,0,0") (ifseqformula "22")) - (rule "applyEqRigid" (formula "20") (term "4,1") (ifseqformula "22")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "19")) - (rule "eqSymm" (formula "3")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "mul_literals" (formula "1") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "inEqSimp_contradInEq2" (formula "1") (ifseqformula "20")) - (rule "greater_literals" (formula "1") (term "0,1,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "greater_literals" (formula "1") (term "0,0")) - (builtin "One Step Simplification" (formula "1")) - (rule "andLeft" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "0")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "mul_literals" (formula "1") (term "0,1")) - (rule "inEqSimp_homoInEq1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0")) - (rule "polySimp_pullOutFactor0b" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,1,0")) - (rule "times_zero_1" (formula "1") (term "1,0")) - (rule "add_literals" (formula "1") (term "0")) - (rule "leq_literals" (formula "1")) - (rule "closeFalse" (formula "1")) - ) - ) - ) + (rule "greater_literals" (formula "1") (term "0,0")) + (builtin "One Step Simplification" (formula "1")) + (rule "andLeft" (formula "1")) + (rule "polySimp_mulComm0" (formula "1") (term "0")) + (rule "polySimp_rightDist" (formula "1") (term "1")) + (rule "mul_literals" (formula "1") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "1,0")) + (rule "polySimp_pullOutFactor0b" (formula "1") (term "0")) + (rule "add_literals" (formula "1") (term "1,1,0")) + (rule "times_zero_1" (formula "1") (term "1,0")) + (rule "add_zero_right" (formula "1") (term "0")) + (rule "leq_literals" (formula "1")) + (rule "closeFalse" (formula "1")) ) ) (branch "Case 2" @@ -5898,31 +2524,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 2" (builtin "One Step Simplification" (formula "18")) (rule "notRight" (formula "18")) - (rule "inEqSimp_ltRight" (formula "16")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_antiSymm" (formula "13") (ifseqformula "1")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEq" (formula "13") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "13")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0")) - (rule "add_literals" (formula "13") (term "1,0")) - (rule "times_zero_1" (formula "13") (term "0")) - (rule "leq_literals" (formula "13")) - (rule "true_left" (formula "13")) - (rule "nnf_imp2or" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "Static_class_invariant_axiom_for_IntOpt" (formula "8")) - (rule "andLeft" (formula "8")) + (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_1" (formula "8")) (rule "notLeft" (formula "8")) (rule "close" (formula "16") (ifseqformula "1")) ) @@ -5940,8 +2542,8 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "if mc == 0 false" - (builtin "One Step Simplification" (formula "1")) (builtin "One Step Simplification" (formula "19")) + (builtin "One Step Simplification" (formula "1")) (rule "notLeft" (formula "1")) (rule "variableDeclarationAssign" (formula "19") (term "1")) (rule "variableDeclaration" (formula "19") (term "1") (newnames "cnt")) @@ -5959,9 +2561,46 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "andRight" (formula "19")) (branch "Case 1" - (opengoal " wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<>, wellFormed(anon_heap_LOOP<>), geq(k_0, Z(0(#)))<>, geq(length(a), k_0)<>, geq(mc_0, Z(0(#)))<>, BoyerMoore::count$lmtd(heap, self, a, k_0, mx_0) = BoyerMoore::count(heap, self, a, k_0, mx_0), leq(mul(BoyerMoore::count(heap, self, a, k_0, mx_0), Z(2(#))), add(k_0, mc_0))<>, (\\forall int x; ( !x = mx_0 -> leq(mul(BoyerMoore::count(heap, self, a, k_0, x), Z(2(#))), add(k_0, mul(mc_0, Z(neglit(1(#))))))))<> ==> (mc_0 = Z(0(#)))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>, lt(k_0, length(a)), (self<> = null)<>, (a = null)<>, {(heapAtPre:=heap || _a:=a || exc:=null || mx:=mx_0 || cnt:=Z(0(#)) || r:=Z(0(#))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>)< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>} (( (leq(Z(0(#)), r) & leq(r, length(_a)))<> & (cnt = BoyerMoore::count(heap, self, _a, r, mx))<>)<>)") + (rule "andRight" (formula "19")) + (branch + (rule "andRight" (formula "19")) + (branch "Case 1" + (builtin "One Step Simplification" (formula "19")) + (rule "leq_literals" (formula "19")) + (rule "closeTrue" (formula "19")) + ) + (branch "Case 2" + (builtin "One Step Simplification" (formula "19")) + (rule "inEqSimp_ltRight" (formula "16")) + (rule "polySimp_mulComm0" (formula "1") (term "0,0")) + (rule "polySimp_addComm0" (formula "1") (term "0")) + (rule "inEqSimp_leqRight" (formula "19")) + (rule "add_zero_right" (formula "1") (term "0")) + (rule "polySimp_mulComm0" (formula "1") (term "1,0")) + (rule "inEqSimp_sepNegMonomial1" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "0")) + (rule "polySimp_elimOne" (formula "2") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "0")) + (rule "polySimp_elimOne" (formula "1") (term "0")) + (rule "inEqSimp_antiSymm" (formula "12") (ifseqformula "2")) + (rule "applyEq" (formula "1") (term "0") (ifseqformula "12")) + (rule "inEqSimp_contradInEq0" (formula "11") (ifseqformula "1")) + (rule "qeq_literals" (formula "11") (term "0")) + (builtin "One Step Simplification" (formula "11")) + (rule "closeFalse" (formula "11")) + ) + ) + (branch "Case 2" + (builtin "One Step Simplification" (formula "19") (userinteraction)) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "19") (term "1") (ifseqformula "3") (userinteraction)) + (builtin "One Step Simplification" (formula "19")) + (rule "castDel" (formula "19") (term "1")) + (builtin "One Step Simplification" (formula "19")) + (rule "closeTrue" (formula "19")) + ) ) - (branch "Case 2" + (branch (builtin "One Step Simplification" (formula "19")) (rule "inEqSimp_ltRight" (formula "16")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) @@ -5975,35 +2614,11 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "13") (ifseqformula "17")) - (rule "add_zero_right" (formula "13") (term "1")) - (rule "inEqSimp_contradEq7" (formula "17") (ifseqformula "13")) - (rule "times_zero_1" (formula "17") (term "1,0,0")) - (rule "add_zero_right" (formula "17") (term "0,0")) - (rule "leq_literals" (formula "17") (term "0")) - (builtin "One Step Simplification" (formula "17")) - (rule "false_right" (formula "17")) (rule "inEqSimp_antiSymm" (formula "12") (ifseqformula "2")) (rule "applyEq" (formula "1") (term "0,0") (ifseqformula "12")) - (rule "applyEq" (formula "13") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "13")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0")) - (rule "add_literals" (formula "13") (term "1,0")) - (rule "times_zero_1" (formula "13") (term "0")) - (rule "leq_literals" (formula "13")) - (rule "true_left" (formula "13")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "nnf_imp2or" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) (rule "jdiv_axiom" (formula "1") (term "0")) (rule "eqSymm" (formula "1")) - (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "11")) + (rule "replace_known_left" (formula "1") (term "0,0") (ifseqformula "12")) (builtin "One Step Simplification" (formula "1")) (rule "eqSymm" (formula "1")) (rule "applyEqRigid" (formula "2") (term "0") (ifseqformula "1")) @@ -6017,33 +2632,32 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "andLeft" (formula "1")) (rule "polySimp_addComm1" (formula "3") (term "1")) (rule "add_literals" (formula "3") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "2")) (rule "inEqSimp_homoInEq1" (formula "3")) (rule "polySimp_mulLiterals" (formula "3") (term "1,0")) (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "applyEqRigid" (formula "5") (term "0") (ifseqformula "1")) - (rule "applyEq" (formula "4") (term "1") (ifseqformula "1")) (rule "inEqSimp_sepPosMonomial0" (formula "3")) (rule "polySimp_mulComm0" (formula "3") (term "1")) (rule "polySimp_rightDist" (formula "3") (term "1")) (rule "polySimp_mulLiterals" (formula "3") (term "1,1")) (rule "mul_literals" (formula "3") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "14") (ifseqformula "3")) - (rule "times_zero_1" (formula "14") (term "0,0")) - (rule "add_zero_left" (formula "14") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "14")) - (rule "mul_literals" (formula "14") (term "1")) - (rule "inEqSimp_contradInEq3" (formula "14") (ifseqformula "5")) - (rule "mul_literals" (formula "14") (term "0,1,0")) - (rule "greater_literals" (formula "14") (term "0,0")) - (builtin "One Step Simplification" (formula "14")) - (rule "qeq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "closeFalse" (formula "14")) + (rule "inEqSimp_exactShadow3" (formula "15") (ifseqformula "3")) + (rule "times_zero_1" (formula "15") (term "0,0")) + (rule "add_zero_left" (formula "15") (term "0")) + (rule "inEqSimp_sepPosMonomial1" (formula "15")) + (rule "mul_literals" (formula "15") (term "1")) + (rule "inEqSimp_contradInEq3" (formula "15") (ifseqformula "5")) + (rule "mul_literals" (formula "15") (term "0,1,0")) + (rule "greater_literals" (formula "15") (term "0,0")) + (builtin "One Step Simplification" (formula "15")) + (rule "qeq_literals" (formula "15") (term "0")) + (builtin "One Step Simplification" (formula "15")) + (rule "closeFalse" (formula "15")) ) ) - (branch "Case 2" - (opengoal " wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<>, wellFormed(anon_heap_LOOP<>), geq(k_0, Z(0(#)))<>, geq(length(a), k_0)<>, geq(mc_0, Z(0(#)))<>, BoyerMoore::count$lmtd(heap, self, a, k_0, mx_0) = BoyerMoore::count(heap, self, a, k_0, mx_0), leq(mul(BoyerMoore::count(heap, self, a, k_0, mx_0), Z(2(#))), add(k_0, mc_0))<>, (\\forall int x; ( !x = mx_0 -> leq(mul(BoyerMoore::count(heap, self, a, k_0, x), Z(2(#))), add(k_0, mul(mc_0, Z(neglit(1(#))))))))<> ==> (mc_0 = Z(0(#)))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>, lt(k_0, length(a)), (self<> = null)<>, (a = null)<>, {(heapAtPre:=heap || _a:=a || exc:=null || mx:=mx_0 || cnt:=Z(0(#)) || r:=Z(0(#))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>)< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>} wellFormed(heap)") + (branch + (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "1"))) + (rule "closeTrue" (formula "19")) ) ) (branch "Body Preserves Invariant" @@ -6056,13 +2670,13 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "eqSymm" (formula "25") (term "1,0,0,0,1,1,1,0,1")) (rule "eqSymm" (formula "25") (term "0,0,1,0,1,1,1,0,1")) (rule "eqSymm" (formula "19")) - (rule "polySimp_elimSub" (formula "25") (term "0,1,1,1,1,0,1")) (rule "polySimp_elimSub" (formula "25") (term "0,1,1,1,0")) - (rule "polySimp_addComm0" (formula "25") (term "0,1,1,1,1,0,1")) + (rule "polySimp_elimSub" (formula "25") (term "0,1,1,1,1,0,1")) (rule "polySimp_addComm0" (formula "25") (term "0,1,1,1,0")) - (rule "inEqSimp_commuteLeq" (formula "25") (term "1,0,0,1,1,1,0,1")) + (rule "polySimp_addComm0" (formula "25") (term "0,1,1,1,1,0,1")) (rule "inEqSimp_commuteLeq" (formula "25") (term "0,0,0,0,0,1,1,1,0,1")) (rule "inEqSimp_commuteLeq" (formula "25") (term "1,0,0,0,0,1,1,1,0,1")) + (rule "inEqSimp_commuteLeq" (formula "25") (term "1,0,0,1,1,1,0,1")) (rule "inEqSimp_commuteLeq" (formula "20")) (rule "inEqSimp_commuteLeq" (formula "17")) (rule "inEqSimp_commuteLeq" (formula "18")) @@ -6117,10 +2731,10 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "26")) (rule "replace_known_left" (formula "26") (term "0,0,1,0") (ifseqformula "1")) (builtin "One Step Simplification" (formula "26")) + (rule "arrayLengthIsAShort" (formula "11") (term "0")) + (builtin "One Step Simplification" (formula "11")) + (rule "true_left" (formula "11")) (rule "arrayLengthNotNegative" (formula "11") (term "0")) - (rule "arrayLengthIsAShort" (formula "12") (term "0")) - (builtin "One Step Simplification" (formula "12")) - (rule "true_left" (formula "12")) (rule "ifSplit" (formula "27")) (branch "if r < _a.length true" (builtin "One Step Simplification" (formula "28")) @@ -6191,7 +2805,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (builtin "One Step Simplification" (formula "29")) (rule "variableDeclarationAssign" (formula "29") (term "1")) (rule "variableDeclaration" (formula "29") (term "1") (newnames "var_1")) - (rule "elim_double_block_9" (formula "29") (term "1")) (rule "assignmentAdditionInt" (formula "29") (term "1")) (builtin "One Step Simplification" (formula "29")) (rule "translateJavaAddInt" (formula "29") (term "0,1,0")) @@ -6200,6 +2813,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "variableDeclaration" (formula "29") (term "1") (newnames "var_2")) (rule "assignment" (formula "29") (term "1")) (builtin "One Step Simplification" (formula "29")) + (rule "elim_double_block_9" (formula "29") (term "1")) (builtin "Use Operation Contract" (formula "29") (newnames "heapBefore_monoLemma,exc_0") (contract "BoyerMoore[BoyerMoore::monoLemma([I,int,int)].JML normal_behavior operation contract.0") (modality "diamond")) (branch "Post (monoLemma)" (builtin "One Step Simplification" (formula "25") (ifInst "" (formula "10"))) @@ -6210,15 +2824,15 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "blockEmpty" (formula "31") (term "1")) (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "26") (term "1")) (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "27") (term "0")) - (rule "methodCallParamThrow" (formula "33") (term "1,0,0,1")) (rule "methodCallReturn" (formula "33") (term "1,0,1,0,1")) (rule "assignment" (formula "33") (term "1,0,1,0,1")) + (rule "methodCallParamThrow" (formula "33") (term "1,0,0,1")) + (rule "methodCallEmpty" (formula "33") (term "1,1,0,1,0,1")) (rule "tryCatchThrow" (formula "33") (term "1,0,0,1")) (rule "ifElseUnfold" (formula "33") (term "1,0,0,1") (inst "#boolv=b_6")) (rule "variableDeclaration" (formula "33") (term "1,0,0,1") (newnames "b_6")) - (rule "methodCallEmpty" (formula "33") (term "1,1,0,1,0,1")) - (rule "equality_comparison_simple" (formula "33") (term "1,0,0,1")) (rule "tryEmpty" (formula "33") (term "1,1,0,1,0,1")) + (rule "equality_comparison_simple" (formula "33") (term "1,0,0,1")) (rule "emptyModality" (formula "33") (term "1,1,0,1,0,1")) (builtin "One Step Simplification" (formula "33")) (rule "instanceCreationAssignment" (formula "33") (term "1") (inst "#v0=i_12")) @@ -6299,283 +2913,127 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "emptyModality" (formula "36") (term "1")) (builtin "One Step Simplification" (formula "36") (ifInst "" (formula "30"))) (rule "andRight" (formula "36")) - (branch "Case 1" + (branch (rule "andRight" (formula "36")) (branch "Case 1" (rule "impRight" (formula "36")) - (rule "dismissNonSelectedField" (formula "37") (term "4,0") (userinteraction)) - (rule "selectOfStore" (formula "37") (term "4,0") (userinteraction)) - (rule "ifthenelse_split" (formula "37") (term "4,0") (userinteraction)) + (rule "dismissNonSelectedField" (formula "37") (term "4,0")) + (rule "selectOfStore" (formula "37") (term "4,0")) + (rule "ifthenelse_split" (formula "37") (term "4,0")) (branch " i_14 = i_14 & IntOpt::$value = IntOpt::$value & !IntOpt::$value = java.lang.Object:: TRUE" - (rule "castDel2" (formula "38") (term "4,0") (ifseqformula "5") (userinteraction)) - (rule "applyEq" (formula "38") (term "4,0") (ifseqformula "5") (userinteraction)) - (builtin "Use Dependency Contract" (formula "38") (term "0") (ifInst "" (formula "31") (term "0")) (contract "BoyerMoore[BoyerMoore::count([I,\bigint,\bigint)].JML accessible clause.0") (userinteraction)) - (rule "impLeft" (formula "32") (userinteraction)) + (rule "castDel2" (formula "38") (term "4,0") (ifseqformula "5")) + (rule "applyEq" (formula "38") (term "4,0") (ifseqformula "5")) + (builtin "Use Dependency Contract" (formula "38") (term "0") (ifInst "" (formula "31") (term "0")) (contract "BoyerMoore[BoyerMoore::count([I,\bigint,\bigint)].JML accessible clause.0")) + (rule "impLeft" (formula "32")) (branch "Case 1" - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "wellFormedStorePrimitive" (formula "31") (term "1,1,0,0,0,0")) - (rule "wellFormedStorePrimitive" (formula "31") (term "1,1,0,0,0,0")) - (rule "wellFormedStorePrimitive" (formula "31") (term "1,1,0,0,0,0")) - (rule "wellFormedCreate" (formula "31") (term "1,1,0,0,0,0")) - (builtin "One Step Simplification" (formula "31") (ifInst "" (formula "36")) (ifInst "" (formula "7")) (ifInst "" (formula "6")) (ifInst "" (formula "6")) (ifInst "" (formula "37")) (ifInst "" (formula "9")) (ifInst "" (formula "12")) (ifInst "" (formula "37"))) - (rule "dismissNonSelectedField" (formula "1") (term "0")) - (rule "disjointDefinition" (formula "31") (term "1,0")) - (rule "dismissNonSelectedField" (formula "1") (term "0")) - (rule "measuredByCheckEmpty" (formula "31") (term "1") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "31")) - (rule "inEqSimp_ltRight" (formula "35")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "38")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_gtToGeq" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "polySimp_addAssoc" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "add_zero_left" (formula "5") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "7")) - (rule "polySimp_mulComm0" (formula "7") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "7") (term "0")) - (rule "inEqSimp_commuteLeq" (formula "33") (term "0,0")) - (rule "replace_known_left" (formula "33") (term "0,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "33")) - (rule "inEqSimp_homoInEq0" (formula "33") (term "0")) - (rule "polySimp_pullOutFactor1" (formula "33") (term "0,0")) - (rule "add_literals" (formula "33") (term "1,0,0")) - (rule "times_zero_1" (formula "33") (term "0,0")) - (rule "qeq_literals" (formula "33") (term "0")) - (builtin "One Step Simplification" (formula "33")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepPosMonomial0" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1")) - (rule "polySimp_elimOne" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial1" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "polySimp_elimOne" (formula "5") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "7")) - (rule "polySimp_mulLiterals" (formula "7") (term "0")) - (rule "polySimp_elimOne" (formula "7") (term "0")) - (rule "inEqSimp_strengthen1" (formula "19") (ifseqformula "36")) - (rule "add_zero_right" (formula "19") (term "1")) - (rule "inEqSimp_contradEq7" (formula "36") (ifseqformula "19")) - (rule "times_zero_1" (formula "36") (term "1,0,0")) - (rule "add_zero_right" (formula "36") (term "0,0")) - (rule "leq_literals" (formula "36") (term "0")) - (builtin "One Step Simplification" (formula "36")) - (rule "false_right" (formula "36")) - (rule "inEqSimp_subsumption1" (formula "25") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "25") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "25") (term "0,0")) - (rule "add_literals" (formula "25") (term "1,1,0,0")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "qeq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "true_left" (formula "25")) + (rule "wellFormedStorePrimitive" (formula "32") (term "1,1,0,0,0,0")) + (rule "wellFormedStorePrimitive" (formula "32") (term "1,1,0,0,0,0")) + (rule "wellFormedStorePrimitive" (formula "32") (term "1,1,0,0,0,0")) + (rule "wellFormedCreate" (formula "32") (term "1,1,0,0,0,0")) + (builtin "One Step Simplification" (formula "32") (ifInst "" (formula "37")) (ifInst "" (formula "8")) (ifInst "" (formula "7")) (ifInst "" (formula "7")) (ifInst "" (formula "38")) (ifInst "" (formula "10")) (ifInst "" (formula "13")) (ifInst "" (formula "38"))) + (rule "disjointDefinition" (formula "32") (term "1,0")) + (rule "measuredByCheckEmpty" (formula "32") (term "1") (ifseqformula "11")) + (builtin "One Step Simplification" (formula "32")) + (rule "inEqSimp_commuteLeq" (formula "32") (term "0,0")) + (rule "replace_known_left" (formula "32") (term "0,0") (ifseqformula "16")) + (builtin "One Step Simplification" (formula "32")) + (rule "inEqSimp_homoInEq0" (formula "32") (term "0")) + (rule "polySimp_pullOutFactor1" (formula "32") (term "0,0")) + (rule "add_literals" (formula "32") (term "1,0,0")) + (rule "times_zero_1" (formula "32") (term "0,0")) + (rule "qeq_literals" (formula "32") (term "0")) + (builtin "One Step Simplification" (formula "32")) (rule "distributeIntersection_2" (formula "32") (term "0")) (rule "distributeIntersection_2" (formula "32") (term "1,0")) (rule "intersectWithSingleton" (formula "32") (term "0,0")) (builtin "One Step Simplification" (formula "32")) (rule "sortsDisjointModuloNull" (formula "32") (term "0,0,0")) (rule "replace_known_right" (formula "32") (term "0,0,0,0") (ifseqformula "33")) - (builtin "One Step Simplification" (formula "32") (ifInst "" (formula "36"))) + (builtin "One Step Simplification" (formula "32") (ifInst "" (formula "38"))) (rule "intersectWithSingleton" (formula "32") (term "0,0")) (builtin "One Step Simplification" (formula "32")) (rule "sortsDisjointModuloNull" (formula "32") (term "0,0,0")) (rule "replace_known_right" (formula "32") (term "0,0,0,0") (ifseqformula "33")) - (builtin "One Step Simplification" (formula "32") (ifInst "" (formula "36"))) + (builtin "One Step Simplification" (formula "32") (ifInst "" (formula "38"))) (rule "disjointWithSingleton2" (formula "32")) (builtin "One Step Simplification" (formula "32")) (rule "notRight" (formula "32")) (rule "sortsDisjointModuloNull" (formula "1")) (rule "andLeft" (formula "1")) - (rule "close" (formula "37") (ifseqformula "2")) + (rule "close" (formula "39") (ifseqformula "2")) ) (branch "Case 2" - (rule "applyEq" (formula "39") (term "0") (ifseqformula "32") (userinteraction)) - (rule "applyEqReverse" (formula "4") (term "1,0") (ifseqformula "25") (userinteraction)) - (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "31") (term "1") (ifseqformula "9") (userinteraction)) - (rule "castDel" (formula "31") (term "1") (userinteraction)) - (rule "ifthenelse_split" (formula "31") (term "1") (userinteraction)) + (rule "applyEq" (formula "39") (term "0") (ifseqformula "32")) + (rule "applyEqReverse" (formula "4") (term "1,0") (ifseqformula "25")) + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "31") (term "1") (ifseqformula "9")) + (rule "castDel" (formula "31") (term "1")) + (rule "ifthenelse_split" (formula "31") (term "1")) (branch "1 + r_0 = 0 TRUE" - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "dismissNonSelectedField" (formula "1") (term "0")) - (rule "dismissNonSelectedField" (formula "1") (term "0")) - (rule "inEqSimp_ltRight" (formula "36")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "39")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "7")) - (rule "polySimp_mulComm0" (formula "7") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "7") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "add_zero_left" (formula "5") (term "0,0")) - (rule "applyEq" (formula "5") (term "1,0") (ifseqformula "26")) - (rule "polySimp_addComm0" (formula "5") (term "0")) - (rule "polySimp_sepPosMonomial" (formula "32")) - (rule "mul_literals" (formula "32") (term "1")) - (rule "applyEq" (formula "24") (term "0") (ifseqformula "32")) - (rule "qeq_literals" (formula "24")) - (rule "closeFalse" (formula "24")) + (rule "polySimp_sepPosMonomial" (formula "31")) + (rule "mul_literals" (formula "31") (term "1")) + (rule "applyEq" (formula "23") (term "0") (ifseqformula "31")) + (rule "qeq_literals" (formula "23")) + (rule "closeFalse" (formula "23")) ) (branch "1 + r_0 = 0 FALSE" - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "polySimp_elimSub" (formula "30") (term "0,2,0,0,0,1")) - (rule "mul_literals" (formula "30") (term "1,0,2,0,0,0,1")) - (rule "polySimp_elimSub" (formula "30") (term "3,1,1")) - (rule "mul_literals" (formula "30") (term "1,3,1,1")) - (rule "polySimp_addComm1" (formula "30") (term "0,2,0,0,0,1")) - (rule "add_literals" (formula "30") (term "0,0,2,0,0,0,1")) - (rule "add_zero_left" (formula "30") (term "0,2,0,0,0,1")) - (rule "replace_known_left" (formula "30") (term "0,0,1") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "30")) - (rule "polySimp_addComm1" (formula "30") (term "3,1,1")) - (rule "add_literals" (formula "30") (term "0,3,1,1")) - (rule "add_zero_left" (formula "30") (term "3,1,1")) - (rule "dismissNonSelectedField" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "39")) + (rule "polySimp_elimSub" (formula "31") (term "0,2,0,0,0,1")) + (rule "mul_literals" (formula "31") (term "1,0,2,0,0,0,1")) + (rule "polySimp_elimSub" (formula "31") (term "3,1,1")) + (rule "mul_literals" (formula "31") (term "1,3,1,1")) + (rule "polySimp_addComm1" (formula "31") (term "0,2,0,0,0,1")) + (rule "add_literals" (formula "31") (term "0,0,2,0,0,0,1")) + (rule "add_zero_left" (formula "31") (term "0,2,0,0,0,1")) + (rule "replace_known_left" (formula "31") (term "0,0,1") (ifseqformula "5")) + (builtin "One Step Simplification" (formula "31")) + (rule "polySimp_addComm1" (formula "31") (term "3,1,1")) + (rule "add_literals" (formula "31") (term "0,3,1,1")) + (rule "add_zero_left" (formula "31") (term "3,1,1")) + (rule "inEqSimp_gtRight" (formula "40")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_ltRight" (formula "37")) + (rule "inEqSimp_ltRight" (formula "38")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "dismissNonSelectedField" (formula "3") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "7")) - (rule "polySimp_mulComm0" (formula "7") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "7") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "add_zero_left" (formula "5") (term "0,0")) - (rule "inEqSimp_homoInEq1" (formula "32")) - (rule "polySimp_addComm1" (formula "32") (term "0")) - (rule "applyEq" (formula "5") (term "1,0") (ifseqformula "26")) - (rule "polySimp_addComm0" (formula "5") (term "0")) - (rule "applyEq" (formula "32") (term "1,0") (ifseqformula "26")) - (rule "polySimp_addComm1" (formula "32") (term "0")) - (rule "polySimp_sepPosMonomial" (formula "34")) - (rule "mul_literals" (formula "34") (term "1")) + (rule "inEqSimp_gtToGeq" (formula "6")) + (rule "polySimp_mulComm0" (formula "6") (term "1,0,0")) + (rule "polySimp_addAssoc" (formula "6") (term "0")) + (rule "polySimp_addComm1" (formula "6") (term "0,0")) + (rule "add_literals" (formula "6") (term "0,0,0")) + (rule "add_zero_left" (formula "6") (term "0,0")) + (rule "inEqSimp_homoInEq1" (formula "33")) + (rule "polySimp_addComm1" (formula "33") (term "0")) + (rule "applyEq" (formula "6") (term "1,0") (ifseqformula "27")) + (rule "polySimp_addComm0" (formula "6") (term "0")) + (rule "applyEq" (formula "33") (term "1,0") (ifseqformula "27")) + (rule "polySimp_addComm1" (formula "33") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "1")) (rule "polySimp_elimOne" (formula "2") (term "1")) (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "7")) - (rule "polySimp_mulLiterals" (formula "7") (term "0")) - (rule "polySimp_elimOne" (formula "7") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "polySimp_elimOne" (formula "5") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "32")) - (rule "polySimp_mulLiterals" (formula "32") (term "0")) - (rule "polySimp_elimOne" (formula "32") (term "0")) - (rule "inEqSimp_contradEq7" (formula "34") (ifseqformula "24")) - (rule "add_zero_left" (formula "34") (term "0,0")) - (rule "mul_literals" (formula "34") (term "0,0")) - (rule "leq_literals" (formula "34") (term "0")) - (builtin "One Step Simplification" (formula "34")) - (rule "false_right" (formula "34")) - (rule "inEqSimp_strengthen1" (formula "19") (ifseqformula "36")) - (rule "add_literals" (formula "19") (term "1")) - (rule "inEqSimp_contradEq7" (formula "36") (ifseqformula "19")) - (rule "times_zero_1" (formula "36") (term "1,0,0")) - (rule "add_zero_right" (formula "36") (term "0,0")) - (rule "leq_literals" (formula "36") (term "0")) - (builtin "One Step Simplification" (formula "36")) - (rule "false_right" (formula "36")) - (rule "inEqSimp_subsumption1" (formula "25") (ifseqformula "7")) - (rule "inEqSimp_homoInEq0" (formula "25") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "25") (term "0,0")) - (rule "add_literals" (formula "25") (term "1,1,0,0")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "qeq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "true_left" (formula "25")) - (rule "pullOutSelect" (formula "3") (term "0") (inst "selectSK=IntOpt_present_0")) - (rule "simplifySelectOfStore" (formula "3")) - (builtin "One Step Simplification" (formula "3")) - (rule "castDel" (formula "3") (term "0")) - (rule "applyEqReverse" (formula "4") (term "0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "hideAuxiliaryEq" (formula "3")) - (rule "inEqSimp_antiSymm" (formula "17") (ifseqformula "1")) - (rule "applyEq" (formula "2") (term "0,1") (ifseqformula "17")) - (rule "applyEq" (formula "27") (term "0,0") (ifseqformula "17")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "17")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEq" (formula "29") (term "3,0") (ifseqformula "16")) - (rule "applyEq" (formula "30") (term "3,0") (ifseqformula "16")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "16")) - (rule "applyEq" (formula "31") (term "3,0") (ifseqformula "16")) - (rule "applyEq" (formula "17") (term "0") (ifseqformula "16")) - (rule "inEqSimp_homoInEq1" (formula "17")) - (rule "polySimp_pullOutFactor1" (formula "17") (term "0")) - (rule "add_literals" (formula "17") (term "1,0")) - (rule "times_zero_1" (formula "17") (term "0")) - (rule "leq_literals" (formula "17")) - (rule "true_left" (formula "17")) - (rule "applyEq" (formula "15") (term "0") (ifseqformula "16")) - (rule "applyEq" (formula "1") (term "3,0") (ifseqformula "15")) - (rule "applyEq" (formula "5") (term "0") (ifseqformula "15")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "applyEq" (formula "27") (term "0") (ifseqformula "17")) - (rule "eqSymm" (formula "27")) - (rule "applyEq" (formula "27") (term "3,0") (ifseqformula "15")) - (builtin "One Step Simplification" (formula "27")) - (rule "true_left" (formula "27")) - (rule "applyEq" (formula "28") (term "3,1") (ifseqformula "15")) - (rule "inEqSimp_sepPosMonomial0" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1")) - (rule "polySimp_rightDist" (formula "5") (term "1")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1")) - (rule "mul_literals" (formula "5") (term "0,1")) - (rule "polySimp_elimOne" (formula "5") (term "1,1")) - (rule "inEqSimp_antiSymm" (formula "24") (ifseqformula "3")) - (rule "applyEq" (formula "1") (term "1") (ifseqformula "24")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "24")) - (rule "inEqSimp_homoInEq0" (formula "3")) - (rule "polySimp_pullOutFactor1" (formula "3") (term "0")) - (rule "add_literals" (formula "3") (term "1,0")) - (rule "times_zero_1" (formula "3") (term "0")) - (rule "qeq_literals" (formula "3")) - (rule "true_left" (formula "3")) - (rule "applyEqRigid" (formula "24") (term "0") (ifseqformula "23")) - (rule "inEqSimp_homoInEq1" (formula "24")) - (rule "polySimp_pullOutFactor1" (formula "24") (term "0")) - (rule "add_literals" (formula "24") (term "1,0")) - (rule "times_zero_1" (formula "24") (term "0")) - (rule "leq_literals" (formula "24")) - (rule "true_left" (formula "24")) - (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "26")) - (rule "andLeft" (formula "1")) - (rule "inEqSimp_homoInEq1" (formula "1")) - (rule "polySimp_pullOutFactor1b" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,1,0")) - (rule "times_zero_1" (formula "1") (term "1,0")) - (rule "add_literals" (formula "1") (term "0")) - (rule "leq_literals" (formula "1")) - (rule "closeFalse" (formula "1")) + (rule "inEqSimp_sepNegMonomial1" (formula "6")) + (rule "polySimp_mulLiterals" (formula "6") (term "0")) + (rule "polySimp_elimOne" (formula "6") (term "0")) + (rule "inEqSimp_sepNegMonomial0" (formula "33")) + (rule "polySimp_mulLiterals" (formula "33") (term "0")) + (rule "polySimp_elimOne" (formula "33") (term "0")) + (rule "inEqSimp_antiSymm" (formula "19") (ifseqformula "1")) + (rule "applyEq" (formula "2") (term "0,1") (ifseqformula "19")) + (rule "applyEq" (formula "30") (term "0,0") (ifseqformula "19")) + (rule "applyEq" (formula "34") (term "3,0") (ifseqformula "19")) + (rule "applyEq" (formula "6") (term "0,0") (ifseqformula "19")) + (rule "applyEq" (formula "2") (term "3,0") (ifseqformula "19")) + (rule "inEqSimp_antiSymm" (formula "30") (ifseqformula "6")) + (rule "applyEq" (formula "2") (term "1") (ifseqformula "30")) + (rule "inEqSimp_contradInEq1" (formula "2") (ifseqformula "35")) + (rule "andLeft" (formula "2")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "polySimp_pullOutFactor1b" (formula "2") (term "0")) + (rule "add_literals" (formula "2") (term "1,1,0")) + (rule "times_zero_1" (formula "2") (term "1,0")) + (rule "add_literals" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) ) ) @@ -6584,68 +3042,20 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "closeTrue" (formula "37")) ) ) - (branch + (branch "Case 2" (rule "andRight" (formula "36")) (branch "Case 1" (rule "impRight" (formula "36")) - (rule "notRight" (formula "37")) - (rule "notLeft" (formula "2")) - (rule "exLeft" (formula "1") (inst "sk=m_0")) - (rule "dismissNonSelectedField" (formula "31") (term "0")) - (rule "dismissNonSelectedField" (formula "31") (term "0")) - (rule "inEqSimp_ltRight" (formula "35")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "polySimp_addAssoc" (formula "4") (term "0,0")) - (rule "add_literals" (formula "4") (term "0,0,0")) - (rule "add_zero_left" (formula "4") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "6")) - (rule "polySimp_mulComm0" (formula "6") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "6") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "polySimp_elimOne" (formula "4") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "6")) - (rule "polySimp_mulLiterals" (formula "6") (term "0")) - (rule "polySimp_elimOne" (formula "6") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1")) - (rule "polySimp_rightDist" (formula "2") (term "1")) - (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) - (rule "mul_literals" (formula "2") (term "0,1")) - (rule "polySimp_elimOne" (formula "2") (term "1,1")) - (rule "inEqSimp_strengthen1" (formula "18") (ifseqformula "35")) - (rule "add_zero_right" (formula "18") (term "1")) - (rule "inEqSimp_contradEq7" (formula "35") (ifseqformula "18")) - (rule "times_zero_1" (formula "35") (term "1,0,0")) - (rule "add_zero_right" (formula "35") (term "0,0")) - (rule "leq_literals" (formula "35") (term "0")) - (builtin "One Step Simplification" (formula "35")) - (rule "false_right" (formula "35")) - (rule "inEqSimp_subsumption1" (formula "24") (ifseqformula "6")) - (rule "inEqSimp_homoInEq0" (formula "24") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "24") (term "0,0")) - (rule "add_literals" (formula "24") (term "1,1,0,0")) - (rule "times_zero_1" (formula "24") (term "1,0,0")) - (rule "add_zero_right" (formula "24") (term "0,0")) - (rule "qeq_literals" (formula "24") (term "0")) - (builtin "One Step Simplification" (formula "24")) - (rule "true_left" (formula "24")) - (rule "pullOutSelect" (formula "31") (term "0") (inst "selectSK=IntOpt_present_0")) + (rule "notLeft" (formula "1")) + (rule "dismissNonSelectedField" (formula "30") (term "0")) + (rule "dismissNonSelectedField" (formula "30") (term "0")) + (rule "pullOutSelect" (formula "30") (term "0") (inst "selectSK=IntOpt_present_0")) (rule "simplifySelectOfStore" (formula "1")) (builtin "One Step Simplification" (formula "1")) (rule "castDel" (formula "1") (term "0")) - (rule "applyEqReverse" (formula "32") (term "0") (ifseqformula "1")) - (builtin "One Step Simplification" (formula "32")) - (rule "closeTrue" (formula "32")) + (rule "applyEqReverse" (formula "31") (term "0") (ifseqformula "1")) + (builtin "One Step Simplification" (formula "31")) + (rule "closeTrue" (formula "31")) ) (branch "Case 2" (rule "Class_invariant_axiom_for_BoyerMoore" (formula "36") (ifseqformula "7")) @@ -6658,116 +3068,19 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "allRight" (formula "36") (inst "sk=o_0")) (rule "orRight" (formula "36")) (rule "eqSymm" (formula "37")) - (rule "inEqSimp_ltRight" (formula "33")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "polySimp_addAssoc" (formula "3") (term "0,0")) - (rule "add_literals" (formula "3") (term "0,0,0")) - (rule "add_zero_left" (formula "3") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "polySimp_elimOne" (formula "5") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "17") (ifseqformula "33")) - (rule "add_zero_right" (formula "17") (term "1")) - (rule "inEqSimp_contradEq7" (formula "33") (ifseqformula "17")) - (rule "times_zero_1" (formula "33") (term "1,0,0")) - (rule "add_zero_right" (formula "33") (term "0,0")) - (rule "leq_literals" (formula "33") (term "0")) - (builtin "One Step Simplification" (formula "33")) - (rule "false_right" (formula "33")) - (rule "inEqSimp_subsumption1" (formula "23") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "23") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "23") (term "0,0")) - (rule "add_literals" (formula "23") (term "1,1,0,0")) - (rule "times_zero_1" (formula "23") (term "1,0,0")) - (rule "add_literals" (formula "23") (term "0,0")) - (rule "qeq_literals" (formula "23") (term "0")) - (builtin "One Step Simplification" (formula "23")) - (rule "true_left" (formula "23")) - (rule "pullOutSelect" (formula "35") (term "0") (inst "selectSK=f_0_0")) + (rule "pullOutSelect" (formula "37") (term "0") (inst "selectSK=f_0_0")) (rule "simplifySelectOfStore" (formula "1")) (builtin "One Step Simplification" (formula "1")) (rule "castDel" (formula "1") (term "1,0")) - (rule "eqSymm" (formula "36")) + (rule "eqSymm" (formula "38")) (rule "eqSymm" (formula "1") (term "1,0,0")) (rule "eqSymm" (formula "1") (term "0,0,0")) - (rule "inEqSimp_antiSymm" (formula "17") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "17")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "3") (term "0,0") (ifseqformula "16")) - (rule "applyEq" (formula "15") (term "0") (ifseqformula "16")) - (rule "applyEq" (formula "25") (term "0,0") (ifseqformula "15")) - (rule "applyEq" (formula "28") (term "3,0") (ifseqformula "15")) - (rule "applyEq" (formula "16") (term "0") (ifseqformula "15")) - (rule "inEqSimp_homoInEq1" (formula "16")) - (rule "polySimp_pullOutFactor1" (formula "16") (term "0")) - (rule "add_literals" (formula "16") (term "1,0")) - (rule "times_zero_1" (formula "16") (term "0")) - (rule "leq_literals" (formula "16")) - (rule "true_left" (formula "16")) - (rule "applyEq" (formula "5") (term "0") (ifseqformula "15")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "applyEq" (formula "28") (term "3,0") (ifseqformula "15")) - (rule "inEqSimp_commuteGeq" (formula "28")) - (rule "applyEq" (formula "27") (term "0") (ifseqformula "17")) - (rule "eqSymm" (formula "27")) - (rule "applyEq" (formula "27") (term "3,0") (ifseqformula "15")) - (builtin "One Step Simplification" (formula "27")) - (rule "true_left" (formula "27")) - (rule "inEqSimp_sepPosMonomial0" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1")) - (rule "polySimp_rightDist" (formula "5") (term "1")) - (rule "mul_literals" (formula "5") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1")) - (rule "polySimp_elimOne" (formula "5") (term "1,1")) (rule "pullOutSelect" (formula "1") (term "2,0") (inst "selectSK=f_0_1")) (rule "simplifySelectOfStore" (formula "1")) (builtin "One Step Simplification" (formula "1")) (rule "castDel" (formula "1") (term "1,0")) (rule "eqSymm" (formula "1") (term "0,0,0")) (rule "eqSymm" (formula "1") (term "1,0,0")) - (rule "inEqSimp_antiSymm" (formula "25") (ifseqformula "4")) - (rule "applyEq" (formula "4") (term "0") (ifseqformula "25")) - (rule "inEqSimp_homoInEq0" (formula "4")) - (rule "polySimp_pullOutFactor1" (formula "4") (term "0")) - (rule "add_literals" (formula "4") (term "1,0")) - (rule "times_zero_1" (formula "4") (term "0")) - (rule "qeq_literals" (formula "4")) - (rule "true_left" (formula "4")) - (rule "applyEq" (formula "25") (term "0") (ifseqformula "24")) - (rule "inEqSimp_homoInEq1" (formula "25")) - (rule "polySimp_pullOutFactor1" (formula "25") (term "0")) - (rule "add_literals" (formula "25") (term "1,0")) - (rule "times_zero_1" (formula "25") (term "0")) - (rule "leq_literals" (formula "25")) - (rule "true_left" (formula "25")) - (rule "inEqSimp_exactShadow3" (formula "21") (ifseqformula "5")) - (rule "times_zero_1" (formula "21") (term "0,0")) - (rule "add_zero_left" (formula "21") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "21")) - (rule "mul_literals" (formula "21") (term "1")) - (rule "inEqSimp_subsumption1" (formula "14") (ifseqformula "21")) - (rule "leq_literals" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "true_left" (formula "14")) (rule "pullOutSelect" (formula "1") (term "2,0") (inst "selectSK=f_0_2")) (rule "simplifySelectOfStore" (formula "1")) (builtin "One Step Simplification" (formula "1")) @@ -6778,204 +3091,72 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "simplifySelectOfCreate" (formula "1")) (rule "castDel" (formula "1") (term "1,0")) (rule "eqSymm" (formula "1") (term "0,0,0,0")) - (rule "replace_known_right" (formula "1") (term "0,1,0,0,0") (ifseqformula "30")) + (rule "replace_known_right" (formula "1") (term "0,1,0,0,0") (ifseqformula "34")) (builtin "One Step Simplification" (formula "1")) - (rule "nnf_imp2or" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) (rule "commute_and" (formula "4") (term "0,0")) (rule "commute_and" (formula "3") (term "0,0")) (rule "commute_and" (formula "2") (term "0,0")) (rule "commute_and" (formula "1") (term "0,0")) - (rule "jdiv_axiom" (formula "26") (term "0")) - (rule "eqSymm" (formula "26")) - (rule "applyEq" (formula "26") (term "1") (ifseqformula "27")) - (rule "inEqSimp_subsumption1" (formula "26") (term "0,0") (ifseqformula "22")) - (rule "leq_literals" (formula "26") (term "0,0,0")) - (builtin "One Step Simplification" (formula "26")) - (rule "cut_direct" (formula "35") (term "0,0")) + (rule "cut_direct" (formula "40") (term "0,0")) (branch "CUT: o_0 = null TRUE" - (builtin "One Step Simplification" (formula "36")) - (rule "false_right" (formula "36")) (rule "applyEq" (formula "3") (term "0,1,0,0") (ifseqformula "1")) (rule "eqSymm" (formula "3") (term "1,0,0")) - (rule "replace_known_right" (formula "3") (term "1,0,0") (ifseqformula "32")) + (rule "replace_known_right" (formula "3") (term "1,0,0") (ifseqformula "35")) (builtin "One Step Simplification" (formula "3")) (rule "applyEqReverse" (formula "4") (term "2,0") (ifseqformula "3")) - (rule "hideAuxiliaryEq" (formula "3")) - (rule "applyEqRigid" (formula "3") (term "0,1,0,0") (ifseqformula "1")) - (rule "eqSymm" (formula "3") (term "1,0,0")) - (rule "replace_known_right" (formula "3") (term "1,0,0") (ifseqformula "31")) - (builtin "One Step Simplification" (formula "3")) - (rule "applyEqReverse" (formula "4") (term "2,0") (ifseqformula "3")) - (rule "hideAuxiliaryEq" (formula "3")) + (rule "applyEqRigid" (formula "4") (term "0,1,0,0") (ifseqformula "1")) + (rule "eqSymm" (formula "4") (term "1,0,0")) + (rule "replace_known_right" (formula "4") (term "1,0,0") (ifseqformula "35")) + (builtin "One Step Simplification" (formula "4")) + (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) (rule "applyEqRigid" (formula "2") (term "1,2,0") (ifseqformula "1")) - (rule "applyEq" (formula "34") (term "1,0") (ifseqformula "1")) + (rule "applyEq" (formula "42") (term "1,0") (ifseqformula "1")) (rule "applyEq" (formula "2") (term "0,1,0,0") (ifseqformula "1")) (rule "eqSymm" (formula "2") (term "1,0,0")) - (rule "replace_known_right" (formula "2") (term "1,0,0") (ifseqformula "30")) + (rule "replace_known_right" (formula "2") (term "1,0,0") (ifseqformula "35")) (builtin "One Step Simplification" (formula "2")) - (rule "applyEqReverse" (formula "3") (term "2,0") (ifseqformula "2")) - (rule "hideAuxiliaryEq" (formula "2")) - (rule "applyEqRigid" (formula "2") (term "0,1,0,0") (ifseqformula "1")) - (rule "eqSymm" (formula "2") (term "1,0,0")) - (rule "replace_known_right" (formula "2") (term "1,0,0") (ifseqformula "29")) - (builtin "One Step Simplification" (formula "2") (ifInst "" (formula "33"))) - (rule "closeFalse" (formula "2")) + (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "2")) + (rule "applyEqRigid" (formula "5") (term "0,1,0,0") (ifseqformula "1")) + (rule "eqSymm" (formula "5") (term "1,0,0")) + (rule "replace_known_right" (formula "5") (term "1,0,0") (ifseqformula "35")) + (builtin "One Step Simplification" (formula "5") (ifInst "" (formula "42"))) + (rule "closeFalse" (formula "5")) ) (branch "CUT: o_0 = null FALSE" - (builtin "One Step Simplification" (formula "36")) - (rule "notRight" (formula "36")) - (rule "div_axiom" (formula "27") (term "0") (inst "quotient=quotient_0")) - (rule "equal_literals" (formula "27") (term "0")) - (builtin "One Step Simplification" (formula "27")) - (rule "mul_literals" (formula "27") (term "1,1,1,1")) - (rule "qeq_literals" (formula "27") (term "0,1")) - (builtin "One Step Simplification" (formula "27")) - (rule "andLeft" (formula "27")) - (rule "andLeft" (formula "27")) - (rule "polySimp_addComm1" (formula "29") (term "1")) - (rule "add_literals" (formula "29") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "28")) - (rule "inEqSimp_homoInEq1" (formula "29")) - (rule "polySimp_mulLiterals" (formula "29") (term "1,0")) - (rule "polySimp_addComm1" (formula "29") (term "0")) - (rule "applyEq" (formula "27") (term "0") (ifseqformula "30")) - (rule "applyEq" (formula "31") (term "1") (ifseqformula "27")) - (rule "applyEqRigid" (formula "30") (term "1") (ifseqformula "27")) - (rule "applyEqRigid" (formula "25") (term "1") (ifseqformula "27")) - (rule "applyEq" (formula "26") (term "1") (ifseqformula "27")) - (rule "inEqSimp_sepPosMonomial0" (formula "29")) - (rule "polySimp_mulComm0" (formula "29") (term "1")) - (rule "polySimp_rightDist" (formula "29") (term "1")) - (rule "polySimp_mulLiterals" (formula "29") (term "1,1")) - (rule "mul_literals" (formula "29") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "23") (ifseqformula "29")) - (rule "mul_literals" (formula "23") (term "0,0")) - (rule "polySimp_addAssoc" (formula "23") (term "0")) - (rule "add_literals" (formula "23") (term "0,0")) - (rule "add_zero_left" (formula "23") (term "0")) - (rule "elimGcdGeq_antec" (formula "23") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=quotient_0") (inst "elimGcdRightDiv=Z(0(#))")) - (rule "polySimp_mulLiterals" (formula "23") (term "1,0,1,0")) - (rule "add_zero_right" (formula "23") (term "0,0,0,1,0")) - (rule "leq_literals" (formula "23") (term "0,0")) - (builtin "One Step Simplification" (formula "23")) - (rule "times_zero_1" (formula "23") (term "1,0,0,0,0")) - (rule "add_zero_right" (formula "23") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "23") (term "0,0")) - (rule "add_literals" (formula "23") (term "1,1,0,0")) - (rule "times_zero_1" (formula "23") (term "1,0,0")) - (rule "add_literals" (formula "23") (term "0,0")) - (rule "leq_literals" (formula "23") (term "0")) - (builtin "One Step Simplification" (formula "23")) + (builtin "One Step Simplification" (formula "41")) + (rule "notRight" (formula "41")) (rule "ifthenelse_split" (formula "2") (term "0")) (branch "f_0 = java.lang.Object:: & o_0 = i_14 TRUE" (rule "andLeft" (formula "2")) - (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "5") (ifInst "" (formula "3"))) - (rule "applyEqReverse" (formula "6") (term "2,0") (ifseqformula "5")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "replace_known_left" (formula "5") (term "1,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "5")) - (rule "replace_known_left" (formula "4") (term "1,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "4")) - (rule "applyEq" (formula "41") (term "2,0") (ifseqformula "2")) - (rule "narrowSelectType" (formula "41") (term "0") (ifseqformula "9")) - (rule "eqSymm" (formula "41")) - (rule "applyEq" (formula "40") (term "0") (ifseqformula "3")) - (rule "applyEqRigid" (formula "5") (term "0,0,0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "5")) - (rule "applyEqReverse" (formula "40") (term "0") (ifseqformula "5")) - (rule "hideAuxiliaryEq" (formula "5")) (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "3")) - (rule "close" (formula "36") (ifseqformula "1")) + (rule "close" (formula "38") (ifseqformula "1")) ) (branch "f_0 = java.lang.Object:: & o_0 = i_14 FALSE" (rule "applyEqReverse" (formula "3") (term "2,0") (ifseqformula "2")) - (rule "hideAuxiliaryEq" (formula "2")) - (rule "ifthenelse_split" (formula "2") (term "0")) + (rule "ifthenelse_split" (formula "3") (term "0")) (branch "f_0 = IntOpt::$present & o_0 = i_14 TRUE" - (rule "andLeft" (formula "2")) - (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "replace_known_left" (formula "4") (term "1,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "4")) - (rule "replace_known_left" (formula "5") (term "1,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "5")) - (rule "replace_known_left" (formula "36") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "36")) - (rule "applyEq" (formula "4") (term "0,0,0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "4")) - (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) - (builtin "One Step Simplification" (formula "5")) - (rule "applyEqReverse" (formula "42") (term "1") (ifseqformula "5")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "applyEq" (formula "39") (term "0") (ifseqformula "3")) - (rule "applyEq" (formula "34") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "34")) - (rule "false_right" (formula "34")) - (rule "applyEq" (formula "38") (term "2,0") (ifseqformula "2")) - (rule "narrowSelectType" (formula "38") (term "0") (ifseqformula "7")) - (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "3")) - (rule "close" (formula "35") (ifseqformula "1")) + (rule "andLeft" (formula "3")) + (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "4")) + (rule "close" (formula "39") (ifseqformula "1")) ) (branch "f_0 = IntOpt::$present & o_0 = i_14 FALSE" - (rule "applyEqReverse" (formula "3") (term "2,0") (ifseqformula "2")) - (rule "hideAuxiliaryEq" (formula "2")) - (rule "ifthenelse_split" (formula "2") (term "0")) + (rule "applyEqReverse" (formula "4") (term "2,0") (ifseqformula "3")) + (rule "ifthenelse_split" (formula "4") (term "0")) (branch "f_0 = IntOpt::$value & o_0 = i_14 TRUE" - (rule "andLeft" (formula "2")) - (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "replace_known_left" (formula "4") (term "1,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "4")) - (rule "replace_known_left" (formula "36") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "36")) - (rule "replace_known_left" (formula "35") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "35")) - (rule "applyEq" (formula "36") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "36")) - (rule "false_right" (formula "36")) - (rule "applyEqRigid" (formula "35") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "35")) - (rule "false_right" (formula "35")) - (rule "applyEq" (formula "39") (term "0") (ifseqformula "3")) - (rule "applyEq" (formula "39") (term "2,0") (ifseqformula "2")) - (rule "narrowSelectType" (formula "39") (term "0") (ifseqformula "8")) - (rule "eqSymm" (formula "39")) - (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "3")) - (rule "close" (formula "36") (ifseqformula "1")) + (rule "andLeft" (formula "4")) + (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "5")) + (rule "close" (formula "40") (ifseqformula "1")) ) (branch "f_0 = IntOpt::$value & o_0 = i_14 FALSE" - (rule "applyEqReverse" (formula "3") (term "2,0") (ifseqformula "2")) - (rule "hideAuxiliaryEq" (formula "2")) - (rule "ifthenelse_split" (formula "2") (term "0")) + (rule "applyEqReverse" (formula "5") (term "2,0") (ifseqformula "4")) + (rule "ifthenelse_split" (formula "5") (term "0")) (branch "f_0 = java.lang.Object:: & o_0 = i_14 TRUE" - (rule "andLeft" (formula "2")) - (rule "applyEqReverse" (formula "43") (term "1") (ifseqformula "4")) - (rule "hideAuxiliaryEq" (formula "4")) - (rule "replace_known_left" (formula "35") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "35")) - (rule "replace_known_left" (formula "34") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "34")) - (rule "replace_known_left" (formula "36") (term "1") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "36")) - (rule "applyEq" (formula "42") (term "1,0") (ifseqformula "3")) - (rule "applyEq" (formula "35") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "35")) - (rule "false_right" (formula "35")) - (rule "applyEqRigid" (formula "34") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "34")) - (rule "false_right" (formula "34")) - (rule "applyEq" (formula "34") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "34")) - (rule "false_right" (formula "34")) - (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "3")) - (rule "close" (formula "35") (ifseqformula "1")) + (rule "andLeft" (formula "5")) + (rule "applyEq" (formula "1") (term "1,0") (ifseqformula "6")) + (rule "close" (formula "41") (ifseqformula "1")) ) (branch "f_0 = java.lang.Object:: & o_0 = i_14 FALSE" - (rule "close" (formula "42") (ifseqformula "2")) + (rule "close" (formula "46") (ifseqformula "5")) ) ) ) @@ -7006,52 +3187,29 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addComm0" (formula "29") (term "0,1")) (rule "measuredByCheckEmpty" (formula "29") (term "1") (ifseqformula "8")) (builtin "One Step Simplification" (formula "29")) - (rule "inEqSimp_ltRight" (formula "26")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "inEqSimp_gtToGeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "polySimp_addAssoc" (formula "2") (term "0,0")) - (rule "add_literals" (formula "2") (term "0,0,0")) - (rule "add_zero_left" (formula "2") (term "0,0")) + (rule "inEqSimp_ltToLeq" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "3") (term "0")) (rule "inEqSimp_commuteLeq" (formula "29") (term "1")) (rule "inEqSimp_homoInEq0" (formula "29") (term "0")) (rule "times_zero_2" (formula "29") (term "1,0,0")) (rule "add_zero_right" (formula "29") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "polySimp_elimOne" (formula "4") (term "0")) - (rule "replace_known_left" (formula "29") (term "1") (ifseqformula "4")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "polySimp_elimOne" (formula "3") (term "0")) + (rule "replace_known_left" (formula "29") (term "1") (ifseqformula "3")) (builtin "One Step Simplification" (formula "29")) (rule "inEqSimp_geqRight" (formula "29")) (rule "times_zero_1" (formula "1") (term "1,0,0")) (rule "add_zero_right" (formula "1") (term "0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_strengthen1" (formula "17") (ifseqformula "27")) - (rule "add_zero_right" (formula "17") (term "1")) - (rule "inEqSimp_contradEq7" (formula "27") (ifseqformula "17")) - (rule "times_zero_1" (formula "27") (term "1,0,0")) - (rule "add_zero_right" (formula "27") (term "0,0")) - (rule "leq_literals" (formula "27") (term "0")) - (builtin "One Step Simplification" (formula "27")) - (rule "false_right" (formula "27")) - (rule "inEqSimp_contradInEq0" (formula "22") (ifseqformula "1")) - (rule "qeq_literals" (formula "22") (term "0")) - (builtin "One Step Simplification" (formula "22")) - (rule "closeFalse" (formula "22")) + (rule "inEqSimp_contradInEq0" (formula "21") (ifseqformula "1")) + (rule "qeq_literals" (formula "21") (term "0")) + (builtin "One Step Simplification" (formula "21")) + (rule "closeFalse" (formula "21")) ) ) (branch "if ++cnt > _a.length / 2 false" @@ -7061,7 +3219,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "blockEmpty" (formula "29") (term "1")) (rule "unusedLabel" (formula "29") (term "1")) (rule "postincrement" (formula "29") (term "1")) - (rule "compound_int_cast_expression" (formula "29") (term "1") (inst "#v=i_12")) + (rule "compound_reference_cast_expression_primitive" (formula "29") (term "1") (inst "#v=i_12")) (rule "variableDeclarationAssign" (formula "29") (term "1")) (rule "variableDeclaration" (formula "29") (term "1") (newnames "i_12")) (rule "remove_parentheses_right" (formula "29") (term "1")) @@ -7077,74 +3235,116 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "emptyModality" (formula "29") (term "1")) (builtin "One Step Simplification" (formula "29")) (rule "andRight" (formula "29")) - (branch + (branch "Case 1" (rule "andRight" (formula "29")) (branch "Case 1" - (opengoal " (int::select(heap, a, arr(r_0)) = mx_0)< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit), decreases @ file BoyerMoore.java @ line 70, loop_invariant @ file BoyerMoore.java @ line 66, loop_invariant @ file BoyerMoore.java @ line 67, loop_invariant @ file BoyerMoore.java @ line 68]\")>>, lt(r_0, length(a<>))<>, wellFormed(heap)<>, ( boolean::select(heap, self, java.lang.Object::) = TRUE)<>, (BoyerMoore::exactInstance(self) = TRUE)<>, ( boolean::select(heap, a, java.lang.Object::) = TRUE)<>, measuredByEmpty<>, IntOpt::<$inv>(heap), java.lang.Object::(heap, self)<>, wellFormed(anon_heap_LOOP<>), geq(k_0, Z(0(#)))<>, geq(length(a), Z(0(#))), geq(length(a), k_0)<>, geq(mc_0, Z(0(#)))<>, BoyerMoore::count$lmtd(heap, self, a, k_0, mx_0) = BoyerMoore::count(heap, self, a, k_0, mx_0), leq(mul(BoyerMoore::count(heap, self, a, k_0, mx_0), Z(2(#))), add(k_0, mc_0))<>, (\\forall int x; ( !x = mx_0 -> leq(mul(BoyerMoore::count(heap, self, a, k_0, x), Z(2(#))), add(k_0, mul(mc_0, Z(neglit(1(#))))))))<>, wellFormed(anon_heap_LOOP_0<>), geq(r_0, Z(0(#)))<>, geq(length(a), r_0)<>, BoyerMoore::count$lmtd(heap, self, a, r_0, mx_0) = cnt_0, (BoyerMoore::count(heap, self, a, r_0, mx_0) = cnt_0)<>, geq(jdiv(length(a), Z(2(#))), cnt_0)<> ==> gt(add(Z(1(#)), cnt_0), jdiv(length(a), Z(2(#))))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit), decreases @ file BoyerMoore.java @ line 70, loop_invariant @ file BoyerMoore.java @ line 66, loop_invariant @ file BoyerMoore.java @ line 67, loop_invariant @ file BoyerMoore.java @ line 68]\")>>, (mc_0 = Z(0(#)))< (implicit)\",\"[ensures @ file BoyerMoore.java @ line 34, ensures @ file BoyerMoore.java @ line 36, ensures (implicit), assignable (implicit)]\")>>, lt(k_0, length(a)), (self<> = null)<>, (a = null)<>, ( (geq(add(Z(1(#)), r_0), Z(0(#))) & geq(length(a), add(Z(1(#)), r_0)))<> & ( BoyerMoore::count(heap, self, a, add(Z(1(#)), r_0), mx_0) = add(Z(1(#)), cnt_0))<>)< (implicit)\",\"[loop_invariant @ file BoyerMoore.java @ line 66, loop_invariant @ file BoyerMoore.java @ line 67]\")>>") + (rule "andRight" (formula "29")) + (branch + (rule "andRight" (formula "29")) + (branch "Case 1" + (rule "inEqSimp_geqRight" (formula "29")) + (rule "times_zero_1" (formula "1") (term "1,0,0")) + (rule "add_zero_right" (formula "1") (term "0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0")) + (rule "add_literals" (formula "1") (term "0,0")) + (rule "inEqSimp_sepPosMonomial0" (formula "1")) + (rule "mul_literals" (formula "1") (term "1")) + (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "20")) + (rule "qeq_literals" (formula "1") (term "0")) + (builtin "One Step Simplification" (formula "1")) + (rule "closeFalse" (formula "1")) + ) + (branch "Case 2" + (rule "inEqSimp_geqRight" (formula "29")) + (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) + (rule "mul_literals" (formula "1") (term "0,1,0,0")) + (rule "polySimp_addAssoc" (formula "1") (term "0,0")) + (rule "add_literals" (formula "1") (term "0,0,0")) + (rule "add_zero_left" (formula "1") (term "0,0")) + (rule "inEqSimp_ltToLeq" (formula "3")) + (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "3") (term "0")) + (rule "inEqSimp_sepPosMonomial0" (formula "1")) + (rule "polySimp_mulLiterals" (formula "1") (term "1")) + (rule "polySimp_elimOne" (formula "1") (term "1")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "polySimp_elimOne" (formula "3") (term "0")) + (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "3")) + (rule "andLeft" (formula "1")) + (rule "inEqSimp_homoInEq1" (formula "1")) + (rule "polySimp_pullOutFactor1b" (formula "1") (term "0")) + (rule "add_literals" (formula "1") (term "1,1,0")) + (rule "times_zero_1" (formula "1") (term "1,0")) + (rule "add_zero_right" (formula "1") (term "0")) + (rule "leq_literals" (formula "1")) + (rule "closeFalse" (formula "1")) + ) + ) + (branch "Case 2" + (rule "Definition_axiom_for_count_in_BoyerMoore" (formula "29") (term "0") (ifseqformula "5") (userinteraction)) + (rule "castDel" (formula "29") (term "0")) + (rule "polySimp_elimSub" (formula "29") (term "0,2,0,0,0,2,0")) + (rule "mul_literals" (formula "29") (term "1,0,2,0,0,0,2,0")) + (rule "polySimp_elimSub" (formula "29") (term "3,1,2,0")) + (rule "mul_literals" (formula "29") (term "1,3,1,2,0")) + (rule "polySimp_addComm1" (formula "29") (term "0,2,0,0,0,2,0")) + (rule "add_literals" (formula "29") (term "0,0,2,0,0,0,2,0")) + (rule "add_zero_left" (formula "29") (term "0,2,0,0,0,2,0")) + (rule "replace_known_left" (formula "29") (term "0,0,2,0") (ifseqformula "1")) + (builtin "One Step Simplification" (formula "29")) + (rule "polySimp_addComm1" (formula "29") (term "3,1,2,0")) + (rule "add_literals" (formula "29") (term "0,3,1,2,0")) + (rule "add_zero_left" (formula "29") (term "3,1,2,0")) + (rule "inEqSimp_ltRight" (formula "26")) + (rule "polySimp_mulComm0" (formula "1") (term "0,0")) + (rule "polySimp_addComm0" (formula "1") (term "0")) + (rule "inEqSimp_gtRight" (formula "25")) + (rule "polySimp_mulComm0" (formula "1") (term "0,0")) + (rule "polySimp_addComm0" (formula "1") (term "0")) + (rule "inEqSimp_ltToLeq" (formula "4")) + (rule "polySimp_mulComm0" (formula "4") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "4") (term "0")) + (rule "applyEq" (formula "29") (term "1,2,0") (ifseqformula "23")) + (builtin "One Step Simplification" (formula "29")) + (rule "orRight" (formula "29")) + (rule "notRight" (formula "29")) + (rule "polySimp_homoEq" (formula "30")) + (rule "times_zero_2" (formula "30") (term "1,0")) + (rule "add_zero_right" (formula "30") (term "0")) + (rule "polySimp_sepPosMonomial" (formula "1")) + (rule "mul_literals" (formula "1") (term "1")) + (rule "applyEq" (formula "23") (term "1") (ifseqformula "1")) + (rule "applyEqRigid" (formula "22") (term "0") (ifseqformula "1")) + (rule "qeq_literals" (formula "22")) + (rule "closeFalse" (formula "22")) + ) ) - (branch "Case 2" + (branch (rule "inEqSimp_geqRight" (formula "29")) (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) (rule "mul_literals" (formula "1") (term "0,1,0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0,0")) (rule "add_literals" (formula "1") (term "0,0,0")) (rule "add_zero_left" (formula "1") (term "0,0")) - (rule "inEqSimp_ltRight" (formula "27")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "26")) + (rule "inEqSimp_gtRight" (formula "25")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "5") (term "0")) - (rule "inEqSimp_sepPosMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "1")) - (rule "polySimp_elimOne" (formula "3") (term "1")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) + (rule "inEqSimp_sepPosMonomial0" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "1")) + (rule "polySimp_elimOne" (formula "2") (term "1")) (rule "inEqSimp_sepNegMonomial0" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "5")) - (rule "polySimp_mulLiterals" (formula "5") (term "0")) - (rule "polySimp_elimOne" (formula "5") (term "0")) - (rule "inEqSimp_strengthen1" (formula "17") (ifseqformula "27")) - (rule "add_zero_right" (formula "17") (term "1")) - (rule "inEqSimp_contradEq7" (formula "27") (ifseqformula "17")) - (rule "times_zero_1" (formula "27") (term "1,0,0")) - (rule "add_zero_right" (formula "27") (term "0,0")) - (rule "leq_literals" (formula "27") (term "0")) - (builtin "One Step Simplification" (formula "27")) - (rule "false_right" (formula "27")) - (rule "inEqSimp_subsumption1" (formula "26") (ifseqformula "1")) - (rule "inEqSimp_homoInEq0" (formula "26") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "26") (term "0,0")) - (rule "add_literals" (formula "26") (term "1,1,0,0")) - (rule "times_zero_1" (formula "26") (term "1,0,0")) - (rule "add_zero_right" (formula "26") (term "0,0")) - (rule "qeq_literals" (formula "26") (term "0")) - (builtin "One Step Simplification" (formula "26")) - (rule "true_left" (formula "26")) - (rule "inEqSimp_subsumption1" (formula "23") (ifseqformula "5")) - (rule "inEqSimp_homoInEq0" (formula "23") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "23") (term "0,0")) - (rule "add_literals" (formula "23") (term "1,1,0,0")) - (rule "times_zero_1" (formula "23") (term "1,0,0")) - (rule "add_zero_right" (formula "23") (term "0,0")) - (rule "qeq_literals" (formula "23") (term "0")) - (builtin "One Step Simplification" (formula "23")) - (rule "true_left" (formula "23")) - (rule "inEqSimp_contradInEq1" (formula "3") (ifseqformula "1")) - (rule "andLeft" (formula "3")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0")) - (rule "add_literals" (formula "3") (term "1,1,0")) - (rule "times_zero_1" (formula "3") (term "1,0")) - (rule "add_zero_right" (formula "3") (term "0")) - (rule "leq_literals" (formula "3")) - (rule "closeFalse" (formula "3")) + (rule "inEqSimp_contradInEq1" (formula "2") (ifseqformula "1")) + (rule "andLeft" (formula "2")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "polySimp_pullOutFactor1b" (formula "2") (term "0")) + (rule "add_literals" (formula "2") (term "1,1,0")) + (rule "times_zero_1" (formula "2") (term "1,0")) + (rule "add_zero_right" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) ) (branch @@ -7152,12 +3352,9 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_rightDist" (formula "29") (term "0,0")) (rule "mul_literals" (formula "29") (term "0,0,0")) (rule "precOfInt" (formula "29")) - (rule "inEqSimp_ltRight" (formula "26")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) + (rule "inEqSimp_ltToLeq" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "2") (term "0")) (rule "inEqSimp_ltToLeq" (formula "29") (term "1")) (rule "polySimp_rightDist" (formula "29") (term "1,0,0,1")) (rule "polySimp_mulAssoc" (formula "29") (term "0,1,0,0,1")) @@ -7191,33 +3388,13 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "1") (term "0,0")) (rule "add_literals" (formula "1") (term "0,0,0")) (rule "add_zero_left" (formula "1") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "0")) - (rule "polySimp_elimOne" (formula "4") (term "0")) + (rule "inEqSimp_sepNegMonomial0" (formula "3")) + (rule "polySimp_mulLiterals" (formula "3") (term "0")) + (rule "polySimp_elimOne" (formula "3") (term "0")) (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "16") (ifseqformula "27")) - (rule "add_zero_right" (formula "16") (term "1")) - (rule "inEqSimp_contradEq7" (formula "27") (ifseqformula "16")) - (rule "times_zero_1" (formula "27") (term "1,0,0")) - (rule "add_zero_right" (formula "27") (term "0,0")) - (rule "leq_literals" (formula "27") (term "0")) - (builtin "One Step Simplification" (formula "27")) - (rule "false_right" (formula "27")) - (rule "inEqSimp_subsumption1" (formula "22") (ifseqformula "4")) - (rule "inEqSimp_homoInEq0" (formula "22") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "22") (term "0,0")) - (rule "add_literals" (formula "22") (term "1,1,0,0")) - (rule "times_zero_1" (formula "22") (term "1,0,0")) - (rule "add_zero_right" (formula "22") (term "0,0")) - (rule "qeq_literals" (formula "22") (term "0")) - (builtin "One Step Simplification" (formula "22")) - (rule "true_left" (formula "22")) - (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "4")) + (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "3")) (rule "andLeft" (formula "1")) (rule "inEqSimp_homoInEq1" (formula "1")) (rule "polySimp_pullOutFactor1b" (formula "1") (term "0")) @@ -7229,7 +3406,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) ) - (branch "Case 2" + (branch (builtin "One Step Simplification" (formula "28")) (rule "equal_literals" (formula "28") (term "0")) (builtin "One Step Simplification" (formula "28")) @@ -7237,7 +3414,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "Null Reference (mc == 0 = null)" - (rule "false_right" (formula "29")) (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "28"))) (rule "closeFalse" (formula "1")) ) @@ -7248,10 +3424,10 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "notLeft" (formula "1")) (rule "blockEmpty" (formula "28") (term "1")) (rule "postincrement" (formula "28") (term "1")) - (rule "unusedLabel" (formula "28") (term "1")) (rule "compound_reference_cast_expression_primitive" (formula "28") (term "1") (inst "#v=i_8")) (rule "variableDeclarationAssign" (formula "28") (term "1")) (rule "variableDeclaration" (formula "28") (term "1") (newnames "i_8")) + (rule "unusedLabel" (formula "28") (term "1")) (rule "remove_parentheses_right" (formula "28") (term "1")) (rule "assignmentAdditionInt" (formula "28") (term "1")) (builtin "One Step Simplification" (formula "28")) @@ -7270,86 +3446,43 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "andRight" (formula "28")) (branch "Case 1" - (rule "inEqSimp_ltRight" (formula "25")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) (rule "inEqSimp_geqRight" (formula "28")) (rule "times_zero_1" (formula "1") (term "1,0,0")) (rule "add_zero_right" (formula "1") (term "0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0")) (rule "add_literals" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "26")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "26") (ifseqformula "15")) - (rule "times_zero_1" (formula "26") (term "1,0,0")) - (rule "add_zero_right" (formula "26") (term "0,0")) - (rule "leq_literals" (formula "26") (term "0")) - (builtin "One Step Simplification" (formula "26")) - (rule "false_right" (formula "26")) - (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "20")) + (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "19")) (rule "qeq_literals" (formula "1") (term "0")) (builtin "One Step Simplification" (formula "1")) (rule "closeFalse" (formula "1")) ) (branch "Case 2" - (rule "inEqSimp_ltRight" (formula "25")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) (rule "inEqSimp_geqRight" (formula "28")) (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) (rule "mul_literals" (formula "1") (term "0,1,0,0")) (rule "polySimp_addAssoc" (formula "1") (term "0,0")) (rule "add_literals" (formula "1") (term "0,0,0")) (rule "add_zero_left" (formula "1") (term "0,0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) + (rule "inEqSimp_ltToLeq" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "2") (term "0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "1")) (rule "polySimp_elimOne" (formula "1") (term "1")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "26")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "26") (ifseqformula "15")) - (rule "times_zero_1" (formula "26") (term "1,0,0")) - (rule "add_zero_right" (formula "26") (term "0,0")) - (rule "leq_literals" (formula "26") (term "0")) - (builtin "One Step Simplification" (formula "26")) - (rule "false_right" (formula "26")) - (rule "inEqSimp_subsumption1" (formula "21") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "21") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "qeq_literals" (formula "21") (term "0")) - (builtin "One Step Simplification" (formula "21")) - (rule "true_left" (formula "21")) - (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) - (rule "andLeft" (formula "3")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0")) - (rule "add_literals" (formula "3") (term "1,1,0")) - (rule "times_zero_1" (formula "3") (term "1,0")) - (rule "add_zero_right" (formula "3") (term "0")) - (rule "leq_literals" (formula "3")) - (rule "closeFalse" (formula "3")) + (rule "inEqSimp_sepNegMonomial0" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "0")) + (rule "polySimp_elimOne" (formula "2") (term "0")) + (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "1")) + (rule "andLeft" (formula "2")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "polySimp_pullOutFactor1b" (formula "2") (term "0")) + (rule "add_literals" (formula "2") (term "1,1,0")) + (rule "times_zero_1" (formula "2") (term "1,0")) + (rule "add_zero_right" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) ) (branch "Case 2" @@ -7365,141 +3498,80 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "25")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "25") (ifseqformula "14")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "leq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "false_right" (formula "25")) - (rule "inEqSimp_subsumption1" (formula "20") (ifseqformula "2")) - (rule "inEqSimp_homoInEq0" (formula "20") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "20") (term "0,0")) - (rule "add_literals" (formula "20") (term "1,1,0,0")) - (rule "times_zero_1" (formula "20") (term "1,0,0")) - (rule "add_zero_right" (formula "20") (term "0,0")) - (rule "qeq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "true_left" (formula "20")) (rule "inEqSimp_antiSymm" (formula "13") (ifseqformula "1")) (rule "applyEq" (formula "2") (term "0") (ifseqformula "13")) (rule "inEqSimp_homoInEq1" (formula "2")) (rule "polySimp_addComm1" (formula "2") (term "0")) - (rule "applyEq" (formula "12") (term "0") (ifseqformula "13")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEq" (formula "12") (term "0") (ifseqformula "11")) - (rule "inEqSimp_homoInEq1" (formula "12")) - (rule "polySimp_pullOutFactor1" (formula "12") (term "0")) - (rule "add_literals" (formula "12") (term "1,0")) - (rule "times_zero_1" (formula "12") (term "0")) - (rule "leq_literals" (formula "12")) - (rule "true_left" (formula "12")) - (rule "inEqSimp_sepPosMonomial0" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "mul_literals" (formula "1") (term "0,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "inEqSimp_exactShadow3" (formula "17") (ifseqformula "1")) - (rule "times_zero_1" (formula "17") (term "0,0")) - (rule "add_zero_left" (formula "17") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "17")) - (rule "mul_literals" (formula "17") (term "1")) - (rule "inEqSimp_subsumption1" (formula "10") (ifseqformula "17")) - (rule "leq_literals" (formula "10") (term "0")) - (builtin "One Step Simplification" (formula "10")) - (rule "true_left" (formula "10")) - (rule "nnf_imp2or" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "19") (term "0") (inst "l=l")) - (rule "eqSymm" (formula "19") (term "0,1")) - (rule "replace_known_left" (formula "19") (term "1,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "19") (ifInst "" (formula "8")) (ifInst "" (formula "24")) (ifInst "" (formula "2")) (ifInst "" (formula "23")) (ifInst "" (formula "8"))) - (rule "measuredByCheckEmpty" (formula "19") (term "1,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "19")) - (rule "inEqSimp_commuteLeq" (formula "19") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "19") (term "0,0")) - (rule "replace_known_left" (formula "19") (term "0,0") (ifseqformula "17")) - (builtin "One Step Simplification" (formula "19")) - (rule "applyEq" (formula "19") (term "0,0") (ifseqformula "10")) - (rule "inEqSimp_commuteGeq" (formula "19") (term "0")) - (rule "applyEq" (formula "19") (term "1,1") (ifseqformula "20")) - (rule "inEqSimp_subsumption0" (formula "19") (term "0") (ifseqformula "1")) - (rule "inEqSimp_homoInEq0" (formula "19") (term "0,0")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0,0,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0,0,0")) - (rule "mul_literals" (formula "19") (term "0,1,0,0,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0,0,0")) - (rule "polySimp_addComm0" (formula "19") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor1b" (formula "19") (term "0,0,0")) - (rule "add_literals" (formula "19") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "19") (term "1,0,0,0")) - (rule "add_zero_right" (formula "19") (term "0,0,0")) - (rule "qeq_literals" (formula "19") (term "0,0")) - (builtin "One Step Simplification" (formula "19")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "13") (term "0,0") (inst "l=l")) - (rule "eqSymm" (formula "13") (term "0,1")) - (rule "replace_known_left" (formula "13") (term "1,0,0,0") (ifseqformula "3")) - (builtin "One Step Simplification" (formula "13") (ifInst "" (formula "8")) (ifInst "" (formula "25")) (ifInst "" (formula "2")) (ifInst "" (formula "24")) (ifInst "" (formula "8"))) - (rule "measuredByCheckEmpty" (formula "13") (term "1,0") (ifseqformula "6")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "1,0")) - (rule "inEqSimp_commuteLeq" (formula "13") (term "0,0")) - (rule "applyEq" (formula "13") (term "0,1,0") (ifseqformula "10")) - (rule "inEqSimp_homoInEq1" (formula "13") (term "1,0")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0,1,0")) - (rule "add_literals" (formula "13") (term "1,0,1,0")) - (rule "times_zero_1" (formula "13") (term "0,1,0")) - (rule "leq_literals" (formula "13") (term "1,0")) - (builtin "One Step Simplification" (formula "13")) - (rule "inEqSimp_subsumption1" (formula "13") (term "0") (ifseqformula "17")) - (rule "leq_literals" (formula "13") (term "0,0")) - (builtin "One Step Simplification" (formula "13")) - (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "26") (term "0") (inst "l=l")) + (rule "inEqSimp_sepPosMonomial0" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "1")) + (rule "polySimp_rightDist" (formula "2") (term "1")) + (rule "polySimp_mulLiterals" (formula "2") (term "1,1")) + (rule "mul_literals" (formula "2") (term "0,1")) + (rule "polySimp_elimOne" (formula "2") (term "1,1")) + (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "23") (term "0") (inst "l=l")) + (rule "eqSymm" (formula "23") (term "0,1")) + (rule "replace_known_left" (formula "23") (term "1,0,0,0") (ifseqformula "4")) + (builtin "One Step Simplification" (formula "23") (ifInst "" (formula "9")) (ifInst "" (formula "29")) (ifInst "" (formula "3")) (ifInst "" (formula "28")) (ifInst "" (formula "9"))) + (rule "measuredByCheckEmpty" (formula "23") (term "1,0") (ifseqformula "7")) + (builtin "One Step Simplification" (formula "23")) + (rule "inEqSimp_commuteLeq" (formula "23") (term "1,0")) + (rule "inEqSimp_commuteLeq" (formula "23") (term "0,0")) + (rule "replace_known_left" (formula "23") (term "0,0") (ifseqformula "20")) + (builtin "One Step Simplification" (formula "23")) + (rule "applyEq" (formula "23") (term "0,0") (ifseqformula "13")) + (rule "inEqSimp_commuteGeq" (formula "23") (term "0")) + (rule "applyEq" (formula "23") (term "1,1") (ifseqformula "24")) + (rule "inEqSimp_subsumption0" (formula "23") (term "0") (ifseqformula "2")) + (rule "inEqSimp_homoInEq0" (formula "23") (term "0,0")) + (rule "polySimp_mulComm0" (formula "23") (term "1,0,0,0")) + (rule "polySimp_rightDist" (formula "23") (term "1,0,0,0")) + (rule "mul_literals" (formula "23") (term "0,1,0,0,0")) + (rule "polySimp_addAssoc" (formula "23") (term "0,0,0")) + (rule "polySimp_addComm0" (formula "23") (term "0,0,0,0")) + (rule "polySimp_pullOutFactor1b" (formula "23") (term "0,0,0")) + (rule "add_literals" (formula "23") (term "1,1,0,0,0")) + (rule "times_zero_1" (formula "23") (term "1,0,0,0")) + (rule "add_zero_right" (formula "23") (term "0,0,0")) + (rule "qeq_literals" (formula "23") (term "0,0")) + (builtin "One Step Simplification" (formula "23")) + (rule "Contract_axiom_for_count_in_BoyerMoore" (formula "30") (term "0") (inst "l=l")) (rule "eqSymm" (formula "1") (term "0,1")) - (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "9")) - (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "26")) (ifInst "" (formula "3")) (ifInst "" (formula "4")) (ifInst "" (formula "25")) (ifInst "" (formula "9"))) + (rule "replace_known_left" (formula "1") (term "0,1,0,0,0,0,0") (ifseqformula "10")) + (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "30")) (ifInst "" (formula "4")) (ifInst "" (formula "5")) (ifInst "" (formula "29")) (ifInst "" (formula "10"))) (rule "bsum_induction_upper_concrete" (formula "1") (term "0,1")) - (rule "replace_known_right" (formula "1") (term "0,1,1,0,1") (ifseqformula "24")) + (rule "replace_known_right" (formula "1") (term "0,1,1,0,1") (ifseqformula "27")) (builtin "One Step Simplification" (formula "1")) (rule "add_zero_right" (formula "1") (term "0,1")) - (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "7")) + (rule "measuredByCheckEmpty" (formula "1") (term "1,0") (ifseqformula "8")) (builtin "One Step Simplification" (formula "1")) (rule "inEqSimp_commuteLeq" (formula "1") (term "1,0")) (rule "inEqSimp_homoInEq0" (formula "1") (term "0,0")) (rule "times_zero_2" (formula "1") (term "1,0,0,0")) (rule "add_zero_right" (formula "1") (term "0,0,0")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "11")) + (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "14")) (rule "inEqSimp_homoInEq1" (formula "1") (term "1,0")) (rule "polySimp_addComm1" (formula "1") (term "0,1,0")) - (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "21")) + (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "24")) (rule "eqSymm" (formula "1") (term "1")) - (rule "replace_known_right" (formula "1") (term "1") (ifseqformula "27")) + (rule "replace_known_right" (formula "1") (term "1") (ifseqformula "31")) (builtin "One Step Simplification" (formula "1")) (rule "notLeft" (formula "1")) - (rule "inEqSimp_sepPosMonomial1" (formula "23") (term "0")) - (rule "mul_literals" (formula "23") (term "1,0")) - (rule "inEqSimp_sepPosMonomial0" (formula "23") (term "1")) - (rule "polySimp_mulComm0" (formula "23") (term "1,1")) - (rule "polySimp_rightDist" (formula "23") (term "1,1")) - (rule "mul_literals" (formula "23") (term "0,1,1")) - (rule "polySimp_mulLiterals" (formula "23") (term "1,1,1")) - (rule "polySimp_elimOne" (formula "23") (term "1,1,1")) - (rule "replace_known_left" (formula "23") (term "1") (ifseqformula "1")) - (builtin "One Step Simplification" (formula "23")) - (rule "inEqSimp_geqRight" (formula "23")) + (rule "inEqSimp_sepPosMonomial1" (formula "26") (term "0")) + (rule "mul_literals" (formula "26") (term "1,0")) + (rule "inEqSimp_sepPosMonomial0" (formula "26") (term "1")) + (rule "polySimp_mulComm0" (formula "26") (term "1,1")) + (rule "polySimp_rightDist" (formula "26") (term "1,1")) + (rule "mul_literals" (formula "26") (term "0,1,1")) + (rule "polySimp_mulLiterals" (formula "26") (term "1,1,1")) + (rule "polySimp_elimOne" (formula "26") (term "1,1,1")) + (rule "replace_known_left" (formula "26") (term "1") (ifseqformula "2")) + (builtin "One Step Simplification" (formula "26")) + (rule "inEqSimp_geqRight" (formula "26")) (rule "mul_literals" (formula "1") (term "1,0,0")) (rule "add_literals" (formula "1") (term "0,0")) (rule "inEqSimp_sepPosMonomial0" (formula "1")) (rule "mul_literals" (formula "1") (term "1")) - (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "19")) + (rule "inEqSimp_contradInEq1" (formula "1") (ifseqformula "21")) (rule "qeq_literals" (formula "1") (term "0")) (builtin "One Step Simplification" (formula "1")) (rule "closeFalse" (formula "1")) @@ -7510,12 +3582,9 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_rightDist" (formula "28") (term "0,0")) (rule "mul_literals" (formula "28") (term "0,0,0")) (rule "precOfInt" (formula "28")) - (rule "inEqSimp_ltRight" (formula "25")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "2")) - (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "2") (term "0")) + (rule "inEqSimp_ltToLeq" (formula "1")) + (rule "polySimp_mulComm0" (formula "1") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "1") (term "0")) (rule "inEqSimp_ltToLeq" (formula "28") (term "1")) (rule "polySimp_rightDist" (formula "28") (term "1,0,0,1")) (rule "polySimp_mulAssoc" (formula "28") (term "0,1,0,0,1")) @@ -7549,98 +3618,53 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "polySimp_addAssoc" (formula "1") (term "0,0")) (rule "add_literals" (formula "1") (term "0,0,0")) (rule "add_zero_left" (formula "1") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) + (rule "inEqSimp_sepNegMonomial0" (formula "2")) (rule "polySimp_mulLiterals" (formula "2") (term "0")) (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) (rule "inEqSimp_sepNegMonomial1" (formula "1")) (rule "polySimp_mulLiterals" (formula "1") (term "0")) (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "26")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "26") (ifseqformula "15")) - (rule "times_zero_1" (formula "26") (term "1,0,0")) - (rule "add_zero_right" (formula "26") (term "0,0")) - (rule "leq_literals" (formula "26") (term "0")) - (builtin "One Step Simplification" (formula "26")) - (rule "false_right" (formula "26")) - (rule "inEqSimp_subsumption1" (formula "21") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "21") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "qeq_literals" (formula "21") (term "0")) - (builtin "One Step Simplification" (formula "21")) - (rule "true_left" (formula "21")) - (rule "inEqSimp_contradInEq0" (formula "3") (ifseqformula "1")) - (rule "andLeft" (formula "3")) - (rule "inEqSimp_homoInEq1" (formula "3")) - (rule "polySimp_pullOutFactor1b" (formula "3") (term "0")) - (rule "add_literals" (formula "3") (term "1,1,0")) - (rule "times_zero_1" (formula "3") (term "1,0")) - (rule "add_zero_right" (formula "3") (term "0")) - (rule "leq_literals" (formula "3")) - (rule "closeFalse" (formula "3")) + (rule "inEqSimp_contradInEq0" (formula "2") (ifseqformula "1")) + (rule "andLeft" (formula "2")) + (rule "inEqSimp_homoInEq1" (formula "2")) + (rule "polySimp_pullOutFactor1b" (formula "2") (term "0")) + (rule "add_literals" (formula "2") (term "1,1,0")) + (rule "times_zero_1" (formula "2") (term "1,0")) + (rule "add_zero_right" (formula "2") (term "0")) + (rule "leq_literals" (formula "2")) + (rule "closeFalse" (formula "2")) ) ) ) (branch "Null Reference (mc == 0 = null)" - (rule "false_right" (formula "28")) (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "27"))) (rule "closeFalse" (formula "1")) ) (branch "Index Out of Bounds (mc == 0 != null, but mc == 0 Out of Bounds!)" - (rule "false_right" (formula "28")) (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "27"))) - (rule "inEqSimp_ltRight" (formula "25")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "3")) - (rule "polySimp_mulComm0" (formula "3") (term "1,0,0")) - (rule "polySimp_addComm1" (formula "3") (term "0")) - (rule "inEqSimp_ltToLeq" (formula "2") (term "1")) - (rule "times_zero_1" (formula "2") (term "1,0,0,1")) - (rule "add_zero_right" (formula "2") (term "0,0,1")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial0" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_sepPosMonomial0" (formula "2") (term "1")) - (rule "mul_literals" (formula "2") (term "1,1")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "25")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "25") (ifseqformula "15")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "leq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "false_right" (formula "25")) - (rule "inEqSimp_subsumption1" (formula "21") (ifseqformula "3")) - (rule "inEqSimp_homoInEq0" (formula "21") (term "0")) - (rule "polySimp_pullOutFactor1b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "qeq_literals" (formula "21") (term "0")) - (builtin "One Step Simplification" (formula "21")) - (rule "true_left" (formula "21")) - (rule "inEqSimp_contradInEq1" (formula "2") (term "0") (ifseqformula "3")) - (rule "inEqSimp_homoInEq1" (formula "2") (term "0,0")) - (rule "polySimp_pullOutFactor1b" (formula "2") (term "0,0,0")) - (rule "add_literals" (formula "2") (term "1,1,0,0,0")) - (rule "times_zero_1" (formula "2") (term "1,0,0,0")) - (rule "add_zero_right" (formula "2") (term "0,0,0")) - (rule "leq_literals" (formula "2") (term "0,0")) - (builtin "One Step Simplification" (formula "2")) - (rule "inEqSimp_contradInEq0" (formula "20") (ifseqformula "2")) - (rule "qeq_literals" (formula "20") (term "0")) - (builtin "One Step Simplification" (formula "20")) - (rule "closeFalse" (formula "20")) + (rule "inEqSimp_ltToLeq" (formula "2")) + (rule "polySimp_mulComm0" (formula "2") (term "1,0,0")) + (rule "polySimp_addComm1" (formula "2") (term "0")) + (rule "inEqSimp_ltToLeq" (formula "1") (term "1")) + (rule "times_zero_1" (formula "1") (term "1,0,0,1")) + (rule "add_zero_right" (formula "1") (term "0,0,1")) + (rule "inEqSimp_sepNegMonomial0" (formula "2")) + (rule "polySimp_mulLiterals" (formula "2") (term "0")) + (rule "polySimp_elimOne" (formula "2") (term "0")) + (rule "inEqSimp_sepPosMonomial0" (formula "1") (term "1")) + (rule "mul_literals" (formula "1") (term "1,1")) + (rule "inEqSimp_contradInEq1" (formula "1") (term "0") (ifseqformula "2")) + (rule "inEqSimp_homoInEq1" (formula "1") (term "0,0")) + (rule "polySimp_pullOutFactor1b" (formula "1") (term "0,0,0")) + (rule "add_literals" (formula "1") (term "1,1,0,0,0")) + (rule "times_zero_1" (formula "1") (term "1,0,0,0")) + (rule "add_zero_right" (formula "1") (term "0,0,0")) + (rule "leq_literals" (formula "1") (term "0,0")) + (builtin "One Step Simplification" (formula "1")) + (rule "inEqSimp_contradInEq0" (formula "19") (ifseqformula "1")) + (rule "qeq_literals" (formula "19") (term "0")) + (builtin "One Step Simplification" (formula "19")) + (rule "closeFalse" (formula "19")) ) ) (branch "if r < _a.length false" @@ -7650,7 +3674,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "Null Reference (mc == 0 = null)" - (rule "false_right" (formula "27")) (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "26"))) (rule "closeFalse" (formula "1")) ) @@ -7662,15 +3685,15 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "Use Case" - (builtin "One Step Simplification" (formula "21")) (builtin "One Step Simplification" (formula "16")) + (builtin "One Step Simplification" (formula "21")) (rule "andLeft" (formula "16")) (rule "andLeft" (formula "16")) (rule "andLeft" (formula "16")) (rule "eqSymm" (formula "18")) (rule "inEqSimp_commuteLeq" (formula "19")) - (rule "inEqSimp_commuteLeq" (formula "17")) (rule "inEqSimp_commuteLeq" (formula "16")) + (rule "inEqSimp_commuteLeq" (formula "17")) (rule "variableDeclarationAssign" (formula "24") (term "1")) (rule "variableDeclaration" (formula "24") (term "1") (newnames "b_0_1")) (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "18") (term "0")) @@ -7696,7 +3719,7 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "variableDeclarationAssign" (formula "26") (term "1")) (rule "variableDeclaration" (formula "26") (term "1") (newnames "i_4")) (rule "activeUseStaticFieldReadAccess" (formula "26") (term "1")) - (rule "assignment_read_static_attribute" (formula "26") (term "1")) + (rule "assignment_read_static_attribute_final" (formula "26") (term "1")) (builtin "One Step Simplification" (formula "26")) (rule "methodCallReturn" (formula "26") (term "1")) (rule "assignment" (formula "26") (term "1")) @@ -7712,254 +3735,21 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 1" (rule "impRight" (formula "26")) (builtin "One Step Simplification" (formula "1")) - (builtin "One Step Simplification" (formula "27")) - (rule "inEqSimp_ltRight" (formula "22")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltRight" (formula "24")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_gtRight" (formula "27")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "inEqSimp_sepNegMonomial1" (formula "3")) - (rule "polySimp_mulLiterals" (formula "3") (term "0")) - (rule "polySimp_elimOne" (formula "3") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepPosMonomial0" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1")) - (rule "polySimp_elimOne" (formula "1") (term "1")) - (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "25")) - (rule "add_zero_right" (formula "15") (term "1")) - (rule "inEqSimp_contradEq7" (formula "25") (ifseqformula "15")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "leq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "false_right" (formula "25")) - (rule "inEqSimp_antiSymm" (formula "21") (ifseqformula "3")) - (rule "applyEq" (formula "25") (term "0,0") (ifseqformula "21")) - (rule "applyEq" (formula "14") (term "0") (ifseqformula "21")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "21")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "21")) - (rule "inEqSimp_homoInEq0" (formula "3")) - (rule "polySimp_pullOutFactor1" (formula "3") (term "0")) - (rule "add_literals" (formula "3") (term "1,0")) - (rule "times_zero_1" (formula "3") (term "0")) - (rule "qeq_literals" (formula "3")) - (rule "true_left" (formula "3")) - (rule "applyEq" (formula "1") (term "0,1") (ifseqformula "20")) - (rule "applyEq" (formula "21") (term "0") (ifseqformula "20")) - (rule "inEqSimp_homoInEq1" (formula "21")) - (rule "polySimp_pullOutFactor1" (formula "21") (term "0")) - (rule "add_literals" (formula "21") (term "1,0")) - (rule "times_zero_1" (formula "21") (term "0")) - (rule "leq_literals" (formula "21")) - (rule "true_left" (formula "21")) - (rule "applyEq" (formula "1") (term "3,0") (ifseqformula "20")) - (rule "inEqSimp_antiSymm" (formula "13") (ifseqformula "2")) - (rule "applyEqRigid" (formula "24") (term "0,0") (ifseqformula "13")) - (rule "applyEqRigid" (formula "1") (term "3,0") (ifseqformula "13")) - (rule "applyEqRigid" (formula "2") (term "0") (ifseqformula "13")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "13") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "13")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0")) - (rule "add_literals" (formula "13") (term "1,0")) - (rule "times_zero_1" (formula "13") (term "0")) - (rule "leq_literals" (formula "13")) - (rule "true_left" (formula "13")) - (rule "applyEqRigid" (formula "1") (term "0,1") (ifseqformula "12")) - (rule "applyEqRigid" (formula "18") (term "0") (ifseqformula "12")) - (rule "applyEq" (formula "19") (term "3,0") (ifseqformula "12")) - (rule "applyEqRigid" (formula "20") (term "3,0") (ifseqformula "12")) - (rule "applyEq" (formula "15") (term "0,0") (ifseqformula "20")) - (rule "inEqSimp_homoInEq0" (formula "15")) - (rule "polySimp_mulLiterals" (formula "15") (term "1,0")) - (rule "polySimp_addComm1" (formula "15") (term "0")) - (rule "polySimp_addComm0" (formula "15") (term "0,0")) - (rule "applyEq" (formula "14") (term "0") (ifseqformula "19")) - (rule "eqSymm" (formula "14")) - (rule "applyEq" (formula "17") (term "1") (ifseqformula "12")) - (rule "inEqSimp_sepPosMonomial1" (formula "14")) - (rule "polySimp_mulComm0" (formula "14") (term "1")) - (rule "polySimp_rightDist" (formula "14") (term "1")) - (rule "polySimp_mulComm0" (formula "14") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "14") (term "0,1")) - (rule "nnf_imp2or" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "1") (term "0")) - (rule "jdiv_axiom" (formula "21") (term "0")) - (rule "eqSymm" (formula "21")) - (rule "replace_known_left" (formula "21") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "21")) - (rule "eqSymm" (formula "21")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "21")) - (rule "applyEq" (formula "22") (term "0") (ifseqformula "21")) - (rule "div_axiom" (formula "21") (term "1") (inst "quotient=quotient_0")) - (rule "qeq_literals" (formula "21") (term "0,1,1")) - (builtin "One Step Simplification" (formula "21")) - (rule "mul_literals" (formula "21") (term "1,1,1,1")) - (rule "equal_literals" (formula "21") (term "0")) - (builtin "One Step Simplification" (formula "21")) - (rule "andLeft" (formula "21")) - (rule "andLeft" (formula "21")) - (rule "polySimp_addComm1" (formula "23") (term "1")) - (rule "add_literals" (formula "23") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "22")) - (rule "inEqSimp_homoInEq1" (formula "23")) - (rule "polySimp_mulLiterals" (formula "23") (term "1,0")) - (rule "polySimp_addComm1" (formula "23") (term "0")) - (rule "applyEqRigid" (formula "25") (term "0") (ifseqformula "21")) - (rule "inEqSimp_commuteGeq" (formula "25")) - (rule "applyEqRigid" (formula "2") (term "1") (ifseqformula "21")) - (rule "applyEq" (formula "24") (term "1") (ifseqformula "21")) - (rule "inEqSimp_sepPosMonomial0" (formula "23")) - (rule "polySimp_mulComm0" (formula "23") (term "1")) - (rule "polySimp_rightDist" (formula "23") (term "1")) - (rule "polySimp_mulLiterals" (formula "23") (term "1,1")) - (rule "mul_literals" (formula "23") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "12") (ifseqformula "23")) - (rule "times_zero_1" (formula "12") (term "0,0")) - (rule "add_zero_left" (formula "12") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "12")) - (rule "mul_literals" (formula "12") (term "1")) - (rule "elimGcdGeq_antec" (formula "12") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=quotient_0") (inst "elimGcdRightDiv=Z(0(#))")) - (rule "polySimp_mulLiterals" (formula "12") (term "1,0,1,0")) - (rule "times_zero_1" (formula "12") (term "1,0,0,0,0,1,0")) - (rule "leq_literals" (formula "12") (term "0,0")) - (builtin "One Step Simplification" (formula "12")) - (rule "polySimp_addLiterals" (formula "12") (term "0,0,0,0")) - (rule "add_literals" (formula "12") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "12") (term "0,0")) - (rule "add_literals" (formula "12") (term "1,1,0,0")) - (rule "times_zero_1" (formula "12") (term "1,0,0")) - (rule "add_zero_right" (formula "12") (term "0,0")) - (rule "leq_literals" (formula "12") (term "0")) - (builtin "One Step Simplification" (formula "12")) - (rule "arrayLengthIsAShort" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "true_left" (formula "19")) - (rule "arrayLengthNotNegative" (formula "19") (term "0")) - (rule "applyEq" (formula "19") (term "0") (ifseqformula "20")) - (rule "onlyCreatedObjectsAreReferenced" (formula "3") (term "1,0") (ifseqformula "4")) - (rule "cut_direct" (formula "3") (term "0")) - (branch "CUT: IntOpt.NONE = null TRUE" - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "applyEq" (formula "2") (term "1,4,0") (ifseqformula "3")) - (rule "applyEq" (formula "1") (term "1,4,1") (ifseqformula "3")) - (rule "applyEq" (formula "4") (term "1,0") (ifseqformula "3")) - (rule "applyEq" (formula "1") (term "1,4,0") (ifseqformula "3")) - (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "2") (term "0")) - (rule "allLeft" (formula "18") (inst "t=int::select(heap, null, IntOpt::$value)")) - (rule "cut_direct" (formula "18") (term "1")) - (branch "CUT: self.count(a, k_0, IntOpt.value) * 2 <= k_0 + mc_0 * -1 TRUE" - (builtin "One Step Simplification" (formula "19")) - (rule "true_left" (formula "19")) - (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_1" (formula "10")) - (rule "notLeft" (formula "10")) - (rule "close" (formula "29") (ifseqformula "3")) - ) - (branch "CUT: self.count(a, k_0, IntOpt.value) * 2 <= k_0 + mc_0 * -1 FALSE" - (builtin "One Step Simplification" (formula "18")) - (rule "inEqSimp_leqRight" (formula "29")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0")) - (rule "applyEq" (formula "1") (term "4,0,1,0") (ifseqformula "19")) - (rule "applyEq" (formula "2") (term "4,0") (ifseqformula "19")) - (rule "eqSymm" (formula "2")) - (rule "applyEq" (formula "3") (term "4,0") (ifseqformula "19")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "24")) - (rule "polySimp_addComm1" (formula "1") (term "0")) - (rule "polySimp_addComm1" (formula "1") (term "0,0")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "24")) - (rule "applyEq" (formula "2") (term "4,0") (ifseqformula "18")) - (rule "eqSymm" (formula "2")) - (rule "applyEq" (formula "22") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "22")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "polySimp_rightDist" (formula "1") (term "0,1")) - (rule "mul_literals" (formula "1") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) - (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_1" (formula "10")) - (rule "notLeft" (formula "10")) - (rule "close" (formula "28") (ifseqformula "3")) - ) - ) - (branch "CUT: IntOpt.NONE = null FALSE" - (builtin "One Step Simplification" (formula "3")) - (rule "allLeft" (formula "18") (inst "t=int::select(heap, - IntOpt::select(heap, null, IntOpt::$NONE), - IntOpt::$value)")) - (rule "cut_direct" (formula "18") (term "1")) - (branch "CUT: self.count(a, k_0, IntOpt.NONE.value) * 2 <= k_0 + mc_0 * -1 TRUE" - (builtin "One Step Simplification" (formula "19")) - (rule "true_left" (formula "19")) - (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_2" (formula "10")) - (rule "notLeft" (formula "10")) - (rule "close" (formula "29") (ifseqformula "4")) - ) - (branch "CUT: self.count(a, k_0, IntOpt.NONE.value) * 2 <= k_0 + mc_0 * -1 FALSE" - (builtin "One Step Simplification" (formula "18")) - (rule "inEqSimp_leqRight" (formula "29")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0")) - (rule "applyEq" (formula "3") (term "4,0") (ifseqformula "19")) - (rule "applyEq" (formula "1") (term "4,0,1,0") (ifseqformula "19")) - (rule "applyEq" (formula "2") (term "4,0") (ifseqformula "19")) - (rule "eqSymm" (formula "2")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "24")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "23")) - (rule "polySimp_addComm1" (formula "1") (term "0")) - (rule "polySimp_addComm1" (formula "1") (term "0,0")) - (rule "applyEq" (formula "2") (term "4,0") (ifseqformula "18")) - (rule "eqSymm" (formula "2")) - (rule "applyEq" (formula "22") (term "0") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "1") (ifseqformula "22")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "polySimp_rightDist" (formula "1") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) - (rule "mul_literals" (formula "1") (term "0,0,1")) - (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_2" (formula "10")) - (rule "notLeft" (formula "10")) - (rule "close" (formula "28") (ifseqformula "4")) - ) - ) + (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_2" (formula "7")) + (rule "notLeft" (formula "7")) + (rule "close" (formula "22") (ifseqformula "1")) ) (branch "Case 2" (rule "andRight" (formula "26")) (branch "Case 1" (rule "impRight" (formula "26")) - (builtin "One Step Simplification" (formula "1")) (builtin "One Step Simplification" (formula "27")) - (rule "notLeft" (formula "1")) (rule "notRight" (formula "27")) (rule "exLeft" (formula "1") (inst "sk=m_0")) - (rule "inEqSimp_ltRight" (formula "23")) + (rule "inEqSimp_ltRight" (formula "25")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltRight" (formula "25")) + (rule "inEqSimp_ltRight" (formula "24")) (rule "polySimp_mulComm0" (formula "1") (term "0,0")) (rule "polySimp_addComm0" (formula "1") (term "0")) (rule "inEqSimp_gtToGeq" (formula "3")) @@ -7973,354 +3763,107 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (rule "inEqSimp_sepPosMonomial1" (formula "3")) (rule "polySimp_mulComm0" (formula "3") (term "1")) (rule "polySimp_rightDist" (formula "3") (term "1")) - (rule "polySimp_mulLiterals" (formula "3") (term "1,1")) (rule "mul_literals" (formula "3") (term "0,1")) + (rule "polySimp_mulLiterals" (formula "3") (term "1,1")) (rule "polySimp_elimOne" (formula "3") (term "1,1")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "25")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "25") (ifseqformula "14")) - (rule "times_zero_1" (formula "25") (term "1,0,0")) - (rule "add_zero_right" (formula "25") (term "0,0")) - (rule "leq_literals" (formula "25") (term "0")) - (builtin "One Step Simplification" (formula "25")) - (rule "false_right" (formula "25")) - (rule "inEqSimp_antiSymm" (formula "20") (ifseqformula "2")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "20")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "12") (term "0") (ifseqformula "19")) - (rule "applyEq" (formula "2") (term "0,1,1") (ifseqformula "19")) - (rule "applyEq" (formula "20") (term "0") (ifseqformula "19")) - (rule "inEqSimp_homoInEq1" (formula "20")) - (rule "polySimp_pullOutFactor1" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,0")) - (rule "times_zero_1" (formula "20") (term "0")) - (rule "leq_literals" (formula "20")) - (rule "true_left" (formula "20")) - (rule "applyEq" (formula "22") (term "0,0") (ifseqformula "19")) - (rule "applyEq" (formula "2") (term "3,0") (ifseqformula "19")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "19")) - (rule "inEqSimp_antiSymm" (formula "12") (ifseqformula "1")) - (rule "applyEq" (formula "2") (term "0,1,1") (ifseqformula "12")) - (rule "applyEqRigid" (formula "1") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEqRigid" (formula "20") (term "3,0") (ifseqformula "11")) - (rule "applyEq" (formula "22") (term "0,0") (ifseqformula "11")) - (rule "applyEqRigid" (formula "1") (term "3,0") (ifseqformula "11")) - (rule "applyEqRigid" (formula "12") (term "0") (ifseqformula "11")) - (rule "inEqSimp_homoInEq1" (formula "12")) - (rule "polySimp_pullOutFactor1" (formula "12") (term "0")) - (rule "add_literals" (formula "12") (term "1,0")) - (rule "times_zero_1" (formula "12") (term "0")) - (rule "leq_literals" (formula "12")) - (rule "true_left" (formula "12")) - (rule "applyEqRigid" (formula "17") (term "0") (ifseqformula "11")) - (rule "applyEq" (formula "19") (term "3,0") (ifseqformula "11")) - (rule "applyEq" (formula "13") (term "0") (ifseqformula "18")) - (rule "eqSymm" (formula "13")) - (rule "applyEq" (formula "13") (term "0,0") (ifseqformula "18")) - (rule "inEqSimp_homoInEq0" (formula "13")) - (rule "polySimp_mulLiterals" (formula "13") (term "1,0")) - (rule "polySimp_addComm1" (formula "13") (term "0")) - (rule "polySimp_addComm0" (formula "13") (term "0,0")) - (rule "applyEqRigid" (formula "16") (term "1") (ifseqformula "11")) - (rule "inEqSimp_sepPosMonomial1" (formula "13")) - (rule "polySimp_mulComm0" (formula "13") (term "1")) - (rule "polySimp_rightDist" (formula "13") (term "1")) - (rule "polySimp_mulComm0" (formula "13") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "13") (term "0,1")) - (rule "nnf_imp2or" (formula "14") (term "0")) - (builtin "One Step Simplification" (formula "14")) - (rule "limit_BoyerMoore_count[I\bigint\bigint" (formula "1") (term "0")) - (rule "jdiv_axiom" (formula "2") (term "1,1")) - (rule "eqSymm" (formula "2")) - (rule "replace_known_left" (formula "2") (term "0,0") (ifseqformula "12")) - (builtin "One Step Simplification" (formula "2")) - (rule "eqSymm" (formula "2")) - (rule "applyEqRigid" (formula "3") (term "1,1") (ifseqformula "2")) - (rule "applyEq" (formula "21") (term "0") (ifseqformula "2")) - (rule "div_axiom" (formula "2") (term "1") (inst "quotient=quotient_0")) - (rule "equal_literals" (formula "2") (term "0")) - (builtin "One Step Simplification" (formula "2")) - (rule "qeq_literals" (formula "2") (term "0,1")) - (builtin "One Step Simplification" (formula "2")) - (rule "mul_literals" (formula "2") (term "1,1,1")) - (rule "andLeft" (formula "2")) - (rule "andLeft" (formula "2")) - (rule "polySimp_addComm1" (formula "4") (term "1")) - (rule "add_literals" (formula "4") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "3")) - (rule "inEqSimp_homoInEq1" (formula "4")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0")) - (rule "polySimp_addComm1" (formula "4") (term "0")) - (rule "applyEq" (formula "6") (term "1,1") (ifseqformula "2")) - (rule "applyEqRigid" (formula "24") (term "0") (ifseqformula "2")) - (rule "inEqSimp_commuteGeq" (formula "24")) - (rule "applyEq" (formula "5") (term "1") (ifseqformula "2")) - (rule "inEqSimp_sepPosMonomial0" (formula "4")) - (rule "polySimp_mulComm0" (formula "4") (term "1")) - (rule "polySimp_rightDist" (formula "4") (term "1")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,1")) - (rule "mul_literals" (formula "4") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "15") (ifseqformula "4")) - (rule "times_zero_1" (formula "15") (term "0,0")) - (rule "add_zero_left" (formula "15") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "15")) - (rule "mul_literals" (formula "15") (term "1")) - (rule "elimGcdGeq_antec" (formula "15") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=quotient_0") (inst "elimGcdRightDiv=Z(0(#))")) - (rule "polySimp_mulLiterals" (formula "15") (term "1,0,1,0")) - (rule "times_zero_1" (formula "15") (term "1,0,0,0,0,1,0")) - (rule "leq_literals" (formula "15") (term "0,0")) - (builtin "One Step Simplification" (formula "15")) - (rule "polySimp_addLiterals" (formula "15") (term "0,0,0,0")) - (rule "add_literals" (formula "15") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "15") (term "0,0")) - (rule "add_literals" (formula "15") (term "1,1,0,0")) - (rule "times_zero_1" (formula "15") (term "1,0,0")) - (rule "add_zero_right" (formula "15") (term "0,0")) - (rule "leq_literals" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "arrayLengthNotNegative" (formula "22") (term "0")) - (rule "applyEq" (formula "22") (term "0") (ifseqformula "23")) - (rule "arrayLengthIsAShort" (formula "22") (term "0")) - (builtin "One Step Simplification" (formula "22")) - (rule "true_left" (formula "22")) - (rule "onlyCreatedObjectsAreReferenced" (formula "26") (term "1,0") (ifseqformula "7")) - (rule "cut_direct" (formula "1") (term "0")) - (branch "CUT: IntOpt.NONE = null TRUE" - (builtin "One Step Simplification" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "27") (term "1,0") (ifseqformula "1")) - (rule "allLeft" (formula "21") (inst "t=m_0")) - (rule "eqSymm" (formula "21") (term "0")) - (rule "cut_direct" (formula "21") (term "1")) - (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 TRUE" - (builtin "One Step Simplification" (formula "22")) - (rule "true_left" (formula "22")) - (rule "inEqSimp_exactShadow2" (formula "7") (ifseqformula "21")) - (rule "greater_literals" (formula "7") (term "0")) - (builtin "One Step Simplification" (formula "7")) - (rule "polySimp_rightDist" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,1,0,0")) - (rule "polySimp_rightDist" (formula "7") (term "0,0")) - (rule "mul_literals" (formula "7") (term "0,0,0")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,0,0")) - (rule "polySimp_addAssoc" (formula "7") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "7")) - (rule "polySimp_mulLiterals" (formula "7") (term "0")) - (rule "polySimp_elimOne" (formula "7") (term "0")) - (rule "inEqSimp_exactShadow3" (formula "21") (ifseqformula "7")) - (rule "polySimp_rightDist" (formula "21") (term "0,0")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,0,0")) - (rule "polySimp_elimOne" (formula "21") (term "1,0,0")) - (rule "polySimp_mulAssoc" (formula "21") (term "0,0,0")) - (rule "polySimp_mulComm0" (formula "21") (term "0,0,0,0")) - (rule "polySimp_mulLiterals" (formula "21") (term "0,0,0")) - (rule "polySimp_addAssoc" (formula "21") (term "0")) - (rule "polySimp_addComm1" (formula "21") (term "0,0")) - (rule "polySimp_pullOutFactor3b" (formula "21") (term "0")) - (rule "polySimp_addComm0" (formula "21") (term "0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "21")) - (rule "polySimp_mulComm0" (formula "21") (term "1")) - (rule "polySimp_rightDist" (formula "21") (term "1")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,1")) - (rule "polySimp_rightDist" (formula "21") (term "0,1")) - (rule "mul_literals" (formula "21") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,0,1")) - (rule "elimGcdGeq_antec" (formula "21") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=k_0") (inst "elimGcdRightDiv=add(add(Z(1(#)), quotient_0), cnt_0)")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,0,1,0")) - (rule "mul_literals" (formula "21") (term "0,1,0,0,0,0,1,0")) - (rule "leq_literals" (formula "21") (term "0,0")) - (builtin "One Step Simplification" (formula "21")) - (rule "polySimp_pullOutFactor0b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "polySimp_rightDist" (formula "21") (term "1,0,0,0")) - (rule "polySimp_rightDist" (formula "21") (term "0,1,0,0,0")) - (rule "mul_literals" (formula "21") (term "0,0,1,0,0,0")) - (rule "polySimp_addAssoc" (formula "21") (term "0,0,0")) - (rule "polySimp_addAssoc" (formula "21") (term "0,0,0,0")) - (rule "add_literals" (formula "21") (term "0,0,0,0,0")) - (rule "add_zero_left" (formula "21") (term "0,0,0,0")) - (rule "polySimp_addAssoc" (formula "21") (term "0,0")) - (rule "polySimp_addComm1" (formula "21") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "polySimp_addAssoc" (formula "21") (term "0,0")) - (rule "polySimp_addComm0" (formula "21") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "21") (term "0,0")) - (rule "add_literals" (formula "21") (term "1,1,0,0")) - (rule "times_zero_1" (formula "21") (term "1,0,0")) - (rule "add_zero_right" (formula "21") (term "0,0")) - (rule "leq_literals" (formula "21") (term "0")) - (builtin "One Step Simplification" (formula "21")) - (rule "inEqSimp_exactShadow3" (formula "20") (ifseqformula "7")) - (rule "mul_literals" (formula "20") (term "0,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addAssoc" (formula "20") (term "0,0")) - (rule "add_literals" (formula "20") (term "0,0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "20")) - (rule "polySimp_mulComm0" (formula "20") (term "1")) - (rule "polySimp_rightDist" (formula "20") (term "1")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1")) - (rule "mul_literals" (formula "20") (term "0,1")) - (rule "inEqSimp_subsumption1" (formula "4") (ifseqformula "20")) - (rule "inEqSimp_homoInEq0" (formula "4") (term "0")) - (rule "polySimp_mulLiterals" (formula "4") (term "1,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "4") (term "0,0")) - (rule "add_literals" (formula "4") (term "1,1,0,0")) - (rule "times_zero_1" (formula "4") (term "1,0,0")) - (rule "add_zero_right" (formula "4") (term "0,0")) - (rule "qeq_literals" (formula "4") (term "0")) - (builtin "One Step Simplification" (formula "4")) - (rule "true_left" (formula "4")) - (rule "inEqSimp_contradInEq0" (formula "19") (ifseqformula "4")) - (rule "andLeft" (formula "19")) - (rule "inEqSimp_homoInEq1" (formula "19")) - (rule "polySimp_mulComm0" (formula "19") (term "1,0")) - (rule "polySimp_rightDist" (formula "19") (term "1,0")) - (rule "mul_literals" (formula "19") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "19") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "19") (term "0")) - (rule "polySimp_addComm1" (formula "19") (term "0,0")) - (rule "add_literals" (formula "19") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "19") (term "0")) - (rule "add_literals" (formula "19") (term "1,1,0")) - (rule "times_zero_1" (formula "19") (term "1,0")) - (rule "add_zero_right" (formula "19") (term "0")) - (rule "leq_literals" (formula "19")) - (rule "closeFalse" (formula "19")) - ) - (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 FALSE" - (builtin "One Step Simplification" (formula "21")) - (rule "inEqSimp_leqRight" (formula "28")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0")) - (rule "applyEqRigid" (formula "27") (term "4,0") (ifseqformula "22")) - (rule "applyEqRigid" (formula "26") (term "4,0") (ifseqformula "22")) - (rule "applyEq" (formula "8") (term "0") (ifseqformula "27")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "27")) - (rule "polySimp_addComm1" (formula "1") (term "0")) - (rule "polySimp_addComm1" (formula "1") (term "0,0")) - (rule "applyEq" (formula "3") (term "0") (ifseqformula "26")) - (rule "eqSymm" (formula "3")) - (rule "applyEqRigid" (formula "22") (term "1,0,0") (ifseqformula "21")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "polySimp_rightDist" (formula "1") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) - (rule "mul_literals" (formula "1") (term "0,0,1")) - (rule "inEqSimp_contradInEq1" (formula "27") (ifseqformula "7")) - (rule "andLeft" (formula "27")) - (rule "inEqSimp_homoInEq1" (formula "27")) - (rule "polySimp_pullOutFactor1b" (formula "27") (term "0")) - (rule "add_literals" (formula "27") (term "1,1,0")) - (rule "times_zero_1" (formula "27") (term "1,0")) - (rule "add_zero_right" (formula "27") (term "0")) - (rule "leq_literals" (formula "27")) - (rule "closeFalse" (formula "27")) - ) + (rule "inEqSimp_strengthen1" (formula "15") (ifseqformula "25")) + (rule "add_zero_right" (formula "15") (term "1")) + (rule "inEqSimp_antiSymm" (formula "14") (ifseqformula "2")) + (rule "applyEq" (formula "1") (term "0") (ifseqformula "14")) + (rule "inEqSimp_commuteLeq" (formula "1")) + (rule "applyEq" (formula "22") (term "0") (ifseqformula "14")) + (rule "inEqSimp_commuteGeq" (formula "22")) + (rule "applyEq" (formula "3") (term "0,1,1") (ifseqformula "14")) + (rule "applyEq" (formula "3") (term "3,0") (ifseqformula "14")) + (rule "applyEq" (formula "25") (term "0,0") (ifseqformula "14")) + (rule "inEqSimp_antiSymm" (formula "1") (ifseqformula "22")) + (rule "applyEq" (formula "25") (term "3,0") (ifseqformula "1")) + (rule "nnf_imp2or" (formula "20") (term "0")) + (builtin "One Step Simplification" (formula "20")) + (rule "jdiv_axiom" (formula "4") (term "1,1")) + (rule "eqSymm" (formula "4")) + (rule "replace_known_left" (formula "4") (term "0,0") (ifseqformula "15")) + (builtin "One Step Simplification" (formula "4")) + (rule "eqSymm" (formula "4")) + (rule "applyEqRigid" (formula "27") (term "0") (ifseqformula "4")) + (rule "applyEqRigid" (formula "5") (term "1,1") (ifseqformula "4")) + (rule "div_axiom" (formula "4") (term "1") (inst "quotient=quotient_0")) + (rule "equal_literals" (formula "4") (term "0")) + (builtin "One Step Simplification" (formula "4")) + (rule "qeq_literals" (formula "4") (term "0,1")) + (builtin "One Step Simplification" (formula "4")) + (rule "mul_literals" (formula "4") (term "1,1,1")) + (rule "andLeft" (formula "4")) + (rule "andLeft" (formula "4")) + (rule "polySimp_addComm1" (formula "6") (term "1")) + (rule "add_literals" (formula "6") (term "0,1")) + (rule "inEqSimp_homoInEq1" (formula "6")) + (rule "polySimp_mulLiterals" (formula "6") (term "1,0")) + (rule "polySimp_addComm1" (formula "6") (term "0")) + (rule "applyEqRigid" (formula "30") (term "0") (ifseqformula "4")) + (rule "inEqSimp_commuteGeq" (formula "30")) + (rule "applyEqRigid" (formula "8") (term "1,1") (ifseqformula "4")) + (rule "inEqSimp_sepPosMonomial0" (formula "6")) + (rule "polySimp_mulComm0" (formula "6") (term "1")) + (rule "polySimp_rightDist" (formula "6") (term "1")) + (rule "polySimp_mulLiterals" (formula "6") (term "1,1")) + (rule "mul_literals" (formula "6") (term "0,1")) + (rule "allLeft" (formula "24") (inst "t=m_0")) + (rule "eqSymm" (formula "24") (term "0")) + (rule "cut_direct" (formula "24") (term "1")) + (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 TRUE" + (rule "inEqSimp_exactShadow2" (formula "8") (ifseqformula "24")) + (rule "greater_literals" (formula "8") (term "0")) + (builtin "One Step Simplification" (formula "8")) + (rule "polySimp_rightDist" (formula "8") (term "1,0,0")) + (rule "mul_literals" (formula "8") (term "0,1,0,0")) + (rule "polySimp_rightDist" (formula "8") (term "0,0")) + (rule "polySimp_mulLiterals" (formula "8") (term "1,0,0")) + (rule "mul_literals" (formula "8") (term "0,0,0")) + (rule "polySimp_addAssoc" (formula "8") (term "0")) + (rule "inEqSimp_sepNegMonomial1" (formula "8")) + (rule "polySimp_mulLiterals" (formula "8") (term "0")) + (rule "polySimp_elimOne" (formula "8") (term "0")) + (rule "inEqSimp_exactShadow3" (formula "22") (ifseqformula "8")) + (rule "mul_literals" (formula "22") (term "0,0")) + (rule "polySimp_addAssoc" (formula "22") (term "0")) + (rule "polySimp_addAssoc" (formula "22") (term "0,0")) + (rule "add_literals" (formula "22") (term "0,0,0")) + (rule "inEqSimp_sepPosMonomial1" (formula "22")) + (rule "polySimp_mulComm0" (formula "22") (term "1")) + (rule "polySimp_rightDist" (formula "22") (term "1")) + (rule "polySimp_mulLiterals" (formula "22") (term "1,1")) + (rule "mul_literals" (formula "22") (term "0,1")) + (rule "inEqSimp_contradInEq1" (formula "6") (ifseqformula "22")) + (rule "andLeft" (formula "6")) + (rule "inEqSimp_homoInEq1" (formula "6")) + (rule "polySimp_mulComm0" (formula "6") (term "1,0")) + (rule "polySimp_rightDist" (formula "6") (term "1,0")) + (rule "polySimp_mulLiterals" (formula "6") (term "1,1,0")) + (rule "mul_literals" (formula "6") (term "0,1,0")) + (rule "polySimp_addAssoc" (formula "6") (term "0")) + (rule "polySimp_addComm1" (formula "6") (term "0,0")) + (rule "add_literals" (formula "6") (term "0,0,0")) + (rule "polySimp_pullOutFactor0b" (formula "6") (term "0")) + (rule "add_literals" (formula "6") (term "1,1,0")) + (rule "times_zero_1" (formula "6") (term "1,0")) + (rule "add_zero_right" (formula "6") (term "0")) + (rule "leq_literals" (formula "6")) + (rule "closeFalse" (formula "6")) ) - (branch "CUT: IntOpt.NONE = null FALSE" - (builtin "One Step Simplification" (formula "1")) - (rule "allLeft" (formula "21") (inst "t=m_0")) - (rule "eqSymm" (formula "21") (term "0")) - (rule "cut_direct" (formula "21") (term "1")) - (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 TRUE" - (builtin "One Step Simplification" (formula "22")) - (rule "true_left" (formula "22")) - (rule "inEqSimp_exactShadow2" (formula "7") (ifseqformula "21")) - (rule "greater_literals" (formula "7") (term "0")) - (builtin "One Step Simplification" (formula "7")) - (rule "polySimp_rightDist" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,1,0,0")) - (rule "polySimp_rightDist" (formula "7") (term "0,0")) - (rule "polySimp_mulLiterals" (formula "7") (term "1,0,0")) - (rule "mul_literals" (formula "7") (term "0,0,0")) - (rule "polySimp_addAssoc" (formula "7") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "7")) - (rule "polySimp_mulLiterals" (formula "7") (term "0")) - (rule "polySimp_elimOne" (formula "7") (term "0")) - (rule "inEqSimp_exactShadow3" (formula "20") (ifseqformula "7")) - (rule "mul_literals" (formula "20") (term "0,0")) - (rule "polySimp_addAssoc" (formula "20") (term "0")) - (rule "polySimp_addAssoc" (formula "20") (term "0,0")) - (rule "add_literals" (formula "20") (term "0,0,0")) - (rule "inEqSimp_sepPosMonomial1" (formula "20")) - (rule "polySimp_mulComm0" (formula "20") (term "1")) - (rule "polySimp_rightDist" (formula "20") (term "1")) - (rule "polySimp_mulLiterals" (formula "20") (term "1,1")) - (rule "mul_literals" (formula "20") (term "0,1")) - (rule "inEqSimp_contradInEq1" (formula "5") (ifseqformula "20")) - (rule "andLeft" (formula "5")) - (rule "inEqSimp_homoInEq1" (formula "5")) - (rule "polySimp_mulComm0" (formula "5") (term "1,0")) - (rule "polySimp_rightDist" (formula "5") (term "1,0")) - (rule "mul_literals" (formula "5") (term "0,1,0")) - (rule "polySimp_mulLiterals" (formula "5") (term "1,1,0")) - (rule "polySimp_addAssoc" (formula "5") (term "0")) - (rule "polySimp_addComm1" (formula "5") (term "0,0")) - (rule "add_literals" (formula "5") (term "0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "5") (term "0")) - (rule "add_literals" (formula "5") (term "1,1,0")) - (rule "times_zero_1" (formula "5") (term "1,0")) - (rule "add_zero_right" (formula "5") (term "0")) - (rule "leq_literals" (formula "5")) - (rule "closeFalse" (formula "5")) - ) - (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 FALSE" - (builtin "One Step Simplification" (formula "21")) - (rule "inEqSimp_leqRight" (formula "28")) - (rule "polySimp_rightDist" (formula "1") (term "1,0,0")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1,0,0")) - (rule "polySimp_elimOne" (formula "1") (term "1,1,0,0")) - (rule "polySimp_mulComm0" (formula "1") (term "0,1,0,0")) - (rule "polySimp_addAssoc" (formula "1") (term "0,0")) - (rule "applyEqRigid" (formula "27") (term "4,0") (ifseqformula "22")) - (rule "applyEq" (formula "26") (term "4,0") (ifseqformula "22")) - (rule "applyEq" (formula "8") (term "0") (ifseqformula "27")) - (rule "applyEq" (formula "1") (term "0,1,0") (ifseqformula "27")) - (rule "polySimp_addComm1" (formula "1") (term "0")) - (rule "polySimp_addComm1" (formula "1") (term "0,0")) - (rule "applyEq" (formula "26") (term "0") (ifseqformula "3")) - (rule "applyEq" (formula "23") (term "1,0,0") (ifseqformula "22")) - (rule "applyEq" (formula "3") (term "1") (ifseqformula "26")) - (rule "inEqSimp_sepPosMonomial1" (formula "1")) - (rule "polySimp_mulComm0" (formula "1") (term "1")) - (rule "polySimp_rightDist" (formula "1") (term "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,1")) - (rule "polySimp_elimOne" (formula "1") (term "1,1")) - (rule "polySimp_rightDist" (formula "1") (term "0,1")) - (rule "mul_literals" (formula "1") (term "0,0,1")) - (rule "polySimp_mulLiterals" (formula "1") (term "1,0,1")) - (rule "inEqSimp_contradInEq1" (formula "27") (ifseqformula "8")) - (rule "andLeft" (formula "27")) - (rule "inEqSimp_homoInEq1" (formula "27")) - (rule "polySimp_pullOutFactor1b" (formula "27") (term "0")) - (rule "add_literals" (formula "27") (term "1,1,0")) - (rule "times_zero_1" (formula "27") (term "1,0")) - (rule "add_zero_right" (formula "27") (term "0")) - (rule "leq_literals" (formula "27")) - (rule "closeFalse" (formula "27")) - ) + (branch "CUT: self.count(a, k_0, m_0) * 2 <= k_0 + mc_0 * -1 FALSE" + (builtin "One Step Simplification" (formula "24")) + (rule "applyEq" (formula "30") (term "4,0") (ifseqformula "24")) + (rule "applyEq" (formula "8") (term "0") (ifseqformula "30")) + (rule "inEqSimp_contradInEq0" (formula "8") (ifseqformula "31")) + (rule "andLeft" (formula "8")) + (rule "inEqSimp_homoInEq1" (formula "8")) + (rule "polySimp_pullOutFactor1b" (formula "8") (term "0")) + (rule "add_literals" (formula "8") (term "1,1,0")) + (rule "times_zero_1" (formula "8") (term "1,0")) + (rule "add_zero_right" (formula "8") (term "0")) + (rule "leq_literals" (formula "8")) + (rule "closeFalse" (formula "8")) ) ) (branch "Case 2" @@ -8332,139 +3875,9 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO (branch "Case 2" (builtin "One Step Simplification" (formula "26")) (rule "notRight" (formula "26")) - (rule "inEqSimp_ltRight" (formula "22")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_ltRight" (formula "24")) - (rule "polySimp_mulComm0" (formula "1") (term "0,0")) - (rule "polySimp_addComm0" (formula "1") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "2")) - (rule "polySimp_mulLiterals" (formula "2") (term "0")) - (rule "polySimp_elimOne" (formula "2") (term "0")) - (rule "inEqSimp_sepNegMonomial1" (formula "1")) - (rule "polySimp_mulLiterals" (formula "1") (term "0")) - (rule "polySimp_elimOne" (formula "1") (term "0")) - (rule "inEqSimp_strengthen1" (formula "14") (ifseqformula "24")) - (rule "add_zero_right" (formula "14") (term "1")) - (rule "inEqSimp_contradEq7" (formula "24") (ifseqformula "14")) - (rule "times_zero_1" (formula "24") (term "1,0,0")) - (rule "add_zero_right" (formula "24") (term "0,0")) - (rule "leq_literals" (formula "24") (term "0")) - (builtin "One Step Simplification" (formula "24")) - (rule "false_right" (formula "24")) - (rule "inEqSimp_antiSymm" (formula "20") (ifseqformula "2")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "20")) - (rule "applyEq" (formula "13") (term "0") (ifseqformula "20")) - (rule "applyEq" (formula "2") (term "0") (ifseqformula "20")) - (rule "inEqSimp_homoInEq0" (formula "2")) - (rule "polySimp_pullOutFactor1" (formula "2") (term "0")) - (rule "add_literals" (formula "2") (term "1,0")) - (rule "times_zero_1" (formula "2") (term "0")) - (rule "qeq_literals" (formula "2")) - (rule "true_left" (formula "2")) - (rule "applyEq" (formula "20") (term "0") (ifseqformula "19")) - (rule "inEqSimp_homoInEq1" (formula "20")) - (rule "polySimp_pullOutFactor1" (formula "20") (term "0")) - (rule "add_literals" (formula "20") (term "1,0")) - (rule "times_zero_1" (formula "20") (term "0")) - (rule "leq_literals" (formula "20")) - (rule "true_left" (formula "20")) - (rule "applyEq" (formula "22") (term "0,0") (ifseqformula "19")) - (rule "inEqSimp_antiSymm" (formula "12") (ifseqformula "1")) - (rule "applyEqRigid" (formula "13") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq1" (formula "13")) - (rule "polySimp_pullOutFactor1" (formula "13") (term "0")) - (rule "add_literals" (formula "13") (term "1,0")) - (rule "times_zero_1" (formula "13") (term "0")) - (rule "leq_literals" (formula "13")) - (rule "true_left" (formula "13")) - (rule "applyEq" (formula "21") (term "3,0") (ifseqformula "12")) - (rule "applyEqRigid" (formula "18") (term "0") (ifseqformula "12")) - (rule "applyEq" (formula "1") (term "0") (ifseqformula "12")) - (rule "inEqSimp_homoInEq0" (formula "1")) - (rule "polySimp_pullOutFactor1" (formula "1") (term "0")) - (rule "add_literals" (formula "1") (term "1,0")) - (rule "times_zero_1" (formula "1") (term "0")) - (rule "qeq_literals" (formula "1")) - (rule "true_left" (formula "1")) - (rule "applyEq" (formula "20") (term "0,0") (ifseqformula "11")) - (rule "applyEq" (formula "18") (term "3,0") (ifseqformula "11")) - (rule "applyEq" (formula "18") (term "0") (ifseqformula "13")) - (rule "applyEq" (formula "14") (term "0,0") (ifseqformula "18")) - (rule "inEqSimp_homoInEq0" (formula "14")) - (rule "polySimp_mulLiterals" (formula "14") (term "1,0")) - (rule "polySimp_addComm1" (formula "14") (term "0")) - (rule "polySimp_addComm0" (formula "14") (term "0,0")) - (rule "applyEq" (formula "17") (term "1") (ifseqformula "11")) - (rule "applyEq" (formula "13") (term "1") (ifseqformula "18")) - (rule "inEqSimp_sepPosMonomial1" (formula "14")) - (rule "polySimp_mulComm0" (formula "14") (term "1")) - (rule "polySimp_rightDist" (formula "14") (term "1")) - (rule "polySimp_mulComm0" (formula "14") (term "0,1")) - (rule "polySimp_mulLiterals" (formula "14") (term "0,1")) - (rule "nnf_imp2or" (formula "15") (term "0")) - (builtin "One Step Simplification" (formula "15")) - (rule "jdiv_axiom" (formula "19") (term "0")) - (rule "eqSymm" (formula "19")) - (rule "replace_known_left" (formula "19") (term "0,0") (ifseqformula "10")) - (builtin "One Step Simplification" (formula "19")) - (rule "eqSymm" (formula "19")) - (rule "applyEq" (formula "20") (term "0") (ifseqformula "19")) - (rule "div_axiom" (formula "19") (term "1") (inst "quotient=quotient_0")) - (rule "mul_literals" (formula "19") (term "1,1,1,1,1")) - (rule "qeq_literals" (formula "19") (term "0,1,1")) - (builtin "One Step Simplification" (formula "19")) - (rule "equal_literals" (formula "19") (term "0")) - (builtin "One Step Simplification" (formula "19")) - (rule "andLeft" (formula "19")) - (rule "andLeft" (formula "19")) - (rule "polySimp_addComm1" (formula "21") (term "1")) - (rule "add_literals" (formula "21") (term "0,1")) - (rule "inEqSimp_commuteLeq" (formula "20")) - (rule "inEqSimp_homoInEq1" (formula "21")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,0")) - (rule "polySimp_addComm1" (formula "21") (term "0")) - (rule "applyEqRigid" (formula "23") (term "0") (ifseqformula "19")) - (rule "inEqSimp_commuteGeq" (formula "23")) - (rule "applyEq" (formula "22") (term "1") (ifseqformula "19")) - (rule "inEqSimp_sepPosMonomial0" (formula "21")) - (rule "polySimp_mulComm0" (formula "21") (term "1")) - (rule "polySimp_rightDist" (formula "21") (term "1")) - (rule "polySimp_mulLiterals" (formula "21") (term "1,1")) - (rule "mul_literals" (formula "21") (term "0,1")) - (rule "inEqSimp_exactShadow3" (formula "10") (ifseqformula "21")) - (rule "times_zero_1" (formula "10") (term "0,0")) - (rule "add_zero_left" (formula "10") (term "0")) - (rule "inEqSimp_sepPosMonomial1" (formula "10")) - (rule "mul_literals" (formula "10") (term "1")) - (rule "elimGcdGeq_antec" (formula "10") (inst "elimGcd=Z(2(#))") (inst "elimGcdLeftDiv=quotient_0") (inst "elimGcdRightDiv=Z(0(#))")) - (rule "polySimp_mulLiterals" (formula "10") (term "1,0,1,0")) - (rule "times_zero_1" (formula "10") (term "1,0,0,0,0,1,0")) - (rule "leq_literals" (formula "10") (term "0,0")) - (builtin "One Step Simplification" (formula "10")) - (rule "polySimp_addLiterals" (formula "10") (term "0,0,0,0")) - (rule "add_literals" (formula "10") (term "0,0,0,0")) - (rule "polySimp_pullOutFactor0b" (formula "10") (term "0,0")) - (rule "add_literals" (formula "10") (term "1,1,0,0")) - (rule "times_zero_1" (formula "10") (term "1,0,0")) - (rule "add_zero_right" (formula "10") (term "0,0")) - (rule "leq_literals" (formula "10") (term "0")) - (builtin "One Step Simplification" (formula "10")) - (rule "arrayLengthNotNegative" (formula "18") (term "0")) - (rule "applyEq" (formula "18") (term "0") (ifseqformula "19")) - (rule "arrayLengthIsAShort" (formula "18") (term "0")) - (builtin "One Step Simplification" (formula "18")) - (rule "true_left" (formula "18")) - (rule "onlyCreatedObjectsAreReferenced" (formula "1") (term "0") (ifseqformula "2")) - (rule "replace_known_left" (formula "1") (term "0") (ifseqformula "2")) - (builtin "One Step Simplification" (formula "1")) - (rule "true_left" (formula "1")) - (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_2" (formula "7")) - (rule "notLeft" (formula "7")) - (rule "applyEq" (formula "25") (term "1,0") (ifseqformula "1")) (rule "Partial_inv_axiom_for_static_JML_class_invariant_in_IntOpt_no_1" (formula "7")) (rule "notLeft" (formula "7")) - (rule "close" (formula "25") (ifseqformula "1")) + (rule "close" (formula "22") (ifseqformula "1")) ) ) ) @@ -8480,7 +3893,6 @@ class=de.uka.ilkd.key.proof.init.FunctionalOperationContractPO ) ) (branch "Null Reference (mc == 0 = null)" - (rule "false_right" (formula "26")) (builtin "One Step Simplification" (formula "1") (ifInst "" (formula "25"))) (rule "closeFalse" (formula "1")) ) From e921c72eb06777e075df6ad56d940c3aa9d266e0 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 22 Feb 2025 14:15:09 +0100 Subject: [PATCH 25/31] make information flow examples use traditional final treatment. --- key.ui/examples/InformationFlow/SimpleEvoting/README.txt | 2 +- key.ui/examples/InformationFlow/SimpleEvoting/project.key | 2 +- ...ple_evoting.Environment___rep()).JML accessible clause.0.key | 2 +- ...trustedInput()).JML normal_behavior operation contract.0.key | 2 +- ...vironment__untrustedInput()).Non-interference contract.0.key | 2 +- ...ronment__untrustedInput()).Non-interference contract.0.m.key | 2 +- ...stedInput(int)).JML normal_behavior operation contract.0.key | 2 +- ...onment__untrustedInput(int)).Non-interference contract.0.key | 2 +- ...ment__untrustedInput(int)).Non-interference contract.0.m.key | 2 +- ...putMessage((B)).JML normal_behavior operation contract.0.key | 2 +- ...__untrustedInputMessage((B)).Non-interference contract.0.key | 2 +- ...untrustedInputMessage((B)).Non-interference contract.0.m.key | 2 +- ...InputMessage()).JML normal_behavior operation contract.0.key | 2 +- ...nt__untrustedInputMessage()).Non-interference contract.0.key | 2 +- ...__untrustedInputMessage()).Non-interference contract.0.m.key | 2 +- ...tedOutput(int)).JML normal_behavior operation contract.0.key | 2 +- ...nment__untrustedOutput(int)).Non-interference contract.0.key | 2 +- ...ent__untrustedOutput(int)).Non-interference contract.0.m.key | 2 +- ...putMessage((B)).JML normal_behavior operation contract.0.key | 2 +- ..._untrustedOutputMessage((B)).Non-interference contract.0.key | 2 +- ...ntrustedOutputMessage((B)).Non-interference contract.0.m.key | 2 +- ...ssage(java.lang.Object___inv_()).JML accessible clause.0.key | 2 +- ...ng.Server,int)).JML normal_behavior operation contract.0.key | 2 +- ...,simple_evoting.Server,int)).Non-interference contract.0.key | 2 +- ...imple_evoting.Server,int)).Non-interference contract.0.m.key | 2 +- ...voting.Server)).JML normal_behavior operation contract.0.key | 2 +- ...voting.Server)).JML normal_behavior operation contract.1.key | 2 +- ...,int,simple_evoting.Server)).Non-interference contract.0.key | 2 +- ...nt,simple_evoting.Server)).Non-interference contract.0.m.key | 2 +- ...,int,simple_evoting.Server)).Non-interference contract.1.key | 2 +- ...nt,simple_evoting.Server)).Non-interference contract.1.m.key | 2 +- ...ng.Server,int)).JML normal_behavior operation contract.0.key | 2 +- ...,simple_evoting.Server,int)).Non-interference contract.0.key | 2 +- ...imple_evoting.Server,int)).Non-interference contract.0.m.key | 2 +- ...erver(java.lang.Object___inv_()).JML accessible clause.0.key | 2 +- ...oting.Message)).JML normal_behavior operation contract.0.key | 2 +- ...oting.Message)).JML normal_behavior operation contract.1.key | 2 +- ...onSendResult()).JML normal_behavior operation contract.0.key | 2 +- ...e_evoting.Server__resultReady()).JML accessible clause.0.key | 2 +- ..._resultReady()).JML normal_behavior operation contract.0.key | 2 +- ...Setup(java.lang.Object___inv_()).JML accessible clause.0.key | 2 +- ....Setup__main()).JML normal_behavior operation contract.0.key | 2 +- ...imple_evoting.Setup__main()).Non-interference contract.0.key | 2 +- ...ple_evoting.Setup__main()).Non-interference contract.0.m.key | 2 +- ...ublishResult()).JML normal_behavior operation contract.0.key | 2 +- ...ting.Setup__publishResult()).Non-interference contract.0.key | 2 +- ...ng.Setup__publishResult()).Non-interference contract.0.m.key | 2 +- ...Voter(java.lang.Object___inv_()).JML accessible clause.0.key | 2 +- ...voting.Server)).JML normal_behavior operation contract.0.key | 2 +- ...voting.Server)).JML normal_behavior operation contract.1.key | 2 +- ...llot(simple_evoting.Server)).Non-interference contract.0.key | 2 +- ...ot(simple_evoting.Server)).Non-interference contract.0.m.key | 2 +- ...llot(simple_evoting.Server)).Non-interference contract.1.key | 2 +- ...ot(simple_evoting.Server)).Non-interference contract.1.m.key | 2 +- 54 files changed, 54 insertions(+), 54 deletions(-) diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/README.txt b/key.ui/examples/InformationFlow/SimpleEvoting/README.txt index 5167b03dd18..2b0a5b23cc1 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/README.txt +++ b/key.ui/examples/InformationFlow/SimpleEvoting/README.txt @@ -17,4 +17,4 @@ Voters send their secrete votes (encrypted, but this not modeled throughout in t The difficult part in this case-study is to show that indeed only the correct result of the election is declassified. - +(This example expands constructors for classes with final fields. For this to work, final fields are treated like ordinary fields.) diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/project.key b/key.ui/examples/InformationFlow/SimpleEvoting/project.key index 45b55a2d26f..61e58d034a6 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/project.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/project.key @@ -26,7 +26,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment___rep()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment___rep()).JML accessible clause.0.key index 6ad77e87729..460e6e5369e 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment___rep()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment___rep()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).JML normal_behavior operation contract.0.key index 3cbcf757ced..ff93629e275 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.key index 21e95f71ddc..6b60956781d 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.m.key index cd8cf44d586..3c59ec6835c 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput()).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).JML normal_behavior operation contract.0.key index d0054f29283..03f8bfd7933 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.key index c7b21722f6f..11a8b467f3e 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.m.key index 146119a2d9f..f0fadfcae9b 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInput(int)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).JML normal_behavior operation contract.0.key index 2b6ac5a8de2..be803f58231 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.key index 6c154a3153f..b2da1de5521 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.m.key index 5965bb56e0f..f98a9a2bef1 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage((B)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).JML normal_behavior operation contract.0.key index 2e1cae98e12..001d0a88fd0 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.key index ac590227490..b035cb73d60 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.m.key index 3ca27176d86..a0f509d06e1 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedInputMessage()).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).JML normal_behavior operation contract.0.key index 634b5ff2a46..fd222350aa4 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.key index afeefff2104..a826625e3a3 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.m.key index 356e79e8566..bf42c76f9a1 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutput(int)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).JML normal_behavior operation contract.0.key index bb4d18d20bf..849af93ed89 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.key index 814efef7bd8..326f12ac164 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.m.key index 6f179188fed..f727de4cba9 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Environment(simple_evoting.Environment__untrustedOutputMessage((B)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Message(java.lang.Object___inv_()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Message(java.lang.Object___inv_()).JML accessible clause.0.key index b677f7ee8e1..325d54e1835 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Message(java.lang.Object___inv_()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Message(java.lang.Object___inv_()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key index 972a35ea4f0..fc7d2134d76 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.key index a26667659cb..0a4c98d7671 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.m.key index cc84232c3c8..567055aa9ec 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.NetworkClient(simple_evoting.NetworkClient__send((B,simple_evoting.Server,int)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.0.key index 63b468a3725..891ece2b546 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.1.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.1.key index d0346ab59aa..1947af09729 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.1.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).JML normal_behavior operation contract.1.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.key index e27f0a467e9..5030417f600 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=20000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:off , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:off , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.m.key index e777f088432..02b2033a888 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.key index 7e5a9ab27f9..79d0018a20d 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=15000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.m.key index cf747f44c0f..e6653c5bdad 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMT(simple_evoting.SMT__send(simple_evoting.Message,int,simple_evoting.Server)).Non-interference contract.1.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key index df13f23a8cf..61dbb38cbe8 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.key index 6c662c8459f..41a916fa8c2 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.m.key index 49ca304db36..2ef388b298a 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.SMTEnv(simple_evoting.SMTEnv__send(int,int,int,simple_evoting.Server,int)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(java.lang.Object___inv_()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(java.lang.Object___inv_()).JML accessible clause.0.key index 67fbc5ffb17..6c3f43c05e9 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(java.lang.Object___inv_()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(java.lang.Object___inv_()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.0.key index 52516f8b53a..308932bee9c 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.1.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.1.key index b9e126b0f67..9e5da7a335f 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.1.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onCollectBallot(simple_evoting.Message)).JML normal_behavior operation contract.1.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onSendResult()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onSendResult()).JML normal_behavior operation contract.0.key index 955a05931a2..00370d6b5c9 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onSendResult()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__onSendResult()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML accessible clause.0.key index faa7222fd30..c1b16f968e6 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML normal_behavior operation contract.0.key index dd0083d1c16..5f9d655bda1 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Server(simple_evoting.Server__resultReady()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(java.lang.Object___inv_()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(java.lang.Object___inv_()).JML accessible clause.0.key index 2e6363b5ad5..c00b28dec14 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(java.lang.Object___inv_()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(java.lang.Object___inv_()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).JML normal_behavior operation contract.0.key index 4bcb92c34ff..17e25e2a9a6 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.key index e1d2f20cc96..2bf3b7fa08d 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.m.key index a8646ae5b3f..1860f904f18 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__main()).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).JML normal_behavior operation contract.0.key index c2b2cb77bbb..197397559ea 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.key index f3964890a30..27da977c464 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.m.key index 6c24a490ad6..fea53b4db95 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Setup(simple_evoting.Setup__publishResult()).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(java.lang.Object___inv_()).JML accessible clause.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(java.lang.Object___inv_()).JML accessible clause.0.key index 0db201aca0f..fea7e91d662 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(java.lang.Object___inv_()).JML accessible clause.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(java.lang.Object___inv_()).JML accessible clause.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.0.key index 4110313c65f..dd78664e387 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.1.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.1.key index 009b5c3897b..f5ec6349a0c 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.1.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).JML normal_behavior operation contract.1.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.key index d06abc237bd..12323b3a1d0 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.m.key index a3505a2a16b..8edee775505 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.0.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.key index 10155fbd70d..9fdaf1c6c22 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF diff --git a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.m.key b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.m.key index 59aad78927b..83b1e53207b 100644 --- a/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.m.key +++ b/key.ui/examples/InformationFlow/SimpleEvoting/simple_evoting.Voter(simple_evoting.Voter__onSendBallot(simple_evoting.Server)).Non-interference contract.1.m.key @@ -24,7 +24,7 @@ [Strategy]Timeout=-1 [Strategy]MaximumNumberOfAutomaticApplications=10000 [SMTSettings]integersMaximum=2147483645 -[Choice]DefaultChoices=assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban +[Choice]DefaultChoices=finalFields-finalFields\\:onHeap , assertions-assertions\\:on , initialisation-initialisation\\:disableStaticInitialisation , intRules-intRules\\:arithmeticSemanticsIgnoringOF , programRules-programRules\\:Java , JavaCard-JavaCard\\:on , Strings-Strings\\:on , modelFields-modelFields\\:treatAsAxiom , bigint-bigint\\:on , sequences-sequences\\:on , reach-reach\\:on , integerSimplificationRules-integerSimplificationRules\\:full , wdOperator-wdOperator\\:L , wdChecks-wdChecks\\:off , runtimeExceptions-runtimeExceptions\\:ban [SMTSettings]useConstantsForBigOrSmallIntegers=true [StrategyProperty]STOPMODE_OPTIONS_KEY=STOPMODE_DEFAULT [StrategyProperty]QUERYAXIOM_OPTIONS_KEY=QUERYAXIOM_OFF From 2f599d384a3465559c264b45ed04626446c1fd7e Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sun, 23 Feb 2025 20:35:57 +0100 Subject: [PATCH 26/31] cleaning up code for upcoming review. --- build.gradle | 3 +-- .../uka/ilkd/key/ldt/FinalHeapResolution.java | 2 +- .../key/nparser/builder/ExpressionBuilder.java | 3 +-- .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 2 +- .../java/de/uka/ilkd/key/pp/FinalPrinter.java | 2 +- .../java/de/uka/ilkd/key/pp/SelectPrinter.java | 2 +- .../java/de/uka/ilkd/key/pp/StorePrinter.java | 2 +- .../ilkd/key/proof/init/ProblemInitializer.java | 1 + .../jml/translation/JMLSpecFactory.java | 7 +++++++ .../de/uka/ilkd/key/proof/rules/heap.key | 2 +- .../de/uka/ilkd/key/proof/rules/heapRules.key | 1 + .../key/proof/rules/optionsDeclarations.key | 17 +++++++++++++++-- .../de/uka/ilkd/key/pp/FinalPrinterTest.java | 6 +++--- ...est.java => PrettyPrinterRoundtripTest.java} | 9 ++++++--- 14 files changed, 41 insertions(+), 18 deletions(-) rename key.core/src/test/java/de/uka/ilkd/key/pp/{PPRoundtripTest.java => PrettyPrinterRoundtripTest.java} (91%) diff --git a/build.gradle b/build.gradle index 860ac961fed..55d8e3def5d 100644 --- a/build.gradle +++ b/build.gradle @@ -386,8 +386,7 @@ subprojects { // "-Astubs=$projectDir/src/main/checkerframework", // "-Werror", // "-Aversion", -// -// skipCheckerFramework = true +// ] // } afterEvaluate { // required so project.description is non-null as set by sub build.gradle diff --git a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java index 8f8ececaaf5..72a3736dd7e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java +++ b/key.core/src/main/java/de/uka/ilkd/key/ldt/FinalHeapResolution.java @@ -56,7 +56,7 @@ public static boolean isFinalEnabled(@NonNull ProofSettings settings) { } /** - * Remembers the final fields are treated different from normal fields as immutable data + * Remembers if final fields are treated differently from normal fields as immutable flag * in a thread-local variable that can be recalled later using {@link #recallIsFinalEnabled()}. * * @param initConfig the configuration to read the settings from diff --git a/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java b/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java index 5efcdec8a7d..cb41f9c9fa8 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java +++ b/key.core/src/main/java/de/uka/ilkd/key/nparser/builder/ExpressionBuilder.java @@ -679,8 +679,7 @@ public Term createAttributeTerm(Term prefix, Operator attribute, ParserRuleConte .getFieldSymbolForPV((LocationVariable) pv, getServices()); if (pv.isFinal() && FinalHeapResolution.isFinalEnabled(getServices().getProof().getSettings())) { if(pv.isStatic()) { - // TODO! Make a staticFinalDot method - throw new UnsupportedOperationException("Static final fields are not supported yet. (easy to be added)"); + result = getServices().getTermBuilder().staticFinalDot(pv.sort(), fieldSymbol); } else { result = getServices().getTermBuilder().finalDot(pv.sort(), result, fieldSymbol); } diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index c0a254338f1..7c459b3bc4f 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -156,7 +156,7 @@ protected boolean isBuiltinObjectProperty(Term fieldTerm) { /* * Determine whether a field constant is static. */ - protected boolean isStaticFieldConstant(Term objectTerm, Term fieldTerm) { + protected boolean isStaticFieldConstant(Term fieldTerm) { try { ProgramVariable pv = getJavaFieldConstant(fieldTerm, services.getTypeConverter().getHeapLDT(), services); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java index fc093e4e50c..577cae354e9 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FinalPrinter.java @@ -55,7 +55,7 @@ public void printFinal(LogicPrinter lp, Term t) { } else if (isBuiltinObjectProperty(fieldTerm)) { // object properties denoted like o. printBuiltinObjectProperty(lp, t, objectTerm, fieldTerm); - } else if (isStaticFieldConstant(objectTerm, fieldTerm) + } else if (isStaticFieldConstant(fieldTerm) && getFieldSort(fieldTerm).equals(t.sort())) { // static field access printStaticJavaFieldConstant(lp, fieldTerm); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java index e58b508098d..2cc64601de6 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/SelectPrinter.java @@ -78,7 +78,7 @@ public void printSelect(LogicPrinter lp, Term t, Term tacitHeap) { } else if (ni.isFinalImmutable() && isFinalFieldConstant(fieldTerm)) { // final field access: do not pretty print the sect term but only the final term. lp.printFunctionTerm(t); - } else if (isStaticFieldConstant(objectTerm, fieldTerm) + } else if (isStaticFieldConstant(fieldTerm) && getFieldSort(fieldTerm).equals(t.sort())) { // static field access printStaticJavaFieldConstant(lp, fieldTerm, heapTerm, tacitHeap); diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/StorePrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/StorePrinter.java index b279caa6752..ba9a169c019 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/StorePrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/StorePrinter.java @@ -71,7 +71,7 @@ void printStore(LogicPrinter lp, Term t, boolean closingBrace) { final Term fieldTerm = t.sub(2); final Term valueTerm = t.sub(3); - if (isStaticFieldConstant(objectTerm, fieldTerm)) { + if (isStaticFieldConstant(fieldTerm)) { printStoreOnStaticField(lp, heapTerm, fieldTerm, valueTerm, closingBrace); } else if (isBuiltinObjectProperty(fieldTerm)) { printStoreOnGenericFieldConstant(lp, heapTerm, objectTerm, fieldTerm, valueTerm, diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java index ec119249dd5..36201eb9b40 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/ProblemInitializer.java @@ -600,6 +600,7 @@ public ProofAggregate startProver(InitConfig initConfig, ProofOblInput po) proofCreated(pa); return pa; } catch (Exception e) { + // This has been generalised from ProofInputException to not miss exceptions reportException(po, e); throw e; } finally { diff --git a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java index 13687da63e1..8ab4b1e426b 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java +++ b/key.core/src/main/java/de/uka/ilkd/key/speclang/jml/translation/JMLSpecFactory.java @@ -1567,6 +1567,13 @@ public void translateSetStatement(final SetStatement statement, final IProgramMe new SpecificationRepository.JmlStatementSpec(pv, ImmutableList.of(assignee, value))); } + /** + * If the LHS of a set statement has been translated into a final term, this method undoes this + * encoding since LHS need to be encoded as select terms for KeY's mechanisms to works. + * + * @param assignee the LHS term of an assignment + * @return the term that should be used as the LHS of the assignment + */ private Term resolveFinalAssignee(Term assignee) { if (services.getTypeConverter().getHeapLDT().isFinalOp(assignee.op())) { SortDependingFunction finalOp = assignee.op(SortDependingFunction.class); diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key index 545f0c24582..81271c0d53a 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key @@ -22,7 +22,7 @@ // default value for a field alpha alpha::defaultValue; - // reading from final attributes + // reading from final attributes (corr. to select for non-final fields) alpha alpha::final(Object, Field); // fields diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key index 5c4cabcdfa8..6936e4daea1 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heapRules.key @@ -1354,6 +1354,7 @@ \heuristics(simplify) }; + narrowTypeFinal { \schemaVar \term Object o; \schemaVar \term Field f; diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key index f6c274a3890..6b4660adff5 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/optionsDeclarations.key @@ -233,9 +233,22 @@ }; /*! - Missing documentation + Final fields can only be written to from within the constructor. This is a + Java language feature. KeY can exploit this restriction by treating final fields + as immutable. This can simplify the reasoning about the program significantly. + But it is still possible to tread final fields as normal mutable fields to + ensure backward compatibility. If constructor code is to be inlined, there + can be cases where the immutable treatment is incomplete. */ - finalFields: {immutable, onHeap}; + finalFields: { + /*! Final fields are treated as immutable entities. + This is the default option. */ + immutable, + + /*! Final fields are treated like all Java fields. + This is the original behaviour of KeY. */ + onHeap + }; /*! Missing documentation diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java index f7473a48d12..60d96d79b47 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java @@ -59,7 +59,7 @@ public static Stream casesWithFinal() { @MethodSource("casesWithFinal") public void testPPWithFinal(String termString, String expected) throws Exception { services.getProof().getSettings().getChoiceSettings() - .updateWith(List.of(PPRoundtripTest.WITH_FINAL)); + .updateWith(List.of(PrettyPrinterRoundtripTest.WITH_FINAL)); Term term = io.parseExpression(termString); System.out.println("Original: " + term); LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); @@ -82,7 +82,7 @@ public static Stream casesWithoutFinal() { @MethodSource("casesWithoutFinal") public void testPPWithoutFinal(String termString, String expected) throws Exception { services.getProof().getSettings().getChoiceSettings() - .updateWith(List.of(PPRoundtripTest.WITHOUT_FINAL)); + .updateWith(List.of(PrettyPrinterRoundtripTest.WITHOUT_FINAL)); Term term = io.parseExpression(termString); System.out.println("Original: " + term); LogicPrinter lp = LogicPrinter.purePrinter(new NotationInfo(), services); @@ -102,7 +102,7 @@ private void assertEqualModAlpha(Term expected, Term actual) { } private static Services getServices() { - URL url = de.uka.ilkd.key.pp.PPRoundtripTest.class.getResource("roundTripTest.key"); + URL url = PrettyPrinterRoundtripTest.class.getResource("roundTripTest.key"); assert url != null : "Could not find roundTripTest.key"; assert "file".equals(url.getProtocol()) : "URL is not a file URL"; File keyFile = new File(url.getPath()); diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/PrettyPrinterRoundtripTest.java similarity index 91% rename from key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java rename to key.core/src/test/java/de/uka/ilkd/key/pp/PrettyPrinterRoundtripTest.java index 13e0447b81c..c887de8d9dc 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/PPRoundtripTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/PrettyPrinterRoundtripTest.java @@ -30,7 +30,7 @@ * * @author Mattias Ulbrich */ -public class PPRoundtripTest { +public class PrettyPrinterRoundtripTest { public static final Choice WITH_FINAL = new Choice("immutable", "finalFields"); public static final Choice WITHOUT_FINAL = new Choice("onHeap", "finalFields"); @@ -56,7 +56,10 @@ public static void tearDown() { // "-1r", "-1f", "1.1f+0f", - // "union(empty, empty)", + // "union(empty, empty)", + "(1 + 2) + 3", "1 + (2 + 3)", // for associativity checks + "(true -> true) -> true", "true -> (true -> true)", // for associativity checks + "(true & true) & true", "true & (true & true)", // for associativity checks }; private static final String[] HEAP_CASES = { @@ -118,7 +121,7 @@ private void assertEqualModAlpha(Term expected, Term actual) { } private static Services getServices() { - URL url = PPRoundtripTest.class.getResource("roundTripTest.key"); + URL url = PrettyPrinterRoundtripTest.class.getResource("roundTripTest.key"); assert url != null : "Could not find roundTripTest.key"; assert "file".equals(url.getProtocol()) : "URL is not a file URL"; File keyFile = new File(url.getPath()); From e9957404909bae9c6c757dda4ed210d021da0fce Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Wed, 26 Feb 2025 21:14:41 +0100 Subject: [PATCH 27/31] taking static final fields into account for createdness proofs. --- .../resources/de/uka/ilkd/key/proof/rules/locSetsRules.key | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key index 36fe1753378..a1f63101ffb 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/locSetsRules.key @@ -1356,9 +1356,9 @@ deltaObject::final(o, f), java.lang.Object::) = TRUE ) - \replacewith( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) + \replacewith( ==> boolean::select(h, o, java.lang.Object::) = TRUE | o = null ) - \heuristics(concrete) + \heuristics(simplify_enlarging) }; referencedObjectIsCreatedRighFinalEQ { @@ -1372,7 +1372,7 @@ EQ, java.lang.Object::) = TRUE) - \add( ==> boolean::select(h, o, java.lang.Object::) = TRUE ) + \add( ==> boolean::select(h, o, java.lang.Object::) = TRUE | o = null ) \heuristics(concrete) }; From 9bb8e45eb4e4b674728cd67a278cd45b6d1539cf Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Fri, 28 Feb 2025 13:58:47 +0100 Subject: [PATCH 28/31] addressing the review --- .../java/de/uka/ilkd/key/pp/FieldPrinter.java | 3 ++ .../proof/init/FinalFieldCodeValidator.java | 27 ++++++++---- .../proof/init/FinalFieldsPOExtension.java | 3 +- .../de/uka/ilkd/key/proof/rules/heap.key | 2 +- .../de/uka/ilkd/key/proof/rules/javaRules.key | 6 +++ .../de/uka/ilkd/key/pp/FinalPrinterTest.java | 41 ++++++++----------- .../ilkd/key/gui/help/choiceExplanations.xml | 17 ++++++++ 7 files changed, 64 insertions(+), 35 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java index 7c459b3bc4f..ab5df90f2bf 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java +++ b/key.core/src/main/java/de/uka/ilkd/key/pp/FieldPrinter.java @@ -131,6 +131,9 @@ protected static boolean isFieldConstant(Term fieldTerm, HeapLDT heapLDT) { protected static boolean isJavaFieldConstant(Term fieldTerm, HeapLDT heapLDT, Services services) { try { + // the called method either returns a ProgramVariable or throws an exception + // We are only interested in whether the method throws an exception or not, so we + // ignore the return value. getJavaFieldConstant(fieldTerm, heapLDT, services); return true; } catch (RuntimeException e) { diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index 346ca4772e5..63981388b2d 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -10,7 +10,9 @@ import de.uka.ilkd.key.java.*; import de.uka.ilkd.key.java.abstraction.ClassType; import de.uka.ilkd.key.java.abstraction.KeYJavaType; +import de.uka.ilkd.key.java.abstraction.Type; import de.uka.ilkd.key.java.expression.Assignment; +import de.uka.ilkd.key.java.expression.operator.New; import de.uka.ilkd.key.java.reference.*; import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.ProgramMethod; @@ -139,8 +141,8 @@ private void validate(IProgramMethod method) { private void validateProgramElement(SyntaxElement element) { if (element instanceof MethodReference methodReference) { validateMethodReference(methodReference); - } else if (element instanceof ConstructorReference constructorReference) { - validateConstructorReference(constructorReference); + } else if (element instanceof New _new) { + validateNew(_new); } else if (element instanceof FieldReference fieldReference) { validateFieldReference(fieldReference); } else if (element instanceof Assignment assignment) { @@ -165,18 +167,27 @@ private void validateChildren(SyntaxElement element) { /* * Constructor calls must not leak 'this' to the called constructor. */ - private void validateConstructorReference(ConstructorReference methodReference) { - // TODO We have to make sure that on non-static subclass is instantiated here + private void validateNew(New _new) { + + TypeReference typeRef = _new.getTypeReference(); + Type type = typeRef.getKeYJavaType().getJavaType(); + if (type instanceof ClassType classType && !classType.isStatic()) { + // This also disallows things like "a.new B()" which would not like this. However, + // KeY cannot deal with this anyway, so we can do the easy check here. + throw new FinalViolationException( + "Call to non-static inner class " + classType + " leaks 'this' to the constructor", + _new); + } + var hasThisArgument = - methodReference.getArguments().stream().anyMatch(ThisReference.class::isInstance); + _new.getArguments().stream().anyMatch(ThisReference.class::isInstance); if (hasThisArgument) { throw new FinalViolationException( - "Method call " + methodReference + " leaks 'this' to called method.", - methodReference); + "Method call " + _new + " leaks 'this' to called method.", _new); } - validateChildren(methodReference); + validateChildren(_new); } /* diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 827021d648f..26ae111fd3e 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -57,7 +57,8 @@ public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfi // We know this holds because of isPOSupported: FunctionalOperationContractPO fpo = (FunctionalOperationContractPO) abstractPO; IProgramMethod iconstructor = fpo.getProgramMethod(); - assert iconstructor instanceof ProgramMethod : "Contracts cannot have schema "; + assert iconstructor instanceof ProgramMethod + : "Expected a ProgramMethod not a schema variable, since we need the actual implementation"; ProgramMethod constructor = (ProgramMethod) iconstructor; FinalFieldCodeValidator.validateFinalFields(constructor, proofConfig); diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key index 81271c0d53a..87896efa8da 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/heap.key @@ -22,7 +22,7 @@ // default value for a field alpha alpha::defaultValue; - // reading from final attributes (corr. to select for non-final fields) + // reading from final attributes (corresponds to select for non-final fields) alpha alpha::final(Object, Field); // fields diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key index 7ccce242b99..3c6de5a5809 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key @@ -3804,7 +3804,9 @@ \heuristics(simplify_prog, simplify_prog_subset) \displayname "active_attribute_access" }; +} +\rules(programRules:Java, finalFields:onHeap) { // TODO 2 variants with different taclet options assignment_read_static_attribute { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) @@ -3819,7 +3821,9 @@ } \heuristics(simplify_prog, simplify_prog_subset) }; +} +\rules(programRules:Java, finalFields:immutable) { assignment_read_static_attribute_final { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) \sameUpdateLevel @@ -3833,7 +3837,9 @@ } \heuristics(simplify_prog, simplify_prog_subset) }; +} +\rules(programRules:Java) { // constant case cannot occur as no static initilisation handling happens assignment_read_static_attribute_with_variable_prefix { \find(\modality{#allmodal}{.. #loc = @(#v.#sv); ...}\endmodality (post)) diff --git a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java index 60d96d79b47..476d701d849 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/pp/FinalPrinterTest.java @@ -6,7 +6,6 @@ import java.io.File; import java.net.URL; import java.util.List; -import java.util.stream.Stream; import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.logic.Choice; @@ -18,8 +17,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.CsvSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -45,18 +43,15 @@ public static void tearDown() { io = null; } - public static Stream casesWithFinal() { - return Stream.of( - Arguments.of("int::select(heap, self, C::$f)", "self.f"), - Arguments.of("int::select(heap, self, C::$finf)", "int::select(heap, self, C::$finf)"), - Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), - Arguments.of("int::final(self, C::$finf)", "self.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)")); - } - @ParameterizedTest(name = "{0} => {1}") - @MethodSource("casesWithFinal") + @CsvSource(delimiter = ';', textBlock = """ + int::select(heap, self, C::$f); self.f + int::select(heap, self, C::$finf); int::select(heap, self, C::$finf) + int::final(sub, Csub::$finf); sub.finf + int::final(sub, C::$finf); sub.(C::finf) + int::final(self, C::$finf); self.finf + int::final(sub, C::$finf); sub.(C::finf) + """) public void testPPWithFinal(String termString, String expected) throws Exception { services.getProof().getSettings().getChoiceSettings() .updateWith(List.of(PrettyPrinterRoundtripTest.WITH_FINAL)); @@ -68,18 +63,14 @@ public void testPPWithFinal(String termString, String expected) throws Exception assertEquals(expected, printed); } - public static Stream casesWithoutFinal() { - return Stream.of( - Arguments.of("int::final(sub, Csub::$finf)", "sub.finf"), - Arguments.of("int::final(sub, C::$finf)", "sub.(C::finf)"), - Arguments.of("int::final(self, C::$finf)", "self.finf"), - Arguments.of("int::select(heap, self, C::$f)", "self.f"), - Arguments.of("int::select(heap, self, C::$finf)", "self.finf")); - } - - @ParameterizedTest(name = "{0} => {1}") - @MethodSource("casesWithoutFinal") + @CsvSource(delimiter = ';', textBlock = """ + int::final(sub, Csub::$finf); sub.finf + int::final(sub, C::$finf); sub.(C::finf) + int::final(self, C::$finf); self.finf + int::select(heap, self, C::$f); self.f + int::select(heap, self, C::$finf); self.finf + """) public void testPPWithoutFinal(String termString, String expected) throws Exception { services.getProof().getSettings().getChoiceSettings() .updateWith(List.of(PrettyPrinterRoundtripTest.WITHOUT_FINAL)); diff --git a/key.ui/src/main/resources/de/uka/ilkd/key/gui/help/choiceExplanations.xml b/key.ui/src/main/resources/de/uka/ilkd/key/gui/help/choiceExplanations.xml index d63e44a11e3..84eafb56c71 100644 --- a/key.ui/src/main/resources/de/uka/ilkd/key/gui/help/choiceExplanations.xml +++ b/key.ui/src/main/resources/de/uka/ilkd/key/gui/help/choiceExplanations.xml @@ -231,5 +231,22 @@ Treatment of formulas and terms for welldefinedness checks: Welldefinedness checks of JML specifications can be turned on/off. This includes class invariants, operation contracts, model fields as well as JML (annotation) statements as loop invariants and block contracts. The former ones are checked "on-the-fly", i.e., directly when they are applied in the code while proving an operation contract, since the context is needed. + + +Final fields can only be written to from within the constructor. This is a +Java language feature. KeY can exploit this restriction by treating final fields +as immutable. This can simplify the reasoning about the program significantly. +But it is still possible to tread final fields as normal mutable fields to +ensure backward compatibility. If constructor code is to be inlined, there +can be cases where the immutable treatment is incomplete. + +immutable: + Final fields are treated as immutable entities. + This is the default option. + +onHeap: + Final fields are treated like all Java fields. + This is the original behaviour of KeY. + From fe0954a5b6c13d9a773d0a70a8b5c6ea090f9e13 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Sat, 1 Mar 2025 16:47:44 +0100 Subject: [PATCH 29/31] adding missing rule for final static fields --- .../de/uka/ilkd/key/proof/rules/javaRules.key | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key index 3c6de5a5809..054d8197df0 100644 --- a/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key +++ b/key.core/src/main/resources/de/uka/ilkd/key/proof/rules/javaRules.key @@ -3807,11 +3807,10 @@ } \rules(programRules:Java, finalFields:onHeap) { - // TODO 2 variants with different taclet options assignment_read_static_attribute { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) \sameUpdateLevel - \varcond(\hasSort(#sv, G), \not \final(#sv)) + \varcond(\hasSort(#sv, G)) \replacewith({#v0 := G::select(heap, null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality (post)) ; (permissions:on) { @@ -3824,6 +3823,20 @@ } \rules(programRules:Java, finalFields:immutable) { + assignment_read_static_attribute { + \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) + \sameUpdateLevel + \varcond(\hasSort(#sv, G), \not\final(#sv)) + \replacewith({#v0 := G::select(heap, null, #memberPVToField(#sv))}\modality{#allmodal}{.. ...}\endmodality (post)) + ; + (permissions:on) { + "Read Permission to #sv": + \replacewith(\modality{#allmodal}{.. assert false : "Access permission check-point (static read)."; ...}\endmodality (post)) + \add( ==> readPermission(Permission::select(permissions, null, #memberPVToField(#sv)))) + } + \heuristics(simplify_prog, simplify_prog_subset) + }; + assignment_read_static_attribute_final { \find(\modality{#allmodal}{.. #v0 = @(#sv); ...}\endmodality (post)) \sameUpdateLevel From d35ef21070181f04025f05058396acd59d91a599 Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Mon, 3 Mar 2025 19:03:57 +0100 Subject: [PATCH 30/31] repairing the check of inner class constructor calls and updating test cases --- .../proof/init/FinalFieldCodeValidator.java | 4 ++- .../runallproofs/RunAllProofsTestUnit.java | 6 ++++ .../de/uka/ilkd/key/nparser/taclets.old.txt | 29 +++++++++++++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index 63981388b2d..a320d89d318 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -11,6 +11,7 @@ import de.uka.ilkd.key.java.abstraction.ClassType; import de.uka.ilkd.key.java.abstraction.KeYJavaType; import de.uka.ilkd.key.java.abstraction.Type; +import de.uka.ilkd.key.java.declaration.ClassDeclaration; import de.uka.ilkd.key.java.expression.Assignment; import de.uka.ilkd.key.java.expression.operator.New; import de.uka.ilkd.key.java.reference.*; @@ -171,7 +172,8 @@ private void validateNew(New _new) { TypeReference typeRef = _new.getTypeReference(); Type type = typeRef.getKeYJavaType().getJavaType(); - if (type instanceof ClassType classType && !classType.isStatic()) { + if (type instanceof ClassDeclaration classType && classType.isInnerClass() + && !classType.isStatic()) { // This also disallows things like "a.new B()" which would not like this. However, // KeY cannot deal with this anyway, so we can do the easy check here. throw new FinalViolationException( diff --git a/key.core/src/test/java/de/uka/ilkd/key/proof/runallproofs/RunAllProofsTestUnit.java b/key.core/src/test/java/de/uka/ilkd/key/proof/runallproofs/RunAllProofsTestUnit.java index c5d44556514..e88d331c0ff 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/proof/runallproofs/RunAllProofsTestUnit.java +++ b/key.core/src/test/java/de/uka/ilkd/key/proof/runallproofs/RunAllProofsTestUnit.java @@ -121,6 +121,7 @@ public TestResult runTest(JunitXmlWriter xml) throws Exception { boolean success = true; StringBuilder message = new StringBuilder("group " + testName + ":\n"); + StringBuilder summary = new StringBuilder("Summary of test results:\n"); for (int i = 0; i < testResults.size(); i++) { var start = System.currentTimeMillis(); TestFile file = testFiles.get(i); @@ -133,7 +134,12 @@ public TestResult runTest(JunitXmlWriter xml) throws Exception { !testResult.success() ? "error" : "", testResult.message(), "", time / 1000.0); success &= testResult.success(); message.append(testResult.message()).append("\n"); + summary.append(String.format(" %s (%s): %s%n", + file.getKeYFile().getName(), + file.getTestProperty(), + testResult.success() ? "success" : "FAILURE")); } + message.insert(0, summary); return new TestResult(message.toString(), success); } diff --git a/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt b/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt index 726851104c9..7f6adc7f65d 100644 --- a/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt +++ b/key.core/src/test/resources/de/uka/ilkd/key/nparser/taclets.old.txt @@ -1,5 +1,5 @@ # This files contains representation of taclets, which are accepted and revised. -# Date: Fri Dec 13 23:01:56 CET 2024 +# Date: Mon Mar 03 18:42:58 CET 2025 == abortJavaCardTransactionAPI (abortJavaCardTransactionAPI) ========================================= abortJavaCardTransactionAPI { @@ -1906,7 +1906,7 @@ assignment_read_static_attribute { \sameUpdateLevel\varcond(\hasSort(#sv (program StaticVariable), G), \not \final(#sv (program StaticVariable))) \replacewith(update-application(elem-update(#v0 (program Variable))(G::select(heap,null,#memberPVToField(#sv))),#allmodal(post))) \heuristics(simplify_prog_subset, simplify_prog) -Choices: programRules:Java} +Choices: (programRules:Java & finalFields:immutable)} ----------------------------------------------------- == assignment_read_static_attribute_final (assignment_read_static_attribute_final) ========================================= assignment_read_static_attribute_final { @@ -1916,7 +1916,7 @@ assignment_read_static_attribute_final { \sameUpdateLevel\varcond(\hasSort(#sv (program StaticVariable), G), \final(#sv (program StaticVariable))) \replacewith(update-application(elem-update(#v0 (program Variable))(G::final(null,#memberPVToField(#sv))),#allmodal(post))) \heuristics(simplify_prog_subset, simplify_prog) -Choices: programRules:Java} +Choices: (programRules:Java & finalFields:immutable)} ----------------------------------------------------- == assignment_read_static_attribute_with_variable_prefix (assignment) ========================================= assignment_read_static_attribute_with_variable_prefix { @@ -7278,6 +7278,13 @@ equal_literals { \heuristics(simplify_literals) Choices: true} ----------------------------------------------------- +== equalityOfSingleton (equalityOfSingleton) ========================================= +equalityOfSingleton { +\find(equals(singleton(o1,f1),singleton(o2,f2))) +\replacewith(and(equals(o1,o2),equals(f1,f2))) +\heuristics(simplify) +Choices: programRules:Java} +----------------------------------------------------- == equalityToElementOf (equalityToElementOf) ========================================= equalityToElementOf { \find(equals(s,s2)) @@ -15150,6 +15157,14 @@ reference_type_cast { \heuristics(simplify_prog) Choices: (programRules:Java & runtimeExceptions:ban)} ----------------------------------------------------- +== referencedObjectIsCreatedRighFinalEQ (referencedObjectIsCreatedRighFinalEQ) ========================================= +referencedObjectIsCreatedRighFinalEQ { +\assumes ([equals(deltaObject::final(o,f),EQ)]==>[equals(EQ,null)]) +\find(==>equals(boolean::select(h,EQ,java.lang.Object::),TRUE)) +\add []==>[or(equals(boolean::select(h,o,java.lang.Object::),TRUE),equals(o,null))] +\heuristics(concrete) +Choices: programRules:Java} +----------------------------------------------------- == referencedObjectIsCreatedRight (referencedObjectIsCreatedRight) ========================================= referencedObjectIsCreatedRight { \assumes ([]==>[equals(deltaObject::select(h,o,f),null)]) @@ -15166,6 +15181,14 @@ referencedObjectIsCreatedRightEQ { \heuristics(concrete) Choices: programRules:Java} ----------------------------------------------------- +== referencedObjectIsCreatedRightFinal (referencedObjectIsCreatedRightFinal) ========================================= +referencedObjectIsCreatedRightFinal { +\assumes ([]==>[equals(deltaObject::final(o,f),null)]) +\find(==>equals(boolean::select(h,deltaObject::final(o,f),java.lang.Object::),TRUE)) +\replacewith([]==>[or(equals(boolean::select(h,o,java.lang.Object::),TRUE),equals(o,null))]) +\heuristics(simplify_enlarging) +Choices: programRules:Java} +----------------------------------------------------- == regExAxiom (regExAxiom) ========================================= regExAxiom { \find(match(regEx(stringAsPattern),string)) From aa0f53e5c303204b177699d868758bc6c2ccc8fe Mon Sep 17 00:00:00 2001 From: Mattias Ulbrich Date: Wed, 5 Mar 2025 14:03:57 +0100 Subject: [PATCH 31/31] improving error feedback (though the info is not present anyway) --- .../proof/init/FinalFieldCodeValidator.java | 34 +++++++++++-------- .../proof/init/FinalFieldsPOExtension.java | 7 +++- .../init/FinalFieldCodeValidatorTest.java | 6 ++-- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java index a320d89d318..777a652b6c1 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidator.java @@ -18,6 +18,8 @@ import de.uka.ilkd.key.logic.op.IProgramMethod; import de.uka.ilkd.key.logic.op.ProgramMethod; import de.uka.ilkd.key.logic.op.ProgramVariable; +import de.uka.ilkd.key.parser.Location; +import de.uka.ilkd.key.util.parsing.LocatableException; import org.key_project.logic.SyntaxElement; import org.key_project.util.collection.IdentityHashSet; @@ -177,7 +179,8 @@ private void validateNew(New _new) { // This also disallows things like "a.new B()" which would not like this. However, // KeY cannot deal with this anyway, so we can do the easy check here. throw new FinalViolationException( - "Call to non-static inner class " + classType + " leaks 'this' to the constructor", + "Constructor call to non-static inner class " + classType.getFullName() + + " leaks 'this' to the constructor", _new); } @@ -204,12 +207,14 @@ private void validateMethodReference(MethodReference methodReference) { if (hasThisArgument) { throw new FinalViolationException( - "Method call " + methodReference + " leaks 'this' to called method.", + "Method call to " + methodReference.getName() + " leaks 'this' to called method.", methodReference); } if (calledOnThis) { IProgramMethod method = findMethod(methodReference); + assert !method.isConstructor() + : "Constructor calls should have been handled by the New handler above."; if (method.isStatic() || method.isConstructor()) { // local static methods are acutally fine ... // constructor calls are also fine @@ -219,7 +224,9 @@ private void validateMethodReference(MethodReference methodReference) { if (!method.isFinal() && !method.isPrivate() && !((ClassType) enclosingClass.getJavaType()).isFinal()) { throw new FinalViolationException( - "Method called on 'this' that is not effectively final.", methodReference); + "Method to " + method.getFullName() + + " called on 'this' that is not effectively final.", + methodReference); } validate(method); } @@ -266,25 +273,24 @@ private void validateFieldReference(FieldReference fieldReference) { validateChildren(fieldReference); } - static class FinalViolationException extends RuntimeException { - - private final PositionInfo position; + static class FinalViolationException extends LocatableException { public FinalViolationException(String message) { this(message, null); } public FinalViolationException(String message, SyntaxElement syntaxElement) { - super(message); - if (syntaxElement instanceof SourceElement sourceElement) { - this.position = sourceElement.getPositionInfo(); - } else { - this.position = null; - } + super(message, computeLocation(syntaxElement)); } - public PositionInfo getPositionInfo() { - return position; + private static Location computeLocation(SyntaxElement syntaxElement) { + if (syntaxElement instanceof SourceElement sourceElement) { + PositionInfo posInfo = sourceElement.getPositionInfo(); + var uri = posInfo.getURI().orElse(null); + var pos = posInfo.getStartPosition(); + return new Location(uri, pos); + } + return Location.UNDEFINED; } } } diff --git a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java index 26ae111fd3e..dfd5bae466a 100644 --- a/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java +++ b/key.core/src/main/java/de/uka/ilkd/key/proof/init/FinalFieldsPOExtension.java @@ -61,10 +61,15 @@ public Term modifyPostTerm(AbstractOperationPO abstractPO, InitConfig proofConfi : "Expected a ProgramMethod not a schema variable, since we need the actual implementation"; ProgramMethod constructor = (ProgramMethod) iconstructor; + List finalFields = findFinalFields(iconstructor, services); + if (finalFields.isEmpty()) { + // If there are no final fields, we do not need to do anything + return postTerm; + } + FinalFieldCodeValidator.validateFinalFields(constructor, proofConfig); TermBuilder tb = services.getTermBuilder(); - List finalFields = findFinalFields(iconstructor, services); Term self = tb.var(selfVar); for (JFunction finalField : finalFields) { Term fieldRef = tb.tf().createTerm(finalField); diff --git a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java index 49150669cb9..d51121204d3 100644 --- a/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java +++ b/key.core/src/test/java/de/uka/ilkd/key/proof/init/FinalFieldCodeValidatorTest.java @@ -4,6 +4,7 @@ package de.uka.ilkd.key.proof.init; import java.io.File; +import java.net.MalformedURLException; import java.net.URL; import java.util.HashSet; import java.util.Set; @@ -70,13 +71,14 @@ private Stream testContracts(boolean shouldfail, String directory) () -> testConstructor(c, env))); } - private void testConstructor(Contract c, KeYEnvironment env) throws ProofInputException { + private void testConstructor(Contract c, KeYEnvironment env) + throws ProofInputException, MalformedURLException { try { // System.out.println("Contract id: " + c.getName()); ContractPO po = c.createProofObl(env.getInitConfig()); env.createProof(po); } catch (FinalFieldCodeValidator.FinalViolationException fex) { - System.err.println("Position: " + fex.getPositionInfo()); + System.err.println("Position: " + fex.getLocation()); fex.printStackTrace(); throw fex; }